summaryrefslogtreecommitdiff
path: root/Build/source/libs
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-01-16 23:21:19 +0000
committerKarl Berry <karl@freefriends.org>2022-01-16 23:21:19 +0000
commite5a4f2edfd4df595b47990d5228aba0c4dc038bd (patch)
tree80259a729122ee1f04a33a2f960c6b993156a528 /Build/source/libs
parent5176866c6a12a2d1d36fe4fd7892573dd0de81c6 (diff)
icu 70.1
git-svn-id: svn://tug.org/texlive/trunk@61625 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs')
-rw-r--r--Build/source/libs/README5
-rw-r--r--Build/source/libs/icu/ChangeLog5
-rw-r--r--Build/source/libs/icu/TLpatches/ChangeLog7
-rw-r--r--Build/source/libs/icu/TLpatches/TL-Changes6
-rw-r--r--Build/source/libs/icu/TLpatches/patch-01-configure-gcc12
-rw-r--r--Build/source/libs/icu/TLpatches/patch-02-configure-solaris6
-rw-r--r--Build/source/libs/icu/TLpatches/patch-10-ES4
-rw-r--r--Build/source/libs/icu/TLpatches/patch-12-mingw4
-rw-r--r--Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX8
-rw-r--r--Build/source/libs/icu/TLpatches/patch-14-xopen4
-rw-r--r--Build/source/libs/icu/TLpatches/patch-19-netbsd4
-rw-r--r--Build/source/libs/icu/TLpatches/patch-20-private8
-rw-r--r--Build/source/libs/icu/TLpatches/patch-22-max_align_t51
-rw-r--r--Build/source/libs/icu/TLpatches/patch-24-simulator13
-rwxr-xr-xBuild/source/libs/icu/configure20
-rw-r--r--Build/source/libs/icu/icu-src/APIChangeReport.html1432
-rw-r--r--Build/source/libs/icu/icu-src/APIChangeReport.md944
-rw-r--r--Build/source/libs/icu/icu-src/LICENSE32
-rw-r--r--Build/source/libs/icu/icu-src/readme.html1892
-rw-r--r--Build/source/libs/icu/icu-src/source/Doxyfile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/aclocal.m456
-rw-r--r--Build/source/libs/icu/icu-src/source/allinone/Build.Windows.Library.WarningSettings.ProjectConfiguration.props2
-rw-r--r--Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props7
-rw-r--r--Build/source/libs/icu/icu-src/source/allinone/allinone.sln22
-rw-r--r--Build/source/libs/icu/icu-src/source/common/BUILD1213
-rw-r--r--Build/source/libs/icu/icu-src/source/common/brkeng.cpp39
-rw-r--r--Build/source/libs/icu/icu-src/source/common/brkeng.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/brkiter.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp32
-rw-r--r--Build/source/libs/icu/icu-src/source/common/caniter.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/characterproperties.cpp28
-rw-r--r--Build/source/libs/icu/icu-src/source/common/charstr.cpp34
-rw-r--r--Build/source/libs/icu/icu-src/source/common/charstr.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/common/cmemory.h55
-rw-r--r--Build/source/libs/icu/icu-src/source/common/common.vcxproj8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/cstr.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/dictbe.cpp79
-rw-r--r--Build/source/libs/icu/icu-src/source/common/dictbe.h252
-rw-r--r--Build/source/libs/icu/icu-src/source/common/dictionarydata.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/dtintrv.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/edits.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/common/emojiprops.cpp220
-rw-r--r--Build/source/libs/icu/icu-src/source/common/emojiprops.h90
-rw-r--r--Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp140
-rw-r--r--Build/source/libs/icu/icu-src/source/common/hash.h19
-rw-r--r--Build/source/libs/icu/icu-src/source/common/icuplug.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/localebuilder.cpp16
-rw-r--r--Build/source/libs/icu/icu-src/source/common/localematcher.cpp18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp11
-rw-r--r--Build/source/libs/icu/icu-src/source/common/locdispnames.cpp18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/locdspnm.cpp68
-rw-r--r--Build/source/libs/icu/icu-src/source/common/locid.cpp314
-rw-r--r--Build/source/libs/icu/icu-src/source/common/loclikely.cpp41
-rw-r--r--Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/common/lsr.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/lsr.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/lstmbe.cpp855
-rw-r--r--Build/source/libs/icu/icu-src/source/common/lstmbe.h87
-rw-r--r--Build/source/libs/icu/icu-src/source/common/messagepattern.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/msvcres.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h763
-rw-r--r--Build/source/libs/icu/icu-src/source/common/norm2allmodes.h82
-rw-r--r--Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp156
-rw-r--r--Build/source/libs/icu/icu-src/source/common/normalizer2impl.h15
-rw-r--r--Build/source/libs/icu/icu-src/source/common/normlzr.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/pluralmap.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/propname_data.h1935
-rw-r--r--Build/source/libs/icu/icu-src/source/common/putil.cpp13
-rw-r--r--Build/source/libs/icu/icu-src/source/common/putilimp.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbi.cpp25
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp12
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/common/rbbicst.pl6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbidata.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbidata.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbinode.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbinode.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbirb.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbirpt.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp16
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbiscan.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp31
-rw-r--r--Build/source/libs/icu/icu-src/source/common/rbbitblb.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/resbund.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/resource.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/restrace.cpp3
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ruleiter.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/schriter.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/serv.cpp101
-rw-r--r--Build/source/libs/icu/icu-src/source/common/serv.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/common/servloc.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/common/servls.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/servnotf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/servnotf.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/sources.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp48
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uarrsort.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uassert.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubidi.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h1391
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubidiln.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ubrk.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucase.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucase_props_data.h1176
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uchar.cpp38
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uchar_props_data.h7112
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucharstriebuilder.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uchriter.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucln_cmn.h1
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucmndata.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucmndata.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_err.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_imp.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_lmb.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_u32.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnv_u7.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnvisci.cpp22
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnvmbcs.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucnvscsu.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucptrie_impl.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ucurr.cpp11
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uelement.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uhash.cpp85
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uhash.h105
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uloc.cpp113
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uloc_keytype.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp53
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ulocimp.h71
-rw-r--r--Build/source/libs/icu/icu-src/source/common/umapfile.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/appendable.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h43
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/caniter.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/chariter.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/docmain.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/locid.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/platform.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h46
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/resbund.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/schriter.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/strenum.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h21
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h23
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uchar.h132
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h52
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h15
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/udata.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uloc.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/unifilt.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/unifunct.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uniset.h141
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/unistr.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/unorm.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uobject.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/urename.h25
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ures.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uscript.h13
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uset.h181
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h60
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ushape.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/ustring.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utrace.h17
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/utypes.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unifiedcache.h72
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uniset.cpp245
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uniset_props.cpp126
-rw-r--r--Build/source/libs/icu/icu-src/source/common/unisetspan.cpp25
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uprops.cpp45
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uprops.h68
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uresbund.cpp905
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uresdata.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uresdata.h47
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uresimp.h67
-rw-r--r--Build/source/libs/icu/icu-src/source/common/usc_impl.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uscript_props.cpp5
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uset.cpp52
-rw-r--r--Build/source/libs/icu/icu-src/source/common/usprep.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustack.cpp5
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustr_titlecase_brkiter.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustr_wcs.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustrcase.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustrenum.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustrenum.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/ustring.cpp58
-rw-r--r--Build/source/libs/icu/icu-src/source/common/utext.cpp22
-rw-r--r--Build/source/libs/icu/icu-src/source/common/util.cpp64
-rw-r--r--Build/source/libs/icu/icu-src/source/common/util.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/common/util_props.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/utrace.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/common/utracimp.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uts46.cpp16
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvector.cpp232
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvector.h231
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvectr32.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvectr32.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvectr64.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/uvectr64.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/common/wintz.cpp26
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/config/dist-data.sh8
-rw-r--r--Build/source/libs/icu/icu-src/source/config/dist.mk2
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-aix-gcc4
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-cygwin-msvc4
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-mingw15
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-mingw6415
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-mpras2
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-msys-msvc4
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-os3902
-rw-r--r--Build/source/libs/icu/icu-src/source/config/mh-solaris4
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/configure95
-rw-r--r--Build/source/libs/icu/icu-src/source/configure.ac22
-rw-r--r--Build/source/libs/icu/icu-src/source/data/BUILDRULES.py51
-rw-r--r--Build/source/libs/icu/icu-src/source/data/Makefile.in4
-rw-r--r--Build/source/libs/icu/icu-src/source/data/build.xml13
-rw-r--r--Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt15
-rw-r--r--Build/source/libs/icu/icu-src/source/data/dtd/cldr-40/common/dtd/ldml.dtd3212
-rw-r--r--Build/source/libs/icu/icu-src/source/data/dtd/cldr-40/common/dtd/ldmlICU.dtd119
-rw-r--r--Build/source/libs/icu/icu-src/source/data/icu4j-readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icubin185274 -> 189492 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icubin546334 -> 550680 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/icudt70l.dat (renamed from Build/source/libs/icu/icu-src/source/data/in/icudt68l.dat)bin19163040 -> 19910752 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/nfc.nrmbin35124 -> 35292 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/nfkc.nrmbin54136 -> 54720 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrmbin51472 -> 52076 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/pnames.icubin42682 -> 43906 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/ubidi.icubin26636 -> 27320 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/ucase.icubin28898 -> 30002 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/uemoji.icubin0 -> 12986 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/ulayout.icubin13488 -> 13664 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/unames.icubin283932 -> 293412 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/uprops.icubin135656 -> 138568 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/in/uts46.nrmbin58404 -> 59264 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/data/makedata.mak6
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt46
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt698
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt144
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt28893
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt845
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt881
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt837
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/changes.txt360
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/data/unidata/clean.sh20
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt12
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/emoji-sequences.txt1469
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/emoji-zwj-sequences.txt1410
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/data/unidata/generate.sh46
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/BUILD13
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt23
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt61
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt103
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt307
-rw-r--r--Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt1756
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/extra/uconv/resources/root.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/BUILD130
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/alphaindex.cpp29
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/anytrans.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/astro.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/astro.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/basictz.cpp163
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/brktrans.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/brktrans.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/buddhcal.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/calendar.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/casetrn.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/cecal.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/chnsecal.h34
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/choicfmt.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/coleitr.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/coll.cpp36
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collation.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationbuilder.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.cpp26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp106
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationiterator.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationiterator.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationkeys.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationsettings.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/collationsettings.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/coptccal.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/cpdtrans.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csdetect.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csr2022.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csr2022.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csrmbcs.cpp16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csrmbcs.h50
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csrsbcs.h92
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csrucode.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csrucode.h24
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csrutf8.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/csrutf8.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/currfmt.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/currpinf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dangical.cpp45
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dangical.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/datefmt.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp22
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/decContext.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/decNumber.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/decNumberLocal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp89
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-bignum-dtoa.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.h87
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-fast-dtoa.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp64
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h5
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtfmtsym.cpp65
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp69
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp102
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h24
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/dtrule.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/esctrn.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ethpccal.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp18
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/format.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp162
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/fpositer.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/funcrepl.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/gregoimp.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h62
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/indiancal.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/inputext.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/inputext.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/islamcal.h28
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/japancal.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measunit.cpp163
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp859
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h173
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/measure.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/msgfmt.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/msgfmt_impl.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/name2uni.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp18
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfrs.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfrule.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp130
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nfsubs.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nortrans.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/nultrans.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp13
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_asformat.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp9
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp33
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_compact.h5
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h11
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_decnum.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp19
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp82
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp1475
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_longnames.h92
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp13
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_mapper.h5
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_microprops.h21
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_multiplier.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_output.cpp15
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp58
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp107
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h11
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp111
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h41
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_scientific.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp215
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_types.h22
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp134
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h11
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/number_utypes.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numfmt.cpp16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_currency.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp79
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/numsys.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp13
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/olsontz.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/persncal.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp99
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h37
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/quant.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbnf.cpp42
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_data.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp46
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_set.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbt_set.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rbtz.cpp132
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp137
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regexcmp.h4
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/i18n/regexcst.pl6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regexcst.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/regeximp.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/region.cpp64
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/region_impl.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/reldtfmt.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/reldtfmt.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rematch.cpp60
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/remtrans.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp40
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/scriptset.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/search.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/selfmt.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/simpletz.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp157
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/sortkey.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/standardplural.cpp48
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/standardplural.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/strmatch.h24
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/strrepl.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/stsearch.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/taiwncal.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/timezone.cpp53
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/titletrn.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tmunit.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tmutamt.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tmutfmt.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tolowtrn.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/toupptrn.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/translit.cpp19
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/transreg.cpp31
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/transreg.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tridpars.cpp17
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tzfmt.cpp42
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tzgnames.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tzgnames.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tznames.cpp38
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tznames_impl.cpp44
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h44
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tzrule.cpp32
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/tztrans.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ucal.cpp108
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/ucol_res.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/udat.cpp42
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h33
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/umsg.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unesctrn.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uni2name.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uni2name.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/currpinf.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/datefmt.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h24
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h22
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/dtrule.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/format.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h46
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h25
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h13
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h471
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h11
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h207
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h62
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h34
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h63
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/region.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/scientificnumberformatter.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/search.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/selfmt.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h54
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h26
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h22
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h62
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h77
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tmunit.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tmutfmt.h20
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h42
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h22
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tzrule.h60
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/tztrans.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h105
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h30
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h13
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h9
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h44
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h155
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h36
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h11
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h13
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h47
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp267
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h61
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp197
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_converter.h69
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_data.cpp37
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_data.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_router.cpp32
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/units_router.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uregex.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/usearch.cpp2955
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp121
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/usrchimp.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h38
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h36
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/utrans.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp101
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/vzone.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/windtfmt.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/winnmfmt.cpp1
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/wintzimpl.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/zonemeta.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/i18n/zonemeta.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/icudefs.mk.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/io/io.vcxproj4
-rw-r--r--Build/source/libs/icu/icu-src/source/io/ufmt_cmn.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h9
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj8
-rw-r--r--Build/source/libs/icu/icu-src/source/layoutex/plruns.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py5
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/runConfigureICU4
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT3
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/translit/README.TXT3
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/samples/udata/writer.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/stubdata/BUILD23
-rw-r--r--Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/bocu1tst.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/capitst.c25
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/capitst.h5
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.c96
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.c8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c236
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c94
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.c8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/chashtst.c101
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c46
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.h17
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/citertst.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/citertst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c281
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c14
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c21
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.c6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c53
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c49
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c40
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/creststn.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/cucdtst.c15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/currtest.c15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/custrtrn.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c20
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/eurocreg.c10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/hpmufn.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/idnatest.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.c6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ncnvtst.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.c10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/reapits.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/spooftest.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/stdnmtst.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/trietest.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c87
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/ucsdetst.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/udatatst.c22
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c40
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c46
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c17
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/uregiontest.c54
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/usettest.c90
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/usrchtst.c15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/utexttst.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/cintltst/utransts.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt20
-rw-r--r--Build/source/libs/icu/icu-src/source/test/depstest/depstest.py4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/fuzzer/collator_rulebased_ICU-21041.fuzzbin0 -> 1055 bytes
-rw-r--r--Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/aliastst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/allcoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/apicoll.cpp62
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/apicoll.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/astrotst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/bidiconf.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/bytestrietest.cpp43
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/calcasts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/callimts.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/callimts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/calregts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/caltest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/canittst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/citrtest.cpp94
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/citrtest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/colldata.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp26
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/convtest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/csdetest.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/csdetest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/currcoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.cpp15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.cpp93
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/decoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp99
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp284
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h22
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp118
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/encoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/erarulestest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/escoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ficoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/fldset.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/frcoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/g7coll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/genderinfotest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.cpp60
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.cpp90
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/idnaref.h18
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp160
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/intltest.h19
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj1
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itercoll.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itercoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itformat.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itmajor.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp39
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itspoof.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ittrans.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itutil.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/itutil.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/jacoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/jamotest.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp47
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp34
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp237
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/loctest.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.cpp296
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.h52
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp1123
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/normconf.cpp25
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/normconf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h54
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp11
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp1436
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp207
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp48
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternstring.cpp35
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp224
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp19
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numfmtspectest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp107
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp34
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numrgts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/pluralmaptest.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp247
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/plurults.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/pptest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/quantityformattertest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp394
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/regcoll.cpp91
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/regcoll.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp131
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/regextst.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/regiontst.cpp50
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/regiontst.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/reldatefmttest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/reptest.cpp30
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/reptest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/restest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp86
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h5
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/scientificnumberformattertest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/selfmts.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/selfmts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.h12
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/simpleformattertest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/simplethread.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/simplethread.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/srchtest.cpp34
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/srchtest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ssearch.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ssearch.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/string_segment_test.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp36
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/strtest.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/svccoll.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/svccoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/testidn.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/testidna.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/testidna.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/thcoll.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/thcoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/transapi.cpp45
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/transapi.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/transrt.cpp107
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/transrt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp29
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/transtst.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/trcoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/trnserr.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/trnserr.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tscoll.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsdate.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.cpp15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.cpp27
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tsputil.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp89
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.h5
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tufmtts.cpp18
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.cpp81
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.cpp50
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzregts.cpp136
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzregts.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.cpp28
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp94
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/tztest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.cpp180
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.h3
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ucharstrietest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/unifiedcachetest.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp35
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp708
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/usettest.cpp404
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/usettest.h10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/utxttest.cpp20
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/utxttest.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/uvectest.cpp17
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/uvectest.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/v32test.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/windttst.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/iotest/filetst.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp10
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/cletest.c44
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/cletest.sln2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/cmaps.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/gendata.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/gendata.sln2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/letest.cpp52
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/letest.sln2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/letest/xmlreader.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/README2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp2
-rwxr-xr-xBuild/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py5
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/Burmese_graphclust_model5_heavy.txt7061
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/Burmese_graphclust_model5_heavy_Test.txt8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt4354
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt5059
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt358
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt60
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/Thai_codepoints_exclusive_model5_heavy.txt6009
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/Thai_codepoints_exclusive_model5_heavy_Test.txt97
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/Thai_graphclust_model4_heavy.txt13509
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/Thai_graphclust_model4_heavy_Test.txt96
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt6
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/grapheme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt15
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt54
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt5
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.16.toml109
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.32.toml109
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.8.toml109
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.small16.toml49
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.16.toml113
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.32.toml113
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.8.toml113
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.small16.toml53
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.16.toml101
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.32.toml101
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.8.toml101
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.small16.toml41
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.16.toml101
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.32.toml101
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.8.toml101
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.small16.toml41
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.16.toml138
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.32.toml138
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.8.toml138
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.small16.toml81
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.16.toml128
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.32.toml128
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.small16.toml73
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.16.toml128
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.32.toml128
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.8.toml128
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.small16.toml72
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/short-all-same.8.toml385
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/short-all-same.small16.toml321
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.16.toml116
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.32.toml116
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.8.toml116
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.small16.toml63
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/idna_conf.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt48
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt238
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt25
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt23
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/root.txt4
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/ssearch.xml8
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt699
-rw-r--r--Build/source/libs/icu/icu-src/source/test/testmap/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/test/thaitest/thaitest.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/Makefile.in2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c11
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/tstdtmod.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h9
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/datamap.h16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testdata.h8
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testlog.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/tstdtmod.h6
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/uperf.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h14
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/ctestfw/uperf.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gennorm2/BUILD39
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.cpp11
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/derb.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/genrb.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/parse.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/parse.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp28
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h29
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/wrtjava.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genrb/wrtxml.cpp8
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/genren/README8
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/gensprep/store.c4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuexportdata/Makefile.in94
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.1.in13
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.cpp295
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.vcxproj80
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.vcxproj.filters22
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuexportdata/sources.txt1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.cpp14
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/BUILD126
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.cpp11
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.h7
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.cpp112
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp50
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h17
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.cpp12
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.cpp2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.cpp310
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.h84
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.cpp16
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.h4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/icuregions1
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp4
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/localtime.c2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/readme.txt2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp6
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.h2
-rw-r--r--Build/source/libs/icu/icu-src/source/tools/tzcode/zic.c2
-rw-r--r--Build/source/libs/icu/version.ac4
1076 files changed, 99484 insertions, 36380 deletions
diff --git a/Build/source/libs/README b/Build/source/libs/README
index 07d85fd8f9a..86be8c77d79 100644
--- a/Build/source/libs/README
+++ b/Build/source/libs/README
@@ -1,4 +1,3 @@
-
$Id$
Public domain. Originally created by Karl Berry, 2005.
@@ -29,8 +28,8 @@ graphite2 1.3.14 - checked 10apr20
harfbuzz 3.2.0 - checked 13dec21
https://github.com/harfbuzz/harfbuzz/releases/download/3.2.0/
-icu 68.2 - checked 13feb21
- http://download.icu-project.org/files/icu4c/
+icu 70.1 - checked 16jan22
+ https://github.com/unicode-org/icu/releases/
libpaper 1.1.24+nmu2 - checked 24oct13
ftp://ftp.de.debian.org/debian/pool/main/libp/libpaper/
diff --git a/Build/source/libs/icu/ChangeLog b/Build/source/libs/icu/ChangeLog
index dd196d389d8..201e91944a9 100644
--- a/Build/source/libs/icu/ChangeLog
+++ b/Build/source/libs/icu/ChangeLog
@@ -1,3 +1,8 @@
+2022-01-16 Karl Berry <karl@freefriends.org>
+
+ * Import icu-68.2, undoing the std::max_align_t hack since we have
+ to use a newer compiler anyway.
+
2021-12-17 Siep Kroonenberg <siepo@bitmuis.nl>
* Makefile.am (icubuild): sense of test -r lib*.a was reversed.
diff --git a/Build/source/libs/icu/TLpatches/ChangeLog b/Build/source/libs/icu/TLpatches/ChangeLog
index 65f6ed5f9b7..a575ccb1f6b 100644
--- a/Build/source/libs/icu/TLpatches/ChangeLog
+++ b/Build/source/libs/icu/TLpatches/ChangeLog
@@ -1,3 +1,10 @@
+2022-01-16 Karl Berry <karl@freefriends.org>
+
+ * Update for icu-70.1.
+ * patch-24-simulator: remove, applied upstream.
+ * patch-22-max_align_t: remove, not needed since we have to use a
+ newer compiler anyway.
+
2021-03-01 Mojca Miklavec <mojca.miklavec.lists@gmail.com>
* patch-24-simulator: new patch.
diff --git a/Build/source/libs/icu/TLpatches/TL-Changes b/Build/source/libs/icu/TLpatches/TL-Changes
index adf53a6443b..e826e9d7a76 100644
--- a/Build/source/libs/icu/TLpatches/TL-Changes
+++ b/Build/source/libs/icu/TLpatches/TL-Changes
@@ -1,6 +1,8 @@
Changes applied to the icu tree as obtained from:
- https://github.com/unicode-org/icu/releases/download/release-68-2/icu4c-68_2-src.tgz
+ github.com/unicode-org/icu/releases/download/release-70-1/icu4c-70_1-src.tgz
+ github.com/unicode-org/icu/releases/download/release-68-2/icu4c-68_2-src.tgz
and icu4c-68_2-data.zip
+ icu4c-70_1-data.zip
cd $Build/source/libs/icu # for whatever $Build directory
# update version.ac
@@ -41,7 +43,7 @@ cp -p $aux/config.guess $aux/config.sub $aux/install-sh source
# Assuming all seems ok, reduce size of source/data/in/icudt*.dat
# to decrease data segment size, e.g., for old BSD. First, check
# that we successfully built the full .dat:
-ver=68
+ver=70
srcdat=$Build/source/libs/icu/icu-src/source/data/in/icudt${ver}l.dat
cd $Work/libs/icu/icu-build/data/out/build/icudt${ver}l
indat=../../tmp/icudt${ver}l.dat
diff --git a/Build/source/libs/icu/TLpatches/patch-01-configure-gcc b/Build/source/libs/icu/TLpatches/patch-01-configure-gcc
index 8799cc7feee..b7420e6530b 100644
--- a/Build/source/libs/icu/TLpatches/patch-01-configure-gcc
+++ b/Build/source/libs/icu/TLpatches/patch-01-configure-gcc
@@ -1,30 +1,30 @@
For TL, we do not want to prefer clang(++) for ICU
when the whole rest of the tree prefers gcc.
---- source/configure~ 2020-12-17 11:34:38.000000000 -0800
-+++ source/configure 2021-02-13 08:16:36.271761526 -0800
-@@ -2913,5 +2913,5 @@
+--- source/configure~ 2021-10-28 09:04:57.000000000 -0700
++++ source/configure 2022-01-16 14:43:05.441342307 -0800
+@@ -2925,5 +2925,5 @@
ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
- for ac_prog in clang gcc cc c99 c89 xlc_r xlc cl.exe icc
+ for ac_prog in gcc cc clang c99 c89 xlc_r xlc cl.exe icc
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-@@ -2957,5 +2957,5 @@
+@@ -2969,5 +2969,5 @@
if test -z "$CC"; then
ac_ct_CC=$CC
- for ac_prog in clang gcc cc c99 c89 xlc_r xlc cl.exe icc
+ for ac_prog in gcc cc clang c99 c89 xlc_r xlc cl.exe icc
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
-@@ -3516,5 +3516,5 @@
+@@ -3528,5 +3528,5 @@
else
if test -n "$ac_tool_prefix"; then
- for ac_prog in clang++ g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC
+ for ac_prog in g++ c++ clang++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-@@ -3560,5 +3560,5 @@
+@@ -3572,5 +3572,5 @@
if test -z "$CXX"; then
ac_ct_CXX=$CXX
- for ac_prog in clang++ g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC
diff --git a/Build/source/libs/icu/TLpatches/patch-02-configure-solaris b/Build/source/libs/icu/TLpatches/patch-02-configure-solaris
index add9412f2df..858278325c9 100644
--- a/Build/source/libs/icu/TLpatches/patch-02-configure-solaris
+++ b/Build/source/libs/icu/TLpatches/patch-02-configure-solaris
@@ -1,8 +1,8 @@
Do not disable C++11 on Solaris, since we don't use the Sun compiler.
---- source/configure~ 2021-02-13 08:16:36.271761526 -0800
-+++ source/configure 2021-02-13 08:18:10.826136078 -0800
-@@ -6149,9 +6149,10 @@
+--- source/configure~ 2022-01-16 14:43:05.441342307 -0800
++++ source/configure 2022-01-16 14:44:14.808693105 -0800
+@@ -6161,9 +6161,10 @@
CXXFLAGS="$OLD_CXXFLAGS"
fi
- case "${host}" in
diff --git a/Build/source/libs/icu/TLpatches/patch-10-ES b/Build/source/libs/icu/TLpatches/patch-10-ES
index eff82c545a2..9e2f2c23480 100644
--- a/Build/source/libs/icu/TLpatches/patch-10-ES
+++ b/Build/source/libs/icu/TLpatches/patch-10-ES
@@ -3,8 +3,8 @@
https://tug.org/pipermail/tlbuild/2020q1/004599.html
https://tug.org/pipermail/tlbuild/2020q1/004599.html
---- source/common/ubidiimp.h~ 2020-12-17 11:34:38.000000000 -0800
-+++ source/common/ubidiimp.h 2021-02-13 08:20:09.076105678 -0800
+--- source/common/ubidiimp.h~ 2021-10-28 09:04:57.000000000 -0700
++++ source/common/ubidiimp.h 2022-01-16 14:44:51.081353714 -0800
@@ -42,4 +42,6 @@
See UCharDirection in uchar.h .
*/
diff --git a/Build/source/libs/icu/TLpatches/patch-12-mingw b/Build/source/libs/icu/TLpatches/patch-12-mingw
index 59b9ecb87f4..d7bb47f1b50 100644
--- a/Build/source/libs/icu/TLpatches/patch-12-mingw
+++ b/Build/source/libs/icu/TLpatches/patch-12-mingw
@@ -1,7 +1,7 @@
We don't want this for TeX Live cross compilation.
---- source/config/mh-mingw~ 2020-12-17 11:34:38.000000000 -0800
-+++ source/config/mh-mingw 2021-02-13 08:20:54.167330952 -0800
+--- source/config/mh-mingw~ 2021-10-28 09:04:57.000000000 -0700
++++ source/config/mh-mingw 2022-01-16 14:45:28.817000693 -0800
@@ -76,25 +76,7 @@
STATIC_O = ao
diff --git a/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX b/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX
index 9949c1f7287..ae6e5094ba2 100644
--- a/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX
+++ b/Build/source/libs/icu/TLpatches/patch-13-STATIC_PREFIX
@@ -1,7 +1,7 @@
No `s' for STATIC_PREFIX.
---- source/config/Makefile.inc.in~ 2020-12-17 11:34:38.000000000 -0800
-+++ source/config/Makefile.inc.in 2021-02-13 08:22:35.895582151 -0800
+--- source/config/Makefile.inc.in~ 2021-10-28 09:04:57.000000000 -0700
++++ source/config/Makefile.inc.in 2022-01-16 14:46:07.352640250 -0800
@@ -47,5 +47,5 @@
# Static library prefix and file extension
@@ -9,8 +9,8 @@
+STATIC_PREFIX =
LIBSICU = lib$(STATIC_PREFIX)$(ICUPREFIX)
A = a
---- source/icudefs.mk.in~ 2020-12-17 11:34:38.000000000 -0800
-+++ source/icudefs.mk.in 2021-02-13 08:22:35.895582151 -0800
+--- source/icudefs.mk.in~ 2021-10-28 09:04:57.000000000 -0700
++++ source/icudefs.mk.in 2022-01-16 14:46:07.352640250 -0800
@@ -214,5 +214,5 @@
## If we can't use the shared libraries, use the static libraries
ifneq ($(ENABLE_SHARED),YES)
diff --git a/Build/source/libs/icu/TLpatches/patch-14-xopen b/Build/source/libs/icu/TLpatches/patch-14-xopen
index 6d510df9b60..dbcefa6dcce 100644
--- a/Build/source/libs/icu/TLpatches/patch-14-xopen
+++ b/Build/source/libs/icu/TLpatches/patch-14-xopen
@@ -1,8 +1,8 @@
Do not define _XOPEN_SOURCE_EXTENDED on Solaris,
notwithstanding comments in icu source.
---- source/common/uposixdefs.h~ 2020-12-17 11:34:38.000000000 -0800
-+++ source/common/uposixdefs.h 2021-02-13 08:29:38.779298547 -0800
+--- source/common/uposixdefs.h~ 2021-10-28 09:04:57.000000000 -0700
++++ source/common/uposixdefs.h 2022-01-16 14:46:51.036231730 -0800
@@ -52,8 +52,11 @@
* Poorly upgraded Solaris machines can't have this defined.
* Cleanly installed Solaris can use this #define.
diff --git a/Build/source/libs/icu/TLpatches/patch-19-netbsd b/Build/source/libs/icu/TLpatches/patch-19-netbsd
index 635e6214fbb..a87c2043a24 100644
--- a/Build/source/libs/icu/TLpatches/patch-19-netbsd
+++ b/Build/source/libs/icu/TLpatches/patch-19-netbsd
@@ -2,8 +2,8 @@
From: Marc Baudoin <babafou@babafou.eu.org>
tlbuild
---- source/common/uposixdefs.h~ 2021-02-13 08:29:38.779298547 -0800
-+++ source/common/uposixdefs.h 2021-02-13 08:30:06.076827650 -0800
+--- source/common/uposixdefs.h~ 2022-01-16 14:46:51.036231730 -0800
++++ source/common/uposixdefs.h 2022-01-16 14:47:26.072904130 -0800
@@ -78,3 +78,7 @@
#endif
diff --git a/Build/source/libs/icu/TLpatches/patch-20-private b/Build/source/libs/icu/TLpatches/patch-20-private
index 8ebf2a2c091..c31db0e24b8 100644
--- a/Build/source/libs/icu/TLpatches/patch-20-private
+++ b/Build/source/libs/icu/TLpatches/patch-20-private
@@ -5,8 +5,8 @@
http://tug.org/pipermail/tlbuild/2016q1/003438.html
(and starting at http://tug.org/pipermail/tlbuild/2016q1/003433.html)
---- source/i18n/dayperiodrules.h~ 2020-12-17 11:34:38.000000000 -0800
-+++ source/i18n/dayperiodrules.h 2021-02-13 08:30:53.116015999 -0800
+--- source/i18n/dayperiodrules.h~ 2021-10-28 09:04:57.000000000 -0700
++++ source/i18n/dayperiodrules.h 2022-01-16 14:47:58.135604382 -0800
@@ -56,5 +56,5 @@
double getMidPointForDayPeriod(DayPeriod dayPeriod, UErrorCode &errorCode) const;
@@ -14,8 +14,8 @@
+/* nothing private to placate old compilers --karl/koch private: */
DayPeriodRules();
---- source/i18n/unicode/dtitvinf.h~ 2020-12-17 11:34:38.000000000 -0800
-+++ source/i18n/unicode/dtitvinf.h 2021-02-13 08:30:53.116015999 -0800
+--- source/i18n/unicode/dtitvinf.h~ 2021-10-28 09:04:57.000000000 -0700
++++ source/i18n/unicode/dtitvinf.h 2022-01-16 14:47:58.136604372 -0800
@@ -330,5 +330,5 @@
diff --git a/Build/source/libs/icu/TLpatches/patch-22-max_align_t b/Build/source/libs/icu/TLpatches/patch-22-max_align_t
deleted file mode 100644
index e321bd35331..00000000000
--- a/Build/source/libs/icu/TLpatches/patch-22-max_align_t
+++ /dev/null
@@ -1,51 +0,0 @@
- As of ICU 68.2, they required max_align_t to be in the std::
- namespace, which it isn't with the CentOS 7 g++.
-
---- icu/source/tools/toolutil/toolutil.cpp 2020-12-17 11:34:38.000000000 -0800
-+++ icu-src/source/tools/toolutil/toolutil.cpp 2021-02-13 09:21:20.320506318 -0800
-@@ -243,5 +243,5 @@
- int32_t capacity, maxCapacity, size, idx;
- void *array;
-- alignas(std::max_align_t) char staticArray[1];
-+ alignas(max_align_t) char staticArray[1];
- };
-
---- icu/source/common/utext.cpp 2020-12-17 11:34:38.000000000 -0800
-+++ icu-src/source/common/utext.cpp 2021-02-13 09:15:58.637913024 -0800
-@@ -570,5 +570,5 @@
- struct ExtendedUText {
- UText ut;
-- std::max_align_t extension;
-+ max_align_t extension;
- };
-
-@@ -585,5 +585,5 @@
- int32_t spaceRequired = sizeof(UText);
- if (extraSpace > 0) {
-- spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(std::max_align_t);
-+ spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(max_align_t);
- }
- ut = (UText *)uprv_malloc(spaceRequired);
---- icu/source/common/uarrsort.cpp 2020-12-17 11:34:38.000000000 -0800
-+++ icu-src/source/common/uarrsort.cpp 2021-02-13 09:14:58.120928533 -0800
-@@ -38,5 +38,5 @@
-
- static constexpr int32_t sizeInMaxAlignTs(int32_t sizeInBytes) {
-- return (sizeInBytes + sizeof(std::max_align_t) - 1) / sizeof(std::max_align_t);
-+ return (sizeInBytes + sizeof(max_align_t) - 1) / sizeof(max_align_t);
- }
-
-@@ -142,5 +142,5 @@
- UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
-
-- icu::MaybeStackArray<std::max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE)> v;
-+ icu::MaybeStackArray<max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE)> v;
- if (sizeInMaxAlignTs(itemSize) > v.getCapacity() &&
- v.resize(sizeInMaxAlignTs(itemSize)) == nullptr) {
-@@ -236,5 +236,5 @@
- UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
- /* allocate two intermediate item variables (x and w) */
-- icu::MaybeStackArray<std::max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE) * 2> xw;
-+ icu::MaybeStackArray<max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE) * 2> xw;
- if(sizeInMaxAlignTs(itemSize)*2 > xw.getCapacity() &&
- xw.resize(sizeInMaxAlignTs(itemSize) * 2) == nullptr) {
diff --git a/Build/source/libs/icu/TLpatches/patch-24-simulator b/Build/source/libs/icu/TLpatches/patch-24-simulator
deleted file mode 100644
index accc7d749c3..00000000000
--- a/Build/source/libs/icu/TLpatches/patch-24-simulator
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: putil.cpp
-===================================================================
---- putil.cpp (revision 58009)
-+++ putil.cpp (working copy)
-@@ -1361,7 +1361,7 @@ uprv_pathIsAbsolute(const char *path)
-
- /* Backup setting of ICU_DATA_DIR_PREFIX_ENV_VAR
- (needed for some Darwin ICU build environments) */
--#if U_PLATFORM_IS_DARWIN_BASED && TARGET_OS_SIMULATOR
-+#if U_PLATFORM_IS_DARWIN_BASED && defined(TARGET_OS_SIMULATOR) && TARGET_OS_SIMULATOR
- # if !defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
- # define ICU_DATA_DIR_PREFIX_ENV_VAR "IPHONE_SIMULATOR_ROOT"
- # endif
diff --git a/Build/source/libs/icu/configure b/Build/source/libs/icu/configure
index ea3f71a466a..c91498ac323 100755
--- a/Build/source/libs/icu/configure
+++ b/Build/source/libs/icu/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for icu (TeX Live) 68.2.
+# Generated by GNU Autoconf 2.71 for icu (TeX Live) 70.1.
#
# Report bugs to <tex-k@tug.org>.
#
@@ -610,8 +610,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='icu (TeX Live)'
PACKAGE_TARNAME='icu--tex-live-'
-PACKAGE_VERSION='68.2'
-PACKAGE_STRING='icu (TeX Live) 68.2'
+PACKAGE_VERSION='70.1'
+PACKAGE_STRING='icu (TeX Live) 70.1'
PACKAGE_BUGREPORT='tex-k@tug.org'
PACKAGE_URL=''
@@ -1301,7 +1301,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures icu (TeX Live) 68.2 to adapt to many kinds of systems.
+\`configure' configures icu (TeX Live) 70.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1372,7 +1372,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of icu (TeX Live) 68.2:";;
+ short | recursive ) echo "Configuration of icu (TeX Live) 70.1:";;
esac
cat <<\_ACEOF
@@ -1471,7 +1471,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-icu (TeX Live) configure 68.2
+icu (TeX Live) configure 70.1
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1633,7 +1633,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by icu (TeX Live) $as_me 68.2, which was
+It was created by icu (TeX Live) $as_me 70.1, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -4383,7 +4383,7 @@ fi
# Define the identity of the package.
PACKAGE='icu--tex-live-'
- VERSION='68.2'
+ VERSION='70.1'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -5893,7 +5893,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by icu (TeX Live) $as_me 68.2, which was
+This file was extended by icu (TeX Live) $as_me 70.1, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -5952,7 +5952,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-icu (TeX Live) config.status 68.2
+icu (TeX Live) config.status 70.1
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff --git a/Build/source/libs/icu/icu-src/APIChangeReport.html b/Build/source/libs/icu/icu-src/APIChangeReport.html
index 53919cdfcf4..f262ed985cb 100644
--- a/Build/source/libs/icu/icu-src/APIChangeReport.html
+++ b/Build/source/libs/icu/icu-src/APIChangeReport.html
@@ -5,31 +5,31 @@
-->
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>ICU4C API Comparison: ICU 67 with ICU 68</title>
+<title>ICU4C API Comparison: ICU 69 with ICU 70</title>
<link type="text/css" href="icu4c.css" rel="stylesheet">
</head>
<body>
<a name="#_top"></a>
-<h1>ICU4C API Comparison: ICU 67 with ICU 68</h1>
+<h1>ICU4C API Comparison: ICU 69 with ICU 70</h1>
<div id="toc">
<ul>
<li>
-<a href="#removed">Removed from ICU 67</a>
+<a href="#removed">Removed from ICU 69</a>
</li>
<li>
-<a href="#deprecated">Deprecated or Obsoleted in ICU 68</a>
+<a href="#deprecated">Deprecated or Obsoleted in ICU 70</a>
</li>
<li>
-<a href="#changed">Changed in ICU 68</a>
+<a href="#changed">Changed in ICU 70</a>
</li>
<li>
-<a href="#promoted">Promoted to stable in ICU 68</a>
+<a href="#promoted">Promoted to stable in ICU 70</a>
</li>
<li>
-<a href="#added">Added in ICU 68</a>
+<a href="#added">Added in ICU 70</a>
</li>
<li>
-<a href="#other">Other existing drafts in ICU 68</a>
+<a href="#other">Other existing drafts in ICU 70</a>
</li>
<li>
<a href="#simplifications">Signature Simplifications</a>
@@ -38,71 +38,15 @@
<hr>
</div>
<a name="removed"></a>
-<h2>Removed from ICU 67</h2>
+<h2>Removed from ICU 69</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
+<th>File</th><th>API</th><th>ICU 69</th><th>ICU 70</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">fmtable.h</td><td class="proto">const UFormattable* icu::Formattable::toUFormattable()</td><td class="stabchange">Stable<br>ICU 52</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto">LocalArray&lt;MeasureUnit&gt; icu::MeasureUnit::splitToSingleUnits(int32_t&amp;, UErrorCode&amp;) const</td><td class="">Internal<br>ICU 67</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto">int32_t icu::MeasureUnit::getIndex() const</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::resolveUnitPerUnit(const MeasureUnit&amp;, const MeasureUnit&amp;, bool*)</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> int32_t icu::MeasureUnit::getIndexCount()</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> int32_t icu::MeasureUnit::internalGetIndexForTypeAndSubtype(const char*, const char*)</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">nounit.h</td><td class="proto">UClassID icu::NoUnit::getDynamicClassID() const</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">nounit.h</td><td class="proto">icu::NoUnit::NoUnit(const NoUnit&amp;)</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">nounit.h</td><td class="proto">icu::NoUnit::~NoUnit()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::base()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::percent()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::permille()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">nounit.h</td><td class="proto"><tt>static</tt> UClassID icu::NoUnit::getStaticClassID()</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">nounit.h</td><td class="proto">void* icu::NoUnit::clone() const</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uniset.h</td><td class="proto">const USet* icu::UnicodeSet::toUSet()</td><td class="stabchange">Stable<br>ICU 4.2</td><td>(missing)<br>
+<td class="file">tmutfmt.h</td><td class="proto">bool icu::TimeUnitFormat::operator!=(const Format&amp;) const</td><td class="">Deprecated<br>ICU 53</td><td>(missing)<br>
<span class=""><span></span></span></td>
</tr>
</table>
@@ -110,917 +54,673 @@
<a href="#_top">(jump back to top)</a>
<hr>
<a name="deprecated"></a>
-<h2>Deprecated or Obsoleted in ICU 68</h2>
+<h2>Deprecated or Obsoleted in ICU 70</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
+<th>File</th><th>API</th><th>ICU 69</th><th>ICU 70</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const</td><td class="">Draft<br>ICU 63</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 68</span></span></td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration()</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const</td><td class="">Draft<br>ICU 63</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 68</span></span></td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(const char*)</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> FALSE</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> TRUE</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 68</span></span></td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(int32_t)</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 70</span></span></td>
</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<a name="changed"></a>
-<h2>Changed in ICU 68 (old, new)</h2>
+<h2>Changed in ICU 70 (old, new)</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
+<th>File</th><th>API</th><th>ICU 69</th><th>ICU 70</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">bytestrie.h</td><td class="proto">uint64_t icu::BytesTrie::getState64() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">listformatter.h</td><td class="proto"><tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UListFormatterType, UListFormatterWidth, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
-</tr>
-<tr class="row0">
-<td class="file">localebuilder.h</td><td class="proto">UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::~Builder()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::Result(Result&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::~Result()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::~LocaleMatcher()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getDesiredIndex() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">dtitvfmt.h</td><td class="proto">UDisplayContext icu::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getSupportedIndex() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">dtitvfmt.h</td><td class="proto">void icu::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setMaxDistance(const Locale&amp;, const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::Iterator::hasNext() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setNoDefaultLocale()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">localematcher.h</td><td class="proto">bool icu::LocaleMatcher::isMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCandela()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::Iterator::next()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoon()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoonImperial()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDot()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">icu::Locale::Iterator::~Iterator()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDram()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDrop()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBar()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthRadius()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGrain()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getJigger()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLumen()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEm()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPinch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getQuartImperial()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCandela(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoon(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoonImperial(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDot(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDram(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDrop(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthRadius(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGrain(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createJigger(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createLumen(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPinch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuartImperial(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto">std::pair&lt; LocalArray&lt; MeasureUnit &gt;, int32_t &gt; icu::MeasureUnit::splitToSingleUnits(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">numberformatter.h</td><td class="proto">MeasureUnit icu::number::FormattedNumber::getOutputUnit(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">numberrangeformatter.h</td><td class="proto">std::pair&lt; StringClass, StringClass &gt; icu::number::FormattedNumberRange::getDecimalNumbers(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const</td><td class="">Draft<br>ICU 63</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 68</span></span></td>
+<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const number::FormattedNumberRange&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">numberrangeformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const</td><td class="">Draft<br>ICU 63</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 68</span></span></td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration()</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(const char*)</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(int32_t)</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(T)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_FORMAL_SYMBOL_NAME</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">ucal.h</td><td class="proto">int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_VARIANT_SYMBOL_NAME</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">ucharstrie.h</td><td class="proto">UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">udateintervalformat.h</td><td class="proto">UDisplayContext udtitvfmt_getContext(const UDateIntervalFormat*, UDisplayContextType, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">ucharstrie.h</td><td class="proto">uint64_t icu::UCharsTrie::getState64() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_setContext(UDateIntervalFormat*, UDisplayContext, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto">UListFormatter* ulistfmt_openForType(const char*, UListFormatterType, UListFormatterWidth, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_AND</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_MIN2</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_OR</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_UNITS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_NARROW</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto">int32_t unumf_resultToDecimalNumber(const UFormattedNumber*, char*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_SHORT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UFormattedNumberRange* unumrf_openResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_WIDE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UNumberRangeFormatter* unumrf_openForSkeletonWithCollapseAndIdentityFallback(const UChar*, int32_t, UNumberRangeCollapse, UNumberRangeIdentityFallback, const char*, UParseError*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">uloc.h</td><td class="proto">UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UNumberRangeIdentityResult unumrf_resultGetIdentityResult(const UFormattedNumberRange*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">const UFormattedValue* unumrf_resultAsValue(const UFormattedNumberRange*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">int32_t unumrf_resultGetFirstDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">int32_t unumrf_resultGetSecondDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> FALSE</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 68</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_close(UNumberRangeFormatter*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> TRUE</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 68</span></span></td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_closeResult(UFormattedNumberRange*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_formatDecimalRange(const UNumberRangeFormatter*, const char*, int32_t, const char*, int32_t, UFormattedNumberRange*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_formatDoubleRange(const UNumberRangeFormatter*, double, double, UFormattedNumberRange*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">upluralrules.h</td><td class="proto">int32_t uplrules_selectForRange(const UPluralRules*, const struct UFormattedNumberRange*, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<a name="promoted"></a>
-<h2>Promoted to stable in ICU 68</h2>
+<h2>Promoted to stable in ICU 70</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
+<th>File</th><th>API</th><th>ICU 69</th><th>ICU 70</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">bytestrie.h</td><td class="proto">uint64_t icu::BytesTrie::getState64() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">fmtable.h</td><td class="proto">UFormattable* icu::Formattable::toUFormattable()</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 52</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">listformatter.h</td><td class="proto"><tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UListFormatterType, UListFormatterWidth, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
-</tr>
-<tr class="row1">
-<td class="file">localebuilder.h</td><td class="proto">UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">dtitvfmt.h</td><td class="proto">UDisplayContext icu::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">dtitvfmt.h</td><td class="proto">void icu::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setMaxDistance(const Locale&amp;, const Locale&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setNoDefaultLocale()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">localematcher.h</td><td class="proto">bool icu::LocaleMatcher::isMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCandela()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoon()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoonImperial()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDot()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDram()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDrop()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthRadius()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGrain()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getJigger()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLumen()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPinch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getQuartImperial()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCandela(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoon(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoonImperial(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDot(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDram(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDrop(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthRadius(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGrain(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createJigger(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Builder::~Builder()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createLumen(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPinch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::Result(Result&amp;&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuartImperial(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::Result::~Result()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">measunit.h</td><td class="proto">std::pair&lt; LocalArray&lt; MeasureUnit &gt;, int32_t &gt; icu::MeasureUnit::splitToSingleUnits(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">icu::LocaleMatcher::~LocaleMatcher()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece) const&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getDesiredIndex() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece)&amp;&amp;</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">int32_t icu::LocaleMatcher::Result::getSupportedIndex() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">numberformatter.h</td><td class="proto">MeasureUnit icu::number::FormattedNumber::getOutputUnit(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">numberrangeformatter.h</td><td class="proto">std::pair&lt; StringClass, StringClass &gt; icu::number::FormattedNumberRange::getDecimalNumbers(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::Iterator::hasNext() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const number::FormattedNumberRange&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(UErrorCode&amp;)</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumerationForRawOffset(int32_t, UErrorCode&amp;)</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::Iterator::next()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumerationForRegion(const char*, UErrorCode&amp;)</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ARABIC_EXTENDED_B</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CYPRO_MINOAN</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">icu::Locale::Iterator::~Iterator()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ETHIOPIC_EXTENDED_B</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">locid.h</td><td class="proto">icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KANA_EXTENDED_B</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getBar()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_LATIN_EXTENDED_F</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_LATIN_EXTENDED_G</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_OLD_UYGHUR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGSA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEm()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TOTO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_VITHKUQI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ZNAMENNY_MUSICAL_NOTATION</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_THIN_YEH</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_VERTICAL_TAIL</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_FORMAL_SYMBOL_NAME</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_VARIANT_SYMBOL_NAME</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">udateintervalformat.h</td><td class="proto">UDisplayContext udtitvfmt_getContext(const UDateIntervalFormat*, UDisplayContextType, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_setContext(UDateIntervalFormat*, UDisplayContext, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_AUTO</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_MIN2</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberformatter.h</td><td class="proto">int32_t unumf_resultToDecimalNumber(const UFormattedNumber*, char*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UFormattedNumberRange* unumrf_openResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UNumberRangeFormatter* unumrf_openForSkeletonWithCollapseAndIdentityFallback(const UChar*, int32_t, UNumberRangeCollapse, UNumberRangeIdentityFallback, const char*, UParseError*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">UNumberRangeIdentityResult unumrf_resultGetIdentityResult(const UFormattedNumberRange*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">const UFormattedValue* unumrf_resultAsValue(const UFormattedNumberRange*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">int32_t unumrf_resultGetFirstDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">int32_t unumrf_resultGetSecondDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(T)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_close(UNumberRangeFormatter*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">ucal.h</td><td class="proto">int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_closeResult(UFormattedNumberRange*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">ucharstrie.h</td><td class="proto">UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_formatDecimalRange(const UNumberRangeFormatter*, const char*, int32_t, const char*, int32_t, UFormattedNumberRange*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">ucharstrie.h</td><td class="proto">uint64_t icu::UCharsTrie::getState64() const</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_formatDoubleRange(const UNumberRangeFormatter*, double, double, UFormattedNumberRange*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto">UListFormatter* ulistfmt_openForType(const char*, UListFormatterType, UListFormatterWidth, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">upluralrules.h</td><td class="proto">int32_t uplrules_selectForRange(const UPluralRules*, const struct UFormattedNumberRange*, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 68</td>
</tr>
<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_AND</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_CYPRO_MINOAN</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_OR</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_OLD_UYGHUR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_UNITS</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_TANGSA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_NARROW</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_TOTO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_SHORT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_VITHKUQI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">ulistformatter.h</td><td class="proto"><tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_WIDE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 67</td>
-</tr>
-<tr class="row1">
-<td class="file">uloc.h</td><td class="proto">UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">uniset.h</td><td class="proto">USet* icu::UnicodeSet::toUSet()</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.2</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
-</tr>
-<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 65</td>
+<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_INPUT_TOO_LONG_ERROR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 68</span></span></td>
</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<a name="added"></a>
-<h2>Added in ICU 68</h2>
+<h2>Added in ICU 70</h2>
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
+<th>File</th><th>API</th><th>ICU 69</th><th>ICU 70</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">dtitvfmt.h</td><td class="proto">UDisplayContext icu::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">dtitvfmt.h</td><td class="proto">void icu::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> DateTimePatternGenerator* icu::DateTimePatternGenerator::createInstanceNoStdPat(const Locale&amp;, UErrorCode&amp;)</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">dcfmtsym.h</td><td class="proto"><tt>enum</tt> icu::DecimalFormatSymbols::ENumberFormatSymbol::kApproximatelySignSymbol</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
-<td class="file">fmtable.h</td><td class="proto">UFormattable* icu::Formattable::toUFormattable()</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 52</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getItem()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setMaxDistance(const Locale&amp;, const Locale&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowattHourPer100Kilometer()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setNoDefaultLocale()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createItem(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto">UBool icu::LocaleMatcher::isMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createKilowattHourPer100Kilometer(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto">int32_t icu::MeasureUnit::getOffset() const</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">numberformatter.h</td><td class="proto">const DecimalFormatSymbols* icu::number::LocalizedNumberFormatter::getDecimalFormatSymbols() const</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getCandela()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoon()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoonImperial()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">numberrangeformatter.h</td><td class="proto">icu::number::FormattedNumberRange::FormattedNumberRange()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDot()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(UErrorCode&amp;)</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDram()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumerationForRawOffset(int32_t, UErrorCode&amp;)</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getDrop()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">timezone.h</td><td class="proto"><tt>static</tt> StringEnumeration* icu::TimeZone::createEnumerationForRegion(const char*, UErrorCode&amp;)</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthRadius()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto">bool u_stringHasBinaryProperty(const UChar*, int32_t, UProperty)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getGrain()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ARABIC_EXTENDED_B</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getJigger()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CYPRO_MINOAN</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getLumen()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ETHIOPIC_EXTENDED_B</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getPinch()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KANA_EXTENDED_B</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getQuartImperial()</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_LATIN_EXTENDED_F</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCandela(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_LATIN_EXTENDED_G</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoon(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_OLD_UYGHUR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoonImperial(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGSA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDot(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TOTO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDram(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createDrop(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_VITHKUQI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthRadius(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ZNAMENNY_MUSICAL_NOTATION</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGrain(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_THIN_YEH</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createJigger(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_VERTICAL_TAIL</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createLumen(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_BASIC_EMOJI</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPinch(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_KEYCAP_SEQUENCE</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuartImperial(UErrorCode&amp;)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_FLAG_SEQUENCE</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto">std::pair&lt; LocalArray&lt; MeasureUnit &gt;, int32_t &gt; icu::MeasureUnit::splitToSingleUnits(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece) const&amp;</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_TAG_SEQUENCE</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece)&amp;&amp;</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_ZWJ_SEQUENCE</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">MeasureUnit icu::number::FormattedNumber::getOutputUnit(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_RGI_EMOJI</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">Usage&amp; icu::number::impl::Usage::operator=(Usage&amp;&amp;)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatSymbolType::UDAT_NARROW_QUARTERS</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">Usage&amp; icu::number::impl::Usage::operator=(const Usage&amp;)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatSymbolType::UDAT_STANDALONE_NARROW_QUARTERS</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">bool icu::number::impl::Usage::isSet() const</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">uniset.h</td><td class="proto">bool icu::UnicodeSet::hasStrings() const</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::Usage::Usage(Usage&amp;&amp;)</td><td class="">(missing)</td><td>Internal<br>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatSymbol::UNUM_APPROXIMATELY_SIGN_SYMBOL</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::Usage::Usage(const Usage&amp;)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_CYPRO_MINOAN</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::Usage::~Usage()</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_OLD_UYGHUR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">numberformatter.h</td><td class="proto">int16_t icu::number::impl::Usage::length() const</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_TANGSA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">numberformatter.h</td><td class="proto">void icu::number::impl::Usage::set(StringPiece)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_TOTO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row1">
-<td class="file">numberrangeformatter.h</td><td class="proto">std::pair&lt; StringClass, StringClass &gt; icu::number::FormattedNumberRange::getDecimalNumbers(UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const number::FormattedNumberRange&amp;, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const number::impl::UFormattedNumberRangeData*, UErrorCode&amp;) const</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">plurrule.h</td><td class="proto">int32_t icu::PluralRules::getSamples(const UnicodeString&amp;, FixedDecimal*, int32_t, UErrorCode&amp;)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">timezone.h</td><td class="proto"><tt>static</tt> TimeZone* icu::TimeZone::forLocaleOrDefault(const Locale&amp;)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_FORMAL_SYMBOL_NAME</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_VARIANT_SYMBOL_NAME</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udateintervalformat.h</td><td class="proto">UDisplayContext udtitvfmt_getContext(const UDateIntervalFormat*, UDisplayContextType, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_setContext(UDateIntervalFormat*, UDisplayContext, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">umachine.h</td><td class="proto"><tt>#define</tt> U_DEFINE_FALSE_AND_TRUE</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uniset.h</td><td class="proto">USet* icu::UnicodeSet::toUSet()</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.2</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_AUTO</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_MIN2</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unumberformatter.h</td><td class="proto">int32_t unumf_resultToDecimalNumber(const UFormattedNumber*, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unumberrangeformatter.h</td><td class="proto">UFormattedNumberRange* unumrf_openResult(UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unumberrangeformatter.h</td><td class="proto">UNumberRangeFormatter* unumrf_openForSkeletonWithCollapseAndIdentityFallback(const UChar*, int32_t, UNumberRangeCollapse, UNumberRangeIdentityFallback, const char*, UParseError*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unumberrangeformatter.h</td><td class="proto">UNumberRangeIdentityResult unumrf_resultGetIdentityResult(const UFormattedNumberRange*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unumberrangeformatter.h</td><td class="proto">const UFormattedValue* unumrf_resultAsValue(const UFormattedNumberRange*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unumberrangeformatter.h</td><td class="proto">int32_t unumrf_resultGetFirstDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unumberrangeformatter.h</td><td class="proto">int32_t unumrf_resultGetSecondDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_close(UNumberRangeFormatter*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_VITHKUQI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 70</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in ICU 70.">(Born Stable)</b></td>
</tr>
<tr class="row0">
-<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_closeResult(UFormattedNumberRange*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uset.h</td><td class="proto">bool uset_hasStrings(const USet*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_formatDecimalRange(const UNumberRangeFormatter*, const char*, int32_t, const char*, int32_t, UFormattedNumberRange*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">uset.h</td><td class="proto">int32_t uset_getRangeCount(const USet*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row0">
-<td class="file">unumberrangeformatter.h</td><td class="proto">void unumrf_formatDoubleRange(const UNumberRangeFormatter*, double, double, UFormattedNumberRange*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 68</span></span></td>
+<td class="file">usetiter.h</td><td class="proto">UnicodeSetIterator&amp; icu::UnicodeSetIterator::skipToStrings()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 70</span></span></td>
</tr>
<tr class="row1">
-<td class="file">upluralrules.h</td><td class="proto">int32_t uplrules_selectForRange(const UPluralRules*, const struct UFormattedNumberRange*, UChar*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
+<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_INPUT_TOO_LONG_ERROR</td><td class="">(missing)</td><td>Stable<br>
<span class=""><span>ICU 68</span></span></td>
</tr>
</table>
@@ -1028,139 +728,124 @@
<a href="#_top">(jump back to top)</a>
<hr>
<a name="other"></a>
-<h2>Other existing drafts in ICU 68</h2>
+<h2>Other existing drafts in ICU 70</h2>
<div class="other">
<table BORDER="1" class="genTable">
<THEAD>
<tr>
-<th>File</th><th>API</th><th>ICU 67</th><th>ICU 68</th>
+<th>File</th><th>API</th><th>ICU 69</th><th>ICU 70</th>
</tr>
</THEAD>
<tr class="row1">
-<td class="file">bytestream.h</td><td class="proto">void icu::ByteSink::AppendU8(const char*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">basictz.h</td><td class="proto">void icu::BasicTimeZone::getOffsetFromLocal(UDate, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">bytestream.h</td><td class="proto">void icu::ByteSink::AppendU8(const char8_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
-</tr>
-<tr class="row1">
-<td class="file">dtptngen.h</td><td class="proto">UDateFormatHourCycle icu::DateTimePatternGenerator::getDefaultHourCycle(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto">Builder&amp; icu::LocaleMatcher::Builder::setDirection(ULocMatchDirection)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
-</tr>
-<tr class="row1">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDirection::ULOCMATCH_DIRECTION_ONLY_TWO_WAY</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
-</tr>
-<tr class="row0">
-<td class="file">localematcher.h</td><td class="proto"><tt>enum</tt> ULocMatchDirection::ULOCMATCH_DIRECTION_WITH_ONE_WAY</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">measfmt.h</td><td class="proto">void icu::MeasureFormat::parseObject(const UnicodeString&amp;, Formattable&amp;, ParsePosition&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 53</td>
</tr>
<tr class="row1">
-<td class="file">locid.h</td><td class="proto">void icu::Locale::canonicalize(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::withPrefix(UMeasurePrefix, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">measfmt.h</td><td class="proto">void icu::MeasureFormat::parseObject(const UnicodeString&amp;, Formattable&amp;, ParsePosition&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 53</td>
+<td class="file">measunit.h</td><td class="proto">UMeasurePrefix icu::MeasureUnit::getPrefix(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::product(const MeasureUnit&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::getMilligramOfglucosePerDeciliter()</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::reciprocal(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMilligramOfglucosePerDeciliter(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::withDimensionality(int32_t, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::FractionPrecision::withSignificantDigits(int32_t, int32_t, UNumberRoundingPriority) const</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto">MeasureUnit icu::MeasureUnit::withSIPrefix(UMeasureSIPrefix, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">numberformatter.h</td><td class="proto">Precision icu::number::Precision::trailingZeroDisplay(UNumberTrailingZeroDisplay) const</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto">MeasureUnit&amp; icu::MeasureUnit::operator=(MeasureUnit&amp;&amp;) noexcept</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">rbtz.h</td><td class="proto">void icu::RuleBasedTimeZone::getOffsetFromLocal(UDate, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto">UMeasureSIPrefix icu::MeasureUnit::getSIPrefix(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">simpletz.h</td><td class="proto">void icu::SimpleTimeZone::getOffsetFromLocal(UDate, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto">UMeasureUnitComplexity icu::MeasureUnit::getComplexity(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">ubrk.h</td><td class="proto">UBreakIterator* ubrk_clone(const UBreakIterator*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto">const char* icu::MeasureUnit::getIdentifier() const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_DAYLIGHT_FORMER</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto">icu::MeasureUnit::MeasureUnit(MeasureUnit&amp;&amp;) noexcept</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_DAYLIGHT_LATTER</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">measunit.h</td><td class="proto">int32_t icu::MeasureUnit::getDimensionality(UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_FORMER</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::forIdentifier(StringPiece, UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_LATTER</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(const char8_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_STANDARD_FORMER</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(const char8_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_STANDARD_LATTER</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(const std::u8string&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">ucal.h</td><td class="proto">void ucal_getTimeZoneOffsetFromLocal(const UCalendar*, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t*, int32_t*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">stringpiece.h</td><td class="proto">icu::StringPiece::StringPiece(std::nullptr_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">uformattedvalue.h</td><td class="proto"><tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_NUMBER_RANGE_SPAN</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">stringpiece.h</td><td class="proto">int32_t icu::StringPiece::compare(StringPiece)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">uniset.h</td><td class="proto">UnicodeSet&amp; icu::UnicodeSet::retain(const UnicodeString&amp;)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">stringpiece.h</td><td class="proto">int32_t icu::StringPiece::find(StringPiece, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatRoundingMode::UNUM_ROUND_HALF_CEILING</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">stringpiece.h</td><td class="proto">void icu::StringPiece::set(const char8_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatRoundingMode::UNUM_ROUND_HALF_FLOOR</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">stringpiece.h</td><td class="proto">void icu::StringPiece::set(const char8_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatRoundingMode::UNUM_ROUND_HALF_ODD</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_11</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberRoundingPriority::UNUM_ROUNDING_PRIORITY_RELAXED</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_12</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberRoundingPriority::UNUM_ROUNDING_PRIORITY_STRICT</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_23</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_NEGATIVE</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_24</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_NEGATIVE</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_formatCalendarToResult(const UDateIntervalFormat*, UCalendar*, UCalendar*, UFormattedDateInterval*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberTrailingZeroDisplay::UNUM_TRAILING_ZERO_AUTO</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">udateintervalformat.h</td><td class="proto">void udtitvfmt_formatToResult(const UDateIntervalFormat*, UDate, UDate, UFormattedDateInterval*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">unumberformatter.h</td><td class="proto"><tt>enum</tt> UNumberTrailingZeroDisplay::UNUM_TRAILING_ZERO_HIDE_IF_WHOLE</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">udatpg.h</td><td class="proto">UDateFormatHourCycle udatpg_getDefaultHourCycle(const UDateTimePatternGenerator*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">uregex.h</td><td class="proto"><tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ</td><td class="" colspan="2" align="center">Draft<br>ICU 2.4</td>
</tr>
<tr class="row1">
-<td class="file">uregex.h</td><td class="proto"><tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ</td><td class="" colspan="2" align="center">Draft<br>ICU 2.4</td>
+<td class="file">uset.h</td><td class="proto">void uset_complementAllCodePoints(USet*, const UChar*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_BREAK_ENGINE</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">uset.h</td><td class="proto">void uset_complementRange(USet*, UChar32, UChar32)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_CHARACTER</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">uset.h</td><td class="proto">void uset_complementString(USet*, const UChar*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_LINE</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">uset.h</td><td class="proto">void uset_removeAllCodePoints(USet*, const UChar*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_SENTENCE</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">uset.h</td><td class="proto">void uset_retainAllCodePoints(USet*, const UChar*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_TITLE</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">uset.h</td><td class="proto">void uset_retainString(USet*, const UChar*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_WORD</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
-</tr>
-<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_START</td><td class="" colspan="2" align="center">Draft<br>ICU 67</td>
+<td class="file">vtzone.h</td><td class="proto">void icu::VTimeZone::getOffsetFromLocal(UDate, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const</td><td class="" colspan="2" align="center">Draft<br>ICU 69</td>
</tr>
</table>
</div>
@@ -1172,13 +857,502 @@
<i>This section shows cases where the signature was "simplified" for the sake of comparison. The simplified form is in bold, followed by
all possible variations in "original" form.</i>
<div class="other">
-<ul></ul>
+<ul>
+<li>
+<b>UClassID icu::BreakIterator::getDynamicClassID() const</b>
+<br>UClassID icu::BreakIterator::getDynamicClassID() const override=0<br>UClassID icu::BreakIterator::getDynamicClassID() const=0<br>
+</li>
+<li>
+<b>UClassID icu::Calendar::getDynamicClassID() const</b>
+<br>UClassID icu::Calendar::getDynamicClassID() const override=0<br>UClassID icu::Calendar::getDynamicClassID() const=0<br>
+</li>
+<li>
+<b>UClassID icu::Collator::getDynamicClassID() const</b>
+<br>UClassID icu::Collator::getDynamicClassID() const override=0<br>UClassID icu::Collator::getDynamicClassID() const=0<br>
+</li>
+<li>
+<b>UClassID icu::ForwardCharacterIterator::getDynamicClassID() const</b>
+<br>UClassID icu::ForwardCharacterIterator::getDynamicClassID() const override=0<br>UClassID icu::ForwardCharacterIterator::getDynamicClassID() const=0<br>
+</li>
+<li>
+<b>UClassID icu::NumberFormat::getDynamicClassID() const</b>
+<br>UClassID icu::NumberFormat::getDynamicClassID() const override=0<br>UClassID icu::NumberFormat::getDynamicClassID() const=0<br>
+</li>
+<li>
+<b>UClassID icu::TimeZone::getDynamicClassID() const</b>
+<br>UClassID icu::TimeZone::getDynamicClassID() const override=0<br>UClassID icu::TimeZone::getDynamicClassID() const=0<br>
+</li>
+<li>
+<b>UClassID icu::Transliterator::getDynamicClassID() const</b>
+<br>UClassID icu::Transliterator::getDynamicClassID() const override=0<br>UClassID icu::Transliterator::getDynamicClassID() const=0<br>
+</li>
+<li>
+<b>UClassID icu::UnicodeFunctor::getDynamicClassID() const</b>
+<br>UClassID icu::UnicodeFunctor::getDynamicClassID() const override=0<br>UClassID icu::UnicodeFunctor::getDynamicClassID() const=0<br>
+</li>
+<li>
+<b>UMatchDegree icu::UnicodeFilter::matches(const Replaceable&amp;, int32_t&amp;, int32_t, bool)</b>
+<br>UMatchDegree icu::UnicodeFilter::matches(const Replaceable&amp;, int32_t&amp;, int32_t, UBool)<br>UMatchDegree icu::UnicodeFilter::matches(const Replaceable&amp;, int32_t&amp;, int32_t, UBool) override<br>
+</li>
+<li>
+<b>UMatchDegree icu::UnicodeSet::matches(const Replaceable&amp;, int32_t&amp;, int32_t, bool)</b>
+<br>UMatchDegree icu::UnicodeSet::matches(const Replaceable&amp;, int32_t&amp;, int32_t, UBool)<br>UMatchDegree icu::UnicodeSet::matches(const Replaceable&amp;, int32_t&amp;, int32_t, UBool) override<br>
+</li>
+<li>
+<b>UnicodeString&amp; icu::UnicodeSet::toPattern(UnicodeString&amp;, bool escapeUnprintable=) const</b>
+<br>UnicodeString&amp; icu::UnicodeSet::toPattern(UnicodeString&amp;, UBool escapeUnprintable=) const<br>UnicodeString&amp; icu::UnicodeSet::toPattern(UnicodeString&amp;, UBool escapeUnprintable=) const override<br>
+</li>
+<li>
+<b>bool icu::AnnualTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const</b>
+<br>UBool icu::AnnualTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const<br>UBool icu::AnnualTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::AnnualTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const</b>
+<br>UBool icu::AnnualTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const<br>UBool icu::AnnualTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::AnnualTimeZoneRule::getNextStart(UDate, int32_t, int32_t, bool, UDate&amp;) const</b>
+<br>UBool icu::AnnualTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const<br>UBool icu::AnnualTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::AnnualTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, bool, UDate&amp;) const</b>
+<br>UBool icu::AnnualTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const<br>UBool icu::AnnualTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const<br>UBool icu::AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::AnnualTimeZoneRule::operator!=(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::AnnualTimeZoneRule::operator!=(const TimeZoneRule&amp;) const<br>bool icu::AnnualTimeZoneRule::operator!=(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::AnnualTimeZoneRule::operator==(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::AnnualTimeZoneRule::operator==(const TimeZoneRule&amp;) const<br>bool icu::AnnualTimeZoneRule::operator==(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::BreakIterator::operator==(const BreakIterator&amp;) const</b>
+<br>UBool icu::BreakIterator::operator==(const BreakIterator&amp;) const=0<br>bool icu::BreakIterator::operator==(const BreakIterator&amp;) const=0<br>
+</li>
+<li>
+<b>bool icu::ChoiceFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::ChoiceFormat::operator==(const Format&amp;) const<br>bool icu::ChoiceFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::DateFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::DateFormat::operator==(const Format&amp;) const<br>bool icu::DateFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::DateIntervalFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::DateIntervalFormat::operator==(const Format&amp;) const<br>bool icu::DateIntervalFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::DecimalFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::DecimalFormat::operator==(const Format&amp;) const U_OVERRIDE<br>bool icu::DecimalFormat::operator==(const Format&amp;) const U_OVERRIDE<br>
+</li>
+<li>
+<b>bool icu::Format::operator==(const Format&amp;) const</b>
+<br>UBool icu::Format::operator==(const Format&amp;) const=0<br>bool icu::Format::operator==(const Format&amp;) const=0<br>
+</li>
+<li>
+<b>bool icu::ForwardCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const</b>
+<br>UBool icu::ForwardCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const=0<br>bool icu::ForwardCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const=0<br>
+</li>
+<li>
+<b>bool icu::GregorianCalendar::haveDefaultCentury() const</b>
+<br>UBool icu::GregorianCalendar::haveDefaultCentury() const<br>UBool icu::GregorianCalendar::haveDefaultCentury() const override<br>
+</li>
+<li>
+<b>bool icu::GregorianCalendar::inDaylightTime(UErrorCode&amp;) const</b>
+<br>UBool icu::GregorianCalendar::inDaylightTime(UErrorCode&amp;) const<br>UBool icu::GregorianCalendar::inDaylightTime(UErrorCode&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::GregorianCalendar::isEquivalentTo(const Calendar&amp;) const</b>
+<br>UBool icu::GregorianCalendar::isEquivalentTo(const Calendar&amp;) const<br>UBool icu::GregorianCalendar::isEquivalentTo(const Calendar&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::InitialTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const</b>
+<br>UBool icu::InitialTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const<br>UBool icu::InitialTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::InitialTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const</b>
+<br>UBool icu::InitialTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const<br>UBool icu::InitialTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::InitialTimeZoneRule::getNextStart(UDate, int32_t, int32_t, bool, UDate&amp;) const</b>
+<br>UBool icu::InitialTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const<br>UBool icu::InitialTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::InitialTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, bool, UDate&amp;) const</b>
+<br>UBool icu::InitialTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const<br>UBool icu::InitialTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const<br>UBool icu::InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::InitialTimeZoneRule::operator!=(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::InitialTimeZoneRule::operator!=(const TimeZoneRule&amp;) const<br>bool icu::InitialTimeZoneRule::operator!=(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::InitialTimeZoneRule::operator==(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::InitialTimeZoneRule::operator==(const TimeZoneRule&amp;) const<br>bool icu::InitialTimeZoneRule::operator==(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::MeasureFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::MeasureFormat::operator==(const Format&amp;) const<br>bool icu::MeasureFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::MessageFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::MessageFormat::operator==(const Format&amp;) const<br>bool icu::MessageFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::NumberFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::NumberFormat::operator==(const Format&amp;) const<br>bool icu::NumberFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::PluralFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::PluralFormat::operator==(const Format&amp;) const<br>bool icu::PluralFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedBreakIterator::isBoundary(int32_t)</b>
+<br>UBool icu::RuleBasedBreakIterator::isBoundary(int32_t)<br>UBool icu::RuleBasedBreakIterator::isBoundary(int32_t) override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedBreakIterator::operator==(const BreakIterator&amp;) const</b>
+<br>UBool icu::RuleBasedBreakIterator::operator==(const BreakIterator&amp;) const<br>bool icu::RuleBasedBreakIterator::operator==(const BreakIterator&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedCollator::operator==(const Collator&amp;) const</b>
+<br>UBool icu::RuleBasedCollator::operator==(const Collator&amp;) const<br>bool icu::RuleBasedCollator::operator==(const Collator&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedNumberFormat::isLenient() const</b>
+<br>UBool icu::RuleBasedNumberFormat::isLenient() const<br>UBool icu::RuleBasedNumberFormat::isLenient() const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedNumberFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::RuleBasedNumberFormat::operator==(const Format&amp;) const<br>bool icu::RuleBasedNumberFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedTimeZone::getNextTransition(UDate, bool, TimeZoneTransition&amp;) const</b>
+<br>UBool icu::RuleBasedTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&amp;) const<br>UBool icu::RuleBasedTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedTimeZone::getPreviousTransition(UDate, bool, TimeZoneTransition&amp;) const</b>
+<br>UBool icu::RuleBasedTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&amp;) const<br>UBool icu::RuleBasedTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedTimeZone::hasSameRules(const TimeZone&amp;) const</b>
+<br>UBool icu::RuleBasedTimeZone::hasSameRules(const TimeZone&amp;) const<br>UBool icu::RuleBasedTimeZone::hasSameRules(const TimeZone&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const</b>
+<br>UBool icu::RuleBasedTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const<br>UBool icu::RuleBasedTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedTimeZone::operator==(const TimeZone&amp;) const</b>
+<br>UBool icu::RuleBasedTimeZone::operator==(const TimeZone&amp;) const<br>bool icu::RuleBasedTimeZone::operator==(const TimeZone&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::RuleBasedTimeZone::useDaylightTime() const</b>
+<br>UBool icu::RuleBasedTimeZone::useDaylightTime() const<br>UBool icu::RuleBasedTimeZone::useDaylightTime() const override<br>
+</li>
+<li>
+<b>bool icu::SelectFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::SelectFormat::operator==(const Format&amp;) const<br>bool icu::SelectFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::SimpleDateFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::SimpleDateFormat::operator==(const Format&amp;) const<br>bool icu::SimpleDateFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::SimpleNumberFormatFactory::visible() const</b>
+<br>UBool icu::SimpleNumberFormatFactory::visible() const<br>UBool icu::SimpleNumberFormatFactory::visible() const override<br>
+</li>
+<li>
+<b>bool icu::SimpleTimeZone::getNextTransition(UDate, bool, TimeZoneTransition&amp;) const</b>
+<br>UBool icu::SimpleTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&amp;) const<br>UBool icu::SimpleTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::SimpleTimeZone::getPreviousTransition(UDate, bool, TimeZoneTransition&amp;) const</b>
+<br>UBool icu::SimpleTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&amp;) const<br>UBool icu::SimpleTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::SimpleTimeZone::hasSameRules(const TimeZone&amp;) const</b>
+<br>UBool icu::SimpleTimeZone::hasSameRules(const TimeZone&amp;) const<br>UBool icu::SimpleTimeZone::hasSameRules(const TimeZone&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::SimpleTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const</b>
+<br>UBool icu::SimpleTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const<br>UBool icu::SimpleTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::SimpleTimeZone::operator==(const TimeZone&amp;) const</b>
+<br>UBool icu::SimpleTimeZone::operator==(const TimeZone&amp;) const<br>bool icu::SimpleTimeZone::operator==(const TimeZone&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::SimpleTimeZone::useDaylightTime() const</b>
+<br>UBool icu::SimpleTimeZone::useDaylightTime() const<br>UBool icu::SimpleTimeZone::useDaylightTime() const override<br>
+</li>
+<li>
+<b>bool icu::StringCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const</b>
+<br>UBool icu::StringCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const<br>bool icu::StringCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::StringSearch::operator==(const SearchIterator&amp;) const</b>
+<br>UBool icu::StringSearch::operator==(const SearchIterator&amp;) const<br>bool icu::StringSearch::operator==(const SearchIterator&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeArrayTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const</b>
+<br>UBool icu::TimeArrayTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const<br>UBool icu::TimeArrayTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeArrayTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const</b>
+<br>UBool icu::TimeArrayTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const<br>UBool icu::TimeArrayTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeArrayTimeZoneRule::getNextStart(UDate, int32_t, int32_t, bool, UDate&amp;) const</b>
+<br>UBool icu::TimeArrayTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const<br>UBool icu::TimeArrayTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeArrayTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, bool, UDate&amp;) const</b>
+<br>UBool icu::TimeArrayTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const<br>UBool icu::TimeArrayTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const<br>UBool icu::TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeArrayTimeZoneRule::operator!=(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::TimeArrayTimeZoneRule::operator!=(const TimeZoneRule&amp;) const<br>bool icu::TimeArrayTimeZoneRule::operator!=(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeArrayTimeZoneRule::operator==(const TimeZoneRule&amp;) const</b>
+<br>UBool icu::TimeArrayTimeZoneRule::operator==(const TimeZoneRule&amp;) const<br>bool icu::TimeArrayTimeZoneRule::operator==(const TimeZoneRule&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeZoneFormat::operator==(const Format&amp;) const</b>
+<br>UBool icu::TimeZoneFormat::operator==(const Format&amp;) const<br>bool icu::TimeZoneFormat::operator==(const Format&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::TimeZoneNames::operator==(const TimeZoneNames&amp;) const</b>
+<br>UBool icu::TimeZoneNames::operator==(const TimeZoneNames&amp;) const=0<br>bool icu::TimeZoneNames::operator==(const TimeZoneNames&amp;) const=0<br>
+</li>
+<li>
+<b>bool icu::UCharCharacterIterator::hasNext()</b>
+<br>UBool icu::UCharCharacterIterator::hasNext()<br>UBool icu::UCharCharacterIterator::hasNext() override<br>
+</li>
+<li>
+<b>bool icu::UCharCharacterIterator::hasPrevious()</b>
+<br>UBool icu::UCharCharacterIterator::hasPrevious()<br>UBool icu::UCharCharacterIterator::hasPrevious() override<br>
+</li>
+<li>
+<b>bool icu::UCharCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const</b>
+<br>UBool icu::UCharCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const<br>bool icu::UCharCharacterIterator::operator==(const ForwardCharacterIterator&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::UnicodeSet::contains(UChar32) const</b>
+<br>UBool icu::UnicodeSet::contains(UChar32) const<br>UBool icu::UnicodeSet::contains(UChar32) const override<br>
+</li>
+<li>
+<b>bool icu::UnicodeString::hasMetaData() const</b>
+<br>UBool icu::UnicodeString::hasMetaData() const<br>UBool icu::UnicodeString::hasMetaData() const override<br>
+</li>
+<li>
+<b>bool icu::UnicodeStringAppendable::appendCodePoint(UChar32)</b>
+<br>UBool icu::UnicodeStringAppendable::appendCodePoint(UChar32)<br>UBool icu::UnicodeStringAppendable::appendCodePoint(UChar32) override<br>
+</li>
+<li>
+<b>bool icu::UnicodeStringAppendable::appendCodeUnit(char16_t)</b>
+<br>UBool icu::UnicodeStringAppendable::appendCodeUnit(char16_t)<br>UBool icu::UnicodeStringAppendable::appendCodeUnit(char16_t) override<br>
+</li>
+<li>
+<b>bool icu::UnicodeStringAppendable::appendString(const char16_t*, int32_t)</b>
+<br>UBool icu::UnicodeStringAppendable::appendString(const char16_t*, int32_t)<br>UBool icu::UnicodeStringAppendable::appendString(const char16_t*, int32_t) override<br>
+</li>
+<li>
+<b>bool icu::UnicodeStringAppendable::reserveAppendCapacity(int32_t)</b>
+<br>UBool icu::UnicodeStringAppendable::reserveAppendCapacity(int32_t)<br>UBool icu::UnicodeStringAppendable::reserveAppendCapacity(int32_t) override<br>
+</li>
+<li>
+<b>bool icu::VTimeZone::getNextTransition(UDate, bool, TimeZoneTransition&amp;) const</b>
+<br>UBool icu::VTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&amp;) const<br>UBool icu::VTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::VTimeZone::getPreviousTransition(UDate, bool, TimeZoneTransition&amp;) const</b>
+<br>UBool icu::VTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&amp;) const<br>UBool icu::VTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::VTimeZone::hasSameRules(const TimeZone&amp;) const</b>
+<br>UBool icu::VTimeZone::hasSameRules(const TimeZone&amp;) const<br>UBool icu::VTimeZone::hasSameRules(const TimeZone&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::VTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const</b>
+<br>UBool icu::VTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const<br>UBool icu::VTimeZone::inDaylightTime(UDate, UErrorCode&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::VTimeZone::operator==(const TimeZone&amp;) const</b>
+<br>UBool icu::VTimeZone::operator==(const TimeZone&amp;) const<br>bool icu::VTimeZone::operator==(const TimeZone&amp;) const override<br>
+</li>
+<li>
+<b>bool icu::VTimeZone::useDaylightTime() const</b>
+<br>UBool icu::VTimeZone::useDaylightTime() const<br>UBool icu::VTimeZone::useDaylightTime() const override<br>
+</li>
+<li>
+<b>void icu::RuleBasedNumberFormat::setLenient(bool)</b>
+<br>void icu::RuleBasedNumberFormat::setLenient(UBool)<br>void icu::RuleBasedNumberFormat::setLenient(UBool) override<br>
+</li>
+<li>
+<b>void icu::RuleBasedTimeZone::getOffset(UDate, bool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const</b>
+<br>void icu::RuleBasedTimeZone::getOffset(UDate, UBool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const<br>void icu::RuleBasedTimeZone::getOffset(UDate, UBool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const override<br>
+</li>
+<li>
+<b>void icu::SimpleTimeZone::getOffset(UDate, bool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const</b>
+<br>void icu::SimpleTimeZone::getOffset(UDate, UBool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const<br>void icu::SimpleTimeZone::getOffset(UDate, UBool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const override<br>
+</li>
+<li>
+<b>void icu::VTimeZone::getOffset(UDate, bool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const</b>
+<br>void icu::VTimeZone::getOffset(UDate, UBool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const<br>void icu::VTimeZone::getOffset(UDate, UBool, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const override<br>
+</li>
+<li>
+<b>void* icu::AnnualTimeZoneRule::clone() const</b>
+<br>AnnualTimeZoneRule* icu::AnnualTimeZoneRule::clone() const<br>AnnualTimeZoneRule* icu::AnnualTimeZoneRule::clone() const override<br>
+</li>
+<li>
+<b>void* icu::BasicTimeZone::clone() const</b>
+<br>BasicTimeZone* icu::BasicTimeZone::clone() const override=0<br>BasicTimeZone* icu::BasicTimeZone::clone() const=0<br>
+</li>
+<li>
+<b>void* icu::ChoiceFormat::clone() const</b>
+<br>ChoiceFormat* icu::ChoiceFormat::clone() const<br>ChoiceFormat* icu::ChoiceFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::CurrencyAmount::clone() const</b>
+<br>CurrencyAmount* icu::CurrencyAmount::clone() const<br>CurrencyAmount* icu::CurrencyAmount::clone() const override<br>
+</li>
+<li>
+<b>void* icu::CurrencyUnit::clone() const</b>
+<br>CurrencyUnit* icu::CurrencyUnit::clone() const<br>CurrencyUnit* icu::CurrencyUnit::clone() const override<br>
+</li>
+<li>
+<b>void* icu::DateFormat::clone() const</b>
+<br>DateFormat* icu::DateFormat::clone() const override=0<br>DateFormat* icu::DateFormat::clone() const=0<br>
+</li>
+<li>
+<b>void* icu::DateIntervalFormat::clone() const</b>
+<br>DateIntervalFormat* icu::DateIntervalFormat::clone() const<br>DateIntervalFormat* icu::DateIntervalFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::GregorianCalendar::clone() const</b>
+<br>GregorianCalendar* icu::GregorianCalendar::clone() const<br>GregorianCalendar* icu::GregorianCalendar::clone() const override<br>
+</li>
+<li>
+<b>void* icu::InitialTimeZoneRule::clone() const</b>
+<br>InitialTimeZoneRule* icu::InitialTimeZoneRule::clone() const<br>InitialTimeZoneRule* icu::InitialTimeZoneRule::clone() const override<br>
+</li>
+<li>
+<b>void* icu::MeasureFormat::clone() const</b>
+<br>MeasureFormat* icu::MeasureFormat::clone() const<br>MeasureFormat* icu::MeasureFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::MessageFormat::clone() const</b>
+<br>MessageFormat* icu::MessageFormat::clone() const<br>MessageFormat* icu::MessageFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::NumberFormat::clone() const</b>
+<br>NumberFormat* icu::NumberFormat::clone() const override=0<br>NumberFormat* icu::NumberFormat::clone() const=0<br>
+</li>
+<li>
+<b>void* icu::PluralFormat::clone() const</b>
+<br>PluralFormat* icu::PluralFormat::clone() const<br>PluralFormat* icu::PluralFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::RuleBasedBreakIterator::clone() const</b>
+<br>RuleBasedBreakIterator* icu::RuleBasedBreakIterator::clone() const<br>RuleBasedBreakIterator* icu::RuleBasedBreakIterator::clone() const override<br>
+</li>
+<li>
+<b>void* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&amp;, UErrorCode&amp;)</b>
+<br>RuleBasedBreakIterator* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&amp;, UErrorCode&amp;)<br>RuleBasedBreakIterator* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&amp;, UErrorCode&amp;) override<br>
+</li>
+<li>
+<b>void* icu::RuleBasedCollator::clone() const</b>
+<br>RuleBasedCollator* icu::RuleBasedCollator::clone() const<br>RuleBasedCollator* icu::RuleBasedCollator::clone() const override<br>
+</li>
+<li>
+<b>void* icu::RuleBasedNumberFormat::clone() const</b>
+<br>RuleBasedNumberFormat* icu::RuleBasedNumberFormat::clone() const<br>RuleBasedNumberFormat* icu::RuleBasedNumberFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::RuleBasedTimeZone::clone() const</b>
+<br>RuleBasedTimeZone* icu::RuleBasedTimeZone::clone() const<br>RuleBasedTimeZone* icu::RuleBasedTimeZone::clone() const override<br>
+</li>
+<li>
+<b>void* icu::SelectFormat::clone() const</b>
+<br>SelectFormat* icu::SelectFormat::clone() const<br>SelectFormat* icu::SelectFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::SimpleDateFormat::clone() const</b>
+<br>SimpleDateFormat* icu::SimpleDateFormat::clone() const<br>SimpleDateFormat* icu::SimpleDateFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::SimpleTimeZone::clone() const</b>
+<br>SimpleTimeZone* icu::SimpleTimeZone::clone() const<br>SimpleTimeZone* icu::SimpleTimeZone::clone() const override<br>
+</li>
+<li>
+<b>void* icu::StringCharacterIterator::clone() const</b>
+<br>StringCharacterIterator* icu::StringCharacterIterator::clone() const<br>StringCharacterIterator* icu::StringCharacterIterator::clone() const override<br>
+</li>
+<li>
+<b>void* icu::StringSearch::safeClone() const</b>
+<br>StringSearch* icu::StringSearch::safeClone() const<br>StringSearch* icu::StringSearch::safeClone() const override<br>
+</li>
+<li>
+<b>void* icu::TimeArrayTimeZoneRule::clone() const</b>
+<br>TimeArrayTimeZoneRule* icu::TimeArrayTimeZoneRule::clone() const<br>TimeArrayTimeZoneRule* icu::TimeArrayTimeZoneRule::clone() const override<br>
+</li>
+<li>
+<b>void* icu::TimeUnit::clone() const</b>
+<br>TimeUnit* icu::TimeUnit::clone() const<br>TimeUnit* icu::TimeUnit::clone() const override<br>
+</li>
+<li>
+<b>void* icu::TimeUnitAmount::clone() const</b>
+<br>TimeUnitAmount* icu::TimeUnitAmount::clone() const<br>TimeUnitAmount* icu::TimeUnitAmount::clone() const override<br>
+</li>
+<li>
+<b>void* icu::TimeUnitFormat::clone() const</b>
+<br>TimeUnitFormat* icu::TimeUnitFormat::clone() const<br>TimeUnitFormat* icu::TimeUnitFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::TimeZoneFormat::clone() const</b>
+<br>TimeZoneFormat* icu::TimeZoneFormat::clone() const<br>TimeZoneFormat* icu::TimeZoneFormat::clone() const override<br>
+</li>
+<li>
+<b>void* icu::UCharCharacterIterator::clone() const</b>
+<br>UCharCharacterIterator* icu::UCharCharacterIterator::clone() const<br>UCharCharacterIterator* icu::UCharCharacterIterator::clone() const override<br>
+</li>
+<li>
+<b>void* icu::UnicodeFilter::clone() const</b>
+<br>UnicodeFilter* icu::UnicodeFilter::clone() const override=0<br>UnicodeFilter* icu::UnicodeFilter::clone() const=0<br>
+</li>
+<li>
+<b>void* icu::UnicodeSet::clone() const</b>
+<br>UnicodeSet* icu::UnicodeSet::clone() const<br>UnicodeSet* icu::UnicodeSet::clone() const override<br>
+</li>
+<li>
+<b>void* icu::UnicodeString::clone() const</b>
+<br>UnicodeString* icu::UnicodeString::clone() const<br>UnicodeString* icu::UnicodeString::clone() const override<br>
+</li>
+<li>
+<b>void* icu::VTimeZone::clone() const</b>
+<br>VTimeZone* icu::VTimeZone::clone() const<br>VTimeZone* icu::VTimeZone::clone() const override<br>
+</li>
+</ul>
</div>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<p>
-<i><font size="-1">Contents generated by StableAPI tool on Fri Oct 23 11:35:16 PDT 2020<br>
+<i><font size="-1">Contents generated by StableAPI tool on Wed Sep 29 11:59:05 PDT 2021<br>
Copyright &copy; 2017 and later: Unicode, Inc. and others.<br>
License &amp; terms of use: http://www.unicode.org/copyright.html
</font></i>
diff --git a/Build/source/libs/icu/icu-src/APIChangeReport.md b/Build/source/libs/icu/icu-src/APIChangeReport.md
index 5385904fd10..07cb985bd3c 100644
--- a/Build/source/libs/icu/icu-src/APIChangeReport.md
+++ b/Build/source/libs/icu/icu-src/APIChangeReport.md
@@ -5,391 +5,659 @@
License & terms of use: http://www.unicode.org/copyright.html
-->
-# ICU4C API Comparison: ICU 67 with ICU 68
+# ICU4C API Comparison: ICU 69 with ICU 70
> _Note_ Markdown format of this document is new for ICU 65.
-- [Removed from ICU 67](#removed)
-- [Deprecated or Obsoleted in ICU 68](#deprecated)
-- [Changed in ICU 68](#changed)
-- [Promoted to stable in ICU 68](#promoted)
-- [Added in ICU 68](#added)
-- [Other existing drafts in ICU 68](#other)
+- [Removed from ICU 69](#removed)
+- [Deprecated or Obsoleted in ICU 70](#deprecated)
+- [Changed in ICU 70](#changed)
+- [Promoted to stable in ICU 70](#promoted)
+- [Added in ICU 70](#added)
+- [Other existing drafts in ICU 70](#other)
- [Signature Simplifications](#simplifications)
## Removed
-Removed from ICU 67
+Removed from ICU 69
-| File | API | ICU 67 | ICU 68 |
+| File | API | ICU 69 | ICU 70 |
|---|---|---|---|
-| fmtable.h | const UFormattable* icu::Formattable::toUFormattable() | StableICU 52 | (missing)
-| measunit.h | LocalArray&lt;MeasureUnit&gt; icu::MeasureUnit::splitToSingleUnits(int32_t&amp;, UErrorCode&amp;) const | InternalICU 67 | (missing)
-| measunit.h | int32_t icu::MeasureUnit::getIndex() const | Internal | (missing)
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::resolveUnitPerUnit(const MeasureUnit&amp;, const MeasureUnit&amp;, bool*) | Internal | (missing)
-| measunit.h | <tt>static</tt> int32_t icu::MeasureUnit::getIndexCount() | Internal | (missing)
-| measunit.h | <tt>static</tt> int32_t icu::MeasureUnit::internalGetIndexForTypeAndSubtype(const char*, const char*) | Internal | (missing)
-| nounit.h | UClassID icu::NoUnit::getDynamicClassID() const | DraftICU 60 | (missing)
-| nounit.h | icu::NoUnit::NoUnit(const NoUnit&amp;) | DraftICU 60 | (missing)
-| nounit.h | icu::NoUnit::~NoUnit() | DraftICU 60 | (missing)
-| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::base() | DraftICU 60 | (missing)
-| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::percent() | DraftICU 60 | (missing)
-| nounit.h | <tt>static</tt> NoUnit icu::NoUnit::permille() | DraftICU 60 | (missing)
-| nounit.h | <tt>static</tt> UClassID icu::NoUnit::getStaticClassID() | DraftICU 60 | (missing)
-| nounit.h | void* icu::NoUnit::clone() const | DraftICU 60 | (missing)
-| uniset.h | const USet* icu::UnicodeSet::toUSet() | StableICU 4.2 | (missing)
+| tmutfmt.h | bool icu::TimeUnitFormat::operator!=(const Format&amp;) const | DeprecatedICU 53 | (missing)
## Deprecated
-Deprecated or Obsoleted in ICU 68
+Deprecated or Obsoleted in ICU 70
-| File | API | ICU 67 | ICU 68 |
+| File | API | ICU 69 | ICU 70 |
|---|---|---|---|
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const | DraftICU 63 | DeprecatedICU 68
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const | DraftICU 63 | DeprecatedICU 68
-| umachine.h | <tt>#define</tt> FALSE | StableICU 2.0 | DeprecatedICU 68
-| umachine.h | <tt>#define</tt> TRUE | StableICU 2.0 | DeprecatedICU 68
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration() | StableICU 2.4 | DeprecatedICU 70
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(const char*) | StableICU 2.4 | DeprecatedICU 70
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(int32_t) | StableICU 2.4 | DeprecatedICU 70
## Changed
-Changed in ICU 68 (old, new)
+Changed in ICU 70 (old, new)
-| File | API | ICU 67 | ICU 68 |
+| File | API | ICU 69 | ICU 70 |
|---|---|---|---|
-| bytestrie.h | BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t) | Draft→StableICU 65
-| bytestrie.h | uint64_t icu::BytesTrie::getState64() const | Draft→StableICU 65
-| listformatter.h | <tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UListFormatterType, UListFormatterWidth, UErrorCode&amp;) | Draft→StableICU 67
-| localebuilder.h | UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv) | Draft→StableICU 65
-| localematcher.h | Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE | Draft→StableICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION | Draft→StableICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE | Draft→StableICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::Builder() | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::~Builder() | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Result::Result(Result&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Result::~Result() | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::~LocaleMatcher() | Draft→StableICU 65
-| localematcher.h | int32_t icu::LocaleMatcher::Result::getDesiredIndex() const | Draft→StableICU 65
-| localematcher.h | int32_t icu::LocaleMatcher::Result::getSupportedIndex() const | Draft→StableICU 65
-| locid.h | UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override | Draft→StableICU 65
-| locid.h | UBool icu::Locale::Iterator::hasNext() const | Draft→StableICU 65
-| locid.h | UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override | Draft→StableICU 65
-| locid.h | const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override | Draft→StableICU 65
-| locid.h | const Locale&amp; icu::Locale::Iterator::next() | Draft→StableICU 65
-| locid.h | const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override | Draft→StableICU 65
-| locid.h | icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv) | Draft→StableICU 65
-| locid.h | icu::Locale::Iterator::~Iterator() | Draft→StableICU 65
-| locid.h | icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBar() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEm() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;) | Draft→StableICU 65
-| numberformatter.h | StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const | Draft→StableICU 65
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getFirstDecimal(UErrorCode&amp;) const | DraftICU 63 | DeprecatedICU 68
-| numberrangeformatter.h | UnicodeString icu::number::FormattedNumberRange::getSecondDecimal(UErrorCode&amp;) const | DraftICU 63 | DeprecatedICU 68
-| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR | Draft→StableICU 65
-| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE | Draft→StableICU 65
-| stringpiece.h | icu::StringPiece::StringPiece(T) | Draft→StableICU 65
-| ucal.h | int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*) | Draft→StableICU 65
-| ucharstrie.h | UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t) | Draft→StableICU 65
-| ucharstrie.h | uint64_t icu::UCharsTrie::getState64() const | Draft→StableICU 65
-| ulistformatter.h | UListFormatter* ulistfmt_openForType(const char*, UListFormatterType, UListFormatterWidth, UErrorCode*) | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_AND | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_OR | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_UNITS | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_NARROW | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_SHORT | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_WIDE | Draft→StableICU 67
-| uloc.h | UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*) | Draft→StableICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT | Draft→StableICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES | Draft→StableICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES | Draft→StableICU 65
-| umachine.h | <tt>#define</tt> FALSE | StableICU 2.0 | DeprecatedICU 68
-| umachine.h | <tt>#define</tt> TRUE | StableICU 2.0 | DeprecatedICU 68
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE | Draft→StableICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE | Draft→StableICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE | Draft→StableICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START | Draft→StableICU 65
+| dtitvfmt.h | UDisplayContext icu::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&amp;) const | Draft→StableICU 68
+| dtitvfmt.h | void icu::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&amp;) | Draft→StableICU 68
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setMaxDistance(const Locale&amp;, const Locale&amp;) | Draft→StableICU 68
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setNoDefaultLocale() | Draft→StableICU 68
+| localematcher.h | bool icu::LocaleMatcher::isMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCandela() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoon() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoonImperial() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDot() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDram() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDrop() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthRadius() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGrain() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getJigger() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLumen() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPinch() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getQuartImperial() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createCandela(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoon(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoonImperial(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDot(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDram(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDrop(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthRadius(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createGrain(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createJigger(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createLumen(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPinch(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuartImperial(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | std::pair&lt; LocalArray&lt; MeasureUnit &gt;, int32_t &gt; icu::MeasureUnit::splitToSingleUnits(UErrorCode&amp;) const | Draft→StableICU 68
+| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece) const&amp; | Draft→StableICU 68
+| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece)&amp;&amp; | Draft→StableICU 68
+| numberformatter.h | MeasureUnit icu::number::FormattedNumber::getOutputUnit(UErrorCode&amp;) const | Draft→StableICU 68
+| numberrangeformatter.h | std::pair&lt; StringClass, StringClass &gt; icu::number::FormattedNumberRange::getDecimalNumbers(UErrorCode&amp;) const | Draft→StableICU 68
+| plurrule.h | UnicodeString icu::PluralRules::select(const number::FormattedNumberRange&amp;, UErrorCode&amp;) const | Draft→StableICU 68
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration() | StableICU 2.4 | DeprecatedICU 70
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(const char*) | StableICU 2.4 | DeprecatedICU 70
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(int32_t) | StableICU 2.4 | DeprecatedICU 70
+| ucurr.h | <tt>enum</tt> UCurrNameStyle::UCURR_FORMAL_SYMBOL_NAME | Draft→StableICU 68
+| ucurr.h | <tt>enum</tt> UCurrNameStyle::UCURR_VARIANT_SYMBOL_NAME | Draft→StableICU 68
+| udateintervalformat.h | UDisplayContext udtitvfmt_getContext(const UDateIntervalFormat*, UDisplayContextType, UErrorCode*) | Draft→StableICU 68
+| udateintervalformat.h | void udtitvfmt_setContext(UDateIntervalFormat*, UDisplayContext, UErrorCode*) | Draft→StableICU 68
+| unum.h | <tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_AUTO | Draft→StableICU 68
+| unum.h | <tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_MIN2 | Draft→StableICU 68
+| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL | Draft→StableICU 68
+| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT | Draft→StableICU 68
+| unumberformatter.h | int32_t unumf_resultToDecimalNumber(const UFormattedNumber*, char*, int32_t, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | UFormattedNumberRange* unumrf_openResult(UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | UNumberRangeFormatter* unumrf_openForSkeletonWithCollapseAndIdentityFallback(const UChar*, int32_t, UNumberRangeCollapse, UNumberRangeIdentityFallback, const char*, UParseError*, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | UNumberRangeIdentityResult unumrf_resultGetIdentityResult(const UFormattedNumberRange*, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | const UFormattedValue* unumrf_resultAsValue(const UFormattedNumberRange*, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | int32_t unumrf_resultGetFirstDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | int32_t unumrf_resultGetSecondDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | void unumrf_close(UNumberRangeFormatter*) | Draft→StableICU 68
+| unumberrangeformatter.h | void unumrf_closeResult(UFormattedNumberRange*) | Draft→StableICU 68
+| unumberrangeformatter.h | void unumrf_formatDecimalRange(const UNumberRangeFormatter*, const char*, int32_t, const char*, int32_t, UFormattedNumberRange*, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | void unumrf_formatDoubleRange(const UNumberRangeFormatter*, double, double, UFormattedNumberRange*, UErrorCode*) | Draft→StableICU 68
+| upluralrules.h | int32_t uplrules_selectForRange(const UPluralRules*, const struct UFormattedNumberRange*, UChar*, int32_t, UErrorCode*) | Draft→StableICU 68
## Promoted
-Promoted to stable in ICU 68
+Promoted to stable in ICU 70
-| File | API | ICU 67 | ICU 68 |
+| File | API | ICU 69 | ICU 70 |
|---|---|---|---|
-| bytestrie.h | BytesTrie&amp; icu::BytesTrie::resetToState64(uint64_t) | Draft→StableICU 65
-| bytestrie.h | uint64_t icu::BytesTrie::getState64() const | Draft→StableICU 65
-| fmtable.h | UFormattable* icu::Formattable::toUFormattable() | (missing) | StableICU 52
-| listformatter.h | <tt>static</tt> ListFormatter* icu::ListFormatter::createInstance(const Locale&amp;, UListFormatterType, UListFormatterWidth, UErrorCode&amp;) | Draft→StableICU 67
-| localebuilder.h | UBool icu::LocaleBuilder::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::addSupportedLocale(const Locale&amp;) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::operator=(Builder&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDefaultLocale(const Locale*) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDemotionPerDesiredLocale(ULocMatchDemotion) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setFavorSubtag(ULocMatchFavorSubtag) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Iter, Iter) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocales(Locale::Iterator&amp;) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesFromListString(StringPiece) | Draft→StableICU 65
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setSupportedLocalesViaConverter(Iter, Iter, Conv) | Draft→StableICU 65
-| localematcher.h | Locale icu::LocaleMatcher::Result::makeResolvedLocale(UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | LocaleMatcher icu::LocaleMatcher::Builder::build(UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | LocaleMatcher&amp; icu::LocaleMatcher::operator=(LocaleMatcher&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(Locale::Iterator&amp;, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | Result icu::LocaleMatcher::getBestMatchResult(const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | Result&amp; icu::LocaleMatcher::Result::operator=(Result&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | UBool icu::LocaleMatcher::Builder::copyErrorTo(UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::Result::getDesiredLocale() const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::Result::getSupportedLocale() const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(Locale::Iterator&amp;, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatch(const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | const Locale* icu::LocaleMatcher::getBestMatchForListString(StringPiece, UErrorCode&amp;) const | Draft→StableICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_NONE | Draft→StableICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchDemotion::ULOCMATCH_DEMOTION_REGION | Draft→StableICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_LANGUAGE | Draft→StableICU 65
-| localematcher.h | <tt>enum</tt> ULocMatchFavorSubtag::ULOCMATCH_FAVOR_SCRIPT | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::Builder() | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::Builder(Builder&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Builder::~Builder() | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::LocaleMatcher(LocaleMatcher&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Result::Result(Result&amp;&amp;) | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::Result::~Result() | Draft→StableICU 65
-| localematcher.h | icu::LocaleMatcher::~LocaleMatcher() | Draft→StableICU 65
-| localematcher.h | int32_t icu::LocaleMatcher::Result::getDesiredIndex() const | Draft→StableICU 65
-| localematcher.h | int32_t icu::LocaleMatcher::Result::getSupportedIndex() const | Draft→StableICU 65
-| locid.h | UBool icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::hasNext() const override | Draft→StableICU 65
-| locid.h | UBool icu::Locale::Iterator::hasNext() const | Draft→StableICU 65
-| locid.h | UBool icu::Locale::RangeIterator&lt; Iter &gt;::hasNext() const override | Draft→StableICU 65
-| locid.h | const Locale&amp; icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::next() override | Draft→StableICU 65
-| locid.h | const Locale&amp; icu::Locale::Iterator::next() | Draft→StableICU 65
-| locid.h | const Locale&amp; icu::Locale::RangeIterator&lt; Iter &gt;::next() override | Draft→StableICU 65
-| locid.h | icu::Locale::ConvertingIterator&lt; Iter, Conv &gt;::ConvertingIterator(Iter, Iter, Conv) | Draft→StableICU 65
-| locid.h | icu::Locale::Iterator::~Iterator() | Draft→StableICU 65
-| locid.h | icu::Locale::RangeIterator&lt; Iter &gt;::RangeIterator(Iter, Iter) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getBar() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDecade() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerCentimeter() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDotPerInch() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEm() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMegapixel() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPascal() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixel() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerCentimeter() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPixelPerInch() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getThermUs() | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createBar(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDecade(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerCentimeter(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDotPerInch(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEm(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMegapixel(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPascal(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixel(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerCentimeter(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPixelPerInch(UErrorCode&amp;) | Draft→StableICU 65
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createThermUs(UErrorCode&amp;) | Draft→StableICU 65
-| numberformatter.h | StringClass icu::number::FormattedNumber::toDecimalNumber(UErrorCode&amp;) const | Draft→StableICU 65
-| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_HOUR | Draft→StableICU 65
-| reldatefmt.h | <tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_MINUTE | Draft→StableICU 65
-| stringpiece.h | icu::StringPiece::StringPiece(T) | Draft→StableICU 65
-| ucal.h | int32_t ucal_getHostTimeZone(UChar*, int32_t, UErrorCode*) | Draft→StableICU 65
-| ucharstrie.h | UCharsTrie&amp; icu::UCharsTrie::resetToState64(uint64_t) | Draft→StableICU 65
-| ucharstrie.h | uint64_t icu::UCharsTrie::getState64() const | Draft→StableICU 65
-| ulistformatter.h | UListFormatter* ulistfmt_openForType(const char*, UListFormatterType, UListFormatterWidth, UErrorCode*) | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_AND | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_OR | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterType::ULISTFMT_TYPE_UNITS | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_NARROW | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_SHORT | Draft→StableICU 67
-| ulistformatter.h | <tt>enum</tt> UListFormatterWidth::ULISTFMT_WIDTH_WIDE | Draft→StableICU 67
-| uloc.h | UEnumeration* uloc_openAvailableByType(ULocAvailableType, UErrorCode*) | Draft→StableICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_DEFAULT | Draft→StableICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_ONLY_LEGACY_ALIASES | Draft→StableICU 65
-| uloc.h | <tt>enum</tt> ULocAvailableType::ULOC_AVAILABLE_WITH_LEGACY_ALIASES | Draft→StableICU 65
-| uniset.h | USet* icu::UnicodeSet::toUSet() | (missing) | StableICU 4.2
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_BUNDLE | Draft→StableICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_DATA_FILE | Draft→StableICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_RES_FILE | Draft→StableICU 65
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UDATA_START | Draft→StableICU 65
+| dtitvfmt.h | UDisplayContext icu::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&amp;) const | Draft→StableICU 68
+| dtitvfmt.h | void icu::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&amp;) | Draft→StableICU 68
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setMaxDistance(const Locale&amp;, const Locale&amp;) | Draft→StableICU 68
+| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setNoDefaultLocale() | Draft→StableICU 68
+| localematcher.h | bool icu::LocaleMatcher::isMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCandela() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoon() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoonImperial() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDot() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDram() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDrop() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthRadius() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGrain() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getJigger() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLumen() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPinch() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getQuartImperial() | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createCandela(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoon(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoonImperial(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDot(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDram(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDrop(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthRadius(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createGrain(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createJigger(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createLumen(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPinch(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuartImperial(UErrorCode&amp;) | Draft→StableICU 68
+| measunit.h | std::pair&lt; LocalArray&lt; MeasureUnit &gt;, int32_t &gt; icu::MeasureUnit::splitToSingleUnits(UErrorCode&amp;) const | Draft→StableICU 68
+| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece) const&amp; | Draft→StableICU 68
+| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece)&amp;&amp; | Draft→StableICU 68
+| numberformatter.h | MeasureUnit icu::number::FormattedNumber::getOutputUnit(UErrorCode&amp;) const | Draft→StableICU 68
+| numberrangeformatter.h | std::pair&lt; StringClass, StringClass &gt; icu::number::FormattedNumberRange::getDecimalNumbers(UErrorCode&amp;) const | Draft→StableICU 68
+| plurrule.h | UnicodeString icu::PluralRules::select(const number::FormattedNumberRange&amp;, UErrorCode&amp;) const | Draft→StableICU 68
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(UErrorCode&amp;) | (missing) | StableICU 70| *(Born Stable)* |
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumerationForRawOffset(int32_t, UErrorCode&amp;) | (missing) | StableICU 70| *(Born Stable)* |
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumerationForRegion(const char*, UErrorCode&amp;) | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_ARABIC_EXTENDED_B | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_CYPRO_MINOAN | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_ETHIOPIC_EXTENDED_B | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_KANA_EXTENDED_B | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_LATIN_EXTENDED_F | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_LATIN_EXTENDED_G | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_OLD_UYGHUR | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_TANGSA | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_TOTO | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_VITHKUQI | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_ZNAMENNY_MUSICAL_NOTATION | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UJoiningGroup::U_JG_THIN_YEH | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UJoiningGroup::U_JG_VERTICAL_TAIL | (missing) | StableICU 70| *(Born Stable)* |
+| ucurr.h | <tt>enum</tt> UCurrNameStyle::UCURR_FORMAL_SYMBOL_NAME | Draft→StableICU 68
+| ucurr.h | <tt>enum</tt> UCurrNameStyle::UCURR_VARIANT_SYMBOL_NAME | Draft→StableICU 68
+| udateintervalformat.h | UDisplayContext udtitvfmt_getContext(const UDateIntervalFormat*, UDisplayContextType, UErrorCode*) | Draft→StableICU 68
+| udateintervalformat.h | void udtitvfmt_setContext(UDateIntervalFormat*, UDisplayContext, UErrorCode*) | Draft→StableICU 68
+| unum.h | <tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_AUTO | Draft→StableICU 68
+| unum.h | <tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_MIN2 | Draft→StableICU 68
+| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL | Draft→StableICU 68
+| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT | Draft→StableICU 68
+| unumberformatter.h | int32_t unumf_resultToDecimalNumber(const UFormattedNumber*, char*, int32_t, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | UFormattedNumberRange* unumrf_openResult(UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | UNumberRangeFormatter* unumrf_openForSkeletonWithCollapseAndIdentityFallback(const UChar*, int32_t, UNumberRangeCollapse, UNumberRangeIdentityFallback, const char*, UParseError*, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | UNumberRangeIdentityResult unumrf_resultGetIdentityResult(const UFormattedNumberRange*, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | const UFormattedValue* unumrf_resultAsValue(const UFormattedNumberRange*, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | int32_t unumrf_resultGetFirstDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | int32_t unumrf_resultGetSecondDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | void unumrf_close(UNumberRangeFormatter*) | Draft→StableICU 68
+| unumberrangeformatter.h | void unumrf_closeResult(UFormattedNumberRange*) | Draft→StableICU 68
+| unumberrangeformatter.h | void unumrf_formatDecimalRange(const UNumberRangeFormatter*, const char*, int32_t, const char*, int32_t, UFormattedNumberRange*, UErrorCode*) | Draft→StableICU 68
+| unumberrangeformatter.h | void unumrf_formatDoubleRange(const UNumberRangeFormatter*, double, double, UFormattedNumberRange*, UErrorCode*) | Draft→StableICU 68
+| upluralrules.h | int32_t uplrules_selectForRange(const UPluralRules*, const struct UFormattedNumberRange*, UChar*, int32_t, UErrorCode*) | Draft→StableICU 68
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_CYPRO_MINOAN | (missing) | StableICU 70| *(Born Stable)* |
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_OLD_UYGHUR | (missing) | StableICU 70| *(Born Stable)* |
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_TANGSA | (missing) | StableICU 70| *(Born Stable)* |
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_TOTO | (missing) | StableICU 70| *(Born Stable)* |
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_VITHKUQI | (missing) | StableICU 70| *(Born Stable)* |
+| utypes.h | <tt>enum</tt> UErrorCode::U_INPUT_TOO_LONG_ERROR | (missing) | StableICU 68
## Added
-Added in ICU 68
+Added in ICU 70
-| File | API | ICU 67 | ICU 68 |
+| File | API | ICU 69 | ICU 70 |
|---|---|---|---|
-| dtitvfmt.h | UDisplayContext icu::DateIntervalFormat::getContext(UDisplayContextType, UErrorCode&amp;) const | (missing) | DraftICU 68
-| dtitvfmt.h | void icu::DateIntervalFormat::setContext(UDisplayContext, UErrorCode&amp;) | (missing) | DraftICU 68
-| dtptngen.h | <tt>static</tt> DateTimePatternGenerator* icu::DateTimePatternGenerator::createInstanceNoStdPat(const Locale&amp;, UErrorCode&amp;) | (missing) | Internal
-| fmtable.h | UFormattable* icu::Formattable::toUFormattable() | (missing) | StableICU 52
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setMaxDistance(const Locale&amp;, const Locale&amp;) | (missing) | DraftICU 68
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setNoDefaultLocale() | (missing) | DraftICU 68
-| localematcher.h | UBool icu::LocaleMatcher::isMatch(const Locale&amp;, const Locale&amp;, UErrorCode&amp;) const | (missing) | DraftICU 68
-| measunit.h | int32_t icu::MeasureUnit::getOffset() const | (missing) | Internal
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getCandela() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoon() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDessertSpoonImperial() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDot() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDram() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getDrop() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getEarthRadius() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getGrain() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getJigger() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getLumen() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getPinch() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getQuartImperial() | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createCandela(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoon(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDessertSpoonImperial(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDot(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDram(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createDrop(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createEarthRadius(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createGrain(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createJigger(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createLumen(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createPinch(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createQuartImperial(UErrorCode&amp;) | (missing) | DraftICU 68
-| measunit.h | std::pair&lt; LocalArray&lt; MeasureUnit &gt;, int32_t &gt; icu::MeasureUnit::splitToSingleUnits(UErrorCode&amp;) const | (missing) | DraftICU 68
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece) const&amp; | (missing) | DraftICU 68
-| numberformatter.h | Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::usage(StringPiece)&amp;&amp; | (missing) | DraftICU 68
-| numberformatter.h | MeasureUnit icu::number::FormattedNumber::getOutputUnit(UErrorCode&amp;) const | (missing) | DraftICU 68
-| numberformatter.h | Usage&amp; icu::number::impl::Usage::operator=(Usage&amp;&amp;) | (missing) | Internal
-| numberformatter.h | Usage&amp; icu::number::impl::Usage::operator=(const Usage&amp;) | (missing) | Internal
-| numberformatter.h | bool icu::number::impl::Usage::isSet() const | (missing) | Internal
-| numberformatter.h | icu::number::impl::Usage::Usage(Usage&amp;&amp;) | (missing) | Internal
-| numberformatter.h | icu::number::impl::Usage::Usage(const Usage&amp;) | (missing) | Internal
-| numberformatter.h | icu::number::impl::Usage::~Usage() | (missing) | Internal
-| numberformatter.h | int16_t icu::number::impl::Usage::length() const | (missing) | Internal
-| numberformatter.h | void icu::number::impl::Usage::set(StringPiece) | (missing) | Internal
-| numberrangeformatter.h | std::pair&lt; StringClass, StringClass &gt; icu::number::FormattedNumberRange::getDecimalNumbers(UErrorCode&amp;) const | (missing) | DraftICU 68
-| plurrule.h | UnicodeString icu::PluralRules::select(const number::FormattedNumberRange&amp;, UErrorCode&amp;) const | (missing) | DraftICU 68
-| plurrule.h | UnicodeString icu::PluralRules::select(const number::impl::UFormattedNumberRangeData*, UErrorCode&amp;) const | (missing) | Internal
-| plurrule.h | int32_t icu::PluralRules::getSamples(const UnicodeString&amp;, FixedDecimal*, int32_t, UErrorCode&amp;) | (missing) | Internal
-| timezone.h | <tt>static</tt> TimeZone* icu::TimeZone::forLocaleOrDefault(const Locale&amp;) | (missing) | Internal
-| ucurr.h | <tt>enum</tt> UCurrNameStyle::UCURR_FORMAL_SYMBOL_NAME | (missing) | DraftICU 68
-| ucurr.h | <tt>enum</tt> UCurrNameStyle::UCURR_VARIANT_SYMBOL_NAME | (missing) | DraftICU 68
-| udateintervalformat.h | UDisplayContext udtitvfmt_getContext(const UDateIntervalFormat*, UDisplayContextType, UErrorCode*) | (missing) | DraftICU 68
-| udateintervalformat.h | void udtitvfmt_setContext(UDateIntervalFormat*, UDisplayContext, UErrorCode*) | (missing) | DraftICU 68
-| umachine.h | <tt>#define</tt> U_DEFINE_FALSE_AND_TRUE | (missing) | InternalICU 68
-| uniset.h | USet* icu::UnicodeSet::toUSet() | (missing) | StableICU 4.2
-| unum.h | <tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_AUTO | (missing) | DraftICU 68
-| unum.h | <tt>enum</tt> UNumberFormatMinimumGroupingDigits::UNUM_MINIMUM_GROUPING_DIGITS_MIN2 | (missing) | DraftICU 68
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL | (missing) | DraftICU 68
-| unumberformatter.h | <tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT | (missing) | DraftICU 68
-| unumberformatter.h | int32_t unumf_resultToDecimalNumber(const UFormattedNumber*, char*, int32_t, UErrorCode*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | UFormattedNumberRange* unumrf_openResult(UErrorCode*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | UNumberRangeFormatter* unumrf_openForSkeletonWithCollapseAndIdentityFallback(const UChar*, int32_t, UNumberRangeCollapse, UNumberRangeIdentityFallback, const char*, UParseError*, UErrorCode*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | UNumberRangeIdentityResult unumrf_resultGetIdentityResult(const UFormattedNumberRange*, UErrorCode*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | const UFormattedValue* unumrf_resultAsValue(const UFormattedNumberRange*, UErrorCode*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | int32_t unumrf_resultGetFirstDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | int32_t unumrf_resultGetSecondDecimalNumber(const UFormattedNumberRange*, char*, int32_t, UErrorCode*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | void unumrf_close(UNumberRangeFormatter*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | void unumrf_closeResult(UFormattedNumberRange*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | void unumrf_formatDecimalRange(const UNumberRangeFormatter*, const char*, int32_t, const char*, int32_t, UFormattedNumberRange*, UErrorCode*) | (missing) | DraftICU 68
-| unumberrangeformatter.h | void unumrf_formatDoubleRange(const UNumberRangeFormatter*, double, double, UFormattedNumberRange*, UErrorCode*) | (missing) | DraftICU 68
-| upluralrules.h | int32_t uplrules_selectForRange(const UPluralRules*, const struct UFormattedNumberRange*, UChar*, int32_t, UErrorCode*) | (missing) | DraftICU 68
+| dcfmtsym.h | <tt>enum</tt> icu::DecimalFormatSymbols::ENumberFormatSymbol::kApproximatelySignSymbol | (missing) | Internal
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getItem() | (missing) | DraftICU 70
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getKilowattHourPer100Kilometer() | (missing) | DraftICU 70
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createItem(UErrorCode&amp;) | (missing) | DraftICU 70
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createKilowattHourPer100Kilometer(UErrorCode&amp;) | (missing) | DraftICU 70
+| numberformatter.h | const DecimalFormatSymbols* icu::number::LocalizedNumberFormatter::getDecimalFormatSymbols() const | (missing) | Internal
+| numberrangeformatter.h | icu::number::FormattedNumberRange::FormattedNumberRange() | (missing) | DraftICU 70
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumeration(UErrorCode&amp;) | (missing) | StableICU 70| *(Born Stable)* |
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumerationForRawOffset(int32_t, UErrorCode&amp;) | (missing) | StableICU 70| *(Born Stable)* |
+| timezone.h | <tt>static</tt> StringEnumeration* icu::TimeZone::createEnumerationForRegion(const char*, UErrorCode&amp;) | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | bool u_stringHasBinaryProperty(const UChar*, int32_t, UProperty) | (missing) | DraftICU 70
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_ARABIC_EXTENDED_B | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_CYPRO_MINOAN | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_ETHIOPIC_EXTENDED_B | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_KANA_EXTENDED_B | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_LATIN_EXTENDED_F | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_LATIN_EXTENDED_G | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_OLD_UYGHUR | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_TANGSA | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_TOTO | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_VITHKUQI | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UBlockCode::UBLOCK_ZNAMENNY_MUSICAL_NOTATION | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UJoiningGroup::U_JG_THIN_YEH | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UJoiningGroup::U_JG_VERTICAL_TAIL | (missing) | StableICU 70| *(Born Stable)* |
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_BASIC_EMOJI | (missing) | DraftICU 70
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_EMOJI_KEYCAP_SEQUENCE | (missing) | DraftICU 70
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_FLAG_SEQUENCE | (missing) | DraftICU 70
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE | (missing) | DraftICU 70
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_TAG_SEQUENCE | (missing) | DraftICU 70
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI_ZWJ_SEQUENCE | (missing) | DraftICU 70
+| uchar.h | <tt>enum</tt> UProperty::UCHAR_RGI_EMOJI | (missing) | DraftICU 70
+| udat.h | <tt>enum</tt> UDateFormatSymbolType::UDAT_NARROW_QUARTERS | (missing) | DraftICU 70
+| udat.h | <tt>enum</tt> UDateFormatSymbolType::UDAT_STANDALONE_NARROW_QUARTERS | (missing) | DraftICU 70
+| uniset.h | bool icu::UnicodeSet::hasStrings() const | (missing) | DraftICU 70
+| unum.h | <tt>enum</tt> UNumberFormatSymbol::UNUM_APPROXIMATELY_SIGN_SYMBOL | (missing) | Internal
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_CYPRO_MINOAN | (missing) | StableICU 70| *(Born Stable)* |
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_OLD_UYGHUR | (missing) | StableICU 70| *(Born Stable)* |
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_TANGSA | (missing) | StableICU 70| *(Born Stable)* |
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_TOTO | (missing) | StableICU 70| *(Born Stable)* |
+| uscript.h | <tt>enum</tt> UScriptCode::USCRIPT_VITHKUQI | (missing) | StableICU 70| *(Born Stable)* |
+| uset.h | bool uset_hasStrings(const USet*) | (missing) | DraftICU 70
+| uset.h | int32_t uset_getRangeCount(const USet*) | (missing) | DraftICU 70
+| usetiter.h | UnicodeSetIterator&amp; icu::UnicodeSetIterator::skipToStrings() | (missing) | DraftICU 70
+| utypes.h | <tt>enum</tt> UErrorCode::U_INPUT_TOO_LONG_ERROR | (missing) | StableICU 68
## Other
-Other existing drafts in ICU 68
+Other existing drafts in ICU 70
-| File | API | ICU 67 | ICU 68 |
+| File | API | ICU 69 | ICU 70 |
|---|---|---|---|
-| bytestream.h | void icu::ByteSink::AppendU8(const char*, int32_t) | DraftICU 67 |
-| bytestream.h | void icu::ByteSink::AppendU8(const char8_t*, int32_t) | DraftICU 67 |
-| dtptngen.h | UDateFormatHourCycle icu::DateTimePatternGenerator::getDefaultHourCycle(UErrorCode&amp;) const | DraftICU 67 |
-| localematcher.h | Builder&amp; icu::LocaleMatcher::Builder::setDirection(ULocMatchDirection) | DraftICU 67 |
-| localematcher.h | <tt>enum</tt> ULocMatchDirection::ULOCMATCH_DIRECTION_ONLY_TWO_WAY | DraftICU 67 |
-| localematcher.h | <tt>enum</tt> ULocMatchDirection::ULOCMATCH_DIRECTION_WITH_ONE_WAY | DraftICU 67 |
-| locid.h | void icu::Locale::canonicalize(UErrorCode&amp;) | DraftICU 67 |
+| basictz.h | void icu::BasicTimeZone::getOffsetFromLocal(UDate, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const | DraftICU 69 |
| measfmt.h | void icu::MeasureFormat::parseObject(const UnicodeString&amp;, Formattable&amp;, ParsePosition&amp;) const | DraftICU 53 |
-| measunit.h | MeasureUnit icu::MeasureUnit::product(const MeasureUnit&amp;, UErrorCode&amp;) const | DraftICU 67 |
-| measunit.h | MeasureUnit icu::MeasureUnit::reciprocal(UErrorCode&amp;) const | DraftICU 67 |
-| measunit.h | MeasureUnit icu::MeasureUnit::withDimensionality(int32_t, UErrorCode&amp;) const | DraftICU 67 |
-| measunit.h | MeasureUnit icu::MeasureUnit::withSIPrefix(UMeasureSIPrefix, UErrorCode&amp;) const | DraftICU 67 |
-| measunit.h | MeasureUnit&amp; icu::MeasureUnit::operator=(MeasureUnit&amp;&amp;) noexcept | DraftICU 67 |
-| measunit.h | UMeasureSIPrefix icu::MeasureUnit::getSIPrefix(UErrorCode&amp;) const | DraftICU 67 |
-| measunit.h | UMeasureUnitComplexity icu::MeasureUnit::getComplexity(UErrorCode&amp;) const | DraftICU 67 |
-| measunit.h | const char* icu::MeasureUnit::getIdentifier() const | DraftICU 67 |
-| measunit.h | icu::MeasureUnit::MeasureUnit(MeasureUnit&amp;&amp;) noexcept | DraftICU 67 |
-| measunit.h | int32_t icu::MeasureUnit::getDimensionality(UErrorCode&amp;) const | DraftICU 67 |
-| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::forIdentifier(StringPiece, UErrorCode&amp;) | DraftICU 67 |
-| stringpiece.h | icu::StringPiece::StringPiece(const char8_t*) | DraftICU 67 |
-| stringpiece.h | icu::StringPiece::StringPiece(const char8_t*, int32_t) | DraftICU 67 |
-| stringpiece.h | icu::StringPiece::StringPiece(const std::u8string&amp;) | DraftICU 67 |
-| stringpiece.h | icu::StringPiece::StringPiece(std::nullptr_t) | DraftICU 67 |
-| stringpiece.h | int32_t icu::StringPiece::compare(StringPiece) | DraftICU 67 |
-| stringpiece.h | int32_t icu::StringPiece::find(StringPiece, int32_t) | DraftICU 67 |
-| stringpiece.h | void icu::StringPiece::set(const char8_t*) | DraftICU 67 |
-| stringpiece.h | void icu::StringPiece::set(const char8_t*, int32_t) | DraftICU 67 |
-| udat.h | <tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_11 | DraftICU 67 |
-| udat.h | <tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_12 | DraftICU 67 |
-| udat.h | <tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_23 | DraftICU 67 |
-| udat.h | <tt>enum</tt> UDateFormatHourCycle::UDAT_HOUR_CYCLE_24 | DraftICU 67 |
-| udateintervalformat.h | void udtitvfmt_formatCalendarToResult(const UDateIntervalFormat*, UCalendar*, UCalendar*, UFormattedDateInterval*, UErrorCode*) | DraftICU 67 |
-| udateintervalformat.h | void udtitvfmt_formatToResult(const UDateIntervalFormat*, UDate, UDate, UFormattedDateInterval*, UErrorCode*) | DraftICU 67 |
-| udatpg.h | UDateFormatHourCycle udatpg_getDefaultHourCycle(const UDateTimePatternGenerator*, UErrorCode*) | DraftICU 67 |
+| measunit.h | MeasureUnit icu::MeasureUnit::withPrefix(UMeasurePrefix, UErrorCode&amp;) const | DraftICU 69 |
+| measunit.h | UMeasurePrefix icu::MeasureUnit::getPrefix(UErrorCode&amp;) const | DraftICU 69 |
+| measunit.h | <tt>static</tt> MeasureUnit icu::MeasureUnit::getMilligramOfglucosePerDeciliter() | DraftICU 69 |
+| measunit.h | <tt>static</tt> MeasureUnit* icu::MeasureUnit::createMilligramOfglucosePerDeciliter(UErrorCode&amp;) | DraftICU 69 |
+| numberformatter.h | Precision icu::number::FractionPrecision::withSignificantDigits(int32_t, int32_t, UNumberRoundingPriority) const | DraftICU 69 |
+| numberformatter.h | Precision icu::number::Precision::trailingZeroDisplay(UNumberTrailingZeroDisplay) const | DraftICU 69 |
+| rbtz.h | void icu::RuleBasedTimeZone::getOffsetFromLocal(UDate, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const | DraftICU 69 |
+| simpletz.h | void icu::SimpleTimeZone::getOffsetFromLocal(UDate, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const | DraftICU 69 |
+| ubrk.h | UBreakIterator* ubrk_clone(const UBreakIterator*, UErrorCode*) | DraftICU 69 |
+| ucal.h | <tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_DAYLIGHT_FORMER | DraftICU 69 |
+| ucal.h | <tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_DAYLIGHT_LATTER | DraftICU 69 |
+| ucal.h | <tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_FORMER | DraftICU 69 |
+| ucal.h | <tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_LATTER | DraftICU 69 |
+| ucal.h | <tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_STANDARD_FORMER | DraftICU 69 |
+| ucal.h | <tt>enum</tt> UTimeZoneLocalOption::UCAL_TZ_LOCAL_STANDARD_LATTER | DraftICU 69 |
+| ucal.h | void ucal_getTimeZoneOffsetFromLocal(const UCalendar*, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t*, int32_t*, UErrorCode*) | DraftICU 69 |
+| uformattedvalue.h | <tt>enum</tt> UFieldCategory::UFIELD_CATEGORY_NUMBER_RANGE_SPAN | DraftICU 69 |
+| uniset.h | UnicodeSet&amp; icu::UnicodeSet::retain(const UnicodeString&amp;) | DraftICU 69 |
+| unum.h | <tt>enum</tt> UNumberFormatRoundingMode::UNUM_ROUND_HALF_CEILING | DraftICU 69 |
+| unum.h | <tt>enum</tt> UNumberFormatRoundingMode::UNUM_ROUND_HALF_FLOOR | DraftICU 69 |
+| unum.h | <tt>enum</tt> UNumberFormatRoundingMode::UNUM_ROUND_HALF_ODD | DraftICU 69 |
+| unumberformatter.h | <tt>enum</tt> UNumberRoundingPriority::UNUM_ROUNDING_PRIORITY_RELAXED | DraftICU 69 |
+| unumberformatter.h | <tt>enum</tt> UNumberRoundingPriority::UNUM_ROUNDING_PRIORITY_STRICT | DraftICU 69 |
+| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_NEGATIVE | DraftICU 69 |
+| unumberformatter.h | <tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_NEGATIVE | DraftICU 69 |
+| unumberformatter.h | <tt>enum</tt> UNumberTrailingZeroDisplay::UNUM_TRAILING_ZERO_AUTO | DraftICU 69 |
+| unumberformatter.h | <tt>enum</tt> UNumberTrailingZeroDisplay::UNUM_TRAILING_ZERO_HIDE_IF_WHOLE | DraftICU 69 |
| uregex.h | <tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ | DraftICU 2.4 |
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_BREAK_ENGINE | DraftICU 67 |
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_CHARACTER | DraftICU 67 |
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_LINE | DraftICU 67 |
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_SENTENCE | DraftICU 67 |
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_TITLE | DraftICU 67 |
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_CREATE_WORD | DraftICU 67 |
-| utrace.h | <tt>enum</tt> UTraceFunctionNumber::UTRACE_UBRK_START | DraftICU 67 |
+| uset.h | void uset_complementAllCodePoints(USet*, const UChar*, int32_t) | DraftICU 69 |
+| uset.h | void uset_complementRange(USet*, UChar32, UChar32) | DraftICU 69 |
+| uset.h | void uset_complementString(USet*, const UChar*, int32_t) | DraftICU 69 |
+| uset.h | void uset_removeAllCodePoints(USet*, const UChar*, int32_t) | DraftICU 69 |
+| uset.h | void uset_retainAllCodePoints(USet*, const UChar*, int32_t) | DraftICU 69 |
+| uset.h | void uset_retainString(USet*, const UChar*, int32_t) | DraftICU 69 |
+| vtzone.h | void icu::VTimeZone::getOffsetFromLocal(UDate, UTimeZoneLocalOption, UTimeZoneLocalOption, int32_t&amp;, int32_t&amp;, UErrorCode&amp;) const | DraftICU 69 |
## Simplifications
This section shows cases where the signature was "simplified" for the sake of comparison. The simplified form is in bold, followed by
all possible variations in "original" form.
+- **`UClassID icu::BreakIterator::getDynamicClassID() const`**
+ - `UClassID icu::BreakIterator::getDynamicClassID() const override=0`
+ - `UClassID icu::BreakIterator::getDynamicClassID() const=0`
+- **`UClassID icu::Calendar::getDynamicClassID() const`**
+ - `UClassID icu::Calendar::getDynamicClassID() const override=0`
+ - `UClassID icu::Calendar::getDynamicClassID() const=0`
+- **`UClassID icu::Collator::getDynamicClassID() const`**
+ - `UClassID icu::Collator::getDynamicClassID() const override=0`
+ - `UClassID icu::Collator::getDynamicClassID() const=0`
+- **`UClassID icu::ForwardCharacterIterator::getDynamicClassID() const`**
+ - `UClassID icu::ForwardCharacterIterator::getDynamicClassID() const override=0`
+ - `UClassID icu::ForwardCharacterIterator::getDynamicClassID() const=0`
+- **`UClassID icu::NumberFormat::getDynamicClassID() const`**
+ - `UClassID icu::NumberFormat::getDynamicClassID() const override=0`
+ - `UClassID icu::NumberFormat::getDynamicClassID() const=0`
+- **`UClassID icu::TimeZone::getDynamicClassID() const`**
+ - `UClassID icu::TimeZone::getDynamicClassID() const override=0`
+ - `UClassID icu::TimeZone::getDynamicClassID() const=0`
+- **`UClassID icu::Transliterator::getDynamicClassID() const`**
+ - `UClassID icu::Transliterator::getDynamicClassID() const override=0`
+ - `UClassID icu::Transliterator::getDynamicClassID() const=0`
+- **`UClassID icu::UnicodeFunctor::getDynamicClassID() const`**
+ - `UClassID icu::UnicodeFunctor::getDynamicClassID() const override=0`
+ - `UClassID icu::UnicodeFunctor::getDynamicClassID() const=0`
+- **`UMatchDegree icu::UnicodeFilter::matches(const Replaceable&, int32_t&, int32_t, bool)`**
+ - `UMatchDegree icu::UnicodeFilter::matches(const Replaceable&, int32_t&, int32_t, UBool)`
+ - `UMatchDegree icu::UnicodeFilter::matches(const Replaceable&, int32_t&, int32_t, UBool) override`
+- **`UMatchDegree icu::UnicodeSet::matches(const Replaceable&, int32_t&, int32_t, bool)`**
+ - `UMatchDegree icu::UnicodeSet::matches(const Replaceable&, int32_t&, int32_t, UBool)`
+ - `UMatchDegree icu::UnicodeSet::matches(const Replaceable&, int32_t&, int32_t, UBool) override`
+- **`UnicodeString& icu::UnicodeSet::toPattern(UnicodeString&, bool escapeUnprintable=) const`**
+ - `UnicodeString& icu::UnicodeSet::toPattern(UnicodeString&, UBool escapeUnprintable=) const`
+ - `UnicodeString& icu::UnicodeSet::toPattern(UnicodeString&, UBool escapeUnprintable=) const override`
+- **`bool icu::AnnualTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const`**
+ - `UBool icu::AnnualTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const`
+ - `UBool icu::AnnualTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const override`
+- **`bool icu::AnnualTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const`**
+ - `UBool icu::AnnualTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const`
+ - `UBool icu::AnnualTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const override`
+- **`bool icu::AnnualTimeZoneRule::getNextStart(UDate, int32_t, int32_t, bool, UDate&) const`**
+ - `UBool icu::AnnualTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&) const`
+ - `UBool icu::AnnualTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&) const override`
+- **`bool icu::AnnualTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, bool, UDate&) const`**
+ - `UBool icu::AnnualTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&) const`
+ - `UBool icu::AnnualTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&) const override`
+- **`bool icu::AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const`**
+ - `UBool icu::AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const`
+ - `UBool icu::AnnualTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const override`
+- **`bool icu::AnnualTimeZoneRule::operator!=(const TimeZoneRule&) const`**
+ - `UBool icu::AnnualTimeZoneRule::operator!=(const TimeZoneRule&) const`
+ - `bool icu::AnnualTimeZoneRule::operator!=(const TimeZoneRule&) const override`
+- **`bool icu::AnnualTimeZoneRule::operator==(const TimeZoneRule&) const`**
+ - `UBool icu::AnnualTimeZoneRule::operator==(const TimeZoneRule&) const`
+ - `bool icu::AnnualTimeZoneRule::operator==(const TimeZoneRule&) const override`
+- **`bool icu::BreakIterator::operator==(const BreakIterator&) const`**
+ - `UBool icu::BreakIterator::operator==(const BreakIterator&) const=0`
+ - `bool icu::BreakIterator::operator==(const BreakIterator&) const=0`
+- **`bool icu::ChoiceFormat::operator==(const Format&) const`**
+ - `UBool icu::ChoiceFormat::operator==(const Format&) const`
+ - `bool icu::ChoiceFormat::operator==(const Format&) const override`
+- **`bool icu::DateFormat::operator==(const Format&) const`**
+ - `UBool icu::DateFormat::operator==(const Format&) const`
+ - `bool icu::DateFormat::operator==(const Format&) const override`
+- **`bool icu::DateIntervalFormat::operator==(const Format&) const`**
+ - `UBool icu::DateIntervalFormat::operator==(const Format&) const`
+ - `bool icu::DateIntervalFormat::operator==(const Format&) const override`
+- **`bool icu::DecimalFormat::operator==(const Format&) const`**
+ - `UBool icu::DecimalFormat::operator==(const Format&) const U_OVERRIDE`
+ - `bool icu::DecimalFormat::operator==(const Format&) const U_OVERRIDE`
+- **`bool icu::Format::operator==(const Format&) const`**
+ - `UBool icu::Format::operator==(const Format&) const=0`
+ - `bool icu::Format::operator==(const Format&) const=0`
+- **`bool icu::ForwardCharacterIterator::operator==(const ForwardCharacterIterator&) const`**
+ - `UBool icu::ForwardCharacterIterator::operator==(const ForwardCharacterIterator&) const=0`
+ - `bool icu::ForwardCharacterIterator::operator==(const ForwardCharacterIterator&) const=0`
+- **`bool icu::GregorianCalendar::haveDefaultCentury() const`**
+ - `UBool icu::GregorianCalendar::haveDefaultCentury() const`
+ - `UBool icu::GregorianCalendar::haveDefaultCentury() const override`
+- **`bool icu::GregorianCalendar::inDaylightTime(UErrorCode&) const`**
+ - `UBool icu::GregorianCalendar::inDaylightTime(UErrorCode&) const`
+ - `UBool icu::GregorianCalendar::inDaylightTime(UErrorCode&) const override`
+- **`bool icu::GregorianCalendar::isEquivalentTo(const Calendar&) const`**
+ - `UBool icu::GregorianCalendar::isEquivalentTo(const Calendar&) const`
+ - `UBool icu::GregorianCalendar::isEquivalentTo(const Calendar&) const override`
+- **`bool icu::InitialTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const`**
+ - `UBool icu::InitialTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const`
+ - `UBool icu::InitialTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const override`
+- **`bool icu::InitialTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const`**
+ - `UBool icu::InitialTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const`
+ - `UBool icu::InitialTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const override`
+- **`bool icu::InitialTimeZoneRule::getNextStart(UDate, int32_t, int32_t, bool, UDate&) const`**
+ - `UBool icu::InitialTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&) const`
+ - `UBool icu::InitialTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&) const override`
+- **`bool icu::InitialTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, bool, UDate&) const`**
+ - `UBool icu::InitialTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&) const`
+ - `UBool icu::InitialTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&) const override`
+- **`bool icu::InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const`**
+ - `UBool icu::InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const`
+ - `UBool icu::InitialTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const override`
+- **`bool icu::InitialTimeZoneRule::operator!=(const TimeZoneRule&) const`**
+ - `UBool icu::InitialTimeZoneRule::operator!=(const TimeZoneRule&) const`
+ - `bool icu::InitialTimeZoneRule::operator!=(const TimeZoneRule&) const override`
+- **`bool icu::InitialTimeZoneRule::operator==(const TimeZoneRule&) const`**
+ - `UBool icu::InitialTimeZoneRule::operator==(const TimeZoneRule&) const`
+ - `bool icu::InitialTimeZoneRule::operator==(const TimeZoneRule&) const override`
+- **`bool icu::MeasureFormat::operator==(const Format&) const`**
+ - `UBool icu::MeasureFormat::operator==(const Format&) const`
+ - `bool icu::MeasureFormat::operator==(const Format&) const override`
+- **`bool icu::MessageFormat::operator==(const Format&) const`**
+ - `UBool icu::MessageFormat::operator==(const Format&) const`
+ - `bool icu::MessageFormat::operator==(const Format&) const override`
+- **`bool icu::NumberFormat::operator==(const Format&) const`**
+ - `UBool icu::NumberFormat::operator==(const Format&) const`
+ - `bool icu::NumberFormat::operator==(const Format&) const override`
+- **`bool icu::PluralFormat::operator==(const Format&) const`**
+ - `UBool icu::PluralFormat::operator==(const Format&) const`
+ - `bool icu::PluralFormat::operator==(const Format&) const override`
+- **`bool icu::RuleBasedBreakIterator::isBoundary(int32_t)`**
+ - `UBool icu::RuleBasedBreakIterator::isBoundary(int32_t)`
+ - `UBool icu::RuleBasedBreakIterator::isBoundary(int32_t) override`
+- **`bool icu::RuleBasedBreakIterator::operator==(const BreakIterator&) const`**
+ - `UBool icu::RuleBasedBreakIterator::operator==(const BreakIterator&) const`
+ - `bool icu::RuleBasedBreakIterator::operator==(const BreakIterator&) const override`
+- **`bool icu::RuleBasedCollator::operator==(const Collator&) const`**
+ - `UBool icu::RuleBasedCollator::operator==(const Collator&) const`
+ - `bool icu::RuleBasedCollator::operator==(const Collator&) const override`
+- **`bool icu::RuleBasedNumberFormat::isLenient() const`**
+ - `UBool icu::RuleBasedNumberFormat::isLenient() const`
+ - `UBool icu::RuleBasedNumberFormat::isLenient() const override`
+- **`bool icu::RuleBasedNumberFormat::operator==(const Format&) const`**
+ - `UBool icu::RuleBasedNumberFormat::operator==(const Format&) const`
+ - `bool icu::RuleBasedNumberFormat::operator==(const Format&) const override`
+- **`bool icu::RuleBasedTimeZone::getNextTransition(UDate, bool, TimeZoneTransition&) const`**
+ - `UBool icu::RuleBasedTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&) const`
+ - `UBool icu::RuleBasedTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&) const override`
+- **`bool icu::RuleBasedTimeZone::getPreviousTransition(UDate, bool, TimeZoneTransition&) const`**
+ - `UBool icu::RuleBasedTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&) const`
+ - `UBool icu::RuleBasedTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&) const override`
+- **`bool icu::RuleBasedTimeZone::hasSameRules(const TimeZone&) const`**
+ - `UBool icu::RuleBasedTimeZone::hasSameRules(const TimeZone&) const`
+ - `UBool icu::RuleBasedTimeZone::hasSameRules(const TimeZone&) const override`
+- **`bool icu::RuleBasedTimeZone::inDaylightTime(UDate, UErrorCode&) const`**
+ - `UBool icu::RuleBasedTimeZone::inDaylightTime(UDate, UErrorCode&) const`
+ - `UBool icu::RuleBasedTimeZone::inDaylightTime(UDate, UErrorCode&) const override`
+- **`bool icu::RuleBasedTimeZone::operator==(const TimeZone&) const`**
+ - `UBool icu::RuleBasedTimeZone::operator==(const TimeZone&) const`
+ - `bool icu::RuleBasedTimeZone::operator==(const TimeZone&) const override`
+- **`bool icu::RuleBasedTimeZone::useDaylightTime() const`**
+ - `UBool icu::RuleBasedTimeZone::useDaylightTime() const`
+ - `UBool icu::RuleBasedTimeZone::useDaylightTime() const override`
+- **`bool icu::SelectFormat::operator==(const Format&) const`**
+ - `UBool icu::SelectFormat::operator==(const Format&) const`
+ - `bool icu::SelectFormat::operator==(const Format&) const override`
+- **`bool icu::SimpleDateFormat::operator==(const Format&) const`**
+ - `UBool icu::SimpleDateFormat::operator==(const Format&) const`
+ - `bool icu::SimpleDateFormat::operator==(const Format&) const override`
+- **`bool icu::SimpleNumberFormatFactory::visible() const`**
+ - `UBool icu::SimpleNumberFormatFactory::visible() const`
+ - `UBool icu::SimpleNumberFormatFactory::visible() const override`
+- **`bool icu::SimpleTimeZone::getNextTransition(UDate, bool, TimeZoneTransition&) const`**
+ - `UBool icu::SimpleTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&) const`
+ - `UBool icu::SimpleTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&) const override`
+- **`bool icu::SimpleTimeZone::getPreviousTransition(UDate, bool, TimeZoneTransition&) const`**
+ - `UBool icu::SimpleTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&) const`
+ - `UBool icu::SimpleTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&) const override`
+- **`bool icu::SimpleTimeZone::hasSameRules(const TimeZone&) const`**
+ - `UBool icu::SimpleTimeZone::hasSameRules(const TimeZone&) const`
+ - `UBool icu::SimpleTimeZone::hasSameRules(const TimeZone&) const override`
+- **`bool icu::SimpleTimeZone::inDaylightTime(UDate, UErrorCode&) const`**
+ - `UBool icu::SimpleTimeZone::inDaylightTime(UDate, UErrorCode&) const`
+ - `UBool icu::SimpleTimeZone::inDaylightTime(UDate, UErrorCode&) const override`
+- **`bool icu::SimpleTimeZone::operator==(const TimeZone&) const`**
+ - `UBool icu::SimpleTimeZone::operator==(const TimeZone&) const`
+ - `bool icu::SimpleTimeZone::operator==(const TimeZone&) const override`
+- **`bool icu::SimpleTimeZone::useDaylightTime() const`**
+ - `UBool icu::SimpleTimeZone::useDaylightTime() const`
+ - `UBool icu::SimpleTimeZone::useDaylightTime() const override`
+- **`bool icu::StringCharacterIterator::operator==(const ForwardCharacterIterator&) const`**
+ - `UBool icu::StringCharacterIterator::operator==(const ForwardCharacterIterator&) const`
+ - `bool icu::StringCharacterIterator::operator==(const ForwardCharacterIterator&) const override`
+- **`bool icu::StringSearch::operator==(const SearchIterator&) const`**
+ - `UBool icu::StringSearch::operator==(const SearchIterator&) const`
+ - `bool icu::StringSearch::operator==(const SearchIterator&) const override`
+- **`bool icu::TimeArrayTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const`**
+ - `UBool icu::TimeArrayTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const`
+ - `UBool icu::TimeArrayTimeZoneRule::getFinalStart(int32_t, int32_t, UDate&) const override`
+- **`bool icu::TimeArrayTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const`**
+ - `UBool icu::TimeArrayTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const`
+ - `UBool icu::TimeArrayTimeZoneRule::getFirstStart(int32_t, int32_t, UDate&) const override`
+- **`bool icu::TimeArrayTimeZoneRule::getNextStart(UDate, int32_t, int32_t, bool, UDate&) const`**
+ - `UBool icu::TimeArrayTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&) const`
+ - `UBool icu::TimeArrayTimeZoneRule::getNextStart(UDate, int32_t, int32_t, UBool, UDate&) const override`
+- **`bool icu::TimeArrayTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, bool, UDate&) const`**
+ - `UBool icu::TimeArrayTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&) const`
+ - `UBool icu::TimeArrayTimeZoneRule::getPreviousStart(UDate, int32_t, int32_t, UBool, UDate&) const override`
+- **`bool icu::TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const`**
+ - `UBool icu::TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const`
+ - `UBool icu::TimeArrayTimeZoneRule::isEquivalentTo(const TimeZoneRule&) const override`
+- **`bool icu::TimeArrayTimeZoneRule::operator!=(const TimeZoneRule&) const`**
+ - `UBool icu::TimeArrayTimeZoneRule::operator!=(const TimeZoneRule&) const`
+ - `bool icu::TimeArrayTimeZoneRule::operator!=(const TimeZoneRule&) const override`
+- **`bool icu::TimeArrayTimeZoneRule::operator==(const TimeZoneRule&) const`**
+ - `UBool icu::TimeArrayTimeZoneRule::operator==(const TimeZoneRule&) const`
+ - `bool icu::TimeArrayTimeZoneRule::operator==(const TimeZoneRule&) const override`
+- **`bool icu::TimeZoneFormat::operator==(const Format&) const`**
+ - `UBool icu::TimeZoneFormat::operator==(const Format&) const`
+ - `bool icu::TimeZoneFormat::operator==(const Format&) const override`
+- **`bool icu::TimeZoneNames::operator==(const TimeZoneNames&) const`**
+ - `UBool icu::TimeZoneNames::operator==(const TimeZoneNames&) const=0`
+ - `bool icu::TimeZoneNames::operator==(const TimeZoneNames&) const=0`
+- **`bool icu::UCharCharacterIterator::hasNext()`**
+ - `UBool icu::UCharCharacterIterator::hasNext()`
+ - `UBool icu::UCharCharacterIterator::hasNext() override`
+- **`bool icu::UCharCharacterIterator::hasPrevious()`**
+ - `UBool icu::UCharCharacterIterator::hasPrevious()`
+ - `UBool icu::UCharCharacterIterator::hasPrevious() override`
+- **`bool icu::UCharCharacterIterator::operator==(const ForwardCharacterIterator&) const`**
+ - `UBool icu::UCharCharacterIterator::operator==(const ForwardCharacterIterator&) const`
+ - `bool icu::UCharCharacterIterator::operator==(const ForwardCharacterIterator&) const override`
+- **`bool icu::UnicodeSet::contains(UChar32) const`**
+ - `UBool icu::UnicodeSet::contains(UChar32) const`
+ - `UBool icu::UnicodeSet::contains(UChar32) const override`
+- **`bool icu::UnicodeString::hasMetaData() const`**
+ - `UBool icu::UnicodeString::hasMetaData() const`
+ - `UBool icu::UnicodeString::hasMetaData() const override`
+- **`bool icu::UnicodeStringAppendable::appendCodePoint(UChar32)`**
+ - `UBool icu::UnicodeStringAppendable::appendCodePoint(UChar32)`
+ - `UBool icu::UnicodeStringAppendable::appendCodePoint(UChar32) override`
+- **`bool icu::UnicodeStringAppendable::appendCodeUnit(char16_t)`**
+ - `UBool icu::UnicodeStringAppendable::appendCodeUnit(char16_t)`
+ - `UBool icu::UnicodeStringAppendable::appendCodeUnit(char16_t) override`
+- **`bool icu::UnicodeStringAppendable::appendString(const char16_t*, int32_t)`**
+ - `UBool icu::UnicodeStringAppendable::appendString(const char16_t*, int32_t)`
+ - `UBool icu::UnicodeStringAppendable::appendString(const char16_t*, int32_t) override`
+- **`bool icu::UnicodeStringAppendable::reserveAppendCapacity(int32_t)`**
+ - `UBool icu::UnicodeStringAppendable::reserveAppendCapacity(int32_t)`
+ - `UBool icu::UnicodeStringAppendable::reserveAppendCapacity(int32_t) override`
+- **`bool icu::VTimeZone::getNextTransition(UDate, bool, TimeZoneTransition&) const`**
+ - `UBool icu::VTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&) const`
+ - `UBool icu::VTimeZone::getNextTransition(UDate, UBool, TimeZoneTransition&) const override`
+- **`bool icu::VTimeZone::getPreviousTransition(UDate, bool, TimeZoneTransition&) const`**
+ - `UBool icu::VTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&) const`
+ - `UBool icu::VTimeZone::getPreviousTransition(UDate, UBool, TimeZoneTransition&) const override`
+- **`bool icu::VTimeZone::hasSameRules(const TimeZone&) const`**
+ - `UBool icu::VTimeZone::hasSameRules(const TimeZone&) const`
+ - `UBool icu::VTimeZone::hasSameRules(const TimeZone&) const override`
+- **`bool icu::VTimeZone::inDaylightTime(UDate, UErrorCode&) const`**
+ - `UBool icu::VTimeZone::inDaylightTime(UDate, UErrorCode&) const`
+ - `UBool icu::VTimeZone::inDaylightTime(UDate, UErrorCode&) const override`
+- **`bool icu::VTimeZone::operator==(const TimeZone&) const`**
+ - `UBool icu::VTimeZone::operator==(const TimeZone&) const`
+ - `bool icu::VTimeZone::operator==(const TimeZone&) const override`
+- **`bool icu::VTimeZone::useDaylightTime() const`**
+ - `UBool icu::VTimeZone::useDaylightTime() const`
+ - `UBool icu::VTimeZone::useDaylightTime() const override`
+- **`void icu::RuleBasedNumberFormat::setLenient(bool)`**
+ - `void icu::RuleBasedNumberFormat::setLenient(UBool)`
+ - `void icu::RuleBasedNumberFormat::setLenient(UBool) override`
+- **`void icu::RuleBasedTimeZone::getOffset(UDate, bool, int32_t&, int32_t&, UErrorCode&) const`**
+ - `void icu::RuleBasedTimeZone::getOffset(UDate, UBool, int32_t&, int32_t&, UErrorCode&) const`
+ - `void icu::RuleBasedTimeZone::getOffset(UDate, UBool, int32_t&, int32_t&, UErrorCode&) const override`
+- **`void icu::SimpleTimeZone::getOffset(UDate, bool, int32_t&, int32_t&, UErrorCode&) const`**
+ - `void icu::SimpleTimeZone::getOffset(UDate, UBool, int32_t&, int32_t&, UErrorCode&) const`
+ - `void icu::SimpleTimeZone::getOffset(UDate, UBool, int32_t&, int32_t&, UErrorCode&) const override`
+- **`void icu::VTimeZone::getOffset(UDate, bool, int32_t&, int32_t&, UErrorCode&) const`**
+ - `void icu::VTimeZone::getOffset(UDate, UBool, int32_t&, int32_t&, UErrorCode&) const`
+ - `void icu::VTimeZone::getOffset(UDate, UBool, int32_t&, int32_t&, UErrorCode&) const override`
+- **`void* icu::AnnualTimeZoneRule::clone() const`**
+ - `AnnualTimeZoneRule* icu::AnnualTimeZoneRule::clone() const`
+ - `AnnualTimeZoneRule* icu::AnnualTimeZoneRule::clone() const override`
+- **`void* icu::BasicTimeZone::clone() const`**
+ - `BasicTimeZone* icu::BasicTimeZone::clone() const override=0`
+ - `BasicTimeZone* icu::BasicTimeZone::clone() const=0`
+- **`void* icu::ChoiceFormat::clone() const`**
+ - `ChoiceFormat* icu::ChoiceFormat::clone() const`
+ - `ChoiceFormat* icu::ChoiceFormat::clone() const override`
+- **`void* icu::CurrencyAmount::clone() const`**
+ - `CurrencyAmount* icu::CurrencyAmount::clone() const`
+ - `CurrencyAmount* icu::CurrencyAmount::clone() const override`
+- **`void* icu::CurrencyUnit::clone() const`**
+ - `CurrencyUnit* icu::CurrencyUnit::clone() const`
+ - `CurrencyUnit* icu::CurrencyUnit::clone() const override`
+- **`void* icu::DateFormat::clone() const`**
+ - `DateFormat* icu::DateFormat::clone() const override=0`
+ - `DateFormat* icu::DateFormat::clone() const=0`
+- **`void* icu::DateIntervalFormat::clone() const`**
+ - `DateIntervalFormat* icu::DateIntervalFormat::clone() const`
+ - `DateIntervalFormat* icu::DateIntervalFormat::clone() const override`
+- **`void* icu::GregorianCalendar::clone() const`**
+ - `GregorianCalendar* icu::GregorianCalendar::clone() const`
+ - `GregorianCalendar* icu::GregorianCalendar::clone() const override`
+- **`void* icu::InitialTimeZoneRule::clone() const`**
+ - `InitialTimeZoneRule* icu::InitialTimeZoneRule::clone() const`
+ - `InitialTimeZoneRule* icu::InitialTimeZoneRule::clone() const override`
+- **`void* icu::MeasureFormat::clone() const`**
+ - `MeasureFormat* icu::MeasureFormat::clone() const`
+ - `MeasureFormat* icu::MeasureFormat::clone() const override`
+- **`void* icu::MessageFormat::clone() const`**
+ - `MessageFormat* icu::MessageFormat::clone() const`
+ - `MessageFormat* icu::MessageFormat::clone() const override`
+- **`void* icu::NumberFormat::clone() const`**
+ - `NumberFormat* icu::NumberFormat::clone() const override=0`
+ - `NumberFormat* icu::NumberFormat::clone() const=0`
+- **`void* icu::PluralFormat::clone() const`**
+ - `PluralFormat* icu::PluralFormat::clone() const`
+ - `PluralFormat* icu::PluralFormat::clone() const override`
+- **`void* icu::RuleBasedBreakIterator::clone() const`**
+ - `RuleBasedBreakIterator* icu::RuleBasedBreakIterator::clone() const`
+ - `RuleBasedBreakIterator* icu::RuleBasedBreakIterator::clone() const override`
+- **`void* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&, UErrorCode&)`**
+ - `RuleBasedBreakIterator* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&, UErrorCode&)`
+ - `RuleBasedBreakIterator* icu::RuleBasedBreakIterator::createBufferClone(void*, int32_t&, UErrorCode&) override`
+- **`void* icu::RuleBasedCollator::clone() const`**
+ - `RuleBasedCollator* icu::RuleBasedCollator::clone() const`
+ - `RuleBasedCollator* icu::RuleBasedCollator::clone() const override`
+- **`void* icu::RuleBasedNumberFormat::clone() const`**
+ - `RuleBasedNumberFormat* icu::RuleBasedNumberFormat::clone() const`
+ - `RuleBasedNumberFormat* icu::RuleBasedNumberFormat::clone() const override`
+- **`void* icu::RuleBasedTimeZone::clone() const`**
+ - `RuleBasedTimeZone* icu::RuleBasedTimeZone::clone() const`
+ - `RuleBasedTimeZone* icu::RuleBasedTimeZone::clone() const override`
+- **`void* icu::SelectFormat::clone() const`**
+ - `SelectFormat* icu::SelectFormat::clone() const`
+ - `SelectFormat* icu::SelectFormat::clone() const override`
+- **`void* icu::SimpleDateFormat::clone() const`**
+ - `SimpleDateFormat* icu::SimpleDateFormat::clone() const`
+ - `SimpleDateFormat* icu::SimpleDateFormat::clone() const override`
+- **`void* icu::SimpleTimeZone::clone() const`**
+ - `SimpleTimeZone* icu::SimpleTimeZone::clone() const`
+ - `SimpleTimeZone* icu::SimpleTimeZone::clone() const override`
+- **`void* icu::StringCharacterIterator::clone() const`**
+ - `StringCharacterIterator* icu::StringCharacterIterator::clone() const`
+ - `StringCharacterIterator* icu::StringCharacterIterator::clone() const override`
+- **`void* icu::StringSearch::safeClone() const`**
+ - `StringSearch* icu::StringSearch::safeClone() const`
+ - `StringSearch* icu::StringSearch::safeClone() const override`
+- **`void* icu::TimeArrayTimeZoneRule::clone() const`**
+ - `TimeArrayTimeZoneRule* icu::TimeArrayTimeZoneRule::clone() const`
+ - `TimeArrayTimeZoneRule* icu::TimeArrayTimeZoneRule::clone() const override`
+- **`void* icu::TimeUnit::clone() const`**
+ - `TimeUnit* icu::TimeUnit::clone() const`
+ - `TimeUnit* icu::TimeUnit::clone() const override`
+- **`void* icu::TimeUnitAmount::clone() const`**
+ - `TimeUnitAmount* icu::TimeUnitAmount::clone() const`
+ - `TimeUnitAmount* icu::TimeUnitAmount::clone() const override`
+- **`void* icu::TimeUnitFormat::clone() const`**
+ - `TimeUnitFormat* icu::TimeUnitFormat::clone() const`
+ - `TimeUnitFormat* icu::TimeUnitFormat::clone() const override`
+- **`void* icu::TimeZoneFormat::clone() const`**
+ - `TimeZoneFormat* icu::TimeZoneFormat::clone() const`
+ - `TimeZoneFormat* icu::TimeZoneFormat::clone() const override`
+- **`void* icu::UCharCharacterIterator::clone() const`**
+ - `UCharCharacterIterator* icu::UCharCharacterIterator::clone() const`
+ - `UCharCharacterIterator* icu::UCharCharacterIterator::clone() const override`
+- **`void* icu::UnicodeFilter::clone() const`**
+ - `UnicodeFilter* icu::UnicodeFilter::clone() const override=0`
+ - `UnicodeFilter* icu::UnicodeFilter::clone() const=0`
+- **`void* icu::UnicodeSet::clone() const`**
+ - `UnicodeSet* icu::UnicodeSet::clone() const`
+ - `UnicodeSet* icu::UnicodeSet::clone() const override`
+- **`void* icu::UnicodeString::clone() const`**
+ - `UnicodeString* icu::UnicodeString::clone() const`
+ - `UnicodeString* icu::UnicodeString::clone() const override`
+- **`void* icu::VTimeZone::clone() const`**
+ - `VTimeZone* icu::VTimeZone::clone() const`
+ - `VTimeZone* icu::VTimeZone::clone() const override`
## Colophon
-Contents generated by StableAPI tool on Fri Oct 23 11:32:42 PDT 2020
+Contents generated by StableAPI tool on Wed Sep 29 11:59:13 PDT 2021
Copyright © 2019 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
diff --git a/Build/source/libs/icu/icu-src/LICENSE b/Build/source/libs/icu/icu-src/LICENSE
index 5d664a083b9..970ae074cbf 100644
--- a/Build/source/libs/icu/icu-src/LICENSE
+++ b/Build/source/libs/icu/icu-src/LICENSE
@@ -281,31 +281,29 @@ property of their respective owners.
3. Lao Word Break Dictionary Data (laodict.txt)
- # Copyright (c) 2013 International Business Machines Corporation
- # and others. All Rights Reserved.
+ # Copyright (C) 2016 and later: Unicode, Inc. and others.
+ # License & terms of use: http://www.unicode.org/copyright.html
+ # Copyright (c) 2015 International Business Machines Corporation
+ # and others. All Rights Reserved.
#
- # Project: https://github.com/veer66/lao-dictionary
- # Dictionary: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary.txt
- # License: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary-LICENSE.txt
- # (copied below)
+ # Project: https://github.com/rober42539/lao-dictionary
+ # Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt
+ # License: https://github.com/rober42539/lao-dictionary/LICENSE.txt
+ # (copied below)
#
- # This file is derived from the above dictionary, with slight
- # modifications.
+ # This file is derived from the above dictionary version of Nov 22, 2020
# ----------------------------------------------------------------------
# Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
- # modification,
- # are permitted provided that the following conditions are met:
- #
- #
- # Redistributions of source code must retain the above copyright notice, this
- # list of conditions and the following disclaimer. Redistributions in
- # binary form must reproduce the above copyright notice, this list of
- # conditions and the following disclaimer in the documentation and/or
- # other materials provided with the distribution.
+ # modification, are permitted provided that the following conditions are met:
#
+ # Redistributions of source code must retain the above copyright notice, this
+ # list of conditions and the following disclaimer. Redistributions in binary
+ # form must reproduce the above copyright notice, this list of conditions and
+ # the following disclaimer in the documentation and/or other materials
+ # provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
diff --git a/Build/source/libs/icu/icu-src/readme.html b/Build/source/libs/icu/icu-src/readme.html
index 06381c55c25..251d4e714df 100644
--- a/Build/source/libs/icu/icu-src/readme.html
+++ b/Build/source/libs/icu/icu-src/readme.html
@@ -3,7 +3,7 @@
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
<head>
- <title>ReadMe for ICU 68.2</title>
+ <title>ReadMe for ICU4C</title>
<meta name="COPYRIGHT" content=
"Copyright (C) 2016 and later: Unicode, Inc. and others. License &amp; terms of use: http://www.unicode.org/copyright.html"/>
<!-- meta name="COPYRIGHT" content=
@@ -16,1896 +16,10 @@
<link type="text/css" href="./icu4c.css" rel="stylesheet"/>
</head>
-<!--
- classes to use with the "body" -
- draft - if the release note is itself a draft (May be combined with the other two)
- rc - if the release note is a release candidate
- milestone - if the release note is a milestone release
--->
<body>
- <!-- <body class="rc"> -->
- <p class="only-draft"><b>Note:</b> This is a draft readme.</p>
-
- <h1>
- <span class="only-draft">DRAFT</span>
- International Components for Unicode<br/>
- <span class="only-rc">Release Candidate</span>
- <!-- <span class="only-milestone">(Milestone Release)</span> -->
- <span class="only-milestone">(Preview Release)</span>
- <abbr title="International Components for Unicode">ICU</abbr> 68.2 ReadMe
- </h1>
-
- <!-- Most of the time we shouldn't need to comment/uncomment this paragraph, just change the body class -->
- <!-- <p class="note only-milestone">This is a development milestone release of ICU
- This milestone is intended for those wishing to get an early look at new features and API changes.
- It is not recommended for production use.</p> -->
- <p class="note only-milestone">This is a preview release of ICU.
- It is not recommended for production use.</p>
-
- <!-- Shouldn't need to comment/uncomment this paragraph, just change the body class -->
- <p class="note only-rc">This is a release candidate version of ICU4C.
- It is not recommended for production use.</p>
-
- <p>Last updated: 2020-Dec-02<br/>
- Copyright &copy; 2016 and later: Unicode, Inc. and others. License &amp; terms of use:
- <a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
- Copyright &copy; 1997-2016 International Business Machines Corporation and others.
- All Rights Reserved.</p>
- <!-- Remember that there is a copyright at the end too -->
- <hr/>
-
- <h2 class="TOC">Table of Contents</h2>
-
- <ul class="TOC">
- <li><a href="#Introduction">Introduction</a></li>
-
- <li><a href="#GettingStarted">Getting Started</a></li>
-
- <li><a href="#News">What Is New In This Release?</a></li>
-
- <li><a href="#Download">How To Download the Source Code</a></li>
-
- <li><a href="#SourceCode">ICU Source Code Organization</a></li>
-
- <li>
- <a href="#HowToBuild">How To Build And Install ICU</a>
-
- <ul >
- <li><a href="#RecBuild">Recommended Build Options</a></li>
-
- <li><a href="#UserConfig">User-Configurable Settings</a></li>
-
- <li><a href="#HowToBuildWindows">Windows</a></li>
-
- <li><a href="#HowToBuildCygwin">Cygwin</a></li>
-
- <li><a href="#HowToBuildUNIX">UNIX</a></li>
-
- <li><a href="#HowToBuildZOS">z/OS (os/390)</a></li>
-
- <li><a href="#HowToBuildOS400">IBM i family (IBM i, i5/OS, OS/400)</a></li>
-
- <li><a href="#HowToCrossCompileICU">How to Cross Compile ICU</a></li>
- </ul>
- </li>
-
-
- <li><a href="#HowToPackage">How To Package ICU</a></li>
-
- <li>
- <a href="#ImportantNotes">Important Notes About Using ICU</a>
-
- <ul >
- <li><a href="#ImportantNotesMultithreaded">Using ICU in a Multithreaded
- Environment</a></li>
-
- <li><a href="#ImportantNotesWindows">Windows Platform</a></li>
-
- <li><a href="#ImportantNotesUNIX">UNIX Type Platforms</a></li>
- </ul>
- </li>
-
- <li>
- <a href="#PlatformDependencies">Platform Dependencies</a>
-
- <ul >
- <li><a href="#PlatformDependenciesNew">Porting To A New
- Platform</a></li>
-
- <li><a href="#PlatformDependenciesImpl">Platform Dependent
- Implementations</a></li>
- </ul>
- </li>
- </ul>
- <hr />
-
- <h2><a name="Introduction" href="#Introduction" id=
- "Introduction">Introduction</a></h2>
-
- <p>Today's software market is a global one in which it is desirable to
- develop and maintain one application (single source/single binary) that
- supports a wide variety of languages. The International Components for
- Unicode (ICU) libraries provide robust and full-featured Unicode services on
- a wide variety of platforms to help this design goal. The ICU libraries
- provide support for:</p>
-
- <ul>
- <li>The latest version of the Unicode standard</li>
-
- <li>Character set conversions with support for over 220 codepages</li>
-
- <li>Locale data for more than 300 locales</li>
-
- <li>Language sensitive text collation (sorting) and searching based on the
- Unicode Collation Algorithm (=ISO 14651)</li>
-
- <li>Regular expression matching and Unicode sets</li>
-
- <li>Transformations for normalization, upper/lowercase, script
- transliterations (50+ pairs)</li>
-
- <li>Resource bundles for storing and accessing localized information</li>
-
- <li>Date/Number/Message formatting and parsing of culture specific
- input/output formats</li>
-
- <li>Calendar specific date and time manipulation</li>
-
- <li>Text boundary analysis for finding characters, word and sentence
- boundaries</li>
- </ul>
-
- <p>ICU has a sister project ICU4J that extends the internationalization
- capabilities of Java to a level similar to ICU. The ICU C/C++ project is also
- called ICU4C when a distinction is necessary.</p>
-
- <h2><a name="GettingStarted" href="#GettingStarted" id=
- "GettingStarted">Getting started</a></h2>
-
- <p>This document describes how to build and install ICU on your machine. For
- other information about ICU please see the following table of links.<br />
- The ICU homepage also links to related information about writing
- internationalized software.</p>
-
- <table class="docTable" summary="These are some useful links regarding ICU and internationalization in general.">
- <caption>
- Here are some useful links regarding ICU and internationalization in
- general.
- </caption>
-
- <tr>
- <td>ICU, ICU4C &amp; ICU4J Homepage</td>
-
- <td><a href=
- "http://icu-project.org/">http://icu-project.org/</a></td>
- </tr>
-
- <tr>
- <td>FAQ - Frequently Asked Questions about ICU</td>
-
- <td><a href=
- "https://unicode-org.github.io/icu/userguide/icufaq">https://unicode-org.github.io/icu/userguide/icufaq</a></td>
- </tr>
-
- <tr>
- <td>ICU User's Guide</td>
-
- <td><a href=
- "https://unicode-org.github.io/icu/userguide/">https://unicode-org.github.io/icu/userguide/</a></td>
- </tr>
-
- <tr>
- <td>How To Use ICU</td>
-
- <td><a href=
- "https://unicode-org.github.io/icu/userguide/howtouseicu">https://unicode-org.github.io/icu/userguide/howtouseicu</a></td>
- </tr>
-
- <tr>
- <td>Download ICU Releases</td>
-
- <td><a href=
- "http://site.icu-project.org/download">http://site.icu-project.org/download</a></td>
- </tr>
-
- <tr>
- <td>ICU4C API Documentation Online</td>
-
- <td><a href=
- "http://icu-project.org/apiref/icu4c/">http://icu-project.org/apiref/icu4c/</a></td>
- </tr>
-
- <tr>
- <td>Online ICU Demos</td>
-
- <td><a href=
- "http://demo.icu-project.org/icu-bin/icudemos">http://demo.icu-project.org/icu-bin/icudemos</a></td>
- </tr>
-
- <tr>
- <td>Contacts and Bug Reports/Feature Requests</td>
-
- <td><a href=
- "http://site.icu-project.org/contacts">http://site.icu-project.org/contacts</a></td>
- </tr>
- </table>
-
- <p><strong>Important:</strong> Please make sure you understand the <a href=
- "http://source.icu-project.org/repos/icu/trunk/icu4c/LICENSE">Copyright and License Information</a>.</p>
-
-
- <h2><a name="News" href="#News" id="News">What Is New In This Release?</a></h2>
-
- <p>See the <a href="http://site.icu-project.org/download/68">ICU 68 download page</a>
- for more information on this release, including any other changes, bug fixes, known issues,
- changes to supported platforms and build environments,
- and migration issues for existing applications migrating from previous ICU releases.</p>
-
- <p>See the <a href="APIChangeReport.html">API Change Report</a> for a complete list of
- APIs added, removed, or changed in this release.</p>
-
- <p><a name="RecentPreviousChanges" id="RecentPreviousChanges"></a>For
- changes in previous releases, see the
- main <a href="http://site.icu-project.org/download">ICU download page</a>
- with its version-specific subpages.</p>
-
-
- <h2><a name="Download" href="#Download" id="Download">How To Download the
- Source Code</a></h2>
-
- <p>There are two ways to download ICU releases:</p>
-
- <ul>
- <li><strong>Official Release Snapshot:</strong><br />
- If you want to use ICU (as opposed to developing it), you should download
- an official packaged version of the ICU source code. These versions are
- tested more thoroughly than day-to-day development builds of the system,
- and they are packaged in zip and tar files for convenient download. These
- packaged files can be found at <a href=
- "http://site.icu-project.org/download">http://site.icu-project.org/download</a>.<br />
- The packaged snapshots are named <strong>icu-nnnn.zip</strong> or
- <strong>icu-nnnn.tgz</strong>, where nnnn is the version number. The .zip
- file is used for Windows platforms, while the .tgz file is preferred on
- most other platforms.<br />
- Please unzip this file. </li>
-
- <li><strong>GitHub Source Repository:</strong><br />
- If you are interested in developing features, patches, or bug fixes for
- ICU, you should probably be working with the latest version of the ICU
- source code. You will need to clone and checkout the code from our GitHub repository to
- ensure that you have the most recent version of all of the files. See our
- <a href="http://site.icu-project.org/repository">source
- repository</a> for details.</li>
- </ul>
-
- <h2><a name="SourceCode" href="#SourceCode" id="SourceCode">ICU Source Code
- Organization</a></h2>
-
- <p>In the descriptions below, <strong><i>&lt;ICU&gt;</i></strong> is the full
- path name of the ICU directory (the top level directory from the distribution
- archives) in your file system. You can also view the <a href=
- "https://unicode-org.github.io/icu/userguide/design">ICU Architectural
- Design</a> section of the User's Guide to see which libraries you need for
- your software product. You need at least the data (<code>[lib]icudt</code>)
- and the common (<code>[lib]icuuc</code>) libraries in order to use ICU.</p>
-
- <table class="docTable" summary="The following files describe the code drop.">
- <caption>
- The following files describe the code drop.
- </caption>
-
- <tr>
- <th scope="col">File</th>
-
- <th scope="col">Description</th>
- </tr>
-
- <tr>
- <td>readme.html</td>
-
- <td>Describes the International Components for Unicode (this file)</td>
- </tr>
-
- <tr>
- <td>LICENSE</td>
-
- <td>Contains the text of the ICU license</td>
- </tr>
- </table>
-
- <p><br />
- </p>
-
- <table class="docTable" summary=
- "The following directories contain source code and data files.">
- <caption>
- The following directories contain source code and data files.
- </caption>
-
- <tr>
- <th scope="col">Directory</th>
-
- <th scope="col">Description</th>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>common</b>/</td>
-
- <td>The core Unicode and support functionality, such as resource bundles,
- character properties, locales, codepage conversion, normalization,
- Unicode properties, Locale, and UnicodeString.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>i18n</b>/</td>
-
- <td>Modules in i18n are generally the more data-driven, that is to say
- resource bundle driven, components. These deal with higher-level
- internationalization issues such as formatting, collation, text break
- analysis, and transliteration.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>layoutex</b>/</td>
-
- <td>Contains the ICU paragraph layout engine.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>io</b>/</td>
-
- <td>Contains the ICU I/O library.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>data</b>/</td>
-
- <td>
- <p>This directory contains the source data in text format, which is
- compiled into binary form during the ICU build process. It contains
- several subdirectories, in which the data files are grouped by
- function. Note that the build process must be run again after any
- changes are made to this directory.</p>
-
- <p>If some of the following directories are missing, it's probably
- because you got an official download. If you need the data source files
- for customization, then please download the complete ICU source code from <a
- href="http://site.icu-project.org/repository">the ICU repository</a>.</p>
-
- <ul>
- <li><b>in/</b> A directory that contains a pre-built data library for
- ICU. A standard source code package will contain this file without
- several of the following directories. This is to simplify the build
- process for the majority of users and to reduce platform porting
- issues.</li>
-
- <li><b>brkitr/</b> Data files for character, word, sentence, title
- casing and line boundary analysis.</li>
-
- <li><b>coll/</b> Data for collation tailorings. The makefile
- <b>colfiles.mk</b> contains the list of resource bundle files.</li>
-
- <li><b>locales/</b> These .txt files contain ICU language and
- culture-specific localization data. Two special bundles are
- <b>root</b>, which is the fallback data and parent of other bundles,
- and <b>index</b>, which contains a list of installed bundles. The
- makefile <b>resfiles.mk</b> contains the list of resource bundle
- files. Some of the locale data is split out into the type-specific
- directories curr, lang, region, unit, and zone, described below.</li>
-
- <li><b>curr/</b> Locale data for currency symbols and names (including
- plural forms), with its own makefile <b>resfiles.mk</b>.</li>
-
- <li><b>lang/</b> Locale data for names of languages, scripts, and locale
- key names and values, with its own makefile <b>resfiles.mk</b>.</li>
-
- <li><b>region/</b> Locale data for names of regions, with its own
- makefile <b>resfiles.mk</b>.</li>
-
- <li><b>unit/</b> Locale data for measurement unit patterns and names,
- with its own makefile <b>resfiles.mk</b>.</li>
-
- <li><b>zone/</b> Locale data for time zone names, with its own
- makefile <b>resfiles.mk</b>.</li>
-
- <li><b>mappings/</b> Here are the code page converter tables. These
- .ucm files contain mappings to and from Unicode. These are compiled
- into .cnv files. <b>convrtrs.txt</b> is the alias mapping table from
- various converter name formats to ICU internal format and vice versa.
- It produces cnvalias.icu. The makefiles <b>ucmfiles.mk,
- ucmcore.mk,</b> and <b>ucmebcdic.mk</b> contain the list of
- converters to be built.</li>
-
- <li><b>translit/</b> This directory contains transliterator rules as
- resource bundles, a makefile <b>trnsfiles.mk</b> containing the list
- of installed system translitaration files, and as well the special
- bundle <b>translit_index</b> which lists the system transliterator
- aliases.</li>
-
- <li><b>unidata/</b> This directory contains the Unicode data files.
- Please see <a href=
- "http://www.unicode.org/">http://www.unicode.org/</a> for more
- information.</li>
-
- <li><b>misc/</b> The misc directory contains other data files which
- did not fit into the above categories, including time zone
- information, region-specific data, and other data derived from CLDR
- supplemental data.</li>
-
- <li><b>out/</b> This directory contains the assembled memory mapped
- files.</li>
-
- <li><b>out/build/</b> This directory contains intermediate (compiled)
- files, such as .cnv, .res, etc.</li>
- </ul>
-
- <p>If you are creating a special ICU build, you can set the ICU_DATA
- environment variable to the out/ or the out/build/ directories, but
- this is generally discouraged because most people set it incorrectly.
- You can view the <a href=
- "https://unicode-org.github.io/icu/userguide/icudata">ICU Data
- Management</a> section of the ICU User's Guide for details.</p>
- </td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/test/<b>intltest</b>/</td>
-
- <td>A test suite including all C++ APIs. For information about running
- the test suite, see the build instructions specific to your platform
- later in this document.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/test/<b>cintltst</b>/</td>
-
- <td>A test suite written in C, including all C APIs. For information
- about running the test suite, see the build instructions specific to your
- platform later in this document.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/test/<b>iotest</b>/</td>
-
- <td>A test suite written in C and C++ to test the icuio library. For
- information about running the test suite, see the build instructions
- specific to your platform later in this document.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/test/<b>testdata</b>/</td>
-
- <td>Source text files for data, which are read by the tests. It contains
- the subdirectories <b>out/build/</b> which is used for intermediate
- files, and <b>out/</b> which contains <b>testdata.dat.</b></td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>tools</b>/</td>
-
- <td>Tools for generating the data files. Data files are generated by
- invoking <i>&lt;ICU&gt;</i>/source/data/build/makedata.bat on Win32 or
- <i>&lt;ICU&gt;</i>/source/make on UNIX.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>samples</b>/</td>
-
- <td>Various sample programs that use ICU</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>extra</b>/</td>
-
- <td>Non-supported API additions. Currently, it contains the 'uconv' tool
- to perform codepage conversion on files.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/<b>packaging</b>/</td>
-
- <td>This directory contain scripts and tools for packaging the final
- ICU build for various release platforms.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>config</b>/</td>
-
- <td>Contains helper makefiles for platform specific build commands. Used
- by 'configure'.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/source/<b>allinone</b>/</td>
-
- <td>Contains top-level ICU workspace and project files, for instance to
- build all of ICU under one MSVC project.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/<b>include</b>/</td>
-
- <td>Contains the headers needed for developing software that uses ICU on
- Windows.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/<b>lib</b>/</td>
-
- <td>Contains the import libraries for linking ICU into your Windows
- application.</td>
- </tr>
-
- <tr>
- <td><i>&lt;ICU&gt;</i>/<b>bin</b>/</td>
-
- <td>Contains the libraries and executables for using ICU on Windows.</td>
- </tr>
- </table>
- <!-- end of ICU structure ==================================== -->
-
- <h2><a name="HowToBuild" href="#HowToBuild" id="HowToBuild">How To Build And
- Install ICU</a></h2>
-
- <h3><a name="RecBuild" href="#RecBuild" id=
- "RecBuild">Recommended Build Options</a></h3>
-
- <p>Depending on the platform and the type of installation,
- we recommend a small number of modifications and build options.
- Note that C99 compatibility is now required.</p>
- <ul>
- <li><b>Namespace (ICU 61 and later):</b>
- Since ICU 61, call sites need to qualify ICU types explicitly,
- for example <code>icu::UnicodeString</code>,
- or do <code>using icu::UnicodeString;</code> where appropriate.
- If your code relies on the "using namespace icu;" that used to be in unicode/uversion.h,
- then you need to update your code.<br />
- You could temporarily (until you have more time to update your code)
- revert to the default "using"
- via <code>-DU_USING_ICU_NAMESPACE=1</code>
- or by modifying unicode/uversion.h:
-<pre>Index: icu4c/source/common/unicode/uversion.h
-===================================================================
---- icu4c/source/common/unicode/uversion.h (revision 40704)
-+++ icu4c/source/common/unicode/uversion.h (working copy)
-@@ -127,7 +127,7 @@
- defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_TOOLUTIL_IMPLEMENTATION)
- # define U_USING_ICU_NAMESPACE 0
- # else
--# define U_USING_ICU_NAMESPACE 0
-+# define U_USING_ICU_NAMESPACE 1
- # endif
- # endif
- # if U_USING_ICU_NAMESPACE
-</pre>
- </li>
- <li><b>Namespace (ICU 60 and earlier):</b> By default, unicode/uversion.h has
- "using namespace icu;" which defeats much of the purpose of the namespace.
- (This is for historical reasons: Originally, ICU4C did not use namespaces,
- and some compilers did not support them. The default "using" statement
- preserves source code compatibility.)<br />
- You should turn this off
- via <code>-DU_USING_ICU_NAMESPACE=0</code>
- or by modifying unicode/uversion.h:
-<pre>Index: source/common/unicode/uversion.h
-===================================================================
---- source/common/unicode/uversion.h (revision 26606)
-+++ source/common/unicode/uversion.h (working copy)
-@@ -180,7 +180,8 @@
- # define U_NAMESPACE_QUALIFIER U_ICU_NAMESPACE::
-
- # ifndef U_USING_ICU_NAMESPACE
--# define U_USING_ICU_NAMESPACE 1
-+ // Set to 0 to force namespace declarations in ICU usage.
-+# define U_USING_ICU_NAMESPACE 0
- # endif
- # if U_USING_ICU_NAMESPACE
- U_NAMESPACE_USE
-</pre>
- ICU call sites then either qualify ICU types explicitly,
- for example <code>icu::UnicodeString</code>,
- or do <code>using icu::UnicodeString;</code> where appropriate.</li>
- <li><b>Hardcode the default charset to UTF-8:</b> On platforms where
- the default charset is always UTF-8,
- like MacOS X and some Linux distributions,
- we recommend hardcoding ICU's default charset to UTF-8.
- This means that some implementation code becomes simpler and faster,
- and statically linked ICU libraries become smaller.
- (See the <a href="http://icu-project.org/apiref/icu4c/platform_8h.html#a0a33e1edf3cd23d9e9c972b63c9f7943">U_CHARSET_IS_UTF8</a>
- API documentation for more details.)<br />
- You can <code>-DU_CHARSET_IS_UTF8=1</code> or
- modify unicode/utypes.h (in ICU 4.8 and below)
- or modify unicode/platform.h (in ICU 49 and higher):
-<pre>Index: source/common/unicode/utypes.h
-===================================================================
---- source/common/unicode/utypes.h (revision 26606)
-+++ source/common/unicode/utypes.h (working copy)
-@@ -160,7 +160,7 @@
- * @see UCONFIG_NO_CONVERSION
- */
- #ifndef U_CHARSET_IS_UTF8
--# define U_CHARSET_IS_UTF8 0
-+# define U_CHARSET_IS_UTF8 1
- #endif
-
- /*===========================================================================*/
-</pre></li>
- <li><b>UnicodeString constructors:</b> The UnicodeString class has
- several single-argument constructors that are not marked "explicit"
- for historical reasons.
- This can lead to inadvertent construction of a <code>UnicodeString</code>
- with a single character by using an integer,
- and it can lead to inadvertent dependency on the conversion framework
- by using a C string literal.<br />
- Beginning with ICU 49, you should do the following:
- <ul>
- <li>Consider marking the from-<code>UChar</code>
- and from-<code>UChar32</code> constructors explicit via
- <code>-DUNISTR_FROM_CHAR_EXPLICIT=explicit</code> or similar.</li>
- <li>Consider marking the from-<code>const char*</code> and
- from-<code>const UChar*</code> constructors explicit via
- <code>-DUNISTR_FROM_STRING_EXPLICIT=explicit</code> or similar.</li>
- </ul>
- Note: The ICU test suites cannot be compiled with these settings.
- </li>
- <li><b>utf.h, utf8.h, utf16.h, utf_old.h:</b>
- By default, utypes.h (and thus almost every public ICU header)
- includes all of these header files.
- Often, none of them are needed, or only one or two of them.
- All of utf_old.h is deprecated or obsolete.<br />
- Beginning with ICU 49,
- you should define <code>U_NO_DEFAULT_INCLUDE_UTF_HEADERS</code> to 1
- (via -D or uconfig.h, as above)
- and include those header files explicitly that you actually need.<br />
- Note: The ICU test suites cannot be compiled with this setting.</li>
- <li><b>utf_old.h:</b>
- All of utf_old.h is deprecated or obsolete.<br />
- Beginning with ICU 60,
- you should define <code>U_HIDE_OBSOLETE_UTF_OLD_H</code> to 1
- (via -D or uconfig.h, as above).
- Use of any of these macros should be replaced as noted
- in the comments for the obsolete macro.<br />
- Note: The ICU test suites <i>can</i> be compiled with this setting.</li>
- <li><b>.dat file:</b> By default, the ICU data is built into
- a shared library (DLL). This is convenient because it requires no
- install-time or runtime configuration,
- but the library is platform-specific and cannot be modified.
- A .dat package file makes the opposite trade-off:
- Platform-portable (except for endianness and charset family, which
- can be changed with the icupkg tool)
- and modifiable (also with the icupkg tool).
- If a path is set, then single data files (e.g., .res files)
- can be copied to that location to provide new locale data
- or conversion tables etc.<br />
- The only drawback with a .dat package file is that the application
- needs to provide ICU with the file system path to the package file
- (e.g., by calling <code>u_setDataDirectory()</code>)
- or with a pointer to the data (<code>udata_setCommonData()</code>)
- before other ICU API calls.
- This is usually easy if ICU is used from an application where
- <code>main()</code> takes care of such initialization.
- It may be hard if ICU is shipped with
- another shared library (such as the Xerces-C++ XML parser)
- which does not control <code>main()</code>.<br />
- See the <a href="https://unicode-org.github.io/icu/userguide/icudata">User Guide ICU Data</a>
- chapter for more details.<br />
- If possible, we recommend building the .dat package.
- Specify <code>--with-data-packaging=archive</code>
- on the configure command line, as in<br />
- <code>runConfigureICU Linux --with-data-packaging=archive</code><br />
- (Read the configure script's output for further instructions.
- On Windows, the Visual Studio build generates both the .dat package
- and the data DLL.)<br />
- Be sure to install and use the tiny stubdata library
- rather than the large data DLL.</li>
- <li><b>Static libraries:</b> It may make sense to build the ICU code
- into static libraries (.a) rather than shared libraries (.so/.dll).
- Static linking reduces the overall size of the binary by removing
- code that is never called.<br />
- Example configure command line:<br />
- <code>runConfigureICU Linux --enable-static --disable-shared</code></li>
- <li><b>Out-of-source build:</b> It is usually desirable to keep the ICU
- source file tree clean and have build output files written to
- a different location. This is called an "out-of-source build".
- Simply invoke the configure script from the target location:
-<pre>~/icu$ git clone export https://github.com/unicode-org/icu.git
-~/icu$ mkdir icu4c-build
-~/icu$ cd icu4c-build
-~/icu/icu4c-build$ ../icu/icu4c/source/runConfigureICU Linux
-~/icu/icu4c-build$ make check</pre><br/>
- (Note: this example shows a relative path to
- <code>runConfigureICU</code>. If you experience difficulty,
- try using an absolute path to <code>runConfigureICU</code>
- instead.)
- </li>
- </ul>
- <h4>ICU as a System-Level Library</h4>
- <p>If ICU is installed as a system-level library, there are further
- opportunities and restrictions to consider.
- For details, see the <em>Using ICU as an Operating System Level Library</em>
- section of the <a href="https://unicode-org.github.io/icu/userguide/design">User Guide ICU Architectural Design</a> chapter.</p>
- <ul>
- <li><b>Data path:</b> For a system-level library, it is best to load
- ICU data from the .dat package file because the file system path
- to the .dat package file can be hardcoded. ICU will automatically set
- the path to the final install location using U_ICU_DATA_DEFAULT_DIR.
- Alternatively, you can set <code>-DICU_DATA_DIR=/path/to/icu/data</code>
- when building the ICU code. (Used by source/common/putil.c.)<br/>
- Consider also setting <code>-DICU_NO_USER_DATA_OVERRIDE</code>
- if you do not want the "ICU_DATA" environment variable to be used.
- (An application can still override the data path via
- <code>u_setDataDirectory()</code> or
- <code>udata_setCommonData()</code>.</li>
- <li><b>Hide draft API:</b> API marked with <code>@draft</code>
- is new and not yet stable. Applications must not rely on unstable
- APIs from a system-level library.
- Define <code>U_HIDE_DRAFT_API</code>, <code>U_HIDE_INTERNAL_API</code>
- and <code>U_HIDE_SYSTEM_API</code>
- by modifying unicode/utypes.h before installing it.</li>
- <li><b>Only C APIs:</b> Applications must not rely on C++ APIs from a
- system-level library because binary C++ compatibility
- across library and compiler versions is very hard to achieve.
- Most ICU C++ APIs are in header files that contain a comment with
- <code>\brief C++ API</code>.
- Consider not installing these header files, or define <code>U_SHOW_CPLUSPLUS_API</code>
- to be <code>0</code> by modifying unicode/utypes.h before installing it.</li>
- <li><b>Disable renaming:</b> By default, ICU library entry point names
- have an ICU version suffix. Turn this off for a system-level installation,
- to enable upgrading ICU without breaking applications. For example:<br />
- <code>runConfigureICU Linux --disable-renaming</code><br />
- The public header files from this configuration must be installed
- for applications to include and get the correct entry point names.</li>
- </ul>
-
- <h3><a name="UserConfig" href="#UserConfig" id="UserConfig">User-Configurable Settings</a></h3>
- <p>ICU4C can be customized via a number of user-configurable settings.
- Many of them are controlled by preprocessor macros which are
- defined in the <code>source/common/unicode/uconfig.h</code> header file.
- Some turn off parts of ICU, for example conversion or collation,
- trading off a smaller library for reduced functionality.
- Other settings are recommended (see previous section)
- but their default values are set for better source code compatibility.</p>
-
- <p>In order to change such user-configurable settings, you can
- either modify the <code>uconfig.h</code> header file by adding
- a specific <code>#define ...</code> for one or more of the macros
- before they are first tested,
- or set the compiler's preprocessor flags (<code>CPPFLAGS</code>) to include
- an equivalent <code>-D</code> macro definition.</p>
-
- <h3><a name="HowToBuildWindows" href="#HowToBuildWindows" id=
- "HowToBuildWindows">How To Build And Install On Windows</a></h3>
-
- <p>Building International Components for Unicode requires:</p>
-
- <ul>
- <li>Microsoft Windows</li>
-
- <li>Microsoft Visual C++ (part of <a href="https://www.visualstudio.com/">Visual Studio</a>) (from either Visual Studio 2015 or Visual Studio 2017)</li>
-
- <li><i><b>Optional:</b></i> A version of the <a href="https://developer.microsoft.com/windows/downloads">Windows 10 SDK</a> (if you want to build the UWP projects)</li>
- </ul>
- <p class="note"><a href="#HowToBuildCygwin">Cygwin</a> is required if using a version of MSVC other than the one
- compatible with the supplied project files or if other compilers are used to build ICU. (e.g. GCC)</p>
-
- <p>The steps are:</p>
-
- <ol>
- <li>Unzip the <tt>icu-XXXX.zip</tt> file into any convenient location.<br/>
- <ul class="no-left-margin">
- <li>You can use the built-in zip functionality of Windows Explorer to do this.
- Right-click on the .zip file and choose the "Extract All" option from the context menu.
- This will open a new window where you can choose the output location to put the files.</li>
- <li>Alternatively, you can use a 3<sup>rd</sup> party GUI tool like 7-Zip or WinZip to do this as well.</li>
- </ul>
- </li>
-
- <li>Be sure that the ICU binary directory, (ex: <i>&lt;ICU&gt;</i><tt>\bin\</tt>), is
- included in the <strong>PATH</strong> environment variable. The tests will
- not work without the location of the ICU DLL files in the path.
- Note that the binary directory name can depend on what architecture you select when you compile ICU.
- For x86 or 32-bit builds, the binary directory is "<tt>bin</tt>". Whereas for x64 or 64-bit builds
- the binary directory is "<tt>bin64</tt>".
- </li>
-
- <li>Open the "<i>&lt;ICU&gt;</i><tt>\source\allinone\allinone.sln</tt>" solution
- file in 'Visual Studio 2017'. (This solution includes all the
- International Components for Unicode libraries, necessary ICU building
- tools, and the test suite projects). Please see the
- <a href="#HowToBuildWindowsCommandLine">command line note below</a> if you want to
- build from the command line instead.</li>
-
- <li>If you are building using 'Visual Studio 2015' instead, or if you are building the UWP projects and you have a different
- version of the Windows 10 SDK installed you will first need to modify the two "<tt>Build.Windows.*.props</tt>" files
- in the "<tt>allinone</tt>" directory before you can open the "allinone" solution file.
- Please see the notes below about <a href="#HowToUseOtherVSVersions">building with other versions of Visual Studio</a> and the
- notes on <a href="#HowToRetargetTheWin10SDK">re-targeting the Windows 10 SDK for the UWP projects</a> for details. Alternatively,
- you can <a href="#HowToSkipBuildingUWP">skip building the UWP projects</a> entirely as well.
- </li>
-
- <li>Set the active platform to "Win32" or "x64" (See <a href="#HowToBuildWindowsPlatform">Windows platform note</a> below)
- and configuration to "Debug" or "Release" (See <a href="#HowToBuildWindowsConfig">Windows configuration note</a> below).</li>
-
- <li>Choose the "Build" menu and select "Rebuild Solution". If you want to
- build the Debug and Release at the same time, see the <a href=
- "#HowToBuildWindowsBatch">batch configuration note</a> below.</li>
-
- <li>Run the tests. They can be run from the command line or from within Visual Studio.
-
- <h4>Running the Tests from the Windows Command Line (cmd)</h4>
- <ul>
- <li>The general syntax is:<br />
- <div class="indent">
- <tt><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat <i>Platform</i> <i>Configuration</i></tt>
- </div>
- </li>
- <li>So, for example for x86 (32-bit) and Debug, use the following:<br />
- <samp><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat <b>x86</b> <b>Debug</b></samp>
- For x86 (32-bit) and Release:
- <samp><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat <b>x86</b> <b>Release</b></samp>
- For x64 (64-bit) and Debug:
- <samp><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat <b>x64</b> <b>Debug</b></samp>
- For x64 (64-bit) and Release:
- <samp><i>&lt;ICU&gt;</i>\source\allinone\icucheck.bat <b>x64</b> <b>Release</b></samp>
- </li>
- </ul>
-
- <h4>Running the Tests from within Visual Studio</h4>
-
- <ol>
- <li>Run the C++ test suite, "<tt>intltest</tt>". To do this: set the active startup
- project to "intltest", and press Ctrl+F5 to run it. Make sure that it
- passes without any errors.</li>
-
- <li>Run the C test suite, "<tt>cintltst</tt>". To do this: set the active startup
- project to "cintltst", and press Ctrl+F5 to run it. Make sure that it
- passes without any errors.</li>
-
- <li>Run the I/O test suite, "<tt>iotest</tt>". To do this: set the active startup
- project to "iotest", and press Ctrl+F5 to run it. Make sure that it passes
- without any errors.</li>
- </ol>
- </li>
-
- <li>You are now able to develop applications with ICU by using the
- libraries and tools in <tt><i>&lt;ICU&gt;</i>\bin\</tt>. The headers are in
- <tt><i>&lt;ICU&gt;</i>\include\</tt> and the link libraries are in
- <tt><i>&lt;ICU&gt;</i>\lib\</tt>. To install the ICU runtime on a machine, or ship
- it with your application, copy the needed components from
- <tt><i>&lt;ICU&gt;</i>\bin\</tt> to a location on the system PATH or to your
- application directory.</li>
- </ol>
-
- <p><a name="HowToUseOtherVSVersions" id="HowToUseOtherVSVersions">
- <strong>Building with other versions of Visual Studio Note:</strong></a>
- The particular version of the MSVC compiler tool-set (and thus the corresponding version of Visual Studio) that
- is used to compile ICU is determined by the "<tt>PlatformToolset</tt>" property. This property is stored in two
- different shared files that are used to set common configuration settings amongst the various ICU "<tt>*.vcxproj</tt>" project files.
-
- For the non-UWP projects, this setting is in the shared file called "<tt>Build.Windows.ProjectConfiguration.props</tt>" located
- in the "allinone" directory.
-
- For the UWP projects, this setting is in the shared file called "<tt>Build.Windows.UWP.ProjectConfiguration.props</tt>", also
- located in the "allinone" directory.
- <br/>
- The value of <tt>v140</tt> corresponds to the Visual Studio 2015 compiler tool set, whereas the value of
- <tt>v141</tt> corresponds to the Visual Studio 2017 compiler tool set.
-
- <br/>In order to build the non-UWP projects with Visual Studio 2015 you will need to modify the file
- called "<tt>Build.Windows.ProjectConfiguration.props</tt>" to change the value of the <tt>PlatformToolset</tt> property.
-
- Note however that Visual Studio 2017 is required for building the UWP projects.
- </p>
-
- <p>Please consider: Using older versions of the MSVC compiler is generally not recommended due to the improved support for the C++11 standard
- in newer versions of the compiler.</p>
-
- <p><a name="HowToRetargetTheWin10SDK" id="HowToRetargetTheWin10SDK">
- <strong>Re-targeting the Windows 10 SDK for the UWP projects Note:</strong></a>
-
- If the version of the Windows 10 SDK that you have installed does not match the version used by the UWP projects, then you
- will need to "retarget" them to use the version of the SDK that you have installed instead.
-
- There are two ways to do this:
- <ul>
- <li>In Visual Studio you can right-click on the UWP projects in the 'Solution Explorer' and select the
- option 'Retarget Projects' from the context menu. This will open up a window where you can select the
- SDK version to target from a drop-down list of the various SDKs that are installed on the machine.</li>
-
- <li>Alternatively, you can manually edit the shared file called "<tt>Build.Windows.UWP.ProjectConfiguration.props</tt>"
- which is located in the "allinone" directory. You will need to change the of the
- "<tt>WindowsTargetPlatformVersion</tt>" property to the version of the SDK that you would like to use instead.</li>
- </ul>
- </p>
-
- <p><a name="HowToBuildWindowsCommandLine" id=
- "HowToBuildWindowsCommandLine"><strong>Using MSBUILD At The Command Line Note:</strong></a>
- You can build ICU from the command line instead of using the Visual Studio GUI.
-
- Assuming that you have properly installed Visual Studio to support command line building, you
- should have a shortcut for the "Developer Command Prompt" listed in the Start Menu.
- (For Visual Studio 2017 you will need to install the "Desktop development with C++" option).</p>
-
- <ul>
- <li>Open the "Developer Command Prompt" shortcut from the Start Menu. (This will open up a new command line window).</li>
- <li>From within the "Developer Command Prompt" change directory (<tt>cd</tt>) to the ICU source directory.</li>
- <li>You can then use either '<tt>msbuild</tt>' directly, or you can use the '<tt>devenv.com</tt>' command to build ICU.</li>
- <li>Using <tt>MSBUILD</tt>:</li>
- <ul class="no-left-margin">
- <li>To build the 32-bit Debug version, use the following command line:<br/>
- <code>'msbuild source\allinone\allinone.sln /p:Configuration=Debug /p:Platform=Win32'</code>.</li>
- <li>To build the 64-bit Release version, use the following command line:<br/>
- <code>'msbuild source\allinone\allinone.sln /p:Configuration=Release /p:Platform=x64'</code>.</li>
- </ul>
- <li>Using <tt>devenv.com</tt>:</li>
- <ul class="no-left-margin">
- <li>To build the 32-bit Debug version, use the following command line:<br/>
- <code>'devenv.com source\allinone\allinone.sln /build "Debug|Win32"'</code>.</li>
- <li>To build the 64-bit Release version, use the following command line:<br/>
- <code>'devenv.com source\allinone\allinone.sln /build "Release|x64"'</code>.</li>
- </ul>
- </ul>
-
- <p><a name="HowToSkipBuildingUWP" id=
- "HowToSkipBuildingUWP"><strong>Skipping the UWP Projects on the Command Line Note:</strong></a>
- You can skip (or omit) building the UWP projects on the command line by passing the argument
- '<code>SkipUWP=true</code>' to either MSBUILD or devenv.</p>
-
- <ul>
- <li>For example, using <tt>MSBUILD</tt>:</li>
- <ul class="no-left-margin">
- <li>To skip building the UWP projects with a 32-bit Debug build, use the following command line:<br/>
- <code>'msbuild source\allinone\allinone.sln /p:Configuration=Debug /p:Platform=Win32 /p:SkipUWP=true'</code>.</li>
- <li>To skip building the UWP projects with a 64-bit Release version, use the following command line:<br/>
- <code>'msbuild source\allinone\allinone.sln /p:Configuration=Release /p:Platform=x64 /p:SkipUWP=true'</code>.</li>
- </ul>
- </ul>
-
- <p>You can also use Cygwin with the MSVC compiler to build ICU, and you can refer to the <a href=
- "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a>
- section for more details.</p>
-
- <p><a name="HowToBuildWindowsPlatform" id=
- "HowToBuildWindowsPlatform"><strong>Setting Active Platform
- Note:</strong></a> Even though you are able to select "x64" as the active platform, if your operating system is
- not a 64 bit version of Windows, the build will fail. To set the active platform, two different possibilities are:</p>
-
- <ul>
- <li>Choose "Build" menu, select "Configuration Manager...", and select
- "Win32" or "x64" for the Active Platform Solution.</li>
-
- <li>Another way is to select the desired build configuration from "Solution
- Platforms" dropdown menu from the standard toolbar. It will say
- "Win32" or "x64" in the dropdown list.</li>
- </ul>
-
- <p><a name="HowToBuildWindowsConfig" id=
- "HowToBuildWindowsConfig"><strong>Setting Active Configuration
- Note:</strong></a> To set the active configuration, two different
- possibilities are:</p>
-
- <ul>
- <li>Choose "Build" menu, select "Configuration Manager...", and select
- "Release" or "Debug" for the Active Configuration Solution.</li>
-
- <li>Another way is to select the desired build configuration from "Solution
- Configurations" dropdown menu from the standard toolbar. It will say
- "Release" or "Debug" in the dropdown list.</li>
- </ul>
-
- <p><a name="HowToBuildWindowsBatch" id="HowToBuildWindowsBatch"><strong>Batch
- Configuration Note:</strong></a> If you want to build the Win32 and x64 platforms and
- Debug and Release configurations at the same time, choose "Build" menu, and select "Batch
- Build...". Click the "Select All" button, and then click the "Rebuild"
- button.</p>
-
- <h3><a name="HowToBuildCygwin" href="#HowToBuildCygwin" id=
- "HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a></h3>
-
- <p>Building International Components for Unicode with this configuration
- requires:</p>
-
- <ul>
- <li>Microsoft Windows</li>
-
- <li>Microsoft Visual C++ (from Visual Studio 2015 or newer, when gcc isn't used).</li>
-
- <li>
- Cygwin with the following installed:
-
- <ul>
- <li>bash</li>
-
- <li>GNU make</li>
-
- <li>ar</li>
-
- <li>ranlib</li>
-
- <li>man (if you plan to look at the man pages)</li>
- </ul>
- </li>
- </ul>
-
- <p>There are two ways you can build ICU with Cygwin. You can build with gcc
- or Microsoft Visual C++. If you use gcc, the resulting libraries and tools
- will depend on the Cygwin environment. If you use Microsoft Visual C++, the
- resulting libraries and tools do not depend on Cygwin and can be more easily
- distributed to other Windows computers (the generated man pages and shell
- scripts still need Cygwin). To build with gcc, please follow the "<a href=
- "#HowToBuildUNIX">How To Build And Install On UNIX</a>" instructions, while
- you are inside a Cygwin bash shell. To build with Microsoft Visual C++,
- please use the following instructions:</p>
-
- <ol>
- <li>Start the Windows "Command Prompt" window. This is different from the
- gcc build, which requires the Cygwin Bash command prompt. The Microsoft
- Visual C++ compiler will not work with a bash command prompt.</li>
-
- <li>If the computer isn't set up to use Visual C++ from the command line,
- you need to run vcvars32.bat.<br />For example:<br />
- "<tt>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat</tt>"
- can be used for 32-bit builds <strong>or</strong> <br />
- "<tt>C:\Program Files (x86)\Microsoft Visual Studio 14\VC\bin\x86_amd64\vcvarsx86_amd64.bat</tt>"
- can be used for 64-bit builds on Windows x64.</li>
-
- <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
- line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
- WinZip.</li>
-
- <li>Change directory to "icu/source", which is where you unzipped ICU.</li>
-
- <li>Run "<tt>bash <a href="source/runConfigureICU">./runConfigureICU</a>
- Cygwin/MSVC</tt>" (See <a href="#HowToWindowsConfigureICU">Windows
- configuration note</a> and non-functional configure options below).</li>
-
- <li>Type <tt>"make"</tt> to compile the libraries and all the data files.
- This make command should be GNU make.</li>
-
- <li>Optionally, type <tt>"make check"</tt> to run the test suite, which
- checks for ICU's functionality integrity (See <a href=
- "#HowToTestWithoutGmake">testing note</a> below).</li>
-
- <li>Type <tt>"make install"</tt> to install ICU. If you used the --prefix=
- option on configure or runConfigureICU, ICU will be installed to the
- directory you specified. (See <a href="#HowToInstallICU">installation
- note</a> below).</li>
- </ol>
-
- <p><a name="HowToWindowsConfigureICU" id=
- "HowToWindowsConfigureICU"><strong>Configuring ICU on Windows
- NOTE:</strong></a> </p>
- <p>
- Ensure that the order of the PATH is MSVC, Cygwin, and then other PATHs. The configure
- script needs certain tools in Cygwin (e.g. grep).
- </p>
- <p>
- Also, you may need to run <tt>"dos2unix.exe"</tt> on all of the scripts (e.g. configure)
- in the top source directory of ICU. To avoid this issue, you can download
- the ICU source for Unix platforms (icu-xxx.tgz).
- </p>
- <p>In addition to the Unix <a href=
- "#HowToConfigureICU">configuration note</a> the following configure options
- currently do not work on Windows with Microsoft's compiler. Some options can
- work by manually editing <tt>icu/source/common/unicode/pwin32.h</tt>, but
- manually editing the files is not recommended.</p>
-
- <ul>
- <li><tt>--disable-renaming</tt></li>
-
- <li><tt>--enable-tracing</tt></li>
-
- <li><tt>--enable-rpath</tt></li>
-
- <li><tt>--enable-static</tt> (Requires that U_STATIC_IMPLEMENTATION be
- defined in user code that links against ICU's static libraries.)</li>
-
- <li><tt>--with-data-packaging=files</tt> (The pkgdata tool currently does
- not work in this mode. Manual packaging is required to use this mode.)</li>
- </ul>
-
- <h3><a name="HowToBuildUNIX" href="#HowToBuildUNIX" id="HowToBuildUNIX">How
- To Build And Install On UNIX</a></h3>
-
- <p>Building International Components for Unicode on UNIX requires:</p>
-
- <ul>
- <li>A C++ compiler installed on the target machine (for example: gcc, CC,
- xlC_r, aCC, cxx, etc...).</li>
-
- <li>An ANSI C compiler installed on the target machine (for example:
- cc).</li>
-
- <li>A recent version of GNU make (3.80+).</li>
-
- <li>For a list of z/OS tools please view the <a href="#HowToBuildZOS">z/OS
- build section</a> of this document for further details.</li>
- </ul>
-
- <p>Here are the steps to build ICU:</p>
-
- <ol>
- <li>Decompress the icu-<i>X</i>.<i>Y</i>.tgz (or
- icu-<i>X</i>.<i>Y</i>.tar.gz) file. For example, <samp>gunzip -d &lt; icu-<i>X</i>.<i>Y</i>.tgz | tar xvf -</samp></li>
-
- <li>Change directory to <code>icu/source</code>.
- <samp>cd icu/source</samp>
- </li>
-
- <li>Some files may have the wrong permissions.<samp>chmod +x runConfigureICU configure install-sh</samp></li>
-
- <li>Run the <span style='font-family: monospace;'><a href="source/runConfigureICU">runConfigureICU</a></span>
- script for your platform. (See <a href="#HowToConfigureICU">configuration
- note</a> below).</li>
-
- <li>Now build: <samp>gmake</samp> (or just <code>make</code> if GNU make is the default make on
- your platform) to compile the libraries and all the data files. The proper
- name of the GNU make command is printed at the end of the configuration
- run, as in <tt>"You must use gmake to compile ICU"</tt>.
- <br/>
- Note that the compilation command output may be simplified on your platform. If this is the case, you will see just:
- <tt>gcc ... stubdata.c</tt>
- rather than
- <tt>gcc -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1 -D_REENTRANT -I../common -DU_ATTRIBUTE_DEPRECATED= -O2 -Wall -std=c99 -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -c -DPIC -fPIC -o stubdata.o stubdata.c</tt>
- <br/>
- If you need to see the whole compilation line, use <span style='font-family: monospace;'>"gmake VERBOSE=1"</span>. The full compilation line will print if an error occurs.
- </li>
-
- <li>Optionally,<samp>gmake check</samp> will run the test suite, which
- checks for ICU's functionality integrity (See <a href=
- "#HowToTestWithoutGmake">testing note</a> below).</li>
-
- <li>To install, <samp>gmake install</samp> to install ICU. If you used the --prefix=
- option on configure or runConfigureICU, ICU will be installed to the
- directory you specified. (See <a href="#HowToInstallICU">installation
- note</a> below).</li>
- </ol>
-
- <p><a name="HowToConfigureICU" id="HowToConfigureICU"><strong>Configuring ICU
- NOTE:</strong></a> Type <tt>"./runConfigureICU --help"</tt> for help on how
- to run it and a list of supported platforms. You may also want to type
- <tt>"./configure --help"</tt> to print the available configure options that
- you may want to give runConfigureICU. If you are not using the
- runConfigureICU script, or your platform is not supported by the script, you
- may need to set your CC, CXX, CFLAGS and CXXFLAGS environment variables, and
- type <tt>"./configure"</tt>.
- HP-UX users, please see this <a href="#ImportantNotesHPUX">note regarding
- HP-UX multithreaded build issues</a> with newer compilers. Solaris users,
- please see this <a href="#ImportantNotesSolaris">note regarding Solaris
- multithreaded build issues</a>.</p>
-
- <p>ICU is built with strict compiler warnings enabled by default. If this
- causes excessive numbers of warnings on your platform, use the --disable-strict
- option to configure to reduce the warning level.</p>
-
- <p><a name="HowToTestWithoutGmake" id="HowToTestWithoutGmake"><strong>Running
- The Tests From The Command Line NOTE:</strong></a> You may have to set
- certain variables if you with to run test programs individually, that is
- apart from "gmake check". The environment variable <strong>ICU_DATA</strong>
- can be set to the full pathname of the data directory to indicate where the
- locale data files and conversion mapping tables are when you are not using
- the shared library (e.g. by using the .dat archive or the individual data
- files). The trailing "/" is required after the directory name (e.g.
- "$Root/source/data/out/" will work, but the value "$Root/source/data/out" is
- not acceptable). You do not need to set <strong>ICU_DATA</strong> if the
- complete shared data library is in your library path.</p>
-
- <p><a name="HowToInstallICU" id="HowToInstallICU"><strong>Installing ICU
- NOTE:</strong></a> Some platforms use package management tools to control the
- installation and uninstallation of files on the system, as well as the
- integrity of the system configuration. You may want to check if ICU can be
- packaged for your package management tools by looking into the "packaging"
- directory. (Please note that if you are using a snapshot of ICU from Git, it
- is probable that the packaging scripts or related files are not up to date
- with the contents of ICU at this time, so use them with caution).</p>
-
- <h3><a name="HowToBuildZOS" href="#HowToBuildZOS" id="HowToBuildZOS">How To
- Build And Install On z/OS (OS/390)</a></h3>
-
- <p>You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM
- tests only the z/OS installation. You install ICU in a z/OS UNIX system
- services file system such as HFS or zFS. On this platform, it is important
- that you understand a few details:</p>
-
- <ul>
- <li>The makedep and GNU make tools are required for building ICU. If it
- is not already installed on your system, it is available at the <a href=
- "http://www-03.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html">z/OS UNIX -
- Tools and Toys</a> site. The PATH environment variable should be updated to
- contain the location of this executable prior to build. Failure to add these
- tools to your PATH will cause ICU build failures or cause pkgdata to fail
- to run.</li>
-
- <li>Since USS does not support using the mmap() function over NFS, it is
- recommended that you build ICU on a local filesystem. Once ICU has been
- built, you should not have this problem while using ICU when the data
- library has been built as a shared library, which is this is the default
- setting.</li>
-
- <li>Encoding considerations: The source code assumes that it is compiled
- with codepage ibm-1047 (to be exact, the UNIX System Services variant of
- it). The pax command converts all of the source code files from ASCII to
- codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and
- must not be converted, or must be converted back to their original state.
- You can use the <a href="as_is/os390/unpax-icu.sh">unpax-icu.sh</a> script
- to do this for you automatically. It will unpackage the tar file and
- convert all the necessary files for you automatically.</li>
-
- <li>z/OS supports both native S/390 hexadecimal floating point and (with
- OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile
- time option. Applications built with IEEE should use ICU DLLs that are
- built with IEEE (and vice versa). The environment variable IEEE390=0 will
- cause the z/OS version of ICU to be built without IEEE floating point
- support and use the native hexadecimal floating point. By default ICU is
- built with IEEE 754 support. Native floating point support is sufficient
- for codepage conversion, resource bundle and UnicodeString operations, but
- the Format APIs require IEEE binary floating point.</li>
-
- <li>z/OS introduced the concept of Extra Performance Linkage (XPLINK) to
- bring performance improvement opportunities to call-intensive C and C++
- applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so if
- you are considering using XPLINK in your application that uses ICU, you
- should consider building the XPLINK-enabled version of ICU. You need to
- set ICU's environment variable <code>OS390_XPLINK=1</code> prior to
- invoking the make process to produce binaries that are enabled for
- XPLINK. The XPLINK option, which is available for z/OS 1.2 and later,
- requires the PTF PQ69418 to build XPLINK enabled binaries.</li>
-
- <li>ICU requires XPLINK for the icuio library. If you want to use the
- rest of ICU without XPLINK, then you must use the --disable-icuio
- configure option.</li>
-
- <li>The latest versions of z/OS use <a
- href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind6.htm">XPLINK
- version (C128) of the C++ standard library</a> by default. You may see <a
- href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind5.htm">an
- error</a> when running with XPLINK disabled. To avoid this error,
- set the following environment variable or similar:
-
-<pre><samp>export _CXX_PSYSIX="CEE.SCEELIB(C128N)":"CBC.SCLBSID(IOSTREAM,COMPLEX)"</samp></pre>
- </li>
-
- <li>When building ICU data, the heap size may need to be increased with the following
- environment variable:
-
-<pre><samp>export _CEE_RUNOPTS="HEAPPOOLS(ON),HEAP(4M,1M,ANY,FREE,0K,4080)"</samp></pre>
- </li>
-
-
- <li>The rest of the instructions for building and testing ICU on z/OS with
- UNIX System Services are the same as the <a href="#HowToBuildUNIX">How To
- Build And Install On UNIX</a> section.</li>
- </ul>
-
- <h4>z/OS (Batch/PDS) support outside the UNIX system services
- environment</h4>
-
- <p>By default, ICU builds its libraries into the UNIX file system (HFS). In
- addition, there is a z/OS specific environment variable (OS390BATCH) to build
- some libraries into the z/OS native file system. This is useful, for example,
- when your application is externalized via Job Control Language (JCL).</p>
-
- <p>The OS390BATCH environment variable enables non-UNIX support including the
- batch environment. When OS390BATCH is set, the libicui18n<i>XX</i>.dll,
- libicuuc<i>XX</i>.dll, and libicudt<i>XX</i>e.dll binaries are built into
- data sets (the native file system). Turning on OS390BATCH does not turn off
- the normal z/OS UNIX build. This means that the z/OS UNIX (HFS) DLLs will
- always be created.</p>
-
- <p>Two additional environment variables indicate the names of the z/OS data
- sets to use. The LOADMOD environment variable identifies the name of the data
- set that contains the dynamic link libraries (DLLs) and the LOADEXP
- environment variable identifies the name of the data set that contains the
- side decks, which are normally the files with the .x suffix in the UNIX file
- system.</p>
-
- <p>A data set is roughly equivalent to a UNIX or Windows file. For most kinds
- of data sets the operating system maintains record boundaries. UNIX and
- Windows files are byte streams. Two kinds of data sets are PDS and PDSE. Each
- data set of these two types contains a directory. It is like a UNIX
- directory. Each "file" is called a "member". Each member name is limited to
- eight bytes, normally EBCDIC.</p>
-
- <p>Here is an example of some environment variables that you can set prior to
- building ICU:</p>
-<pre>
-<samp>OS390BATCH=1
-LOADMOD=<i>USER</i>.ICU.LOAD
-LOADEXP=<i>USER</i>.ICU.EXP</samp>
-</pre>
-
- <p>The PDS member names for the DLL file names are as follows:</p>
-<pre>
-<samp>IXMI<i>XX</i>IN --&gt; libicui18n<i>XX</i>.dll
-IXMI<i>XX</i>UC --&gt; libicuuc<i>XX</i>.dll
-IXMI<i>XX</i>DA --&gt; libicudt<i>XX</i>e.dll</samp>
-</pre>
-
- <p>You should point the LOADMOD environment variable at a partitioned data
- set extended (PDSE) and point the LOADEXP environment variable at a
- partitioned data set (PDS). The PDSE can be allocated with the following
- attributes:</p>
-<pre>
-<samp>Data Set Name . . . : <i>USER</i>.ICU.LOAD
-Management class. . : <i>**None**</i>
-Storage class . . . : <i>BASE</i>
-Volume serial . . . : <i>TSO007</i>
-Device type . . . . : <i>3390</i>
-Data class. . . . . : <i>LOAD</i>
-Organization . . . : PO
-Record format . . . : U
-Record length . . . : 0
-Block size . . . . : <i>32760</i>
-1st extent cylinders: 1
-Secondary cylinders : 5
-Data set name type : LIBRARY</samp>
-</pre>
-
- <p>The PDS can be allocated with the following attributes:</p>
-<pre>
-<samp>Data Set Name . . . : <i>USER</i>.ICU.EXP
-Management class. . : <i>**None**</i>
-Storage class . . . : <i>BASE</i>
-Volume serial . . . : <i>TSO007</i>
-Device type . . . . : <i>3390</i>
-Data class. . . . . : <i>**None**</i>
-Organization . . . : PO
-Record format . . . : FB
-Record length . . . : 80
-Block size . . . . : <i>3200</i>
-1st extent cylinders: 3
-Secondary cylinders : 3
-Data set name type : PDS</samp>
-</pre>
-
- <h3><a name="HowToBuildOS400" href="#HowToBuildOS400" id=
- "HowToBuildOS400">How To Build And Install On The IBM i Family (IBM i, i5/OS OS/400)</a></h3>
-
- <p>Before you start building ICU, ICU requires the following:</p>
-
- <ul>
- <li>QSHELL interpreter installed (install base option 30, operating system)
- <!--li>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</li--></li>
-
- <li>ILE C/C++ Compiler installed on the system</li>
-
- <li>The latest IBM tools for Developers for IBM i &mdash;
- <a href='https://www-356.ibm.com/partnerworld/wps/servlet/ContentHandler/pw_com_porting_tools_index'>https://www-356.ibm.com/partnerworld/wps/servlet/ContentHandler/pw_com_porting_tools_index</a>
- <!-- formerly http://www.ibm.com/servers/enable/site/porting/tools/'>http://www.ibm.com/servers/enable/site/porting/tools/</a> -->
- <!-- formerly: http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html -->
- </li>
- </ul>
-
- <p>The following describes how to setup and build ICU. For background
- information, you should look at the <a href="#HowToBuildUNIX">UNIX build
- instructions</a>.</p>
-
- <ol>
- <li>
- Copy the ICU source .tgz to the IBM i environment, as binary.
- Also, copy the <a href='as_is/os400/unpax-icu.sh'>unpax-icu.sh</a> script into the same directory, as a text file.
- </li>
-
- <li>
- Create target library. This library will be the target for the
- resulting modules, programs and service programs. You will specify this
- library on the OUTPUTDIR environment variable.
-<pre>
-<samp>CRTLIB LIB(<i>libraryname</i>)
-ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('<i>libraryname</i>') REPLACE(*YES) </samp></pre>
- </li>
-
- <li>
- Set up the following environment variables and job characteristics in your build process
-<pre>
-<samp>ADDENVVAR ENVVAR(MAKE) VALUE('gmake') REPLACE(*YES)
-CHGJOB CCSID(37)</samp></pre></li>
-
- <li>Fire up the QSH <i>(all subsequent commands are run inside the qsh session.)</i>
- <pre><samp>qsh</samp></pre>
- </li>
-
- <li>Set up the PATH: <pre><samp>export PATH=/QIBM/ProdData/DeveloperTools/qsh/bin:$PATH:/QOpenSys/usr/bin</samp></pre>
- </li>
-
- <li>Unpack the ICU source code archive:
- <pre><samp>gzip -d icu-<i>X</i>.<i>Y</i>.tgz</samp></pre>
- </li>
-
- <li>Run unpax-icu.sh on the tar file generated from the previous step.
- <pre><samp>unpax-icu.sh icu.tar</samp></pre></li>
-
- <li>Build the program ICULD which ICU will use for linkage.
- <pre><samp>cd icu/as_is/os400
-qsh bldiculd.sh
-cd ../../..</samp></pre>
- </li>
-
- <li>Change into the 'source' directory, and configure ICU. (See <a href="#HowToConfigureICU">configuration
- note</a> for details). Note that --with-data-packaging=archive and setting the --prefix are recommended, building in default (dll) mode is currently not supported.
- <pre><samp>cd icu/source
-./runConfigureICU IBMi --prefix=<i>/path/to/somewhere</i> --with-data-packaging=archive</samp></pre>
-</li>
-
- <li>Build ICU. <i>(Note: Do not use the -j option)</i> <pre><samp>gmake</samp></pre></li>
-
- <li>Test ICU. <pre><samp>gmake check</samp></pre>
- (The <tt> QIBM_MULTI_THREADED=Y</tt> flag will be automatically applied to intltest -
- you can look at the <a href=
- "https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzahw/rzahwceeco.htm">
- iSeries Information Center</a> for more details regarding the running of multiple threads
- on IBM i.)</li>
- </ol>
-
- <!-- cross -->
- <h3><a name="HowToCrossCompileICU" href="#HowToCrossCompileICU" id="HowToCrossCompileICU">How To Cross Compile ICU</a></h3>
- <p>This section will explain how to build ICU on one platform, but to produce binaries intended to run on another. This is commonly known as a cross compile.</p>
- <p>Normally, in the course of a build, ICU needs to run the tools that it builds in order to generate and package data and test-data.In a cross compilation setting, ICU is built on a different system from that which it eventually runs on. An example might be, if you are building for a small/headless system (such as an embedded device), or a system where you can't easily run the ICU command line tools (any non-UNIX-like system).</p>
- <p>To reduce confusion, we will here refer to the "A" and the "B" system.System "A" is the actual system we will be running on- the only requirements on it is are it is able to build ICU from the command line targetting itself (with configure or runConfigureICU), and secondly, that it also contain the correct toolchain for compiling and linking for the resultant platform, referred to as the "B" system.</p>
- <p>The autoconf docs use the term "build" for A, and "host" for B. More details at: <a href="http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html#Specifying-Names">http://www.gnu.org/software/autoconf/manual/html_node/Specifying-Names.html</a></p>
- <p>Three initially-empty directories will be used in this example:</p>
- <table summary="Three directories used in this example" class="docTable">
- <tr>
- <th align="left">/icu</th><td>a copy of the ICU source</td>
- </tr>
- <tr>
- <th align="left">/buildA</th><td>an empty directory, it will contain ICU built for A<br />(MacOSX in this case)</td>
- </tr>
- <tr>
- <th align="left">/buildB</th><td>an empty directory, it will contain ICU built for B<br />(HaikuOS in this case)</td>
- </tr>
- </table>
-
- <ol>
- <li>Check out or unpack the ICU source code into the /icu directory.You will have the directories /icu/source, etc.</li>
- <li>Build ICU in /buildA normally (using runConfigureICU or configure):
-<pre class="samp">cd /buildA
-sh /icu/source/runConfigureICU <strong>MacOSX</strong>
-gnumake
-</pre>
- </li>
- <li>Set PATH or other variables as needed, such as CPPFLAGS.</li>
- <li>Build ICU in /buildB<br />
- <p class="note">"<code>--with-cross-build</code>" takes an absolute path.</p>
-<pre class="samp">cd /buildB
-sh /icu/source/configure --host=<strong>i586-pc-haiku</strong> --with-cross-build=<strong>/buildA</strong>
-gnumake</pre>
- </li>
- <li>Tests and testdata can be built with "gnumake tests".</li>
- </ol>
- <!-- end cross -->
-
- <!-- end build environment -->
-
- <h2><a name="HowToPackage" href="#HowToPackage" id="HowToPackage">How To
- Package ICU</a></h2>
-
- <p>There are many ways that a person can package ICU with their software
- products. Usually only the libraries need to be considered for packaging.</p>
-
- <p>On UNIX, you should use "<tt>gmake install</tt>" to make it easier to
- develop and package ICU. The bin, lib and include directories are needed to
- develop applications that use ICU. These directories will be created relative
- to the "<tt>--prefix=</tt><i>dir</i>" configure option (See the <a href=
- "#HowToBuildUNIX">UNIX build instructions</a>). When ICU is built on Windows,
- a similar directory structure is built.</p>
-
- <p>When changes have been made to the standard ICU distribution, it is
- recommended that at least one of the following guidelines be followed for
- special packaging.</p>
-
- <ol>
- <li>Add a suffix name to the library names. This can be done with the
- --with-library-suffix configure option.</li>
-
- <li>The installation script should install the ICU libraries into the
- application's directory.</li>
- </ol>
-
- <p>Following these guidelines prevents other applications that use a standard
- ICU distribution from conflicting with any libraries that you need. On
- operating systems that do not have a standard C++ ABI (name mangling) for
- compilers, it is recommended to do this special packaging anyway. More
- details on customizing ICU are available in the <a href=
- "https://unicode-org.github.io/icu/userguide/">User's Guide</a>. The <a href=
- "#SourceCode">ICU Source Code Organization</a> section of this readme.html
- gives a more complete description of the libraries.</p>
-
- <table class="docTable" summary=
- "ICU has several libraries for you to use.">
- <caption>
- Here is an example of libraries that are frequently packaged.
- </caption>
-
- <tr>
- <th scope="col">Library Name</th>
-
- <th scope="col">Windows Filename</th>
-
- <th scope="col">Linux Filename</th>
-
- <th scope="col">Comment</th>
- </tr>
-
- <tr>
- <td>Data Library</td>
-
- <td>icudt<i>XY</i>l.dll</td>
-
- <td>libicudata.so.<i>XY</i>.<i>Z</i></td>
-
- <td>Data required by the Common and I18n libraries. There are many ways
- to package and <a href=
- "https://unicode-org.github.io/icu/userguide/icudata">customize this
- data</a>, but by default this is all you need.</td>
- </tr>
-
- <tr>
- <td>Common Library</td>
-
- <td>icuuc<i>XY</i>.dll</td>
-
- <td>libicuuc.so.<i>XY</i>.<i>Z</i></td>
-
- <td>Base library required by all other ICU libraries.</td>
- </tr>
-
- <tr>
- <td>Internationalization (i18n) Library</td>
-
- <td>icuin<i>XY</i>.dll</td>
-
- <td>libicui18n.so.<i>XY</i>.<i>Z</i></td>
-
- <td>A library that contains many locale based internationalization (i18n)
- functions.</td>
- </tr>
-
- <tr>
- <td>Layout Extensions Engine</td>
-
- <td>iculx<i>XY</i>.dll</td>
-
- <td>libiculx.so.<i>XY</i>.<i>Z</i></td>
-
- <td>An optional engine for doing paragraph layout that uses
- parts of ICU.
- HarfBuzz is required.</td>
- </tr>
-
- <tr>
- <td>ICU I/O (Unicode stdio) Library</td>
-
- <td>icuio<i>XY</i>.dll</td>
-
- <td>libicuio.so.<i>XY</i>.<i>Z</i></td>
-
- <td>An optional library that provides a stdio like API with Unicode
- support.</td>
- </tr>
-
- <tr>
- <td>Tool Utility Library</td>
-
- <td>icutu<i>XY</i>.dll</td>
-
- <td>libicutu.so.<i>XY</i>.<i>Z</i></td>
-
- <td>An internal library that contains internal APIs that are only used by
- ICU's tools. If you do not use ICU's tools, you do not need this
- library.</td>
- </tr>
- </table>
-
- <p>Normally only the above ICU libraries need to be considered for packaging.
- The versionless symbolic links to these libraries are only needed for easier
- development. The <i>X</i>, <i>Y</i> and <i>Z</i> parts of the name are the
- version numbers of ICU. For example, ICU 2.0.2 would have the name
- libicuuc.so.20.2 for the common library. The exact format of the library
- names can vary between platforms due to how each platform can handles library
- versioning.</p>
-
- <h2><a name="ImportantNotes" href="#ImportantNotes" id=
- "ImportantNotes">Important Notes About Using ICU</a></h2>
-
- <h3><a name="ImportantNotesMultithreaded" href="#ImportantNotesMultithreaded"
- id="ImportantNotesMultithreaded">Using ICU in a Multithreaded
- Environment</a></h3>
-
- <p>Some versions of ICU require calling the <code>u_init()</code> function
- from <code>uclean.h</code> to ensure that ICU is initialized properly. In
- those ICU versions, <code>u_init()</code> must be called before ICU is used
- from multiple threads. There is no harm in calling <code>u_init()</code> in a
- single-threaded application, on a single-CPU machine, or in other cases where
- <code>u_init()</code> is not required.</p>
-
- <p>In addition to ensuring thread safety, <code>u_init()</code> also attempts
- to load at least one ICU data file. Assuming that all data files are packaged
- together (or are in the same folder in files mode), a failure code from
- <code>u_init()</code> usually means that the data cannot be found. In this
- case, the data may not be installed properly, or the application may have
- failed to call <code>udata_setCommonData()</code> or
- <code>u_setDataDirectory()</code> which specify to ICU where it can find its
- data.</p>
-
- <p>Since <code>u_init()</code> will load only one or two data files, it
- cannot guarantee that all of the data that an application needs is available.
- It cannot check for all data files because the set of files is customizable,
- and some ICU services work without loading any data at all. An application
- should always check for error codes when opening ICU service objects (using
- <code>ucnv_open()</code>, <code>ucol_open()</code>, C++ constructors,
- etc.).</p>
-
- <h4>ICU 3.4 and later</h4>
-
- <p>ICU 3.4 self-initializes properly for multi-threaded use. It achieves this
- without performance penalty by hardcoding the core Unicode properties data,
- at the cost of some flexibility. (For details see Jitterbug 4497.)</p>
-
- <p><code>u_init()</code> can be used to check for data loading. It tries to
- load the converter alias table (<code>cnvalias.icu</code>).</p>
-
- <h4>ICU 2.6..3.2</h4>
-
- <p>These ICU versions require a call to <code>u_init()</code> before
- multi-threaded use. The services that are directly affected are those that
- don't have a service object and need to be fast: normalization and character
- properties.</p>
-
- <p><code>u_init()</code> loads and initializes the data files for
- normalization and character properties (<code>unorm.icu</code> and
- <code>uprops.icu</code>) and can therefore also be used to check for data
- loading.</p>
-
- <h4>ICU 2.4 and earlier</h4>
-
- <p>ICU 2.4 and earlier versions were not prepared for multithreaded use on
- multi-CPU platforms where the CPUs implement weak memory coherency. These
- CPUs include: Power4, Power5, Alpha, Itanium. <code>u_init()</code> was not
- defined yet.</p>
-
- <h4><a name="ImportantNotesHPUX" href="#ImportantNotesHPUX" id=
- "ImportantNotesHPUX">Using ICU in a Multithreaded Environment on
- HP-UX</a></h4>
-
- <p>When ICU is built with aCC on HP-UX, the <a
- href="http://h21007.www2.hp.com/portal/site/dspp/menuitem.863c3e4cbcdc3f3515b49c108973a801?ciid=eb08b3f1eee02110b3f1eee02110275d6e10RCRD">-AA</a>
- compiler flag is used. It is required in order to use the latest
- &lt;iostream&gt; API in a thread safe manner. This compiler flag affects the
- version of the C++ library being used. Your applications will also need to
- be compiled with -AA in order to use ICU.</p>
-
- <h4><a name="ImportantNotesSolaris" href="#ImportantNotesSolaris" id=
- "ImportantNotesSolaris">Using ICU in a Multithreaded Environment on
- Solaris</a></h4>
-
- <h5>Linking on Solaris</h5>
-
- <p>In order to avoid synchronization and threading issues, developers are
- <strong>suggested</strong> to strictly follow the compiling and linking
- guidelines for multithreaded applications, specified in the following
- SUn Solaris document available from Oracle. Most notably, pay strict attention to the
- following statements from Sun:</p>
-
- <blockquote>
- <p>To use libthread, specify -lthread before -lc on the ld command line, or
- last on the cc command line.</p>
-
- <p>To use libpthread, specify -lpthread before -lc on the ld command line,
- or last on the cc command line.</p>
- </blockquote>
-
- <p>Failure to do this may cause spurious lock conflicts, recursive mutex
- failure, and deadlock.</p>
-
- <p>Source: "<i>Multithreaded Programming Guide, Compiling and
- Debugging</i>", Sun Microsystems, 2002 <br />
- <a href=
- "https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html">https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html</a></p>
-
- <p>Note, a version of that chapter from a 2008 document update covering both Solaris 9
- and Solaris 10 is available here:<br />
- <a href=
- "http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html">http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html</a></p>
-
- <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id=
- "ImportantNotesWindows">Windows Platform</a></h3>
-
- <p>If you are building on the Windows platform, it is important that you
- understand a few of the following build details.</p>
-
- <h4>DLL directories and the PATH setting</h4>
-
- <p>As delivered, the International Components for Unicode build as several
- DLLs, which are placed in the "<i>&lt;ICU&gt;</i>\bin64" directory. You must
- add this directory to the PATH environment variable in your system, or any
- executables you build will not be able to access International Components for
- Unicode libraries. Alternatively, you can copy the DLL files into a directory
- already in your PATH, but we do not recommend this. You can wind up with
- multiple copies of the DLL and wind up using the wrong one.</p>
-
- <h4><a name="ImportantNotesWindowsPath" id=
- "ImportantNotesWindowsPath">Changing your PATH</a></h4>
-
- <p><strong>Windows 2000/XP and above</strong>: Use the System Icon in the Control
- Panel. Pick the "Advanced" tab. Select the "Environment Variables..."
- button. Select the variable PATH in the lower box, and select the lower
- "Edit..." button. In the "Variable Value" box, append the string
- ";<i>&lt;ICU&gt;</i>\bin64" to the end of the path string. If there is
- nothing there, just type in "<i>&lt;ICU&gt;</i>\bin64". Click the Set button,
- then the OK button.</p>
-
- <p>Note: When packaging a Windows application for distribution and
- installation on user systems, copies of the ICU DLLs should be included with
- the application, and installed for exclusive use by the application. This is
- the only way to insure that your application is running with the same version
- of ICU, built with exactly the same options, that you developed and tested
- with. Refer to Microsoft's guidelines on the usage of DLLs, or search for the
- phrase "DLL hell" on <a href=
- "http://msdn.microsoft.com/">msdn.microsoft.com</a>.</p>
-
- <h3><a name="ImportantNotesUNIX" href="#ImportantNotesUNIX" id=
- "ImportantNotesUNIX">UNIX Type Platform</a></h3>
-
- <p>If you are building on a UNIX platform, and if you are installing ICU in a
- non-standard location, you may need to add the location of your ICU libraries
- to your <strong>LD_LIBRARY_PATH</strong> or <strong>LIBPATH</strong>
- environment variable (or the equivalent runtime library path environment
- variable for your system). The ICU libraries may not link or load properly
- without doing this.</p>
-
- <p>Note that if you do not want to have to set this variable, you may instead
- use the --enable-rpath option at configuration time. This option will
- instruct the linker to always look for the libraries where they are
- installed. You will need to use the appropriate linker options when linking
- your own applications and libraries against ICU, too. Please refer to your
- system's linker manual for information about runtime paths. The use of rpath
- also means that when building a new version of ICU you should not have an
- older version installed in the same place as the new version's installation
- directory, as the older libraries will used during the build, instead of the
- new ones, likely leading to an incorrectly build ICU. This is the proper
- behavior of rpath.</p>
-
- <h2><a name="PlatformDependencies" href="#PlatformDependencies" id=
- "PlatformDependencies">Platform Dependencies</a></h2>
-
- <h3><a name="PlatformDependenciesNew" href="#PlatformDependenciesNew" id=
- "PlatformDependenciesNew">Porting To A New Platform</a></h3>
-
- <p>If you are using ICU's Makefiles to build ICU on a new platform, there are
- a few places where you will need to add or modify some files. If you need
- more help, you can always ask the <a href=
- "http://site.icu-project.org/contacts">icu-support mailing list</a>. Once
- you have finished porting ICU to a new platform, it is recommended that you
- contribute your changes back to ICU via the icu-support mailing list. This
- will make it easier for everyone to benefit from your work.</p>
-
- <h4>Data For a New Platform</h4>
-
- <p>For some people, it may not be necessary for completely build ICU. Most of
- the makefiles and build targets are for tools that are used for building
- ICU's data, and an application's data (when an application uses ICU resource
- bundles for its data).</p>
-
- <p>Data files can be built on a different platform when both platforms share
- the same endianness and the same charset family. This assertion does not
- include platform dependent DLLs/shared/static libraries. For details see the
- User Guide <a href="https://unicode-org.github.io/icu/userguide/icudata">ICU
- Data</a> chapter.</p>
-
- <p>ICU 3.6 removes the requirement that ICU be completely built in the native
- operating environment. It adds the icupkg tool which can be run on any
- platform to turn binary ICU data files from any one of the three formats into
- any one of the other data formats. This allows a application to use ICU data
- built anywhere to be used for any other target platform.</p>
-
- <p><strong>WARNING!</strong> Building ICU without running the tests is not
- recommended. The tests verify that ICU is safe to use. It is recommended that
- you try to completely port and test ICU before using the libraries for your
- own application.</p>
-
- <h4>Adapting Makefiles For a New Platform</h4>
-
- <p>Try to follow the build steps from the <a href="#HowToBuildUNIX">UNIX</a>
- build instructions. If the configure script fails, then you will need to
- modify some files. Here are the usual steps for porting to a new
- platform:<br />
- </p>
-
- <ol>
- <li>Create an mh file in icu/source/config/. You can use mh-linux or a
- similar mh file as your base configuration.</li>
-
- <li>Modify icu/source/aclocal.m4 to recognize your platform's mh file.</li>
-
- <li>Modify icu/source/configure.in to properly set your <b>platform</b> C
- Macro define.</li>
-
- <li>Run <a href="http://www.gnu.org/software/autoconf/">autoconf</a> in
- icu/source/ without any options. The autoconf tool is standard on most
- Linux systems.</li>
-
- <li>If you have any optimization options that you want to normally use, you
- can modify icu/source/runConfigureICU to specify those options for your
- platform.</li>
-
- <li>Build and test ICU on your platform. It is very important that you run
- the tests. If you don't run the tests, there is no guarentee that you have
- properly ported ICU.</li>
- </ol>
-
- <h3><a name="PlatformDependenciesImpl" href="#PlatformDependenciesImpl" id=
- "PlatformDependenciesImpl">Platform Dependent Implementations</a></h3>
-
- <p>The platform dependencies have been mostly isolated into the following
- files in the common library. This information can be useful if you are
- porting ICU to a new platform.</p>
-
- <ul>
- <li>
- <strong>unicode/platform.h.in</strong> (autoconf'ed platforms)<br />
- <strong>unicode/p<i>XXXX</i>.h</strong> (others: pwin32.h, ppalmos.h,
- ..): Platform-dependent typedefs and defines:<br />
- <br />
-
-
- <ul>
- <li>Generic types like UBool, int8_t, int16_t, int32_t, int64_t,
- uint64_t etc.</li>
-
- <li>U_EXPORT and U_IMPORT for specifying dynamic library import and
- export</li>
-
- <li>String handling support for the char16_t and wchar_t types.</li>
- </ul>
- <br />
- </li>
-
- <li>
- <strong>unicode/putil.h, putil.c</strong>: platform-dependent
- implementations of various functions that are platform dependent:<br />
- <br />
-
-
- <ul>
- <li>uprv_isNaN, uprv_isInfinite, uprv_getNaN and uprv_getInfinity for
- handling special floating point values.</li>
-
- <li>uprv_tzset, uprv_timezone, uprv_tzname and time for getting
- platform specific time and time zone information.</li>
-
- <li>u_getDataDirectory for getting the default data directory.</li>
-
- <li>uprv_getDefaultLocaleID for getting the default locale
- setting.</li>
-
- <li>uprv_getDefaultCodepage for getting the default codepage
- encoding.</li>
- </ul>
- <br />
- </li>
-
- <li>
- <strong>umutex.h, umutex.c</strong>: Code for doing synchronization in
- multithreaded applications. If you wish to use International Components
- for Unicode in a multithreaded application, you must provide a
- synchronization primitive that the classes can use to protect their
- global data against simultaneous modifications. We already supply working
- implementations for many platforms that ICU builds on.<br />
- <br />
- </li>
-
- <li><strong>umapfile.h, umapfile.c</strong>: functions for mapping or
- otherwise reading or loading files into memory. All access by ICU to data
- from files makes use of these functions.<br />
- <br />
- </li>
-
- <li>Using platform specific #ifdef macros are highly discouraged outside of
- the scope of these files. When the source code gets updated in the future,
- these #ifdef's can cause testing problems for your platform.</li>
- </ul>
+ <p>This readme has moved to the <a href="https://unicode-org.github.io/icu/userguide/icu4c/">ICU4C Readme</a>
+ section in the <a href="https://unicode-org.github.io/icu/">ICU User Guide</a>.</p>
<hr />
<p> Copyright &copy; 2016 and later: Unicode, Inc. and others. License &amp; terms of use:
<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
diff --git a/Build/source/libs/icu/icu-src/source/Doxyfile.in b/Build/source/libs/icu/icu-src/source/Doxyfile.in
index 7ced104ce80..d851b19e381 100644
--- a/Build/source/libs/icu/icu-src/source/Doxyfile.in
+++ b/Build/source/libs/icu/icu-src/source/Doxyfile.in
@@ -1677,7 +1677,7 @@ COMPACT_LATEX = NO
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.
-PAPER_TYPE = a4wide
+PAPER_TYPE = a4
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. The package can be specified just
diff --git a/Build/source/libs/icu/icu-src/source/aclocal.m4 b/Build/source/libs/icu/icu-src/source/aclocal.m4
index b5ee8a9d1e1..b75871aa141 100644
--- a/Build/source/libs/icu/icu-src/source/aclocal.m4
+++ b/Build/source/libs/icu/icu-src/source/aclocal.m4
@@ -12,6 +12,60 @@
# PARTICULAR PURPOSE.
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+# Check whether the given FLAG works with the current language's compiler
+# or gives an error. (Warnings, however, are ignored)
+#
+# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+# success/failure.
+#
+# If EXTRA-FLAGS is defined, it is added to the current language's default
+# flags (e.g. CFLAGS) when the check is done. The check is thus made with
+# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
+# force the compiler to issue an error when a bad flag is given.
+#
+# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 6
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+ _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+ AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+ [AS_VAR_SET(CACHEVAR,[yes])],
+ [AS_VAR_SET(CACHEVAR,[no])])
+ _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_VAR_IF(CACHEVAR,yes,
+ [m4_default([$2], :)],
+ [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS
+
dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
dnl serial 11 (pkg-config-0.29)
dnl
@@ -100,7 +154,7 @@ dnl Check to see whether a particular set of modules exists. Similar to
dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
dnl
dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-dnl only at the first occurence in configure.ac, so if the first place
+dnl only at the first occurrence in configure.ac, so if the first place
dnl it's called might be skipped (such as if it is within an "if", you
dnl have to call PKG_CHECK_EXISTS manually
AC_DEFUN([PKG_CHECK_EXISTS],
diff --git a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.Library.WarningSettings.ProjectConfiguration.props b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.Library.WarningSettings.ProjectConfiguration.props
index a00e2c43047..603788a9537 100644
--- a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.Library.WarningSettings.ProjectConfiguration.props
+++ b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.Library.WarningSettings.ProjectConfiguration.props
@@ -14,7 +14,7 @@
C4661 No suitable definition provided for explicit template instantiation request.
C4715 Not all control paths return a value.
C4706 Assignment within conditional expression.
- C4005 Macro redifintion.
+ C4005 Macro redefinition.
C4068 Unknown pragma.
C4267 Conversion from size_t to type, possible loss of data.
C4910 __declspec(dllexport) and extern are incompatible on an explicit instantiation.
diff --git a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props
index adee8f67191..5549a2b813a 100644
--- a/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props
+++ b/Build/source/libs/icu/icu-src/source/allinone/Build.Windows.PlatformToolset.props
@@ -56,4 +56,11 @@
<!-- For example: MSBuild complains that the common project creates "icuuc62.dll" rather than "common.dll". However, this is intentional. -->
<MSBuildWarningsAsMessages>MSB8012</MSBuildWarningsAsMessages>
</PropertyGroup>
+
+ <!-- This enables outputting the source code line when an error occurs (to make it easier to see what/where the issue is). -->
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <DiagnosticsFormat>Caret</DiagnosticsFormat>
+ </ClCompile>
+ </ItemDefinitionGroup>
</Project>
diff --git a/Build/source/libs/icu/icu-src/source/allinone/allinone.sln b/Build/source/libs/icu/icu-src/source/allinone/allinone.sln
index fbbec359e48..48de0977128 100644
--- a/Build/source/libs/icu/icu-src/source/allinone/allinone.sln
+++ b/Build/source/libs/icu/icu-src/source/allinone/allinone.sln
@@ -106,6 +106,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pkgdata", "..\tools\pkgdata
{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icuexportdata", "..\tools\icuexportdata\icuexportdata.vcxproj", "{C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0}
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}
+ EndProjectSection
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stubdata", "..\stubdata\stubdata.vcxproj", "{203EC78A-0531-43F0-A636-285439BDE025}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "toolutil", "..\tools\toolutil\toolutil.vcxproj", "{6B231032-3CB5-4EED-9210-810D666A23A0}"
@@ -470,6 +476,22 @@ Global
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.Build.0 = Release|Win32
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.ActiveCfg = Release|x64
{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.Build.0 = Release|x64
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Debug|ARM.ActiveCfg = Debug|ARM
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Debug|ARM.Build.0 = Debug|ARM
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Debug|ARM64.Build.0 = Debug|ARM64
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Debug|Win32.Build.0 = Debug|Win32
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Debug|x64.ActiveCfg = Debug|x64
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Debug|x64.Build.0 = Debug|x64
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Release|ARM.ActiveCfg = Release|ARM
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Release|ARM.Build.0 = Release|ARM
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Release|ARM64.ActiveCfg = Release|ARM64
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Release|ARM64.Build.0 = Release|ARM64
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Release|Win32.ActiveCfg = Release|Win32
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Release|Win32.Build.0 = Release|Win32
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Release|x64.ActiveCfg = Release|x64
+ {C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}.Release|x64.Build.0 = Release|x64
{203EC78A-0531-43F0-A636-285439BDE025}.Debug|ARM.ActiveCfg = Debug|ARM
{203EC78A-0531-43F0-A636-285439BDE025}.Debug|ARM.Build.0 = Debug|ARM
{203EC78A-0531-43F0-A636-285439BDE025}.Debug|ARM64.ActiveCfg = Debug|ARM64
diff --git a/Build/source/libs/icu/icu-src/source/common/BUILD b/Build/source/libs/icu/icu-src/source/common/BUILD
new file mode 100644
index 00000000000..e385d3b243f
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/common/BUILD
@@ -0,0 +1,1213 @@
+# © 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# This file defines Bazel targets for a subset of ICU4C "common" library header and source files.
+# The configuration of dependencies among targets is strongly assisted by the
+# file in depstest that maintains such information, at
+# icu4c/source/test/depstest/dependencies.txt .
+
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+# When compiling code in the `common` dir, the constant
+# `U_COMMON_IMPLEMENTATION` needs to be defined. See
+# https://unicode-org.github.io/icu/userguide/howtouseicu#c-with-your-own-build-system .
+
+# If linker errors occur, then this may be a sign that the dependencies were
+# not specified correctly. Use dependencies.txt in depstest for assistance. See
+# https://stackoverflow.com/q/66111709/2077918 .
+
+cc_library(
+ name = "headers",
+ hdrs = glob([
+ "unicode/*.h", # public
+ "*.h", # internal
+ ],
+ # Instead of using these checked-in files, our Bazel build process
+ # regenerates them and then uses the new versions.
+ # Same list of .h files as in icu4c/source/data/unidata/clean.sh.
+ exclude = ["norm2_nfc_data.h", "propname_data.h", "*_props_data.h"],
+ ),
+ # We need to add includes in order to preserve existing source files'
+ # include directives that use traditional paths, not paths relative to
+ # Bazel workspace:
+ # https://stackoverflow.com/a/65635893/2077918
+ includes = ["."],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "platform",
+ srcs = [
+ "cmemory.cpp",
+ "uobject.cpp",
+ "cstring.cpp",
+ "cwchar.cpp",
+ "uinvchar.cpp",
+ "charstr.cpp",
+ "unistr.cpp",
+ "appendable.cpp",
+ "stringpiece.cpp",
+ "ustrtrns.cpp",
+ "ustring.cpp",
+ "ustrfmt.cpp",
+ "utf_impl.cpp",
+ "putil.cpp",
+ "ucln_cmn.cpp",
+ "udataswp.cpp",
+ "umath.cpp",
+ "umutex.cpp",
+ "sharedobject.cpp",
+ "utrace.cpp",
+ ],
+ deps = [
+ ":headers",
+ # omit other deps b/c they are sys symbols
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+ linkopts = ["-ldl"],
+)
+
+cc_library(
+ name = "utrie",
+ srcs = ["utrie.cpp"],
+ deps = [":platform"],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "utrie2",
+ srcs = ["utrie2.cpp"],
+ deps = [":platform"],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "utrie2_builder",
+ srcs = ["utrie2_builder.cpp"],
+ deps = [
+ ":utrie",
+ ":utrie2",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ucptrie",
+ srcs = ["ucptrie.cpp"],
+ deps = [":platform"],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "umutablecptrie",
+ srcs = ["umutablecptrie.cpp"],
+ deps = [":ucptrie"],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "bytestrie",
+ srcs = ["bytestrie.cpp"],
+ deps = [":platform"],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "bytestriebuilder",
+ srcs = ["bytestriebuilder.cpp"],
+ deps = [
+ ":bytestrie",
+ ":stringtriebuilder",
+ ":sort",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "stringtriebuilder",
+ srcs = ["stringtriebuilder.cpp"],
+ deps = [
+ ":uhash",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uhash",
+ hdrs = [
+ "uhash.h",
+ ],
+ srcs = [
+ "uhash.cpp",
+ ],
+ deps = [
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "errorcode",
+ hdrs = [
+ ],
+ srcs = [
+ "errorcode.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":platform",
+ ":utypes",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "utypes",
+ srcs = [
+ "utypes.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uniset",
+ srcs = [
+ "uniset.cpp",
+ "unifilt.cpp",
+ "unisetspan.cpp",
+ "bmpset.cpp",
+ "util.cpp",
+ "unifunct.cpp",
+ "usetiter.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":patternprops",
+ ":uvector",
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "patternprops",
+ srcs = [
+ "patternprops.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "propsvec",
+ srcs = [
+ "propsvec.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":sort",
+ ":utrie2_builder",
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "propname",
+ srcs = [
+ "propname.cpp",
+ "propname_data.h",
+ ],
+ includes = ["."],
+ deps = [
+ ":bytestrie",
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+# Note: The cc_library target names "uvector32" and "uvector64" match the
+# dependencies.txt group names, but the filenames are "uvectr32.*"/"uvectr64.*".
+cc_library(
+ name = "uvector32",
+ srcs = [
+ "uvectr32.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uvector64",
+ srcs = [
+ "uvectr64.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "sort",
+ srcs = [
+ "uarrsort.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uvector",
+ srcs = [
+ "uvector.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":platform",
+ ":sort",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "breakiterator",
+ srcs = [
+ "brkiter.cpp",
+ "brkeng.cpp",
+ "dictbe.cpp",
+ "dictionarydata.cpp",
+ "filteredbrk.cpp",
+ "lstmbe.cpp",
+ "rbbi.cpp",
+ "rbbi_cache.cpp",
+ "rbbidata.cpp",
+ "rbbinode.cpp",
+ "rbbirb.cpp",
+ "rbbiscan.cpp",
+ "rbbisetb.cpp",
+ "rbbistbl.cpp",
+ "rbbitblb.cpp",
+ "ubrk.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":bytestrie",
+ ":headers",
+ ":normlzr",
+ ":resourcebundle",
+ ":schriter",
+ ":service_registration",
+ ":ucharstrie",
+ ":ucharstriebuilder",
+ ":uhash",
+ ":uniset_core",
+ ":uniset_props",
+ ":ustack",
+ ":utext",
+ ":utrie2_builder",
+ ":uvector32",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "bytesinkutil",
+ srcs = [
+ "bytesinkutil.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":bytestream",
+ ":edits",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "bytestream",
+ srcs = [
+ "bytestream.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "canonical_iterator",
+ srcs = [
+ "caniter.cpp",
+ ],
+ deps = [
+ ":normalizer2",
+ ":usetiter",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "characterproperties",
+ srcs = [
+ "characterproperties.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":emojiprops",
+ ":ucptrie",
+ ":umutablecptrie",
+ ":uniset_core",
+ ":uprops",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "chariter",
+ srcs = [
+ "chariter.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "edits",
+ srcs = [
+ "edits.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":icu_utility",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "filterednormalizer2",
+ srcs = [
+ "filterednormalizer2.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":normalizer2",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "hashtable",
+ srcs = [
+ "uhash_us.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":uhash",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "icu_utility",
+ srcs = [
+ "util.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":patternprops",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "loadednormalizer2",
+ srcs = [
+ "loadednormalizer2impl.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":normalizer2",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "locale_display_names",
+ srcs = [
+ "locdispnames.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":locresdata",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "locresdata",
+ srcs = [
+ "locresdata.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":resourcebundle",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "normlzr",
+ srcs = [
+ "normlzr.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":filterednormalizer2",
+ ":headers",
+ ":schriter",
+ ":uniset_props",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "parsepos",
+ srcs = [
+ "parsepos.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "resourcebundle",
+ srcs = [
+ "localebuilder.cpp",
+ "locavailable.cpp",
+ "locbased.cpp",
+ "locid.cpp",
+ "loclikely.cpp",
+ "locmap.cpp",
+ "resbund.cpp",
+ "resource.cpp",
+ "uloc.cpp",
+ "uloc_tag.cpp",
+ "uloc_keytype.cpp",
+ "uresbund.cpp",
+ "uresdata.cpp",
+ "wintz.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":bytesinkutil",
+ ":errorcode",
+ ":headers",
+ ":propname",
+ ":sort",
+ ":stringenumeration",
+ ":ucol_swp",
+ ":udata",
+ ":uhash",
+ ":uscript_props",
+ ":uvector",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "schriter",
+ srcs = [
+ "schriter.cpp",
+ "uchriter.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":chariter",
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "service_registration",
+ srcs = [
+ "locutil.cpp",
+ "serv.cpp",
+ "servlk.cpp",
+ "servlkf.cpp",
+ "servls.cpp",
+ "servnotf.cpp",
+ "servrbf.cpp",
+ "servslkf.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":hashtable",
+ ":headers",
+ ":locale_display_names",
+ ":resourcebundle",
+ ":uvector",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "stringenumeration",
+ srcs = [
+ "uenum.cpp",
+ "ustrenum.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ubidi_props",
+ srcs = [
+ "ubidi_props.cpp",
+ "ubidi_props_data.h",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":utrie2",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ucase",
+ srcs = [
+ "ucase.cpp",
+ "ucase_props_data.h",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":utrie2",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uchar",
+ srcs = [
+ "uchar.cpp",
+ "uchar_props_data.h",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":utrie2",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "emojiprops",
+ srcs = [
+ "emojiprops.cpp",
+ "emojiprops.h",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":ucharstrie",
+ ":ucharstrieiterator",
+ ":ucptrie",
+ ":udata",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ucharstrie",
+ srcs = [
+ "ucharstrie.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ucharstriebuilder",
+ srcs = [
+ "ucharstriebuilder.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":sort",
+ ":stringtriebuilder",
+ ":ucharstrie",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ucharstrieiterator",
+ srcs = [
+ "ucharstrieiterator.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":ucharstrie",
+ ":uvector32",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ucol_swp",
+ srcs = [
+ "ucol_swp.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":utrie_swap",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "udata",
+ srcs = [
+ "restrace.cpp",
+ "ucmndata.cpp",
+ "udata.cpp",
+ "udatamem.cpp",
+ "umapfile.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":icu_utility",
+ ":platform",
+ ":uhash",
+ "//icu4c/source/stubdata",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uiter",
+ srcs = [
+ "uiter.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ulist",
+ srcs = [
+ "ulist.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "unames",
+ srcs = [
+ "unames.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":uchar",
+ ":udata",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "unifiedcache",
+ srcs = [
+ "unifiedcache.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ":uhash",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uniset_core",
+ srcs = [
+ "bmpset.cpp",
+ "unifilt.cpp",
+ "unifunct.cpp",
+ "uniset.cpp",
+ "unisetspan.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":icu_utility",
+ ":patternprops",
+ ":uvector",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uniset_closure",
+ srcs = [
+ "uniset_closure.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":uniset_core",
+ ":unistr_case_locale",
+ ":unistr_titlecase_brkiter",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uniset_props",
+ srcs = [
+ "uniset_props.cpp",
+ "ruleiter.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":characterproperties",
+ ":headers",
+ ":parsepos",
+ ":propname",
+ ":resourcebundle",
+ ":unames",
+ ":uniset_core",
+ ":unistr_case",
+ ":uprops",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "unistr_case",
+ srcs = [
+ "unistr_case.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":ustring_case",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "unistr_case_locale",
+ srcs = [
+ "unistr_case_locale.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":unistr_case",
+ ":ustring_case_locale",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "unistr_titlecase_brkiter",
+ srcs = [
+ "unistr_titlecase_brkiter.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":ustr_titlecase_brkiter",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uprops",
+ srcs = [
+ "uprops.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":emojiprops",
+ ":loadednormalizer2",
+ ":normalizer2",
+ ":ubidi_props",
+ ":ucase",
+ ":uchar",
+ ":unistr_case",
+ ":ustring_case",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uscript_props",
+ srcs = [
+ "uscript_props.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uset",
+ srcs = [
+ "uset.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ":uniset_core",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uset_props",
+ srcs = [
+ "uset_props.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":uniset_closure",
+ ":uniset_core",
+ ":uniset_props",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "usetiter",
+ srcs = [
+ "usetiter.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":platform",
+ ":uniset_core",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ustack",
+ srcs = [
+ "ustack.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":uvector",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ustr_titlecase_brkiter",
+ srcs = [
+ "ustr_titlecase_brkiter.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":breakiterator",
+ ":headers",
+ ":ucase",
+ ":ustring_case_locale",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ustring_case",
+ srcs = [
+ "ustrcase.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":ucase",
+ ":uchar",
+ ":edits",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "ustring_case_locale",
+ srcs = [
+ "ustrcase_locale.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":resourcebundle",
+ ":ustring_case",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "utext",
+ srcs = [
+ "utext.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":ucase",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "utrie_swap",
+ srcs = [
+ "utrie_swap.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":udata",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
+
+# This target depends on a header file that contains NFC/NFD normalization data.
+# This header file is generated by a script (generate.sh) that invokes the gennorm2 binary.
+# See the Unicode update change log (changes.txt).
+cc_library(
+ name = "normalizer2",
+ srcs = [
+ "norm2_nfc_data.h", # generated by gennorm2
+ "normalizer2.cpp",
+ "normalizer2impl.cpp",
+ ],
+ includes = ["."],
+ hdrs = [
+ "normalizer2impl.h",
+ ],
+ deps = [
+ ":headers",
+ ],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
diff --git a/Build/source/libs/icu/icu-src/source/common/brkeng.cpp b/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
index 78492db6620..52e9c53621d 100644
--- a/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
@@ -25,6 +25,7 @@
#include "brkeng.h"
#include "cmemory.h"
#include "dictbe.h"
+#include "lstmbe.h"
#include "charstr.h"
#include "dictionarydata.h"
#include "mutex.h"
@@ -77,7 +78,9 @@ int32_t
UnhandledEngine::findBreaks( UText *text,
int32_t /* startPos */,
int32_t endPos,
- UVector32 &/*foundBreaks*/ ) const {
+ UVector32 &/*foundBreaks*/,
+ UErrorCode &status) const {
+ if (U_FAILURE(status)) return 0;
UChar32 c = utext_current32(text);
while((int32_t)utext_getNativeIndex(text) < endPos && fHandled->contains(c)) {
utext_next32(text); // TODO: recast loop to work with post-increment operations.
@@ -132,14 +135,13 @@ ICULanguageBreakFactory::getEngineFor(UChar32 c) {
static UMutex gBreakEngineMutex;
Mutex m(&gBreakEngineMutex);
- if (fEngines == NULL) {
- UStack *engines = new UStack(_deleteEngine, NULL, status);
- if (U_FAILURE(status) || engines == NULL) {
+ if (fEngines == nullptr) {
+ LocalPointer<UStack> engines(new UStack(_deleteEngine, nullptr, status), status);
+ if (U_FAILURE(status) ) {
// Note: no way to return error code to caller.
- delete engines;
- return NULL;
+ return nullptr;
}
- fEngines = engines;
+ fEngines = engines.orphan();
} else {
int32_t i = fEngines->size();
while (--i >= 0) {
@@ -152,10 +154,10 @@ ICULanguageBreakFactory::getEngineFor(UChar32 c) {
// We didn't find an engine. Create one.
lbe = loadEngineFor(c);
- if (lbe != NULL) {
+ if (lbe != nullptr) {
fEngines->push((void *)lbe, status);
}
- return lbe;
+ return U_SUCCESS(status) ? lbe : nullptr;
}
const LanguageBreakEngine *
@@ -163,9 +165,26 @@ ICULanguageBreakFactory::loadEngineFor(UChar32 c) {
UErrorCode status = U_ZERO_ERROR;
UScriptCode code = uscript_getScript(c, &status);
if (U_SUCCESS(status)) {
+ const LanguageBreakEngine *engine = nullptr;
+ // Try to use LSTM first
+ const LSTMData *data = CreateLSTMDataForScript(code, status);
+ if (U_SUCCESS(status)) {
+ if (data != nullptr) {
+ engine = CreateLSTMBreakEngine(code, data, status);
+ if (U_SUCCESS(status) && engine != nullptr) {
+ return engine;
+ }
+ if (engine != nullptr) {
+ delete engine;
+ engine = nullptr;
+ } else {
+ DeleteLSTMData(data);
+ }
+ }
+ }
+ status = U_ZERO_ERROR; // fallback to dictionary based
DictionaryMatcher *m = loadDictionaryMatcherFor(code);
if (m != NULL) {
- const LanguageBreakEngine *engine = NULL;
switch(code) {
case USCRIPT_THAI:
engine = new ThaiBreakEngine(m, status);
diff --git a/Build/source/libs/icu/icu-src/source/common/brkeng.h b/Build/source/libs/icu/icu-src/source/common/brkeng.h
index 155433b89a8..6843f1cc953 100644
--- a/Build/source/libs/icu/icu-src/source/common/brkeng.h
+++ b/Build/source/libs/icu/icu-src/source/common/brkeng.h
@@ -68,12 +68,14 @@ class LanguageBreakEngine : public UMemory {
* @param startPos The start of the run within the supplied text.
* @param endPos The end of the run within the supplied text.
* @param foundBreaks A Vector of int32_t to receive the breaks.
+ * @param status Information on any errors encountered.
* @return The number of breaks found.
*/
virtual int32_t findBreaks( UText *text,
int32_t startPos,
int32_t endPos,
- UVector32 &foundBreaks ) const = 0;
+ UVector32 &foundBreaks,
+ UErrorCode &status) const = 0;
};
@@ -174,7 +176,7 @@ class UnhandledEngine : public LanguageBreakEngine {
* @return true if this engine handles the particular character and break
* type.
*/
- virtual UBool handles(UChar32 c) const;
+ virtual UBool handles(UChar32 c) const override;
/**
* <p>Find any breaks within a run in the supplied text.</p>
@@ -185,12 +187,14 @@ class UnhandledEngine : public LanguageBreakEngine {
* @param startPos The start of the run within the supplied text.
* @param endPos The end of the run within the supplied text.
* @param foundBreaks An allocated C array of the breaks found, if any
+ * @param status Information on any errors encountered.
* @return The number of breaks found.
*/
virtual int32_t findBreaks( UText *text,
int32_t startPos,
int32_t endPos,
- UVector32 &foundBreaks ) const;
+ UVector32 &foundBreaks,
+ UErrorCode &status) const override;
/**
* <p>Tell the engine to handle a particular character and break type.</p>
@@ -243,7 +247,7 @@ class ICULanguageBreakFactory : public LanguageBreakFactory {
* sought.
* @return A LanguageBreakEngine with the desired characteristics, or 0.
*/
- virtual const LanguageBreakEngine *getEngineFor(UChar32 c);
+ virtual const LanguageBreakEngine *getEngineFor(UChar32 c) override;
protected:
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/brkiter.cpp b/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
index b9b6ca65cd4..8b228acf2c3 100644
--- a/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
@@ -234,7 +234,7 @@ class ICUBreakIteratorFactory : public ICUResourceBundleFactory {
public:
virtual ~ICUBreakIteratorFactory();
protected:
- virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* /*service*/, UErrorCode& status) const {
+ virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* /*service*/, UErrorCode& status) const override {
return BreakIterator::makeInstance(loc, kind, status);
}
};
@@ -254,11 +254,11 @@ public:
virtual ~ICUBreakIteratorService();
- virtual UObject* cloneInstance(UObject* instance) const {
+ virtual UObject* cloneInstance(UObject* instance) const override {
return ((BreakIterator*)instance)->clone();
}
- virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const {
+ virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const override {
LocaleKey& lkey = (LocaleKey&)key;
int32_t kind = lkey.kind();
Locale loc;
@@ -266,7 +266,7 @@ public:
return BreakIterator::makeInstance(loc, kind, status);
}
- virtual UBool isDefault() const {
+ virtual UBool isDefault() const override {
return countFactories() == 1;
}
};
diff --git a/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp b/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
index ec1ab7d8f50..82dad42ca5f 100644
--- a/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
@@ -343,13 +343,13 @@ BytesTrieBuilder::BTLinearMatchNode::BTLinearMatchNode(const char *bytes, int32_
static_cast<uint32_t>(hash)*37u + static_cast<uint32_t>(ustr_hashCharsN(bytes, len)));
}
-UBool
+bool
BytesTrieBuilder::BTLinearMatchNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!LinearMatchNode::operator==(other)) {
- return FALSE;
+ return false;
}
const BTLinearMatchNode &o=(const BTLinearMatchNode &)other;
return 0==uprv_memcmp(s, o.s, length);
@@ -474,31 +474,39 @@ BytesTrieBuilder::writeDeltaTo(int32_t jumpTarget) {
U_ASSERT(i>=0);
if(i<=BytesTrie::kMaxOneByteDelta) {
return write(i);
+ } else {
+ char intBytes[5];
+ return write(intBytes, internalEncodeDelta(i, intBytes));
}
- char intBytes[5];
- int32_t length;
+}
+
+int32_t
+BytesTrieBuilder::internalEncodeDelta(int32_t i, char intBytes[]) {
+ U_ASSERT(i>=0);
+ if(i<=BytesTrie::kMaxOneByteDelta) {
+ intBytes[0]=(char)i;
+ return 1;
+ }
+ int32_t length=1;
if(i<=BytesTrie::kMaxTwoByteDelta) {
intBytes[0]=(char)(BytesTrie::kMinTwoByteDeltaLead+(i>>8));
- length=1;
} else {
if(i<=BytesTrie::kMaxThreeByteDelta) {
intBytes[0]=(char)(BytesTrie::kMinThreeByteDeltaLead+(i>>16));
- length=2;
} else {
if(i<=0xffffff) {
intBytes[0]=(char)BytesTrie::kFourByteDeltaLead;
- length=3;
} else {
intBytes[0]=(char)BytesTrie::kFiveByteDeltaLead;
intBytes[1]=(char)(i>>24);
- length=4;
+ length=2;
}
- intBytes[1]=(char)(i>>16);
+ intBytes[length++]=(char)(i>>16);
}
- intBytes[1]=(char)(i>>8);
+ intBytes[length++]=(char)(i>>8);
}
intBytes[length++]=(char)i;
- return write(intBytes, length);
+ return length;
}
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/common/caniter.cpp b/Build/source/libs/icu/icu-src/source/common/caniter.cpp
index b28acfc84ee..a2083afde3c 100644
--- a/Build/source/libs/icu/icu-src/source/common/caniter.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/caniter.cpp
@@ -208,10 +208,10 @@ void CanonicalIterator::setSource(const UnicodeString &newSource, UErrorCode &st
goto CleanPartialInitialization;
}
- // i should initialy be the number of code units at the
+ // i should initially be the number of code units at the
// start of the string
i = U16_LENGTH(source.char32At(0));
- //int32_t i = 1;
+ // int32_t i = 1;
// find the segments
// This code iterates through the source string and
// extracts segments that end up on a codepoint that
@@ -494,7 +494,7 @@ Hashtable *CanonicalIterator::getEquivalents2(Hashtable *fillinResult, const UCh
/**
* See if the decomposition of cp2 is at segment starting at segmentPos
- * (with canonical rearrangment!)
+ * (with canonical rearrangement!)
* If so, take the remainder, and return the equivalents
*/
Hashtable *CanonicalIterator::extract(Hashtable *fillinResult, UChar32 comp, const UChar *segment, int32_t segLen, int32_t segmentPos, UErrorCode &status) {
diff --git a/Build/source/libs/icu/icu-src/source/common/characterproperties.cpp b/Build/source/libs/icu/icu-src/source/common/characterproperties.cpp
index 7b50a4e2051..a84996b47c3 100644
--- a/Build/source/libs/icu/icu-src/source/common/characterproperties.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/characterproperties.cpp
@@ -14,6 +14,7 @@
#include "unicode/uscript.h"
#include "unicode/uset.h"
#include "cmemory.h"
+#include "emojiprops.h"
#include "mutex.h"
#include "normalizer2impl.h"
#include "uassert.h"
@@ -170,6 +171,13 @@ void U_CALLCONV initInclusion(UPropertySource src, UErrorCode &errorCode) {
case UPROPS_SRC_VO:
uprops_addPropertyStarts((UPropertySource)src, &sa, &errorCode);
break;
+ case UPROPS_SRC_EMOJI: {
+ const icu::EmojiProps *ep = icu::EmojiProps::getSingleton(errorCode);
+ if (U_SUCCESS(errorCode)) {
+ ep->addPropertyStarts(&sa, errorCode);
+ }
+ break;
+ }
default:
errorCode = U_INTERNAL_PROGRAM_ERROR;
break;
@@ -268,6 +276,26 @@ UnicodeSet *makeSet(UProperty property, UErrorCode &errorCode) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
}
+ if (UCHAR_BASIC_EMOJI <= property && property <= UCHAR_RGI_EMOJI) {
+ // property of strings
+ const icu::EmojiProps *ep = icu::EmojiProps::getSingleton(errorCode);
+ if (U_FAILURE(errorCode)) { return nullptr; }
+ USetAdder sa = {
+ (USet *)set.getAlias(),
+ _set_add,
+ _set_addRange,
+ _set_addString,
+ nullptr, // don't need remove()
+ nullptr // don't need removeRange()
+ };
+ ep->addStrings(&sa, property, errorCode);
+ if (property != UCHAR_BASIC_EMOJI && property != UCHAR_RGI_EMOJI) {
+ // property of _only_ strings
+ set->freeze();
+ return set.orphan();
+ }
+ }
+
const UnicodeSet *inclusions =
icu::CharacterProperties::getInclusionsForProperty(property, errorCode);
if (U_FAILURE(errorCode)) { return nullptr; }
diff --git a/Build/source/libs/icu/icu-src/source/common/charstr.cpp b/Build/source/libs/icu/icu-src/source/common/charstr.cpp
index 318a185b3f1..c35622882c4 100644
--- a/Build/source/libs/icu/icu-src/source/common/charstr.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/charstr.cpp
@@ -14,6 +14,8 @@
* created by: Markus W. Scherer
*/
+#include <cstdlib>
+
#include "unicode/utypes.h"
#include "unicode/putil.h"
#include "charstr.h"
@@ -141,6 +143,38 @@ CharString &CharString::append(const char *s, int32_t sLength, UErrorCode &error
return *this;
}
+CharString &CharString::appendNumber(int32_t number, UErrorCode &status) {
+ if (number < 0) {
+ this->append('-', status);
+ if (U_FAILURE(status)) {
+ return *this;
+ }
+ }
+
+ if (number == 0) {
+ this->append('0', status);
+ return *this;
+ }
+
+ int32_t numLen = 0;
+ while (number != 0) {
+ int32_t residue = number % 10;
+ number /= 10;
+ this->append(std::abs(residue) + '0', status);
+ numLen++;
+ if (U_FAILURE(status)) {
+ return *this;
+ }
+ }
+
+ int32_t start = this->length() - numLen, end = this->length() - 1;
+ while(start < end) {
+ std::swap(this->data()[start++], this->data()[end--]);
+ }
+
+ return *this;
+}
+
char *CharString::getAppendBuffer(int32_t minCapacity,
int32_t desiredCapacityHint,
int32_t &resultCapacity,
diff --git a/Build/source/libs/icu/icu-src/source/common/charstr.h b/Build/source/libs/icu/icu-src/source/common/charstr.h
index 6619faac618..175acd1c0a2 100644
--- a/Build/source/libs/icu/icu-src/source/common/charstr.h
+++ b/Build/source/libs/icu/icu-src/source/common/charstr.h
@@ -127,6 +127,9 @@ public:
return append(s.data(), s.length(), errorCode);
}
CharString &append(const char *s, int32_t sLength, UErrorCode &status);
+
+ CharString &appendNumber(int32_t number, UErrorCode &status);
+
/**
* Returns a writable buffer for appending and writes the buffer's capacity to
* resultCapacity. Guarantees resultCapacity>=minCapacity if U_SUCCESS().
diff --git a/Build/source/libs/icu/icu-src/source/common/cmemory.h b/Build/source/libs/icu/icu-src/source/common/cmemory.h
index a9d9424b4e2..f03b7dcce6b 100644
--- a/Build/source/libs/icu/icu-src/source/common/cmemory.h
+++ b/Build/source/libs/icu/icu-src/source/common/cmemory.h
@@ -31,14 +31,63 @@
#include <stddef.h>
#include <string.h>
#include "unicode/localpointer.h"
+#include "uassert.h"
#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
#include <stdio.h>
#endif
-
-#define uprv_memcpy(dst, src, size) U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size)
-#define uprv_memmove(dst, src, size) U_STANDARD_CPP_NAMESPACE memmove(dst, src, size)
+// uprv_memcpy and uprv_memmove
+#if defined(__clang__)
+#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
+ /* Suppress warnings about addresses that will never be NULL */ \
+ _Pragma("clang diagnostic push") \
+ _Pragma("clang diagnostic ignored \"-Waddress\"") \
+ U_ASSERT(dst != NULL); \
+ U_ASSERT(src != NULL); \
+ _Pragma("clang diagnostic pop") \
+ U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
+} UPRV_BLOCK_MACRO_END
+#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
+ /* Suppress warnings about addresses that will never be NULL */ \
+ _Pragma("clang diagnostic push") \
+ _Pragma("clang diagnostic ignored \"-Waddress\"") \
+ U_ASSERT(dst != NULL); \
+ U_ASSERT(src != NULL); \
+ _Pragma("clang diagnostic pop") \
+ U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \
+} UPRV_BLOCK_MACRO_END
+#elif defined(__GNUC__)
+#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
+ /* Suppress warnings about addresses that will never be NULL */ \
+ _Pragma("GCC diagnostic push") \
+ _Pragma("GCC diagnostic ignored \"-Waddress\"") \
+ U_ASSERT(dst != NULL); \
+ U_ASSERT(src != NULL); \
+ _Pragma("GCC diagnostic pop") \
+ U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
+} UPRV_BLOCK_MACRO_END
+#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
+ /* Suppress warnings about addresses that will never be NULL */ \
+ _Pragma("GCC diagnostic push") \
+ _Pragma("GCC diagnostic ignored \"-Waddress\"") \
+ U_ASSERT(dst != NULL); \
+ U_ASSERT(src != NULL); \
+ _Pragma("GCC diagnostic pop") \
+ U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \
+} UPRV_BLOCK_MACRO_END
+#else
+#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
+ U_ASSERT(dst != NULL); \
+ U_ASSERT(src != NULL); \
+ U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \
+} UPRV_BLOCK_MACRO_END
+#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \
+ U_ASSERT(dst != NULL); \
+ U_ASSERT(src != NULL); \
+ U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \
+} UPRV_BLOCK_MACRO_END
+#endif
/**
* \def UPRV_LENGTHOF
diff --git a/Build/source/libs/icu/icu-src/source/common/common.vcxproj b/Build/source/libs/icu/icu-src/source/common/common.vcxproj
index d7f668ea9d8..fdc0e8d71fd 100644
--- a/Build/source/libs/icu/icu-src/source/common/common.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/common/common.vcxproj
@@ -58,7 +58,7 @@
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
<Link>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuuc68d.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuuc70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuucd.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuucd.lib</ImportLibrary>
</Link>
@@ -70,7 +70,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
</ClCompile>
<Link>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuuc68.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuuc70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuuc.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuuc.lib</ImportLibrary>
</Link>
@@ -87,6 +87,7 @@
<ClCompile Include="brkeng.cpp" />
<ClCompile Include="brkiter.cpp" />
<ClCompile Include="dictbe.cpp" />
+ <ClCompile Include="lstmbe.cpp" />
<ClCompile Include="pluralmap.cpp" />
<ClCompile Include="rbbi.cpp" />
<ClCompile Include="rbbidata.cpp" />
@@ -203,6 +204,7 @@
<ClCompile Include="ucase.cpp" />
<ClCompile Include="uchar.cpp" />
<ClCompile Include="characterproperties.cpp" />
+ <ClCompile Include="emojiprops.cpp" />
<ClCompile Include="unames.cpp" />
<ClCompile Include="unifiedcache.cpp" />
<ClCompile Include="unifilt.cpp" />
@@ -279,6 +281,7 @@
<ClInclude Include="ubidiimp.h" />
<ClInclude Include="brkeng.h" />
<ClInclude Include="dictbe.h" />
+ <ClInclude Include="lstmbe.h" />
<ClInclude Include="rbbidata.h" />
<ClInclude Include="rbbinode.h" />
<ClInclude Include="rbbirb.h" />
@@ -363,6 +366,7 @@
<ClInclude Include="patternprops.h" />
<ClInclude Include="propname.h" />
<ClInclude Include="ruleiter.h" />
+ <ClInclude Include="emojiprops.h" />
<ClInclude Include="ucase.h" />
<ClInclude Include="ulayout_props.h" />
<ClInclude Include="unisetspan.h" />
diff --git a/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters b/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
index f1ba90109ce..38bc0c1b869 100644
--- a/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
+++ b/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
@@ -73,6 +73,9 @@
<ClCompile Include="dictbe.cpp">
<Filter>break iteration</Filter>
</ClCompile>
+ <ClCompile Include="lstmbe.cpp">
+ <Filter>break iteration</Filter>
+ </ClCompile>
<ClCompile Include="rbbi.cpp">
<Filter>break iteration</Filter>
</ClCompile>
@@ -409,6 +412,9 @@
<ClCompile Include="characterproperties.cpp">
<Filter>properties &amp; sets</Filter>
</ClCompile>
+ <ClCompile Include="emojiprops.cpp">
+ <Filter>properties &amp; sets</Filter>
+ </ClCompile>
<ClCompile Include="propname.cpp">
<Filter>properties &amp; sets</Filter>
</ClCompile>
@@ -651,6 +657,9 @@
<ClInclude Include="dictbe.h">
<Filter>break iteration</Filter>
</ClInclude>
+ <ClInclude Include="lstmbe.h">
+ <Filter>break iteration</Filter>
+ </ClInclude>
<ClInclude Include="rbbidata.h">
<Filter>break iteration</Filter>
</ClInclude>
@@ -888,6 +897,9 @@
<ClInclude Include="ruleiter.h">
<Filter>properties &amp; sets</Filter>
</ClInclude>
+ <ClInclude Include="emojiprops.h">
+ <Filter>properties &amp; sets</Filter>
+ </ClInclude>
<ClInclude Include="ucase.h">
<Filter>properties &amp; sets</Filter>
</ClInclude>
diff --git a/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj b/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
index a57917292a7..09743e6babc 100644
--- a/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
@@ -125,7 +125,7 @@
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<AdditionalDependencies>vccorlib.lib;msvcrt.lib;vcruntime.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuuc68.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuuc70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuuc.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuuc.lib</ImportLibrary>
</Link>
@@ -148,7 +148,7 @@
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>vccorlibd.lib;msvcrtd.lib;vcruntimed.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuuc68d.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuuc70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuucd.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuucd.lib</ImportLibrary>
</Link>
@@ -221,6 +221,7 @@
<ClCompile Include="brkeng.cpp" />
<ClCompile Include="brkiter.cpp" />
<ClCompile Include="dictbe.cpp" />
+ <ClCompile Include="lstmbe.cpp" />
<ClCompile Include="pluralmap.cpp" />
<ClCompile Include="rbbi.cpp" />
<ClCompile Include="rbbidata.cpp" />
@@ -337,6 +338,7 @@
<ClCompile Include="ucase.cpp" />
<ClCompile Include="uchar.cpp" />
<ClCompile Include="characterproperties.cpp" />
+ <ClCompile Include="emojiprops.cpp" />
<ClCompile Include="unames.cpp" />
<ClCompile Include="unifiedcache.cpp" />
<ClCompile Include="unifilt.cpp" />
@@ -414,6 +416,7 @@
<ClInclude Include="ubidiimp.h" />
<ClInclude Include="brkeng.h" />
<ClInclude Include="dictbe.h" />
+ <ClInclude Include="lstmbe.h" />
<ClInclude Include="rbbidata.h" />
<ClInclude Include="rbbinode.h" />
<ClInclude Include="rbbirb.h" />
@@ -498,6 +501,7 @@
<ClInclude Include="patternprops.h" />
<ClInclude Include="propname.h" />
<ClInclude Include="ruleiter.h" />
+ <ClInclude Include="emojiprops.h" />
<ClInclude Include="ucase.h" />
<ClInclude Include="ulayout_props.h" />
<ClInclude Include="unisetspan.h" />
diff --git a/Build/source/libs/icu/icu-src/source/common/cstr.h b/Build/source/libs/icu/icu-src/source/common/cstr.h
index c33f487ea12..c7a77a0ae5a 100644
--- a/Build/source/libs/icu/icu-src/source/common/cstr.h
+++ b/Build/source/libs/icu/icu-src/source/common/cstr.h
@@ -28,7 +28,7 @@
* default code page conversion, which will do the best job possible,
* but may be lossy, depending on the platform.
*
- * If no other conversion is available, use invariant conversion and substitue
+ * If no other conversion is available, use invariant conversion and substitute
* '?' for non-invariant characters.
*
* Example Usage:
diff --git a/Build/source/libs/icu/icu-src/source/common/dictbe.cpp b/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
index b42cdf03fae..4d158e3226d 100644
--- a/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
@@ -47,7 +47,9 @@ int32_t
DictionaryBreakEngine::findBreaks( UText *text,
int32_t startPos,
int32_t endPos,
- UVector32 &foundBreaks ) const {
+ UVector32 &foundBreaks,
+ UErrorCode& status) const {
+ if (U_FAILURE(status)) return 0;
(void)startPos; // TODO: remove this param?
int32_t result = 0;
@@ -66,7 +68,7 @@ DictionaryBreakEngine::findBreaks( UText *text,
}
rangeStart = start;
rangeEnd = current;
- result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks);
+ result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks, status);
utext_setNativeIndex(text, current);
return result;
@@ -179,7 +181,7 @@ static const int32_t THAI_ROOT_COMBINE_THRESHOLD = 3;
// dictionary word, with a preceding word
static const int32_t THAI_PREFIX_COMBINE_THRESHOLD = 3;
-// Ellision character
+// Elision character
static const int32_t THAI_PAIYANNOI = 0x0E2F;
// Repeat character
@@ -227,7 +229,9 @@ int32_t
ThaiBreakEngine::divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const {
+ UVector32 &foundBreaks,
+ UErrorCode& status) const {
+ if (U_FAILURE(status)) return 0;
utext_setNativeIndex(text, rangeStart);
utext_moveIndex32(text, THAI_MIN_WORD_SPAN);
if (utext_getNativeIndex(text) >= rangeEnd) {
@@ -240,7 +244,6 @@ ThaiBreakEngine::divideUpDictionaryRange( UText *text,
int32_t cpWordLength = 0; // Word Length in Code Points.
int32_t cuWordLength = 0; // Word length in code units (UText native indexing)
int32_t current;
- UErrorCode status = U_ZERO_ERROR;
PossibleWord words[THAI_LOOKAHEAD];
utext_setNativeIndex(text, rangeStart);
@@ -265,13 +268,9 @@ ThaiBreakEngine::divideUpDictionaryRange( UText *text,
goto foundBest;
}
do {
- int32_t wordsMatched = 1;
if (words[(wordsFound + 1) % THAI_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) > 0) {
- if (wordsMatched < 2) {
- // Followed by another dictionary word; mark first word as a good candidate
- words[wordsFound%THAI_LOOKAHEAD].markCurrent();
- wordsMatched = 2;
- }
+ // Followed by another dictionary word; mark first word as a good candidate
+ words[wordsFound%THAI_LOOKAHEAD].markCurrent();
// If we're already at the end of the range, we're done
if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
@@ -469,7 +468,9 @@ int32_t
LaoBreakEngine::divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const {
+ UVector32 &foundBreaks,
+ UErrorCode& status) const {
+ if (U_FAILURE(status)) return 0;
if ((rangeEnd - rangeStart) < LAO_MIN_WORD_SPAN) {
return 0; // Not enough characters for two words
}
@@ -478,11 +479,10 @@ LaoBreakEngine::divideUpDictionaryRange( UText *text,
int32_t cpWordLength = 0;
int32_t cuWordLength = 0;
int32_t current;
- UErrorCode status = U_ZERO_ERROR;
PossibleWord words[LAO_LOOKAHEAD];
-
+
utext_setNativeIndex(text, rangeStart);
-
+
while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) {
cuWordLength = 0;
cpWordLength = 0;
@@ -503,13 +503,9 @@ LaoBreakEngine::divideUpDictionaryRange( UText *text,
goto foundBest;
}
do {
- int32_t wordsMatched = 1;
if (words[(wordsFound + 1) % LAO_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) > 0) {
- if (wordsMatched < 2) {
- // Followed by another dictionary word; mark first word as a good candidate
- words[wordsFound%LAO_LOOKAHEAD].markCurrent();
- wordsMatched = 2;
- }
+ // Followed by another dictionary word; mark first word as a good candidate
+ words[wordsFound%LAO_LOOKAHEAD].markCurrent();
// If we're already at the end of the range, we're done
if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
@@ -535,7 +531,7 @@ foundBest:
}
// We come here after having either found a word or not. We look ahead to the
- // next word. If it's not a dictionary word, we will combine it withe the word we
+ // next word. If it's not a dictionary word, we will combine it with the word we
// just found (if there is one), but only if the preceding word does not exceed
// the threshold.
// The text iterator should now be positioned at the end of the word we found.
@@ -665,7 +661,9 @@ int32_t
BurmeseBreakEngine::divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const {
+ UVector32 &foundBreaks,
+ UErrorCode& status ) const {
+ if (U_FAILURE(status)) return 0;
if ((rangeEnd - rangeStart) < BURMESE_MIN_WORD_SPAN) {
return 0; // Not enough characters for two words
}
@@ -674,11 +672,10 @@ BurmeseBreakEngine::divideUpDictionaryRange( UText *text,
int32_t cpWordLength = 0;
int32_t cuWordLength = 0;
int32_t current;
- UErrorCode status = U_ZERO_ERROR;
PossibleWord words[BURMESE_LOOKAHEAD];
-
+
utext_setNativeIndex(text, rangeStart);
-
+
while (U_SUCCESS(status) && (current = (int32_t)utext_getNativeIndex(text)) < rangeEnd) {
cuWordLength = 0;
cpWordLength = 0;
@@ -699,13 +696,9 @@ BurmeseBreakEngine::divideUpDictionaryRange( UText *text,
goto foundBest;
}
do {
- int32_t wordsMatched = 1;
if (words[(wordsFound + 1) % BURMESE_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) > 0) {
- if (wordsMatched < 2) {
- // Followed by another dictionary word; mark first word as a good candidate
- words[wordsFound%BURMESE_LOOKAHEAD].markCurrent();
- wordsMatched = 2;
- }
+ // Followed by another dictionary word; mark first word as a good candidate
+ words[wordsFound%BURMESE_LOOKAHEAD].markCurrent();
// If we're already at the end of the range, we're done
if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
@@ -731,7 +724,7 @@ foundBest:
}
// We come here after having either found a word or not. We look ahead to the
- // next word. If it's not a dictionary word, we will combine it withe the word we
+ // next word. If it's not a dictionary word, we will combine it with the word we
// just found (if there is one), but only if the preceding word does not exceed
// the threshold.
// The text iterator should now be positioned at the end of the word we found.
@@ -873,7 +866,9 @@ int32_t
KhmerBreakEngine::divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const {
+ UVector32 &foundBreaks,
+ UErrorCode& status ) const {
+ if (U_FAILURE(status)) return 0;
if ((rangeEnd - rangeStart) < KHMER_MIN_WORD_SPAN) {
return 0; // Not enough characters for two words
}
@@ -882,7 +877,6 @@ KhmerBreakEngine::divideUpDictionaryRange( UText *text,
int32_t cpWordLength = 0;
int32_t cuWordLength = 0;
int32_t current;
- UErrorCode status = U_ZERO_ERROR;
PossibleWord words[KHMER_LOOKAHEAD];
utext_setNativeIndex(text, rangeStart);
@@ -908,13 +902,9 @@ KhmerBreakEngine::divideUpDictionaryRange( UText *text,
goto foundBest;
}
do {
- int32_t wordsMatched = 1;
if (words[(wordsFound + 1) % KHMER_LOOKAHEAD].candidates(text, fDictionary, rangeEnd) > 0) {
- if (wordsMatched < 2) {
- // Followed by another dictionary word; mark first word as a good candidate
- words[wordsFound % KHMER_LOOKAHEAD].markCurrent();
- wordsMatched = 2;
- }
+ // Followed by another dictionary word; mark first word as a good candidate
+ words[wordsFound % KHMER_LOOKAHEAD].markCurrent();
// If we're already at the end of the range, we're done
if ((int32_t)utext_getNativeIndex(text) >= rangeEnd) {
@@ -1126,7 +1116,9 @@ int32_t
CjkBreakEngine::divideUpDictionaryRange( UText *inText,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const {
+ UVector32 &foundBreaks,
+ UErrorCode& status) const {
+ if (U_FAILURE(status)) return 0;
if (rangeStart >= rangeEnd) {
return 0;
}
@@ -1138,9 +1130,6 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText,
// If NULL then mapping is 1:1
LocalPointer<UVector32> inputMap;
- UErrorCode status = U_ZERO_ERROR;
-
-
// if UText has the input string as one contiguous UTF-16 chunk
if ((inText->providerProperties & utext_i32_flag(UTEXT_PROVIDER_STABLE_CHUNKS)) &&
inText->chunkNativeStart <= rangeStart &&
diff --git a/Build/source/libs/icu/icu-src/source/common/dictbe.h b/Build/source/libs/icu/icu-src/source/common/dictbe.h
index 4ea676fc716..4e70ed38171 100644
--- a/Build/source/libs/icu/icu-src/source/common/dictbe.h
+++ b/Build/source/libs/icu/icu-src/source/common/dictbe.h
@@ -62,23 +62,25 @@ class DictionaryBreakEngine : public LanguageBreakEngine {
* @return true if this engine handles the particular character and break
* type.
*/
- virtual UBool handles(UChar32 c) const;
+ virtual UBool handles(UChar32 c) const override;
/**
* <p>Find any breaks within a run in the supplied text.</p>
*
* @param text A UText representing the text. The iterator is left at
- * the end of the run of characters which the engine is capable of handling
+ * the end of the run of characters which the engine is capable of handling
* that starts from the first character in the range.
* @param startPos The start of the run within the supplied text.
* @param endPos The end of the run within the supplied text.
* @param foundBreaks vector of int32_t to receive the break positions
+ * @param status Information on any errors encountered.
* @return The number of breaks found.
*/
virtual int32_t findBreaks( UText *text,
int32_t startPos,
int32_t endPos,
- UVector32 &foundBreaks ) const;
+ UVector32 &foundBreaks,
+ UErrorCode& status ) const override;
protected:
@@ -96,12 +98,14 @@ class DictionaryBreakEngine : public LanguageBreakEngine {
* @param rangeStart The start of the range of dictionary characters
* @param rangeEnd The end of the range of dictionary characters
* @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param status Information on any errors encountered.
* @return The number of breaks found
*/
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const = 0;
+ UVector32 &foundBreaks,
+ UErrorCode& status) const = 0;
};
@@ -153,12 +157,14 @@ class ThaiBreakEngine : public DictionaryBreakEngine {
* @param rangeStart The start of the range of dictionary characters
* @param rangeEnd The end of the range of dictionary characters
* @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param status Information on any errors encountered.
* @return The number of breaks found
*/
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const;
+ UVector32 &foundBreaks,
+ UErrorCode& status) const override;
};
@@ -209,127 +215,133 @@ class LaoBreakEngine : public DictionaryBreakEngine {
* @param rangeStart The start of the range of dictionary characters
* @param rangeEnd The end of the range of dictionary characters
* @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param status Information on any errors encountered.
* @return The number of breaks found
*/
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const;
+ UVector32 &foundBreaks,
+ UErrorCode& status) const override;
+
+};
+
+/*******************************************************************
+ * BurmeseBreakEngine
+ */
+
+/**
+ * <p>BurmeseBreakEngine is a kind of DictionaryBreakEngine that uses a
+ * DictionaryMatcher and heuristics to determine Burmese-specific breaks.</p>
+ *
+ * <p>After it is constructed a BurmeseBreakEngine may be shared between
+ * threads without synchronization.</p>
+ */
+class BurmeseBreakEngine : public DictionaryBreakEngine {
+ private:
+ /**
+ * The set of characters handled by this engine
+ * @internal
+ */
+
+ UnicodeSet fBurmeseWordSet;
+ UnicodeSet fEndWordSet;
+ UnicodeSet fBeginWordSet;
+ UnicodeSet fMarkSet;
+ DictionaryMatcher *fDictionary;
+
+ public:
+
+ /**
+ * <p>Default constructor.</p>
+ *
+ * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
+ * engine is deleted.
+ */
+ BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status);
+
+ /**
+ * <p>Virtual destructor.</p>
+ */
+ virtual ~BurmeseBreakEngine();
+
+ protected:
+ /**
+ * <p>Divide up a range of known dictionary characters.</p>
+ *
+ * @param text A UText representing the text
+ * @param rangeStart The start of the range of dictionary characters
+ * @param rangeEnd The end of the range of dictionary characters
+ * @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param status Information on any errors encountered.
+ * @return The number of breaks found
+ */
+ virtual int32_t divideUpDictionaryRange( UText *text,
+ int32_t rangeStart,
+ int32_t rangeEnd,
+ UVector32 &foundBreaks,
+ UErrorCode& status) const override;
+
+};
+
+/*******************************************************************
+ * KhmerBreakEngine
+ */
+
+/**
+ * <p>KhmerBreakEngine is a kind of DictionaryBreakEngine that uses a
+ * DictionaryMatcher and heuristics to determine Khmer-specific breaks.</p>
+ *
+ * <p>After it is constructed a KhmerBreakEngine may be shared between
+ * threads without synchronization.</p>
+ */
+class KhmerBreakEngine : public DictionaryBreakEngine {
+ private:
+ /**
+ * The set of characters handled by this engine
+ * @internal
+ */
+
+ UnicodeSet fKhmerWordSet;
+ UnicodeSet fEndWordSet;
+ UnicodeSet fBeginWordSet;
+ UnicodeSet fMarkSet;
+ DictionaryMatcher *fDictionary;
+
+ public:
+
+ /**
+ * <p>Default constructor.</p>
+ *
+ * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
+ * engine is deleted.
+ */
+ KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status);
+
+ /**
+ * <p>Virtual destructor.</p>
+ */
+ virtual ~KhmerBreakEngine();
+
+ protected:
+ /**
+ * <p>Divide up a range of known dictionary characters.</p>
+ *
+ * @param text A UText representing the text
+ * @param rangeStart The start of the range of dictionary characters
+ * @param rangeEnd The end of the range of dictionary characters
+ * @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param status Information on any errors encountered.
+ * @return The number of breaks found
+ */
+ virtual int32_t divideUpDictionaryRange( UText *text,
+ int32_t rangeStart,
+ int32_t rangeEnd,
+ UVector32 &foundBreaks,
+ UErrorCode& status) const override;
};
-/*******************************************************************
- * BurmeseBreakEngine
- */
-
-/**
- * <p>BurmeseBreakEngine is a kind of DictionaryBreakEngine that uses a
- * DictionaryMatcher and heuristics to determine Burmese-specific breaks.</p>
- *
- * <p>After it is constructed a BurmeseBreakEngine may be shared between
- * threads without synchronization.</p>
- */
-class BurmeseBreakEngine : public DictionaryBreakEngine {
- private:
- /**
- * The set of characters handled by this engine
- * @internal
- */
-
- UnicodeSet fBurmeseWordSet;
- UnicodeSet fEndWordSet;
- UnicodeSet fBeginWordSet;
- UnicodeSet fMarkSet;
- DictionaryMatcher *fDictionary;
-
- public:
-
- /**
- * <p>Default constructor.</p>
- *
- * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
- * engine is deleted.
- */
- BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status);
-
- /**
- * <p>Virtual destructor.</p>
- */
- virtual ~BurmeseBreakEngine();
-
- protected:
- /**
- * <p>Divide up a range of known dictionary characters.</p>
- *
- * @param text A UText representing the text
- * @param rangeStart The start of the range of dictionary characters
- * @param rangeEnd The end of the range of dictionary characters
- * @param foundBreaks Output of C array of int32_t break positions, or 0
- * @return The number of breaks found
- */
- virtual int32_t divideUpDictionaryRange( UText *text,
- int32_t rangeStart,
- int32_t rangeEnd,
- UVector32 &foundBreaks ) const;
-
-};
-
-/*******************************************************************
- * KhmerBreakEngine
- */
-
-/**
- * <p>KhmerBreakEngine is a kind of DictionaryBreakEngine that uses a
- * DictionaryMatcher and heuristics to determine Khmer-specific breaks.</p>
- *
- * <p>After it is constructed a KhmerBreakEngine may be shared between
- * threads without synchronization.</p>
- */
-class KhmerBreakEngine : public DictionaryBreakEngine {
- private:
- /**
- * The set of characters handled by this engine
- * @internal
- */
-
- UnicodeSet fKhmerWordSet;
- UnicodeSet fEndWordSet;
- UnicodeSet fBeginWordSet;
- UnicodeSet fMarkSet;
- DictionaryMatcher *fDictionary;
-
- public:
-
- /**
- * <p>Default constructor.</p>
- *
- * @param adoptDictionary A DictionaryMatcher to adopt. Deleted when the
- * engine is deleted.
- */
- KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &status);
-
- /**
- * <p>Virtual destructor.</p>
- */
- virtual ~KhmerBreakEngine();
-
- protected:
- /**
- * <p>Divide up a range of known dictionary characters.</p>
- *
- * @param text A UText representing the text
- * @param rangeStart The start of the range of dictionary characters
- * @param rangeEnd The end of the range of dictionary characters
- * @param foundBreaks Output of C array of int32_t break positions, or 0
- * @return The number of breaks found
- */
- virtual int32_t divideUpDictionaryRange( UText *text,
- int32_t rangeStart,
- int32_t rangeEnd,
- UVector32 &foundBreaks ) const;
-
-};
-
#if !UCONFIG_NO_NORMALIZATION
/*******************************************************************
@@ -385,12 +397,14 @@ class CjkBreakEngine : public DictionaryBreakEngine {
* @param rangeStart The start of the range of dictionary characters
* @param rangeEnd The end of the range of dictionary characters
* @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param status Information on any errors encountered.
* @return The number of breaks found
*/
virtual int32_t divideUpDictionaryRange( UText *text,
int32_t rangeStart,
int32_t rangeEnd,
- UVector32 &foundBreaks ) const;
+ UVector32 &foundBreaks,
+ UErrorCode& status) const override;
};
diff --git a/Build/source/libs/icu/icu-src/source/common/dictionarydata.h b/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
index 0d303d9a8dc..e75716f54b9 100644
--- a/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
+++ b/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
@@ -107,8 +107,8 @@ public:
virtual ~UCharsDictionaryMatcher();
virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
int32_t *lengths, int32_t *cpLengths, int32_t *values,
- int32_t *prefix) const;
- virtual int32_t getType() const;
+ int32_t *prefix) const override;
+ virtual int32_t getType() const override;
private:
const UChar *characters;
UDataMemory *file;
@@ -125,8 +125,8 @@ public:
virtual ~BytesDictionaryMatcher();
virtual int32_t matches(UText *text, int32_t maxLength, int32_t limit,
int32_t *lengths, int32_t *cpLengths, int32_t *values,
- int32_t *prefix) const;
- virtual int32_t getType() const;
+ int32_t *prefix) const override;
+ virtual int32_t getType() const override;
private:
UChar32 transform(UChar32 c) const;
@@ -159,7 +159,7 @@ udict_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *out
* Constants are defined in the DictionaryData class.
*
* For the data structure of BytesTrie & UCharsTrie see
- * http://site.icu-project.org/design/struct/tries
+ * https://icu.unicode.org/design/struct/tries
* and the bytestrie.h and ucharstrie.h header files.
*
* int32_t indexes[indexesLength]; -- indexesLength=indexes[IX_STRING_TRIE_OFFSET]/4;
diff --git a/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp b/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp
index 80bb5d6dbd1..011ad8136f3 100644
--- a/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp
@@ -53,7 +53,7 @@ DateInterval::clone() const {
}
-UBool
+bool
DateInterval::operator==(const DateInterval& other) const {
return ( fromDate == other.fromDate && toDate == other.toDate );
}
diff --git a/Build/source/libs/icu/icu-src/source/common/edits.cpp b/Build/source/libs/icu/icu-src/source/common/edits.cpp
index 95f0c19a728..92ca36fb5d0 100644
--- a/Build/source/libs/icu/icu-src/source/common/edits.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/edits.cpp
@@ -86,6 +86,7 @@ Edits &Edits::moveArray(Edits &src) U_NOEXCEPT {
}
Edits &Edits::operator=(const Edits &other) {
+ if (this == &other) { return *this; } // self-assignment: no-op
length = other.length;
delta = other.delta;
numChanges = other.numChanges;
diff --git a/Build/source/libs/icu/icu-src/source/common/emojiprops.cpp b/Build/source/libs/icu/icu-src/source/common/emojiprops.cpp
new file mode 100644
index 00000000000..2a05e8602d3
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/common/emojiprops.cpp
@@ -0,0 +1,220 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: https://www.unicode.org/copyright.html
+
+// emojiprops.cpp
+// created: 2021sep04 Markus W. Scherer
+
+#include "unicode/utypes.h"
+#include "unicode/uchar.h"
+#include "unicode/ucharstrie.h"
+#include "unicode/ucptrie.h"
+#include "unicode/udata.h"
+#include "unicode/ustringtrie.h"
+#include "unicode/utf16.h"
+#include "emojiprops.h"
+#include "ucln.h"
+#include "ucln_cmn.h"
+#include "umutex.h"
+#include "uset_imp.h"
+
+U_NAMESPACE_BEGIN
+
+namespace {
+
+EmojiProps *singleton = nullptr;
+icu::UInitOnce emojiInitOnce = U_INITONCE_INITIALIZER;
+
+UBool U_CALLCONV emojiprops_cleanup() {
+ delete singleton;
+ singleton = nullptr;
+ emojiInitOnce.reset();
+ return true;
+}
+
+void U_CALLCONV initSingleton(UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return; }
+ singleton = new EmojiProps(errorCode);
+ if (singleton == nullptr) {
+ errorCode = U_MEMORY_ALLOCATION_ERROR;
+ } else if (U_FAILURE(errorCode)) {
+ delete singleton;
+ singleton = nullptr;
+ }
+ ucln_common_registerCleanup(UCLN_COMMON_EMOJIPROPS, emojiprops_cleanup);
+}
+
+// TODO: turn this into a shared helper function
+// Requires the major version to match, and then requires at least the minor version.
+UBool udata_isAcceptableMajorMinor(
+ const UDataInfo &info, const UChar *dataFormat, uint8_t major, uint8_t minor) {
+ return
+ info.size >= 20 &&
+ info.isBigEndian == U_IS_BIG_ENDIAN &&
+ info.charsetFamily == U_CHARSET_FAMILY &&
+ info.dataFormat[0] == dataFormat[0] &&
+ info.dataFormat[1] == dataFormat[1] &&
+ info.dataFormat[2] == dataFormat[2] &&
+ info.dataFormat[3] == dataFormat[3] &&
+ info.formatVersion[0] == major &&
+ info.formatVersion[1] >= minor;
+}
+
+} // namespace
+
+EmojiProps::~EmojiProps() {
+ udata_close(memory);
+ ucptrie_close(cpTrie);
+}
+
+const EmojiProps *
+EmojiProps::getSingleton(UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return nullptr; }
+ umtx_initOnce(emojiInitOnce, &initSingleton, errorCode);
+ return singleton;
+}
+
+UBool U_CALLCONV
+EmojiProps::isAcceptable(void * /*context*/, const char * /*type*/, const char * /*name*/,
+ const UDataInfo *pInfo) {
+ return udata_isAcceptableMajorMinor(*pInfo, u"Emoj", 1, 0);
+}
+
+void
+EmojiProps::load(UErrorCode &errorCode) {
+ memory = udata_openChoice(nullptr, "icu", "uemoji", isAcceptable, this, &errorCode);
+ if (U_FAILURE(errorCode)) { return; }
+ const uint8_t *inBytes = (const uint8_t *)udata_getMemory(memory);
+ const int32_t *inIndexes = (const int32_t *)inBytes;
+ int32_t indexesLength = inIndexes[IX_CPTRIE_OFFSET] / 4;
+ if (indexesLength <= IX_RGI_EMOJI_ZWJ_SEQUENCE_TRIE_OFFSET) {
+ errorCode = U_INVALID_FORMAT_ERROR; // Not enough indexes.
+ return;
+ }
+
+ int32_t i = IX_CPTRIE_OFFSET;
+ int32_t offset = inIndexes[i++];
+ int32_t nextOffset = inIndexes[i];
+ cpTrie = ucptrie_openFromBinary(UCPTRIE_TYPE_FAST, UCPTRIE_VALUE_BITS_8,
+ inBytes + offset, nextOffset - offset, nullptr, &errorCode);
+ if (U_FAILURE(errorCode)) {
+ return;
+ }
+
+ for (i = IX_BASIC_EMOJI_TRIE_OFFSET; i <= IX_RGI_EMOJI_ZWJ_SEQUENCE_TRIE_OFFSET; ++i) {
+ offset = inIndexes[i];
+ nextOffset = inIndexes[i + 1];
+ // Set/leave nullptr if there is no UCharsTrie.
+ const UChar *p = nextOffset > offset ? (const UChar *)(inBytes + offset) : nullptr;
+ stringTries[getStringTrieIndex(i)] = p;
+ }
+}
+
+void
+EmojiProps::addPropertyStarts(const USetAdder *sa, UErrorCode & /*errorCode*/) const {
+ // Add the start code point of each same-value range of the trie.
+ UChar32 start = 0, end;
+ uint32_t value;
+ while ((end = ucptrie_getRange(cpTrie, start, UCPMAP_RANGE_NORMAL, 0,
+ nullptr, nullptr, &value)) >= 0) {
+ sa->add(sa->set, start);
+ start = end + 1;
+ }
+}
+
+UBool
+EmojiProps::hasBinaryProperty(UChar32 c, UProperty which) {
+ UErrorCode errorCode = U_ZERO_ERROR;
+ const EmojiProps *ep = getSingleton(errorCode);
+ return U_SUCCESS(errorCode) && ep->hasBinaryPropertyImpl(c, which);
+}
+
+UBool
+EmojiProps::hasBinaryPropertyImpl(UChar32 c, UProperty which) const {
+ if (which < UCHAR_EMOJI || UCHAR_RGI_EMOJI < which) {
+ return false;
+ }
+ // Note: UCHAR_REGIONAL_INDICATOR is a single, hardcoded range implemented elsewhere.
+ static constexpr int8_t bitFlags[] = {
+ BIT_EMOJI, // UCHAR_EMOJI=57
+ BIT_EMOJI_PRESENTATION, // UCHAR_EMOJI_PRESENTATION=58
+ BIT_EMOJI_MODIFIER, // UCHAR_EMOJI_MODIFIER=59
+ BIT_EMOJI_MODIFIER_BASE, // UCHAR_EMOJI_MODIFIER_BASE=60
+ BIT_EMOJI_COMPONENT, // UCHAR_EMOJI_COMPONENT=61
+ -1, // UCHAR_REGIONAL_INDICATOR=62
+ -1, // UCHAR_PREPENDED_CONCATENATION_MARK=63
+ BIT_EXTENDED_PICTOGRAPHIC, // UCHAR_EXTENDED_PICTOGRAPHIC=64
+ BIT_BASIC_EMOJI, // UCHAR_BASIC_EMOJI=65
+ -1, // UCHAR_EMOJI_KEYCAP_SEQUENCE=66
+ -1, // UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE=67
+ -1, // UCHAR_RGI_EMOJI_FLAG_SEQUENCE=68
+ -1, // UCHAR_RGI_EMOJI_TAG_SEQUENCE=69
+ -1, // UCHAR_RGI_EMOJI_ZWJ_SEQUENCE=70
+ BIT_BASIC_EMOJI, // UCHAR_RGI_EMOJI=71
+ };
+ int32_t bit = bitFlags[which - UCHAR_EMOJI];
+ if (bit < 0) {
+ return false; // not a property that we support in this function
+ }
+ uint8_t bits = UCPTRIE_FAST_GET(cpTrie, UCPTRIE_8, c);
+ return (bits >> bit) & 1;
+}
+
+UBool
+EmojiProps::hasBinaryProperty(const UChar *s, int32_t length, UProperty which) {
+ UErrorCode errorCode = U_ZERO_ERROR;
+ const EmojiProps *ep = getSingleton(errorCode);
+ return U_SUCCESS(errorCode) && ep->hasBinaryPropertyImpl(s, length, which);
+}
+
+UBool
+EmojiProps::hasBinaryPropertyImpl(const UChar *s, int32_t length, UProperty which) const {
+ if (s == nullptr && length != 0) { return false; }
+ if (length <= 0 && (length == 0 || *s == 0)) { return false; } // empty string
+ // The caller should have delegated single code points to hasBinaryProperty(c, which).
+ if (which < UCHAR_BASIC_EMOJI || UCHAR_RGI_EMOJI < which) {
+ return false;
+ }
+ UProperty firstProp = which, lastProp = which;
+ if (which == UCHAR_RGI_EMOJI) {
+ // RGI_Emoji is the union of the other emoji properties of strings.
+ firstProp = UCHAR_BASIC_EMOJI;
+ lastProp = UCHAR_RGI_EMOJI_ZWJ_SEQUENCE;
+ }
+ for (int32_t prop = firstProp; prop <= lastProp; ++prop) {
+ const UChar *trieUChars = stringTries[prop - UCHAR_BASIC_EMOJI];
+ if (trieUChars != nullptr) {
+ UCharsTrie trie(trieUChars);
+ UStringTrieResult result = trie.next(s, length);
+ if (USTRINGTRIE_HAS_VALUE(result)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+void
+EmojiProps::addStrings(const USetAdder *sa, UProperty which, UErrorCode &errorCode) const {
+ if (U_FAILURE(errorCode)) { return; }
+ if (which < UCHAR_BASIC_EMOJI || UCHAR_RGI_EMOJI < which) {
+ return;
+ }
+ UProperty firstProp = which, lastProp = which;
+ if (which == UCHAR_RGI_EMOJI) {
+ // RGI_Emoji is the union of the other emoji properties of strings.
+ firstProp = UCHAR_BASIC_EMOJI;
+ lastProp = UCHAR_RGI_EMOJI_ZWJ_SEQUENCE;
+ }
+ for (int32_t prop = firstProp; prop <= lastProp; ++prop) {
+ const UChar *trieUChars = stringTries[prop - UCHAR_BASIC_EMOJI];
+ if (trieUChars != nullptr) {
+ UCharsTrie::Iterator iter(trieUChars, 0, errorCode);
+ while (iter.next(errorCode)) {
+ const UnicodeString &s = iter.getString();
+ sa->addString(sa->set, s.getBuffer(), s.length());
+ }
+ }
+ }
+}
+
+U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/common/emojiprops.h b/Build/source/libs/icu/icu-src/source/common/emojiprops.h
new file mode 100644
index 00000000000..457847c303a
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/common/emojiprops.h
@@ -0,0 +1,90 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: https://www.unicode.org/copyright.html
+
+// emojiprops.h
+// created: 2021sep03 Markus W. Scherer
+
+#ifndef __EMOJIPROPS_H__
+#define __EMOJIPROPS_H__
+
+#include "unicode/utypes.h"
+#include "unicode/ucptrie.h"
+#include "unicode/udata.h"
+#include "unicode/uobject.h"
+#include "uset_imp.h"
+
+U_NAMESPACE_BEGIN
+
+class EmojiProps : public UMemory {
+public:
+ // @internal
+ EmojiProps(UErrorCode &errorCode) { load(errorCode); }
+ ~EmojiProps();
+
+ static const EmojiProps *getSingleton(UErrorCode &errorCode);
+ static UBool hasBinaryProperty(UChar32 c, UProperty which);
+ static UBool hasBinaryProperty(const UChar *s, int32_t length, UProperty which);
+
+ void addPropertyStarts(const USetAdder *sa, UErrorCode &errorCode) const;
+ void addStrings(const USetAdder *sa, UProperty which, UErrorCode &errorCode) const;
+
+ enum {
+ // Byte offsets from the start of the data, after the generic header,
+ // in ascending order.
+ // UCPTrie=CodePointTrie, follows the indexes
+ IX_CPTRIE_OFFSET,
+ IX_RESERVED1,
+ IX_RESERVED2,
+ IX_RESERVED3,
+
+ // UCharsTrie=CharsTrie
+ IX_BASIC_EMOJI_TRIE_OFFSET,
+ IX_EMOJI_KEYCAP_SEQUENCE_TRIE_OFFSET,
+ IX_RGI_EMOJI_MODIFIER_SEQUENCE_TRIE_OFFSET,
+ IX_RGI_EMOJI_FLAG_SEQUENCE_TRIE_OFFSET,
+ IX_RGI_EMOJI_TAG_SEQUENCE_TRIE_OFFSET,
+ IX_RGI_EMOJI_ZWJ_SEQUENCE_TRIE_OFFSET,
+ IX_RESERVED10,
+ IX_RESERVED11,
+ IX_RESERVED12,
+ IX_TOTAL_SIZE,
+
+ // Not initially byte offsets.
+ IX_RESERVED14,
+ IX_RESERVED15,
+ IX_COUNT // 16
+ };
+
+ // Properties in the code point trie.
+ enum {
+ // https://www.unicode.org/reports/tr51/#Emoji_Properties
+ BIT_EMOJI,
+ BIT_EMOJI_PRESENTATION,
+ BIT_EMOJI_MODIFIER,
+ BIT_EMOJI_MODIFIER_BASE,
+ BIT_EMOJI_COMPONENT,
+ BIT_EXTENDED_PICTOGRAPHIC,
+ // https://www.unicode.org/reports/tr51/#Emoji_Sets
+ BIT_BASIC_EMOJI
+ };
+
+private:
+ static UBool U_CALLCONV
+ isAcceptable(void *context, const char *type, const char *name, const UDataInfo *pInfo);
+ /** Input i: One of the IX_..._TRIE_OFFSET indexes into the data file indexes[] array. */
+ static int32_t getStringTrieIndex(int32_t i) {
+ return i - IX_BASIC_EMOJI_TRIE_OFFSET;
+ }
+
+ void load(UErrorCode &errorCode);
+ UBool hasBinaryPropertyImpl(UChar32 c, UProperty which) const;
+ UBool hasBinaryPropertyImpl(const UChar *s, int32_t length, UProperty which) const;
+
+ UDataMemory *memory = nullptr;
+ UCPTrie *cpTrie = nullptr;
+ const UChar *stringTries[6] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr };
+};
+
+U_NAMESPACE_END
+
+#endif // __EMOJIPROPS_H__
diff --git a/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp b/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
index c07128cbce1..e4817367a5a 100644
--- a/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
@@ -20,6 +20,7 @@
#include "ubrkimpl.h" // U_ICUDATA_BRKITR
#include "uvector.h"
#include "cmemory.h"
+#include "umutex.h"
U_NAMESPACE_BEGIN
@@ -48,7 +49,7 @@ static void _fb_trace(const char *m, const UnicodeString *s, UBool b, int32_t d,
/**
* Used with sortedInsert()
*/
-static int8_t U_CALLCONV compareUnicodeString(UElement t1, UElement t2) {
+static int32_t U_CALLCONV compareUnicodeString(UElement t1, UElement t2) {
const UnicodeString &a = *(const UnicodeString*)t1.pointer;
const UnicodeString &b = *(const UnicodeString*)t2.pointer;
return a.compare(b);
@@ -89,7 +90,6 @@ class U_COMMON_API UStringSet : public UVector {
} else {
sortedInsert(str, compareUnicodeString, status);
if(U_FAILURE(status)) {
- delete str;
return false;
}
return true;
@@ -139,13 +139,30 @@ class SimpleFilteredSentenceBreakData : public UMemory {
public:
SimpleFilteredSentenceBreakData(UCharsTrie *forwards, UCharsTrie *backwards )
: fForwardsPartialTrie(forwards), fBackwardsTrie(backwards), refcount(1) { }
- SimpleFilteredSentenceBreakData *incr() { refcount++; return this; }
- SimpleFilteredSentenceBreakData *decr() { if((--refcount) <= 0) delete this; return 0; }
- virtual ~SimpleFilteredSentenceBreakData();
+ SimpleFilteredSentenceBreakData *incr() {
+ umtx_atomic_inc(&refcount);
+ return this;
+ }
+ SimpleFilteredSentenceBreakData *decr() {
+ if(umtx_atomic_dec(&refcount) <= 0) {
+ delete this;
+ }
+ return 0;
+ }
+ virtual ~SimpleFilteredSentenceBreakData();
+
+ bool hasForwardsPartialTrie() const { return fForwardsPartialTrie.isValid(); }
+ bool hasBackwardsTrie() const { return fBackwardsTrie.isValid(); }
- LocalPointer<UCharsTrie> fForwardsPartialTrie; // Has ".a" for "a.M."
- LocalPointer<UCharsTrie> fBackwardsTrie; // i.e. ".srM" for Mrs.
- int32_t refcount;
+ const UCharsTrie &getForwardsPartialTrie() const { return *fForwardsPartialTrie; }
+ const UCharsTrie &getBackwardsTrie() const { return *fBackwardsTrie; }
+
+private:
+ // These tries own their data arrays.
+ // They are shared and must therefore not be modified.
+ LocalPointer<UCharsTrie> fForwardsPartialTrie; // Has ".a" for "a.M."
+ LocalPointer<UCharsTrie> fBackwardsTrie; // i.e. ".srM" for Mrs.
+ u_atomic_int32_t refcount;
};
SimpleFilteredSentenceBreakData::~SimpleFilteredSentenceBreakData() {}
@@ -168,37 +185,37 @@ public:
/* -- cloning and other subclass stuff -- */
virtual BreakIterator * createBufferClone(void * /*stackBuffer*/,
int32_t &/*BufferSize*/,
- UErrorCode &status) {
+ UErrorCode &status) override {
// for now - always deep clone
status = U_SAFECLONE_ALLOCATED_WARNING;
return clone();
}
- virtual SimpleFilteredSentenceBreakIterator* clone() const { return new SimpleFilteredSentenceBreakIterator(*this); }
- virtual UClassID getDynamicClassID(void) const { return NULL; }
- virtual UBool operator==(const BreakIterator& o) const { if(this==&o) return true; return false; }
+ virtual SimpleFilteredSentenceBreakIterator* clone() const override { return new SimpleFilteredSentenceBreakIterator(*this); }
+ virtual UClassID getDynamicClassID(void) const override { return NULL; }
+ virtual bool operator==(const BreakIterator& o) const override { if(this==&o) return true; return false; }
/* -- text modifying -- */
- virtual void setText(UText *text, UErrorCode &status) { fDelegate->setText(text,status); }
- virtual BreakIterator &refreshInputText(UText *input, UErrorCode &status) { fDelegate->refreshInputText(input,status); return *this; }
- virtual void adoptText(CharacterIterator* it) { fDelegate->adoptText(it); }
- virtual void setText(const UnicodeString &text) { fDelegate->setText(text); }
+ virtual void setText(UText *text, UErrorCode &status) override { fDelegate->setText(text,status); }
+ virtual BreakIterator &refreshInputText(UText *input, UErrorCode &status) override { fDelegate->refreshInputText(input,status); return *this; }
+ virtual void adoptText(CharacterIterator* it) override { fDelegate->adoptText(it); }
+ virtual void setText(const UnicodeString &text) override { fDelegate->setText(text); }
/* -- other functions that are just delegated -- */
- virtual UText *getUText(UText *fillIn, UErrorCode &status) const { return fDelegate->getUText(fillIn,status); }
- virtual CharacterIterator& getText(void) const { return fDelegate->getText(); }
+ virtual UText *getUText(UText *fillIn, UErrorCode &status) const override { return fDelegate->getUText(fillIn,status); }
+ virtual CharacterIterator& getText(void) const override { return fDelegate->getText(); }
/* -- ITERATION -- */
- virtual int32_t first(void);
- virtual int32_t preceding(int32_t offset);
- virtual int32_t previous(void);
- virtual UBool isBoundary(int32_t offset);
- virtual int32_t current(void) const { return fDelegate->current(); } // we keep the delegate current, so this should be correct.
+ virtual int32_t first(void) override;
+ virtual int32_t preceding(int32_t offset) override;
+ virtual int32_t previous(void) override;
+ virtual UBool isBoundary(int32_t offset) override;
+ virtual int32_t current(void) const override { return fDelegate->current(); } // we keep the delegate current, so this should be correct.
- virtual int32_t next(void);
+ virtual int32_t next(void) override;
- virtual int32_t next(int32_t n);
- virtual int32_t following(int32_t offset);
- virtual int32_t last(void);
+ virtual int32_t next(int32_t n) override;
+ virtual int32_t following(int32_t offset) override;
+ virtual int32_t last(void) override;
private:
/**
@@ -244,7 +261,13 @@ SimpleFilteredSentenceBreakIterator::SimpleFilteredSentenceBreakIterator(BreakIt
fData(new SimpleFilteredSentenceBreakData(forwards, backwards)),
fDelegate(adopt)
{
- // all set..
+ if (fData == nullptr) {
+ delete forwards;
+ delete backwards;
+ if (U_SUCCESS(status)) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ }
}
SimpleFilteredSentenceBreakIterator::~SimpleFilteredSentenceBreakIterator() {
@@ -261,59 +284,62 @@ SimpleFilteredSentenceBreakIterator::breakExceptionAt(int32_t n) {
int32_t bestValue = -1;
// loops while 'n' points to an exception.
utext_setNativeIndex(fText.getAlias(), n); // from n..
- fData->fBackwardsTrie->reset();
- UChar32 uch;
//if(debug2) u_printf(" n@ %d\n", n);
// Assume a space is following the '.' (so we handle the case: "Mr. /Brown")
- if((uch=utext_previous32(fText.getAlias()))==(UChar32)0x0020) { // TODO: skip a class of chars here??
+ if(utext_previous32(fText.getAlias())==u' ') { // TODO: skip a class of chars here??
// TODO only do this the 1st time?
//if(debug2) u_printf("skipping prev: |%C| \n", (UChar)uch);
} else {
//if(debug2) u_printf("not skipping prev: |%C| \n", (UChar)uch);
- uch = utext_next32(fText.getAlias());
+ utext_next32(fText.getAlias());
//if(debug2) u_printf(" -> : |%C| \n", (UChar)uch);
}
- UStringTrieResult r = USTRINGTRIE_INTERMEDIATE_VALUE;
-
- while((uch=utext_previous32(fText.getAlias()))!=U_SENTINEL && // more to consume backwards and..
- USTRINGTRIE_HAS_NEXT(r=fData->fBackwardsTrie->nextForCodePoint(uch))) {// more in the trie
- if(USTRINGTRIE_HAS_VALUE(r)) { // remember the best match so far
- bestPosn = utext_getNativeIndex(fText.getAlias());
- bestValue = fData->fBackwardsTrie->getValue();
- }
- //if(debug2) u_printf("rev< /%C/ cont?%d @%d\n", (UChar)uch, r, utext_getNativeIndex(fText.getAlias()));
+ {
+ // Do not modify the shared trie!
+ UCharsTrie iter(fData->getBackwardsTrie());
+ UChar32 uch;
+ while((uch=utext_previous32(fText.getAlias()))!=U_SENTINEL) { // more to consume backwards
+ UStringTrieResult r = iter.nextForCodePoint(uch);
+ if(USTRINGTRIE_HAS_VALUE(r)) { // remember the best match so far
+ bestPosn = utext_getNativeIndex(fText.getAlias());
+ bestValue = iter.getValue();
+ }
+ if(!USTRINGTRIE_HAS_NEXT(r)) {
+ break;
+ }
+ //if(debug2) u_printf("rev< /%C/ cont?%d @%d\n", (UChar)uch, r, utext_getNativeIndex(fText.getAlias()));
+ }
}
- if(USTRINGTRIE_MATCHES(r)) { // exact match?
- //if(debug2) u_printf("rev<?/%C/?end of seq.. r=%d, bestPosn=%d, bestValue=%d\n", (UChar)uch, r, bestPosn, bestValue);
- bestValue = fData->fBackwardsTrie->getValue();
- bestPosn = utext_getNativeIndex(fText.getAlias());
- //if(debug2) u_printf("rev<+/%C/+end of seq.. r=%d, bestPosn=%d, bestValue=%d\n", (UChar)uch, r, bestPosn, bestValue);
- }
+ //if(bestValue >= 0) {
+ //if(debug2) u_printf("rev<+/%C/+end of seq.. r=%d, bestPosn=%d, bestValue=%d\n", (UChar)uch, r, bestPosn, bestValue);
+ //}
if(bestPosn>=0) {
//if(debug2) u_printf("rev< /%C/ end of seq.. r=%d, bestPosn=%d, bestValue=%d\n", (UChar)uch, r, bestPosn, bestValue);
//if(USTRINGTRIE_MATCHES(r)) { // matched - so, now what?
- //int32_t bestValue = fBackwardsTrie->getValue();
+ //int32_t bestValue = iter.getValue();
////if(debug2) u_printf("rev< /%C/ matched, skip..%d bestValue=%d\n", (UChar)uch, r, bestValue);
if(bestValue == kMATCH) { // exact match!
//if(debug2) u_printf(" exact backward match\n");
return kExceptionHere; // See if the next is another exception.
} else if(bestValue == kPARTIAL
- && fData->fForwardsPartialTrie.isValid()) { // make sure there's a forward trie
+ && fData->hasForwardsPartialTrie()) { // make sure there's a forward trie
//if(debug2) u_printf(" partial backward match\n");
// We matched the "Ph." in "Ph.D." - now we need to run everything through the forwards trie
// to see if it matches something going forward.
- fData->fForwardsPartialTrie->reset();
UStringTrieResult rfwd = USTRINGTRIE_INTERMEDIATE_VALUE;
utext_setNativeIndex(fText.getAlias(), bestPosn); // hope that's close ..
//if(debug2) u_printf("Retrying at %d\n", bestPosn);
+ // Do not modify the shared trie!
+ UCharsTrie iter(fData->getForwardsPartialTrie());
+ UChar32 uch;
while((uch=utext_next32(fText.getAlias()))!=U_SENTINEL &&
- USTRINGTRIE_HAS_NEXT(rfwd=fData->fForwardsPartialTrie->nextForCodePoint(uch))) {
+ USTRINGTRIE_HAS_NEXT(rfwd=iter.nextForCodePoint(uch))) {
//if(debug2) u_printf("fwd> /%C/ cont?%d @%d\n", (UChar)uch, rfwd, utext_getNativeIndex(fText.getAlias()));
}
if(USTRINGTRIE_MATCHES(rfwd)) {
@@ -339,7 +365,7 @@ SimpleFilteredSentenceBreakIterator::breakExceptionAt(int32_t n) {
int32_t
SimpleFilteredSentenceBreakIterator::internalNext(int32_t n) {
if(n == UBRK_DONE || // at end or
- fData->fBackwardsTrie.isNull()) { // .. no backwards table loaded == no exceptions
+ !fData->hasBackwardsTrie()) { // .. no backwards table loaded == no exceptions
return n;
}
// OK, do we need to break here?
@@ -369,7 +395,7 @@ SimpleFilteredSentenceBreakIterator::internalNext(int32_t n) {
int32_t
SimpleFilteredSentenceBreakIterator::internalPrev(int32_t n) {
if(n == 0 || n == UBRK_DONE || // at end or
- fData->fBackwardsTrie.isNull()) { // .. no backwards table loaded == no exceptions
+ !fData->hasBackwardsTrie()) { // .. no backwards table loaded == no exceptions
return n;
}
// OK, do we need to break here?
@@ -420,7 +446,7 @@ SimpleFilteredSentenceBreakIterator::previous(void) {
UBool SimpleFilteredSentenceBreakIterator::isBoundary(int32_t offset) {
if (!fDelegate->isBoundary(offset)) return false; // no break to suppress
- if (fData->fBackwardsTrie.isNull()) return true; // no data = no suppressions
+ if (!fData->hasBackwardsTrie()) return true; // no data = no suppressions
UErrorCode status = U_ZERO_ERROR;
resetState(status);
@@ -461,9 +487,9 @@ public:
virtual ~SimpleFilteredBreakIteratorBuilder();
SimpleFilteredBreakIteratorBuilder(const Locale &fromLocale, UErrorCode &status);
SimpleFilteredBreakIteratorBuilder(UErrorCode &status);
- virtual UBool suppressBreakAfter(const UnicodeString& exception, UErrorCode& status);
- virtual UBool unsuppressBreakAfter(const UnicodeString& exception, UErrorCode& status);
- virtual BreakIterator *build(BreakIterator* adoptBreakIterator, UErrorCode& status);
+ virtual UBool suppressBreakAfter(const UnicodeString& exception, UErrorCode& status) override;
+ virtual UBool unsuppressBreakAfter(const UnicodeString& exception, UErrorCode& status) override;
+ virtual BreakIterator *build(BreakIterator* adoptBreakIterator, UErrorCode& status) override;
private:
UStringSet fSet;
};
diff --git a/Build/source/libs/icu/icu-src/source/common/hash.h b/Build/source/libs/icu/icu-src/source/common/hash.h
index f02cb7087a5..b927ddb3c36 100644
--- a/Build/source/libs/icu/icu-src/source/common/hash.h
+++ b/Build/source/libs/icu/icu-src/source/common/hash.h
@@ -85,16 +85,22 @@ public:
inline int32_t puti(const UnicodeString& key, int32_t value, UErrorCode& status);
+ inline int32_t putiAllowZero(const UnicodeString& key, int32_t value, UErrorCode& status);
+
inline void* get(const UnicodeString& key) const;
inline int32_t geti(const UnicodeString& key) const;
+ inline int32_t getiAndFound(const UnicodeString& key, UBool &found) const;
+
inline void* remove(const UnicodeString& key);
inline int32_t removei(const UnicodeString& key);
inline void removeAll(void);
+ inline UBool containsKey(const UnicodeString& key) const;
+
inline const UHashElement* find(const UnicodeString& key) const;
/**
@@ -203,6 +209,11 @@ inline int32_t Hashtable::puti(const UnicodeString& key, int32_t value, UErrorCo
return uhash_puti(hash, new UnicodeString(key), value, &status);
}
+inline int32_t Hashtable::putiAllowZero(const UnicodeString& key, int32_t value,
+ UErrorCode& status) {
+ return uhash_putiAllowZero(hash, new UnicodeString(key), value, &status);
+}
+
inline void* Hashtable::get(const UnicodeString& key) const {
return uhash_get(hash, &key);
}
@@ -211,6 +222,10 @@ inline int32_t Hashtable::geti(const UnicodeString& key) const {
return uhash_geti(hash, &key);
}
+inline int32_t Hashtable::getiAndFound(const UnicodeString& key, UBool &found) const {
+ return uhash_getiAndFound(hash, &key, &found);
+}
+
inline void* Hashtable::remove(const UnicodeString& key) {
return uhash_remove(hash, &key);
}
@@ -219,6 +234,10 @@ inline int32_t Hashtable::removei(const UnicodeString& key) {
return uhash_removei(hash, &key);
}
+inline UBool Hashtable::containsKey(const UnicodeString& key) const {
+ return uhash_containsKey(hash, &key);
+}
+
inline const UHashElement* Hashtable::find(const UnicodeString& key) const {
return uhash_find(hash, &key);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/icuplug.cpp b/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
index 4ab8c66ebe3..52a0deced6d 100644
--- a/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
@@ -284,7 +284,7 @@ static void uplug_callPlug(UPlugData *plug, UPlugReason reason, UErrorCode *stat
static void uplug_unloadPlug(UPlugData *plug, UErrorCode *status) {
- if(plug->awaitingLoad) { /* shouldn't happen. Plugin hasn'tbeen loaded yet.*/
+ if(plug->awaitingLoad) { /* shouldn't happen. Plugin hasn't been loaded yet.*/
*status = U_INTERNAL_PROGRAM_ERROR;
return;
}
@@ -295,7 +295,7 @@ static void uplug_unloadPlug(UPlugData *plug, UErrorCode *status) {
}
static void uplug_queryPlug(UPlugData *plug, UErrorCode *status) {
- if(!plug->awaitingLoad || !(plug->level == UPLUG_LEVEL_UNKNOWN) ) { /* shouldn't happen. Plugin hasn'tbeen loaded yet.*/
+ if(!plug->awaitingLoad || !(plug->level == UPLUG_LEVEL_UNKNOWN) ) { /* shouldn't happen. Plugin hasn't been loaded yet.*/
*status = U_INTERNAL_PROGRAM_ERROR;
return;
}
@@ -317,7 +317,7 @@ static void uplug_loadPlug(UPlugData *plug, UErrorCode *status) {
if(U_FAILURE(*status)) {
return;
}
- if(!plug->awaitingLoad || (plug->level < UPLUG_LEVEL_LOW) ) { /* shouldn't happen. Plugin hasn'tbeen loaded yet.*/
+ if(!plug->awaitingLoad || (plug->level < UPLUG_LEVEL_LOW) ) { /* shouldn't happen. Plugin hasn't been loaded yet.*/
*status = U_INTERNAL_PROGRAM_ERROR;
return;
}
@@ -526,7 +526,7 @@ uplug_getPlugLoadStatus(UPlugData *plug) {
/**
- * Initialize a plugin fron an entrypoint and library - but don't load it.
+ * Initialize a plugin from an entrypoint and library - but don't load it.
*/
static UPlugData* uplug_initPlugFromEntrypointAndLibrary(UPlugEntrypoint *entrypoint, const char *config, void *lib, const char *sym,
UErrorCode *status) {
diff --git a/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp b/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
index e4b36f1055f..905fc1deccb 100644
--- a/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
@@ -157,7 +157,7 @@ static void U_CALLCONV initSingletons(const char *what, UErrorCode &errorCode) {
} else if (uprv_strcmp(what, "nfkc_cf") == 0) {
nfkc_cfSingleton = Norm2AllModes::createInstance(NULL, "nfkc_cf", errorCode);
} else {
- UPRV_UNREACHABLE; // Unknown singleton
+ UPRV_UNREACHABLE_EXIT; // Unknown singleton
}
ucln_common_registerCleanup(UCLN_COMMON_LOADED_NORMALIZER2, uprv_loaded_normalizer2_cleanup);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/localebuilder.cpp b/Build/source/libs/icu/icu-src/source/common/localebuilder.cpp
index 1dd8131e589..a5f201e8475 100644
--- a/Build/source/libs/icu/icu-src/source/common/localebuilder.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/localebuilder.cpp
@@ -228,7 +228,7 @@ LocaleBuilder& LocaleBuilder::setExtension(char key, StringPiece value)
return *this;
}
if (extensions_ == nullptr) {
- extensions_ = new Locale();
+ extensions_ = Locale::getRoot().clone();
if (extensions_ == nullptr) {
status_ = U_MEMORY_ALLOCATION_ERROR;
return *this;
@@ -259,11 +259,11 @@ LocaleBuilder& LocaleBuilder::setUnicodeLocaleKeyword(
return *this;
}
if (extensions_ == nullptr) {
- extensions_ = new Locale();
- }
- if (extensions_ == nullptr) {
- status_ = U_MEMORY_ALLOCATION_ERROR;
- return *this;
+ extensions_ = Locale::getRoot().clone();
+ if (extensions_ == nullptr) {
+ status_ = U_MEMORY_ALLOCATION_ERROR;
+ return *this;
+ }
}
extensions_->setUnicodeKeywordValue(key, type, status_);
return *this;
@@ -280,7 +280,7 @@ LocaleBuilder& LocaleBuilder::addUnicodeLocaleAttribute(
return *this;
}
if (extensions_ == nullptr) {
- extensions_ = new Locale();
+ extensions_ = Locale::getRoot().clone();
if (extensions_ == nullptr) {
status_ = U_MEMORY_ALLOCATION_ERROR;
return *this;
@@ -415,7 +415,7 @@ void LocaleBuilder::copyExtensionsFrom(const Locale& src, UErrorCode& errorCode)
return;
}
if (extensions_ == nullptr) {
- extensions_ = new Locale();
+ extensions_ = Locale::getRoot().clone();
if (extensions_ == nullptr) {
status_ = U_MEMORY_ALLOCATION_ERROR;
return;
diff --git a/Build/source/libs/icu/icu-src/source/common/localematcher.cpp b/Build/source/libs/icu/icu-src/source/common/localematcher.cpp
index 5795cbf87e6..3d178dfbaf1 100644
--- a/Build/source/libs/icu/icu-src/source/common/localematcher.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/localematcher.cpp
@@ -187,7 +187,7 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::setSupportedLocalesFromListStrin
for (int32_t i = 0; i < length; ++i) {
Locale *locale = list.orphanLocaleAt(i);
if (locale == nullptr) { continue; }
- supportedLocales_->addElement(locale, errorCode_);
+ supportedLocales_->addElementX(locale, errorCode_);
if (U_FAILURE(errorCode_)) {
delete locale;
break;
@@ -207,7 +207,7 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::setSupportedLocales(Locale::Iter
errorCode_ = U_MEMORY_ALLOCATION_ERROR;
break;
}
- supportedLocales_->addElement(clone, errorCode_);
+ supportedLocales_->addElementX(clone, errorCode_);
if (U_FAILURE(errorCode_)) {
delete clone;
break;
@@ -223,7 +223,7 @@ LocaleMatcher::Builder &LocaleMatcher::Builder::addSupportedLocale(const Locale
errorCode_ = U_MEMORY_ALLOCATION_ERROR;
return *this;
}
- supportedLocales_->addElement(clone, errorCode_);
+ supportedLocales_->addElementX(clone, errorCode_);
if (U_FAILURE(errorCode_)) {
delete clone;
}
@@ -345,9 +345,8 @@ UBool compareLSRs(const UHashTok t1, const UHashTok t2) {
int32_t LocaleMatcher::putIfAbsent(const LSR &lsr, int32_t i, int32_t suppLength,
UErrorCode &errorCode) {
if (U_FAILURE(errorCode)) { return suppLength; }
- int32_t index = uhash_geti(supportedLsrToIndex, &lsr);
- if (index == 0) {
- uhash_puti(supportedLsrToIndex, const_cast<LSR *>(&lsr), i + 1, &errorCode);
+ if (!uhash_containsKey(supportedLsrToIndex, &lsr)) {
+ uhash_putiAllowZero(supportedLsrToIndex, const_cast<LSR *>(&lsr), i, &errorCode);
if (U_SUCCESS(errorCode)) {
supportedLSRs[suppLength] = &lsr;
supportedIndexes[suppLength++] = i;
@@ -685,12 +684,11 @@ int32_t LocaleMatcher::getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remai
int32_t bestSupportedLsrIndex = -1;
for (int32_t bestShiftedDistance = LocaleDistance::shiftDistance(thresholdDistance);;) {
// Quick check for exact maximized LSR.
- // Returns suppIndex+1 where 0 means not found.
if (supportedLsrToIndex != nullptr) {
desiredLSR.setHashCode();
- int32_t index = uhash_geti(supportedLsrToIndex, &desiredLSR);
- if (index != 0) {
- int32_t suppIndex = index - 1;
+ UBool found = false;
+ int32_t suppIndex = uhash_getiAndFound(supportedLsrToIndex, &desiredLSR, &found);
+ if (found) {
if (remainingIter != nullptr) {
remainingIter->rememberCurrent(desiredIndex, errorCode);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp b/Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp
index 8916b121be3..4455eedb75e 100644
--- a/Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/localeprioritylist.cpp
@@ -187,17 +187,18 @@ bool LocalePriorityList::add(const Locale &locale, int32_t weight, UErrorCode &e
if (U_FAILURE(errorCode)) { return false; }
}
LocalPointer<Locale> clone;
- int32_t index = uhash_geti(map, &locale);
- if (index != 0) {
+ UBool found = false;
+ int32_t index = uhash_getiAndFound(map, &locale, &found);
+ if (found) {
// Duplicate: Remove the old item and append it anew.
- LocaleAndWeight &lw = list->array[index - 1];
+ LocaleAndWeight &lw = list->array[index];
clone.adoptInstead(lw.locale);
lw.locale = nullptr;
lw.weight = 0;
++numRemoved;
}
if (weight <= 0) { // do not add q=0
- if (index != 0) {
+ if (found) {
// Not strictly necessary but cleaner.
uhash_removei(map, &locale);
}
@@ -217,7 +218,7 @@ bool LocalePriorityList::add(const Locale &locale, int32_t weight, UErrorCode &e
return false;
}
}
- uhash_puti(map, clone.getAlias(), listLength + 1, &errorCode);
+ uhash_putiAllowZero(map, clone.getAlias(), listLength, &errorCode);
if (U_FAILURE(errorCode)) { return false; }
LocaleAndWeight &lw = list->array[listLength];
lw.locale = clone.orphan();
diff --git a/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp b/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
index 47c0667417c..c512a0164c2 100644
--- a/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
@@ -316,17 +316,29 @@ _getStringOrCopyKey(const char *path, const char *locale,
/* see comment about closing rb near "return item;" in _res_getTableStringWithFallback() */
}
} else {
+ bool isLanguageCode = (uprv_strncmp(tableKey, _kLanguages, 9) == 0);
/* Language code should not be a number. If it is, set the error code. */
- if (!uprv_strncmp(tableKey, "Languages", 9) && uprv_strtol(itemKey, NULL, 10)) {
+ if (isLanguageCode && uprv_strtol(itemKey, NULL, 10)) {
*pErrorCode = U_MISSING_RESOURCE_ERROR;
} else {
/* second-level item, use special fallback */
s=uloc_getTableStringWithFallback(path, locale,
- tableKey,
+ tableKey,
subTableKey,
itemKey,
&length,
pErrorCode);
+ if (U_FAILURE(*pErrorCode) && isLanguageCode && itemKey != nullptr) {
+ // convert itemKey locale code to canonical form and try again, ICU-20870
+ *pErrorCode = U_ZERO_ERROR;
+ Locale canonKey = Locale::createCanonical(itemKey);
+ s=uloc_getTableStringWithFallback(path, locale,
+ tableKey,
+ subTableKey,
+ canonKey.getName(),
+ &length,
+ pErrorCode);
+ }
}
}
@@ -698,7 +710,7 @@ uloc_getDisplayName(const char *locale,
} /* end switch */
if (len>0) {
- /* we addeed a component, so add separator and write it if there's room. */
+ /* we added a component, so add separator and write it if there's room. */
if(len+sepLen<=cap) {
const UChar * plimit = p + len;
for (; p < plimit; p++) {
diff --git a/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp b/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
index 43334f51964..f73cedd7286 100644
--- a/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
@@ -313,29 +313,29 @@ public:
LocaleDisplayNamesImpl(const Locale& locale, UDisplayContext *contexts, int32_t length);
virtual ~LocaleDisplayNamesImpl();
- virtual const Locale& getLocale() const;
- virtual UDialectHandling getDialectHandling() const;
- virtual UDisplayContext getContext(UDisplayContextType type) const;
+ virtual const Locale& getLocale() const override;
+ virtual UDialectHandling getDialectHandling() const override;
+ virtual UDisplayContext getContext(UDisplayContextType type) const override;
virtual UnicodeString& localeDisplayName(const Locale& locale,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
virtual UnicodeString& localeDisplayName(const char* localeId,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
virtual UnicodeString& languageDisplayName(const char* lang,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
virtual UnicodeString& scriptDisplayName(const char* script,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
virtual UnicodeString& scriptDisplayName(UScriptCode scriptCode,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
virtual UnicodeString& regionDisplayName(const char* region,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
virtual UnicodeString& variantDisplayName(const char* variant,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
virtual UnicodeString& keyDisplayName(const char* key,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
virtual UnicodeString& keyValueDisplayName(const char* key,
const char* value,
- UnicodeString& result) const;
+ UnicodeString& result) const override;
private:
UnicodeString& localeIdName(const char* localeId,
UnicodeString& result, bool substitute) const;
@@ -407,7 +407,7 @@ struct LocaleDisplayNamesImpl::CapitalizationContextSink : public ResourceSink {
virtual ~CapitalizationContextSink();
virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
+ UErrorCode &errorCode) override {
ResourceTable contexts = value.getTable(errorCode);
if (U_FAILURE(errorCode)) { return; }
for (int i = 0; contexts.getKeyAndValue(i, key, value); ++i) {
@@ -723,11 +723,25 @@ LocaleDisplayNamesImpl::localeIdName(const char* localeId,
return result;
}
}
- if (substitute) {
- return langData.get("Languages", localeId, result);
- } else {
- return langData.getNoFallback("Languages", localeId, result);
+ langData.getNoFallback("Languages", localeId, result);
+ if (result.isBogus() && uprv_strchr(localeId, '_') == NULL) {
+ // Canonicalize lang and try again, ICU-20870
+ // (only for language codes without script or region)
+ Locale canonLocale = Locale::createCanonical(localeId);
+ const char* canonLocId = canonLocale.getName();
+ if (nameLength == UDISPCTX_LENGTH_SHORT) {
+ langData.getNoFallback("Languages%short", canonLocId, result);
+ if (!result.isBogus()) {
+ return result;
+ }
+ }
+ langData.getNoFallback("Languages", canonLocId, result);
}
+ if (result.isBogus() && substitute) {
+ // use key, this is what langData.get (with fallback) falls back to.
+ result.setTo(UnicodeString(localeId, -1, US_INV)); // use key (
+ }
+ return result;
}
UnicodeString&
@@ -742,10 +756,22 @@ LocaleDisplayNamesImpl::languageDisplayName(const char* lang,
return adjustForUsageAndContext(kCapContextUsageLanguage, result);
}
}
- if (substitute == UDISPCTX_SUBSTITUTE) {
- langData.get("Languages", lang, result);
- } else {
- langData.getNoFallback("Languages", lang, result);
+ langData.getNoFallback("Languages", lang, result);
+ if (result.isBogus()) {
+ // Canonicalize lang and try again, ICU-20870
+ Locale canonLocale = Locale::createCanonical(lang);
+ const char* canonLocId = canonLocale.getName();
+ if (nameLength == UDISPCTX_LENGTH_SHORT) {
+ langData.getNoFallback("Languages%short", canonLocId, result);
+ if (!result.isBogus()) {
+ return adjustForUsageAndContext(kCapContextUsageLanguage, result);
+ }
+ }
+ langData.getNoFallback("Languages", canonLocId, result);
+ }
+ if (result.isBogus() && substitute == UDISPCTX_SUBSTITUTE) {
+ // use key, this is what langData.get (with fallback) falls back to.
+ result.setTo(UnicodeString(lang, -1, US_INV)); // use key (
}
return adjustForUsageAndContext(kCapContextUsageLanguage, result);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/locid.cpp b/Build/source/libs/icu/icu-src/source/common/locid.cpp
index 874e4a70556..e8859c7048b 100644
--- a/Build/source/libs/icu/icu-src/source/common/locid.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/locid.cpp
@@ -254,7 +254,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Locale)
Locale::~Locale()
{
- if (baseName != fullName) {
+ if ((baseName != fullName) && (baseName != fullNameBuffer)) {
uprv_free(baseName);
}
baseName = NULL;
@@ -297,13 +297,12 @@ Locale::Locale( const char * newLanguage,
else
{
UErrorCode status = U_ZERO_ERROR;
- int32_t size = 0;
int32_t lsize = 0;
int32_t csize = 0;
int32_t vsize = 0;
int32_t ksize = 0;
- // Calculate the size of the resulting string.
+ // Check the sizes of the input strings.
// Language
if ( newLanguage != NULL )
@@ -313,7 +312,6 @@ Locale::Locale( const char * newLanguage,
setToBogus();
return;
}
- size = lsize;
}
CharString togo(newLanguage, lsize, status); // start with newLanguage
@@ -326,7 +324,6 @@ Locale::Locale( const char * newLanguage,
setToBogus();
return;
}
- size += csize;
}
// _Variant
@@ -350,21 +347,6 @@ Locale::Locale( const char * newLanguage,
}
}
- if( vsize > 0 )
- {
- size += vsize;
- }
-
- // Separator rules:
- if ( vsize > 0 )
- {
- size += 2; // at least: __v
- }
- else if ( csize > 0 )
- {
- size += 1; // at least: _v
- }
-
if ( newKeywords != NULL)
{
ksize = (int32_t)uprv_strlen(newKeywords);
@@ -372,11 +354,9 @@ Locale::Locale( const char * newLanguage,
setToBogus();
return;
}
- size += ksize + 1;
}
- // NOW we have the full locale string..
- // Now, copy it back.
+ // We've checked the input sizes, now build up the full locale string..
// newLanguage is already copied
@@ -466,17 +446,21 @@ Locale& Locale::operator=(const Locale& other) {
}
Locale& Locale::operator=(Locale&& other) U_NOEXCEPT {
- if (baseName != fullName) uprv_free(baseName);
+ if ((baseName != fullName) && (baseName != fullNameBuffer)) uprv_free(baseName);
if (fullName != fullNameBuffer) uprv_free(fullName);
- if (other.fullName == other.fullNameBuffer) {
+ if (other.fullName == other.fullNameBuffer || other.baseName == other.fullNameBuffer) {
uprv_strcpy(fullNameBuffer, other.fullNameBuffer);
+ }
+ if (other.fullName == other.fullNameBuffer) {
fullName = fullNameBuffer;
} else {
fullName = other.fullName;
}
- if (other.baseName == other.fullName) {
+ if (other.baseName == other.fullNameBuffer) {
+ baseName = fullNameBuffer;
+ } else if (other.baseName == other.fullName) {
baseName = fullName;
} else {
baseName = other.baseName;
@@ -499,7 +483,7 @@ Locale::clone() const {
return new Locale(*this);
}
-UBool
+bool
Locale::operator==( const Locale& other) const
{
return (uprv_strcmp(other.fullName, fullName) == 0);
@@ -524,7 +508,7 @@ static const char* const KNOWN_CANONICALIZED[] = {
"km", "km_KH", "kn", "kn_IN", "ko", "ko_KR", "ky", "ky_KG", "lo", "lo_LA",
"lt", "lt_LT", "lv", "lv_LV", "mk", "mk_MK", "ml", "ml_IN", "mn", "mn_MN",
"mr", "mr_IN", "ms", "ms_MY", "my", "my_MM", "nb", "nb_NO", "ne", "ne_NP",
- "nl", "nl_NL", "or", "or_IN", "pa", "pa_IN", "pl", "pl_PL", "ps", "ps_AF",
+ "nl", "nl_NL", "no", "or", "or_IN", "pa", "pa_IN", "pl", "pl_PL", "ps", "ps_AF",
"pt", "pt_BR", "pt_PT", "ro", "ro_RO", "ru", "ru_RU", "sd", "sd_IN", "si",
"si_LK", "sk", "sk_SK", "sl", "sl_SI", "so", "so_SO", "sq", "sq_AL", "sr",
"sr_Cyrl_RS", "sr_Latn", "sr_RS", "sv", "sv_SE", "sw", "sw_TZ", "ta",
@@ -627,6 +611,17 @@ private:
LocalMemory<const char*>& types,
LocalMemory<int32_t>& replacementIndexes,
int32_t &length, UErrorCode &status);
+
+ // Read the subdivisionAlias data from alias to
+ // strings+types+replacementIndexes
+ // Allocate length items for types, to store the type field.
+ // Allocate length items for replacementIndexes,
+ // to store the index in the strings for the replacement variant.
+ void readSubdivisionAlias(UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length, UErrorCode &status);
};
/**
@@ -647,6 +642,7 @@ public:
const CharStringMap& scriptMap() const { return script; }
const CharStringMap& territoryMap() const { return territory; }
const CharStringMap& variantMap() const { return variant; }
+ const CharStringMap& subdivisionMap() const { return subdivision; }
static void U_CALLCONV loadData(UErrorCode &status);
static UBool U_CALLCONV cleanup();
@@ -658,11 +654,13 @@ private:
CharStringMap scriptMap,
CharStringMap territoryMap,
CharStringMap variantMap,
+ CharStringMap subdivisionMap,
CharString* strings)
: language(std::move(languageMap)),
script(std::move(scriptMap)),
territory(std::move(territoryMap)),
variant(std::move(variantMap)),
+ subdivision(std::move(subdivisionMap)),
strings(strings) {
}
@@ -676,6 +674,7 @@ private:
CharStringMap script;
CharStringMap territory;
CharStringMap variant;
+ CharStringMap subdivision;
CharString* strings;
friend class AliasDataBuilder;
@@ -753,7 +752,7 @@ AliasDataBuilder::readLanguageAlias(
alias, strings, types, replacementIndexes, length,
#if U_DEBUG
[](const char* type) {
- // Assert the aliasFrom only contains the following possibilties
+ // Assert the aliasFrom only contains the following possibilities
// language_REGION_variant
// language_REGION
// language_variant
@@ -867,6 +866,34 @@ AliasDataBuilder::readVariantAlias(
}
/**
+ * Read the subdivisionAlias data from alias to strings+types+replacementIndexes.
+ * Allocate length items for types, to store the type field. Allocate length
+ * items for replacementIndexes, to store the index in the strings for the
+ * replacement regions.
+ */
+void
+AliasDataBuilder::readSubdivisionAlias(
+ UResourceBundle* alias,
+ UniqueCharStrings* strings,
+ LocalMemory<const char*>& types,
+ LocalMemory<int32_t>& replacementIndexes,
+ int32_t &length,
+ UErrorCode &status)
+{
+ return readAlias(
+ alias, strings, types, replacementIndexes, length,
+#if U_DEBUG
+ [](const char* type) {
+ U_ASSERT(uprv_strlen(type) >= 3 && uprv_strlen(type) <= 8);
+ },
+#else
+ [](const char*) {},
+#endif
+ [](const UnicodeString&) { },
+ status);
+}
+
+/**
* Initializes the alias data from the ICU resource bundles. The alias data
* contains alias of language, country, script and variants.
*
@@ -905,12 +932,14 @@ AliasDataBuilder::build(UErrorCode &status) {
ures_getByKey(metadataAlias.getAlias(), "territory", nullptr, &status));
LocalUResourceBundlePointer variantAlias(
ures_getByKey(metadataAlias.getAlias(), "variant", nullptr, &status));
+ LocalUResourceBundlePointer subdivisionAlias(
+ ures_getByKey(metadataAlias.getAlias(), "subdivision", nullptr, &status));
if (U_FAILURE(status)) {
return nullptr;
}
int32_t languagesLength = 0, scriptLength = 0, territoryLength = 0,
- variantLength = 0;
+ variantLength = 0, subdivisionLength = 0;
// Read the languageAlias into languageTypes, languageReplacementIndexes
// and strings
@@ -955,6 +984,16 @@ AliasDataBuilder::build(UErrorCode &status) {
variantReplacementIndexes,
variantLength, status);
+ // Read the subdivisionAlias into subdivisionTypes, subdivisionReplacementIndexes
+ // and strings
+ LocalMemory<const char*> subdivisionTypes;
+ LocalMemory<int32_t> subdivisionReplacementIndexes;
+ readSubdivisionAlias(subdivisionAlias.getAlias(),
+ &strings,
+ subdivisionTypes,
+ subdivisionReplacementIndexes,
+ subdivisionLength, status);
+
if (U_FAILURE(status)) {
return nullptr;
}
@@ -994,6 +1033,14 @@ AliasDataBuilder::build(UErrorCode &status) {
status);
}
+ // Build the subdivisionMap from subdivisionTypes & subdivisionReplacementIndexes.
+ CharStringMap subdivisionMap(2, status);
+ for (int32_t i = 0; U_SUCCESS(status) && i < subdivisionLength; i++) {
+ subdivisionMap.put(subdivisionTypes[i],
+ strings.get(subdivisionReplacementIndexes[i]),
+ status);
+ }
+
if (U_FAILURE(status)) {
return nullptr;
}
@@ -1004,6 +1051,7 @@ AliasDataBuilder::build(UErrorCode &status) {
std::move(scriptMap),
std::move(territoryMap),
std::move(variantMap),
+ std::move(subdivisionMap),
strings.orphanCharStrings());
if (data == nullptr) {
@@ -1105,6 +1153,14 @@ private:
// Replace by using variantAlias.
bool replaceVariant(UErrorCode& status);
+
+ // Replace by using subdivisionAlias.
+ bool replaceSubdivision(StringPiece subdivision,
+ CharString& output, UErrorCode& status);
+
+ // Replace transformed extensions.
+ bool replaceTransformedExtensions(
+ CharString& transformedExtensions, CharString& output, UErrorCode& status);
};
CharString&
@@ -1155,7 +1211,7 @@ AliasReplacer::parseLanguageReplacement(
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
- toBeFreed.addElement(str, status);
+ toBeFreed.addElementX(str, status);
char* data = str->data();
replacedLanguage = (const char*) data;
char* endOfField = uprv_strchr(data, '_');
@@ -1294,9 +1350,8 @@ AliasReplacer::replaceLanguage(
}
}
if (replacedExtensions != nullptr) {
- // TODO(ICU-21292)
// DO NOTHING
- // UTS35 does not specifiy what should we do if we have extensions in the
+ // UTS35 does not specify what should we do if we have extensions in the
// replacement. Currently we know only the following 4 "BCP47 LegacyRules" have
// extensions in them languageAlias:
// i_default => en_x_i_default
@@ -1370,7 +1425,7 @@ AliasReplacer::replaceTerritory(UVector& toBeFreed, UErrorCode& status)
return false;
}
replacedRegion = item->data();
- toBeFreed.addElement(item.orphan(), status);
+ toBeFreed.addElementX(item.orphan(), status);
}
U_ASSERT(!same(region, replacedRegion));
region = replacedRegion;
@@ -1435,6 +1490,105 @@ AliasReplacer::replaceVariant(UErrorCode& status)
return false;
}
+bool
+AliasReplacer::replaceSubdivision(
+ StringPiece subdivision, CharString& output, UErrorCode& status)
+{
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ const char *replacement = data->subdivisionMap().get(subdivision.data());
+ if (replacement != nullptr) {
+ const char* firstSpace = uprv_strchr(replacement, ' ');
+ // Found replacement data for this subdivision.
+ size_t len = (firstSpace != nullptr) ?
+ (firstSpace - replacement) : uprv_strlen(replacement);
+ if (2 <= len && len <= 8) {
+ output.append(replacement, (int32_t)len, status);
+ if (2 == len) {
+ // Add 'zzzz' based on changes to UTS #35 for CLDR-14312.
+ output.append("zzzz", 4, status);
+ }
+ }
+ return true;
+ }
+ return false;
+}
+
+bool
+AliasReplacer::replaceTransformedExtensions(
+ CharString& transformedExtensions, CharString& output, UErrorCode& status)
+{
+ // The content of the transformedExtensions will be modified in this
+ // function to NULL-terminating (tkey-tvalue) pairs.
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ int32_t len = transformedExtensions.length();
+ const char* str = transformedExtensions.data();
+ const char* tkey = ultag_getTKeyStart(str);
+ int32_t tlangLen = (tkey == str) ? 0 :
+ ((tkey == nullptr) ? len : static_cast<int32_t>((tkey - str - 1)));
+ CharStringByteSink sink(&output);
+ if (tlangLen > 0) {
+ Locale tlang = LocaleBuilder()
+ .setLanguageTag(StringPiece(str, tlangLen))
+ .build(status);
+ tlang.canonicalize(status);
+ tlang.toLanguageTag(sink, status);
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ T_CString_toLowerCase(output.data());
+ }
+ if (tkey != nullptr) {
+ // We need to sort the tfields by tkey
+ UVector tfields(status);
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ do {
+ const char* tvalue = uprv_strchr(tkey, '-');
+ if (tvalue == nullptr) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return false;
+ }
+ const char* nextTKey = ultag_getTKeyStart(tvalue);
+ if (nextTKey != nullptr) {
+ *((char*)(nextTKey-1)) = '\0'; // NULL terminate tvalue
+ }
+ tfields.insertElementAt((void*)tkey, tfields.size(), status);
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ tkey = nextTKey;
+ } while (tkey != nullptr);
+ tfields.sort([](UElement e1, UElement e2) -> int32_t {
+ return uprv_strcmp((const char*)e1.pointer, (const char*)e2.pointer);
+ }, status);
+ for (int32_t i = 0; i < tfields.size(); i++) {
+ if (output.length() > 0) {
+ output.append('-', status);
+ }
+ const char* tfield = (const char*) tfields.elementAt(i);
+ const char* tvalue = uprv_strchr(tfield, '-');
+ if (tvalue == nullptr) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return false;
+ }
+ // Split the "tkey-tvalue" pair string so that we can canonicalize the tvalue.
+ *((char*)tvalue++) = '\0'; // NULL terminate tkey
+ output.append(tfield, status).append('-', status);
+ const char* bcpTValue = ulocimp_toBcpType(tfield, tvalue, nullptr, nullptr);
+ output.append((bcpTValue == nullptr) ? tvalue : bcpTValue, status);
+ }
+ }
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ return true;
+}
+
CharString&
AliasReplacer::outputToString(
CharString& out, UErrorCode status)
@@ -1452,9 +1606,8 @@ AliasReplacer::outputToString(
if (!notEmpty(script) && !notEmpty(region)) {
out.append(SEP_CHAR, status);
}
- variants.sort([](UElement e1, UElement e2) -> int8_t {
- return uprv_strcmp(
- (const char*)e1.pointer, (const char*)e2.pointer);
+ variants.sort([](UElement e1, UElement e2) -> int32_t {
+ return uprv_strcmp((const char*)e1.pointer, (const char*)e2.pointer);
}, status);
int32_t variantsStart = out.length();
for (int32_t i = 0; i < variants.size(); i++) {
@@ -1497,7 +1650,6 @@ AliasReplacer::replace(const Locale& locale, CharString& out, UErrorCode& status
region = nullptr;
}
const char* variantsStr = locale.getVariant();
- const char* extensionsStr = locale_getKeywordsStart(locale.getName());
CharString variantsBuff(variantsStr, -1, status);
if (!variantsBuff.isEmpty()) {
if (U_FAILURE(status)) { return false; }
@@ -1507,17 +1659,16 @@ AliasReplacer::replace(const Locale& locale, CharString& out, UErrorCode& status
while ((end = uprv_strchr(start, SEP_CHAR)) != nullptr &&
U_SUCCESS(status)) {
*end = NULL_CHAR; // null terminate inside variantsBuff
- variants.addElement(start, status);
+ variants.addElementX(start, status);
start = end + 1;
}
- variants.addElement(start, status);
+ variants.addElementX(start, status);
}
if (U_FAILURE(status)) { return false; }
// Sort the variants
- variants.sort([](UElement e1, UElement e2) -> int8_t {
- return uprv_strcmp(
- (const char*)e1.pointer, (const char*)e2.pointer);
+ variants.sort([](UElement e1, UElement e2) -> int32_t {
+ return uprv_strcmp((const char*)e1.pointer, (const char*)e2.pointer);
}, status);
// A changed count to assert when loop too many times.
@@ -1559,13 +1710,54 @@ AliasReplacer::replace(const Locale& locale, CharString& out, UErrorCode& status
} // while(1)
if (U_FAILURE(status)) { return false; }
- // Nothing changed and we know the order of the vaiants are not change
+ // Nothing changed and we know the order of the variants are not change
// because we have no variant or only one.
- if (changed == 0 && variants.size() <= 1) {
+ const char* extensionsStr = locale_getKeywordsStart(locale.getName());
+ if (changed == 0 && variants.size() <= 1 && extensionsStr == nullptr) {
return false;
}
outputToString(out, status);
+ if (U_FAILURE(status)) {
+ return false;
+ }
if (extensionsStr != nullptr) {
+ changed = 0;
+ Locale temp(locale);
+ LocalPointer<icu::StringEnumeration> iter(locale.createKeywords(status));
+ if (U_SUCCESS(status) && !iter.isNull()) {
+ const char* key;
+ while ((key = iter->next(nullptr, status)) != nullptr) {
+ if (uprv_strcmp("sd", key) == 0 || uprv_strcmp("rg", key) == 0 ||
+ uprv_strcmp("t", key) == 0) {
+ CharString value;
+ CharStringByteSink valueSink(&value);
+ locale.getKeywordValue(key, valueSink, status);
+ if (U_FAILURE(status)) {
+ status = U_ZERO_ERROR;
+ continue;
+ }
+ CharString replacement;
+ if (uprv_strlen(key) == 2) {
+ if (replaceSubdivision(value.toStringPiece(), replacement, status)) {
+ changed++;
+ temp.setKeywordValue(key, replacement.data(), status);
+ }
+ } else {
+ U_ASSERT(uprv_strcmp(key, "t") == 0);
+ if (replaceTransformedExtensions(value, replacement, status)) {
+ changed++;
+ temp.setKeywordValue(key, replacement.data(), status);
+ }
+ }
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ }
+ }
+ }
+ if (changed != 0) {
+ extensionsStr = locale_getKeywordsStart(temp.getName());
+ }
out.append(extensionsStr, status);
}
if (U_FAILURE(status)) {
@@ -1573,8 +1765,6 @@ AliasReplacer::replace(const Locale& locale, CharString& out, UErrorCode& status
}
// If the tag is not changed, return.
if (uprv_strcmp(out.data(), locale.getName()) == 0) {
- U_ASSERT(changed == 0);
- U_ASSERT(variants.size() > 1);
out.clear();
return false;
}
@@ -1636,7 +1826,7 @@ Locale& Locale::init(const char* localeID, UBool canonicalize)
{
fIsBogus = FALSE;
/* Free our current storage */
- if (baseName != fullName) {
+ if ((baseName != fullName) && (baseName != fullNameBuffer)) {
uprv_free(baseName);
}
baseName = NULL;
@@ -1672,6 +1862,7 @@ Locale& Locale::init(const char* localeID, UBool canonicalize)
uloc_getName(localeID, fullName, sizeof(fullNameBuffer), &err);
if(err == U_BUFFER_OVERFLOW_ERROR || length >= (int32_t)sizeof(fullNameBuffer)) {
+ U_ASSERT(baseName == nullptr);
/*Go to heap for the fullName if necessary*/
fullName = (char *)uprv_malloc(sizeof(char)*(length + 1));
if(fullName == 0) {
@@ -1825,7 +2016,7 @@ Locale::hashCode() const
void
Locale::setToBogus() {
/* Free our current storage */
- if(baseName != fullName) {
+ if((baseName != fullName) && (baseName != fullNameBuffer)) {
uprv_free(baseName);
}
baseName = NULL;
@@ -2227,7 +2418,7 @@ private:
public:
static UClassID U_EXPORT2 getStaticClassID(void) { return (UClassID)&fgClassID; }
- virtual UClassID getDynamicClassID(void) const { return getStaticClassID(); }
+ virtual UClassID getDynamicClassID(void) const override { return getStaticClassID(); }
public:
KeywordEnumeration(const char *keys, int32_t keywordLen, int32_t currentIndex, UErrorCode &status)
: keywords((char *)&fgClassID), current((char *)&fgClassID), length(0) {
@@ -2251,13 +2442,13 @@ public:
virtual ~KeywordEnumeration();
- virtual StringEnumeration * clone() const
+ virtual StringEnumeration * clone() const override
{
UErrorCode status = U_ZERO_ERROR;
return new KeywordEnumeration(keywords, length, (int32_t)(current - keywords), status);
}
- virtual int32_t count(UErrorCode &/*status*/) const {
+ virtual int32_t count(UErrorCode &/*status*/) const override {
char *kw = keywords;
int32_t result = 0;
while(*kw) {
@@ -2267,7 +2458,7 @@ public:
return result;
}
- virtual const char* next(int32_t* resultLength, UErrorCode& status) {
+ virtual const char* next(int32_t* resultLength, UErrorCode& status) override {
const char* result;
int32_t len;
if(U_SUCCESS(status) && *current != 0) {
@@ -2286,13 +2477,13 @@ public:
return result;
}
- virtual const UnicodeString* snext(UErrorCode& status) {
+ virtual const UnicodeString* snext(UErrorCode& status) override {
int32_t resultLength = 0;
const char *s = next(&resultLength, status);
return setChars(s, resultLength, status);
}
- virtual void reset(UErrorCode& /*status*/) {
+ virtual void reset(UErrorCode& /*status*/) override {
current = keywords;
}
};
@@ -2310,18 +2501,18 @@ public:
using KeywordEnumeration::KeywordEnumeration;
virtual ~UnicodeKeywordEnumeration();
- virtual const char* next(int32_t* resultLength, UErrorCode& status) {
+ virtual const char* next(int32_t* resultLength, UErrorCode& status) override {
const char* legacy_key = KeywordEnumeration::next(nullptr, status);
- if (U_SUCCESS(status) && legacy_key != nullptr) {
+ while (U_SUCCESS(status) && legacy_key != nullptr) {
const char* key = uloc_toUnicodeLocaleKey(legacy_key);
- if (key == nullptr) {
- status = U_ILLEGAL_ARGUMENT_ERROR;
- } else {
+ if (key != nullptr) {
if (resultLength != nullptr) {
*resultLength = static_cast<int32_t>(uprv_strlen(key));
}
return key;
}
+ // Not a Unicode keyword, could be a t, x or other, continue to look at the next one.
+ legacy_key = KeywordEnumeration::next(nullptr, status);
}
if (resultLength != nullptr) *resultLength = 0;
return nullptr;
@@ -2478,6 +2669,9 @@ Locale::setKeywordValue(const char* keywordName, const char* keywordValue, UErro
if (fullName != fullNameBuffer) {
// if full Name is already on the heap, need to free it.
uprv_free(fullName);
+ if (baseName == fullName) {
+ baseName = newFullName; // baseName should not point to freed memory.
+ }
}
fullName = newFullName;
status = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/common/loclikely.cpp b/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
index 94a60aba3e0..d80096b588e 100644
--- a/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
@@ -115,7 +115,7 @@ findLikelySubtags(const char* localeID,
* @param tag The tag to add.
* @param tagLength The length of the tag.
* @param buffer The output buffer.
- * @param bufferLength The length of the output buffer. This is an input/ouput parameter.
+ * @param bufferLength The length of the output buffer. This is an input/output parameter.
**/
static void U_CALLCONV
appendTag(
@@ -1181,13 +1181,13 @@ error:
}
}
-static UBool
+static int32_t
do_canonicalize(const char* localeID,
char* buffer,
int32_t bufferCapacity,
UErrorCode* err)
{
- uloc_canonicalize(
+ int32_t canonicalizedSize = uloc_canonicalize(
localeID,
buffer,
bufferCapacity,
@@ -1195,16 +1195,14 @@ do_canonicalize(const char* localeID,
if (*err == U_STRING_NOT_TERMINATED_WARNING ||
*err == U_BUFFER_OVERFLOW_ERROR) {
- *err = U_ILLEGAL_ARGUMENT_ERROR;
-
- return FALSE;
+ return canonicalizedSize;
}
else if (U_FAILURE(*err)) {
- return FALSE;
+ return -1;
}
else {
- return TRUE;
+ return canonicalizedSize;
}
}
@@ -1241,12 +1239,17 @@ static UBool
_ulocimp_addLikelySubtags(const char* localeID,
icu::ByteSink& sink,
UErrorCode* status) {
- char localeBuffer[ULOC_FULLNAME_CAPACITY];
-
- if (do_canonicalize(localeID, localeBuffer, sizeof localeBuffer, status)) {
- return _uloc_addLikelySubtags(localeBuffer, sink, status);
+ PreflightingLocaleIDBuffer localeBuffer;
+ do {
+ localeBuffer.requestedCapacity = do_canonicalize(localeID, localeBuffer.getBuffer(),
+ localeBuffer.getCapacity(), status);
+ } while (localeBuffer.needToTryAgain(status));
+
+ if (U_SUCCESS(*status)) {
+ return _uloc_addLikelySubtags(localeBuffer.getBuffer(), sink, status);
+ } else {
+ return FALSE;
}
- return FALSE;
}
U_CAPI void U_EXPORT2
@@ -1289,11 +1292,13 @@ U_CAPI void U_EXPORT2
ulocimp_minimizeSubtags(const char* localeID,
icu::ByteSink& sink,
UErrorCode* status) {
- char localeBuffer[ULOC_FULLNAME_CAPACITY];
-
- if (do_canonicalize(localeID, localeBuffer, sizeof localeBuffer, status)) {
- _uloc_minimizeSubtags(localeBuffer, sink, status);
- }
+ PreflightingLocaleIDBuffer localeBuffer;
+ do {
+ localeBuffer.requestedCapacity = do_canonicalize(localeID, localeBuffer.getBuffer(),
+ localeBuffer.getCapacity(), status);
+ } while (localeBuffer.needToTryAgain(status));
+
+ _uloc_minimizeSubtags(localeBuffer.getBuffer(), sink, status);
}
// Pairs of (language subtag, + or -) for finding out fast if common languages
diff --git a/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp b/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp
index a031bfa5872..aa592e6ea80 100644
--- a/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/loclikelysubtags.cpp
@@ -320,7 +320,8 @@ XLikelySubtags::~XLikelySubtags() {
LSR XLikelySubtags::makeMaximizedLsrFrom(const Locale &locale, UErrorCode &errorCode) const {
const char *name = locale.getName();
if (uprv_isAtSign(name[0]) && name[1] == 'x' && name[2] == '=') { // name.startsWith("@x=")
- // Private use language tag x-subtag-subtag...
+ // Private use language tag x-subtag-subtag... which CLDR changes to
+ // und-x-subtag-subtag...
return LSR(name, "", "", LSR::EXPLICIT_LSR);
}
return makeMaximizedLsr(locale.getLanguage(), locale.getScript(), locale.getCountry(),
diff --git a/Build/source/libs/icu/icu-src/source/common/lsr.cpp b/Build/source/libs/icu/icu-src/source/common/lsr.cpp
index b81808f2c4a..1f0b69ab0fd 100644
--- a/Build/source/libs/icu/icu-src/source/common/lsr.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/lsr.cpp
@@ -72,7 +72,7 @@ UBool LSR::isEquivalentTo(const LSR &other) const {
(regionIndex > 0 || uprv_strcmp(region, other.region) == 0);
}
-UBool LSR::operator==(const LSR &other) const {
+bool LSR::operator==(const LSR &other) const {
return
uprv_strcmp(language, other.language) == 0 &&
uprv_strcmp(script, other.script) == 0 &&
diff --git a/Build/source/libs/icu/icu-src/source/common/lsr.h b/Build/source/libs/icu/icu-src/source/common/lsr.h
index a33f8552453..af993c11d60 100644
--- a/Build/source/libs/icu/icu-src/source/common/lsr.h
+++ b/Build/source/libs/icu/icu-src/source/common/lsr.h
@@ -65,9 +65,9 @@ struct LSR final : public UMemory {
static int32_t indexForRegion(const char *region);
UBool isEquivalentTo(const LSR &other) const;
- UBool operator==(const LSR &other) const;
+ bool operator==(const LSR &other) const;
- inline UBool operator!=(const LSR &other) const {
+ inline bool operator!=(const LSR &other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/lstmbe.cpp b/Build/source/libs/icu/icu-src/source/common/lstmbe.cpp
new file mode 100644
index 00000000000..3793abceb3f
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/common/lstmbe.cpp
@@ -0,0 +1,855 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include <utility>
+#include <ctgmath>
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#include "brkeng.h"
+#include "charstr.h"
+#include "cmemory.h"
+#include "lstmbe.h"
+#include "putilimp.h"
+#include "uassert.h"
+#include "ubrkimpl.h"
+#include "uresimp.h"
+#include "uvectr32.h"
+#include "uvector.h"
+
+#include "unicode/brkiter.h"
+#include "unicode/resbund.h"
+#include "unicode/ubrk.h"
+#include "unicode/uniset.h"
+#include "unicode/ustring.h"
+#include "unicode/utf.h"
+
+U_NAMESPACE_BEGIN
+
+// Uncomment the following #define to debug.
+// #define LSTM_DEBUG 1
+// #define LSTM_VECTORIZER_DEBUG 1
+
+/**
+ * Interface for reading 1D array.
+ */
+class ReadArray1D {
+public:
+ virtual ~ReadArray1D();
+ virtual int32_t d1() const = 0;
+ virtual float get(int32_t i) const = 0;
+
+#ifdef LSTM_DEBUG
+ void print() const {
+ printf("\n[");
+ for (int32_t i = 0; i < d1(); i++) {
+ printf("%0.8e ", get(i));
+ if (i % 4 == 3) printf("\n");
+ }
+ printf("]\n");
+ }
+#endif
+};
+
+ReadArray1D::~ReadArray1D()
+{
+}
+
+/**
+ * Interface for reading 2D array.
+ */
+class ReadArray2D {
+public:
+ virtual ~ReadArray2D();
+ virtual int32_t d1() const = 0;
+ virtual int32_t d2() const = 0;
+ virtual float get(int32_t i, int32_t j) const = 0;
+};
+
+ReadArray2D::~ReadArray2D()
+{
+}
+
+/**
+ * A class to index a float array as a 1D Array without owning the pointer or
+ * copy the data.
+ */
+class ConstArray1D : public ReadArray1D {
+public:
+ ConstArray1D() : data_(nullptr), d1_(0) {}
+
+ ConstArray1D(const float* data, int32_t d1) : data_(data), d1_(d1) {}
+
+ virtual ~ConstArray1D();
+
+ // Init the object, the object does not own the data nor copy.
+ // It is designed to directly use data from memory mapped resources.
+ void init(const int32_t* data, int32_t d1) {
+ U_ASSERT(IEEE_754 == 1);
+ data_ = reinterpret_cast<const float*>(data);
+ d1_ = d1;
+ }
+
+ // ReadArray1D methods.
+ virtual int32_t d1() const override { return d1_; }
+ virtual float get(int32_t i) const override {
+ U_ASSERT(i < d1_);
+ return data_[i];
+ }
+
+private:
+ const float* data_;
+ int32_t d1_;
+};
+
+ConstArray1D::~ConstArray1D()
+{
+}
+
+/**
+ * A class to index a float array as a 2D Array without owning the pointer or
+ * copy the data.
+ */
+class ConstArray2D : public ReadArray2D {
+public:
+ ConstArray2D() : data_(nullptr), d1_(0), d2_(0) {}
+
+ ConstArray2D(const float* data, int32_t d1, int32_t d2)
+ : data_(data), d1_(d1), d2_(d2) {}
+
+ virtual ~ConstArray2D();
+
+ // Init the object, the object does not own the data nor copy.
+ // It is designed to directly use data from memory mapped resources.
+ void init(const int32_t* data, int32_t d1, int32_t d2) {
+ U_ASSERT(IEEE_754 == 1);
+ data_ = reinterpret_cast<const float*>(data);
+ d1_ = d1;
+ d2_ = d2;
+ }
+
+ // ReadArray2D methods.
+ inline int32_t d1() const override { return d1_; }
+ inline int32_t d2() const override { return d2_; }
+ float get(int32_t i, int32_t j) const override {
+ U_ASSERT(i < d1_);
+ U_ASSERT(j < d2_);
+ return data_[i * d2_ + j];
+ }
+
+ // Expose the ith row as a ConstArray1D
+ inline ConstArray1D row(int32_t i) const {
+ U_ASSERT(i < d1_);
+ return ConstArray1D(data_ + i * d2_, d2_);
+ }
+
+private:
+ const float* data_;
+ int32_t d1_;
+ int32_t d2_;
+};
+
+ConstArray2D::~ConstArray2D()
+{
+}
+
+/**
+ * A class to allocate data as a writable 1D array.
+ * This is the main class implement matrix operation.
+ */
+class Array1D : public ReadArray1D {
+public:
+ Array1D() : memory_(nullptr), data_(nullptr), d1_(0) {}
+ Array1D(int32_t d1, UErrorCode &status)
+ : memory_(uprv_malloc(d1 * sizeof(float))),
+ data_((float*)memory_), d1_(d1) {
+ if (U_SUCCESS(status)) {
+ if (memory_ == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ clear();
+ }
+ }
+
+ virtual ~Array1D();
+
+ // A special constructor which does not own the memory but writeable
+ // as a slice of an array.
+ Array1D(float* data, int32_t d1)
+ : memory_(nullptr), data_(data), d1_(d1) {}
+
+ // ReadArray1D methods.
+ virtual int32_t d1() const override { return d1_; }
+ virtual float get(int32_t i) const override {
+ U_ASSERT(i < d1_);
+ return data_[i];
+ }
+
+ // Return the index which point to the max data in the array.
+ inline int32_t maxIndex() const {
+ int32_t index = 0;
+ float max = data_[0];
+ for (int32_t i = 1; i < d1_; i++) {
+ if (data_[i] > max) {
+ max = data_[i];
+ index = i;
+ }
+ }
+ return index;
+ }
+
+ // Slice part of the array to a new one.
+ inline Array1D slice(int32_t from, int32_t size) const {
+ U_ASSERT(from >= 0);
+ U_ASSERT(from < d1_);
+ U_ASSERT(from + size <= d1_);
+ return Array1D(data_ + from, size);
+ }
+
+ // Add dot product of a 1D array and a 2D array into this one.
+ inline Array1D& addDotProduct(const ReadArray1D& a, const ReadArray2D& b) {
+ U_ASSERT(a.d1() == b.d1());
+ U_ASSERT(b.d2() == d1());
+ for (int32_t i = 0; i < d1(); i++) {
+ for (int32_t j = 0; j < a.d1(); j++) {
+ data_[i] += a.get(j) * b.get(j, i);
+ }
+ }
+ return *this;
+ }
+
+ // Hadamard Product the values of another array of the same size into this one.
+ inline Array1D& hadamardProduct(const ReadArray1D& a) {
+ U_ASSERT(a.d1() == d1());
+ for (int32_t i = 0; i < d1(); i++) {
+ data_[i] *= a.get(i);
+ }
+ return *this;
+ }
+
+ // Add the Hadamard Product of two arrays of the same size into this one.
+ inline Array1D& addHadamardProduct(const ReadArray1D& a, const ReadArray1D& b) {
+ U_ASSERT(a.d1() == d1());
+ U_ASSERT(b.d1() == d1());
+ for (int32_t i = 0; i < d1(); i++) {
+ data_[i] += a.get(i) * b.get(i);
+ }
+ return *this;
+ }
+
+ // Add the values of another array of the same size into this one.
+ inline Array1D& add(const ReadArray1D& a) {
+ U_ASSERT(a.d1() == d1());
+ for (int32_t i = 0; i < d1(); i++) {
+ data_[i] += a.get(i);
+ }
+ return *this;
+ }
+
+ // Assign the values of another array of the same size into this one.
+ inline Array1D& assign(const ReadArray1D& a) {
+ U_ASSERT(a.d1() == d1());
+ for (int32_t i = 0; i < d1(); i++) {
+ data_[i] = a.get(i);
+ }
+ return *this;
+ }
+
+ // Apply tanh to all the elements in the array.
+ inline Array1D& tanh() {
+ return tanh(*this);
+ }
+
+ // Apply tanh of a and store into this array.
+ inline Array1D& tanh(const Array1D& a) {
+ U_ASSERT(a.d1() == d1());
+ for (int32_t i = 0; i < d1_; i++) {
+ data_[i] = std::tanh(a.get(i));
+ }
+ return *this;
+ }
+
+ // Apply sigmoid to all the elements in the array.
+ inline Array1D& sigmoid() {
+ for (int32_t i = 0; i < d1_; i++) {
+ data_[i] = 1.0f/(1.0f + expf(-data_[i]));
+ }
+ return *this;
+ }
+
+ inline Array1D& clear() {
+ uprv_memset(data_, 0, d1_ * sizeof(float));
+ return *this;
+ }
+
+private:
+ void* memory_;
+ float* data_;
+ int32_t d1_;
+};
+
+Array1D::~Array1D()
+{
+ uprv_free(memory_);
+}
+
+class Array2D : public ReadArray2D {
+public:
+ Array2D() : memory_(nullptr), data_(nullptr), d1_(0), d2_(0) {}
+ Array2D(int32_t d1, int32_t d2, UErrorCode &status)
+ : memory_(uprv_malloc(d1 * d2 * sizeof(float))),
+ data_((float*)memory_), d1_(d1), d2_(d2) {
+ if (U_SUCCESS(status)) {
+ if (memory_ == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ clear();
+ }
+ }
+ virtual ~Array2D();
+
+ // ReadArray2D methods.
+ virtual int32_t d1() const override { return d1_; }
+ virtual int32_t d2() const override { return d2_; }
+ virtual float get(int32_t i, int32_t j) const override {
+ U_ASSERT(i < d1_);
+ U_ASSERT(j < d2_);
+ return data_[i * d2_ + j];
+ }
+
+ inline Array1D row(int32_t i) const {
+ U_ASSERT(i < d1_);
+ return Array1D(data_ + i * d2_, d2_);
+ }
+
+ inline Array2D& clear() {
+ uprv_memset(data_, 0, d1_ * d2_ * sizeof(float));
+ return *this;
+ }
+
+private:
+ void* memory_;
+ float* data_;
+ int32_t d1_;
+ int32_t d2_;
+};
+
+Array2D::~Array2D()
+{
+ uprv_free(memory_);
+}
+
+typedef enum {
+ BEGIN,
+ INSIDE,
+ END,
+ SINGLE
+} LSTMClass;
+
+typedef enum {
+ UNKNOWN,
+ CODE_POINTS,
+ GRAPHEME_CLUSTER,
+} EmbeddingType;
+
+struct LSTMData : public UMemory {
+ LSTMData(UResourceBundle* rb, UErrorCode &status);
+ ~LSTMData();
+ UHashtable* fDict;
+ EmbeddingType fType;
+ const UChar* fName;
+ ConstArray2D fEmbedding;
+ ConstArray2D fForwardW;
+ ConstArray2D fForwardU;
+ ConstArray1D fForwardB;
+ ConstArray2D fBackwardW;
+ ConstArray2D fBackwardU;
+ ConstArray1D fBackwardB;
+ ConstArray2D fOutputW;
+ ConstArray1D fOutputB;
+
+private:
+ UResourceBundle* fBundle;
+};
+
+LSTMData::LSTMData(UResourceBundle* rb, UErrorCode &status)
+ : fDict(nullptr), fType(UNKNOWN), fName(nullptr),
+ fBundle(rb)
+{
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (IEEE_754 != 1) {
+ status = U_UNSUPPORTED_ERROR;
+ return;
+ }
+ LocalUResourceBundlePointer embeddings_res(
+ ures_getByKey(rb, "embeddings", nullptr, &status));
+ int32_t embedding_size = ures_getInt(embeddings_res.getAlias(), &status);
+ LocalUResourceBundlePointer hunits_res(
+ ures_getByKey(rb, "hunits", nullptr, &status));
+ if (U_FAILURE(status)) return;
+ int32_t hunits = ures_getInt(hunits_res.getAlias(), &status);
+ const UChar* type = ures_getStringByKey(rb, "type", nullptr, &status);
+ if (U_FAILURE(status)) return;
+ if (u_strCompare(type, -1, u"codepoints", -1, false) == 0) {
+ fType = CODE_POINTS;
+ } else if (u_strCompare(type, -1, u"graphclust", -1, false) == 0) {
+ fType = GRAPHEME_CLUSTER;
+ }
+ fName = ures_getStringByKey(rb, "model", nullptr, &status);
+ LocalUResourceBundlePointer dataRes(ures_getByKey(rb, "data", nullptr, &status));
+ if (U_FAILURE(status)) return;
+ int32_t data_len = 0;
+ const int32_t* data = ures_getIntVector(dataRes.getAlias(), &data_len, &status);
+ fDict = uhash_open(uhash_hashUChars, uhash_compareUChars, nullptr, &status);
+
+ StackUResourceBundle stackTempBundle;
+ ResourceDataValue value;
+ ures_getValueWithFallback(rb, "dict", stackTempBundle.getAlias(), value, status);
+ ResourceArray stringArray = value.getArray(status);
+ int32_t num_index = stringArray.getSize();
+ if (U_FAILURE(status)) { return; }
+
+ // put dict into hash
+ int32_t stringLength;
+ for (int32_t idx = 0; idx < num_index; idx++) {
+ stringArray.getValue(idx, value);
+ const UChar* str = value.getString(stringLength, status);
+ uhash_putiAllowZero(fDict, (void*)str, idx, &status);
+ if (U_FAILURE(status)) return;
+#ifdef LSTM_VECTORIZER_DEBUG
+ printf("Assign [");
+ while (*str != 0x0000) {
+ printf("U+%04x ", *str);
+ str++;
+ }
+ printf("] map to %d\n", idx-1);
+#endif
+ }
+ int32_t mat1_size = (num_index + 1) * embedding_size;
+ int32_t mat2_size = embedding_size * 4 * hunits;
+ int32_t mat3_size = hunits * 4 * hunits;
+ int32_t mat4_size = 4 * hunits;
+ int32_t mat5_size = mat2_size;
+ int32_t mat6_size = mat3_size;
+ int32_t mat7_size = mat4_size;
+ int32_t mat8_size = 2 * hunits * 4;
+#if U_DEBUG
+ int32_t mat9_size = 4;
+ U_ASSERT(data_len == mat1_size + mat2_size + mat3_size + mat4_size + mat5_size +
+ mat6_size + mat7_size + mat8_size + mat9_size);
+#endif
+
+ fEmbedding.init(data, (num_index + 1), embedding_size);
+ data += mat1_size;
+ fForwardW.init(data, embedding_size, 4 * hunits);
+ data += mat2_size;
+ fForwardU.init(data, hunits, 4 * hunits);
+ data += mat3_size;
+ fForwardB.init(data, 4 * hunits);
+ data += mat4_size;
+ fBackwardW.init(data, embedding_size, 4 * hunits);
+ data += mat5_size;
+ fBackwardU.init(data, hunits, 4 * hunits);
+ data += mat6_size;
+ fBackwardB.init(data, 4 * hunits);
+ data += mat7_size;
+ fOutputW.init(data, 2 * hunits, 4);
+ data += mat8_size;
+ fOutputB.init(data, 4);
+}
+
+LSTMData::~LSTMData() {
+ uhash_close(fDict);
+ ures_close(fBundle);
+}
+
+class Vectorizer : public UMemory {
+public:
+ Vectorizer(UHashtable* dict) : fDict(dict) {}
+ virtual ~Vectorizer();
+ virtual void vectorize(UText *text, int32_t startPos, int32_t endPos,
+ UVector32 &offsets, UVector32 &indices,
+ UErrorCode &status) const = 0;
+protected:
+ int32_t stringToIndex(const UChar* str) const {
+ UBool found = false;
+ int32_t ret = uhash_getiAndFound(fDict, (const void*)str, &found);
+ if (!found) {
+ ret = fDict->count;
+ }
+#ifdef LSTM_VECTORIZER_DEBUG
+ printf("[");
+ while (*str != 0x0000) {
+ printf("U+%04x ", *str);
+ str++;
+ }
+ printf("] map to %d\n", ret);
+#endif
+ return ret;
+ }
+
+private:
+ UHashtable* fDict;
+};
+
+Vectorizer::~Vectorizer()
+{
+}
+
+class CodePointsVectorizer : public Vectorizer {
+public:
+ CodePointsVectorizer(UHashtable* dict) : Vectorizer(dict) {}
+ virtual ~CodePointsVectorizer();
+ virtual void vectorize(UText *text, int32_t startPos, int32_t endPos,
+ UVector32 &offsets, UVector32 &indices,
+ UErrorCode &status) const override;
+};
+
+CodePointsVectorizer::~CodePointsVectorizer()
+{
+}
+
+void CodePointsVectorizer::vectorize(
+ UText *text, int32_t startPos, int32_t endPos,
+ UVector32 &offsets, UVector32 &indices, UErrorCode &status) const
+{
+ if (offsets.ensureCapacity(endPos - startPos, status) &&
+ indices.ensureCapacity(endPos - startPos, status)) {
+ if (U_FAILURE(status)) return;
+ utext_setNativeIndex(text, startPos);
+ int32_t current;
+ UChar str[2] = {0, 0};
+ while (U_SUCCESS(status) &&
+ (current = (int32_t)utext_getNativeIndex(text)) < endPos) {
+ // Since the LSTMBreakEngine is currently only accept chars in BMP,
+ // we can ignore the possibility of hitting supplementary code
+ // point.
+ str[0] = (UChar) utext_next32(text);
+ U_ASSERT(!U_IS_SURROGATE(str[0]));
+ offsets.addElement(current, status);
+ indices.addElement(stringToIndex(str), status);
+ }
+ }
+}
+
+class GraphemeClusterVectorizer : public Vectorizer {
+public:
+ GraphemeClusterVectorizer(UHashtable* dict)
+ : Vectorizer(dict)
+ {
+ }
+ virtual ~GraphemeClusterVectorizer();
+ virtual void vectorize(UText *text, int32_t startPos, int32_t endPos,
+ UVector32 &offsets, UVector32 &indices,
+ UErrorCode &status) const override;
+};
+
+GraphemeClusterVectorizer::~GraphemeClusterVectorizer()
+{
+}
+
+constexpr int32_t MAX_GRAPHEME_CLSTER_LENGTH = 10;
+
+void GraphemeClusterVectorizer::vectorize(
+ UText *text, int32_t startPos, int32_t endPos,
+ UVector32 &offsets, UVector32 &indices, UErrorCode &status) const
+{
+ if (U_FAILURE(status)) return;
+ if (!offsets.ensureCapacity(endPos - startPos, status) ||
+ !indices.ensureCapacity(endPos - startPos, status)) {
+ return;
+ }
+ if (U_FAILURE(status)) return;
+ LocalPointer<BreakIterator> graphemeIter(BreakIterator::createCharacterInstance(Locale(), status));
+ if (U_FAILURE(status)) return;
+ graphemeIter->setText(text, status);
+ if (U_FAILURE(status)) return;
+
+ if (startPos != 0) {
+ graphemeIter->preceding(startPos);
+ }
+ int32_t last = startPos;
+ int32_t current = startPos;
+ UChar str[MAX_GRAPHEME_CLSTER_LENGTH];
+ while ((current = graphemeIter->next()) != BreakIterator::DONE) {
+ if (current >= endPos) {
+ break;
+ }
+ if (current > startPos) {
+ utext_extract(text, last, current, str, MAX_GRAPHEME_CLSTER_LENGTH, &status);
+ if (U_FAILURE(status)) return;
+ offsets.addElement(last, status);
+ indices.addElement(stringToIndex(str), status);
+ if (U_FAILURE(status)) return;
+ }
+ last = current;
+ }
+ if (U_FAILURE(status) || last >= endPos) {
+ return;
+ }
+ utext_extract(text, last, endPos, str, MAX_GRAPHEME_CLSTER_LENGTH, &status);
+ if (U_SUCCESS(status)) {
+ offsets.addElement(last, status);
+ indices.addElement(stringToIndex(str), status);
+ }
+}
+
+// Computing LSTM as stated in
+// https://en.wikipedia.org/wiki/Long_short-term_memory#LSTM_with_a_forget_gate
+// ifco is temp array allocate outside which does not need to be
+// input/output value but could avoid unnecessary memory alloc/free if passing
+// in.
+void compute(
+ int32_t hunits,
+ const ReadArray2D& W, const ReadArray2D& U, const ReadArray1D& b,
+ const ReadArray1D& x, Array1D& h, Array1D& c,
+ Array1D& ifco)
+{
+ // ifco = x * W + h * U + b
+ ifco.assign(b)
+ .addDotProduct(x, W)
+ .addDotProduct(h, U);
+
+ ifco.slice(0*hunits, hunits).sigmoid(); // i: sigmod
+ ifco.slice(1*hunits, hunits).sigmoid(); // f: sigmoid
+ ifco.slice(2*hunits, hunits).tanh(); // c_: tanh
+ ifco.slice(3*hunits, hunits).sigmoid(); // o: sigmod
+
+ c.hadamardProduct(ifco.slice(hunits, hunits))
+ .addHadamardProduct(ifco.slice(0, hunits), ifco.slice(2*hunits, hunits));
+
+ h.tanh(c)
+ .hadamardProduct(ifco.slice(3*hunits, hunits));
+}
+
+// Minimum word size
+static const int32_t MIN_WORD = 2;
+
+// Minimum number of characters for two words
+static const int32_t MIN_WORD_SPAN = MIN_WORD * 2;
+
+int32_t
+LSTMBreakEngine::divideUpDictionaryRange( UText *text,
+ int32_t startPos,
+ int32_t endPos,
+ UVector32 &foundBreaks,
+ UErrorCode& status) const {
+ if (U_FAILURE(status)) return 0;
+ int32_t beginFoundBreakSize = foundBreaks.size();
+ utext_setNativeIndex(text, startPos);
+ utext_moveIndex32(text, MIN_WORD_SPAN);
+ if (utext_getNativeIndex(text) >= endPos) {
+ return 0; // Not enough characters for two words
+ }
+ utext_setNativeIndex(text, startPos);
+
+ UVector32 offsets(status);
+ UVector32 indices(status);
+ if (U_FAILURE(status)) return 0;
+ fVectorizer->vectorize(text, startPos, endPos, offsets, indices, status);
+ if (U_FAILURE(status)) return 0;
+ int32_t* offsetsBuf = offsets.getBuffer();
+ int32_t* indicesBuf = indices.getBuffer();
+
+ int32_t input_seq_len = indices.size();
+ int32_t hunits = fData->fForwardU.d1();
+
+ // ----- Begin of all the Array memory allocation needed for this function
+ // Allocate temp array used inside compute()
+ Array1D ifco(4 * hunits, status);
+
+ Array1D c(hunits, status);
+ Array1D logp(4, status);
+
+ // TODO: limit size of hBackward. If input_seq_len is too big, we could
+ // run out of memory.
+ // Backward LSTM
+ Array2D hBackward(input_seq_len, hunits, status);
+
+ // Allocate fbRow and slice the internal array in two.
+ Array1D fbRow(2 * hunits, status);
+
+ // ----- End of all the Array memory allocation needed for this function
+ if (U_FAILURE(status)) return 0;
+
+ // To save the needed memory usage, the following is different from the
+ // Python or ICU4X implementation. We first perform the Backward LSTM
+ // and then merge the iteration of the forward LSTM and the output layer
+ // together because we only neetdto remember the h[t-1] for Forward LSTM.
+ for (int32_t i = input_seq_len - 1; i >= 0; i--) {
+ Array1D hRow = hBackward.row(i);
+ if (i != input_seq_len - 1) {
+ hRow.assign(hBackward.row(i+1));
+ }
+#ifdef LSTM_DEBUG
+ printf("hRow %d\n", i);
+ hRow.print();
+ printf("indicesBuf[%d] = %d\n", i, indicesBuf[i]);
+ printf("fData->fEmbedding.row(indicesBuf[%d]):\n", i);
+ fData->fEmbedding.row(indicesBuf[i]).print();
+#endif // LSTM_DEBUG
+ compute(hunits,
+ fData->fBackwardW, fData->fBackwardU, fData->fBackwardB,
+ fData->fEmbedding.row(indicesBuf[i]),
+ hRow, c, ifco);
+ }
+
+
+ Array1D forwardRow = fbRow.slice(0, hunits); // point to first half of data in fbRow.
+ Array1D backwardRow = fbRow.slice(hunits, hunits); // point to second half of data n fbRow.
+
+ // The following iteration merge the forward LSTM and the output layer
+ // together.
+ c.clear(); // reuse c since it is the same size.
+ for (int32_t i = 0; i < input_seq_len; i++) {
+#ifdef LSTM_DEBUG
+ printf("forwardRow %d\n", i);
+ forwardRow.print();
+#endif // LSTM_DEBUG
+ // Forward LSTM
+ // Calculate the result into forwardRow, which point to the data in the first half
+ // of fbRow.
+ compute(hunits,
+ fData->fForwardW, fData->fForwardU, fData->fForwardB,
+ fData->fEmbedding.row(indicesBuf[i]),
+ forwardRow, c, ifco);
+
+ // assign the data from hBackward.row(i) to second half of fbRowa.
+ backwardRow.assign(hBackward.row(i));
+
+ logp.assign(fData->fOutputB).addDotProduct(fbRow, fData->fOutputW);
+#ifdef LSTM_DEBUG
+ printf("backwardRow %d\n", i);
+ backwardRow.print();
+ printf("logp %d\n", i);
+ logp.print();
+#endif // LSTM_DEBUG
+
+ // current = argmax(logp)
+ LSTMClass current = (LSTMClass)logp.maxIndex();
+ // BIES logic.
+ if (current == BEGIN || current == SINGLE) {
+ if (i != 0) {
+ foundBreaks.addElement(offsetsBuf[i], status);
+ if (U_FAILURE(status)) return 0;
+ }
+ }
+ }
+ return foundBreaks.size() - beginFoundBreakSize;
+}
+
+Vectorizer* createVectorizer(const LSTMData* data, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return nullptr;
+ }
+ switch (data->fType) {
+ case CODE_POINTS:
+ return new CodePointsVectorizer(data->fDict);
+ break;
+ case GRAPHEME_CLUSTER:
+ return new GraphemeClusterVectorizer(data->fDict);
+ break;
+ default:
+ break;
+ }
+ UPRV_UNREACHABLE_EXIT;
+}
+
+LSTMBreakEngine::LSTMBreakEngine(const LSTMData* data, const UnicodeSet& set, UErrorCode &status)
+ : DictionaryBreakEngine(), fData(data), fVectorizer(createVectorizer(fData, status))
+{
+ if (U_FAILURE(status)) {
+ fData = nullptr; // If failure, we should not delete fData in destructor because the caller will do so.
+ return;
+ }
+ setCharacters(set);
+}
+
+LSTMBreakEngine::~LSTMBreakEngine() {
+ delete fData;
+ delete fVectorizer;
+}
+
+const UChar* LSTMBreakEngine::name() const {
+ return fData->fName;
+}
+
+UnicodeString defaultLSTM(UScriptCode script, UErrorCode& status) {
+ // open root from brkitr tree.
+ UResourceBundle *b = ures_open(U_ICUDATA_BRKITR, "", &status);
+ b = ures_getByKeyWithFallback(b, "lstm", b, &status);
+ UnicodeString result = ures_getUnicodeStringByKey(b, uscript_getShortName(script), &status);
+ ures_close(b);
+ return result;
+}
+
+U_CAPI const LSTMData* U_EXPORT2 CreateLSTMDataForScript(UScriptCode script, UErrorCode& status)
+{
+ if (script != USCRIPT_KHMER && script != USCRIPT_LAO && script != USCRIPT_MYANMAR && script != USCRIPT_THAI) {
+ return nullptr;
+ }
+ UnicodeString name = defaultLSTM(script, status);
+ if (U_FAILURE(status)) return nullptr;
+ CharString namebuf;
+ namebuf.appendInvariantChars(name, status).truncate(namebuf.lastIndexOf('.'));
+
+ LocalUResourceBundlePointer rb(
+ ures_openDirect(U_ICUDATA_BRKITR, namebuf.data(), &status));
+ if (U_FAILURE(status)) return nullptr;
+
+ return CreateLSTMData(rb.orphan(), status);
+}
+
+U_CAPI const LSTMData* U_EXPORT2 CreateLSTMData(UResourceBundle* rb, UErrorCode& status)
+{
+ return new LSTMData(rb, status);
+}
+
+U_CAPI const LanguageBreakEngine* U_EXPORT2
+CreateLSTMBreakEngine(UScriptCode script, const LSTMData* data, UErrorCode& status)
+{
+ UnicodeString unicodeSetString;
+ switch(script) {
+ case USCRIPT_THAI:
+ unicodeSetString = UnicodeString(u"[[:Thai:]&[:LineBreak=SA:]]");
+ break;
+ case USCRIPT_MYANMAR:
+ unicodeSetString = UnicodeString(u"[[:Mymr:]&[:LineBreak=SA:]]");
+ break;
+ default:
+ delete data;
+ return nullptr;
+ }
+ UnicodeSet unicodeSet;
+ unicodeSet.applyPattern(unicodeSetString, status);
+ const LanguageBreakEngine* engine = new LSTMBreakEngine(data, unicodeSet, status);
+ if (U_FAILURE(status) || engine == nullptr) {
+ if (engine != nullptr) {
+ delete engine;
+ } else {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ return nullptr;
+ }
+ return engine;
+}
+
+U_CAPI void U_EXPORT2 DeleteLSTMData(const LSTMData* data)
+{
+ delete data;
+}
+
+U_CAPI const UChar* U_EXPORT2 LSTMDataName(const LSTMData* data)
+{
+ return data->fName;
+}
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
diff --git a/Build/source/libs/icu/icu-src/source/common/lstmbe.h b/Build/source/libs/icu/icu-src/source/common/lstmbe.h
new file mode 100644
index 00000000000..c3f7ecf8154
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/common/lstmbe.h
@@ -0,0 +1,87 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#ifndef LSTMBE_H
+#define LSTMBE_H
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#include "unicode/uniset.h"
+#include "unicode/ures.h"
+#include "unicode/utext.h"
+#include "unicode/utypes.h"
+
+#include "brkeng.h"
+#include "dictbe.h"
+#include "uvectr32.h"
+
+U_NAMESPACE_BEGIN
+
+class Vectorizer;
+struct LSTMData;
+
+/*******************************************************************
+ * LSTMBreakEngine
+ */
+
+/**
+ * <p>LSTMBreakEngine is a kind of DictionaryBreakEngine that uses a
+ * LSTM to determine language-specific breaks.</p>
+ *
+ * <p>After it is constructed a LSTMBreakEngine may be shared between
+ * threads without synchronization.</p>
+ */
+class LSTMBreakEngine : public DictionaryBreakEngine {
+public:
+ /**
+ * <p>Constructor.</p>
+ */
+ LSTMBreakEngine(const LSTMData* data, const UnicodeSet& set, UErrorCode &status);
+
+ /**
+ * <p>Virtual destructor.</p>
+ */
+ virtual ~LSTMBreakEngine();
+
+ virtual const UChar* name() const;
+
+protected:
+ /**
+ * <p>Divide up a range of known dictionary characters handled by this break engine.</p>
+ *
+ * @param text A UText representing the text
+ * @param rangeStart The start of the range of dictionary characters
+ * @param rangeEnd The end of the range of dictionary characters
+ * @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param status Information on any errors encountered.
+ * @return The number of breaks found
+ */
+ virtual int32_t divideUpDictionaryRange(UText *text,
+ int32_t rangeStart,
+ int32_t rangeEnd,
+ UVector32 &foundBreaks,
+ UErrorCode& status) const override;
+private:
+ const LSTMData* fData;
+ const Vectorizer* fVectorizer;
+};
+
+U_CAPI const LanguageBreakEngine* U_EXPORT2 CreateLSTMBreakEngine(
+ UScriptCode script, const LSTMData* data, UErrorCode& status);
+
+U_CAPI const LSTMData* U_EXPORT2 CreateLSTMData(
+ UResourceBundle* rb, UErrorCode& status);
+
+U_CAPI const LSTMData* U_EXPORT2 CreateLSTMDataForScript(
+ UScriptCode script, UErrorCode& status);
+
+U_CAPI void U_EXPORT2 DeleteLSTMData(const LSTMData* data);
+U_CAPI const UChar* U_EXPORT2 LSTMDataName(const LSTMData* data);
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
+#endif /* LSTMBE_H */
diff --git a/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp b/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
index f223d067116..66fd2f4c93b 100644
--- a/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
@@ -309,10 +309,10 @@ MessagePattern::clear() {
numericValuesLength=0;
}
-UBool
+bool
MessagePattern::operator==(const MessagePattern &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
return
aposMode==other.aposMode &&
@@ -387,10 +387,10 @@ MessagePattern::getPluralOffset(int32_t pluralStart) const {
// MessagePattern::Part ---------------------------------------------------- ***
-UBool
+bool
MessagePattern::Part::operator==(const Part &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
return
type==other.type &&
diff --git a/Build/source/libs/icu/icu-src/source/common/msvcres.h b/Build/source/libs/icu/icu-src/source/common/msvcres.h
index 0cace85e747..d71b5ac922a 100644
--- a/Build/source/libs/icu/icu-src/source/common/msvcres.h
+++ b/Build/source/libs/icu/icu-src/source/common/msvcres.h
@@ -19,7 +19,7 @@ STLPort's broken stddef.h from being used when rc.exe parses this file.
#include "unicode/uversion.h"
-#define ICU_WEBSITE "http://icu-project.org"
+#define ICU_WEBSITE "https://icu.unicode.org/"
#define ICU_COMPANY "The ICU Project"
#define ICU_PRODUCT_PREFIX "ICU"
#define ICU_PRODUCT "International Components for Unicode"
diff --git a/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h b/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
index 455cc0c4285..a774868981d 100644
--- a/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
@@ -1,6 +1,5 @@
-// © 2016 and later: Unicode, Inc. and others.
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
-//
// Copyright (C) 1999-2016, International Business Machines
// Corporation and others. All Rights Reserved.
//
@@ -8,31 +7,30 @@
//
// machine-generated by: icu/source/tools/gennorm2/n2builder.cpp
-
#ifdef INCLUDED_FROM_NORMALIZER2_CPP
static const UVersionInfo norm2_nfc_data_formatVersion={4,0,0,0};
-static const UVersionInfo norm2_nfc_data_dataVersion={0xd,0,0,0};
+static const UVersionInfo norm2_nfc_data_dataVersion={0xe,0,0,0};
static const int32_t norm2_nfc_data_indexes[Normalizer2Impl::IX_COUNT]={
-0x50,0x4bac,0x8814,0x8914,0x8914,0x8914,0x8914,0x8914,0xc0,0x300,0xae2,0x29e0,0x3c66,0xfc00,0x1288,0x3b9c,
+0x50,0x4c54,0x88bc,0x89bc,0x89bc,0x89bc,0x89bc,0x89bc,0xc0,0x300,0xae2,0x29e0,0x3c66,0xfc00,0x1288,0x3b9c,
0x3c34,0x3c66,0x300,0
};
-static const uint16_t norm2_nfc_data_trieIndex[1746]={
+static const uint16_t norm2_nfc_data_trieIndex[1748]={
0,0x40,0x7b,0xbb,0xfb,0x13a,0x17a,0x1b2,0x1f2,0x226,0x254,0x226,0x294,0x2d4,0x313,0x353,
0x393,0x3d2,0x40f,0x44e,0x226,0x226,0x488,0x4c8,0x4f8,0x530,0x226,0x570,0x59f,0x5de,0x226,0x5f3,
-0x631,0x65f,0x226,0x68c,0x6cc,0x709,0x729,0x768,0x7a7,0x7e4,0x803,0x840,0x729,0x879,0x8a7,0x8e6,
-0x226,0x920,0x937,0x977,0x98e,0x9cd,0x226,0xa03,0xa23,0xa5e,0xa6a,0xaa5,0xacd,0xb0a,0xb4a,0xb84,
-0xb9f,0x226,0xbda,0x226,0xc1a,0xc39,0xc6f,0xcac,0x226,0x226,0x226,0x226,0x226,0xccf,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xcfb,0x226,0x226,0xd30,
-0x226,0x226,0xd4e,0x226,0xd78,0x226,0x226,0x226,0xdb4,0xdd4,0xe14,0xe53,0xe8e,0xece,0xf02,0xf2e,
-0x808,0x226,0x226,0xf62,0x226,0x226,0x226,0xfa2,0xfe2,0x1022,0x1062,0x10a2,0x10e2,0x1122,0x1162,0x11a2,
-0x11e2,0x226,0x226,0x1212,0x1243,0x226,0x1273,0x12a6,0x12e3,0x1322,0x1362,0x1398,0x13c6,0x226,0x226,0x226,
+0x631,0x65f,0x687,0x6bd,0x6fd,0x73a,0x75a,0x799,0x7d8,0x815,0x834,0x871,0x75a,0x8aa,0x8d8,0x917,
+0x834,0x951,0x968,0x9a8,0x9bf,0x9fe,0x226,0xa34,0xa54,0xa8f,0xa9b,0xad6,0xafe,0xb3b,0xb7b,0xbb5,
+0xbd0,0x226,0xc0b,0x226,0xc4b,0xc6a,0xca0,0xcdd,0x226,0x226,0x226,0x226,0x226,0xd00,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xd2c,0x226,0x226,0xd61,
+0x226,0x226,0xd7f,0x226,0xda9,0x226,0x226,0x226,0xde5,0xe05,0xe45,0xe84,0xebf,0xeff,0xf33,0xf5f,
+0x839,0x226,0x226,0xf93,0x226,0x226,0x226,0xfd3,0x1013,0x1053,0x1093,0x10d3,0x1113,0x1153,0x1193,0x11d3,
+0x1213,0x226,0x226,0x1243,0x1274,0x226,0x12a4,0x12d7,0x1314,0x1353,0x1393,0x13c9,0x13f7,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x13f1,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0xcbd,0x226,0x140e,0x226,0x144e,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x148e,0x14c8,0x1506,0x1546,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1422,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0xcee,0x226,0x143f,0x226,0x147f,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x14bf,0x14f9,0x1537,0x1577,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
@@ -61,20 +59,20 @@ static const uint16_t norm2_nfc_data_trieIndex[1746]={
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1585,0x15c3,0x15e3,0x226,0x226,0x226,0x226,
-0x161d,0x226,0x226,0x1645,0x1677,0x16a5,0x80c,0x16b8,0x226,0x226,0x16c8,0x1708,0x226,0x226,0x226,0x1420,
-0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,
-0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,
-0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,
-0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,
-0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,
-0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,
-0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,
-0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,
-0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,
-0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,
-0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x175c,0x1748,0x1750,0x1758,0x1760,0x174c,0x1754,0x1794,0x226,
-0x17d4,0x180f,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x15b6,0x15f4,0x1614,0x226,0x226,0x226,0x226,
+0x164e,0x226,0x226,0x1676,0x16a8,0x16d6,0x83d,0x16e9,0x226,0x226,0x16f9,0x1739,0x226,0x226,0x226,0x1451,
+0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,
+0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,
+0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,
+0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,
+0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,
+0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,
+0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,
+0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,
+0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,
+0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,
+0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x178d,0x1779,0x1781,0x1789,0x1791,0x177d,0x1785,0x17c5,0x226,
+0x1805,0x1840,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
@@ -82,57 +80,57 @@ static const uint16_t norm2_nfc_data_trieIndex[1746]={
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x184f,0x188f,0x18cf,0x190f,0x194f,0x198f,0x19cf,0x1a0f,0x1a32,0x1a72,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1a92,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x655,0x664,0x67c,0x69b,0x6b0,0x6b0,0x6b0,0x6b4,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x1880,0x18c0,0x1900,0x1940,0x1980,0x19c0,0x1a00,0x1a40,0x1a63,0x1aa3,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1ac3,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x657,0x666,0x67e,0x69d,0x6b2,0x6b2,0x6b2,0x6b6,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xbda,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xc0b,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x54f,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x40c,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1ac5,0x226,0x226,0x1ad5,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0xdc6,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1ae5,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x15d6,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x1aef,0x54f,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x7eb,0x226,0x226,
-0x9ba,0x226,0x1aff,0x1b0c,0x1b18,0x226,0x226,0x226,0x226,0x414,0x226,0x1b23,0x1b33,0x226,0x226,0x226,
-0x7e0,0x226,0x226,0x226,0x226,0x1b43,0x226,0x226,0x226,0x1b4e,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x1b55,0x226,0x226,0x226,0x226,0x1b60,0x1b6f,0x8f6,0x1b7d,0x412,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x1b8b,0x798,0x226,0x226,0x226,0x226,0x226,0x1b9b,0x1baa,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x8d6,0x1bb2,0x1bc2,0x226,
-0x226,0x226,0x9ba,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bcc,0x226,0x226,0x226,0x226,0x226,
-0x226,0x7e6,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bc9,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bdc,
-0x7e0,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x84d,0x226,0x226,0x226,0x7ed,0x7ea,
-0x226,0x226,0x226,0x226,0x7e8,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x9ba,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xbd4,0x226,0x226,0x226,
-0x226,0x7ea,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x1bec,0x226,0x226,0x226,0xefb,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1af6,0x226,0x226,0x1b06,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0xdf7,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1b16,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1607,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x1b20,0x54f,0x226,0x226,0x1b30,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x81c,0x226,0x226,
+0x1b40,0x226,0x1b50,0x1b5d,0x1b69,0x226,0x226,0x226,0x226,0x414,0x226,0x1b74,0x1b84,0x226,0x226,0x226,
+0x811,0x226,0x226,0x226,0x226,0x1b94,0x226,0x226,0x226,0x1b9f,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x1ba6,0x226,0x226,0x226,0x226,0x1bb1,0x1bc0,0x927,0x1bce,0x412,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x1bdc,0x7c9,0x226,0x226,0x226,0x226,0x226,0x1bec,0x1bfb,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x907,0x1c03,0x1c13,0x226,
+0x226,0x226,0x9eb,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1c1d,0x226,0x226,0x226,0x226,0x226,
+0x226,0x817,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1c1a,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1c2d,
+0x811,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x87e,0x226,0x226,0x226,0x81e,0x81b,
+0x226,0x226,0x226,0x226,0x819,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x9eb,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0xc05,0x226,0x226,0x226,
+0x226,0x81b,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x1c3d,0x226,0x226,0x226,0xf2c,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x1bfc,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1bfe,
+0x226,0x226,0x226,0x226,0x226,0x1c4d,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1c4f,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x1c0d,0x1c1d,0x1c2b,0x1c38,0x226,0x1c44,0x1c52,0x1c62,0x226,0x226,
-0x226,0x226,0xcea,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1c72,0x1c7a,
-0x1c88,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0xefb,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x4fc,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x1c98,0x226,0x226,0x226,0x226,0x226,0x226,0x1ca4,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x1cb4,0x1cc4,0x1cd4,0x1ce4,0x1cf4,0x1d04,0x1d14,0x1d24,0x1d34,0x1d44,0x1d54,
-0x1d64,0x1d74,0x1d84,0x1d94,0x1da4,0x1db4,0x1dc4,0x1dd4,0x1de4,0x1df4,0x1e04,0x1e14,0x1e24,0x1e34,0x1e44,0x1e54,
-0x1e64,0x1e74,0x1e84,0x1e94,0x1ea4,0x1eb4,0x1ec4,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x1c5e,0x1c6e,0x1c7c,0x1c89,0x226,0x1c95,0x1ca3,0x1cb3,0x226,0x226,
+0x226,0x226,0xd1b,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1cc3,0x1ccb,
+0x1cd9,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0xf2c,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x7c9,0x226,
+0x226,0x226,0x4fc,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x1ce9,0x226,0x226,0x226,0x226,0x226,0x226,0x1cf5,0x226,0x226,0x226,0x226,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x1d05,0x1d15,0x1d25,0x1d35,0x1d45,0x1d55,0x1d65,0x1d75,0x1d85,
+0x1d95,0x1da5,0x1db5,0x1dc5,0x1dd5,0x1de5,0x1df5,0x1e05,0x1e15,0x1e25,0x1e35,0x1e45,0x1e55,0x1e65,0x1e75,0x1e85,
+0x1e95,0x1ea5,0x1eb5,0x1ec5,0x1ed5,0x1ee5,0x1ef5,0x1f05,0x1f15,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x226,
-0x226,0x226,0x226,0x226,0x226,0x408,0x428,0xc4,0xc4,0xc4,0x448,0x457,0x46d,0x489,0x4a6,0x4c2,
-0x4df,0x4fc,0x51b,0x538,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
-0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x552,0xc4,0x566,0xc4,0xc4,0xc4,0xc4,
+0x226,0x226,0x226,0x226,0x226,0x226,0x226,0x408,0x428,0xc4,0xc4,0xc4,0x448,0x457,0x46d,0x489,
+0x4a6,0x4c2,0x4df,0x4fc,0x51b,0x538,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
+0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x552,0xc4,0x566,0xc4,0xc4,
0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
-0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x586,0xc4,0xc4,0xc4,0xc4,0xc4,
-0xc4,0xc4,0xc4,0x591,0x5ae,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x5ce,0x5e2,0xc4,0xc4,0x5f5,
+0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x586,0xc4,0xc4,0xc4,
+0xc4,0xc4,0xc4,0xc4,0xc4,0x591,0x5ae,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0x5ce,0x5e4,0xc4,
+0xc4,0x5f7,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
-0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
-0x615,0x635
+0xc4,0xc4,0x617,0x637
};
-static const uint16_t norm2_nfc_data_trieData[7892]={
+static const uint16_t norm2_nfc_data_trieData[7974]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -238,401 +236,406 @@ static const uint16_t norm2_nfc_data_trieData[7892]={
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,0xffb8,0xffb8,0xffb8,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffb8,
-0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffb8,
-0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xfe36,0xfe38,0xfe3a,0xffcc,
-0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,
+0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,
+0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,
+0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xfe36,0xfe38,0xfe3a,
+0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0x864,0x1993,1,1,1,1,1,1,0x868,0x1999,1,0x86c,
-0x199f,1,1,1,1,1,1,1,0xfc0e,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0xfe12,1,1,1,0xffcc,0xffb8,0xffcc,0xffcc,1,1,
-1,0x29ec,0x29f2,0x29f8,0x29fe,0x2a04,0x2a0a,0x2a10,0x2a16,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0x864,0x1993,1,1,1,1,1,1,0x868,0x1999,1,
+0x86c,0x199f,1,1,1,1,1,1,1,0xfc0e,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0xfe12,1,1,1,0xffcc,0xffb8,0xffcc,0xffcc,1,
+1,1,0x29ec,0x29f2,0x29f8,0x29fe,0x2a04,0x2a0a,0x2a10,0x2a16,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0xfe0e,1,0xfc00,1,1,1,1,1,1,1,0x870,
-1,1,1,0x19a5,0x19ab,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,
-1,1,1,1,0x2a1c,0x2a22,1,0x2a28,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0xffcc,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xfe0e,1,0xfc00,1,1,1,1,1,1,1,
+0x870,1,1,1,0x19a5,0x19ab,0xfe12,1,1,1,1,1,1,1,1,1,
+0xfc00,1,1,1,1,0x2a1c,0x2a22,1,0x2a28,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0xffcc,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0x2a2e,1,1,0x2a34,1,1,
-1,1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,0x2a3a,0x2a40,0x2a46,
-1,1,0x2a4c,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0x2a2e,1,1,0x2a34,1,
+1,1,1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,0x2a3a,0x2a40,
+0x2a46,1,1,0x2a4c,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe0e,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0x878,0x19b1,1,1,0x19b7,0x19bd,0xfe12,1,1,1,1,1,1,1,1,0xfc00,
-0xfc00,1,1,1,1,0x2a52,0x2a58,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0x884,1,0x19c3,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0x878,0x19b1,1,1,0x19b7,0x19bd,0xfe12,1,1,1,1,1,1,1,1,
+0xfc00,0xfc00,1,1,1,1,0x2a52,0x2a58,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0xfc00,1,1,1,1,1,1,0x888,0x890,1,1,
-0x19c9,0x19cf,0x19d5,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,1,1,
+1,1,1,1,1,1,1,1,1,1,0x884,1,0x19c3,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x894,1,0x19db,1,1,1,1,0xfe12,1,1,
-1,1,1,1,1,0xfea8,0xfcb6,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xfc00,1,1,1,1,1,1,0x888,0x890,1,
+1,0x19c9,0x19cf,0x19d5,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0x894,1,0x19db,1,1,1,1,0xfe12,1,
+1,1,1,1,1,1,0xfea8,0xfcb6,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0xfe0e,1,1,0x898,0x19e1,1,0xfc00,1,1,1,0x89c,0x19e7,0x19ed,
-1,0xdca,0x19f5,1,0xfe12,1,1,1,1,1,1,1,0xfc00,0xfc00,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xfe0e,1,1,0x898,0x19e1,1,0xfc00,1,1,1,0x89c,0x19e7,
+0x19ed,1,0xdca,0x19f5,1,0xfe12,1,1,1,1,1,1,1,0xfc00,0xfc00,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0xfe12,0xfe12,1,0xfc00,1,1,1,
-1,1,1,0x8a8,0x8b0,1,1,0x19fd,0x1a03,0x1a09,0xfe12,1,1,1,1,1,
-1,1,1,1,0xfc00,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0xfc12,1,1,
-1,1,0xfc00,1,1,1,1,1,1,1,1,1,0x8b4,0x1a0f,1,0xdd4,
-0x1a17,0x1a1f,0xfc00,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0xfe12,0xfe12,1,0xfc00,1,1,
+1,1,1,1,0x8a8,0x8b0,1,1,0x19fd,0x1a03,0x1a09,0xfe12,1,1,1,1,
+1,1,1,1,1,0xfc00,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0xfece,0xfece,0xfe12,1,1,
-1,1,1,1,1,1,0xfed6,0xfed6,0xfed6,0xfed6,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfc12,1,
+1,1,1,0xfc00,1,1,1,1,1,1,1,1,1,0x8b4,0x1a0f,1,
+0xdd4,0x1a17,0x1a1f,0xfc00,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xfece,0xfece,0xfe12,1,
+1,1,1,1,1,1,1,0xfed6,0xfed6,0xfed6,0xfed6,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xfeec,0xfeec,0xfe12,1,1,1,1,1,1,1,1,0xfef4,0xfef4,0xfef4,
-0xfef4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,
+1,1,1,0xfeec,0xfeec,0xfe12,1,1,1,1,1,1,1,1,0xfef4,0xfef4,
+0xfef4,0xfef4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffb8,1,0xffb8,1,0xffb0,1,1,1,1,1,1,0x2a5f,1,1,
-1,1,1,1,1,1,1,0x2a65,1,1,1,1,0x2a6b,1,1,1,
-1,0x2a71,1,1,1,1,0x2a77,1,1,1,1,1,1,1,1,1,
-1,1,1,0x2a7d,1,1,1,1,1,1,1,0xff02,0xff04,0x3c50,0xff08,0x3c58,
-0x2a82,1,0x2a88,1,0xff04,0xff04,0xff04,0xff04,1,1,0xff04,0x3c60,0xffcc,0xffcc,0xfe12,1,
-0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,0x2a8f,1,1,
-1,1,1,1,1,1,1,0x2a95,1,1,1,1,0x2a9b,1,1,1,
-1,0x2aa1,1,1,1,1,0x2aa7,1,1,1,1,1,1,1,1,1,
-1,1,1,0x2aad,1,1,1,1,1,1,0xffb8,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xffb8,0xffb8,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffb8,1,0xffb8,1,0xffb0,1,1,1,1,1,1,0x2a5f,1,
+1,1,1,1,1,1,1,1,0x2a65,1,1,1,1,0x2a6b,1,1,
+1,1,0x2a71,1,1,1,1,0x2a77,1,1,1,1,1,1,1,1,
+1,1,1,1,0x2a7d,1,1,1,1,1,1,1,0xff02,0xff04,0x3c50,0xff08,
+0x3c58,0x2a82,1,0x2a88,1,0xff04,0xff04,0xff04,0xff04,1,1,0xff04,0x3c60,0xffcc,0xffcc,0xfe12,
+1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,0x2a8f,1,
+1,1,1,1,1,1,1,1,0x2a95,1,1,1,1,0x2a9b,1,1,
+1,1,0x2aa1,1,1,1,1,0x2aa7,1,1,1,1,1,1,1,1,
+1,1,1,1,0x2aad,1,1,1,1,1,1,0xffb8,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0x8c0,0x1a25,1,1,1,1,1,1,1,0xfc00,1,1,
-1,1,1,1,1,1,0xfe0e,1,0xfe12,0xfe12,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0xffb8,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,
+1,1,1,1,1,0x8c0,0x1a25,1,1,1,1,1,1,1,0xfc00,1,
+1,1,1,1,1,1,1,0xfe0e,1,0xfe12,0xfe12,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xffb8,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
-0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,1,
+1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
-0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,1,
+1,1,1,1,1,1,1,1,1,1,1,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,0xffcc,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0xffc8,1,1,1,1,1,1,1,1,
+0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,0xffcc,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xffc8,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0xffbc,0xffcc,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffb8,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,1,1,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffbc,0xffcc,0xffb8,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffb8,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,
-0xffcc,0xffb8,1,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,1,1,0xffb8,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,
+0xffcc,0xffcc,0xffb8,1,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,
+0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x8c4,0x1a2b,0x8c8,0x1a31,0x8cc,0x1a37,0x8d0,0x1a3d,0x8d4,0x1a43,1,1,0x8d8,
-0x1a49,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xfe0e,0xfc00,1,1,1,1,0x8dc,0x1a4f,0x8e0,0x1a55,0x8e4,0x8e8,0x1a5b,0x1a61,
-0x8ec,0x1a67,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x8c4,0x1a2b,0x8c8,0x1a31,0x8cc,0x1a37,0x8d0,0x1a3d,0x8d4,0x1a43,1,1,
+0x8d8,0x1a49,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xfe0e,0xfc00,1,1,1,1,0x8dc,0x1a4f,0x8e0,0x1a55,0x8e4,0x8e8,0x1a5b,
+0x1a61,0x8ec,0x1a67,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,0xfe12,1,1,
+1,1,1,1,1,1,1,1,1,1,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,0xfe12,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,
-0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffcc,0xffcc,0xffcc,1,0xfe02,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,
-0xffb8,0xffb8,0xffcc,1,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,1,1,1,0xffb8,
-1,1,1,1,1,1,0xffcc,1,1,1,0xffcc,0xffcc,1,1,1,1,
-1,1,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffd4,
-0xffac,0xffb8,0xff94,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,
+1,0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffcc,0xffcc,0xffcc,1,0xfe02,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffb8,
+0xffb8,0xffb8,0xffb8,0xffcc,1,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,1,1,1,
+0xffb8,1,1,1,1,1,1,0xffcc,1,1,1,0xffcc,0xffcc,1,1,1,
+1,1,1,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,
+0xffd4,0xffac,0xffb8,0xff94,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffd0,0xffc8,0xffc8,0xffb8,1,0xffcc,0xffd2,0xffb8,
-0xffcc,0xffb8,0x1a6c,0x1a72,0x1a78,0x1a7e,0x1a85,0x1a8b,0x1a91,0x1a97,0x1a9f,0x1aa9,0x1ab0,0x1ab6,0x1abc,0x1ac2,
-0x1ac8,0x1ace,0x1ad5,0x1adb,0x1ae0,0x1ae6,0x1aee,0x1af8,0x1b02,0x1b0c,0x1b14,0x1b1a,0x1b20,0x1b26,0x1b2f,0x1b39,
-0x1b41,0x1b47,0x1b4c,0x1b52,0x1b58,0x1b5e,0x1b64,0x1b6a,0x1b70,0x1b76,0x1b7d,0x1b83,0x1b88,0x1b8e,0x1b94,0x1b9a,
-0x1ba2,0x1bac,0x1bb4,0x1bba,0x1bc0,0x1bc6,0x1bcc,0x1bd2,0xdde,0xde8,0x1bda,0x1be4,0x1bec,0x1bf2,0x1bf8,0x1bfe,
-0x1c04,0x1c0a,0x1c10,0x1c16,0x1c1d,0x1c23,0x1c28,0x1c2e,0x1c34,0x1c3a,0x1c40,0x1c46,0x1c4c,0x1c52,0x1c5a,0x1c64,
-0x1c6e,0x1c78,0x1c82,0x1c8c,0x1c96,0x1ca0,0x1ca9,0x1caf,0x1cb5,0x1cbb,0x1cc0,0x1cc6,0xdf2,0xdfc,0x1cce,0x1cd8,
-0x1ce0,0x1ce6,0x1cec,0x1cf2,0xe06,0xe10,0x1cfa,0x1d04,0x1d0e,0x1d18,0x1d22,0x1d2c,0x1d34,0x1d3a,0x1d40,0x1d46,
-0x1d4c,0x1d52,0x1d58,0x1d5e,0x1d64,0x1d6a,0x1d70,0x1d76,0x1d7c,0x1d82,0x1d8a,0x1d94,0x1d9e,0x1da8,0x1db0,0x1db6,
-0x1dbd,0x1dc3,0x1dc8,0x1dce,0x1dd4,0x1dda,0x1de0,0x1de6,0x1dec,0x1df2,0x1df9,0x1dff,0x1e05,0x1e0b,0x1e11,0x1e17,
-0x1e1c,0x1e22,0x1e28,0x1e2e,0x1e35,0x1e3b,0x1e41,0x1e47,0x1e4c,0x1e52,0x1e58,0x1e5e,1,0x1e65,1,1,
-1,1,0xe1a,0xe28,0x1e6a,0x1e70,0x1e78,0x1e82,0x1e8c,0x1e96,0x1ea0,0x1eaa,0x1eb4,0x1ebe,0x1ec8,0x1ed2,
-0x1edc,0x1ee6,0x1ef0,0x1efa,0x1f04,0x1f0e,0x1f18,0x1f22,0x1f2c,0x1f36,0xe36,0xe40,0x1f3e,0x1f44,0x1f4a,0x1f50,
-0x1f58,0x1f62,0x1f6c,0x1f76,0x1f80,0x1f8a,0x1f94,0x1f9e,0x1fa8,0x1fb2,0x1fba,0x1fc0,0x1fc6,0x1fcc,0xe4a,0xe54,
-0x1fd2,0x1fd8,0x1fe0,0x1fea,0x1ff4,0x1ffe,0x2008,0x2012,0x201c,0x2026,0x2030,0x203a,0x2044,0x204e,0x2058,0x2062,
-0x206c,0x2076,0x2080,0x208a,0x2094,0x209e,0x20a6,0x20ac,0x20b2,0x20b8,0x20c0,0x20ca,0x20d4,0x20de,0x20e8,0x20f2,
-0x20fc,0x2106,0x2110,0x211a,0x2122,0x2128,0x212f,0x2135,0x213a,0x2140,0x2146,0x214c,1,1,1,1,
-1,1,0xe5e,0xe74,0xe8c,0xe9a,0xea8,0xeb6,0xec4,0xed2,0xede,0xef4,0xf0c,0xf1a,0xf28,0xf36,
-0xf44,0xf52,0xf5e,0xf6c,0x2155,0x215f,0x2169,0x2173,1,1,0xf7a,0xf88,0x217d,0x2187,0x2191,0x219b,
-1,1,0xf96,0xfac,0xfc4,0xfd2,0xfe0,0xfee,0xffc,0x100a,0x1016,0x102c,0x1044,0x1052,0x1060,0x106e,
-0x107c,0x108a,0x1096,0x10a8,0x21a5,0x21af,0x21b9,0x21c3,0x21cd,0x21d7,0x10ba,0x10cc,0x21e1,0x21eb,0x21f5,0x21ff,
-0x2209,0x2213,0x10de,0x10ec,0x221d,0x2227,0x2231,0x223b,1,1,0x10fa,0x1108,0x2245,0x224f,0x2259,0x2263,
-1,1,0x1116,0x1128,0x226d,0x2277,0x2281,0x228b,0x2295,0x229f,1,0x113a,1,0x22a9,1,0x22b3,
-1,0x22bd,0x114c,0x1162,0x117a,0x1188,0x1196,0x11a4,0x11b2,0x11c0,0x11cc,0x11e2,0x11fa,0x1208,0x1216,0x1224,
-0x1232,0x1240,0x124c,0x3b9e,0x22c5,0x3ba6,0x1256,0x3bae,0x22cb,0x3bb6,0x22d1,0x3bbe,0x22d7,0x3bc6,0x1260,0x3bce,
-1,1,0x22de,0x22e8,0x22f7,0x2307,0x2317,0x2327,0x2337,0x2347,0x2352,0x235c,0x236b,0x237b,0x238b,0x239b,
-0x23ab,0x23bb,0x23c6,0x23d0,0x23df,0x23ef,0x23ff,0x240f,0x241f,0x242f,0x243a,0x2444,0x2453,0x2463,0x2473,0x2483,
-0x2493,0x24a3,0x24ae,0x24b8,0x24c7,0x24d7,0x24e7,0x24f7,0x2507,0x2517,0x2522,0x252c,0x253b,0x254b,0x255b,0x256b,
-0x257b,0x258b,0x2595,0x259b,0x25a3,0x25aa,0x25b3,1,0x126a,0x25bd,0x25c5,0x25cb,0x25d1,0x3bd6,0x25d6,1,
-0x2ab2,0x8f0,1,0x25dd,0x25e5,0x25ec,0x25f5,1,0x1274,0x25ff,0x2607,0x3bde,0x260d,0x3be6,0x2612,0x2619,
-0x261f,0x2625,0x262b,0x2631,0x2639,0x3bf0,1,1,0x2641,0x2649,0x2651,0x2657,0x265d,0x3bfa,1,0x2663,
-0x2669,0x266f,0x2675,0x267b,0x2683,0x3c04,0x268b,0x2691,0x2697,0x269f,0x26a7,0x26ad,0x26b3,0x3c0e,0x26b9,0x26bf,
-0x3c16,0x2ab7,1,1,0x26c7,0x26ce,0x26d7,1,0x127e,0x26e1,0x26e9,0x3c1e,0x26ef,0x3c26,0x26f4,0x2abb,
-0x8fc,1,0xfa09,0xfa09,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffcc,0xffcc,0xfe02,0xfe02,0xffcc,0xffcc,0xffcc,0xffcc,0xfe02,0xfe02,0xfe02,0xffcc,0xffcc,1,
-1,1,1,0xffcc,1,1,1,0xfe02,0xfe02,0xffcc,0xffb8,0xffcc,0xfe02,0xfe02,0xffb8,0xffb8,
-0xffb8,0xffb8,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0x2abe,1,1,1,0x2ac2,0x3c2e,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x908,1,0x90c,1,0x910,1,1,1,1,1,0x26fb,0x2701,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0x2707,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x270d,0x2713,0x2719,0x914,1,0x918,1,0x91c,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x920,0x271f,1,1,1,0x924,0x2725,1,0x928,0x272b,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0x92c,0x2731,0x930,0x2737,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x934,
-1,1,1,0x273d,1,0x938,0x2743,0x93c,1,0x2749,0x940,0x274f,1,1,1,0x944,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0x2755,0x948,0x275b,1,0x94c,0x950,1,1,1,1,1,1,1,0x2761,
-0x2767,0x276d,0x2773,0x2779,0x954,0x958,0x277f,0x2785,0x95c,0x960,0x278b,0x2791,0x964,0x968,0x96c,0x970,
-1,1,0x2797,0x279d,0x974,0x978,0x27a3,0x27a9,0x97c,0x980,0x27af,0x27b5,1,1,1,1,
-1,1,1,0x984,0x988,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0x98c,1,1,1,1,1,0x990,0x994,1,0x998,0x27bb,0x27c1,
-0x27c7,0x27cd,1,1,0x99c,0x9a0,0x9a4,0x9a8,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0x27d3,0x27d9,0x27df,0x27e5,1,1,1,1,
-1,1,0x27eb,0x27f1,0x27f7,0x27fd,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x2ac7,
-0x2acb,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0x2acf,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffd0,0xffc8,0xffc8,0xffb8,0xffb4,0xffcc,0xffd2,
+0xffb8,0xffcc,0xffb8,0x1a6c,0x1a72,0x1a78,0x1a7e,0x1a85,0x1a8b,0x1a91,0x1a97,0x1a9f,0x1aa9,0x1ab0,0x1ab6,0x1abc,
+0x1ac2,0x1ac8,0x1ace,0x1ad5,0x1adb,0x1ae0,0x1ae6,0x1aee,0x1af8,0x1b02,0x1b0c,0x1b14,0x1b1a,0x1b20,0x1b26,0x1b2f,
+0x1b39,0x1b41,0x1b47,0x1b4c,0x1b52,0x1b58,0x1b5e,0x1b64,0x1b6a,0x1b70,0x1b76,0x1b7d,0x1b83,0x1b88,0x1b8e,0x1b94,
+0x1b9a,0x1ba2,0x1bac,0x1bb4,0x1bba,0x1bc0,0x1bc6,0x1bcc,0x1bd2,0xdde,0xde8,0x1bda,0x1be4,0x1bec,0x1bf2,0x1bf8,
+0x1bfe,0x1c04,0x1c0a,0x1c10,0x1c16,0x1c1d,0x1c23,0x1c28,0x1c2e,0x1c34,0x1c3a,0x1c40,0x1c46,0x1c4c,0x1c52,0x1c5a,
+0x1c64,0x1c6e,0x1c78,0x1c82,0x1c8c,0x1c96,0x1ca0,0x1ca9,0x1caf,0x1cb5,0x1cbb,0x1cc0,0x1cc6,0xdf2,0xdfc,0x1cce,
+0x1cd8,0x1ce0,0x1ce6,0x1cec,0x1cf2,0xe06,0xe10,0x1cfa,0x1d04,0x1d0e,0x1d18,0x1d22,0x1d2c,0x1d34,0x1d3a,0x1d40,
+0x1d46,0x1d4c,0x1d52,0x1d58,0x1d5e,0x1d64,0x1d6a,0x1d70,0x1d76,0x1d7c,0x1d82,0x1d8a,0x1d94,0x1d9e,0x1da8,0x1db0,
+0x1db6,0x1dbd,0x1dc3,0x1dc8,0x1dce,0x1dd4,0x1dda,0x1de0,0x1de6,0x1dec,0x1df2,0x1df9,0x1dff,0x1e05,0x1e0b,0x1e11,
+0x1e17,0x1e1c,0x1e22,0x1e28,0x1e2e,0x1e35,0x1e3b,0x1e41,0x1e47,0x1e4c,0x1e52,0x1e58,0x1e5e,1,0x1e65,1,
+1,1,1,0xe1a,0xe28,0x1e6a,0x1e70,0x1e78,0x1e82,0x1e8c,0x1e96,0x1ea0,0x1eaa,0x1eb4,0x1ebe,0x1ec8,
+0x1ed2,0x1edc,0x1ee6,0x1ef0,0x1efa,0x1f04,0x1f0e,0x1f18,0x1f22,0x1f2c,0x1f36,0xe36,0xe40,0x1f3e,0x1f44,0x1f4a,
+0x1f50,0x1f58,0x1f62,0x1f6c,0x1f76,0x1f80,0x1f8a,0x1f94,0x1f9e,0x1fa8,0x1fb2,0x1fba,0x1fc0,0x1fc6,0x1fcc,0xe4a,
+0xe54,0x1fd2,0x1fd8,0x1fe0,0x1fea,0x1ff4,0x1ffe,0x2008,0x2012,0x201c,0x2026,0x2030,0x203a,0x2044,0x204e,0x2058,
+0x2062,0x206c,0x2076,0x2080,0x208a,0x2094,0x209e,0x20a6,0x20ac,0x20b2,0x20b8,0x20c0,0x20ca,0x20d4,0x20de,0x20e8,
+0x20f2,0x20fc,0x2106,0x2110,0x211a,0x2122,0x2128,0x212f,0x2135,0x213a,0x2140,0x2146,0x214c,1,1,1,
+1,1,1,0xe5e,0xe74,0xe8c,0xe9a,0xea8,0xeb6,0xec4,0xed2,0xede,0xef4,0xf0c,0xf1a,0xf28,
+0xf36,0xf44,0xf52,0xf5e,0xf6c,0x2155,0x215f,0x2169,0x2173,1,1,0xf7a,0xf88,0x217d,0x2187,0x2191,
+0x219b,1,1,0xf96,0xfac,0xfc4,0xfd2,0xfe0,0xfee,0xffc,0x100a,0x1016,0x102c,0x1044,0x1052,0x1060,
+0x106e,0x107c,0x108a,0x1096,0x10a8,0x21a5,0x21af,0x21b9,0x21c3,0x21cd,0x21d7,0x10ba,0x10cc,0x21e1,0x21eb,0x21f5,
+0x21ff,0x2209,0x2213,0x10de,0x10ec,0x221d,0x2227,0x2231,0x223b,1,1,0x10fa,0x1108,0x2245,0x224f,0x2259,
+0x2263,1,1,0x1116,0x1128,0x226d,0x2277,0x2281,0x228b,0x2295,0x229f,1,0x113a,1,0x22a9,1,
+0x22b3,1,0x22bd,0x114c,0x1162,0x117a,0x1188,0x1196,0x11a4,0x11b2,0x11c0,0x11cc,0x11e2,0x11fa,0x1208,0x1216,
+0x1224,0x1232,0x1240,0x124c,0x3b9e,0x22c5,0x3ba6,0x1256,0x3bae,0x22cb,0x3bb6,0x22d1,0x3bbe,0x22d7,0x3bc6,0x1260,
+0x3bce,1,1,0x22de,0x22e8,0x22f7,0x2307,0x2317,0x2327,0x2337,0x2347,0x2352,0x235c,0x236b,0x237b,0x238b,
+0x239b,0x23ab,0x23bb,0x23c6,0x23d0,0x23df,0x23ef,0x23ff,0x240f,0x241f,0x242f,0x243a,0x2444,0x2453,0x2463,0x2473,
+0x2483,0x2493,0x24a3,0x24ae,0x24b8,0x24c7,0x24d7,0x24e7,0x24f7,0x2507,0x2517,0x2522,0x252c,0x253b,0x254b,0x255b,
+0x256b,0x257b,0x258b,0x2595,0x259b,0x25a3,0x25aa,0x25b3,1,0x126a,0x25bd,0x25c5,0x25cb,0x25d1,0x3bd6,0x25d6,
+1,0x2ab2,0x8f0,1,0x25dd,0x25e5,0x25ec,0x25f5,1,0x1274,0x25ff,0x2607,0x3bde,0x260d,0x3be6,0x2612,
+0x2619,0x261f,0x2625,0x262b,0x2631,0x2639,0x3bf0,1,1,0x2641,0x2649,0x2651,0x2657,0x265d,0x3bfa,1,
+0x2663,0x2669,0x266f,0x2675,0x267b,0x2683,0x3c04,0x268b,0x2691,0x2697,0x269f,0x26a7,0x26ad,0x26b3,0x3c0e,0x26b9,
+0x26bf,0x3c16,0x2ab7,1,1,0x26c7,0x26ce,0x26d7,1,0x127e,0x26e1,0x26e9,0x3c1e,0x26ef,0x3c26,0x26f4,
+0x2abb,0x8fc,1,0xfa09,0xfa09,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffcc,0xffcc,0xfe02,0xfe02,0xffcc,0xffcc,0xffcc,0xffcc,0xfe02,0xfe02,0xfe02,0xffcc,0xffcc,
+1,1,1,1,0xffcc,1,1,1,0xfe02,0xfe02,0xffcc,0xffb8,0xffcc,0xfe02,0xfe02,0xffb8,
+0xffb8,0xffb8,0xffb8,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0x2abe,1,1,1,0x2ac2,0x3c2e,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x908,1,0x90c,1,0x910,1,1,1,1,1,0x26fb,0x2701,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0x2707,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x270d,0x2713,0x2719,0x914,1,0x918,1,0x91c,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0x920,0x271f,1,1,1,0x924,0x2725,1,0x928,
+0x272b,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0x92c,0x2731,0x930,0x2737,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x934,1,1,1,0x273d,1,0x938,0x2743,0x93c,1,0x2749,0x940,0x274f,1,1,1,
+0x944,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0x2755,0x948,0x275b,1,0x94c,0x950,1,1,1,1,1,1,1,
+0x2761,0x2767,0x276d,0x2773,0x2779,0x954,0x958,0x277f,0x2785,0x95c,0x960,0x278b,0x2791,0x964,0x968,0x96c,
+0x970,1,1,0x2797,0x279d,0x974,0x978,0x27a3,0x27a9,0x97c,0x980,0x27af,0x27b5,1,1,1,
+1,1,1,1,0x984,0x988,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0x98c,1,1,1,1,1,0x990,0x994,1,0x998,0x27bb,
+0x27c1,0x27c7,0x27cd,1,1,0x99c,0x9a0,0x9a4,0x9a8,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0x27d3,0x27d9,0x27df,0x27e5,1,1,1,
+1,1,1,0x27eb,0x27f1,0x27f7,0x27fd,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x2ac7,0x2acb,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x2acf,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,
0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0xffb4,0xffc8,0xffd0,0xffbc,0xffc0,0xffc0,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x9ac,1,
-1,1,1,0x9b0,0x2803,0x9b4,0x2809,0x9b8,0x280f,0x9bc,0x2815,0x9c0,0x281b,0x9c4,0x2821,0x9c8,
-0x2827,0x9cc,0x282d,0x9d0,0x2833,0x9d4,0x2839,0x9d8,0x283f,0x9dc,0x2845,1,0x9e0,0x284b,0x9e4,0x2851,
-0x9e8,0x2857,1,1,1,1,1,0x9ec,0x285d,0x2863,0x9f4,0x2869,0x286f,0x9fc,0x2875,0x287b,
-0xa04,0x2881,0x2887,0xa0c,0x288d,0x2893,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,0x2899,1,1,1,1,0xfc10,
-0xfc10,1,1,0xa14,0x289f,1,1,1,1,1,1,1,0xa18,1,1,1,
-1,0xa1c,0x28a5,0xa20,0x28ab,0xa24,0x28b1,0xa28,0x28b7,0xa2c,0x28bd,0xa30,0x28c3,0xa34,0x28c9,0xa38,
-0x28cf,0xa3c,0x28d5,0xa40,0x28db,0xa44,0x28e1,0xa48,0x28e7,1,0xa4c,0x28ed,0xa50,0x28f3,0xa54,0x28f9,
-1,1,1,1,1,0xa58,0x28ff,0x2905,0xa60,0x290b,0x2911,0xa68,0x2917,0x291d,0xa70,0x2923,
-0x2929,0xa78,0x292f,0x2935,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0xa80,0xa84,0xa88,0xa8c,1,0x293b,1,1,0x2941,0x2947,0x294d,
-0x2953,1,1,0xa90,0x2959,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xffcc,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xffb4,0xffc8,0xffd0,0xffbc,0xffc0,0xffc0,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x9ac,
+1,1,1,1,0x9b0,0x2803,0x9b4,0x2809,0x9b8,0x280f,0x9bc,0x2815,0x9c0,0x281b,0x9c4,0x2821,
+0x9c8,0x2827,0x9cc,0x282d,0x9d0,0x2833,0x9d4,0x2839,0x9d8,0x283f,0x9dc,0x2845,1,0x9e0,0x284b,0x9e4,
+0x2851,0x9e8,0x2857,1,1,1,1,1,0x9ec,0x285d,0x2863,0x9f4,0x2869,0x286f,0x9fc,0x2875,
+0x287b,0xa04,0x2881,0x2887,0xa0c,0x288d,0x2893,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0x2899,1,1,1,1,
+0xfc10,0xfc10,1,1,0xa14,0x289f,1,1,1,1,1,1,1,0xa18,1,1,
+1,1,0xa1c,0x28a5,0xa20,0x28ab,0xa24,0x28b1,0xa28,0x28b7,0xa2c,0x28bd,0xa30,0x28c3,0xa34,0x28c9,
+0xa38,0x28cf,0xa3c,0x28d5,0xa40,0x28db,0xa44,0x28e1,0xa48,0x28e7,1,0xa4c,0x28ed,0xa50,0x28f3,0xa54,
+0x28f9,1,1,1,1,1,0xa58,0x28ff,0x2905,0xa60,0x290b,0x2911,0xa68,0x2917,0x291d,0xa70,
+0x2923,0x2929,0xa78,0x292f,0x2935,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xa80,0xa84,0xa88,0xa8c,1,0x293b,1,1,0x2941,0x2947,
+0x294d,0x2953,1,1,0xa90,0x2959,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,
+1,1,1,1,1,0xffcc,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,
+1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffb8,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,
+1,1,1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0xffcc,1,0xffcc,0xffcc,0xffb8,1,1,0xffcc,
-0xffcc,1,1,1,1,1,0xffcc,0xffcc,1,0xffcc,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffb8,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,
-1,1,1,1,1,1,1,1,0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xffcc,1,0xffcc,0xffcc,0xffb8,1,1,
+0xffcc,0xffcc,1,1,1,1,1,0xffcc,0xffcc,1,0xffcc,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,
+1,1,1,1,1,1,1,1,1,0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
-0x1289,0x1289,0x1289,0x1289,0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+0x1289,0x1289,0x1289,0x1289,0x1289,0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
-0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
-0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0xae2,0x1289,0x1289,0x1289,
+0x1289,0xae2,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
+0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0xae2,0x1289,0x1289,
0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,
-0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0x3c66,1,0x3c66,0x3c66,0x3c66,0x3c66,0x3c66,0x3c66,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3c66,0x3c66,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x3c66,1,1,1,1,0x3c66,1,1,1,0x3c66,1,0x3c66,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0x3b97,1,0x2ad5,
-0x2ad9,0x2add,0x2ae1,0x2ae5,0x2ae9,0x2aed,0x2af1,0x2af1,0x2af5,0x2af9,0x2afd,0x2b01,0x2b05,0x2b09,0x2b0d,0x2b11,
-0x2b15,0x2b19,0x2b1d,0x2b21,0x2b25,0x2b29,0x2b2d,0x2b31,0x2b35,0x2b39,0x2b3d,0x2b41,0x2b45,0x2b49,0x2b4d,0x2b51,
-0x2b55,0x2b59,0x2b5d,0x2b61,0x2b65,0x2b69,0x2b6d,0x2b71,0x2b75,0x2b79,0x2b7d,0x2b81,0x2b85,0x2b89,0x2b8d,0x2b91,
-0x2b95,0x2b99,0x2b9d,0x2ba1,0x2ba5,0x2ba9,0x2bad,0x2bb1,0x2bb5,0x2bb9,0x2bbd,0x2bc1,0x2bc5,0x2bc9,0x2bcd,0x2bd1,
-0x2bd5,0x2bd9,0x2bdd,0x2be1,0x2be5,0x2be9,0x2bed,0x2bf1,0x2bf5,0x2bf9,0x2bfd,0x2c01,0x2c05,0x2c09,0x2c0d,0x2c11,
-0x2c15,0x2c19,0x2c1d,0x2c21,0x2c25,0x2c29,0x2c2d,0x2c31,0x2c35,0x2c39,0x2c3d,0x2b21,0x2c41,0x2c45,0x2c49,0x2c4d,
-0x2c51,0x2c55,0x2c59,0x2c5d,0x2c61,0x2c65,0x2c69,0x2c6d,0x2c71,0x2c75,0x2c79,0x2c7d,0x2c81,0x2c85,0x2c89,0x2c8d,
-0x2c91,0x2c95,0x2c99,0x2c9d,0x2ca1,0x2ca5,0x2ca9,0x2cad,0x2cb1,0x2cb5,0x2cb9,0x2cbd,0x2cc1,0x2cc5,0x2cc9,0x2ccd,
-0x2cd1,0x2cd5,0x2cd9,0x2cdd,0x2ce1,0x2ce5,0x2ce9,0x2ced,0x2cf1,0x2cf5,0x2cf9,0x2cfd,0x2d01,0x2d05,0x2d09,0x2d0d,
-0x2d11,0x2d15,0x2d19,0x2d1d,0x2d21,0x2d25,0x2d29,0x2d2d,0x2d31,0x2d35,0x2d39,0x2d3d,0x2d41,0x2d45,0x2d49,0x2d4d,
-0x2c89,0x2d51,0x2d55,0x2d59,0x2d5d,0x2d61,0x2d65,0x2d69,0x2d6d,0x2c49,0x2d71,0x2d75,0x2d79,0x2d7d,0x2d81,0x2d85,
-0x2d89,0x2d8d,0x2d91,0x2d95,0x2d99,0x2d9d,0x2da1,0x2da5,0x2da9,0x2dad,0x2db1,0x2db5,0x2db9,0x2dbd,0x2b21,0x2dc1,
-0x2dc5,0x2dc9,0x2dcd,0x2dd1,0x2dd5,0x2dd9,0x2ddd,0x2de1,0x2de5,0x2de9,0x2ded,0x2df1,0x2df5,0x2df9,0x2dfd,0x2e01,
-0x2e05,0x2e09,0x2e0d,0x2e11,0x2e15,0x2e19,0x2e1d,0x2e21,0x2e25,0x2e29,0x2c51,0x2e2d,0x2e31,0x2e35,0x2e39,0x2e3d,
-0x2e41,0x2e45,0x2e49,0x2e4d,0x2e51,0x2e55,0x2e59,0x2e5d,0x2e61,0x2e65,0x2e69,0x2e6d,0x2e71,0x2e75,0x2e79,0x2e7d,
-0x2e81,0x2e85,0x2e89,0x2e8d,0x2e91,0x2e95,0x2e99,0x2e9d,0x2ea1,0x2ea5,0x2ea9,0x2ead,0x2eb1,0x2eb5,0x2eb9,0x2ebd,
-0x2ec1,0x2ec5,0x2ec9,0x2ecd,0x2ed1,0x2ed5,0x2ed9,0x2edd,0x2ee1,0x2ee5,0x2ee9,0x2eed,0x2ef1,1,1,0x2ef5,
-1,0x2ef9,1,1,0x2efd,0x2f01,0x2f05,0x2f09,0x2f0d,0x2f11,0x2f15,0x2f19,0x2f1d,0x2f21,1,0x2f25,
-1,0x2f29,1,1,0x2f2d,0x2f31,1,1,1,0x2f35,0x2f39,0x2f3d,0x2f41,0x2f45,0x2f49,0x2f4d,
-0x2f51,0x2f55,0x2f59,0x2f5d,0x2f61,0x2f65,0x2f69,0x2f6d,0x2f71,0x2f75,0x2f79,0x2f7d,0x2f81,0x2f85,0x2f89,0x2f8d,
-0x2f91,0x2f95,0x2f99,0x2f9d,0x2fa1,0x2fa5,0x2fa9,0x2fad,0x2fb1,0x2fb5,0x2fb9,0x2fbd,0x2fc1,0x2fc5,0x2fc9,0x2fcd,
-0x2fd1,0x2fd5,0x2fd9,0x2fdd,0x2fe1,0x2fe5,0x2d25,0x2fe9,0x2fed,0x2ff1,0x2ff5,0x2ff9,0x2ffd,0x2ffd,0x3001,0x3005,
-0x3009,0x300d,0x3011,0x3015,0x3019,0x301d,0x2f2d,0x3021,0x3025,0x3029,0x302d,0x3031,0x3037,1,1,0x303b,
-0x303f,0x3043,0x3047,0x304b,0x304f,0x3053,0x3057,0x2f65,0x305b,0x305f,0x3063,0x2ef5,0x3067,0x306b,0x306f,0x3073,
-0x3077,0x307b,0x307f,0x3083,0x3087,0x308b,0x308f,0x3093,0x2f89,0x3097,0x2f8d,0x309b,0x309f,0x30a3,0x30a7,0x30ab,
-0x2ef9,0x2b75,0x30af,0x30b3,0x30b7,0x2c8d,0x2de9,0x30bb,0x30bf,0x2fa9,0x30c3,0x2fad,0x30c7,0x30cb,0x30cf,0x2f01,
-0x30d3,0x30d7,0x30db,0x30df,0x30e3,0x2f05,0x30e7,0x30eb,0x30ef,0x30f3,0x30f7,0x30fb,0x2fe5,0x30ff,0x3103,0x2d25,
-0x3107,0x2ff5,0x310b,0x310f,0x3113,0x3117,0x311b,0x3009,0x311f,0x2f29,0x3123,0x300d,0x2c41,0x3127,0x3011,0x312b,
-0x3019,0x312f,0x3133,0x3137,0x313b,0x313f,0x3021,0x2f19,0x3143,0x3025,0x3147,0x3029,0x314b,0x2af1,0x314f,0x3155,
-0x315b,0x3161,0x3165,0x3169,0x316d,0x3173,0x3179,0x317f,0x3183,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3186,
-0xfe34,0x318c,1,1,1,1,1,1,1,1,1,1,0x3192,0x3198,0x31a0,0x31aa,
-0x31b2,0x31b8,0x31be,0x31c4,0x31ca,0x31d0,0x31d6,0x31dc,0x31e2,1,0x31e8,0x31ee,0x31f4,0x31fa,0x3200,1,
-0x3206,1,0x320c,0x3212,1,0x3218,0x321e,1,0x3224,0x322a,0x3230,0x3236,0x323c,0x3242,0x3248,0x324e,
-0x3254,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,
-0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffb8,1,0xffcc,1,1,1,1,1,1,1,1,0xffcc,0xfe02,0xffb8,
-1,1,1,1,0xfe12,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,
-1,1,1,1,1,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffb8,0xffb8,0xffb8,1,
-1,1,1,1,1,1,1,1,0xa94,0x295f,0xa9a,0x2969,1,1,1,1,
-1,0xaa0,1,1,1,1,1,0x2973,1,1,1,1,1,1,1,1,
-1,0xfe12,0xfc0e,1,1,1,1,1,1,1,0xfc00,1,1,1,1,1,
-1,0x297d,0x2987,1,0xaa6,0xaac,0xfe12,0xfe12,1,1,1,1,1,1,1,1,
-1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,0xfe0e,1,1,
-1,1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,0xfe0e,0xfe12,
-1,1,1,1,1,1,1,1,1,1,1,0xfe0e,0xfe0e,1,0xfc00,1,
-1,1,1,1,1,1,0xab2,1,1,1,0x2991,0x299b,0xfe12,1,1,1,
-1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,0xfe12,1,1,
-1,0xfe0e,1,1,1,1,1,1,1,1,1,0xfc00,1,1,1,1,
-1,1,1,1,0xabe,0xfc00,0x29a5,0x29af,0xfc00,0x29b9,1,1,0xfe12,0xfe0e,1,1,
-1,1,1,1,1,1,1,1,1,1,0xad0,0xad6,0x29c3,0x29cd,1,1,
-1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,0xfc00,1,1,1,
-1,0xadc,1,1,0x29d7,1,1,1,1,0xfe12,0xfe12,1,0xfe02,0xfe02,0xfe02,0xfe02,
-0xfe02,1,1,1,1,1,1,1,1,1,1,1,0xfe0c,0xfe0c,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xfe02,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0x325a,0x3264,0x3278,0x3290,0x32a8,
-0x32c0,0x32d8,0xffb0,0xffb0,0xfe02,0xfe02,0xfe02,1,1,1,0xffc4,0xffb0,0xffb0,0xffb0,1,1,
-1,1,1,1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,1,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,
-0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,0x32e6,0x32f0,0x3304,
-0x331c,0x3334,0x334c,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,1,0xffcc,0xffcc,
-0xffcc,0xffcc,0xffcc,1,1,1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,
-1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xfe0e,1,
-1,1,1,1,0x335b,0x335f,0x3363,0x3367,0x336d,0x2f4d,0x3371,0x3375,0x3379,0x337d,0x2f51,0x3381,
-0x3385,0x3389,0x2f55,0x338f,0x3393,0x3397,0x339b,0x33a1,0x33a5,0x33a9,0x33ad,0x33b3,0x33b7,0x33bb,0x33bf,0x303f,
-0x33c3,0x33c9,0x33cd,0x33d1,0x33d5,0x33d9,0x33dd,0x33e1,0x33e5,0x3053,0x2f59,0x2f5d,0x3057,0x33e9,0x33ed,0x2c59,
-0x33f1,0x2f61,0x33f5,0x33f9,0x33fd,0x3401,0x3401,0x3401,0x3405,0x340b,0x340f,0x3413,0x3417,0x341d,0x3421,0x3425,
-0x3429,0x342d,0x3431,0x3435,0x3439,0x343d,0x3441,0x3445,0x3449,0x344d,0x344d,0x305f,0x3451,0x3455,0x3459,0x345d,
-0x2f69,0x3461,0x3465,0x3469,0x2ebd,0x346d,0x3471,0x3475,0x3479,0x347d,0x3481,0x3485,0x3489,0x348d,0x3493,0x3497,
-0x349b,0x349f,0x34a3,0x34a7,0x34ab,0x34b1,0x34b7,0x34bb,0x34bf,0x34c3,0x34c7,0x34cb,0x34cf,0x34d3,0x34d7,0x34d7,
-0x34db,0x34e1,0x34e5,0x2c49,0x34e9,0x34ed,0x34f3,0x34f7,0x34fb,0x34ff,0x3503,0x3507,0x2f7d,0x350b,0x350f,0x3513,
-0x3519,0x351d,0x3523,0x3527,0x352b,0x352f,0x3533,0x3537,0x353b,0x353f,0x3543,0x3547,0x354b,0x354f,0x3555,0x3559,
-0x355d,0x3561,0x2b71,0x3565,0x356b,0x356f,0x356f,0x3575,0x3579,0x3579,0x357d,0x3581,0x3587,0x358d,0x3591,0x3595,
-0x3599,0x359d,0x35a1,0x35a5,0x35a9,0x35ad,0x35b1,0x2f81,0x35b5,0x35bb,0x35bf,0x35c3,0x308f,0x35c3,0x35c7,0x2f89,
-0x35cb,0x35cf,0x35d3,0x35d7,0x2f8d,0x2b05,0x35db,0x35df,0x35e3,0x35e7,0x35eb,0x35ef,0x35f3,0x35f9,0x35fd,0x3601,
-0x3605,0x3609,0x360d,0x3613,0x3617,0x361b,0x361f,0x3623,0x3627,0x362b,0x362f,0x3633,0x2f91,0x3637,0x363b,0x3641,
-0x3645,0x3649,0x364d,0x2f99,0x3651,0x3655,0x3659,0x365d,0x3661,0x3665,0x3669,0x366d,0x2b75,0x30af,0x3671,0x3675,
-0x3679,0x367d,0x3683,0x3687,0x368b,0x368f,0x2f9d,0x3693,0x3699,0x369d,0x36a1,0x3161,0x36a5,0x36a9,0x36ad,0x36b1,
-0x36b5,0x36bb,0x36bf,0x36c3,0x36c7,0x36cd,0x36d1,0x36d5,0x36d9,0x2c8d,0x36dd,0x36e1,0x36e7,0x36ed,0x36f3,0x36f7,
-0x36fd,0x3701,0x3705,0x3709,0x370d,0x2fa1,0x2de9,0x3711,0x3715,0x3719,0x371d,0x3723,0x3727,0x372b,0x372f,0x30bf,
-0x3733,0x3737,0x373d,0x3741,0x3745,0x374b,0x3751,0x3755,0x30c3,0x3759,0x375d,0x3761,0x3765,0x3769,0x376d,0x3771,
-0x3777,0x377b,0x3781,0x3785,0x378b,0x30cb,0x378f,0x3793,0x3799,0x379d,0x37a1,0x37a7,0x37ad,0x37b1,0x37b5,0x37b9,
-0x37bd,0x37bd,0x37c1,0x37c5,0x30d3,0x37c9,0x37cd,0x37d1,0x37d5,0x37d9,0x37df,0x37e3,0x2c55,0x37e9,0x37ef,0x37f3,
-0x37f9,0x37ff,0x3805,0x3809,0x30eb,0x380d,0x3813,0x3819,0x381f,0x3825,0x3829,0x3829,0x30ef,0x3169,0x382d,0x3831,
-0x3835,0x3839,0x383f,0x2bbd,0x30f7,0x3843,0x3847,0x2fcd,0x384d,0x3853,0x2f15,0x3859,0x385d,0x2fdd,0x3861,0x3865,
-0x3869,0x386f,0x386f,0x3875,0x3879,0x387d,0x3883,0x3887,0x388b,0x388f,0x3895,0x3899,0x389d,0x38a1,0x38a5,0x38a9,
-0x38af,0x38b3,0x38b7,0x38bb,0x38bf,0x38c3,0x38c7,0x38cd,0x38d3,0x38d7,0x38dd,0x38e1,0x38e7,0x38eb,0x2ff5,0x38ef,
-0x38f5,0x38fb,0x38ff,0x3905,0x3909,0x390f,0x3913,0x3917,0x391b,0x391f,0x3923,0x3927,0x392d,0x3933,0x3939,0x3575,
-0x393f,0x3943,0x3947,0x394b,0x394f,0x3953,0x3957,0x395b,0x395f,0x3963,0x3967,0x396b,0x2c9d,0x3971,0x3975,0x3979,
-0x397d,0x3981,0x3985,0x3001,0x3989,0x398d,0x3991,0x3995,0x3999,0x399f,0x39a5,0x39ab,0x39af,0x39b3,0x39b7,0x39bb,
-0x39c1,0x39c5,0x39cb,0x39cf,0x39d3,0x39d9,0x39df,0x39e3,0x2ba9,0x39e7,0x39eb,0x39ef,0x39f3,0x39f7,0x39fb,0x3113,
-0x39ff,0x3a03,0x3a07,0x3a0b,0x3a0f,0x3a13,0x3a17,0x3a1b,0x3a1f,0x3a23,0x3a29,0x3a2d,0x3a31,0x3a35,0x3a39,0x3a3d,
-0x3a43,0x3a49,0x3a4d,0x3a51,0x3127,0x312b,0x3a55,0x3a59,0x3a5f,0x3a63,0x3a67,0x3a6b,0x3a6f,0x3a75,0x3a7b,0x3a7f,
-0x3a83,0x3a87,0x3a8d,0x312f,0x3a91,0x3a97,0x3a9d,0x3aa1,0x3aa5,0x3aa9,0x3aaf,0x3ab3,0x3ab7,0x3abb,0x3abf,0x3ac3,
-0x3ac7,0x3acb,0x3ad1,0x3ad5,0x3ad9,0x3add,0x3ae3,0x3ae7,0x3aeb,0x3aef,0x3af3,0x3af9,0x3aff,0x3b03,0x3b07,0x3b0b,
-0x3b11,0x3b15,0x3147,0x3147,0x3b1b,0x3b1f,0x3b25,0x3b29,0x3b2d,0x3b31,0x3b35,0x3b39,0x3b3d,0x3b41,0x314b,0x3b47,
-0x3b4b,0x3b4f,0x3b53,0x3b57,0x3b5b,0x3b61,0x3b65,0x3b6b,0x3b71,0x3b77,0x3b7b,0x3b7f,0x3b83,0x3b87,0x3b8b,0x3b8f,
-0x3b93,0x3b97,1,1
+0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,0x1289,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0x3c66,1,0x3c66,0x3c66,0x3c66,0x3c66,0x3c66,0x3c66,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3c66,
+0x3c66,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x3c66,1,1,1,1,0x3c66,1,1,1,0x3c66,1,0x3c66,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3b97,1,
+0x2ad5,0x2ad9,0x2add,0x2ae1,0x2ae5,0x2ae9,0x2aed,0x2af1,0x2af1,0x2af5,0x2af9,0x2afd,0x2b01,0x2b05,0x2b09,0x2b0d,
+0x2b11,0x2b15,0x2b19,0x2b1d,0x2b21,0x2b25,0x2b29,0x2b2d,0x2b31,0x2b35,0x2b39,0x2b3d,0x2b41,0x2b45,0x2b49,0x2b4d,
+0x2b51,0x2b55,0x2b59,0x2b5d,0x2b61,0x2b65,0x2b69,0x2b6d,0x2b71,0x2b75,0x2b79,0x2b7d,0x2b81,0x2b85,0x2b89,0x2b8d,
+0x2b91,0x2b95,0x2b99,0x2b9d,0x2ba1,0x2ba5,0x2ba9,0x2bad,0x2bb1,0x2bb5,0x2bb9,0x2bbd,0x2bc1,0x2bc5,0x2bc9,0x2bcd,
+0x2bd1,0x2bd5,0x2bd9,0x2bdd,0x2be1,0x2be5,0x2be9,0x2bed,0x2bf1,0x2bf5,0x2bf9,0x2bfd,0x2c01,0x2c05,0x2c09,0x2c0d,
+0x2c11,0x2c15,0x2c19,0x2c1d,0x2c21,0x2c25,0x2c29,0x2c2d,0x2c31,0x2c35,0x2c39,0x2c3d,0x2b21,0x2c41,0x2c45,0x2c49,
+0x2c4d,0x2c51,0x2c55,0x2c59,0x2c5d,0x2c61,0x2c65,0x2c69,0x2c6d,0x2c71,0x2c75,0x2c79,0x2c7d,0x2c81,0x2c85,0x2c89,
+0x2c8d,0x2c91,0x2c95,0x2c99,0x2c9d,0x2ca1,0x2ca5,0x2ca9,0x2cad,0x2cb1,0x2cb5,0x2cb9,0x2cbd,0x2cc1,0x2cc5,0x2cc9,
+0x2ccd,0x2cd1,0x2cd5,0x2cd9,0x2cdd,0x2ce1,0x2ce5,0x2ce9,0x2ced,0x2cf1,0x2cf5,0x2cf9,0x2cfd,0x2d01,0x2d05,0x2d09,
+0x2d0d,0x2d11,0x2d15,0x2d19,0x2d1d,0x2d21,0x2d25,0x2d29,0x2d2d,0x2d31,0x2d35,0x2d39,0x2d3d,0x2d41,0x2d45,0x2d49,
+0x2d4d,0x2c89,0x2d51,0x2d55,0x2d59,0x2d5d,0x2d61,0x2d65,0x2d69,0x2d6d,0x2c49,0x2d71,0x2d75,0x2d79,0x2d7d,0x2d81,
+0x2d85,0x2d89,0x2d8d,0x2d91,0x2d95,0x2d99,0x2d9d,0x2da1,0x2da5,0x2da9,0x2dad,0x2db1,0x2db5,0x2db9,0x2dbd,0x2b21,
+0x2dc1,0x2dc5,0x2dc9,0x2dcd,0x2dd1,0x2dd5,0x2dd9,0x2ddd,0x2de1,0x2de5,0x2de9,0x2ded,0x2df1,0x2df5,0x2df9,0x2dfd,
+0x2e01,0x2e05,0x2e09,0x2e0d,0x2e11,0x2e15,0x2e19,0x2e1d,0x2e21,0x2e25,0x2e29,0x2c51,0x2e2d,0x2e31,0x2e35,0x2e39,
+0x2e3d,0x2e41,0x2e45,0x2e49,0x2e4d,0x2e51,0x2e55,0x2e59,0x2e5d,0x2e61,0x2e65,0x2e69,0x2e6d,0x2e71,0x2e75,0x2e79,
+0x2e7d,0x2e81,0x2e85,0x2e89,0x2e8d,0x2e91,0x2e95,0x2e99,0x2e9d,0x2ea1,0x2ea5,0x2ea9,0x2ead,0x2eb1,0x2eb5,0x2eb9,
+0x2ebd,0x2ec1,0x2ec5,0x2ec9,0x2ecd,0x2ed1,0x2ed5,0x2ed9,0x2edd,0x2ee1,0x2ee5,0x2ee9,0x2eed,0x2ef1,1,1,
+0x2ef5,1,0x2ef9,1,1,0x2efd,0x2f01,0x2f05,0x2f09,0x2f0d,0x2f11,0x2f15,0x2f19,0x2f1d,0x2f21,1,
+0x2f25,1,0x2f29,1,1,0x2f2d,0x2f31,1,1,1,0x2f35,0x2f39,0x2f3d,0x2f41,0x2f45,0x2f49,
+0x2f4d,0x2f51,0x2f55,0x2f59,0x2f5d,0x2f61,0x2f65,0x2f69,0x2f6d,0x2f71,0x2f75,0x2f79,0x2f7d,0x2f81,0x2f85,0x2f89,
+0x2f8d,0x2f91,0x2f95,0x2f99,0x2f9d,0x2fa1,0x2fa5,0x2fa9,0x2fad,0x2fb1,0x2fb5,0x2fb9,0x2fbd,0x2fc1,0x2fc5,0x2fc9,
+0x2fcd,0x2fd1,0x2fd5,0x2fd9,0x2fdd,0x2fe1,0x2fe5,0x2d25,0x2fe9,0x2fed,0x2ff1,0x2ff5,0x2ff9,0x2ffd,0x2ffd,0x3001,
+0x3005,0x3009,0x300d,0x3011,0x3015,0x3019,0x301d,0x2f2d,0x3021,0x3025,0x3029,0x302d,0x3031,0x3037,1,1,
+0x303b,0x303f,0x3043,0x3047,0x304b,0x304f,0x3053,0x3057,0x2f65,0x305b,0x305f,0x3063,0x2ef5,0x3067,0x306b,0x306f,
+0x3073,0x3077,0x307b,0x307f,0x3083,0x3087,0x308b,0x308f,0x3093,0x2f89,0x3097,0x2f8d,0x309b,0x309f,0x30a3,0x30a7,
+0x30ab,0x2ef9,0x2b75,0x30af,0x30b3,0x30b7,0x2c8d,0x2de9,0x30bb,0x30bf,0x2fa9,0x30c3,0x2fad,0x30c7,0x30cb,0x30cf,
+0x2f01,0x30d3,0x30d7,0x30db,0x30df,0x30e3,0x2f05,0x30e7,0x30eb,0x30ef,0x30f3,0x30f7,0x30fb,0x2fe5,0x30ff,0x3103,
+0x2d25,0x3107,0x2ff5,0x310b,0x310f,0x3113,0x3117,0x311b,0x3009,0x311f,0x2f29,0x3123,0x300d,0x2c41,0x3127,0x3011,
+0x312b,0x3019,0x312f,0x3133,0x3137,0x313b,0x313f,0x3021,0x2f19,0x3143,0x3025,0x3147,0x3029,0x314b,0x2af1,0x314f,
+0x3155,0x315b,0x3161,0x3165,0x3169,0x316d,0x3173,0x3179,0x317f,0x3183,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x3186,0xfe34,0x318c,1,1,1,1,1,1,1,1,1,1,0x3192,0x3198,0x31a0,
+0x31aa,0x31b2,0x31b8,0x31be,0x31c4,0x31ca,0x31d0,0x31d6,0x31dc,0x31e2,1,0x31e8,0x31ee,0x31f4,0x31fa,0x3200,
+1,0x3206,1,0x320c,0x3212,1,0x3218,0x321e,1,0x3224,0x322a,0x3230,0x3236,0x323c,0x3242,0x3248,
+0x324e,0x3254,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,
+0xffb8,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffb8,1,0xffcc,1,1,1,1,1,1,1,1,0xffcc,0xfe02,
+0xffb8,1,1,1,1,0xfe12,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,1,1,
+1,1,1,1,1,1,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffb8,0xffb8,0xffb8,
+1,1,0xffcc,0xffb8,0xffcc,0xffb8,1,1,1,1,1,1,1,1,1,1,
+0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,
+1,1,1,1,1,1,1,1,1,0xa94,0x295f,0xa9a,0x2969,1,1,1,
+1,1,0xaa0,1,1,1,1,1,0x2973,1,1,1,1,1,1,1,
+1,1,0xfe12,0xfc0e,1,1,1,1,1,1,1,0xfc00,1,1,1,1,
+1,1,0x297d,0x2987,1,0xaa6,0xaac,0xfe12,0xfe12,1,1,1,1,1,1,1,
+1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,0xfe0e,1,
+1,1,1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,0xfe0e,
+0xfe12,1,1,1,1,1,1,1,1,1,1,1,0xfe0e,0xfe0e,1,0xfc00,
+1,1,1,1,1,1,1,0xab2,1,1,1,0x2991,0x299b,0xfe12,1,1,
+1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,0xfe12,1,
+1,1,0xfe0e,1,1,1,1,1,1,1,1,1,0xfc00,1,1,1,
+1,1,1,1,1,0xabe,0xfc00,0x29a5,0x29af,0xfc00,0x29b9,1,1,0xfe12,0xfe0e,1,
+1,1,1,1,1,1,1,1,1,1,1,0xad0,0xad6,0x29c3,0x29cd,1,
+1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,0xfc00,1,1,
+1,1,0xadc,1,1,0x29d7,1,1,1,1,0xfe12,0xfe12,1,0xfe02,0xfe02,0xfe02,
+0xfe02,0xfe02,1,1,1,1,1,1,1,1,1,1,1,0xfe0c,0xfe0c,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe02,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0x325a,0x3264,0x3278,0x3290,
+0x32a8,0x32c0,0x32d8,0xffb0,0xffb0,0xfe02,0xfe02,0xfe02,1,1,1,0xffc4,0xffb0,0xffb0,0xffb0,1,
+1,1,1,1,1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,1,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,0xffcc,
+0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,0x32e6,0x32f0,
+0x3304,0x331c,0x3334,0x334c,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,1,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,
+1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xfe0e,
+1,1,1,1,1,0x335b,0x335f,0x3363,0x3367,0x336d,0x2f4d,0x3371,0x3375,0x3379,0x337d,0x2f51,
+0x3381,0x3385,0x3389,0x2f55,0x338f,0x3393,0x3397,0x339b,0x33a1,0x33a5,0x33a9,0x33ad,0x33b3,0x33b7,0x33bb,0x33bf,
+0x303f,0x33c3,0x33c9,0x33cd,0x33d1,0x33d5,0x33d9,0x33dd,0x33e1,0x33e5,0x3053,0x2f59,0x2f5d,0x3057,0x33e9,0x33ed,
+0x2c59,0x33f1,0x2f61,0x33f5,0x33f9,0x33fd,0x3401,0x3401,0x3401,0x3405,0x340b,0x340f,0x3413,0x3417,0x341d,0x3421,
+0x3425,0x3429,0x342d,0x3431,0x3435,0x3439,0x343d,0x3441,0x3445,0x3449,0x344d,0x344d,0x305f,0x3451,0x3455,0x3459,
+0x345d,0x2f69,0x3461,0x3465,0x3469,0x2ebd,0x346d,0x3471,0x3475,0x3479,0x347d,0x3481,0x3485,0x3489,0x348d,0x3493,
+0x3497,0x349b,0x349f,0x34a3,0x34a7,0x34ab,0x34b1,0x34b7,0x34bb,0x34bf,0x34c3,0x34c7,0x34cb,0x34cf,0x34d3,0x34d7,
+0x34d7,0x34db,0x34e1,0x34e5,0x2c49,0x34e9,0x34ed,0x34f3,0x34f7,0x34fb,0x34ff,0x3503,0x3507,0x2f7d,0x350b,0x350f,
+0x3513,0x3519,0x351d,0x3523,0x3527,0x352b,0x352f,0x3533,0x3537,0x353b,0x353f,0x3543,0x3547,0x354b,0x354f,0x3555,
+0x3559,0x355d,0x3561,0x2b71,0x3565,0x356b,0x356f,0x356f,0x3575,0x3579,0x3579,0x357d,0x3581,0x3587,0x358d,0x3591,
+0x3595,0x3599,0x359d,0x35a1,0x35a5,0x35a9,0x35ad,0x35b1,0x2f81,0x35b5,0x35bb,0x35bf,0x35c3,0x308f,0x35c3,0x35c7,
+0x2f89,0x35cb,0x35cf,0x35d3,0x35d7,0x2f8d,0x2b05,0x35db,0x35df,0x35e3,0x35e7,0x35eb,0x35ef,0x35f3,0x35f9,0x35fd,
+0x3601,0x3605,0x3609,0x360d,0x3613,0x3617,0x361b,0x361f,0x3623,0x3627,0x362b,0x362f,0x3633,0x2f91,0x3637,0x363b,
+0x3641,0x3645,0x3649,0x364d,0x2f99,0x3651,0x3655,0x3659,0x365d,0x3661,0x3665,0x3669,0x366d,0x2b75,0x30af,0x3671,
+0x3675,0x3679,0x367d,0x3683,0x3687,0x368b,0x368f,0x2f9d,0x3693,0x3699,0x369d,0x36a1,0x3161,0x36a5,0x36a9,0x36ad,
+0x36b1,0x36b5,0x36bb,0x36bf,0x36c3,0x36c7,0x36cd,0x36d1,0x36d5,0x36d9,0x2c8d,0x36dd,0x36e1,0x36e7,0x36ed,0x36f3,
+0x36f7,0x36fd,0x3701,0x3705,0x3709,0x370d,0x2fa1,0x2de9,0x3711,0x3715,0x3719,0x371d,0x3723,0x3727,0x372b,0x372f,
+0x30bf,0x3733,0x3737,0x373d,0x3741,0x3745,0x374b,0x3751,0x3755,0x30c3,0x3759,0x375d,0x3761,0x3765,0x3769,0x376d,
+0x3771,0x3777,0x377b,0x3781,0x3785,0x378b,0x30cb,0x378f,0x3793,0x3799,0x379d,0x37a1,0x37a7,0x37ad,0x37b1,0x37b5,
+0x37b9,0x37bd,0x37bd,0x37c1,0x37c5,0x30d3,0x37c9,0x37cd,0x37d1,0x37d5,0x37d9,0x37df,0x37e3,0x2c55,0x37e9,0x37ef,
+0x37f3,0x37f9,0x37ff,0x3805,0x3809,0x30eb,0x380d,0x3813,0x3819,0x381f,0x3825,0x3829,0x3829,0x30ef,0x3169,0x382d,
+0x3831,0x3835,0x3839,0x383f,0x2bbd,0x30f7,0x3843,0x3847,0x2fcd,0x384d,0x3853,0x2f15,0x3859,0x385d,0x2fdd,0x3861,
+0x3865,0x3869,0x386f,0x386f,0x3875,0x3879,0x387d,0x3883,0x3887,0x388b,0x388f,0x3895,0x3899,0x389d,0x38a1,0x38a5,
+0x38a9,0x38af,0x38b3,0x38b7,0x38bb,0x38bf,0x38c3,0x38c7,0x38cd,0x38d3,0x38d7,0x38dd,0x38e1,0x38e7,0x38eb,0x2ff5,
+0x38ef,0x38f5,0x38fb,0x38ff,0x3905,0x3909,0x390f,0x3913,0x3917,0x391b,0x391f,0x3923,0x3927,0x392d,0x3933,0x3939,
+0x3575,0x393f,0x3943,0x3947,0x394b,0x394f,0x3953,0x3957,0x395b,0x395f,0x3963,0x3967,0x396b,0x2c9d,0x3971,0x3975,
+0x3979,0x397d,0x3981,0x3985,0x3001,0x3989,0x398d,0x3991,0x3995,0x3999,0x399f,0x39a5,0x39ab,0x39af,0x39b3,0x39b7,
+0x39bb,0x39c1,0x39c5,0x39cb,0x39cf,0x39d3,0x39d9,0x39df,0x39e3,0x2ba9,0x39e7,0x39eb,0x39ef,0x39f3,0x39f7,0x39fb,
+0x3113,0x39ff,0x3a03,0x3a07,0x3a0b,0x3a0f,0x3a13,0x3a17,0x3a1b,0x3a1f,0x3a23,0x3a29,0x3a2d,0x3a31,0x3a35,0x3a39,
+0x3a3d,0x3a43,0x3a49,0x3a4d,0x3a51,0x3127,0x312b,0x3a55,0x3a59,0x3a5f,0x3a63,0x3a67,0x3a6b,0x3a6f,0x3a75,0x3a7b,
+0x3a7f,0x3a83,0x3a87,0x3a8d,0x312f,0x3a91,0x3a97,0x3a9d,0x3aa1,0x3aa5,0x3aa9,0x3aaf,0x3ab3,0x3ab7,0x3abb,0x3abf,
+0x3ac3,0x3ac7,0x3acb,0x3ad1,0x3ad5,0x3ad9,0x3add,0x3ae3,0x3ae7,0x3aeb,0x3aef,0x3af3,0x3af9,0x3aff,0x3b03,0x3b07,
+0x3b0b,0x3b11,0x3b15,0x3147,0x3147,0x3b1b,0x3b1f,0x3b25,0x3b29,0x3b2d,0x3b31,0x3b35,0x3b39,0x3b3d,0x3b41,0x314b,
+0x3b47,0x3b4b,0x3b4f,0x3b53,0x3b57,0x3b5b,0x3b61,0x3b65,0x3b6b,0x3b71,0x3b77,0x3b7b,0x3b7f,0x3b83,0x3b87,0x3b8b,
+0x3b8f,0x3b93,0x3b97,1,1,1
};
static const UCPTrie norm2_nfc_data_trie={
norm2_nfc_data_trieIndex,
{ norm2_nfc_data_trieData },
- 1746, 7892,
+ 1748, 7974,
0x2fc00, 0x30,
0, 0,
0, 0,
@@ -1128,7 +1131,7 @@ static const uint16_t norm2_nfc_data_extraData[7732]={
};
static const uint8_t norm2_nfc_data_smallFCD[256]={
-0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0xe6,0x66,0x46,0x64,0x46,0x66,0x5b,
+0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xd7,0xe6,0x66,0x46,0x66,0x46,0x66,0x5b,
0x12,0,0,4,0,0,0,0x43,0x20,2,0x69,0xae,0xc2,0xc0,0xff,0xff,
0xc0,0x72,0xbf,0,0,0,0,0,0,0,0x40,0,0x80,0x88,0,0,
0xfe,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
diff --git a/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h b/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
index e8bd52c6ae3..584835da57b 100644
--- a/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
+++ b/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
@@ -38,7 +38,7 @@ public:
virtual UnicodeString &
normalize(const UnicodeString &src,
UnicodeString &dest,
- UErrorCode &errorCode) const {
+ UErrorCode &errorCode) const U_OVERRIDE {
if(U_FAILURE(errorCode)) {
dest.setToBogus();
return dest;
@@ -64,13 +64,13 @@ public:
virtual UnicodeString &
normalizeSecondAndAppend(UnicodeString &first,
const UnicodeString &second,
- UErrorCode &errorCode) const {
+ UErrorCode &errorCode) const U_OVERRIDE {
return normalizeSecondAndAppend(first, second, true, errorCode);
}
virtual UnicodeString &
append(UnicodeString &first,
const UnicodeString &second,
- UErrorCode &errorCode) const {
+ UErrorCode &errorCode) const U_OVERRIDE {
return normalizeSecondAndAppend(first, second, false, errorCode);
}
UnicodeString &
@@ -107,7 +107,7 @@ public:
UnicodeString &safeMiddle,
ReorderingBuffer &buffer, UErrorCode &errorCode) const = 0;
virtual UBool
- getDecomposition(UChar32 c, UnicodeString &decomposition) const {
+ getDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE {
UChar buffer[4];
int32_t length;
const UChar *d=impl.getDecomposition(c, buffer, length);
@@ -122,7 +122,7 @@ public:
return true;
}
virtual UBool
- getRawDecomposition(UChar32 c, UnicodeString &decomposition) const {
+ getRawDecomposition(UChar32 c, UnicodeString &decomposition) const U_OVERRIDE {
UChar buffer[30];
int32_t length;
const UChar *d=impl.getRawDecomposition(c, buffer, length);
@@ -137,18 +137,18 @@ public:
return true;
}
virtual UChar32
- composePair(UChar32 a, UChar32 b) const {
+ composePair(UChar32 a, UChar32 b) const U_OVERRIDE {
return impl.composePair(a, b);
}
virtual uint8_t
- getCombiningClass(UChar32 c) const {
+ getCombiningClass(UChar32 c) const U_OVERRIDE {
return impl.getCC(impl.getNorm16(c));
}
// quick checks
virtual UBool
- isNormalized(const UnicodeString &s, UErrorCode &errorCode) const {
+ isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
if(U_FAILURE(errorCode)) {
return false;
}
@@ -161,11 +161,11 @@ public:
return sLimit==spanQuickCheckYes(sArray, sLimit, errorCode);
}
virtual UNormalizationCheckResult
- quickCheck(const UnicodeString &s, UErrorCode &errorCode) const {
+ quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
return Normalizer2WithImpl::isNormalized(s, errorCode) ? UNORM_YES : UNORM_NO;
}
virtual int32_t
- spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const {
+ spanQuickCheckYes(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
if(U_FAILURE(errorCode)) {
return 0;
}
@@ -194,27 +194,57 @@ public:
private:
virtual void
normalize(const UChar *src, const UChar *limit,
- ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
impl.decompose(src, limit, &buffer, errorCode);
}
using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function.
virtual void
normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
UnicodeString &safeMiddle,
- ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
impl.decomposeAndAppend(src, limit, doNormalize, safeMiddle, buffer, errorCode);
}
+
+ void
+ normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
+ Edits *edits, UErrorCode &errorCode) const U_OVERRIDE {
+ if (U_FAILURE(errorCode)) {
+ return;
+ }
+ if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) {
+ edits->reset();
+ }
+ const uint8_t *s = reinterpret_cast<const uint8_t *>(src.data());
+ impl.decomposeUTF8(options, s, s + src.length(), &sink, edits, errorCode);
+ sink.Flush();
+ }
+ virtual UBool
+ isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const U_OVERRIDE {
+ if(U_FAILURE(errorCode)) {
+ return false;
+ }
+ const uint8_t *s = reinterpret_cast<const uint8_t *>(sp.data());
+ const uint8_t *sLimit = s + sp.length();
+ return sLimit == impl.decomposeUTF8(0, s, sLimit, nullptr, nullptr, errorCode);
+ }
+
virtual const UChar *
- spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const {
+ spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const U_OVERRIDE {
return impl.decompose(src, limit, NULL, errorCode);
}
using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function.
- virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
+ virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const U_OVERRIDE {
return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO;
}
- virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasDecompBoundaryBefore(c); }
- virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasDecompBoundaryAfter(c); }
- virtual UBool isInert(UChar32 c) const { return impl.isDecompInert(c); }
+ virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE {
+ return impl.hasDecompBoundaryBefore(c);
+ }
+ virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE {
+ return impl.hasDecompBoundaryAfter(c);
+ }
+ virtual UBool isInert(UChar32 c) const U_OVERRIDE {
+ return impl.isDecompInert(c);
+ }
};
class ComposeNormalizer2 : public Normalizer2WithImpl {
@@ -321,24 +351,30 @@ public:
private:
virtual void
normalize(const UChar *src, const UChar *limit,
- ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
impl.makeFCD(src, limit, &buffer, errorCode);
}
using Normalizer2WithImpl::normalize; // Avoid warning about hiding base class function.
virtual void
normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
UnicodeString &safeMiddle,
- ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+ ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
impl.makeFCDAndAppend(src, limit, doNormalize, safeMiddle, buffer, errorCode);
}
virtual const UChar *
- spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const {
+ spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const U_OVERRIDE {
return impl.makeFCD(src, limit, NULL, errorCode);
}
using Normalizer2WithImpl::spanQuickCheckYes; // Avoid warning about hiding base class function.
- virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasFCDBoundaryBefore(c); }
- virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasFCDBoundaryAfter(c); }
- virtual UBool isInert(UChar32 c) const { return impl.isFCDInert(c); }
+ virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE {
+ return impl.hasFCDBoundaryBefore(c);
+ }
+ virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE {
+ return impl.hasFCDBoundaryAfter(c);
+ }
+ virtual UBool isInert(UChar32 c) const U_OVERRIDE {
+ return impl.isFCDInert(c);
+ }
};
struct Norm2AllModes : public UMemory {
diff --git a/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp b/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
index cbf6b4d9804..5bfd49e8cb9 100644
--- a/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
@@ -86,7 +86,7 @@ UChar32 codePointFromValidUTF8(const uint8_t *cpStart, const uint8_t *cpLimit) {
case 4:
return ((c&7)<<18) | ((cpStart[1]&0x3f)<<12) | ((cpStart[2]&0x3f)<<6) | (cpStart[3]&0x3f);
default:
- UPRV_UNREACHABLE; // Should not occur.
+ UPRV_UNREACHABLE_EXIT; // Should not occur.
}
}
@@ -731,9 +731,131 @@ UBool Normalizer2Impl::decompose(UChar32 c, uint16_t norm16,
return buffer.append((const UChar *)mapping+1, length, TRUE, leadCC, trailCC, errorCode);
}
+// Dual functionality:
+// sink != nullptr: normalize
+// sink == nullptr: isNormalized/spanQuickCheckYes
+const uint8_t *
+Normalizer2Impl::decomposeUTF8(uint32_t options,
+ const uint8_t *src, const uint8_t *limit,
+ ByteSink *sink, Edits *edits, UErrorCode &errorCode) const {
+ U_ASSERT(limit != nullptr);
+ UnicodeString s16;
+ uint8_t minNoLead = leadByteForCP(minDecompNoCP);
+
+ const uint8_t *prevBoundary = src;
+ // only for quick check
+ uint8_t prevCC = 0;
+
+ for (;;) {
+ // Fast path: Scan over a sequence of characters below the minimum "no" code point,
+ // or with (decompYes && ccc==0) properties.
+ const uint8_t *fastStart = src;
+ const uint8_t *prevSrc;
+ uint16_t norm16 = 0;
+
+ for (;;) {
+ if (src == limit) {
+ if (prevBoundary != limit && sink != nullptr) {
+ ByteSinkUtil::appendUnchanged(prevBoundary, limit,
+ *sink, options, edits, errorCode);
+ }
+ return src;
+ }
+ if (*src < minNoLead) {
+ ++src;
+ } else {
+ prevSrc = src;
+ UCPTRIE_FAST_U8_NEXT(normTrie, UCPTRIE_16, src, limit, norm16);
+ if (!isMostDecompYesAndZeroCC(norm16)) {
+ break;
+ }
+ }
+ }
+ // isMostDecompYesAndZeroCC(norm16) is false, that is, norm16>=minYesNo,
+ // and the current character at [prevSrc..src[ is not a common case with cc=0
+ // (MIN_NORMAL_MAYBE_YES or JAMO_VT).
+ // It could still be a maybeYes with cc=0.
+ if (prevSrc != fastStart) {
+ // The fast path looped over yes/0 characters before the current one.
+ if (sink != nullptr &&
+ !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ prevBoundary = prevSrc;
+ prevCC = 0;
+ }
+
+ // Medium-fast path: Quick check.
+ if (isMaybeOrNonZeroCC(norm16)) {
+ // Does not decompose.
+ uint8_t cc = getCCFromYesOrMaybe(norm16);
+ if (prevCC <= cc || cc == 0) {
+ prevCC = cc;
+ if (cc <= 1) {
+ if (sink != nullptr &&
+ !ByteSinkUtil::appendUnchanged(prevBoundary, src,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ prevBoundary = src;
+ }
+ continue;
+ }
+ }
+ if (sink == nullptr) {
+ return prevBoundary; // quick check: "no" or cc out of order
+ }
+
+ // Slow path
+ // Decompose up to and including the current character.
+ if (prevBoundary != prevSrc && norm16HasDecompBoundaryBefore(norm16)) {
+ if (!ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ prevBoundary = prevSrc;
+ }
+ ReorderingBuffer buffer(*this, s16, errorCode);
+ if (U_FAILURE(errorCode)) {
+ break;
+ }
+ decomposeShort(prevBoundary, src, STOP_AT_LIMIT, FALSE /* onlyContiguous */,
+ buffer, errorCode);
+ // Decompose until the next boundary.
+ if (buffer.getLastCC() > 1) {
+ src = decomposeShort(src, limit, STOP_AT_DECOMP_BOUNDARY, FALSE /* onlyContiguous */,
+ buffer, errorCode);
+ }
+ if (U_FAILURE(errorCode)) {
+ break;
+ }
+ if ((src - prevSrc) > INT32_MAX) { // guard before buffer.equals()
+ errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+ break;
+ }
+ // We already know there was a change if the original character decomposed;
+ // otherwise compare.
+ if (isMaybeOrNonZeroCC(norm16) && buffer.equals(prevBoundary, src)) {
+ if (!ByteSinkUtil::appendUnchanged(prevBoundary, src,
+ *sink, options, edits, errorCode)) {
+ break;
+ }
+ } else {
+ if (!ByteSinkUtil::appendChange(prevBoundary, src, buffer.getStart(), buffer.length(),
+ *sink, edits, errorCode)) {
+ break;
+ }
+ }
+ prevBoundary = src;
+ prevCC = 0;
+ }
+ return src;
+}
+
const uint8_t *
Normalizer2Impl::decomposeShort(const uint8_t *src, const uint8_t *limit,
- UBool stopAtCompBoundary, UBool onlyContiguous,
+ StopAt stopAt, UBool onlyContiguous,
ReorderingBuffer &buffer, UErrorCode &errorCode) const {
if (U_FAILURE(errorCode)) {
return nullptr;
@@ -746,21 +868,28 @@ Normalizer2Impl::decomposeShort(const uint8_t *src, const uint8_t *limit,
UChar32 c = U_SENTINEL;
if (norm16 >= limitNoNo) {
if (isMaybeOrNonZeroCC(norm16)) {
- // No boundaries around this character.
+ // No comp boundaries around this character.
+ uint8_t cc = getCCFromYesOrMaybe(norm16);
+ if (cc == 0 && stopAt == STOP_AT_DECOMP_BOUNDARY) {
+ return prevSrc;
+ }
c = codePointFromValidUTF8(prevSrc, src);
- if (!buffer.append(c, getCCFromYesOrMaybe(norm16), errorCode)) {
+ if (!buffer.append(c, cc, errorCode)) {
return nullptr;
}
+ if (stopAt == STOP_AT_DECOMP_BOUNDARY && buffer.getLastCC() <= 1) {
+ return src;
+ }
continue;
}
// Maps to an isCompYesAndZeroCC.
- if (stopAtCompBoundary) {
+ if (stopAt != STOP_AT_LIMIT) {
return prevSrc;
}
c = codePointFromValidUTF8(prevSrc, src);
c = mapAlgorithmic(c, norm16);
norm16 = getRawNorm16(c);
- } else if (stopAtCompBoundary && norm16 < minNoNoCompNoMaybeCC) {
+ } else if (stopAt != STOP_AT_LIMIT && norm16 < minNoNoCompNoMaybeCC) {
return prevSrc;
}
// norm16!=INERT guarantees that [prevSrc, src[ is valid UTF-8.
@@ -768,7 +897,8 @@ Normalizer2Impl::decomposeShort(const uint8_t *src, const uint8_t *limit,
// its norm16==INERT is normalization-inert,
// so it gets copied unchanged in the fast path,
// and we stop the slow path where invalid UTF-8 begins.
- U_ASSERT(norm16 != INERT);
+ // c >= 0 is the result of an algorithmic mapping.
+ U_ASSERT(c >= 0 || norm16 != INERT);
if (norm16 < minYesNo) {
if (c < 0) {
c = codePointFromValidUTF8(prevSrc, src);
@@ -798,11 +928,15 @@ Normalizer2Impl::decomposeShort(const uint8_t *src, const uint8_t *limit,
} else {
leadCC = 0;
}
+ if (leadCC == 0 && stopAt == STOP_AT_DECOMP_BOUNDARY) {
+ return prevSrc;
+ }
if (!buffer.append((const char16_t *)mapping+1, length, TRUE, leadCC, trailCC, errorCode)) {
return nullptr;
}
}
- if (stopAtCompBoundary && norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+ if ((stopAt == STOP_AT_COMP_BOUNDARY && norm16HasCompBoundaryAfter(norm16, onlyContiguous)) ||
+ (stopAt == STOP_AT_DECOMP_BOUNDARY && buffer.getLastCC() <= 1)) {
return src;
}
}
@@ -1954,10 +2088,10 @@ Normalizer2Impl::composeUTF8(uint32_t options, UBool onlyContiguous,
break;
}
// We know there is not a boundary here.
- decomposeShort(prevSrc, src, FALSE /* !stopAtCompBoundary */, onlyContiguous,
+ decomposeShort(prevSrc, src, STOP_AT_LIMIT, onlyContiguous,
buffer, errorCode);
// Decompose until the next boundary.
- src = decomposeShort(src, limit, TRUE /* stopAtCompBoundary */, onlyContiguous,
+ src = decomposeShort(src, limit, STOP_AT_COMP_BOUNDARY, onlyContiguous,
buffer, errorCode);
if (U_FAILURE(errorCode)) {
break;
@@ -2370,7 +2504,7 @@ void CanonIterData::addToStartSet(UChar32 origin, UChar32 decompLead, UErrorCode
UChar32 firstOrigin=(UChar32)(canonValue&CANON_VALUE_MASK);
canonValue=(canonValue&~CANON_VALUE_MASK)|CANON_HAS_SET|(uint32_t)canonStartSets.size();
umutablecptrie_set(mutableTrie, decompLead, canonValue, &errorCode);
- canonStartSets.addElement(set, errorCode);
+ canonStartSets.addElementX(set, errorCode);
if(firstOrigin!=0) {
set->add(firstOrigin);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h b/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
index 4218a30a345..7c85448b71b 100644
--- a/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
+++ b/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
@@ -241,7 +241,7 @@ private:
* Low-level implementation of the Unicode Normalization Algorithm.
* For the data structure and details see the documentation at the end of
* this normalizer2impl.h and in the design doc at
- * http://site.icu-project.org/design/normalization/custom
+ * https://icu.unicode.org/design/normalization/custom
*/
class U_COMMON_API Normalizer2Impl : public UObject {
public:
@@ -491,6 +491,12 @@ public:
UnicodeString &safeMiddle,
ReorderingBuffer &buffer,
UErrorCode &errorCode) const;
+
+ /** sink==nullptr: isNormalized()/spanQuickCheckYes() */
+ const uint8_t *decomposeUTF8(uint32_t options,
+ const uint8_t *src, const uint8_t *limit,
+ ByteSink *sink, Edits *edits, UErrorCode &errorCode) const;
+
UBool compose(const UChar *src, const UChar *limit,
UBool onlyContiguous,
UBool doCompose,
@@ -649,6 +655,9 @@ private:
UChar32 minNeedDataCP,
ReorderingBuffer *buffer,
UErrorCode &errorCode) const;
+
+ enum StopAt { STOP_AT_LIMIT, STOP_AT_DECOMP_BOUNDARY, STOP_AT_COMP_BOUNDARY };
+
const UChar *decomposeShort(const UChar *src, const UChar *limit,
UBool stopAtCompBoundary, UBool onlyContiguous,
ReorderingBuffer &buffer, UErrorCode &errorCode) const;
@@ -656,7 +665,7 @@ private:
ReorderingBuffer &buffer, UErrorCode &errorCode) const;
const uint8_t *decomposeShort(const uint8_t *src, const uint8_t *limit,
- UBool stopAtCompBoundary, UBool onlyContiguous,
+ StopAt stopAt, UBool onlyContiguous,
ReorderingBuffer &buffer, UErrorCode &errorCode) const;
static int32_t combine(const uint16_t *list, UChar32 trail);
@@ -797,7 +806,7 @@ unorm_getFCD16(UChar32 c);
* Constants are defined as enum values of the Normalizer2Impl class.
*
* Many details of the data structures are described in the design doc
- * which is at http://site.icu-project.org/design/normalization/custom
+ * which is at https://icu.unicode.org/design/normalization/custom
*
* int32_t indexes[indexesLength]; -- indexesLength=indexes[IX_NORM_TRIE_OFFSET]/4;
*
diff --git a/Build/source/libs/icu/icu-src/source/common/normlzr.cpp b/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
index 2dea0ffc33c..1f4fa151797 100644
--- a/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
@@ -108,7 +108,7 @@ int32_t Normalizer::hashCode() const
return text->hashCode() + fUMode + fOptions + buffer.hashCode() + bufferPos + currentIndex + nextIndex;
}
-UBool Normalizer::operator==(const Normalizer& that) const
+bool Normalizer::operator==(const Normalizer& that) const
{
return
this==&that ||
diff --git a/Build/source/libs/icu/icu-src/source/common/pluralmap.h b/Build/source/libs/icu/icu-src/source/common/pluralmap.h
index d898ac4671f..4988fd2699f 100644
--- a/Build/source/libs/icu/icu-src/source/common/pluralmap.h
+++ b/Build/source/libs/icu/icu-src/source/common/pluralmap.h
@@ -24,7 +24,7 @@ class U_COMMON_API PluralMapBase : public UMemory {
public:
/**
* The names of all the plural categories. NONE is not an actual plural
- * category, but rather represents the absense of a plural category.
+ * category, but rather represents the absence of a plural category.
*/
enum Category {
NONE = -1,
@@ -46,7 +46,7 @@ public:
/**
* Converts a category name such as "zero", "one", "two", "few", "many"
- * or "other" to a category enum. Returns NONE for urecongized
+ * or "other" to a category enum. Returns NONE for unrecognized
* category name.
*/
static Category toCategory(const UnicodeString &categoryName);
@@ -62,7 +62,7 @@ public:
* A Map of plural categories to values. It maintains ownership of the
* values.
*
- * Type T is the value type. T must provide the followng:
+ * Type T is the value type. T must provide the following:
* 1) Default constructor
* 2) Copy constructor
* 3) Assignment operator
diff --git a/Build/source/libs/icu/icu-src/source/common/propname_data.h b/Build/source/libs/icu/icu-src/source/common/propname_data.h
index 6f63e9cdd47..c98a0f790bd 100644
--- a/Build/source/libs/icu/icu-src/source/common/propname_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/propname_data.h
@@ -1,6 +1,5 @@
-// © 2016 and later: Unicode, Inc. and others.
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
-//
// Copyright (C) 1999-2016, International Business Machines
// Corporation and others. All Rights Reserved.
//
@@ -8,105 +7,106 @@
//
// machine-generated by: icu/tools/unicode/c/genprops/pnamesbuilder.cpp
-
#ifdef INCLUDED_FROM_PROPNAME_CPP
U_NAMESPACE_BEGIN
-const int32_t PropNameData::indexes[8]={0x20,0x15b8,0x5048,0xa69a,0xa69a,0xa69a,0x2f,0};
+const int32_t PropNameData::indexes[8]={0x20,0x163c,0x521b,0xab62,0xab62,0xab62,0x31,0};
-const int32_t PropNameData::valueMaps[1382]={
-6,0,0x41,0,0xe3,0x368,0xe3,0x37e,0xe3,0x393,0xe3,0x3a9,0xe3,0x3b4,0xe3,0x3d5,
-0xe3,0x3e5,0xe3,0x3f4,0xe3,0x402,0xe3,0x426,0xe3,0x43d,0xe3,0x455,0xe3,0x46c,0xe3,0x47b,
-0xe3,0x48a,0xe3,0x49b,0xe3,0x4a9,0xe3,0x4bb,0xe3,0x4d5,0xe3,0x4f0,0xe3,0x505,0xe3,0x522,
-0xe3,0x533,0xe3,0x53e,0xe3,0x55d,0xe3,0x573,0xe3,0x584,0xe3,0x594,0xe3,0x5af,0xe3,0x5c8,
-0xe3,0x5d9,0xe3,0x5f3,0xe3,0x606,0xe3,0x616,0xe3,0x630,0xe3,0x649,0xe3,0x660,0xe3,0x674,
-0xe3,0x68a,0xe3,0x69e,0xe3,0x6b4,0xe3,0x6ce,0xe3,0x6e6,0xe3,0x702,0xe3,0x70a,0xe3,0x712,
-0xe3,0x71a,0xe3,0x722,0xe3,0x72b,0xe3,0x738,0xe3,0x74b,0xe3,0x768,0xe3,0x785,0xe3,0x7a2,
-0xe3,0x7c0,0xe3,0x7de,0xe3,0x802,0xe3,0x80f,0xe3,0x829,0xe3,0x83e,0xe3,0x859,0xe3,0x870,
-0xe3,0x887,0xe3,0x8a9,0xe3,0x1000,0x1019,0x8c8,0x15f,0xae8,0x17a,0x2f11,0xe9,0x2f30,0x2b3,0x306e,
-0x2c9,0x30c8,0x2d3,0x3325,0x2f5,0x3c20,0x35f,0x3c90,0x369,0x3f2a,0x398,0x3f68,0x3a0,0x4a5b,0x465,0x4ad9,
-0x46f,0x4afe,0x475,0x4b18,0x47b,0x4b39,0x482,0x4b53,0xe9,0x4b78,0xe9,0x4b9e,0x489,0x4c48,0x49f,0x4cc1,
-0x4b2,0x4d73,0x4cd,0x4daa,0x4d4,0x4f8a,0x4e8,0x540a,0x510,0x2000,0x2001,0x5469,0x518,0x3000,0x3001,0x54f5,
-0,0x4000,0x400e,0x5507,0,0x5510,0,0x552a,0,0x553b,0,0x554c,0,0x5562,0,0x556b,
-0,0x5588,0,0x55a6,0,0x55c4,0,0x55e2,0,0x55f8,0,0x560c,0,0x5622,0,0x7000,
-0x7001,0x563b,0,0x7d6,0x12,0,1,0x12,0x20,0x7f4,0x4a,0,1,6,7,8,
-9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,
-0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x54,0x5b,0x67,0x6b,
-0x76,0x7a,0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,
-0xe6,0xe8,0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x5e,0x68,0x79,0x84,0x91,0x9e,0xab,0xb8,
-0xc5,0xd2,0xdf,0xec,0xf9,0x106,0x113,0x120,0x12d,0x13a,0x147,0x154,0x161,0x16e,0x17b,0x188,
-0x195,0x1a2,0x1af,0x1bc,0x1c9,0x1d6,0x1e3,0x1f0,0x1fd,0x20c,0x21b,0x22a,0x239,0x248,0x257,0x266,
-0x275,0x28f,0x2a3,0x2b7,0x2d2,0x2e1,0x2ea,0x2fa,0x302,0x30b,0x31a,0x323,0x333,0x344,0x355,0x995,
-1,0,0x17,0x8d7,0x8e8,0x8f9,0x90d,0x924,0x93c,0x94e,0x963,0x97a,0x98f,0x99f,0x9b1,0x9ce,
-0x9ea,0x9fc,0xa19,0xa35,0xa51,0xa66,0xa7b,0xa95,0xab0,0xacb,0xb37,1,0,0x135,0xaf3,0xb00,
-0xb13,0xb3b,0xb59,0xb77,0xb8f,0xbba,0xbe4,0xbfc,0xc0f,0xc22,0xc31,0xc40,0xc4f,0xc5e,0xc75,0xc86,
-0xc99,0xcac,0xcb9,0xcc6,0xcd5,0xce6,0xcfb,0xd0c,0xd17,0xd20,0xd31,0xd42,0xd55,0xd67,0xd7a,0xd8d,
-0xdcc,0xdd9,0xde6,0xdf3,0xe08,0xe38,0xe52,0xe73,0xe9e,0xec1,0xf1f,0xf46,0xf61,0xf70,0xf97,0xfbf,
-0xfe2,0x1005,0x102f,0x1048,0x1067,0x108a,0x10ae,0x10c1,0x10db,0x1105,0x111d,0x1145,0x116e,0x1181,0x1194,0x11a7,
-0x11ce,0x11dd,0x11fd,0x122b,0x1249,0x1277,0x1293,0x12ae,0x12c7,0x12e0,0x1301,0x1331,0x1350,0x1372,0x13a6,0x13d3,
-0x1418,0x1439,0x1463,0x1484,0x14ad,0x14c0,0x14f3,0x150a,0x1519,0x152a,0x1555,0x156c,0x159d,0x15cb,0x160e,0x1619,
-0x1652,0x1663,0x1674,0x1681,0x1694,0x16ce,0x16f2,0x1716,0x1750,0x1788,0x17b3,0x17cb,0x17f7,0x1823,0x1830,0x183f,
-0x185c,0x187e,0x18ac,0x18cc,0x18f3,0x191a,0x1939,0x194c,0x195d,0x196e,0x1993,0x19b8,0x19df,0x1a13,0x1a40,0x1a5e,
-0x1a71,0x1a8a,0x1ac3,0x1ad2,0x1af2,0x1b14,0x1b36,0x1b4d,0x1b64,0x1b91,0x1baa,0x1bc3,0x1bf4,0x1c1e,0x1c39,0x1c4c,
-0x1c6b,0x1c74,0x1c87,0x1ca5,0x1cc3,0x1cd6,0x1ced,0x1d02,0x1d37,0x1d5b,0x1d70,0x1d7f,0x1d92,0x1db6,0x1dbf,0x1de3,
-0x1dfa,0x1e0d,0x1e1c,0x1e27,0x1e48,0x1e60,0x1e6f,0x1e7e,0x1e8d,0x1ea4,0x1eb9,0x1ece,0x1f07,0x1f1a,0x1f36,0x1f41,
-0x1f4e,0x1f7c,0x1fa0,0x1fc3,0x1fd6,0x1ff8,0x200b,0x2026,0x2049,0x206c,0x2091,0x20a2,0x20d1,0x20fe,0x2115,0x2130,
-0x213f,0x216a,0x21a2,0x21dc,0x220a,0x221b,0x2228,0x224c,0x225b,0x2277,0x2291,0x22ae,0x22e6,0x22fb,0x2328,0x2347,
-0x2375,0x2395,0x23c9,0x23d8,0x2402,0x2425,0x2450,0x245b,0x246c,0x2487,0x24ab,0x24b8,0x24cd,0x24f4,0x251f,0x2556,
-0x2569,0x257a,0x25aa,0x25bb,0x25ca,0x25df,0x25fd,0x2610,0x2623,0x263a,0x2657,0x2662,0x266b,0x268d,0x26a2,0x26c7,
-0x26de,0x2707,0x2722,0x2737,0x2750,0x2771,0x27a6,0x27b7,0x27e8,0x280c,0x281d,0x2836,0x2841,0x286e,0x2890,0x28be,
-0x28f1,0x2900,0x2911,0x292e,0x2970,0x2997,0x29a4,0x29b9,0x29dd,0x2a03,0x2a3c,0x2a4d,0x2a71,0x2a7c,0x2a89,0x2a98,
-0x2abd,0x2aeb,0x2b07,0x2b24,0x2b31,0x2b42,0x2b60,0x2b83,0x2ba0,0x2bad,0x2bcd,0x2bea,0x2c0b,0x2c34,0x2c45,0x2c64,
-0x2c7d,0x2c96,0x2ca7,0x2cf0,0x2d01,0x2d1a,0x2d49,0x2d76,0x2d9b,0x2ddd,0x2df9,0x2e08,0x2e1f,0x2e4d,0x2e66,0x2e8f,
-0x2ea9,0x2ee4,0x2f02,0x1e85,1,0,0x12,0x2f47,0x2f57,0x2f6a,0x2f7a,0x2f8a,0x2f99,0x2fa9,0x2fbb,0x2fce,
-0x2fe0,0x2ff0,0x3000,0x300f,0x301e,0x302e,0x303b,0x304a,0x305e,0x1f43,1,0,6,0x3083,0x308e,0x309b,
-0x30a8,0x30b5,0x30c0,0x1f87,1,0,0x1e,0x30dd,0x30ec,0x3101,0x3116,0x312b,0x313f,0x3150,0x3164,0x3177,
-0x3188,0x31a1,0x31b3,0x31c4,0x31d8,0x31eb,0x3203,0x3215,0x3220,0x3230,0x323e,0x3253,0x3268,0x327e,0x3298,0x32ae,
-0x32be,0x32d2,0x32e6,0x32f7,0x330f,0x21b2,1,0,0x66,0x3337,0x335a,0x3363,0x3370,0x337b,0x3384,0x338f,
-0x3398,0x33b1,0x33b6,0x33bf,0x33dc,0x33e5,0x33f2,0x33fb,0x341f,0x3426,0x342f,0x3442,0x344d,0x3456,0x3461,0x347a,
-0x3483,0x3492,0x349d,0x34a6,0x34b1,0x34ba,0x34c1,0x34ca,0x34d5,0x34de,0x34f7,0x3500,0x350d,0x3518,0x3529,0x3534,
-0x3549,0x3560,0x3569,0x3572,0x358b,0x3596,0x359f,0x35a8,0x35bf,0x35dc,0x35e7,0x35f8,0x3603,0x360a,0x3617,0x3624,
-0x3651,0x3666,0x366f,0x368a,0x36ad,0x36ce,0x36ef,0x3714,0x373b,0x375c,0x377f,0x37a0,0x37c7,0x37e8,0x380d,0x382c,
-0x384b,0x386a,0x3887,0x38a8,0x38c9,0x38ec,0x3911,0x3930,0x394f,0x3970,0x3997,0x39bc,0x39db,0x39fc,0x3a1f,0x3a3a,
-0x3a53,0x3a6e,0x3a87,0x3aa4,0x3abf,0x3adc,0x3afb,0x3b18,0x3b35,0x3b54,0x3b71,0x3b8c,0x3ba9,0x3bc6,0x3bf9,0x24f7,
-1,0,6,0x3c31,0x3c40,0x3c50,0x3c60,0x3c70,0x3c81,0x2555,1,0,0x2b,0x3c9f,0x3cab,0x3cb9,
-0x3cc8,0x3cd7,0x3ce7,0x3cf8,0x3d0c,0x3d21,0x3d37,0x3d4a,0x3d5e,0x3d6e,0x3d77,0x3d82,0x3d92,0x3dae,0x3dc0,0x3dce,
-0x3ddd,0x3de9,0x3dfe,0x3e12,0x3e25,0x3e33,0x3e47,0x3e55,0x3e5f,0x3e71,0x3e7d,0x3e8b,0x3e9b,0x3ea2,0x3ea9,0x3eb0,
-0x3eb7,0x3ebe,0x3ed4,0x3ef5,0x870,0x3f07,0x3f12,0x3f21,0x27ae,1,0,4,0x3f3b,0x3f46,0x3f52,0x3f5c,
-0x27d4,1,0,0xc1,0x3f73,0x3f80,0x3f95,0x3fa2,0x3fb1,0x3fbf,0x3fce,0x3fdd,0x3fef,0x3ffe,0x400c,0x401d,
-0x402c,0x403b,0x4048,0x4054,0x4063,0x4072,0x407c,0x4089,0x4096,0x40a5,0x40b3,0x40c2,0x40ce,0x40d8,0x40e4,0x40f4,
-0x4104,0x4112,0x411e,0x412f,0x413b,0x4147,0x4155,0x4162,0x416e,0x417b,0xd0c,0x4188,0x4196,0x41b0,0x41b9,0x41c7,
-0x41d5,0x41e1,0x41f0,0x41fe,0x420c,0x4218,0x4227,0x4235,0x4243,0x4250,0x425f,0x427a,0x4289,0x429a,0x42ab,0x42be,
-0x42d0,0x42df,0x42f1,0x4300,0x430c,0x4317,0x1e1c,0x4324,0x432f,0x433a,0x4345,0x4350,0x436b,0x4376,0x4381,0x438c,
-0x439f,0x43b3,0x43be,0x43cd,0x43dc,0x43e7,0x43f2,0x43ff,0x440e,0x441c,0x4427,0x4442,0x444c,0x445d,0x446e,0x447d,
-0x448e,0x4499,0x44a4,0x44af,0x44ba,0x44c5,0x44d0,0x44db,0x44e5,0x44f0,0x4500,0x450b,0x4519,0x4526,0x4531,0x4540,
-0x454d,0x455a,0x4569,0x4576,0x4587,0x4599,0x45a9,0x45b4,0x45c7,0x45de,0x45ec,0x45f9,0x4604,0x4611,0x4622,0x463e,
-0x4654,0x465f,0x467c,0x468c,0x469b,0x46a6,0x46b1,0x1f36,0x46bd,0x46c8,0x46e0,0x46f0,0x46ff,0x470d,0x471b,0x4726,
-0x4731,0x4745,0x475c,0x4774,0x4784,0x4794,0x47a4,0x47b6,0x47c1,0x47cc,0x47d6,0x47e2,0x47f0,0x4803,0x480f,0x481c,
-0x4827,0x4843,0x4850,0x485e,0x4877,0x2836,0x4886,0x2657,0x4893,0x48a1,0x48b3,0x48c1,0x48cd,0x48dd,0x2a71,0x48eb,
-0x48f7,0x4902,0x490d,0x4918,0x492c,0x493a,0x4951,0x495d,0x4971,0x497f,0x4991,0x49a7,0x49b5,0x49c7,0x49d5,0x49f2,
-0x4a04,0x4a11,0x4a22,0x4a34,0x4a4e,0x31cc,1,0,6,0x4a75,0x4a88,0x4a98,0x4aa6,0x4ab7,0x4ac7,0x3228,
-0x12,0,1,0x4af1,0x4af7,0x3235,0x12,0,1,0x4af1,0x4af7,0x3242,1,0,3,0x4af1,
-0x4af7,0x4b30,0x3258,1,0,3,0x4af1,0x4af7,0x4b30,0x326e,1,0,0x12,0x4bba,0x4bc4,0x4bd0,
-0x4bd7,0x4be2,0x4be7,0x4bee,0x4bf5,0x4bfe,0x4c03,0x4c08,0x4c18,0x870,0x3f07,0x4c24,0x3f12,0x4c34,0x3f21,0x3317,
-1,0,0xf,0x4bba,0x4c5b,0x4c65,0x4c6f,0x4c7a,0x3ddd,0x4c84,0x4c90,0x4c98,0x4c9f,0x4ca9,0x4bd0,0x4bd7,
-0x4be7,0x4cb3,0x339e,1,0,0x17,0x4bba,0x4cd0,0x4c6f,0x4cdc,0x4ce9,0x4cf7,0x3ddd,0x4d02,0x4bd0,0x4d13,
-0x4be7,0x4d22,0x4d30,0x870,0x3ef5,0x4d3c,0x4d4d,0x3f07,0x4c24,0x3f12,0x4c34,0x3f21,0x4d5e,0x34bb,1,0,
-3,0x4d91,0x4d99,0x4da1,0x34d4,1,0,0x10,0x4dca,0x4dd1,0x4de0,0x4e01,0x4e24,0x4e2f,0x4e4e,0x4e65,
-0x4e72,0x4e7b,0x4e9a,0x4ecd,0x4ee8,0x4f17,0x4f34,0x4f59,0x356d,1,0,0x24,0x4fa8,0x4fb5,0x4fc8,0x4fd5,
-0x5002,0x5027,0x503c,0x505b,0x507c,0x50a9,0x50e2,0x5105,0x5128,0x5155,0x518a,0x51b1,0x51da,0x5211,0x5240,0x5261,
-0x5286,0x5295,0x52b8,0x52cf,0x52dc,0x52eb,0x5308,0x5321,0x5344,0x5369,0x5382,0x5397,0x53a6,0x53b7,0x53c4,0x53e5,
-0x373d,1,0,4,0x5423,0x542e,0x5446,0x545e,0x3779,0x36,1,2,4,8,0xe,0x10,
-0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200,0x400,0x800,0xe00,0x1000,0x2000,0x4000,0x7000,0x8000,0x10000,
-0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,0x30f80000,
-0x30dd,0x30ec,0x3101,0x3116,0x5497,0x312b,0x313f,0x548d,0x3150,0x3164,0x3177,0x54a8,0x3188,0x31a1,0x31b3,0x54bf,
-0x31c4,0x31d8,0x31eb,0x54e8,0x3203,0x3215,0x3220,0x3230,0x5484,0x323e,0x3253,0x3268,0x327e,0x3298,0x32ae,0x32be,
-0x32d2,0x32e6,0x54de,0x32f7,0x330f,0x54c9
+const int32_t PropNameData::valueMaps[1415]={
+6,0,0x48,0,0xf1,0x368,0xf1,0x37e,0xf1,0x393,0xf1,0x3a9,0xf1,0x3b4,0xf1,0x3d5,
+0xf1,0x3e5,0xf1,0x3f4,0xf1,0x402,0xf1,0x426,0xf1,0x43d,0xf1,0x455,0xf1,0x46c,0xf1,0x47b,
+0xf1,0x48a,0xf1,0x49b,0xf1,0x4a9,0xf1,0x4bb,0xf1,0x4d5,0xf1,0x4f0,0xf1,0x505,0xf1,0x522,
+0xf1,0x533,0xf1,0x53e,0xf1,0x55d,0xf1,0x573,0xf1,0x584,0xf1,0x594,0xf1,0x5af,0xf1,0x5c8,
+0xf1,0x5d9,0xf1,0x5f3,0xf1,0x606,0xf1,0x616,0xf1,0x630,0xf1,0x649,0xf1,0x660,0xf1,0x674,
+0xf1,0x68a,0xf1,0x69e,0xf1,0x6b4,0xf1,0x6ce,0xf1,0x6e6,0xf1,0x702,0xf1,0x70a,0xf1,0x712,
+0xf1,0x71a,0xf1,0x722,0xf1,0x72b,0xf1,0x738,0xf1,0x74b,0xf1,0x768,0xf1,0x785,0xf1,0x7a2,
+0xf1,0x7c0,0xf1,0x7de,0xf1,0x802,0xf1,0x80f,0xf1,0x829,0xf1,0x83e,0xf1,0x859,0xf1,0x870,
+0xf1,0x887,0xf1,0x8a9,0xf1,0x8c8,0xf1,0x8e1,0xf1,0x90e,0xf1,0x947,0xf1,0x978,0xf1,0x9a7,
+0xf1,0x9d6,0xf1,0x1000,0x1019,0x9eb,0x16d,0xc0b,0x188,0x3196,0xf7,0x31b5,0x2cd,0x32f3,0x2e3,0x334d,
+0x2ed,0x35aa,0x30f,0x3ed5,0x37b,0x3f45,0x385,0x41df,0x3b4,0x421d,0x3bc,0x4d50,0x486,0x4dce,0x490,0x4df3,
+0x496,0x4e0d,0x49c,0x4e2e,0x4a3,0x4e48,0xf7,0x4e6d,0xf7,0x4e93,0x4aa,0x4f3d,0x4c0,0x4fb6,0x4d3,0x5068,
+0x4ee,0x509f,0x4f5,0x527f,0x509,0x56ff,0x531,0x2000,0x2001,0x575e,0x539,0x3000,0x3001,0x57ea,0,0x4000,
+0x400e,0x57fc,0,0x5805,0,0x581f,0,0x5830,0,0x5841,0,0x5857,0,0x5860,0,0x587d,
+0,0x589b,0,0x58b9,0,0x58d7,0,0x58ed,0,0x5901,0,0x5917,0,0x7000,0x7001,0x5930,
+0,0x844,0x12,0,1,0x12,0x20,0x862,0x4a,0,1,6,7,8,9,0xa,
+0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,
+0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x54,0x5b,0x67,0x6b,0x76,0x7a,
+0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,
+0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x5e,0x68,0x79,0x84,0x91,0x9e,0xab,0xb8,0xc5,0xd2,
+0xdf,0xec,0xf9,0x106,0x113,0x120,0x12d,0x13a,0x147,0x154,0x161,0x16e,0x17b,0x188,0x195,0x1a2,
+0x1af,0x1bc,0x1c9,0x1d6,0x1e3,0x1f0,0x1fd,0x20c,0x21b,0x22a,0x239,0x248,0x257,0x266,0x275,0x28f,
+0x2a3,0x2b7,0x2d2,0x2e1,0x2ea,0x2fa,0x302,0x30b,0x31a,0x323,0x333,0x344,0x355,0xa03,1,0,
+0x17,0x9fa,0xa0b,0xa1c,0xa30,0xa47,0xa5f,0xa71,0xa86,0xa9d,0xab2,0xac2,0xad4,0xaf1,0xb0d,0xb1f,
+0xb3c,0xb58,0xb74,0xb89,0xb9e,0xbb8,0xbd3,0xbee,0xba5,1,0,0x141,0xc16,0xc23,0xc36,0xc5e,
+0xc7c,0xc9a,0xcb2,0xcdd,0xd07,0xd1f,0xd32,0xd45,0xd54,0xd63,0xd72,0xd81,0xd98,0xda9,0xdbc,0xdcf,
+0xddc,0xde9,0xdf8,0xe09,0xe1e,0xe2f,0xe3a,0xe43,0xe54,0xe65,0xe78,0xe8a,0xe9d,0xeb0,0xeef,0xefc,
+0xf09,0xf16,0xf2b,0xf5b,0xf75,0xf96,0xfc1,0xfe4,0x1042,0x1069,0x1084,0x1093,0x10ba,0x10e2,0x1105,0x1128,
+0x1152,0x116b,0x118a,0x11ad,0x11d1,0x11e4,0x11fe,0x1228,0x1240,0x1268,0x1291,0x12a4,0x12b7,0x12ca,0x12f1,0x1300,
+0x1320,0x134e,0x136c,0x139a,0x13b6,0x13d1,0x13ea,0x1403,0x1424,0x1454,0x1473,0x1495,0x14c9,0x14f6,0x153b,0x155c,
+0x1586,0x15a7,0x15d0,0x15e3,0x1616,0x162d,0x163c,0x164d,0x1678,0x168f,0x16c0,0x16ee,0x1731,0x173c,0x1775,0x1786,
+0x1797,0x17a4,0x17b7,0x17f1,0x1815,0x1839,0x1873,0x18ab,0x18d6,0x18ee,0x191a,0x1946,0x1953,0x1962,0x197f,0x19a1,
+0x19cf,0x19ef,0x1a16,0x1a3d,0x1a5c,0x1a6f,0x1a80,0x1a91,0x1ab6,0x1adb,0x1b02,0x1b36,0x1b63,0x1b81,0x1b94,0x1bad,
+0x1be6,0x1bf5,0x1c15,0x1c37,0x1c59,0x1c70,0x1c87,0x1cb4,0x1ccd,0x1ce6,0x1d17,0x1d41,0x1d5c,0x1d6f,0x1d8e,0x1d97,
+0x1daa,0x1dc8,0x1de6,0x1df9,0x1e10,0x1e25,0x1e5a,0x1e7e,0x1e93,0x1ea2,0x1eb5,0x1ed9,0x1ee2,0x1f06,0x1f1d,0x1f30,
+0x1f3f,0x1f4a,0x1f6b,0x1f83,0x1f92,0x1fa1,0x1fb0,0x1fc7,0x1fdc,0x1ff1,0x202a,0x203d,0x2059,0x2064,0x2071,0x209f,
+0x20c3,0x20e6,0x20f9,0x211b,0x212e,0x2149,0x216c,0x218f,0x21b4,0x21c5,0x21f4,0x2221,0x2238,0x2253,0x2262,0x228d,
+0x22c5,0x22ff,0x232d,0x233e,0x234b,0x236f,0x237e,0x239a,0x23b4,0x23d1,0x2409,0x241e,0x244b,0x246a,0x2498,0x24b8,
+0x24ec,0x24fb,0x2525,0x2548,0x2573,0x257e,0x258f,0x25aa,0x25ce,0x25db,0x25f0,0x2617,0x2642,0x2679,0x268c,0x269d,
+0x26cd,0x26de,0x26ed,0x2702,0x2720,0x2733,0x2746,0x275d,0x277a,0x2785,0x278e,0x27b0,0x27c5,0x27ea,0x2801,0x282a,
+0x2845,0x285a,0x2873,0x2894,0x28c9,0x28da,0x290b,0x292f,0x2940,0x2959,0x2964,0x2991,0x29b3,0x29e1,0x2a14,0x2a23,
+0x2a34,0x2a51,0x2a93,0x2aba,0x2ac7,0x2adc,0x2b00,0x2b26,0x2b5f,0x2b70,0x2b94,0x2b9f,0x2bac,0x2bbb,0x2be0,0x2c0e,
+0x2c2a,0x2c47,0x2c54,0x2c65,0x2c83,0x2ca6,0x2cc3,0x2cd0,0x2cf0,0x2d0d,0x2d2e,0x2d57,0x2d68,0x2d87,0x2da0,0x2db9,
+0x2dca,0x2e13,0x2e24,0x2e3d,0x2e6c,0x2e99,0x2ebe,0x2f00,0x2f1c,0x2f2b,0x2f42,0x2f70,0x2f89,0x2fb2,0x2fcc,0x3007,
+0x3025,0x3034,0x3054,0x306f,0x3093,0x30af,0x30cd,0x30eb,0x3102,0x3111,0x311c,0x3159,0x316c,0x1f6b,1,0,
+0x12,0x31cc,0x31dc,0x31ef,0x31ff,0x320f,0x321e,0x322e,0x3240,0x3253,0x3265,0x3275,0x3285,0x3294,0x32a3,0x32b3,
+0x32c0,0x32cf,0x32e3,0x2029,1,0,6,0x3308,0x3313,0x3320,0x332d,0x333a,0x3345,0x206d,1,0,
+0x1e,0x3362,0x3371,0x3386,0x339b,0x33b0,0x33c4,0x33d5,0x33e9,0x33fc,0x340d,0x3426,0x3438,0x3449,0x345d,0x3470,
+0x3488,0x349a,0x34a5,0x34b5,0x34c3,0x34d8,0x34ed,0x3503,0x351d,0x3533,0x3543,0x3557,0x356b,0x357c,0x3594,0x2298,
+1,0,0x68,0x35bc,0x35df,0x35e8,0x35f5,0x3600,0x3609,0x3614,0x361d,0x3636,0x363b,0x3644,0x3661,0x366a,
+0x3677,0x3680,0x36a4,0x36ab,0x36b4,0x36c7,0x36d2,0x36db,0x36e6,0x36ff,0x3708,0x3717,0x3722,0x372b,0x3736,0x373f,
+0x3746,0x374f,0x375a,0x3763,0x377c,0x3785,0x3792,0x379d,0x37ae,0x37b9,0x37ce,0x37e5,0x37ee,0x37f7,0x3810,0x381b,
+0x3824,0x382d,0x3844,0x3861,0x386c,0x387d,0x3888,0x388f,0x389c,0x38a9,0x38d6,0x38eb,0x38f4,0x390f,0x3932,0x3953,
+0x3974,0x3999,0x39c0,0x39e1,0x3a04,0x3a25,0x3a4c,0x3a6d,0x3a92,0x3ab1,0x3ad0,0x3aef,0x3b0c,0x3b2d,0x3b4e,0x3b71,
+0x3b96,0x3bb5,0x3bd4,0x3bf5,0x3c1c,0x3c41,0x3c60,0x3c81,0x3ca4,0x3cbf,0x3cd8,0x3cf3,0x3d0c,0x3d29,0x3d44,0x3d61,
+0x3d80,0x3d9d,0x3dba,0x3dd9,0x3df6,0x3e11,0x3e2e,0x3e4b,0x3e7e,0x3ea5,0x3eb8,0x25fb,1,0,6,0x3ee6,
+0x3ef5,0x3f05,0x3f15,0x3f25,0x3f36,0x2659,1,0,0x2b,0x3f54,0x3f60,0x3f6e,0x3f7d,0x3f8c,0x3f9c,0x3fad,
+0x3fc1,0x3fd6,0x3fec,0x3fff,0x4013,0x4023,0x402c,0x4037,0x4047,0x4063,0x4075,0x4083,0x4092,0x409e,0x40b3,0x40c7,
+0x40da,0x40e8,0x40fc,0x410a,0x4114,0x4126,0x4132,0x4140,0x4150,0x4157,0x415e,0x4165,0x416c,0x4173,0x4189,0x41aa,
+0x870,0x41bc,0x41c7,0x41d6,0x28b2,1,0,4,0x41f0,0x41fb,0x4207,0x4211,0x28d8,1,0,0xc6,
+0x4228,0x4235,0x424a,0x4257,0x4266,0x4274,0x4283,0x4292,0x42a4,0x42b3,0x42c1,0x42d2,0x42e1,0x42f0,0x42fd,0x4309,
+0x4318,0x4327,0x4331,0x433e,0x434b,0x435a,0x4368,0x4377,0x4383,0x438d,0x4399,0x43a9,0x43b9,0x43c7,0x43d3,0x43e4,
+0x43f0,0x43fc,0x440a,0x4417,0x4423,0x4430,0xe2f,0x443d,0x444b,0x4465,0x446e,0x447c,0x448a,0x4496,0x44a5,0x44b3,
+0x44c1,0x44cd,0x44dc,0x44ea,0x44f8,0x4505,0x4514,0x452f,0x453e,0x454f,0x4560,0x4573,0x4585,0x4594,0x45a6,0x45b5,
+0x45c1,0x45cc,0x1f3f,0x45d9,0x45e4,0x45ef,0x45fa,0x4605,0x4620,0x462b,0x4636,0x4641,0x4654,0x4668,0x4673,0x4682,
+0x4691,0x469c,0x46a7,0x46b4,0x46c3,0x46d1,0x46dc,0x46f7,0x4701,0x4712,0x4723,0x4732,0x4743,0x474e,0x4759,0x4764,
+0x476f,0x477a,0x4785,0x4790,0x479a,0x47a5,0x47b5,0x47c0,0x47ce,0x47db,0x47e6,0x47f5,0x4802,0x480f,0x481e,0x482b,
+0x483c,0x484e,0x485e,0x4869,0x487c,0x4893,0x48a1,0x48ae,0x48b9,0x48c6,0x48d7,0x48f3,0x4909,0x4914,0x4931,0x4941,
+0x4950,0x495b,0x4966,0x2059,0x4972,0x497d,0x4995,0x49a5,0x49b4,0x49c2,0x49d0,0x49db,0x49e6,0x49fa,0x4a11,0x4a29,
+0x4a39,0x4a49,0x4a59,0x4a6b,0x4a76,0x4a81,0x4a8b,0x4a97,0x4aa5,0x4ab8,0x4ac4,0x4ad1,0x4adc,0x4af8,0x4b05,0x4b13,
+0x4b2c,0x2959,0x4b3b,0x277a,0x4b48,0x4b56,0x4b68,0x4b76,0x4b82,0x4b92,0x2b94,0x4ba0,0x4bac,0x4bb7,0x4bc2,0x4bcd,
+0x4be1,0x4bef,0x4c06,0x4c12,0x4c26,0x4c34,0x4c46,0x4c5c,0x4c6a,0x4c7c,0x4c8a,0x4ca7,0x4cb9,0x4cc6,0x4cd7,0x4ce9,
+0x4d03,0x4d10,0x4d23,0x4d34,0x3111,0x4d41,0x331b,1,0,6,0x4d6a,0x4d7d,0x4d8d,0x4d9b,0x4dac,0x4dbc,
+0x3377,0x12,0,1,0x4de6,0x4dec,0x3384,0x12,0,1,0x4de6,0x4dec,0x3391,1,0,3,
+0x4de6,0x4dec,0x4e25,0x33a7,1,0,3,0x4de6,0x4dec,0x4e25,0x33bd,1,0,0x12,0x4eaf,0x4eb9,
+0x4ec5,0x4ecc,0x4ed7,0x4edc,0x4ee3,0x4eea,0x4ef3,0x4ef8,0x4efd,0x4f0d,0x870,0x41bc,0x4f19,0x41c7,0x4f29,0x41d6,
+0x3466,1,0,0xf,0x4eaf,0x4f50,0x4f5a,0x4f64,0x4f6f,0x4092,0x4f79,0x4f85,0x4f8d,0x4f94,0x4f9e,0x4ec5,
+0x4ecc,0x4edc,0x4fa8,0x34ed,1,0,0x17,0x4eaf,0x4fc5,0x4f64,0x4fd1,0x4fde,0x4fec,0x4092,0x4ff7,0x4ec5,
+0x5008,0x4edc,0x5017,0x5025,0x870,0x41aa,0x5031,0x5042,0x41bc,0x4f19,0x41c7,0x4f29,0x41d6,0x5053,0x360a,1,
+0,3,0x5086,0x508e,0x5096,0x3623,1,0,0x10,0x50bf,0x50c6,0x50d5,0x50f6,0x5119,0x5124,0x5143,
+0x515a,0x5167,0x5170,0x518f,0x51c2,0x51dd,0x520c,0x5229,0x524e,0x36bc,1,0,0x24,0x529d,0x52aa,0x52bd,
+0x52ca,0x52f7,0x531c,0x5331,0x5350,0x5371,0x539e,0x53d7,0x53fa,0x541d,0x544a,0x547f,0x54a6,0x54cf,0x5506,0x5535,
+0x5556,0x557b,0x558a,0x55ad,0x55c4,0x55d1,0x55e0,0x55fd,0x5616,0x5639,0x565e,0x5677,0x568c,0x569b,0x56ac,0x56b9,
+0x56da,0x388c,1,0,4,0x5718,0x5723,0x573b,0x5753,0x38c8,0x36,1,2,4,8,0xe,
+0x10,0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200,0x400,0x800,0xe00,0x1000,0x2000,0x4000,0x7000,0x8000,
+0x10000,0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,
+0x30f80000,0x3362,0x3371,0x3386,0x339b,0x578c,0x33b0,0x33c4,0x5782,0x33d5,0x33e9,0x33fc,0x579d,0x340d,0x3426,0x3438,
+0x57b4,0x3449,0x345d,0x3470,0x57dd,0x3488,0x349a,0x34a5,0x34b5,0x5779,0x34c3,0x34d8,0x34ed,0x3503,0x351d,0x3533,
+0x3543,0x3557,0x356b,0x57d3,0x357c,0x3594,0x57be
};
-const uint8_t PropNameData::bytesTries[14992]={
-0,0x15,0x6d,0xc3,0x78,0x73,0xc2,0x12,0x76,0x7a,0x76,0x6a,0x77,0xa2,0x52,0x78,
+const uint8_t PropNameData::bytesTries[15327]={
+0,0x15,0x6d,0xc3,0xc7,0x73,0xc2,0x12,0x76,0x7a,0x76,0x6a,0x77,0xa2,0x52,0x78,
1,0x64,0x50,0x69,0x10,0x64,1,0x63,0x30,0x73,0x62,0x13,0x74,0x61,0x72,0x74,
0x63,0x60,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x61,0x13,0x69,0x67,0x69,0x74,
0x81,3,0x61,0x2e,0x65,0x4c,0x6f,0xc3,0x18,0x73,0x69,0x1e,0x72,0x69,0x61,0x74,
@@ -139,184 +139,195 @@ const uint8_t PropNameData::bytesTries[14992]={
0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x11,0xd8,0x40,0xa,0x11,0x63,
0x63,0xc3,0x11,0x11,0x72,0x6d,0x58,0x1e,0x69,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,
0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,0x1d,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,
-0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xa,0x6d,0x70,0x6e,0x76,0x70,0xa2,
-0xf1,0x71,0xa4,0x43,0x72,2,0x61,0x28,0x65,0x32,0x69,0x9d,0x14,0x64,0x69,0x63,
-0x61,0x6c,0x55,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,
-0x74,0x6f,0x72,0x9d,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74,0xc3,
-9,0x75,0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61,0x63,
-0x74,0x65,0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d,0x65,
-0x72,0x69,0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0,0x12,
-0x79,0x70,0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98,0x64,
-0xa2,0x53,0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd,0x75,
-0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72,0x74,
-0x6d,1,0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,
-0x65,0x63,0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71,1,
-0x63,0xc3,0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe,0x13,
-0x6e,0x65,0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17,0x69,
-0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b,0xd8,
-0x40,5,1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68,0x61,
-0x72,0x51,2,0x61,0x6c,0x63,0xa2,0x4c,0x72,1,0x65,0x2a,0x69,0x11,0x6e,0x74,
-0x7f,0x16,0x70,0x65,0x6e,0x64,0x65,0x64,0x63,0x1f,0x6f,0x6e,0x63,0x61,0x74,0x65,
-0x6e,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x9f,0x10,0x74,2,0x73,0x2c,
-0x74,0x30,0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1,0x73,
-0x38,0x77,0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79,0x6e,
-0x74,0x61,0x78,0x75,0x10,0x6d,0x9f,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,
-0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xf8,
-0x69,0xc1,0x3c,0x69,0xa2,0x6f,0x6a,0xa4,9,0x6c,4,0x62,0xc3,8,0x63,0x8c,
-0x65,0x98,0x69,0xa2,0x56,0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,
-0x13,0x63,0x61,0x73,0x65,0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,
-4,0x11,0x69,0x63,0x1f,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,
-0x70,0x74,0x69,0x6f,0x6e,0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,
-0x64,0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,
-0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,
-0x65,0x61,0x6b,0xc3,8,2,0x64,0x4a,0x6e,0xa2,0x5b,0x73,1,0x63,0xd9,0x40,
-3,0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,
-0x65,0x90,0x73,0x40,1,0x62,0x52,0x74,0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,
-0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,
-0x44,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,
-0x3e,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,
-0x61,0x70,0x68,0x69,0x63,0x43,2,0x64,0x2e,0x70,0x86,0x73,0x10,0x63,0xc3,0x17,
-0x11,0x69,0x63,1,0x70,0x46,0x73,0x1e,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x63,
-0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc3,0x17,0x10,0x6f,0x1f,0x73,0x69,0x74,0x69,
-0x6f,0x6e,0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc3,0x16,0x10,0x63,
-0xc3,0x16,2,0x67,0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,
-0x4a,0x69,0x11,0x6e,0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,
-0x72,0x6f,0x75,0x70,0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,
-0x86,0x67,0xa2,0x4a,0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,
-0x65,0x6e,0x3d,0x1f,0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,
-0x74,0x79,0x70,0x65,0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,
-0x10,0x74,0xc3,0xb,0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,
-0x74,0x69,0x6f,0x6e,0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,
-0xa2,0x44,0x65,0xa2,0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,
-0x6e,0x6b,0x39,0x11,0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,
-0x65,0x48,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,
-0x72,0x65,0x61,0x6b,0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,
-0x65,0x35,0x11,0x78,0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,
-0x1c,0x6e,0x65,0x72,0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,
-0x13,0x6d,0x61,0x73,0x6b,0xd9,0x20,0,0x61,0xa2,0x90,0x62,0xa2,0xbe,0x63,0xa4,
-0x30,0x64,0xa4,0xfd,0x65,5,0x6d,0x63,0x6d,0x6e,0x70,0xa2,0x59,0x78,0x10,0x74,
-0x30,1,0x65,0x2c,0x70,0x12,0x69,0x63,0x74,0xa1,0x12,0x6e,0x64,0x65,1,0x64,
-0x24,0x72,0x31,0x1b,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
-0xa1,0x10,0x6f,1,0x64,0x97,0x6a,0x10,0x69,0x92,2,0x63,0x40,0x6d,0x50,0x70,
-0x1a,0x72,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x95,0x17,0x6f,0x6d,
-0x70,0x6f,0x6e,0x65,0x6e,0x74,0x9b,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x96,
-0x13,0x62,0x61,0x73,0x65,0x99,0x12,0x72,0x65,0x73,0x95,0x61,0x30,0x62,0x4e,0x63,
-0x12,0x6f,0x6d,0x70,0x9b,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,0x77,
-0x69,0x64,0x74,0x68,0xc3,4,0x12,0x61,0x73,0x65,0x99,3,0x67,0x44,0x68,0x4a,
-0x6c,0x4e,0x73,0x1a,0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,0x74,0x23,
-0x10,0x65,0xd9,0x40,0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,0x68,0x61,
-0x20,0x14,0x62,0x65,0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,0xc3,0,
-0x69,0x3e,0x6c,0xa2,0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,0x74,0xc3,
-0x15,0x11,0x64,0x69,2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,0x65,0x64,
-0x62,0x72,0x61,0x63,0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,0x65,0xc3,
-0x15,0x24,1,0x6c,0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,
-0x73,0xc3,0,0x26,0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,0x16,0x6e,
-0x67,0x67,0x6c,0x79,0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,0x32,0x6b,
-0xc3,1,0x6f,0x11,0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,0xd9,0x40,
-1,6,0x68,0x7c,0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,0x30,0x6b,
-0x36,0x6c,0x87,0x74,0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,0x66,0x91,
-0x18,0x61,0x6e,0x67,0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,0x6c,0x6e,
-0x7e,0x74,0x98,0x75,0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x89,0x12,
-0x61,0x73,0x65,1,0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,0x14,0x6f,
-0x6c,0x64,0x65,0x64,0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x87,
-0x1c,0x66,0x6b,0x63,0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,0x91,0x18,
-0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,0x78,0x33,
-0x61,0x2e,0x63,0xa2,0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,0x65,3,
-0x64,0x83,0x66,0x3a,0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,0x76,0x65,
-0x65,0x15,0x6f,0x6c,0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,0x6f,0x72,
-0x61,0x62,0x6c,0x65,0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,
-0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,0x63,0xc3,
-2,3,0x61,0x30,0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,0x68,0x29,
-2,0x63,0x3a,0x66,0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,0x64,0x2d,
-0x1d,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,0x65,0xc3,
-3,0x15,0x61,0x75,0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,
-0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,0x15,0x63,
-0x72,0x69,0x74,0x69,0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,0x22,0x11,
-0x65,0x73,0x23,0x20,0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,0x22,0x12,
-0x72,0x75,0x65,0x23,0xb,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,
-0x24,0x72,0x33,0x13,0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,0x72,0x6c,
-0x61,0x79,0x23,0xa2,0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,0x6c,0x74,
-0x6e,3,0x6b,0x2f,0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,0x19,0x74,
-0x72,0x65,0x6f,0x72,0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,0x31,0x18,
-0x6e,0x61,0x76,0x6f,0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,0x66,0x74,
-0xa3,0xe0,0x64,0x45,0x64,0x4e,0x68,0x88,0x69,1,0x6f,0x26,0x73,0xa3,0xf0,0x1a,
-0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xf0,2,0x61,0xa3,
-0xea,0x62,0xa3,0xe9,0x6f,0x13,0x75,0x62,0x6c,0x65,1,0x61,0x30,0x62,0x13,0x65,
-0x6c,0x6f,0x77,0xa3,0xe9,0x13,0x62,0x6f,0x76,0x65,0xa3,0xea,0x12,0x61,0x6e,0x72,
-0x2c,0x15,0x65,0x61,0x64,0x69,0x6e,0x67,0x2d,0x61,0xa2,0x7b,0x62,0xa2,0xd4,0x63,
-0x11,0x63,0x63,4,0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,0x64,0x39,
-0x10,0x31,0xa3,0x5b,9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,0x45,0x39,
-0x47,0x30,0x30,0x31,0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,0xa3,0x67,
-0x37,0xa3,0x6b,0x36,0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,0xa3,0x81,
-0x3a,2,0x30,0xa3,0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,0x35,0x53,
-0x36,0x55,0x37,0x57,0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,0x33,0x4f,
-0x34,0x51,6,0x33,8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,0x5d,0x31,
-0x5f,0x32,0x61,0x10,0x34,0xa3,0x54,0xa2,0xe6,3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,
-0xa3,0xe8,0x74,2,0x61,0x74,0x62,0x7c,0x74,0x14,0x61,0x63,0x68,0x65,0x64,1,
-0x61,0x3e,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa2,0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,
-0xc8,0x13,0x62,0x6f,0x76,0x65,0xa2,0xd6,0x14,0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,
-0xa2,0xd6,0x10,0x72,0xa3,0xd8,0xa2,0xca,0x10,0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,
-0xa2,0xe6,1,0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,
-0x74,0xa3,0xe4,0xa2,0xdc,2,0x65,0x2c,0x6c,0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,
-0x6f,0x77,0xa2,0xdc,1,0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xde,0x12,
-0x65,0x66,0x74,0xa3,0xda,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,0x48,
-0x77,1,0x68,0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x33,
-0x22,1,0x69,0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,0x74,
-0x74,0x6f,0x6c,0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,
-0x72,0x72,0x69,0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d,
-0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,0x74,
-0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,0x53,
-0x70,2,0x61,0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,0x69,
-0x6f,0x6e,0x61,0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4d,
-0x14,0x6f,0x72,0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,
-0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,0x6f,
-0x28,0x73,0x10,0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,
-0x72,0x6b,0x43,1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,0x72,
-0x61,0x6c,0x35,0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,0x72,
-2,0x65,0x37,0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68,
-0x74,0x20,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65,
-0x39,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,0x61,
-0x74,0x65,0x49,3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,0x65,
-0x61,0x6e,2,0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,0x74,
-0x6f,0x72,0x29,0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,0x61,
-0x74,0x6f,0x72,0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,0x73,
-0x74,0x72,0x6f,0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,0x62,
-0x84,0x63,1,0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,0x61,
-0x72,0x61,0x74,0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69,
-0x63,1,0x6c,0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74,
-0x65,0x72,0x3b,0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e,
-0x65,0x75,0x74,0x72,0x61,0x6c,0x45,0,0x16,0x6d,0xc8,0xc8,0x74,0xc1,0xee,0x77,
-0x6a,0x77,0x48,0x79,0x70,0x7a,0x1d,0x61,0x6e,0x61,0x62,0x61,0x7a,0x61,0x72,0x73,
-0x71,0x75,0x61,0x72,0x65,0xa5,0x18,0x10,0x61,1,0x6e,0x36,0x72,0x16,0x61,0x6e,
-0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x12,0x63,0x68,0x6f,0xa5,0x2c,1,0x65,0x88,
-0x69,2,0x6a,0x3c,0x72,0x68,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,
-0xa3,0x48,0x12,0x69,0x6e,0x67,0xa2,0x74,0x1e,0x68,0x65,0x78,0x61,0x67,0x72,0x61,
-0x6d,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x74,0x16,0x61,0x64,0x69,0x63,0x61,
-0x6c,0x73,0xa3,0x49,0x13,0x7a,0x69,0x64,0x69,0xa5,0x34,0x74,0xa2,0x59,0x75,0xa4,
-0x35,0x76,2,0x61,0x36,0x65,0x7a,0x73,0xa2,0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,
+0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xa,0x6d,0xa2,0x76,0x6e,0xa2,0x78,
+0x70,0xa4,0x3e,0x71,0xa4,0x90,0x72,3,0x61,0x2c,0x65,0x36,0x67,0x54,0x69,0x9d,
+0x14,0x64,0x69,0x63,0x61,0x6c,0x55,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,
+0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x9d,0x15,0x69,0x65,0x6d,0x6f,0x6a,0x69,0xa2,
+0x47,3,0x66,0x44,0x6d,0x5c,0x74,0x7c,0x7a,0x19,0x77,0x6a,0x73,0x65,0x71,0x75,
+0x65,0x6e,0x63,0x65,0xa3,0x46,0x1a,0x6c,0x61,0x67,0x73,0x65,0x71,0x75,0x65,0x6e,
+0x63,0x65,0xa3,0x44,0x1e,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x73,0x65,0x71,0x75,
+0x65,0x6e,0x63,0x65,0xa3,0x43,0x19,0x61,0x67,0x73,0x65,0x71,0x75,0x65,0x6e,0x63,
+0x65,0xa3,0x45,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74,0xc3,9,
+0x75,0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61,0x63,0x74,
+0x65,0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d,0x65,0x72,
+0x69,0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0,0x12,0x79,
+0x70,0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98,0x64,0xa2,
+0x53,0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd,0x75,0x17,
+0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72,0x74,0x6d,
+1,0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,
+0x63,0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71,1,0x63,
+0xc3,0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe,0x13,0x6e,
+0x65,0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17,0x69,0x63,
+0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b,0xd8,0x40,
+5,1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68,0x61,0x72,
+0x51,2,0x61,0x6c,0x63,0xa2,0x4c,0x72,1,0x65,0x2a,0x69,0x11,0x6e,0x74,0x7f,
+0x16,0x70,0x65,0x6e,0x64,0x65,0x64,0x63,0x1f,0x6f,0x6e,0x63,0x61,0x74,0x65,0x6e,
+0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x9f,0x10,0x74,2,0x73,0x2c,0x74,
+0x30,0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1,0x73,0x38,
+0x77,0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79,0x6e,0x74,
+0x61,0x78,0x75,0x10,0x6d,0x9f,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,0x69,
+0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xf8,0x69,
+0xc1,0x3c,0x69,0xa2,0x6f,0x6a,0xa4,9,0x6c,4,0x62,0xc3,8,0x63,0x8c,0x65,
+0x98,0x69,0xa2,0x56,0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,0x13,
+0x63,0x61,0x73,0x65,0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,4,
+0x11,0x69,0x63,0x1f,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,0x70,
+0x74,0x69,0x6f,0x6e,0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,0x64,
+0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,
+0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,0x65,
+0x61,0x6b,0xc3,8,2,0x64,0x4a,0x6e,0xa2,0x5b,0x73,1,0x63,0xd9,0x40,3,
+0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,0x65,
+0x90,0x73,0x40,1,0x62,0x52,0x74,0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,0x61,
+0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,0x44,
+0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x3e,
+0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,0x61,
+0x70,0x68,0x69,0x63,0x43,2,0x64,0x2e,0x70,0x86,0x73,0x10,0x63,0xc3,0x17,0x11,
+0x69,0x63,1,0x70,0x46,0x73,0x1e,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x63,0x61,
+0x74,0x65,0x67,0x6f,0x72,0x79,0xc3,0x17,0x10,0x6f,0x1f,0x73,0x69,0x74,0x69,0x6f,
+0x6e,0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc3,0x16,0x10,0x63,0xc3,
+0x16,2,0x67,0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,0x4a,
+0x69,0x11,0x6e,0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,0x72,
+0x6f,0x75,0x70,0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,0x86,
+0x67,0xa2,0x4a,0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,0x65,
+0x6e,0x3d,0x1f,0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74,
+0x79,0x70,0x65,0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,0x10,
+0x74,0xc3,0xb,0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74,
+0x69,0x6f,0x6e,0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,0xa2,
+0x44,0x65,0xa2,0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e,
+0x6b,0x39,0x11,0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,0x65,
+0x48,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,0x72,
+0x65,0x61,0x6b,0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,0x65,
+0x35,0x11,0x78,0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,0x1c,
+0x6e,0x65,0x72,0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,0x13,
+0x6d,0x61,0x73,0x6b,0xd9,0x20,0,0x61,0xa2,0xa2,0x62,0xa2,0xd0,0x63,0xa4,0x4f,
+0x64,0xa6,0x1c,0x65,5,0x6d,0x75,0x6d,0x6e,0x70,0xa2,0x6b,0x78,0x10,0x74,0x30,
+1,0x65,0x2c,0x70,0x12,0x69,0x63,0x74,0xa1,0x12,0x6e,0x64,0x65,1,0x64,0x24,
+0x72,0x31,0x1b,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0xa1,
+0x10,0x6f,1,0x64,0x97,0x6a,0x10,0x69,0x92,3,0x63,0x44,0x6b,0x54,0x6d,0x70,
+0x70,0x1a,0x72,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x95,0x17,0x6f,
+0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x9b,0x1c,0x65,0x79,0x63,0x61,0x70,0x73,0x65,
+0x71,0x75,0x65,0x6e,0x63,0x65,0xa3,0x42,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,
+0x96,0x13,0x62,0x61,0x73,0x65,0x99,0x12,0x72,0x65,0x73,0x95,0x61,0x30,0x62,0x4e,
+0x63,0x12,0x6f,0x6d,0x70,0x9b,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,
+0x77,0x69,0x64,0x74,0x68,0xc3,4,0x12,0x61,0x73,0x65,0x99,3,0x67,0x44,0x68,
+0x4a,0x6c,0x4e,0x73,0x1a,0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,0x74,
+0x23,0x10,0x65,0xd9,0x40,0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,0x68,
+0x61,0x20,0x14,0x62,0x65,0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,5,0x6c,0x22,
+0x6c,0x36,0x6d,0x52,0x70,1,0x62,0xd9,0x40,0xd,0x74,0xc3,0x15,2,0x61,0x32,
+0x6b,0xc3,1,0x6f,0x11,0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,0xd9,
+0x40,1,0x61,0xa2,0x4f,0x63,0xc3,0,0x69,0x11,0x64,0x69,2,0x63,0x54,0x6d,
+0x74,0x70,0x1b,0x61,0x69,0x72,0x65,0x64,0x62,0x72,0x61,0x63,0x6b,0x65,0x74,0xd8,
+0x40,0xd,0x13,0x74,0x79,0x70,0x65,0xc3,0x15,0x24,1,0x6c,0x30,0x6f,0x14,0x6e,
+0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,0x73,0xc3,0,0x26,0x14,0x69,0x72,0x72,
+0x6f,0x72,1,0x65,0x38,0x69,0x16,0x6e,0x67,0x67,0x6c,0x79,0x70,0x68,0xd9,0x40,
+1,0x10,0x64,0x27,0x17,0x73,0x69,0x63,0x65,0x6d,0x6f,0x6a,0x69,0xa3,0x41,6,
+0x68,0x7c,0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,0x30,0x6b,0x36,0x6c,
+0x87,0x74,0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,0x66,0x91,0x18,0x61,
+0x6e,0x67,0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,0x6c,0x6e,0x7e,0x74,
+0x98,0x75,0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x89,0x12,0x61,0x73,
+0x65,1,0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,0x14,0x6f,0x6c,0x64,
+0x65,0x64,0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x87,0x1c,0x66,
+0x6b,0x63,0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,0x91,0x18,0x69,0x74,
+0x6c,0x65,0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,0x78,0x33,0x61,0x2e,
+0x63,0xa2,0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,0x65,3,0x64,0x83,
+0x66,0x3a,0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,0x76,0x65,0x65,0x15,
+0x6f,0x6c,0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,0x6f,0x72,0x61,0x62,
+0x6c,0x65,0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,
+0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,0x63,0xc3,2,3,
+0x61,0x30,0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,0x68,0x29,2,0x63,
+0x3a,0x66,0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,0x64,0x2d,0x1d,0x6f,
+0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,0x65,0xc3,3,0x15,
+0x61,0x75,0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,0x63,0x6f,
+0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,0x15,0x63,0x72,0x69,
+0x74,0x69,0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,0x22,0x11,0x65,0x73,
+0x23,0x20,0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,0x22,0x12,0x72,0x75,
+0x65,0x23,0xb,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,0x24,0x72,
+0x33,0x13,0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,0x72,0x6c,0x61,0x79,
+0x23,0xa2,0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,0x6c,0x74,0x6e,3,
+0x6b,0x2f,0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,0x19,0x74,0x72,0x65,
+0x6f,0x72,0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,0x31,0x18,0x6e,0x61,
+0x76,0x6f,0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,0x66,0x74,0xa3,0xe0,
+0x64,0x45,0x64,0x4e,0x68,0x88,0x69,1,0x6f,0x26,0x73,0xa3,0xf0,0x1a,0x74,0x61,
+0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xf0,2,0x61,0xa3,0xea,0x62,
+0xa3,0xe9,0x6f,0x13,0x75,0x62,0x6c,0x65,1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,
+0x77,0xa3,0xe9,0x13,0x62,0x6f,0x76,0x65,0xa3,0xea,0x12,0x61,0x6e,0x72,0x2c,0x15,
+0x65,0x61,0x64,0x69,0x6e,0x67,0x2d,0x61,0xa2,0x7b,0x62,0xa2,0xd4,0x63,0x11,0x63,
+0x63,4,0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,0x64,0x39,0x10,0x31,
+0xa3,0x5b,9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,0x45,0x39,0x47,0x30,
+0x30,0x31,0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,0xa3,0x67,0x37,0xa3,
+0x6b,0x36,0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,0xa3,0x81,0x3a,2,
+0x30,0xa3,0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,0x35,0x53,0x36,0x55,
+0x37,0x57,0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,0x33,0x4f,0x34,0x51,
+6,0x33,8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,0x5d,0x31,0x5f,0x32,
+0x61,0x10,0x34,0xa3,0x54,0xa2,0xe6,3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,
+0x74,2,0x61,0x74,0x62,0x7c,0x74,0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,
+0x62,0x13,0x65,0x6c,0x6f,0x77,0xa2,0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,
+0x62,0x6f,0x76,0x65,0xa2,0xd6,0x14,0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,
+0x10,0x72,0xa3,0xd8,0xa2,0xca,0x10,0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,
+1,0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,
+0xe4,0xa2,0xdc,2,0x65,0x2c,0x6c,0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,
+0xa2,0xdc,1,0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,
+0x74,0xa3,0xda,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,0x48,0x77,1,
+0x68,0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x33,0x22,1,
+0x69,0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,0x74,0x74,0x6f,
+0x6c,0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,
+0x69,0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d,0x15,0x73,
+0x6f,0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,0x74,0x73,0x65,
+0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,0x53,0x70,2,
+0x61,0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,
+0x61,0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4d,0x14,0x6f,
+0x72,0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,
+0x61,0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,0x6f,0x28,0x73,
+0x10,0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,
+0x43,1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,0x72,0x61,0x6c,
+0x35,0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,0x72,2,0x65,
+0x37,0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68,0x74,0x20,
+2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x39,0x17,
+0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,
+0x49,3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,0x65,0x61,0x6e,
+2,0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,0x74,0x6f,0x72,
+0x29,0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,
+0x72,0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,0x73,0x74,0x72,
+0x6f,0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,0x62,0x84,0x63,
+1,0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,0x61,0x72,0x61,
+0x74,0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69,0x63,1,
+0x6c,0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74,0x65,0x72,
+0x3b,0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e,0x65,0x75,
+0x74,0x72,0x61,0x6c,0x45,0,0x16,0x6d,0xc9,0x14,0x74,0xc2,0x30,0x77,0x89,0x77,
+0x86,0x79,0xa2,0x46,0x7a,1,0x61,0x58,0x6e,0x1a,0x61,0x6d,0x65,0x6e,0x6e,0x79,
+0x6d,0x75,0x73,0x69,0x63,0xa4,0x40,0x19,0x61,0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,
+0x6f,0x6e,0xa5,0x40,0x1c,0x6e,0x61,0x62,0x61,0x7a,0x61,0x72,0x73,0x71,0x75,0x61,
+0x72,0x65,0xa5,0x18,0x10,0x61,1,0x6e,0x36,0x72,0x16,0x61,0x6e,0x67,0x63,0x69,
+0x74,0x69,0xa3,0xfc,0x12,0x63,0x68,0x6f,0xa5,0x2c,1,0x65,0x88,0x69,2,0x6a,
+0x3c,0x72,0x68,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x48,0x12,
+0x69,0x6e,0x67,0xa2,0x74,0x1e,0x68,0x65,0x78,0x61,0x67,0x72,0x61,0x6d,0x73,0x79,
+0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x74,0x16,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0xa3,
+0x49,0x13,0x7a,0x69,0x64,0x69,0xa5,0x34,0x74,0xa2,0x65,0x75,0xa4,0x4f,0x76,3,
+0x61,0x3c,0x65,0x80,0x69,0xa2,0x50,0x73,0xa2,0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,
1,0x69,0xa3,0x9f,0x72,0x1e,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,
0x63,0x74,0x6f,0x72,0x73,0xa2,0x6c,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,
0x6e,0x74,0xa3,0x7d,1,0x64,0x3c,0x72,0x19,0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,
0x72,0x6d,0x73,0xa3,0x91,0x14,0x69,0x63,0x65,0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,
-0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,4,0x61,0x68,0x65,0xa2,0xad,0x68,0xa2,0xb0,
-0x69,0xa2,0xb8,0x72,0x1c,0x61,0x6e,0x73,0x70,0x6f,0x72,0x74,0x61,0x6e,0x64,0x6d,
-0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xcf,4,0x67,
-0x7e,0x69,0xa2,0x41,0x6b,0xa2,0x6a,0x6d,0xa2,0x6c,0x6e,0x12,0x67,0x75,0x74,0xa4,
-0x10,1,0x63,0x40,0x73,0x11,0x75,0x70,0xa4,0x33,0x16,0x70,0x6c,0x65,0x6d,0x65,
-0x6e,0x74,0xa5,0x33,0x18,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0xa5,0x11,
-2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62,0x13,0x61,
-0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16,0x75,0x61,
-0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,
-0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65,0x74,0xa3,
-0xb7,0x11,0x72,0x69,0xa3,0xdc,0x11,0x69,0x6c,0x48,0x12,0x73,0x75,0x70,0xa4,0x2b,
-0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x2b,0x13,0x6c,0x75,0x67,0x75,0x4b,
-0x10,0x61,1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,2,0x62,0x34,0x66,0x3c,
-0x72,0x13,0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,0x61,0x6e,0x57,0x14,0x69,
-0x6e,0x61,0x67,0x68,0xa3,0x90,2,0x63,0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,
-0x65,0x64,0x63,0x61,0x6e,0x61,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,
-0x67,0x69,0x6e,0x61,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,
-0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,
-0x78,0x74,0xa3,0xad,0x15,0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,0x70,0xc3,0x4b,
+0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,0x15,0x74,0x68,0x6b,0x75,0x71,0x69,0xa5,0x3f,
+5,0x69,0x3f,0x69,0x5a,0x6f,0x8c,0x72,0x1c,0x61,0x6e,0x73,0x70,0x6f,0x72,0x74,
+0x61,0x6e,0x64,0x6d,0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,
+0xa3,0xcf,2,0x62,0x34,0x66,0x3c,0x72,0x13,0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,
+0x65,0x74,0x61,0x6e,0x57,0x14,0x69,0x6e,0x61,0x67,0x68,0xa3,0x90,0x11,0x74,0x6f,
+0xa5,0x3d,0x61,0x3e,0x65,0xa2,0xa0,0x68,0x10,0x61,1,0x61,0x24,0x69,0x53,0x11,
+0x6e,0x61,0x3d,4,0x67,0x8e,0x69,0xa2,0x49,0x6b,0xa2,0x72,0x6d,0xa2,0x74,0x6e,
+0x10,0x67,1,0x73,0x68,0x75,0x10,0x74,0xa4,0x10,1,0x63,0x40,0x73,0x11,0x75,
+0x70,0xa4,0x33,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x33,0x18,0x6f,0x6d,
+0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0xa5,0x11,0x10,0x61,0xa5,0x3c,2,0x61,0x2a,
+0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62,0x13,0x61,0x6e,0x77,0x61,
+0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16,0x75,0x61,0x6e,0x6a,0x69,
+0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x7c,0x10,0x65,
+0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65,0x74,0xa3,0xb7,0x11,0x72,
+0x69,0xa3,0xdc,0x11,0x69,0x6c,0x48,0x12,0x73,0x75,0x70,0xa4,0x2b,0x16,0x70,0x6c,
+0x65,0x6d,0x65,0x6e,0x74,0xa5,0x2b,0x13,0x6c,0x75,0x67,0x75,0x4b,2,0x63,0x8c,
+0x67,0xa2,0x41,0x6e,0x1f,0x69,0x66,0x69,0x65,0x64,0x63,0x61,0x6e,0x61,0x64,0x69,
+0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x73,0x79,0x6c,
+0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,
+0xa2,0xad,0x10,0x61,0xa5,0x3e,0x11,0x61,0x73,0x62,0x12,0x65,0x78,0x74,0xa2,0xad,
+0x10,0x61,0xa5,0x3e,0x15,0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,0x70,0xc3,0x4b,
0x70,0xa6,0x61,0x72,0xa8,0x1d,0x73,7,0x6f,0xc1,0xbe,0x6f,0xa2,0x69,0x70,0xa2,
0x85,0x75,0xa2,0xa4,0x79,2,0x6c,0x50,0x6d,0x62,0x72,0x12,0x69,0x61,0x63,0x3a,
0x12,0x73,0x75,0x70,0xa4,0x17,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x17,
@@ -369,683 +380,693 @@ const uint8_t PropNameData::bytesTries[14992]={
0x73,0x74,0x6f,0x73,0xa2,0xa6,0x13,0x64,0x69,0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,
0x61,0xa3,0x96,1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10,
0x69,0xa2,0xc0,0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0xa3,0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,0x6d,0xa2,0xe6,0x6e,0xa8,
-0x19,0x6f,6,0x70,0x63,0x70,0x56,0x72,0x8a,0x73,0xa2,0x4c,0x74,0x10,0x74,0x1f,
+0x6c,0x73,0xa3,0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,0x6d,0xa2,0xf0,0x6e,0xa8,
+0x23,0x6f,6,0x70,0x63,0x70,0x56,0x72,0x8a,0x73,0xa2,0x4c,0x74,0x10,0x74,0x1f,
0x6f,0x6d,0x61,0x6e,0x73,0x69,0x79,0x61,0x71,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,
0xa5,0x28,0x18,0x74,0x69,0x63,0x61,0x6c,0x63,0x68,0x61,0x72,0x1f,0x61,0x63,0x74,
0x65,0x72,0x72,0x65,0x63,0x6f,0x67,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x85,1,0x69,
0x46,0x6e,0x1e,0x61,0x6d,0x65,0x6e,0x74,0x61,0x6c,0x64,0x69,0x6e,0x67,0x62,0x61,
0x74,0x73,0xa3,0xf2,0x11,0x79,0x61,0x47,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,
-0x61,0xa3,0x7a,0x11,0x67,0x65,0xa5,0xf,0x63,0xa2,0x71,0x67,0xa2,0x71,0x6c,1,
-0x63,0xa2,0x62,0x64,5,0x70,0x38,0x70,0x36,0x73,0x56,0x74,0x14,0x75,0x72,0x6b,
-0x69,0x63,0xa3,0xbf,0x11,0x65,0x72,1,0x6d,0x2e,0x73,0x12,0x69,0x61,0x6e,0xa3,
-0x8c,0x11,0x69,0x63,0xa3,0xf1,0x10,0x6f,1,0x67,0x3a,0x75,0x18,0x74,0x68,0x61,
-0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xbb,0x13,0x64,0x69,0x61,0x6e,0xa5,0x22,0x68,
-0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,
-0xa3,0xf0,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa5,4,0x14,0x74,0x61,
-0x6c,0x69,0x63,0xa3,0x58,0x13,0x68,0x69,0x6b,0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,
-0x68,0x61,0x6d,0x65,6,0x6f,0x86,0x6f,0x6c,0x72,0xa2,0x61,0x75,0xa2,0x62,0x79,
-0x14,0x61,0x6e,0x6d,0x61,0x72,0x58,0x12,0x65,0x78,0x74,2,0x61,0xa3,0xb6,0x62,
-0xa3,0xee,0x65,0x13,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb6,0x62,0xa3,0xee,1,
-0x64,0x52,0x6e,0x15,0x67,0x6f,0x6c,0x69,0x61,0x6e,0x6a,0x12,0x73,0x75,0x70,0xa4,
-0xd,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xd,0x10,0x69,0xa2,0xec,0x13,
-0x66,0x69,0x65,0x72,1,0x6c,0x3c,0x74,0x19,0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,
-0x65,0x72,0x73,0xa3,0x8a,0x15,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,0x10,0x6f,0xa3,
-0xed,1,0x6c,0x44,0x73,0x11,0x69,0x63,0xa2,0x5c,0x18,0x61,0x6c,0x73,0x79,0x6d,
-0x62,0x6f,0x6c,0x73,0xa3,0x5c,0x13,0x74,0x61,0x6e,0x69,0xa5,3,0x61,0xa2,0x9b,
-0x65,0xa4,0x4c,0x69,1,0x61,0xa2,0x8f,0x73,0x10,0x63,5,0x70,0x18,0x70,0xa2,
-0x71,0x73,0x36,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x15,0x79,
-0x6d,0x62,0x6f,0x6c,0x73,0x8f,0x61,0xa2,0x66,0x65,0x46,0x6d,0x19,0x61,0x74,0x68,
-0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,
-0x6c,0x61,0x6e,0x65,0x6f,0x75,0x73,2,0x6d,0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,
-0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x11,0x61,0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,
-0x69,0x63,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,
-0xa3,0x69,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8e,0x12,0x61,0x6e,0x64,1,0x61,
-0x3c,0x70,0x19,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,
-0x72,0x72,0x6f,0x77,0x73,0xa3,0x73,0x10,0x6f,0xa3,0xd8,7,0x72,0x6f,0x72,0x44,
-0x73,0x4e,0x74,0x62,0x79,0x19,0x61,0x6e,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,
-0xa5,0x20,0x13,0x63,0x68,0x65,0x6e,0xa5,0xc,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,
-0x6e,0x64,0x69,0xa5,0x14,0x10,0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,
-0x72,0x61,0x74,0x6f,0x72,0x73,0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,
-0x5d,0x16,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,
-0x72,0x61,0x74,0x6f,0x72,0x73,0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,
-0x65,0x72,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,0x68,0x50,0x6b,
-0x7e,0x6c,0x88,0x6e,1,0x64,0x34,0x69,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,
-0xea,0x12,0x61,0x69,0x63,0xa3,0xc6,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67,0xa2,
-0xaa,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xe9,
-0x13,0x61,0x73,0x61,0x72,0xa5,0x1f,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,3,
-0x64,0x6c,0x65,0x7e,0x6e,0xa2,0x47,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1,0x63,
-0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xd7,0x15,
-0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0xd6,0x17,0x65,0x66,0x61,0x69,0x64,0x72,0x69,
-0x6e,0xa5,0x21,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b,0xa2,0xb8,0x12,0x65,
-0x78,0x74,0xa2,0xd5,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xd5,0x18,0x64,
-0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0xeb,6,0x6b,0x3b,0x6b,0x56,0x6f,
-0x5a,0x75,0x64,0x79,0x11,0x69,0x61,0x1f,0x6b,0x65,0x6e,0x67,0x70,0x75,0x61,0x63,
-0x68,0x75,0x65,0x68,0x6d,0x6f,0x6e,0x67,0xa5,0x27,0x10,0x6f,0xa3,0x92,0x14,0x62,
-0x6c,0x6f,0x63,0x6b,0x21,1,0x6d,0x2c,0x73,0x11,0x68,0x75,0xa5,0x15,0x17,0x62,
-0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0x7b,0x61,0x44,0x62,0x21,0x65,0x10,0x77,1,
-0x61,0xa5,0xe,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0xa3,0x8b,1,0x62,0x38,0x6e,
-0x17,0x64,0x69,0x6e,0x61,0x67,0x61,0x72,0x69,0xa5,0x26,0x15,0x61,0x74,0x61,0x65,
-0x61,0x6e,0xa3,0xef,0x67,0xc4,0x32,0x6a,0xc1,0xb9,0x6a,0xa2,0xd5,0x6b,0xa2,0xee,
-0x6c,4,0x61,0x54,0x65,0xa2,0x61,0x69,0xa2,0x78,0x6f,0xa2,0xb7,0x79,1,0x63,
-0x2e,0x64,0x12,0x69,0x61,0x6e,0xa3,0xa9,0x12,0x69,0x61,0x6e,0xa3,0xa7,1,0x6f,
-0x55,0x74,0x11,0x69,0x6e,1,0x31,0x82,0x65,0x11,0x78,0x74,4,0x61,0x5c,0x62,
-0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa2,0xe7,0x13,0x6e,0x64,0x65,0x64,4,
-0x61,0x36,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa3,0xe7,0x26,0x18,0x64,
-0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x6d,0x24,0x12,0x73,0x75,0x70,0x24,0x16,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x25,1,0x70,0x42,0x74,0x1d,0x74,0x65,0x72,
-0x6c,0x69,0x6b,0x65,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x79,0x12,0x63,0x68,0x61,
-0xa3,0x9c,2,0x6d,0x4e,0x6e,0x54,0x73,0x10,0x75,0xa2,0xb0,0x12,0x73,0x75,0x70,
-0xa4,0x31,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x31,0x11,0x62,0x75,0xa3,
-0x6f,0x12,0x65,0x61,0x72,1,0x61,0xa3,0xe8,0x62,1,0x69,0x38,0x73,0x17,0x79,
-0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x75,0x17,0x64,0x65,0x6f,0x67,0x72,0x61,
-0x6d,0x73,0xa3,0x76,0x1a,0x77,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,
-0xa3,0x4d,0x10,0x61,1,0x6d,0x32,0x76,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0xb5,
-0x10,0x6f,0x5c,0x12,0x65,0x78,0x74,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,1,0x61,
-0xa2,0x43,0x68,4,0x61,0x40,0x69,0x50,0x6d,0x6e,0x6f,0x86,0x75,0x15,0x64,0x61,
-0x77,0x61,0x64,0x69,0xa3,0xe6,0x16,0x72,0x6f,0x73,0x68,0x74,0x68,0x69,0xa3,0x89,
-0x1d,0x74,0x61,0x6e,0x73,0x6d,0x61,0x6c,0x6c,0x73,0x63,0x72,0x69,0x70,0x74,0xa5,
-0x30,0x11,0x65,0x72,0x68,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x71,0x12,
-0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,0x3a,0x6e,0x42,0x74,0xa2,0x51,0x79,0x13,0x61,
-0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,0x61,0x34,0x62,0x76,
-0x67,0x7c,0x6e,0x12,0x61,0x64,0x61,0x4d,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,
-0xcb,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11,0x78,0x74,1,0x61,
-0xa5,0x13,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa5,0x13,0x11,0x75,0x6e,0xa3,0x42,
-0x11,0x78,0x69,0x96,0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,
-0x6b,0x61,0x6e,0x61,0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,
-0x69,0x63,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,
-0x74,0xa3,0x6b,0x67,0xa2,0xb5,0x68,0xa4,0x84,0x69,3,0x64,0x4c,0x6d,0xa2,0x55,
-0x6e,0xa2,0x62,0x70,0x13,0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,
-0x6e,0x73,0x2b,1,0x63,0x99,0x65,0x17,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
-1,0x64,0x56,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa4,0xb,0x1d,0x61,0x6e,
-0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa5,0xb,0x13,0x65,
-0x73,0x63,0x72,0x1f,0x69,0x70,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,
-0x74,0x65,0x72,0x73,0x99,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,
-0x61,0x69,0x63,0xa3,0xba,1,0x64,0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,
-0x6f,0x6e,0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,
-0xa3,0xbd,0x13,0x6c,0x61,0x76,0x69,0xa3,0xbe,0x11,0x69,0x63,1,0x6e,0x3e,0x73,
-0x1a,0x69,0x79,0x61,0x71,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa5,0x1e,0x19,0x75,
-0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x74,0x6c,0xa2,
-0x82,0x6f,0xa2,0x9a,0x72,0xa2,0x9e,0x75,2,0x6a,0x34,0x6e,0x3e,0x72,0x14,0x6d,
-0x75,0x6b,0x68,0x69,0x43,0x14,0x61,0x72,0x61,0x74,0x69,0x45,0x18,0x6a,0x61,0x6c,
-0x61,0x67,0x6f,0x6e,0x64,0x69,0xa5,0x1c,1,0x6e,0xa2,0x46,0x6f,1,0x6d,0x6e,
-0x72,0x13,0x67,0x69,0x61,0x6e,0x5a,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x87,
-0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x87,0x11,0x78,0x74,0xa4,0x1b,0x14,
-0x65,0x6e,0x64,0x65,0x64,0xa5,0x1b,0x1a,0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,
-0x70,0x65,0x73,0x8c,0x12,0x65,0x78,0x74,0xa2,0xe3,0x14,0x65,0x6e,0x64,0x65,0x64,
-0xa3,0xe3,0x1e,0x65,0x72,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
-0x6f,0x6e,0x71,0x17,0x61,0x67,0x6f,0x6c,0x69,0x74,0x69,0x63,0xa2,0x88,0x12,0x73,
-0x75,0x70,0xa4,0xa,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xa,0x13,0x74,
-0x68,0x69,0x63,0xa3,0x59,1,0x61,0x5c,0x65,0x11,0x65,0x6b,0x30,1,0x61,0x38,
-0x65,0x11,0x78,0x74,0x6e,0x14,0x65,0x6e,0x64,0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,
-0x6f,0x70,0x74,0x69,0x63,0x31,0x13,0x6e,0x74,0x68,0x61,0xa3,0xe4,2,0x61,0xa2,
-0x48,0x65,0xa2,0xdf,0x69,1,0x67,0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,
-0x10,0x68,1,0x70,0x3a,0x73,0x18,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,
-0xa3,0x4b,1,0x72,0x3c,0x75,0x19,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,
-0x73,0xa3,0x4c,0x11,0x69,0x76,0x1f,0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,
-0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,2,0x6c,0x32,0x6e,0x9a,0x74,0x12,
-0x72,0x61,0x6e,0xa5,2,0x10,0x66,2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,0x64,
-0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x66,
-0x6f,0x72,0x6d,0x73,0xa3,0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,0x72,
-0x6d,0x73,0xa3,0x57,0x13,0x61,0x72,0x6b,0x73,0xa3,0x52,2,0x67,0x34,0x69,0xa2,
-0x45,0x75,0x12,0x6e,0x6f,0x6f,0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,
-0x6a,0x5e,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,
-0x6d,0x70,0x61,0x74,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,
-0x41,0x12,0x61,0x6d,0x6f,0x5c,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,
-0x61,0xa3,0xb4,0x62,0xa3,0xb9,0x19,0x66,0x69,0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,
-0x61,0xa5,0x1d,0x13,0x62,0x72,0x65,0x77,0x37,0x61,0xa4,5,0x62,0xa6,0x45,0x63,
-0xa8,0x1a,0x64,0xac,0xb8,0x65,5,0x6d,0xa2,0x6d,0x86,0x6e,0x96,0x74,0x15,0x68,
-0x69,0x6f,0x70,0x69,0x63,0x5e,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x86,0x16,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x86,0x11,0x78,0x74,0xa2,0x85,1,0x61,
-0xa3,0xc8,0x65,0x13,0x6e,0x64,0x65,0x64,0xa2,0x85,0x10,0x61,0xa3,0xc8,0x16,0x6f,
-0x74,0x69,0x63,0x6f,0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,0x64,2,
-0x61,0x5a,0x63,0x9e,0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,
-0x73,0x75,0x70,0xa2,0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc4,0x16,
-0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,
-0xc3,0x13,0x72,0x69,0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,
-0x74,0xa3,0xc3,0x11,0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,
-0x61,0x6e,0x64,0x6d,0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,0x61,0x4a,0x67,0x76,0x6c,
-1,0x62,0x30,0x79,0x13,0x6d,0x61,0x69,0x63,0xa5,0x25,0x13,0x61,0x73,0x61,0x6e,
-0xa3,0xe2,0x13,0x72,0x6c,0x79,0x64,0x1f,0x79,0x6e,0x61,0x73,0x74,0x69,0x63,0x63,
-0x75,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa5,1,0x1f,0x79,0x70,0x74,0x69,0x61,
-0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,1,0x66,0x26,0x73,0xa3,
-0xc2,0x1c,0x6f,0x72,0x6d,0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa5,
-0x24,7,0x6e,0xc0,0xe5,0x6e,0x3e,0x72,0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14,0x65,
-0x73,0x74,0x61,0x6e,0xa3,0xbc,1,0x61,0x92,0x63,0x13,0x69,0x65,0x6e,0x74,1,
-0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65,0x65,
-0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x7f,0x13,0x75,
-0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,
-0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,
-0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,2,0x61,0x32,0x6d,0xa2,0x71,0x72,0x12,0x6f,
-0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x66,0x70,0xa2,0x43,
-0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x80,
-0x11,0x78,0x74,1,0x61,0xa3,0xd2,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,0xd2,
-0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x61,
-0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,
-0x73,0xa3,0xd3,1,0x66,0x42,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,
-0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,0x65,
-0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,0x69,0x69,0x23,0x64,0x9e,0x65,0xa2,0x42,0x68,
-0xa2,0x4d,0x6c,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x70,
-1,0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,
-0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d,0x69,0x63,0x61,0x6c,0xa2,
-0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0,0x12,0x6c,0x61,0x6d,0xa5,
-7,0x1a,0x67,0x65,0x61,0x6e,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,0x11,
-0x6f,0x6d,0xa3,0xfd,7,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,0x79,
-0x1b,0x7a,0x61,0x6e,0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,0x18,
-0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,0x16,
-0x64,0x72,0x61,0x77,0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,0x12,
-0x65,0x78,0x74,0xa2,0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,1,
-0x68,0x40,0x69,0x12,0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,
-0x73,0x93,0x11,0x6d,0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,0x64,
-0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x81,0x61,0x48,0x65,0xa2,0x4e,0x68,0xa2,0x52,
-0x6c,0x1a,0x6f,0x63,0x6b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,0x6c,
-0x34,0x6d,0x40,0x73,0x66,0x74,0x11,0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,0x73,
-0x65,0xa3,0x93,0x11,0x75,0x6d,0xa2,0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xca,1,0x69,0x30,0x73,0x13,0x61,0x76,0x61,
-0x68,0xa3,0xdd,0x15,0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,0x6c,
-0x69,0x41,0x16,0x61,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa5,8,5,0x6f,0xc1,0x4c,
-0x6f,0xa2,0x55,0x75,0xa4,0x10,0x79,1,0x70,0x9c,0x72,0x14,0x69,0x6c,0x6c,0x69,
-0x63,0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,0x16,0x70,0x6c,0x65,0x6d,
-0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,0x11,0x78,0x74,3,0x61,
-0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x65,0x13,0x6e,0x64,0x65,0x64,2,0x61,
-0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79,0x6c,
-0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70,0xa2,
-0xa0,0x75,0x17,0x6e,0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e,0x75,
-0x6d,0x65,0x72,0x61,0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70,0x15,
-0x61,0x74,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2,0x64,
-0x46,0x68,0x9e,0x6d,0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d,0x62,
-0x6f,0x6c,0x73,0x77,0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x6d,
-0x61,0x72,0x6b,0x73,0x2e,2,0x65,0x40,0x66,0xa6,0x41,0x73,0x18,0x75,0x70,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,
-0xa3,0xe0,0x17,0x61,0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f,0x6e,
-0x1f,0x69,0x6e,0x64,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,
-0x73,0xa3,0xb2,0x1b,0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65,0x73,
-0x83,0x12,0x74,0x69,0x63,0xa2,0x84,0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75,0x6d,
-0x62,0x65,0x72,0x73,0xa3,0xdf,1,0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63,0x79,
-0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa2,
-0x98,0x16,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64,0x70,
-0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xe1,0x68,
-0xa4,0xb,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x8c,0x65,0xa2,0x80,0x72,0xa2,0x98,
-0x73,0xa2,0xaa,0x75,0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f,0x67,
-0x72,0x61,0x70,0x68,0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,
-0x6e,6,0x64,0x6b,0x64,0xa3,0xd1,0x65,0xa5,0,0x66,0xa5,0x12,0x67,0xa5,0x2e,
-0x14,0x6f,0x6d,0x70,0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62,0x44,0x64,
-0x17,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75,0x70,0xa3,
-0x5f,0x14,0x69,0x6c,0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18,0x64,0x65,
-0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,
-0x6d,0x65,0x6e,0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11,0x78,0x74,
-6,0x64,0xc,0x64,0xa3,0xd1,0x65,0xa5,0,0x66,0xa5,0x12,0x67,0xa5,0x2e,0x61,
-0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x19,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,
-0x73,0x75,0x70,0x94,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x95,1,0x74,0x50,
-0x79,0x14,0x6d,0x62,0x6f,0x6c,0x73,0x9a,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x9b,0x14,0x72,0x6f,0x6b,0x65,0x73,0xa3,0x82,
-2,0x6e,0x48,0x72,0x64,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,
-0x61,0x6e,0x69,0x61,0x6e,0xa3,0xde,0x1d,0x61,0x64,0x69,0x61,0x6e,0x73,0x79,0x6c,
-0x6c,0x61,0x62,0x69,0x63,0x73,0x63,0x12,0x69,0x61,0x6e,0xa3,0xa8,2,0x61,0x3a,
-0x65,0x4c,0x6f,0x16,0x72,0x61,0x73,0x6d,0x69,0x61,0x6e,0xa5,0x2d,1,0x6b,0x26,
-0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,1,0x72,0x38,0x73,0x17,0x73,0x73,0x79,
-0x6d,0x62,0x6f,0x6c,0x73,0xa5,0x19,0x13,0x6f,0x6b,0x65,0x65,0x60,0x12,0x73,0x75,
-0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xff,3,0x65,0x3e,
-0x69,0x7e,0x6f,0xa2,0x69,0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,
-0x73,0x50,0x76,0x16,0x61,0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,
-0xa2,0xb3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3,
-0x5a,2,0x61,0x3a,0x6e,0x82,0x76,0x16,0x65,0x73,0x61,0x6b,0x75,0x72,0x75,0xa5,
-0x2f,0x18,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x73,0x2e,2,0x65,0x30,0x66,
-0x36,0x73,0x11,0x75,0x70,0xa3,0x83,0x11,0x78,0x74,0xa3,0xe0,0x18,0x6f,0x72,0x73,
-0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,0x14,0x67,0x62,0x61,0x74,0x73,0x91,1,0x67,
-0x3e,0x6d,0x12,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xab,
-0x11,0x72,0x61,0xa5,0x1a,8,0x6d,0x5f,0x6d,0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,
-0x4b,0x77,0x12,0x69,0x64,0x65,0x43,0x11,0x65,0x64,0x32,0x12,0x69,0x61,0x6c,0x33,
-2,0x61,0x40,0x62,0x37,0x6f,1,0x62,0x28,0x6e,0x10,0x65,0x21,0x13,0x72,0x65,
-0x61,0x6b,0x37,0x10,0x72,0x34,0x12,0x72,0x6f,0x77,0x35,2,0x6d,0x38,0x71,0x46,
-0x75,1,0x62,0x3d,0x70,0x3e,0x11,0x65,0x72,0x3f,1,0x61,0x24,0x6c,0x39,0x11,
-0x6c,0x6c,0x39,1,0x72,0x3b,0x75,0x12,0x61,0x72,0x65,0x3b,0x12,0x65,0x72,0x74,
-0x40,0x13,0x69,0x63,0x61,0x6c,0x41,0x63,0x58,0x65,0x92,0x66,0x96,0x69,1,0x6e,
-0x36,0x73,0x10,0x6f,0x30,0x14,0x6c,0x61,0x74,0x65,0x64,0x31,0x11,0x69,0x74,0x2e,
-0x12,0x69,0x61,0x6c,0x2f,2,0x61,0x36,0x69,0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,
-0x61,0x74,0x25,0x10,0x6e,0x22,0x15,0x6f,0x6e,0x69,0x63,0x61,0x6c,0x23,0x13,0x72,
-0x63,0x6c,0x65,0x27,0x11,0x6e,0x63,0x27,2,0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,
-0x2c,0x14,0x63,0x74,0x69,0x6f,0x6e,0x2d,0x10,0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,
-0x6e,0x74,0x2b,4,0x61,0x3a,0x66,0x4c,0x68,0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,
-0x64,0x65,0x2b,0x22,0x17,0x6d,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x26,0x17,
-0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x27,0x24,0x17,0x61,0x6c,0x66,0x77,0x69,
-0x64,0x74,0x68,0x25,0x20,1,0x61,0x30,0x65,0x14,0x75,0x74,0x72,0x61,0x6c,0x21,
-0x28,0x13,0x72,0x72,0x6f,0x77,0x29,0xd,0x6e,0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,
-0x98,0x75,0xa2,0x49,0x7a,2,0x6c,0x3b,0x70,0x3d,0x73,0x39,5,0x6f,0x28,0x6f,
-0x57,0x70,0x34,0x75,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x45,0x11,0x61,0x63,
-1,0x65,0x32,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x31,0x18,0x73,0x65,0x70,
-0x61,0x72,0x61,0x74,0x6f,0x72,0x39,0x63,0x53,0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,
-0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x27,1,0x6e,0x40,
-0x70,0x1c,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,
-0x17,0x61,0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,
-8,0x66,0x14,0x66,0x5b,0x69,0x59,0x6f,0x4f,0x72,0x24,0x73,0x49,0x17,0x69,0x76,
-0x61,0x74,0x65,0x75,0x73,0x65,0x43,0x61,0x2c,0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,
-0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
-0x3d,2,0x64,0x33,0x6c,0x35,0x6f,0x36,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,
-0x67,0x6d,0x61,0x72,0x6b,0x2d,1,0x70,0x7c,0x74,0x12,0x68,0x65,0x72,3,0x6c,
-0x38,0x6e,0x42,0x70,0x4c,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,
-0x74,0x65,0x72,0x2b,0x14,0x75,0x6d,0x62,0x65,0x72,0x37,0x19,0x75,0x6e,0x63,0x74,
-0x75,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,
-0x61,0x74,0x69,0x6f,0x6e,0x49,0x66,0x9e,0x66,0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,
-0x6d,4,0x61,0x60,0x63,0x31,0x65,0x2f,0x6e,0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,
-0x65,0x72,1,0x6c,0x30,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,
-0x74,0x65,0x72,0x29,0x17,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x51,1,0x69,
-0x2e,0x6f,0x13,0x72,0x6d,0x61,0x74,0x41,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x5b,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,
-0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,
-0x29,0x6f,0x28,0x74,0x27,0x75,0x23,0x2a,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,
-0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x65,0x28,0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,
-0x65,0x72,0x6e,0x75,0x6d,0x62,0x65,0x72,0x35,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,
-0x72,0x61,0x74,0x6f,0x72,0x3b,0x63,0x44,0x64,0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,
-0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,
-0x4e,0x73,0x45,0x75,0x1b,0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x53,0x20,0x12,0x74,0x72,0x6c,0x3f,0x42,0x10,0x6e,1,0x6e,0x2c,0x74,0x12,
-0x72,0x6f,0x6c,0x3f,0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,
-0x61,0x74,0x69,0x6f,0x6e,0x4d,0x63,0x3f,0x66,0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,
-0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4b,2,0x61,0x30,0x65,0x4a,
-0x69,0x12,0x67,0x69,0x74,0x33,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,
-0x74,0x69,0x6f,0x6e,0x47,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,
-0x72,0x33,0,0x12,0x6d,0xc2,0x3f,0x73,0xa1,0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,
-0x72,0x79,0xa2,0x73,0x7a,1,0x61,0x2c,0x68,0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,
-0x6e,0x85,5,0x74,0x22,0x74,0x38,0x77,0x4c,0x79,0x16,0x72,0x69,0x61,0x63,0x77,
+0x61,0xa3,0x7a,0x11,0x67,0x65,0xa5,0xf,0x63,0xa2,0x7b,0x67,0xa2,0x7b,0x6c,1,
+0x63,0xa2,0x6c,0x64,6,0x70,0x42,0x70,0x3a,0x73,0x5a,0x74,0x88,0x75,0x14,0x79,
+0x67,0x68,0x75,0x72,0xa5,0x3b,0x11,0x65,0x72,1,0x6d,0x2e,0x73,0x12,0x69,0x61,
+0x6e,0xa3,0x8c,0x11,0x69,0x63,0xa3,0xf1,0x10,0x6f,1,0x67,0x3a,0x75,0x18,0x74,
+0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xbb,0x13,0x64,0x69,0x61,0x6e,0xa5,
+0x22,0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,0xbf,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,
+0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xf0,0x17,0x75,0x6e,0x67,
+0x61,0x72,0x69,0x61,0x6e,0xa5,4,0x14,0x74,0x61,0x6c,0x69,0x63,0xa3,0x58,0x13,
+0x68,0x69,0x6b,0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,0x68,0x61,0x6d,0x65,6,0x6f,
+0x86,0x6f,0x6c,0x72,0xa2,0x61,0x75,0xa2,0x62,0x79,0x14,0x61,0x6e,0x6d,0x61,0x72,
+0x58,0x12,0x65,0x78,0x74,2,0x61,0xa3,0xb6,0x62,0xa3,0xee,0x65,0x13,0x6e,0x64,
+0x65,0x64,1,0x61,0xa3,0xb6,0x62,0xa3,0xee,1,0x64,0x52,0x6e,0x15,0x67,0x6f,
+0x6c,0x69,0x61,0x6e,0x6a,0x12,0x73,0x75,0x70,0xa4,0xd,0x16,0x70,0x6c,0x65,0x6d,
+0x65,0x6e,0x74,0xa5,0xd,0x10,0x69,0xa2,0xec,0x13,0x66,0x69,0x65,0x72,1,0x6c,
+0x3c,0x74,0x19,0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0xa3,0x8a,0x15,
+0x65,0x74,0x74,0x65,0x72,0x73,0x2d,0x10,0x6f,0xa3,0xed,1,0x6c,0x44,0x73,0x11,
+0x69,0x63,0xa2,0x5c,0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5c,
+0x13,0x74,0x61,0x6e,0x69,0xa5,3,0x61,0xa2,0x9b,0x65,0xa4,0x4c,0x69,1,0x61,
+0xa2,0x8f,0x73,0x10,0x63,5,0x70,0x18,0x70,0xa2,0x71,0x73,0x36,0x74,0x17,0x65,
+0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8f,
+0x61,0xa2,0x66,0x65,0x46,0x6d,0x19,0x61,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,
+0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,0x65,0x6f,0x75,
+0x73,2,0x6d,0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,
+0x81,0x11,0x61,0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x73,0x79,
+0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,0x79,0x6d,0x62,
+0x6f,0x6c,0x73,0x8e,0x12,0x61,0x6e,0x64,1,0x61,0x3c,0x70,0x19,0x69,0x63,0x74,
+0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,0x77,0x73,0xa3,
+0x73,0x10,0x6f,0xa3,0xd8,7,0x72,0x6f,0x72,0x44,0x73,0x4e,0x74,0x62,0x79,0x19,
+0x61,0x6e,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0xa5,0x20,0x13,0x63,0x68,0x65,
+0x6e,0xa5,0xc,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa5,0x14,0x10,
+0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,
+0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,0x61,0x74,0x69,
+0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,
+0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x73,0x79,
+0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,0x68,0x50,0x6b,0x7e,0x6c,0x88,0x6e,1,0x64,
+0x34,0x69,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0xea,0x12,0x61,0x69,0x63,0xa3,
+0xc6,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67,0xa2,0xaa,0x14,0x74,0x69,0x6c,0x65,
+0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xe9,0x13,0x61,0x73,0x61,0x72,0xa5,
+0x1f,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,3,0x64,0x6c,0x65,0x7e,0x6e,0xa2,
+0x47,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,0x72,
+0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xd7,0x15,0x75,0x72,0x73,0x69,0x76,0x65,
+0xa3,0xd6,0x17,0x65,0x66,0x61,0x69,0x64,0x72,0x69,0x6e,0xa5,0x21,0x17,0x74,0x65,
+0x69,0x6d,0x61,0x79,0x65,0x6b,0xa2,0xb8,0x12,0x65,0x78,0x74,0xa2,0xd5,0x16,0x65,
+0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xd5,0x18,0x64,0x65,0x6b,0x69,0x6b,0x61,0x6b,
+0x75,0x69,0xa3,0xeb,6,0x6b,0x3b,0x6b,0x56,0x6f,0x5a,0x75,0x64,0x79,0x11,0x69,
+0x61,0x1f,0x6b,0x65,0x6e,0x67,0x70,0x75,0x61,0x63,0x68,0x75,0x65,0x68,0x6d,0x6f,
+0x6e,0x67,0xa5,0x27,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,0x6b,0x21,1,
+0x6d,0x2c,0x73,0x11,0x68,0x75,0xa5,0x15,0x17,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,
+0x73,0x7b,0x61,0x44,0x62,0x21,0x65,0x10,0x77,1,0x61,0xa5,0xe,0x74,0x14,0x61,
+0x69,0x6c,0x75,0x65,0xa3,0x8b,1,0x62,0x38,0x6e,0x17,0x64,0x69,0x6e,0x61,0x67,
+0x61,0x72,0x69,0xa5,0x26,0x15,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0xef,0x67,0xc4,
+0x43,0x6a,0xc1,0xca,0x6a,0xa2,0xdf,0x6b,0xa2,0xf8,0x6c,4,0x61,0x54,0x65,0xa2,
+0x6b,0x69,0xa2,0x82,0x6f,0xa2,0xc1,0x79,1,0x63,0x2e,0x64,0x12,0x69,0x61,0x6e,
+0xa3,0xa9,0x12,0x69,0x61,0x6e,0xa3,0xa7,1,0x6f,0x55,0x74,0x11,0x69,0x6e,1,
+0x31,0x96,0x65,0x11,0x78,0x74,6,0x64,0x21,0x64,0xa3,0x95,0x65,0x2c,0x66,0xa5,
+0x39,0x67,0xa5,0x3a,0xa2,0xe7,0x13,0x6e,0x64,0x65,0x64,6,0x64,0xc,0x64,0xa3,
+0x95,0x65,0xa3,0xe7,0x66,0xa5,0x39,0x67,0xa5,0x3a,0x61,0x2a,0x62,0x29,0x63,0xa3,
+0x94,0x26,0x18,0x64,0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x6d,0x24,0x12,0x73,
+0x75,0x70,0x24,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x25,1,0x70,0x42,0x74,
+0x1d,0x74,0x65,0x72,0x6c,0x69,0x6b,0x65,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x79,
+0x12,0x63,0x68,0x61,0xa3,0x9c,2,0x6d,0x4e,0x6e,0x54,0x73,0x10,0x75,0xa2,0xb0,
+0x12,0x73,0x75,0x70,0xa4,0x31,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x31,
+0x11,0x62,0x75,0xa3,0x6f,0x12,0x65,0x61,0x72,1,0x61,0xa3,0xe8,0x62,1,0x69,
+0x38,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x75,0x17,0x64,0x65,
+0x6f,0x67,0x72,0x61,0x6d,0x73,0xa3,0x76,0x1a,0x77,0x73,0x75,0x72,0x72,0x6f,0x67,
+0x61,0x74,0x65,0x73,0xa3,0x4d,0x10,0x61,1,0x6d,0x32,0x76,0x14,0x61,0x6e,0x65,
+0x73,0x65,0xa3,0xb5,0x10,0x6f,0x5c,0x12,0x65,0x78,0x74,1,0x61,0xa3,0xb4,0x62,
+0xa3,0xb9,1,0x61,0xa2,0x43,0x68,4,0x61,0x40,0x69,0x50,0x6d,0x6e,0x6f,0x86,
+0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0xe6,0x16,0x72,0x6f,0x73,0x68,0x74,
+0x68,0x69,0xa3,0x89,0x1d,0x74,0x61,0x6e,0x73,0x6d,0x61,0x6c,0x6c,0x73,0x63,0x72,
+0x69,0x70,0x74,0xa5,0x30,0x11,0x65,0x72,0x68,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,
+0x73,0xa3,0x71,0x12,0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,0x3a,0x6e,0x42,0x74,0xa2,
+0x58,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,
+0x61,0x34,0x62,0x84,0x67,0x8a,0x6e,0x12,0x61,0x64,0x61,0x4d,1,0x65,0x40,0x73,
+0x11,0x75,0x70,0xa2,0xcb,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11,
+0x78,0x74,2,0x61,0xa5,0x13,0x62,0xa5,0x38,0x65,0x13,0x6e,0x64,0x65,0x64,1,
+0x61,0xa5,0x13,0x62,0xa5,0x38,0x11,0x75,0x6e,0xa3,0x42,0x11,0x78,0x69,0x96,0x17,
+0x72,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,0x6b,0x61,0x6e,0x61,0x9e,
+1,0x65,0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,0x69,0x63,0x65,0x78,0x74,
+0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,0x74,0xa3,0x6b,0x67,0xa2,
+0xb5,0x68,0xa4,0x84,0x69,3,0x64,0x4c,0x6d,0xa2,0x55,0x6e,0xa2,0x62,0x70,0x13,
+0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0x2b,1,0x63,
+0x99,0x65,0x17,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,1,0x64,0x56,0x73,0x15,
+0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa4,0xb,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,
+0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa5,0xb,0x13,0x65,0x73,0x63,0x72,0x1f,0x69,
+0x70,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x73,0x99,
+0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0xba,
+1,0x64,0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,
+0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd,0x13,0x6c,0x61,
+0x76,0x69,0xa3,0xbe,0x11,0x69,0x63,1,0x6e,0x3e,0x73,0x1a,0x69,0x79,0x61,0x71,
+0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa5,0x1e,0x19,0x75,0x6d,0x62,0x65,0x72,0x66,
+0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x74,0x6c,0xa2,0x82,0x6f,0xa2,0x9a,0x72,
+0xa2,0x9e,0x75,2,0x6a,0x34,0x6e,0x3e,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,
+0x14,0x61,0x72,0x61,0x74,0x69,0x45,0x18,0x6a,0x61,0x6c,0x61,0x67,0x6f,0x6e,0x64,
+0x69,0xa5,0x1c,1,0x6e,0xa2,0x46,0x6f,1,0x6d,0x6e,0x72,0x13,0x67,0x69,0x61,
+0x6e,0x5a,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,
+0x65,0x6e,0x74,0xa3,0x87,0x11,0x78,0x74,0xa4,0x1b,0x14,0x65,0x6e,0x64,0x65,0x64,
+0xa5,0x1b,0x1a,0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,0x70,0x65,0x73,0x8c,0x12,
+0x65,0x78,0x74,0xa2,0xe3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe3,0x1e,0x65,0x72,
+0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x61,
+0x67,0x6f,0x6c,0x69,0x74,0x69,0x63,0xa2,0x88,0x12,0x73,0x75,0x70,0xa4,0xa,0x16,
+0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xa,0x13,0x74,0x68,0x69,0x63,0xa3,0x59,
+1,0x61,0x5c,0x65,0x11,0x65,0x6b,0x30,1,0x61,0x38,0x65,0x11,0x78,0x74,0x6e,
+0x14,0x65,0x6e,0x64,0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,0x6f,0x70,0x74,0x69,0x63,
+0x31,0x13,0x6e,0x74,0x68,0x61,0xa3,0xe4,2,0x61,0xa2,0x48,0x65,0xa2,0xdf,0x69,
+1,0x67,0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,0x10,0x68,1,0x70,0x3a,
+0x73,0x18,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4b,1,0x72,0x3c,
+0x75,0x19,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,0x11,0x69,
+0x76,0x1f,0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,
+0x65,0x73,0xa3,0x4c,2,0x6c,0x32,0x6e,0x9a,0x74,0x12,0x72,0x61,0x6e,0xa5,2,
+0x10,0x66,2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,0x64,0x74,0x68,0x61,0x1f,0x6e,
+0x64,0x66,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x66,0x6f,0x72,0x6d,0x73,0xa3,
+0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x13,
+0x61,0x72,0x6b,0x73,0xa3,0x52,2,0x67,0x34,0x69,0xa2,0x45,0x75,0x12,0x6e,0x6f,
+0x6f,0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,0x6a,0x5e,0x73,0x17,0x79,
+0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,0x6d,0x70,0x61,0x74,0x69,
+0x62,0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x12,0x61,0x6d,0x6f,
+0x5c,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb4,0x62,0xa3,
+0xb9,0x19,0x66,0x69,0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,0x61,0xa5,0x1d,0x13,0x62,
+0x72,0x65,0x77,0x37,0x61,0xa4,0xc,0x62,0xa6,0x53,0x63,0xa8,0x28,0x64,0xac,0xd3,
+0x65,5,0x6d,0xa9,0x6d,0x94,0x6e,0xa2,0x41,0x74,0x15,0x68,0x69,0x6f,0x70,0x69,
+0x63,0x5e,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x86,0x16,0x70,0x6c,0x65,0x6d,
+0x65,0x6e,0x74,0xa3,0x86,0x11,0x78,0x74,0xa2,0x85,2,0x61,0xa3,0xc8,0x62,0xa5,
+0x37,0x65,0x13,0x6e,0x64,0x65,0x64,0xa2,0x85,1,0x61,0xa3,0xc8,0x62,0xa5,0x37,
+0x16,0x6f,0x74,0x69,0x63,0x6f,0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,
+0x64,2,0x61,0x5a,0x63,0x9e,0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,
+0x69,0x63,0x73,0x75,0x70,0xa2,0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,
+0xc4,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73,0x11,0x75,
+0x70,0xa3,0xc3,0x13,0x72,0x69,0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,
+0x65,0x6e,0x74,0xa3,0xc3,0x11,0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,
+0x72,0x73,0x61,0x6e,0x64,0x6d,0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,0x61,0x4a,0x67,
+0x76,0x6c,1,0x62,0x30,0x79,0x13,0x6d,0x61,0x69,0x63,0xa5,0x25,0x13,0x61,0x73,
+0x61,0x6e,0xa3,0xe2,0x13,0x72,0x6c,0x79,0x64,0x1f,0x79,0x6e,0x61,0x73,0x74,0x69,
+0x63,0x63,0x75,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa5,1,0x1f,0x79,0x70,0x74,
+0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,1,0x66,0x26,
+0x73,0xa3,0xc2,0x1c,0x6f,0x72,0x6d,0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,
+0x73,0xa5,0x24,7,0x6e,0xc0,0xec,0x6e,0x3e,0x72,0xa2,0x5d,0x73,0xa2,0xdf,0x76,
+0x14,0x65,0x73,0x74,0x61,0x6e,0xa3,0xbc,1,0x61,0x92,0x63,0x13,0x69,0x65,0x6e,
+0x74,1,0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xa5,0x13,0x72,
+0x65,0x65,0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x7f,
+0x13,0x75,0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,
+0x6f,0x6e,0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,
+0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,2,0x61,0x32,0x6d,0xa2,0x78,0x72,
+0x12,0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x74,0x70,
+0xa2,0x4a,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
+0xa3,0x80,0x11,0x78,0x74,2,0x61,0xa3,0xd2,0x62,0xa5,0x35,0x65,0x13,0x6e,0x64,
+0x65,0x64,1,0x61,0xa3,0xd2,0x62,0xa5,0x35,0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,
+0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x61,0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,
+0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd3,1,0x66,0x42,0x72,
+0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,
+1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,0x65,0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,
+0x69,0x69,0x23,0x64,0x9e,0x65,0xa2,0x42,0x68,0xa2,0x4d,0x6c,1,0x63,0x62,0x70,
+0x17,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x70,1,0x66,0xa3,0x50,0x72,0x1e,0x65,
+0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,
+0x16,0x68,0x65,0x6d,0x69,0x63,0x61,0x6c,0xa2,0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,
+0x6c,0x73,0xa3,0xd0,0x12,0x6c,0x61,0x6d,0xa5,7,0x1a,0x67,0x65,0x61,0x6e,0x6e,
+0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,0x11,0x6f,0x6d,0xa3,0xfd,7,0x6f,0x71,
+0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,0x79,0x1b,0x7a,0x61,0x6e,0x74,0x69,0x6e,
+0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,
+0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,0x16,0x64,0x72,0x61,0x77,0x69,0x6e,0x67,
+0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,0x12,0x65,0x78,0x74,0xa2,0x43,0x14,0x65,
+0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,1,0x68,0x40,0x69,0x12,0x6c,0x6c,0x65,
+0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x73,0x93,0x11,0x6d,0x69,0xa3,0xc9,
+1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,0x64,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,
+0x81,0x61,0x48,0x65,0xa2,0x4e,0x68,0xa2,0x52,0x6c,0x1a,0x6f,0x63,0x6b,0x65,0x6c,
+0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,0x6c,0x34,0x6d,0x40,0x73,0x66,0x74,0x11,
+0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x93,0x11,0x75,0x6d,0xa2,
+0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,
+0xca,1,0x69,0x30,0x73,0x13,0x61,0x76,0x61,0x68,0xa3,0xdd,0x15,0x63,0x6c,0x61,
+0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,0x6c,0x69,0x41,0x16,0x61,0x69,0x6b,0x73,
+0x75,0x6b,0x69,0xa5,8,5,0x6f,0xc1,0x59,0x6f,0xa2,0x62,0x75,0xa4,0x1d,0x79,
+1,0x70,0x9c,0x72,0x14,0x69,0x6c,0x6c,0x69,0x63,0x32,1,0x65,0x4c,0x73,0x11,
+0x75,0x70,0xa2,0x61,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,
+0x72,0x79,0xa3,0x61,0x11,0x78,0x74,3,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,
+9,0x65,0x13,0x6e,0x64,0x65,0x64,2,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,
+9,0x10,0x72,1,0x69,0x34,0x6f,0x15,0x6d,0x69,0x6e,0x6f,0x61,0x6e,0xa5,0x36,
+0x1a,0x6f,0x74,0x73,0x79,0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x7b,3,0x6d,
+0x5a,0x6e,0xa2,0x95,0x70,0xa2,0xa0,0x75,0x17,0x6e,0x74,0x69,0x6e,0x67,0x72,0x6f,
+0x64,0xa2,0x9a,0x17,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0xa3,0x9a,2,0x62,
+0x3a,0x6d,0xa2,0x5f,0x70,0x15,0x61,0x74,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x14,0x69,
+0x6e,0x69,0x6e,0x67,2,0x64,0x46,0x68,0x9e,0x6d,0x1d,0x61,0x72,0x6b,0x73,0x66,
+0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,0x1e,0x69,0x61,0x63,0x72,0x69,
+0x74,0x69,0x63,0x61,0x6c,0x6d,0x61,0x72,0x6b,0x73,0x2e,2,0x65,0x40,0x66,0xa6,
+0x41,0x73,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x83,0x16,0x78,
+0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe0,0x17,0x61,0x6c,0x66,0x6d,0x61,0x72,0x6b,
+0x73,0xa3,0x52,0x11,0x6f,0x6e,0x1f,0x69,0x6e,0x64,0x69,0x63,0x6e,0x75,0x6d,0x62,
+0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,0x1b,0x74,0x72,0x6f,0x6c,0x70,0x69,
+0x63,0x74,0x75,0x72,0x65,0x73,0x83,0x12,0x74,0x69,0x63,0xa2,0x84,0x1b,0x65,0x70,
+0x61,0x63,0x74,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0xdf,1,0x6e,0x3e,0x72,
+0x1b,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x75,0x15,0x65,
+0x69,0x66,0x6f,0x72,0x6d,0xa2,0x98,0x16,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa2,
+0x99,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
+0xa3,0x99,0x61,0xa2,0xe1,0x68,0xa4,0xb,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x8c,
+0x65,0xa2,0x80,0x72,0xa2,0x98,0x73,0xa2,0xaa,0x75,0x1f,0x6e,0x69,0x66,0x69,0x65,
+0x64,0x69,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x47,0x18,0x65,0x78,
+0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,6,0x64,0x6b,0x64,0xa3,0xd1,0x65,0xa5,0,
+0x66,0xa5,0x12,0x67,0xa5,0x2e,0x14,0x6f,0x6d,0x70,0x61,0x74,0xa2,0x45,1,0x66,
+0x96,0x69,1,0x62,0x44,0x64,0x17,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,
+0x4f,0x12,0x73,0x75,0x70,0xa3,0x5f,0x14,0x69,0x6c,0x69,0x74,0x79,0xa2,0x45,1,
+0x66,0x54,0x69,0x18,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,
+0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,
+0x73,0xa3,0x53,0x11,0x78,0x74,6,0x64,0xc,0x64,0xa3,0xd1,0x65,0xa5,0,0x66,
+0xa5,0x12,0x67,0xa5,0x2e,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x19,0x61,
+0x64,0x69,0x63,0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70,0x6c,0x65,0x6d,0x65,
+0x6e,0x74,0x95,1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c,0x73,0x9a,0x1d,0x61,
+0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x9b,0x14,0x72,
+0x6f,0x6b,0x65,0x73,0xa3,0x82,2,0x6e,0x48,0x72,0x64,0x75,0x1d,0x63,0x61,0x73,
+0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0xde,0x1d,0x61,0x64,
+0x69,0x61,0x6e,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x63,0x12,0x69,0x61,
+0x6e,0xa3,0xa8,2,0x61,0x3a,0x65,0x4c,0x6f,0x16,0x72,0x61,0x73,0x6d,0x69,0x61,
+0x6e,0xa5,0x2d,1,0x6b,0x26,0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,1,0x72,
+0x38,0x73,0x17,0x73,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa5,0x19,0x13,0x6f,0x6b,
+0x65,0x65,0x60,0x12,0x73,0x75,0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,
+0x74,0xa3,0xff,3,0x65,0x3e,0x69,0x7e,0x6f,0xa2,0x69,0x75,0x15,0x70,0x6c,0x6f,
+0x79,0x61,0x6e,0xa3,0xe1,1,0x73,0x50,0x76,0x16,0x61,0x6e,0x61,0x67,0x61,0x72,
+0x69,0x3e,0x12,0x65,0x78,0x74,0xa2,0xb3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xb3,
+0x13,0x65,0x72,0x65,0x74,0xa3,0x5a,2,0x61,0x3a,0x6e,0x82,0x76,0x16,0x65,0x73,
+0x61,0x6b,0x75,0x72,0x75,0xa5,0x2f,0x18,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,
+0x73,0x2e,2,0x65,0x30,0x66,0x36,0x73,0x11,0x75,0x70,0xa3,0x83,0x11,0x78,0x74,
+0xa3,0xe0,0x18,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,0x14,0x67,0x62,
+0x61,0x74,0x73,0x91,1,0x67,0x3e,0x6d,0x12,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,
+0x69,0x6c,0x65,0x73,0xa3,0xab,0x11,0x72,0x61,0xa5,0x1a,8,0x6d,0x5f,0x6d,0x3a,
+0x6e,0x48,0x73,0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69,0x64,0x65,0x43,0x11,0x65,0x64,
+0x32,0x12,0x69,0x61,0x6c,0x33,2,0x61,0x40,0x62,0x37,0x6f,1,0x62,0x28,0x6e,
+0x10,0x65,0x21,0x13,0x72,0x65,0x61,0x6b,0x37,0x10,0x72,0x34,0x12,0x72,0x6f,0x77,
+0x35,2,0x6d,0x38,0x71,0x46,0x75,1,0x62,0x3d,0x70,0x3e,0x11,0x65,0x72,0x3f,
+1,0x61,0x24,0x6c,0x39,0x11,0x6c,0x6c,0x39,1,0x72,0x3b,0x75,0x12,0x61,0x72,
+0x65,0x3b,0x12,0x65,0x72,0x74,0x40,0x13,0x69,0x63,0x61,0x6c,0x41,0x63,0x58,0x65,
+0x92,0x66,0x96,0x69,1,0x6e,0x36,0x73,0x10,0x6f,0x30,0x14,0x6c,0x61,0x74,0x65,
+0x64,0x31,0x11,0x69,0x74,0x2e,0x12,0x69,0x61,0x6c,0x2f,2,0x61,0x36,0x69,0x48,
+0x6f,0x10,0x6d,0x24,0x12,0x70,0x61,0x74,0x25,0x10,0x6e,0x22,0x15,0x6f,0x6e,0x69,
+0x63,0x61,0x6c,0x23,0x13,0x72,0x63,0x6c,0x65,0x27,0x11,0x6e,0x63,0x27,2,0x69,
+0x3a,0x6f,0x44,0x72,0x10,0x61,0x2c,0x14,0x63,0x74,0x69,0x6f,0x6e,0x2d,0x10,0x6e,
+0x28,0x11,0x61,0x6c,0x29,0x11,0x6e,0x74,0x2b,4,0x61,0x3a,0x66,0x4c,0x68,0x5e,
+0x6e,0x70,0x77,0x2a,0x12,0x69,0x64,0x65,0x2b,0x22,0x17,0x6d,0x62,0x69,0x67,0x75,
+0x6f,0x75,0x73,0x23,0x26,0x17,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x27,0x24,
+0x17,0x61,0x6c,0x66,0x77,0x69,0x64,0x74,0x68,0x25,0x20,1,0x61,0x30,0x65,0x14,
+0x75,0x74,0x72,0x61,0x6c,0x21,0x28,0x13,0x72,0x72,0x6f,0x77,0x29,0xd,0x6e,0xc0,
+0xfb,0x73,0x6d,0x73,0x3a,0x74,0x98,0x75,0xa2,0x49,0x7a,2,0x6c,0x3b,0x70,0x3d,
+0x73,0x39,5,0x6f,0x28,0x6f,0x57,0x70,0x34,0x75,0x16,0x72,0x72,0x6f,0x67,0x61,
+0x74,0x65,0x45,0x11,0x61,0x63,1,0x65,0x32,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72,
+0x6b,0x31,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x39,0x63,0x53,0x6b,
+0x55,0x6d,0x51,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,
+0x65,0x72,0x27,1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,
+0x65,0x74,0x74,0x65,0x72,0x23,0x17,0x61,0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x21,
+0x6e,0x8a,0x6f,0xa2,0x47,0x70,8,0x66,0x14,0x66,0x5b,0x69,0x59,0x6f,0x4f,0x72,
+0x24,0x73,0x49,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x43,0x61,0x2c,0x63,
+0x4d,0x64,0x47,0x65,0x4b,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,
+0x61,0x72,0x61,0x74,0x6f,0x72,0x3d,2,0x64,0x33,0x6c,0x35,0x6f,0x36,0x1b,0x6e,
+0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x2d,1,0x70,0x7c,0x74,
+0x12,0x68,0x65,0x72,3,0x6c,0x38,0x6e,0x42,0x70,0x4c,0x73,0x14,0x79,0x6d,0x62,
+0x6f,0x6c,0x57,0x14,0x65,0x74,0x74,0x65,0x72,0x2b,0x14,0x75,0x6d,0x62,0x65,0x72,
+0x37,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x1c,0x65,0x6e,
+0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,0x66,0x9e,0x66,0x88,
+0x69,0xa2,0x4b,0x6c,0xa2,0x5c,0x6d,4,0x61,0x60,0x63,0x31,0x65,0x2f,0x6e,0x2d,
+0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x30,0x73,0x14,0x79,0x6d,0x62,
+0x6f,0x6c,0x55,0x14,0x65,0x74,0x74,0x65,0x72,0x29,0x17,0x74,0x68,0x73,0x79,0x6d,
+0x62,0x6f,0x6c,0x51,1,0x69,0x2e,0x6f,0x13,0x72,0x6d,0x61,0x74,0x41,0x1d,0x6e,
+0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x5b,0x10,0x6e,
+0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
+0x6e,0x59,6,0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74,0x27,0x75,0x23,0x2a,0x1c,0x77,
+0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x65,0x28,0x69,
+0x3c,0x6c,0x25,0x19,0x74,0x74,0x65,0x72,0x6e,0x75,0x6d,0x62,0x65,0x72,0x35,0x1a,
+0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3b,0x63,0x44,0x64,0xa2,
+0x60,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x2f,
+6,0x6e,0x39,0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75,0x1b,0x72,0x72,0x65,0x6e,0x63,
+0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12,0x74,0x72,0x6c,0x3f,0x42,0x10,
+0x6e,1,0x6e,0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f,0x1f,0x65,0x63,0x74,0x6f,0x72,
+0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4d,0x63,0x3f,0x66,0x41,
+0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
+0x4b,2,0x61,0x30,0x65,0x4a,0x69,0x12,0x67,0x69,0x74,0x33,0x1c,0x73,0x68,0x70,
+0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x47,0x1a,0x63,0x69,0x6d,0x61,
+0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x33,0,0x13,0x6e,0xc1,0xf,0x74,0x76,0x74,
+0x4c,0x76,0x9a,0x77,0xa2,0x48,0x79,0xa2,0x49,0x7a,1,0x61,0x2c,0x68,0x12,0x61,
+0x69,0x6e,0x8b,0x11,0x69,0x6e,0x85,2,0x61,0x36,0x65,0x3c,0x68,0x14,0x69,0x6e,
+0x79,0x65,0x68,0xa3,0x66,1,0x68,0x71,0x77,0x73,1,0x68,0x28,0x74,0x10,0x68,
+0x77,0x16,0x6d,0x61,0x72,0x62,0x75,0x74,0x61,0x74,0x13,0x67,0x6f,0x61,0x6c,0x3d,
+0x1a,0x65,0x72,0x74,0x69,0x63,0x61,0x6c,0x74,0x61,0x69,0x6c,0xa3,0x67,0x11,0x61,
+0x77,0x79,1,0x65,0x32,0x75,0x11,0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10,0x68,
+0x7a,1,0x62,0x34,0x77,0x16,0x69,0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14,0x61,
+0x72,0x72,0x65,0x65,0x7d,0x6e,0xa2,0x4c,0x70,0xa2,0x69,0x71,0xa2,0x69,0x72,0xa2,
+0x6f,0x73,5,0x74,0x22,0x74,0x38,0x77,0x4c,0x79,0x16,0x72,0x69,0x61,0x63,0x77,
0x61,0x77,0x6f,0x18,0x72,0x61,0x69,0x67,0x68,0x74,0x77,0x61,0x77,0xa3,0x55,0x15,
0x61,0x73,0x68,0x6b,0x61,0x66,0x6d,0x61,0x2e,0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,
0x10,0x64,0x62,0x11,0x68,0x65,0x65,1,0x65,0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,
-0x69,0x10,0x6e,0x67,1,0x61,0x4e,0x65,1,0x68,0x28,0x74,0x10,0x68,0x77,0x16,
-0x6d,0x61,0x72,0x62,0x75,0x74,0x61,0x74,0x13,0x67,0x6f,0x61,0x6c,0x3d,1,0x68,
-0x71,0x77,0x73,0x11,0x61,0x77,0x79,1,0x65,0x32,0x75,0x11,0x64,0x68,0x80,0x11,
-0x68,0x65,0x83,0x10,0x68,0x7a,1,0x62,0x34,0x77,0x16,0x69,0x74,0x68,0x74,0x61,
-0x69,0x6c,0x7f,0x14,0x61,0x72,0x72,0x65,0x65,0x7d,0x6d,0x6c,0x6e,0xa4,0x6b,0x70,
-0xa4,0x88,0x71,0xa4,0x88,0x72,1,0x65,0x38,0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,
-0x61,0x79,0x65,0x68,0x93,1,0x68,0x5f,0x76,0x16,0x65,0x72,0x73,0x65,0x64,0x70,
-0x65,0x61,2,0x61,0x2e,0x65,0xa4,0x3e,0x69,0x10,0x6d,0x53,1,0x6c,0xa2,0xe7,
-0x6e,0x16,0x69,0x63,0x68,0x61,0x65,0x61,0x6e,0,0x12,0x6e,0x76,0x73,0x51,0x73,
-0x3e,0x74,0x5c,0x77,0xa0,0x79,0xa2,0x42,0x7a,0x13,0x61,0x79,0x69,0x6e,0xa3,0x54,
-0x10,0x61,1,0x64,0x2e,0x6d,0x12,0x65,0x6b,0x68,0xa3,0x4c,0x11,0x68,0x65,0xa3,
-0x4b,3,0x61,0x38,0x65,0x3c,0x68,0x4a,0x77,0x13,0x65,0x6e,0x74,0x79,0xa3,0x51,
-0x10,0x77,0xa3,0x4d,1,0x6e,0xa3,0x4e,0x74,0x10,0x68,0xa3,0x4f,0x14,0x61,0x6d,
-0x65,0x64,0x68,0xa3,0x50,0x11,0x61,0x77,0xa3,0x52,0x12,0x6f,0x64,0x68,0xa3,0x53,
-0x6e,0x3a,0x6f,0x40,0x70,0x46,0x71,0x4a,0x72,0x12,0x65,0x73,0x68,0xa3,0x4a,0x11,
-0x75,0x6e,0xa3,0x46,0x11,0x6e,0x65,0xa3,0x47,0x10,0x65,0xa3,0x48,0x12,0x6f,0x70,
-0x68,0xa3,0x49,0x67,0x33,0x67,0x38,0x68,0x40,0x6b,0x5e,0x6c,0x66,0x6d,0x11,0x65,
-0x6d,0xa3,0x45,0x13,0x69,0x6d,0x65,0x6c,0xa1,1,0x65,0x32,0x75,0x14,0x6e,0x64,
-0x72,0x65,0x64,0xa3,0x42,0x11,0x74,0x68,0xa3,0x41,0x12,0x61,0x70,0x68,0xa3,0x43,
-0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x44,0x61,0x34,0x62,0x4a,0x64,0x50,0x66,0x12,
-0x69,0x76,0x65,0x9f,1,0x6c,0x2a,0x79,0x11,0x69,0x6e,0x97,0x12,0x65,0x70,0x68,
-0x95,0x12,0x65,0x74,0x68,0x99,1,0x61,0x30,0x68,0x14,0x61,0x6d,0x65,0x64,0x68,
-0x9d,0x13,0x6c,0x65,0x74,0x68,0x9b,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,6,0x6e,
-0x2c,0x6e,0x34,0x72,0x5e,0x73,0x62,0x74,0x11,0x74,0x61,0xa3,0x63,2,0x67,0x2e,
-0x6e,0x32,0x79,0x10,0x61,0xa3,0x60,0x10,0x61,0xa3,0x5d,1,0x61,0xa3,0x5e,0x6e,
-0x10,0x61,0xa3,0x5f,0x10,0x61,0xa3,0x61,0x11,0x73,0x61,0xa3,0x62,0x62,0x3c,0x6a,
-0x42,0x6c,0x10,0x6c,1,0x61,0xa3,0x5b,0x6c,0x10,0x61,0xa3,0x5c,0x11,0x68,0x61,
-0xa3,0x59,0x10,0x61,0xa3,0x5a,0x11,0x65,0x6d,0x51,2,0x6f,0x2c,0x75,0x50,0x79,
-0x10,0x61,0x91,1,0x6a,0x28,0x6f,0x10,0x6e,0x55,0x1a,0x6f,0x69,0x6e,0x69,0x6e,
-0x67,0x67,0x72,0x6f,0x75,0x70,0x21,0x10,0x6e,0x57,0x10,0x65,0x59,0x10,0x61,1,
-0x66,0x5b,0x70,0x10,0x68,0x5d,0x66,0x9a,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,
-0x75,0x6c,0x11,0x61,0x6d,0x4c,0x12,0x61,0x64,0x68,0x4f,2,0x61,0x3e,0x65,0x4a,
-0x69,0x19,0x6e,0x61,0x6c,0x73,0x65,0x6d,0x6b,0x61,0x74,0x68,0x35,0x15,0x72,0x73,
-0x69,0x79,0x65,0x68,0x8f,0x86,0x10,0x68,0x33,0x10,0x61,1,0x66,0x37,0x6d,0x11,
-0x61,0x6c,0x39,1,0x61,0x40,0x65,0x3e,1,0x68,0x28,0x74,0x10,0x68,0x45,0x40,
-0x13,0x67,0x6f,0x61,0x6c,0x43,2,0x68,0x3b,0x6d,0x5c,0x6e,0x1a,0x69,0x66,0x69,
-0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,0x61,1,0x6b,0x2a,0x70,0x10,0x61,0xa3,0x65,
-0x15,0x69,0x6e,0x6e,0x61,0x79,0x61,0xa3,0x64,0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,
-0x68,0x67,0x6f,0x61,0x6c,0x3d,2,0x61,0x3a,0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,
-0x65,0x64,0x68,0x65,0x68,0x4b,1,0x66,0x47,0x70,0x10,0x68,0x49,0x12,0x61,0x70,
-0x68,0x89,0x61,0x2e,0x62,0x8a,0x64,0xa2,0x51,0x65,0x31,2,0x66,0x3c,0x69,0x70,
-0x6c,1,0x61,0x28,0x65,0x10,0x66,0x27,0x11,0x70,0x68,0x25,0x14,0x72,0x69,0x63,
-0x61,0x6e,2,0x66,0x30,0x6e,0x36,0x71,0x11,0x61,0x66,0xa3,0x58,0x11,0x65,0x68,
-0xa3,0x56,0x12,0x6f,0x6f,0x6e,0xa3,0x57,0x10,0x6e,0x23,1,0x65,0x4a,0x75,0x10,
-0x72,0x1f,0x75,0x73,0x68,0x61,0x73,0x6b,0x69,0x79,0x65,0x68,0x62,0x61,0x72,0x72,
-0x65,0x65,0x8d,1,0x68,0x29,0x74,0x10,0x68,0x2b,0x11,0x61,0x6c,0x2c,0x16,0x61,
-0x74,0x68,0x72,0x69,0x73,0x68,0x2f,7,0x6e,0x2e,0x6e,0x2c,0x72,0x3e,0x74,0x56,
-0x75,0x21,0x18,0x6f,0x6e,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x21,0x28,0x1a,0x69,
-0x67,0x68,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x29,0x2a,0x19,0x72,0x61,0x6e,
-0x73,0x70,0x61,0x72,0x65,0x6e,0x74,0x2b,0x63,0x23,0x64,0x40,0x6a,0x56,0x6c,0x26,
-0x19,0x65,0x66,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x27,0x24,0x19,0x75,0x61,
-0x6c,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x25,0x19,0x6f,0x69,0x6e,0x63,0x61,0x75,
-0x73,0x69,0x6e,0x67,0x23,0,0x13,0x6e,0xc0,0xd0,0x73,0x49,0x73,0x48,0x75,0x78,
-0x77,0x84,0x78,0x9c,0x7a,0x10,0x77,0x58,1,0x6a,0x75,0x73,0x13,0x70,0x61,0x63,
-0x65,0x59,4,0x61,0x51,0x67,0x53,0x70,0x28,0x75,0x30,0x79,0x57,0x54,0x12,0x61,
-0x63,0x65,0x55,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x53,0x15,0x6e,0x6b,0x6e,
-0x6f,0x77,0x6e,0x21,1,0x6a,0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f,0x69,0x6e,0x65,
-0x72,0x5d,0x10,0x78,0x21,0x6e,0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50,0x71,0xa2,0x6e,
-0x72,1,0x65,0x24,0x69,0x6f,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,
-0x69,0x63,0x61,0x74,0x6f,0x72,0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f,0x46,0x73,0x45,
-0x75,0x46,0x14,0x6d,0x65,0x72,0x69,0x63,0x47,0x15,0x78,0x74,0x6c,0x69,0x6e,0x65,
-0x5b,0x17,0x6e,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x45,0x10,0x70,0x48,0x1c,0x65,
-0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,1,0x6f,0x3e,
-0x72,0x4c,0x1a,0x65,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4d,0x4a,
-0x1b,0x73,0x74,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4b,0x10,0x75,
-0x4e,0x16,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68,0x50,0x69,0x86,
-0x6a,0xa2,0x61,0x6c,0xa2,0x65,0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74,0x6f,0x72,0x79,
-0x62,0x72,0x65,0x61,0x6b,0x2d,4,0x32,0x5f,0x33,0x61,0x65,0x34,0x6c,0x6d,0x79,
-0x3a,0x13,0x70,0x68,0x65,0x6e,0x3b,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,
-0x65,0x72,0x6d,2,0x64,0x28,0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65,0x6f,0x67,0x72,
-0x61,0x70,0x68,0x69,0x63,0x3d,0x3e,1,0x66,0x3e,0x73,0x11,0x65,0x70,1,0x61,
-0x22,0x65,0x14,0x72,0x61,0x62,0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e,0x75,0x6d,0x65,
-0x72,0x69,0x63,0x41,2,0x6c,0x63,0x74,0x65,0x76,0x67,1,0x66,0x43,0x69,0x15,
-0x6e,0x65,0x66,0x65,0x65,0x64,0x43,0x61,0x40,0x62,0x70,0x63,0xa2,0x55,0x65,0xa2,
-0xdb,0x67,0x10,0x6c,0x38,0x11,0x75,0x65,0x39,2,0x69,0x23,0x6c,0x34,0x6d,0x16,
-0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x24,0x17,0x70,0x68,0x61,0x62,0x65,0x74,
-0x69,0x63,0x25,4,0x32,0x27,0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72,0x12,0x65,0x61,
-0x6b,2,0x61,0x36,0x62,0x3e,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x57,0x13,
-0x66,0x74,0x65,0x72,0x29,1,0x65,0x2a,0x6f,0x11,0x74,0x68,0x27,0x13,0x66,0x6f,
-0x72,0x65,0x2b,7,0x6d,0x51,0x6d,0x33,0x6f,0x28,0x70,0x69,0x72,0x35,1,0x6d,
-0x76,0x6e,1,0x64,0x3c,0x74,0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74,0x62,0x72,0x65,
-0x61,0x6b,0x2f,0x15,0x69,0x74,0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a,0x61,0x70,0x61,
-0x6e,0x65,0x73,0x65,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x6b,1,0x62,0x3a,0x70,
-0x19,0x6c,0x65,0x78,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x51,0x18,0x69,0x6e,0x69,
-0x6e,0x67,0x6d,0x61,0x72,0x6b,0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b,0x6c,0x30,0x13,
-0x6f,0x73,0x65,0x70,1,0x61,0x38,0x75,0x18,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
-0x6f,0x6e,0x31,0x18,0x72,0x65,0x6e,0x74,0x68,0x65,0x73,0x69,0x73,0x69,0x1b,0x72,
-0x72,0x69,0x61,0x67,0x65,0x72,0x65,0x74,0x75,0x72,0x6e,0x35,2,0x62,0x3e,0x6d,
-0x46,0x78,0x36,0x18,0x63,0x6c,0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,0x70,0x12,
-0x61,0x73,0x65,0x71,0x72,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x73,1,0x64,
-0x42,0x6e,1,0x6f,0x32,0x75,0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,
-0x65,0x21,1,0x65,0x2e,0x69,0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,
-0x6d,0x61,0x6c,0x23,0,0x18,0x6e,0xc4,0x2a,0x74,0xc1,0x6d,0x77,0x96,0x77,0xa2,
-0x4c,0x78,0xa2,0x70,0x79,0xa2,0x7a,0x7a,6,0x73,0x1e,0x73,0x34,0x78,0x42,0x79,
-0x48,0x7a,0x11,0x7a,0x7a,0xa3,0x67,0x10,0x79,1,0x65,0xa3,0xae,0x6d,0xa3,0x81,
-0x11,0x78,0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x61,0x30,0x69,0x58,0x6d,0x11,0x74,
-0x68,0xa3,0x80,0x10,0x6e,1,0x61,0x26,0x62,0xa3,0xb1,0x1a,0x62,0x61,0x7a,0x61,
-0x72,0x73,0x71,0x75,0x61,0x72,0x65,0xa3,0xb1,0x11,0x6e,0x68,0x23,2,0x61,0x30,
-0x63,0x5a,0x6f,0x11,0x6c,0x65,0xa3,0x9b,1,0x6e,0x3c,0x72,0x10,0x61,0xa2,0x92,
-0x15,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0x92,0x12,0x63,0x68,0x6f,0xa3,0xbc,0x11,
-0x68,0x6f,0xa3,0xbc,1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11,0x65,0x6f,
-0x9b,1,0x65,0x2c,0x69,0x72,0x11,0x69,0x69,0x73,0x11,0x7a,0x69,0xa2,0xc0,0x11,
-0x64,0x69,0xa3,0xc0,0x74,0x4a,0x75,0xa2,0xba,0x76,1,0x61,0x2c,0x69,0x11,0x73,
-0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63,5,0x67,0x36,0x67,0x68,
-0x68,0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10,0x68,0xa2,0x9e,0x12,0x75,0x74,
-0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74,0x61,0x6e,0x6f,0x14,0x69,0x6e,
-0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61,1,0x61,0x24,0x69,0x6d,0x6a,
-0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x5b,0x66,0x11,0x6e,0x67,0x99,6,0x6c,
-0x21,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74,0xa3,0x7f,1,0x65,0x89,0x75,
-0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10,0x67,0xa2,0x9a,0x11,0x75,0x74,
-0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,0x10,0x69,0xa3,0x99,1,
-0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,0x6c,0x6f,0x67,0x75,2,
-0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,0x10,0x65,0x89,0x12,0x68,
-0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,0x62,0x10,0x75,0x68,0x11,
-0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f,0x77,0x6e,0xa3,0x67,0x11,
-0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc1,0x13,0x71,0xa2,0xde,0x72,
-0xa2,0xe3,0x73,6,0x69,0x8a,0x69,0x72,0x6f,0xa2,0x4c,0x75,0xa2,0x75,0x79,1,
-0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c,0x6a,0xa3,0x60,0x6e,0xa3,
-0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,
-0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91,0x68,0x62,0x12,0x61,0x6c,
-0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3,0xa6,0x17,0x6e,0x77,0x72,
-0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,2,0x67,0x3a,0x72,0x52,0x79,0x10,0x6f,0xa2,
-0xb0,0x12,0x6d,0x62,0x6f,0xa3,0xb0,1,0x64,0x26,0x6f,0xa3,0xb8,0xa2,0xb7,0x12,
-0x69,0x61,0x6e,0xa3,0xb7,0x10,0x61,0xa2,0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,
-0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,
-0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61,0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,
-0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64,0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,
-2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72,0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,
-0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3,0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,
-0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85,0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,
-1,0x63,0x2f,0x69,0x23,3,0x65,0x3e,0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,
-0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13,0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,
-0x67,0xa3,0x6e,1,0x68,0x2a,0x72,0x10,0x6f,0xa3,0x5d,0x10,0x67,0xa3,0xb6,0x6e,
-0xa2,0x83,0x6f,0xa2,0xf2,0x70,5,0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b,0x61,
-0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72,0x64,
-0xa3,0x5c,0x11,0x74,0x69,0xa3,0x7d,0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61,0x3e,
-0x6c,0x4e,0x6e,0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b,0x10,
-0x67,0xa2,0x5a,0x12,0x73,0x70,0x61,0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3,0x7b,
-0x76,0xa3,0x7c,0x10,0x78,0xa3,0x5b,2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63,0xa2,
-0xa5,0x14,0x69,0x6e,0x68,0x61,0x75,0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,
-0x6e,0x67,0xa3,0x4b,0x10,0x6d,0xa2,0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3,0x90,
-0x11,0x72,0x6d,0xa3,0x59,6,0x6b,0x36,0x6b,0x56,0x73,0x6e,0x75,0x74,0x79,0x11,
-0x69,0x61,0x1f,0x6b,0x65,0x6e,0x67,0x70,0x75,0x61,0x63,0x68,0x75,0x65,0x68,0x6d,
-0x6f,0x6e,0x67,0xa3,0xba,1,0x67,0x2e,0x6f,0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,
-0x62,0xa3,0x84,0x11,0x68,0x75,0xa3,0x96,0x12,0x73,0x68,0x75,0xa3,0x96,0x61,0x42,
-0x62,0x80,0x65,0x10,0x77,1,0x61,0xa3,0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,
-0x97,2,0x62,0x2e,0x6e,0x3c,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,
-0x61,0x6e,0xa3,0x8f,0x10,0x64,0xa2,0xbb,0x16,0x69,0x6e,0x61,0x67,0x61,0x72,0x69,
-0xa3,0xbb,0x11,0x61,0x74,0xa3,0x8f,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x93,0x73,
-2,0x61,0x36,0x67,0x3c,0x6d,0x10,0x61,0x84,0x12,0x6e,0x79,0x61,0x85,0x11,0x67,
-0x65,0xa3,0xab,0x10,0x65,0xa3,0xab,1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10,
-0x6d,0x5b,1,0x63,0xa2,0x60,0x64,5,0x70,0x37,0x70,0x36,0x73,0x54,0x74,0x14,
-0x75,0x72,0x6b,0x69,0x63,0xa3,0x58,0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69,
-0x61,0x6e,0x9b,0x11,0x69,0x63,0xa3,0x59,0x10,0x6f,1,0x67,0x3a,0x75,0x18,0x74,
-0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x85,0x13,0x64,0x69,0x61,0x6e,0xa3,
-0xb8,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,
-0x61,0x6e,0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa3,0x4c,0x14,
-0x74,0x61,0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3,0x6d,0x12,0x69,0x6b,0x69,
-0xa3,0x6d,2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f,0x11,0x79,0x61,0x5f,0x10,
-0x68,0xa3,0x58,0x68,0xc3,0xd,0x6b,0xc2,0x24,0x6b,0xa4,0x17,0x6c,0xa4,0xb2,0x6d,
-8,0x6f,0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,0x86,0x79,1,0x61,0x28,0x6d,
-0x10,0x72,0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,0x64,0x2e,0x6e,0x32,0x6f,0x10,
-0x6e,0xa3,0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,0x14,0x6f,0x6c,0x69,0x61,0x6e,
-0x57,0x10,0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,0x65,0x69,0xa3,0x73,0x11,0x6c,
-0x74,0xa2,0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,0x36,0x65,0xa2,0x67,0x69,0xa2,
-0xbd,0x6c,0x11,0x79,0x6d,0x55,6,0x6e,0x38,0x6e,0x32,0x72,0x5c,0x73,0x6c,0x79,
-0x10,0x61,0xa3,0x55,1,0x64,0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,
-0x6e,0xa3,0x79,0xa2,0x54,0x12,0x61,0x69,0x63,0xa3,0x54,0x10,0x63,0xa2,0xa9,0x12,
-0x68,0x65,0x6e,0xa3,0xa9,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa3,
-0xaf,0x68,0x36,0x6b,0x4c,0x6c,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,1,0x61,
-0x26,0x6a,0xa3,0xa0,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x10,0x61,0xa2,0xb4,0x12,
-0x73,0x61,0x72,0xa3,0xb4,3,0x64,0x78,0x65,0x94,0x6e,0xa2,0x42,0x72,1,0x63,
-0xa3,0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69,0x63,1,0x63,0x3c,0x68,0x19,0x69,
-0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x56,0x15,0x75,0x72,0x73,0x69,
-0x76,0x65,0xa3,0x8d,1,0x65,0x26,0x66,0xa3,0xb5,0x16,0x66,0x61,0x69,0x64,0x72,
-0x69,0x6e,0xa3,0xb5,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b,0xa3,0x73,0x10,
-0x64,0xa2,0x8c,0x17,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0x8c,0x11,0x61,
-0x6f,0xa3,0x5c,6,0x6e,0x1a,0x6e,0x34,0x6f,0x38,0x70,0x3e,0x74,0x11,0x68,0x69,
-0xa3,0x78,0x11,0x64,0x61,0x4b,0x11,0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3,0x8a,
-0x61,0x30,0x68,0x9a,0x69,0x11,0x74,0x73,0xa3,0xbf,4,0x69,0x3c,0x6c,0x44,0x6e,
-0x48,0x74,0x56,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3,
-0x78,0x10,0x69,0xa3,0x4f,1,0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61,
-0x6b,0x61,0x6e,0x61,0x4c,0x19,0x6f,0x72,0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61,
-0x8d,4,0x61,0x40,0x69,0x52,0x6d,0x70,0x6f,0x7c,0x75,0x15,0x64,0x61,0x77,0x61,
-0x64,0x69,0xa3,0x91,0x10,0x72,0x92,0x15,0x6f,0x73,0x68,0x74,0x68,0x69,0x93,0x1d,
-0x74,0x61,0x6e,0x73,0x6d,0x61,0x6c,0x6c,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xbf,
-1,0x65,0x24,0x72,0x4f,0x10,0x72,0x4f,0x10,0x6a,0xa2,0x9d,0x11,0x6b,0x69,0xa3,
-0x9d,4,0x61,0x5c,0x65,0x90,0x69,0xa0,0x6f,0xa2,0x5d,0x79,1,0x63,0x34,0x64,
-0x10,0x69,0xa2,0x6c,0x11,0x61,0x6e,0xa3,0x6c,0x10,0x69,0xa2,0x6b,0x11,0x61,0x6e,
-0xa3,0x6b,2,0x6e,0x42,0x6f,0x46,0x74,3,0x66,0xa3,0x50,0x67,0xa3,0x51,0x69,
-0x24,0x6e,0x53,0x10,0x6e,0x53,0x10,0x61,0xa3,0x6a,0x50,0x10,0x6f,0x51,0x11,0x70,
-0x63,0xa2,0x52,0x11,0x68,0x61,0xa3,0x52,2,0x6d,0x2e,0x6e,0x36,0x73,0x10,0x75,
-0xa3,0x83,0x10,0x62,0x80,0x10,0x75,0x81,2,0x61,0xa3,0x53,0x62,0x83,0x65,0x11,
-0x61,0x72,1,0x61,0xa3,0x53,0x62,0x83,0x11,0x6d,0x61,0xa3,0x8b,0x68,0x6e,0x69,
-0xa2,0x95,0x6a,2,0x61,0x30,0x70,0x52,0x75,0x11,0x72,0x63,0xa3,0x94,1,0x6d,
-0x38,0x76,0x10,0x61,0xa2,0x4e,0x13,0x6e,0x65,0x73,0x65,0xa3,0x4e,0x10,0x6f,0xa3,
-0xad,0x11,0x61,0x6e,0xa3,0x69,6,0x6c,0x1e,0x6c,0x34,0x6d,0x3a,0x72,0x48,0x75,
-0x11,0x6e,0x67,0xa3,0x4c,0x11,0x75,0x77,0xa3,0x9c,0x10,0x6e,1,0x67,0xa3,0x4b,
-0x70,0xa3,0xba,0x11,0x6b,0x74,0x8d,0x61,0x3c,0x65,0xa2,0x43,0x69,0x11,0x72,0x61,
-0x48,0x13,0x67,0x61,0x6e,0x61,0x49,1,0x6e,0x34,0x74,0x10,0x72,0xa2,0xa2,0x11,
-0x61,0x6e,0xa3,0xa2,0x42,6,0x6f,0xe,0x6f,0x77,0x73,0xa3,0x49,0x74,0xa3,0x4a,
-0x75,0x12,0x6e,0x6f,0x6f,0x77,0x62,0xa3,0xac,0x67,0x3e,0x69,0x42,0x19,0x66,0x69,
-0x72,0x6f,0x68,0x69,0x6e,0x67,0x79,0x61,0xa3,0xb6,0x44,0x11,0x75,0x6c,0x45,0x11,
-0x62,0x72,0x46,0x11,0x65,0x77,0x47,2,0x6d,0x2e,0x6e,0x4a,0x74,0x11,0x61,0x6c,
-0x5d,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,
-0x74,2,0x64,0x66,0x68,0x6a,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,
-0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0x7d,
-0x13,0x6c,0x61,0x76,0x69,0xa3,0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,0x74,
-0x65,0x64,0x23,0x64,0xc1,0xd,0x64,0xa2,0x7a,0x65,0xa2,0xc1,0x67,4,0x65,0x82,
-0x6c,0x9a,0x6f,0xa2,0x46,0x72,0xa2,0x55,0x75,2,0x6a,0x3c,0x6e,0x4e,0x72,1,
-0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,0x69,0x41,1,0x61,0x24,0x72,0x3f,0x13,
-0x72,0x61,0x74,0x69,0x3f,0x18,0x6a,0x61,0x6c,0x61,0x67,0x6f,0x6e,0x64,0x69,0xa3,
-0xb3,0x10,0x6f,1,0x6b,0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,
-0x61,0x67,0x90,0x15,0x6f,0x6c,0x69,0x74,0x69,0x63,0x91,1,0x6e,0x30,0x74,0x10,
-0x68,0x3a,0x11,0x69,0x63,0x3b,1,0x67,0xa3,0xb3,0x6d,0xa3,0xaf,1,0x61,0x32,
-0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89,0x12,0x74,0x68,
-0x61,0xa3,0x89,4,0x65,0x46,0x69,0x6c,0x6f,0x8c,0x73,0x9a,0x75,0x11,0x70,0x6c,
-0xa2,0x87,0x13,0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,0x38,0x76,0x10,0x61,0x34,
-0x15,0x6e,0x61,0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,0x65,0x74,0x33,1,0x61,
-0x36,0x76,0x16,0x65,0x73,0x61,0x6b,0x75,0x72,0x75,0xa3,0xbe,0x10,0x6b,0xa3,0xbe,
-0x11,0x67,0x72,0xa2,0xb2,0x10,0x61,0xa3,0xb2,0x11,0x72,0x74,0x33,2,0x67,0x3a,
-0x6c,0x72,0x74,0x11,0x68,0x69,0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10,0x79,2,
-0x64,0xa3,0x45,0x68,0xa3,0x46,0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e,0x68,0x69,
-0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x47,1,0x62,0x36,0x79,0x10,
-0x6d,0xa2,0xb9,0x12,0x61,0x69,0x63,0xa3,0xb9,0x10,0x61,0xa2,0x88,0x12,0x73,0x61,
-0x6e,0xa3,0x88,0x61,0xa2,0xb4,0x62,0xa4,0x19,0x63,6,0x6f,0x3d,0x6f,0x5a,0x70,
-0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2,0x69,0x2a,0x6c,0x31,0x73,0xa3,0x44,
-0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69,0x6f,0x74,0x7f,1,0x6d,0x30,0x70,
-0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d,0x6f,0x6e,0x21,0x11,0x72,0x74,0x7f,
-0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3,0x65,0x61,0x32,0x68,0xa2,0x41,0x69,
-0x11,0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e,0x50,0x72,0x76,0x75,0x1d,0x63,0x61,
-0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0x9f,0x10,0x6d,
-0xa3,0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x72,
-0x69,0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69,0xa2,0x68,0x11,0x61,0x6e,0xa3,0x68,
-3,0x61,0x32,0x65,0x44,0x6f,0x52,0x72,0x10,0x73,0xa3,0xbd,1,0x6b,0x26,0x6d,
-0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65,0x65,0x2d,
-0x16,0x72,0x61,0x73,0x6d,0x69,0x61,0x6e,0xa3,0xbd,6,0x68,0x4a,0x68,0x48,0x6e,
-0x4e,0x72,0x76,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13,0x73,0x74,0x61,
-0x6e,0xa3,0x75,0x11,0x6f,0x6d,0xa3,0xa1,0x11,0x61,0x74,0x1f,0x6f,0x6c,0x69,0x61,
-0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x9c,1,0x61,
-0x3e,0x6d,2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69,0x61,0x6e,0x27,
-0x10,0x62,0x24,0x11,0x69,0x63,0x25,0x64,0x30,0x66,0x44,0x67,0x11,0x68,0x62,0xa3,
-0x9f,0x10,0x6c,1,0x61,0x26,0x6d,0xa3,0xa7,0x10,0x6d,0xa3,0xa7,0x11,0x61,0x6b,
-0xa3,0x93,6,0x6c,0x3c,0x6c,0x52,0x6f,0x56,0x72,0x66,0x75,1,0x67,0x30,0x68,
-1,0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13,0x6e,0x65,0x73,0x65,0x8f,
-0x11,0x69,0x73,0xa1,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f,0x2b,0x10,0x61,
-1,0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11,0x6d,0x69,0xa3,
-0x41,0x61,0x48,0x65,0x9c,0x68,1,0x61,0x2a,0x6b,0x10,0x73,0xa3,0xa8,0x15,0x69,
-0x6b,0x73,0x75,0x6b,0x69,0xa3,0xa8,3,0x6c,0x3a,0x6d,0x48,0x73,0x54,0x74,1,
-0x61,0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e,0x65,0x73,0x65,0x9d,
-0x10,0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86,0x13,0x61,0x76,0x61,
-0x68,0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3,0x6c,0x42,0x6e,
-0x90,0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61,0x6d,0x6f,0x25,
-0x22,1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73,0x79,0x6c,0x6c,
-0x61,0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x29,0x18,0x61,
-0x64,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f,0x1a,0x74,0x61,
-0x70,0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72,0x61,0x69,0x6c,
-0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,
-0x23,0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,0x20,0x10,
-0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,
-0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,
-0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,0xb,0x72,
-0x39,0x76,0xc,0x76,0x33,0x78,0x2a,0x7a,0x11,0x77,0x6a,0x43,0x10,0x78,0x21,0x72,
-0x28,0x73,0x50,0x74,0x31,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69,0x6f,0x6e,0x61,
-0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d,0x35,0x70,0x18,
-0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x35,0x6c,0x1f,0x6c,0x3c,0x6f,0x4a,
-0x70,1,0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,0x28,1,0x66,0x2b,
-0x76,0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21,0x63,0x4c,0x65,0x64,0x67,
-1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,0x77,0x6a,0x41,
-0x10,0x7a,0x41,2,0x6e,0x23,0x6f,0x24,0x72,0x25,0x14,0x6e,0x74,0x72,0x6f,0x6c,
-0x23,2,0x62,0x34,0x6d,0x4e,0x78,0x26,0x13,0x74,0x65,0x6e,0x64,0x27,0x3a,1,
-0x61,0x24,0x67,0x3d,0x11,0x73,0x65,0x3a,0x12,0x67,0x61,0x7a,0x3d,0x3e,0x16,0x6f,
-0x64,0x69,0x66,0x69,0x65,0x72,0x3f,9,0x6e,0x4a,0x6e,0x34,0x6f,0x44,0x73,0x60,
-0x75,0x94,0x78,0x10,0x78,0x21,0x10,0x75,0x2a,0x14,0x6d,0x65,0x72,0x69,0x63,0x2b,
-1,0x6c,0x2c,0x74,0x12,0x68,0x65,0x72,0x21,0x14,0x65,0x74,0x74,0x65,0x72,0x2d,
-3,0x63,0x36,0x65,0x46,0x70,0x31,0x74,0x32,0x12,0x65,0x72,0x6d,0x33,0x3c,0x16,
-0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3d,0x2e,0x10,0x70,0x2f,0x10,0x70,0x34,0x12,
-0x70,0x65,0x72,0x35,0x61,0x46,0x63,0x52,0x65,0x64,0x66,0x72,0x6c,2,0x65,0x2d,
-0x66,0x3b,0x6f,0x28,0x12,0x77,0x65,0x72,0x29,0x10,0x74,0x22,0x12,0x65,0x72,0x6d,
-0x23,1,0x6c,0x24,0x72,0x37,0x24,0x12,0x6f,0x73,0x65,0x25,0x10,0x78,0x38,0x13,
-0x74,0x65,0x6e,0x64,0x39,0x10,0x6f,0x26,0x13,0x72,0x6d,0x61,0x74,0x27,0,0x10,
-0x6c,0x88,0x72,0x40,0x72,0x36,0x73,0x5e,0x77,0x7a,0x78,0x8a,0x7a,0x11,0x77,0x6a,
-0x4b,1,0x65,0x24,0x69,0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,
-0x69,0x63,0x61,0x74,0x6f,0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c,
-0x65,0x71,0x75,0x6f,0x74,0x65,0x3f,0x17,0x73,0x65,0x67,0x73,0x70,0x61,0x63,0x65,
-0x4d,0x10,0x78,0x21,0x6c,0x36,0x6d,0x3c,0x6e,0x76,0x6f,0x13,0x74,0x68,0x65,0x72,
-0x21,1,0x65,0x23,0x66,0x35,3,0x62,0x37,0x69,0x28,0x6c,0x29,0x6e,0x2b,0x10,
-0x64,1,0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,0x12,0x6c,0x65,0x74,0x37,0x14,0x65,
-0x74,0x74,0x65,0x72,0x29,2,0x65,0x36,0x6c,0x39,0x75,0x2c,0x14,0x6d,0x65,0x72,
-0x69,0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,0x66,0x3f,0x66,0x40,0x67,0x4e,
-0x68,0x70,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b,0x61,0x6e,0x61,0x27,0x10,0x6f,
-0x24,0x13,0x72,0x6d,0x61,0x74,0x25,1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,
-0x74,0x65,0x72,0x7a,0x77,0x6a,0x49,0x10,0x7a,0x49,1,0x65,0x24,0x6c,0x3d,0x19,
-0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,0x61,0x86,0x63,0x92,0x64,
-0x94,0x65,2,0x62,0x44,0x6d,0x5e,0x78,0x2e,0x13,0x74,0x65,0x6e,0x64,0x32,0x15,
-0x6e,0x75,0x6d,0x6c,0x65,0x74,0x2f,0x42,1,0x61,0x24,0x67,0x45,0x11,0x73,0x65,
-0x42,0x12,0x67,0x61,0x7a,0x45,0x46,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x47,
-0x15,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,0x31,1,0x6f,0x24,0x71,0x41,
-0x18,0x75,0x62,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65,0x41,2,0x63,0x32,0x6e,0x3c,
-0x6f,0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c,0x6f,0x73,0x65,0x25,0x20,0x12,
-0x6f,0x6e,0x65,0x21,6,0x6f,0x65,0x6f,0x4a,0x72,0x5c,0x74,0x64,0x76,0x1d,0x69,
-0x73,0x75,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x6c,0x65,0x66,0x74,0x3d,0x18,0x76,
-0x65,0x72,0x73,0x74,0x72,0x75,0x63,0x6b,0x2d,0x13,0x69,0x67,0x68,0x74,0x2f,0x11,
-0x6f,0x70,0x30,0x12,0x61,0x6e,0x64,2,0x62,0x32,0x6c,0x62,0x72,0x13,0x69,0x67,
-0x68,0x74,0x3b,0x14,0x6f,0x74,0x74,0x6f,0x6d,0x32,0x12,0x61,0x6e,0x64,1,0x6c,
-0x2e,0x72,0x13,0x69,0x67,0x68,0x74,0x35,0x12,0x65,0x66,0x74,0x3f,0x12,0x65,0x66,
-0x74,0x36,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,0x68,0x74,0x39,0x62,0x2c,0x6c,0x5c,
-0x6e,0x10,0x61,0x21,0x14,0x6f,0x74,0x74,0x6f,0x6d,0x22,0x12,0x61,0x6e,0x64,1,
-0x6c,0x2e,0x72,0x13,0x69,0x67,0x68,0x74,0x27,0x12,0x65,0x66,0x74,0x25,0x12,0x65,
-0x66,0x74,0x28,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,0x68,0x74,0x2b,0xd,0x6e,0xaa,
-0x72,0x70,0x72,0x92,0x73,0xa2,0x46,0x74,0xa2,0x54,0x76,1,0x69,0x60,0x6f,0x12,
-0x77,0x65,0x6c,0x62,1,0x64,0x3a,0x69,0x19,0x6e,0x64,0x65,0x70,0x65,0x6e,0x64,
-0x65,0x6e,0x74,0x67,0x17,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x74,0x65,1,0x72,
-0x2e,0x73,0x13,0x61,0x72,0x67,0x61,0x61,0x12,0x61,0x6d,0x61,0x5f,0x1d,0x65,0x67,
-0x69,0x73,0x74,0x65,0x72,0x73,0x68,0x69,0x66,0x74,0x65,0x72,0x57,0x1e,0x79,0x6c,
-0x6c,0x61,0x62,0x6c,0x65,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x59,0x12,0x6f,
-0x6e,0x65,1,0x6c,0x2c,0x6d,0x12,0x61,0x72,0x6b,0x5d,0x14,0x65,0x74,0x74,0x65,
-0x72,0x5b,0x6e,0x3c,0x6f,0x7c,0x70,0x18,0x75,0x72,0x65,0x6b,0x69,0x6c,0x6c,0x65,
-0x72,0x55,1,0x6f,0x4c,0x75,1,0x6b,0x3c,0x6d,0x12,0x62,0x65,0x72,0x50,0x15,
-0x6a,0x6f,0x69,0x6e,0x65,0x72,0x53,0x11,0x74,0x61,0x4f,0x16,0x6e,0x6a,0x6f,0x69,
-0x6e,0x65,0x72,0x4d,0x13,0x74,0x68,0x65,0x72,0x21,0x67,0x3e,0x67,0x4a,0x69,0x64,
-0x6a,0x82,0x6d,0x1d,0x6f,0x64,0x69,0x66,0x79,0x69,0x6e,0x67,0x6c,0x65,0x74,0x74,
-0x65,0x72,0x4b,0x1c,0x65,0x6d,0x69,0x6e,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,
-0x6b,0x45,0x1e,0x6e,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x73,0x74,0x61,0x63,0x6b,
-0x65,0x72,0x47,0x14,0x6f,0x69,0x6e,0x65,0x72,0x49,0x61,0xa2,0xba,0x62,0xa2,0xc0,
-0x63,1,0x61,0xa2,0xa2,0x6f,0x16,0x6e,0x73,0x6f,0x6e,0x61,0x6e,0x74,0x2a,8,
-0x6b,0x67,0x6b,0x48,0x6d,0x52,0x70,0x5c,0x73,0xa2,0x42,0x77,0x19,0x69,0x74,0x68,
-0x73,0x74,0x61,0x63,0x6b,0x65,0x72,0x43,0x14,0x69,0x6c,0x6c,0x65,0x72,0x35,0x14,
-0x65,0x64,0x69,0x61,0x6c,0x37,1,0x6c,0x52,0x72,0x10,0x65,1,0x63,0x2e,0x66,
-0x13,0x69,0x78,0x65,0x64,0x3d,0x19,0x65,0x64,0x69,0x6e,0x67,0x72,0x65,0x70,0x68,
-0x61,0x3b,0x18,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x39,0x10,0x75,1,
-0x62,0x3e,0x63,0x1b,0x63,0x65,0x65,0x64,0x69,0x6e,0x67,0x72,0x65,0x70,0x68,0x61,
-0x41,0x15,0x6a,0x6f,0x69,0x6e,0x65,0x64,0x3f,0x64,0x4c,0x66,0x52,0x68,0x5a,0x69,
-0x1e,0x6e,0x69,0x74,0x69,0x61,0x6c,0x70,0x6f,0x73,0x74,0x66,0x69,0x78,0x65,0x64,
-0x33,0x12,0x65,0x61,0x64,0x2d,0x13,0x69,0x6e,0x61,0x6c,0x2f,0x18,0x65,0x61,0x64,
-0x6c,0x65,0x74,0x74,0x65,0x72,0x31,0x1d,0x6e,0x74,0x69,0x6c,0x6c,0x61,0x74,0x69,
-0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x29,0x16,0x76,0x61,0x67,0x72,0x61,0x68,0x61,0x23,
-1,0x69,0x4a,0x72,0x10,0x61,0x1f,0x68,0x6d,0x69,0x6a,0x6f,0x69,0x6e,0x69,0x6e,
-0x67,0x6e,0x75,0x6d,0x62,0x65,0x72,0x27,0x12,0x6e,0x64,0x75,0x25,2,0x72,0x38,
-0x74,0x46,0x75,0x26,0x15,0x70,0x72,0x69,0x67,0x68,0x74,0x27,0x20,0x15,0x6f,0x74,
-0x61,0x74,0x65,0x64,0x21,1,0x72,0x24,0x75,0x25,0x22,0x18,0x61,0x6e,0x73,0x66,
-0x6f,0x72,0x6d,0x65,0x64,1,0x72,0x32,0x75,0x15,0x70,0x72,0x69,0x67,0x68,0x74,
-0x25,0x15,0x6f,0x74,0x61,0x74,0x65,0x64,0x23,0xd,0x6e,0xc1,0x86,0x73,0xa8,0x73,
-0x4c,0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20,0,
-0x70,0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c,0x6f,
-0xff,8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c,0xff,
-0xf,0,0,0,0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d,0x61,
-0x72,0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3,0,
-0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0,0,
-0,0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,0xff,1,0,0,0,0x16,
-0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65,0x63,
-0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c,0x70,
-0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61,0x73,
-0x73,0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe,0x30,
-0xf8,0,0,9,0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80,0,
-0,0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8,0,
-0,0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69,0x76,
-0x61,0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0,0,
-0x64,0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0,0x1f,
-0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
-0xd9,0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75,0x13,
-0x6d,0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,
-0x67,0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6,0x80,
-1,3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,
-8,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62,0x65,
-0x72,0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x80,
-0,0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
-0xf9,0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79,0x6d,
-0xa4,0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15,0x64,
-0x69,0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,
-4,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74,0x16,
-0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5,0xc0,
-1,0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61,0x6c,
-0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0,0,
-0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,
-0x69,0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f,0x28,
-0x74,0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,
-0x74,0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74,0x65,
-0x72,0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73,0x65,
-0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96,0x65,
-0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80,0xe6,
-0x80,1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b,0x72,
-0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0,0,
-0x22,0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e,1,
-0x6e,0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f,0x72,
-0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0,0x19,
-0x62,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63,0xd9,
-0x80,0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,
-0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c,0x65,
-0x74,0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74,0xa7,
-0,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xe9,
-0,0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7,0
+0x69,0x10,0x6e,0x67,2,0x6f,0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,0x28,
+0x6f,0x10,0x6e,0x55,0x1a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,0x70,
+0x21,0x10,0x6e,0x57,0x10,0x65,0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,0x5d,
+1,0x65,0x38,0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,0x61,0x79,0x65,0x68,0x93,1,
+0x68,0x5f,0x76,0x16,0x65,0x72,0x73,0x65,0x64,0x70,0x65,0x61,0x67,0xc1,0xc7,0x67,
+0xa4,0x52,0x68,0xa4,0x59,0x6b,0xa4,0x99,0x6c,0xa4,0xb2,0x6d,2,0x61,0x2e,0x65,
+0xa4,0x3e,0x69,0x10,0x6d,0x53,1,0x6c,0xa2,0xe7,0x6e,0x16,0x69,0x63,0x68,0x61,
+0x65,0x61,0x6e,0,0x12,0x6e,0x76,0x73,0x51,0x73,0x3e,0x74,0x5c,0x77,0xa0,0x79,
+0xa2,0x42,0x7a,0x13,0x61,0x79,0x69,0x6e,0xa3,0x54,0x10,0x61,1,0x64,0x2e,0x6d,
+0x12,0x65,0x6b,0x68,0xa3,0x4c,0x11,0x68,0x65,0xa3,0x4b,3,0x61,0x38,0x65,0x3c,
+0x68,0x4a,0x77,0x13,0x65,0x6e,0x74,0x79,0xa3,0x51,0x10,0x77,0xa3,0x4d,1,0x6e,
+0xa3,0x4e,0x74,0x10,0x68,0xa3,0x4f,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x50,0x11,
+0x61,0x77,0xa3,0x52,0x12,0x6f,0x64,0x68,0xa3,0x53,0x6e,0x3a,0x6f,0x40,0x70,0x46,
+0x71,0x4a,0x72,0x12,0x65,0x73,0x68,0xa3,0x4a,0x11,0x75,0x6e,0xa3,0x46,0x11,0x6e,
+0x65,0xa3,0x47,0x10,0x65,0xa3,0x48,0x12,0x6f,0x70,0x68,0xa3,0x49,0x67,0x33,0x67,
+0x38,0x68,0x40,0x6b,0x5e,0x6c,0x66,0x6d,0x11,0x65,0x6d,0xa3,0x45,0x13,0x69,0x6d,
+0x65,0x6c,0xa1,1,0x65,0x32,0x75,0x14,0x6e,0x64,0x72,0x65,0x64,0xa3,0x42,0x11,
+0x74,0x68,0xa3,0x41,0x12,0x61,0x70,0x68,0xa3,0x43,0x14,0x61,0x6d,0x65,0x64,0x68,
+0xa3,0x44,0x61,0x34,0x62,0x4a,0x64,0x50,0x66,0x12,0x69,0x76,0x65,0x9f,1,0x6c,
+0x2a,0x79,0x11,0x69,0x6e,0x97,0x12,0x65,0x70,0x68,0x95,0x12,0x65,0x74,0x68,0x99,
+1,0x61,0x30,0x68,0x14,0x61,0x6d,0x65,0x64,0x68,0x9d,0x13,0x6c,0x65,0x74,0x68,
+0x9b,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,6,0x6e,0x2c,0x6e,0x34,0x72,0x5e,0x73,
+0x62,0x74,0x11,0x74,0x61,0xa3,0x63,2,0x67,0x2e,0x6e,0x32,0x79,0x10,0x61,0xa3,
+0x60,0x10,0x61,0xa3,0x5d,1,0x61,0xa3,0x5e,0x6e,0x10,0x61,0xa3,0x5f,0x10,0x61,
+0xa3,0x61,0x11,0x73,0x61,0xa3,0x62,0x62,0x3c,0x6a,0x42,0x6c,0x10,0x6c,1,0x61,
+0xa3,0x5b,0x6c,0x10,0x61,0xa3,0x5c,0x11,0x68,0x61,0xa3,0x59,0x10,0x61,0xa3,0x5a,
+0x11,0x65,0x6d,0x51,0x10,0x61,1,0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,
+0x40,0x65,0x3e,1,0x68,0x28,0x74,0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,
+0x43,2,0x68,0x3b,0x6d,0x5c,0x6e,0x1a,0x69,0x66,0x69,0x72,0x6f,0x68,0x69,0x6e,
+0x67,0x79,0x61,1,0x6b,0x2a,0x70,0x10,0x61,0xa3,0x65,0x15,0x69,0x6e,0x6e,0x61,
+0x79,0x61,0xa3,0x64,0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,0x6c,
+0x3d,2,0x61,0x3a,0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,0x68,
+0x4b,1,0x66,0x47,0x70,0x10,0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x11,0x61,0x6d,
+0x4c,0x12,0x61,0x64,0x68,0x4f,0x61,0x6e,0x62,0xa2,0x54,0x64,0xa2,0x70,0x65,0x31,
+0x66,2,0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,0x73,0x65,0x6d,0x6b,0x61,
+0x74,0x68,0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,0x86,0x10,0x68,0x33,2,
+0x66,0x3c,0x69,0x70,0x6c,1,0x61,0x28,0x65,0x10,0x66,0x27,0x11,0x70,0x68,0x25,
+0x14,0x72,0x69,0x63,0x61,0x6e,2,0x66,0x30,0x6e,0x36,0x71,0x11,0x61,0x66,0xa3,
+0x58,0x11,0x65,0x68,0xa3,0x56,0x12,0x6f,0x6f,0x6e,0xa3,0x57,0x10,0x6e,0x23,1,
+0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,0x68,0x61,0x73,0x6b,0x69,0x79,0x65,0x68,
+0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,0x68,0x29,0x74,0x10,0x68,0x2b,0x11,0x61,
+0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,0x73,0x68,0x2f,7,0x6e,0x2e,0x6e,0x2c,
+0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,0x6e,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,
+0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x29,0x2a,
+0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,0x6e,0x74,0x2b,0x63,0x23,0x64,0x40,
+0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x27,
+0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x25,0x19,0x6f,0x69,
+0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,0x23,0,0x13,0x6e,0xc0,0xd0,0x73,0x49,
+0x73,0x48,0x75,0x78,0x77,0x84,0x78,0x9c,0x7a,0x10,0x77,0x58,1,0x6a,0x75,0x73,
+0x13,0x70,0x61,0x63,0x65,0x59,4,0x61,0x51,0x67,0x53,0x70,0x28,0x75,0x30,0x79,
+0x57,0x54,0x12,0x61,0x63,0x65,0x55,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x53,
+0x15,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,1,0x6a,0x5d,0x6f,0x17,0x72,0x64,0x6a,
+0x6f,0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,0x6e,0x60,0x6f,0xa2,0x41,0x70,0xa2,
+0x50,0x71,0xa2,0x6e,0x72,1,0x65,0x24,0x69,0x6f,0x1e,0x67,0x69,0x6f,0x6e,0x61,
+0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x6f,4,0x65,0x3e,0x6c,0x5b,
+0x6f,0x46,0x73,0x45,0x75,0x46,0x14,0x6d,0x65,0x72,0x69,0x63,0x47,0x15,0x78,0x74,
+0x6c,0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x45,0x10,
+0x70,0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
+0x49,1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,
+0x69,0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,
+0x63,0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x68,0x7b,
+0x68,0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,0xa2,0x65,0x6d,0x1c,0x61,0x6e,0x64,0x61,
+0x74,0x6f,0x72,0x79,0x62,0x72,0x65,0x61,0x6b,0x2d,4,0x32,0x5f,0x33,0x61,0x65,
+0x34,0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,0x65,0x6e,0x3b,0x19,0x62,0x72,0x65,0x77,
+0x6c,0x65,0x74,0x74,0x65,0x72,0x6d,2,0x64,0x28,0x6e,0x3c,0x73,0x41,0x3c,0x18,
+0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x3d,0x3e,1,0x66,0x3e,0x73,0x11,
+0x65,0x70,1,0x61,0x22,0x65,0x14,0x72,0x61,0x62,0x6c,0x65,0x3f,0x18,0x69,0x78,
+0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x41,2,0x6c,0x63,0x74,0x65,0x76,0x67,1,
+0x66,0x43,0x69,0x15,0x6e,0x65,0x66,0x65,0x65,0x64,0x43,0x61,0x40,0x62,0x70,0x63,
+0xa2,0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,0x38,0x11,0x75,0x65,0x39,2,0x69,0x23,
+0x6c,0x34,0x6d,0x16,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x24,0x17,0x70,0x68,
+0x61,0x62,0x65,0x74,0x69,0x63,0x25,4,0x32,0x27,0x61,0x29,0x62,0x2b,0x6b,0x2d,
+0x72,0x12,0x65,0x61,0x6b,2,0x61,0x36,0x62,0x3e,0x73,0x15,0x79,0x6d,0x62,0x6f,
+0x6c,0x73,0x57,0x13,0x66,0x74,0x65,0x72,0x29,1,0x65,0x2a,0x6f,0x11,0x74,0x68,
+0x27,0x13,0x66,0x6f,0x72,0x65,0x2b,7,0x6d,0x51,0x6d,0x33,0x6f,0x28,0x70,0x69,
+0x72,0x35,1,0x6d,0x76,0x6e,1,0x64,0x3c,0x74,0x1a,0x69,0x6e,0x67,0x65,0x6e,
+0x74,0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,0x69,0x74,0x69,0x6f,0x6e,0x61,0x1f,0x6c,
+0x6a,0x61,0x70,0x61,0x6e,0x65,0x73,0x65,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x6b,
+1,0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x51,
+0x18,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x33,0x61,0x6a,0x62,0x2f,0x6a,
+0x6b,0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,1,0x61,0x38,0x75,0x18,0x6e,0x63,0x74,
+0x75,0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,0x72,0x65,0x6e,0x74,0x68,0x65,0x73,0x69,
+0x73,0x69,0x1b,0x72,0x72,0x69,0x61,0x67,0x65,0x72,0x65,0x74,0x75,0x72,0x6e,0x35,
+2,0x62,0x3e,0x6d,0x46,0x78,0x36,0x18,0x63,0x6c,0x61,0x6d,0x61,0x74,0x69,0x6f,
+0x6e,0x37,0x70,0x12,0x61,0x73,0x65,0x71,0x72,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,
+0x72,0x73,1,0x64,0x42,0x6e,1,0x6f,0x32,0x75,0x26,0x14,0x6d,0x65,0x72,0x69,
+0x63,0x27,0x11,0x6e,0x65,0x21,1,0x65,0x2e,0x69,0x24,0x12,0x67,0x69,0x74,0x25,
+0x22,0x14,0x63,0x69,0x6d,0x61,0x6c,0x23,0,0x18,0x6e,0xc4,0x60,0x74,0xc1,0x91,
+0x77,0x96,0x77,0xa2,0x4c,0x78,0xa2,0x70,0x79,0xa2,0x7a,0x7a,6,0x73,0x1e,0x73,
+0x34,0x78,0x42,0x79,0x48,0x7a,0x11,0x7a,0x7a,0xa3,0x67,0x10,0x79,1,0x65,0xa3,
+0xae,0x6d,0xa3,0x81,0x11,0x78,0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x61,0x30,0x69,
+0x58,0x6d,0x11,0x74,0x68,0xa3,0x80,0x10,0x6e,1,0x61,0x26,0x62,0xa3,0xb1,0x1a,
+0x62,0x61,0x7a,0x61,0x72,0x73,0x71,0x75,0x61,0x72,0x65,0xa3,0xb1,0x11,0x6e,0x68,
+0x23,2,0x61,0x30,0x63,0x5a,0x6f,0x11,0x6c,0x65,0xa3,0x9b,1,0x6e,0x3c,0x72,
+0x10,0x61,0xa2,0x92,0x15,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0x92,0x12,0x63,0x68,
+0x6f,0xa3,0xbc,0x11,0x68,0x6f,0xa3,0xbc,1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,
+0x65,0x11,0x65,0x6f,0x9b,1,0x65,0x2c,0x69,0x72,0x11,0x69,0x69,0x73,0x11,0x7a,
+0x69,0xa2,0xc0,0x11,0x64,0x69,0xa3,0xc0,0x74,0x66,0x75,0xa2,0xde,0x76,1,0x61,
+0x48,0x69,1,0x73,0x38,0x74,0x10,0x68,0xa2,0xc5,0x13,0x6b,0x75,0x71,0x69,0xa3,
+0xc5,0x10,0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63,7,0x68,0x3e,
+0x68,0x34,0x69,0x48,0x6e,0x86,0x6f,0x11,0x74,0x6f,0xa3,0xc4,0x10,0x61,1,0x61,
+0x24,0x69,0x6d,0x6a,0x11,0x6e,0x61,0x6b,2,0x62,0x3a,0x66,0x4a,0x72,0x10,0x68,
+0xa2,0x9e,0x12,0x75,0x74,0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74,0x61,
+0x6e,0x6f,0x14,0x69,0x6e,0x61,0x67,0x68,0x99,0x11,0x73,0x61,0xa3,0xc3,0x61,0x36,
+0x65,0xa2,0x65,0x66,0xa2,0x71,0x67,0x11,0x6c,0x67,0x75,6,0x6c,0x28,0x6c,0x32,
+0x6d,0x38,0x6e,0x44,0x76,0x10,0x74,0xa3,0x7f,1,0x65,0x89,0x75,0x97,1,0x69,
+0x24,0x6c,0x67,0x10,0x6c,0x67,0x10,0x67,0xa2,0x9a,1,0x73,0x2a,0x75,0x10,0x74,
+0xa3,0x9a,0x10,0x61,0xa3,0xc3,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,0x10,
+0x69,0xa3,0x99,1,0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,0x6c,
+0x6f,0x67,0x75,2,0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,0x10,
+0x65,0x89,0x12,0x68,0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,0x62,
+0x10,0x75,0x68,0x11,0x67,0x75,0x69,0x11,0x6e,0x67,0x99,1,0x67,0x32,0x6e,0x14,
+0x6b,0x6e,0x6f,0x77,0x6e,0xa3,0x67,0x11,0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,
+0x8b,0x71,0xc1,0x13,0x71,0xa2,0xde,0x72,0xa2,0xe3,0x73,6,0x69,0x8a,0x69,0x72,
+0x6f,0xa2,0x4c,0x75,0xa2,0x75,0x79,1,0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,
+0x5f,0x69,0x2c,0x6a,0xa3,0x60,0x6e,0xa3,0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,
+0x16,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,
+0x64,0xa3,0x91,0x68,0x62,0x12,0x61,0x6c,0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,
+0x61,0x6d,0xa3,0xa6,0x17,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,2,
+0x67,0x3a,0x72,0x52,0x79,0x10,0x6f,0xa2,0xb0,0x12,0x6d,0x62,0x6f,0xa3,0xb0,1,
+0x64,0x26,0x6f,0xa3,0xb8,0xa2,0xb7,0x12,0x69,0x61,0x6e,0xa3,0xb7,0x10,0x61,0xa2,
+0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71,
+0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61,
+0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64,
+0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72,
+0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3,
+0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85,
+0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,1,0x63,0x2f,0x69,0x23,3,0x65,0x3e,
+0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13,
+0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,0x67,0xa3,0x6e,1,0x68,0x2a,0x72,0x10,
+0x6f,0xa3,0x5d,0x10,0x67,0xa3,0xb6,0x6e,0xa2,0x83,0x6f,0xa2,0xf2,0x70,5,0x6c,
+0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b,0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,
+0x61,0x76,0x69,0xa3,0x7b,0x11,0x72,0x64,0xa3,0x5c,0x11,0x74,0x69,0xa3,0x7d,0x61,
+0x7c,0x65,0xa2,0x54,0x68,3,0x61,0x3e,0x6c,0x4e,0x6e,0x5e,0x6f,0x16,0x65,0x6e,
+0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b,0x10,0x67,0xa2,0x5a,0x12,0x73,0x70,0x61,0xa3,
+0x5a,2,0x69,0xa3,0x7a,0x70,0xa3,0x7b,0x76,0xa3,0x7c,0x10,0x78,0xa3,0x5b,2,
+0x68,0x3e,0x6c,0x50,0x75,0x10,0x63,0xa2,0xa5,0x14,0x69,0x6e,0x68,0x61,0x75,0xa3,
+0xa5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0x4b,0x10,0x6d,0xa2,0x90,
+0x14,0x79,0x72,0x65,0x6e,0x65,0xa3,0x90,0x11,0x72,0x6d,0xa3,0x59,6,0x6b,0x36,
+0x6b,0x56,0x73,0x6e,0x75,0x74,0x79,0x11,0x69,0x61,0x1f,0x6b,0x65,0x6e,0x67,0x70,
+0x75,0x61,0x63,0x68,0x75,0x65,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0xba,1,0x67,0x2e,
+0x6f,0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,0x11,0x68,0x75,0xa3,0x96,
+0x12,0x73,0x68,0x75,0xa3,0x96,0x61,0x42,0x62,0x80,0x65,0x10,0x77,1,0x61,0xa3,
+0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0x97,2,0x62,0x2e,0x6e,0x3c,0x72,0x10,
+0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0x8f,0x10,0x64,0xa2,0xbb,
+0x16,0x69,0x6e,0x61,0x67,0x61,0x72,0x69,0xa3,0xbb,0x11,0x61,0x74,0xa3,0x8f,4,
+0x67,0x3c,0x6c,0x4e,0x72,0xa2,0x8e,0x73,0xa2,0x9c,0x75,0x11,0x67,0x72,0xa3,0xc2,
+1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10,0x6d,0x5b,1,0x63,0xa2,0x6a,0x64,
+6,0x70,0x41,0x70,0x3a,0x73,0x58,0x74,0x86,0x75,0x14,0x79,0x67,0x68,0x75,0x72,
+0xa3,0xc2,0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69,0x61,0x6e,0x9b,0x11,0x69,
+0x63,0xa3,0x59,0x10,0x6f,1,0x67,0x3a,0x75,0x18,0x74,0x68,0x61,0x72,0x61,0x62,
+0x69,0x61,0x6e,0xa3,0x85,0x13,0x64,0x69,0x61,0x6e,0xa3,0xb8,0x14,0x75,0x72,0x6b,
+0x69,0x63,0xa3,0x58,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,
+0x61,0x62,0x69,0x61,0x6e,0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,
+0xa3,0x4c,0x14,0x74,0x61,0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3,0x6d,0x12,
+0x69,0x6b,0x69,0xa3,0x6d,2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f,0x11,0x79,
+0x61,0x5f,0x10,0x68,0xa3,0x58,2,0x61,0x36,0x67,0x3c,0x6d,0x10,0x61,0x84,0x12,
+0x6e,0x79,0x61,0x85,0x11,0x67,0x65,0xa3,0xab,0x10,0x65,0xa3,0xab,0x68,0xc3,0xd,
+0x6b,0xc2,0x24,0x6b,0xa4,0x17,0x6c,0xa4,0xb2,0x6d,8,0x6f,0x46,0x6f,0x48,0x72,
+0x74,0x74,0x80,0x75,0x86,0x79,1,0x61,0x28,0x6d,0x10,0x72,0x59,0x13,0x6e,0x6d,
+0x61,0x72,0x59,2,0x64,0x2e,0x6e,0x32,0x6f,0x10,0x6e,0xa3,0x72,0x10,0x69,0xa3,
+0xa3,0x10,0x67,0x56,0x14,0x6f,0x6c,0x69,0x61,0x6e,0x57,0x10,0x6f,0xa2,0x95,0x10,
+0x6f,0xa3,0x95,0x11,0x65,0x69,0xa3,0x73,0x11,0x6c,0x74,0xa2,0xa4,0x12,0x61,0x6e,
+0x69,0xa3,0xa4,0x61,0x36,0x65,0xa2,0x67,0x69,0xa2,0xbd,0x6c,0x11,0x79,0x6d,0x55,
+6,0x6e,0x38,0x6e,0x32,0x72,0x5c,0x73,0x6c,0x79,0x10,0x61,0xa3,0x55,1,0x64,
+0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0x79,0xa2,0x54,0x12,
+0x61,0x69,0x63,0xa3,0x54,0x10,0x63,0xa2,0xa9,0x12,0x68,0x65,0x6e,0xa3,0xa9,0x18,
+0x61,0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa3,0xaf,0x68,0x36,0x6b,0x4c,0x6c,
+0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,1,0x61,0x26,0x6a,0xa3,0xa0,0x13,0x6a,
+0x61,0x6e,0x69,0xa3,0xa0,0x10,0x61,0xa2,0xb4,0x12,0x73,0x61,0x72,0xa3,0xb4,3,
+0x64,0x78,0x65,0x94,0x6e,0xa2,0x42,0x72,1,0x63,0xa3,0x8d,0x6f,0xa2,0x56,0x13,
+0x69,0x74,0x69,0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,
+0x70,0x68,0x73,0xa3,0x56,0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0x8d,1,0x65,
+0x26,0x66,0xa3,0xb5,0x16,0x66,0x61,0x69,0x64,0x72,0x69,0x6e,0xa3,0xb5,0x17,0x74,
+0x65,0x69,0x6d,0x61,0x79,0x65,0x6b,0xa3,0x73,0x10,0x64,0xa2,0x8c,0x17,0x65,0x6b,
+0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0x8c,0x11,0x61,0x6f,0xa3,0x5c,6,0x6e,0x1a,
+0x6e,0x34,0x6f,0x38,0x70,0x3e,0x74,0x11,0x68,0x69,0xa3,0x78,0x11,0x64,0x61,0x4b,
+0x11,0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3,0x8a,0x61,0x30,0x68,0x9a,0x69,0x11,
+0x74,0x73,0xa3,0xbf,4,0x69,0x3c,0x6c,0x44,0x6e,0x48,0x74,0x56,0x79,0x13,0x61,
+0x68,0x6c,0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3,0x78,0x10,0x69,0xa3,0x4f,1,
+0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61,0x6b,0x61,0x6e,0x61,0x4c,0x19,
+0x6f,0x72,0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61,0x8d,4,0x61,0x40,0x69,0x52,
+0x6d,0x70,0x6f,0x7c,0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0x91,0x10,0x72,
+0x92,0x15,0x6f,0x73,0x68,0x74,0x68,0x69,0x93,0x1d,0x74,0x61,0x6e,0x73,0x6d,0x61,
+0x6c,0x6c,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xbf,1,0x65,0x24,0x72,0x4f,0x10,
+0x72,0x4f,0x10,0x6a,0xa2,0x9d,0x11,0x6b,0x69,0xa3,0x9d,4,0x61,0x5c,0x65,0x90,
+0x69,0xa0,0x6f,0xa2,0x5d,0x79,1,0x63,0x34,0x64,0x10,0x69,0xa2,0x6c,0x11,0x61,
+0x6e,0xa3,0x6c,0x10,0x69,0xa2,0x6b,0x11,0x61,0x6e,0xa3,0x6b,2,0x6e,0x42,0x6f,
+0x46,0x74,3,0x66,0xa3,0x50,0x67,0xa3,0x51,0x69,0x24,0x6e,0x53,0x10,0x6e,0x53,
+0x10,0x61,0xa3,0x6a,0x50,0x10,0x6f,0x51,0x11,0x70,0x63,0xa2,0x52,0x11,0x68,0x61,
+0xa3,0x52,2,0x6d,0x2e,0x6e,0x36,0x73,0x10,0x75,0xa3,0x83,0x10,0x62,0x80,0x10,
+0x75,0x81,2,0x61,0xa3,0x53,0x62,0x83,0x65,0x11,0x61,0x72,1,0x61,0xa3,0x53,
+0x62,0x83,0x11,0x6d,0x61,0xa3,0x8b,0x68,0x6e,0x69,0xa2,0x95,0x6a,2,0x61,0x30,
+0x70,0x52,0x75,0x11,0x72,0x63,0xa3,0x94,1,0x6d,0x38,0x76,0x10,0x61,0xa2,0x4e,
+0x13,0x6e,0x65,0x73,0x65,0xa3,0x4e,0x10,0x6f,0xa3,0xad,0x11,0x61,0x6e,0xa3,0x69,
+6,0x6c,0x1e,0x6c,0x34,0x6d,0x3a,0x72,0x48,0x75,0x11,0x6e,0x67,0xa3,0x4c,0x11,
+0x75,0x77,0xa3,0x9c,0x10,0x6e,1,0x67,0xa3,0x4b,0x70,0xa3,0xba,0x11,0x6b,0x74,
+0x8d,0x61,0x3c,0x65,0xa2,0x43,0x69,0x11,0x72,0x61,0x48,0x13,0x67,0x61,0x6e,0x61,
+0x49,1,0x6e,0x34,0x74,0x10,0x72,0xa2,0xa2,0x11,0x61,0x6e,0xa3,0xa2,0x42,6,
+0x6f,0xe,0x6f,0x77,0x73,0xa3,0x49,0x74,0xa3,0x4a,0x75,0x12,0x6e,0x6f,0x6f,0x77,
+0x62,0xa3,0xac,0x67,0x3e,0x69,0x42,0x19,0x66,0x69,0x72,0x6f,0x68,0x69,0x6e,0x67,
+0x79,0x61,0xa3,0xb6,0x44,0x11,0x75,0x6c,0x45,0x11,0x62,0x72,0x46,0x11,0x65,0x77,
+0x47,2,0x6d,0x2e,0x6e,0x4a,0x74,0x11,0x61,0x6c,0x5d,0x1c,0x70,0x65,0x72,0x69,
+0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0x74,2,0x64,0x66,0x68,0x6a,
+0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1,0x68,
+0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0x7d,0x13,0x6c,0x61,0x76,0x69,0xa3,
+0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,0x74,0x65,0x64,0x23,0x64,0xc1,0xd,
+0x64,0xa2,0x7a,0x65,0xa2,0xc1,0x67,4,0x65,0x82,0x6c,0x9a,0x6f,0xa2,0x46,0x72,
+0xa2,0x55,0x75,2,0x6a,0x3c,0x6e,0x4e,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,
+0x6b,0x68,0x69,0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,0x18,
+0x6a,0x61,0x6c,0x61,0x67,0x6f,0x6e,0x64,0x69,0xa3,0xb3,0x10,0x6f,1,0x6b,0xa3,
+0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,0x61,0x67,0x90,0x15,0x6f,0x6c,
+0x69,0x74,0x69,0x63,0x91,1,0x6e,0x30,0x74,0x10,0x68,0x3a,0x11,0x69,0x63,0x3b,
+1,0x67,0xa3,0xb3,0x6d,0xa3,0xaf,1,0x61,0x32,0x65,1,0x65,0x24,0x6b,0x3d,
+0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89,0x12,0x74,0x68,0x61,0xa3,0x89,4,0x65,0x46,
+0x69,0x6c,0x6f,0x8c,0x73,0x9a,0x75,0x11,0x70,0x6c,0xa2,0x87,0x13,0x6f,0x79,0x61,
+0x6e,0xa3,0x87,1,0x73,0x38,0x76,0x10,0x61,0x34,0x15,0x6e,0x61,0x67,0x61,0x72,
+0x69,0x35,0x13,0x65,0x72,0x65,0x74,0x33,1,0x61,0x36,0x76,0x16,0x65,0x73,0x61,
+0x6b,0x75,0x72,0x75,0xa3,0xbe,0x10,0x6b,0xa3,0xbe,0x11,0x67,0x72,0xa2,0xb2,0x10,
+0x61,0xa3,0xb2,0x11,0x72,0x74,0x33,2,0x67,0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,
+0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10,0x79,2,0x64,0xa3,0x45,0x68,0xa3,0x46,
+0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,
+0x70,0x68,0x73,0xa3,0x47,1,0x62,0x36,0x79,0x10,0x6d,0xa2,0xb9,0x12,0x61,0x69,
+0x63,0xa3,0xb9,0x10,0x61,0xa2,0x88,0x12,0x73,0x61,0x6e,0xa3,0x88,0x61,0xa2,0xc9,
+0x62,0xa4,0x2e,0x63,6,0x6f,0x52,0x6f,0x76,0x70,0x92,0x75,0xa2,0x41,0x79,1,
+0x70,0x3e,0x72,2,0x69,0x2a,0x6c,0x31,0x73,0xa3,0x44,0x13,0x6c,0x6c,0x69,0x63,
+0x31,0x10,0x72,1,0x69,0x34,0x6f,0x15,0x6d,0x69,0x6e,0x6f,0x61,0x6e,0xa3,0xc1,
+0x11,0x6f,0x74,0x7f,1,0x6d,0x30,0x70,0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,
+0x6d,0x6f,0x6e,0x21,1,0x6d,0x28,0x72,0x10,0x74,0x7f,0x10,0x6e,0xa3,0xc1,0x16,
+0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3,0x65,0x61,0x32,0x68,0xa2,0x41,0x69,0x11,
+0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e,0x50,0x72,0x76,0x75,0x1d,0x63,0x61,0x73,
+0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0x9f,0x10,0x6d,0xa3,
+0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x72,0x69,
+0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69,0xa2,0x68,0x11,0x61,0x6e,0xa3,0x68,3,
+0x61,0x32,0x65,0x44,0x6f,0x52,0x72,0x10,0x73,0xa3,0xbd,1,0x6b,0x26,0x6d,0xa3,
+0x42,0x11,0x6d,0x61,0xa3,0x76,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65,0x65,0x2d,0x16,
+0x72,0x61,0x73,0x6d,0x69,0x61,0x6e,0xa3,0xbd,6,0x68,0x4a,0x68,0x48,0x6e,0x4e,
+0x72,0x76,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13,0x73,0x74,0x61,0x6e,
+0xa3,0x75,0x11,0x6f,0x6d,0xa3,0xa1,0x11,0x61,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,
+0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x9c,1,0x61,0x3e,
+0x6d,2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69,0x61,0x6e,0x27,0x10,
+0x62,0x24,0x11,0x69,0x63,0x25,0x64,0x30,0x66,0x44,0x67,0x11,0x68,0x62,0xa3,0x9f,
+0x10,0x6c,1,0x61,0x26,0x6d,0xa3,0xa7,0x10,0x6d,0xa3,0xa7,0x11,0x61,0x6b,0xa3,
+0x93,6,0x6c,0x3c,0x6c,0x52,0x6f,0x56,0x72,0x66,0x75,1,0x67,0x30,0x68,1,
+0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13,0x6e,0x65,0x73,0x65,0x8f,0x11,
+0x69,0x73,0xa1,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f,0x2b,0x10,0x61,1,
+0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11,0x6d,0x69,0xa3,0x41,
+0x61,0x48,0x65,0x9c,0x68,1,0x61,0x2a,0x6b,0x10,0x73,0xa3,0xa8,0x15,0x69,0x6b,
+0x73,0x75,0x6b,0x69,0xa3,0xa8,3,0x6c,0x3a,0x6d,0x48,0x73,0x54,0x74,1,0x61,
+0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e,0x65,0x73,0x65,0x9d,0x10,
+0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86,0x13,0x61,0x76,0x61,0x68,
+0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3,0x6c,0x42,0x6e,0x90,
+0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61,0x6d,0x6f,0x25,0x22,
+1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73,0x79,0x6c,0x6c,0x61,
+0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x29,0x18,0x61,0x64,
+0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f,0x1a,0x74,0x61,0x70,
+0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72,0x61,0x69,0x6c,0x69,
+0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,
+0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,0x20,0x10,0x6f,
+0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,
+0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,
+0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,0xb,0x72,0x39,
+0x76,0xc,0x76,0x33,0x78,0x2a,0x7a,0x11,0x77,0x6a,0x43,0x10,0x78,0x21,0x72,0x28,
+0x73,0x50,0x74,0x31,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,
+0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d,0x35,0x70,0x18,0x61,
+0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x35,0x6c,0x1f,0x6c,0x3c,0x6f,0x4a,0x70,
+1,0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,0x28,1,0x66,0x2b,0x76,
+0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21,0x63,0x4c,0x65,0x64,0x67,1,
+0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,0x77,0x6a,0x41,0x10,
+0x7a,0x41,2,0x6e,0x23,0x6f,0x24,0x72,0x25,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x23,
+2,0x62,0x34,0x6d,0x4e,0x78,0x26,0x13,0x74,0x65,0x6e,0x64,0x27,0x3a,1,0x61,
+0x24,0x67,0x3d,0x11,0x73,0x65,0x3a,0x12,0x67,0x61,0x7a,0x3d,0x3e,0x16,0x6f,0x64,
+0x69,0x66,0x69,0x65,0x72,0x3f,9,0x6e,0x4a,0x6e,0x34,0x6f,0x44,0x73,0x60,0x75,
+0x94,0x78,0x10,0x78,0x21,0x10,0x75,0x2a,0x14,0x6d,0x65,0x72,0x69,0x63,0x2b,1,
+0x6c,0x2c,0x74,0x12,0x68,0x65,0x72,0x21,0x14,0x65,0x74,0x74,0x65,0x72,0x2d,3,
+0x63,0x36,0x65,0x46,0x70,0x31,0x74,0x32,0x12,0x65,0x72,0x6d,0x33,0x3c,0x16,0x6f,
+0x6e,0x74,0x69,0x6e,0x75,0x65,0x3d,0x2e,0x10,0x70,0x2f,0x10,0x70,0x34,0x12,0x70,
+0x65,0x72,0x35,0x61,0x46,0x63,0x52,0x65,0x64,0x66,0x72,0x6c,2,0x65,0x2d,0x66,
+0x3b,0x6f,0x28,0x12,0x77,0x65,0x72,0x29,0x10,0x74,0x22,0x12,0x65,0x72,0x6d,0x23,
+1,0x6c,0x24,0x72,0x37,0x24,0x12,0x6f,0x73,0x65,0x25,0x10,0x78,0x38,0x13,0x74,
+0x65,0x6e,0x64,0x39,0x10,0x6f,0x26,0x13,0x72,0x6d,0x61,0x74,0x27,0,0x10,0x6c,
+0x88,0x72,0x40,0x72,0x36,0x73,0x5e,0x77,0x7a,0x78,0x8a,0x7a,0x11,0x77,0x6a,0x4b,
+1,0x65,0x24,0x69,0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,
+0x63,0x61,0x74,0x6f,0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c,0x65,
+0x71,0x75,0x6f,0x74,0x65,0x3f,0x17,0x73,0x65,0x67,0x73,0x70,0x61,0x63,0x65,0x4d,
+0x10,0x78,0x21,0x6c,0x36,0x6d,0x3c,0x6e,0x76,0x6f,0x13,0x74,0x68,0x65,0x72,0x21,
+1,0x65,0x23,0x66,0x35,3,0x62,0x37,0x69,0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,
+1,0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,0x12,0x6c,0x65,0x74,0x37,0x14,0x65,0x74,
+0x74,0x65,0x72,0x29,2,0x65,0x36,0x6c,0x39,0x75,0x2c,0x14,0x6d,0x65,0x72,0x69,
+0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,0x66,0x3f,0x66,0x40,0x67,0x4e,0x68,
+0x70,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b,0x61,0x6e,0x61,0x27,0x10,0x6f,0x24,
+0x13,0x72,0x6d,0x61,0x74,0x25,1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,
+0x65,0x72,0x7a,0x77,0x6a,0x49,0x10,0x7a,0x49,1,0x65,0x24,0x6c,0x3d,0x19,0x62,
+0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,0x61,0x86,0x63,0x92,0x64,0x94,
+0x65,2,0x62,0x44,0x6d,0x5e,0x78,0x2e,0x13,0x74,0x65,0x6e,0x64,0x32,0x15,0x6e,
+0x75,0x6d,0x6c,0x65,0x74,0x2f,0x42,1,0x61,0x24,0x67,0x45,0x11,0x73,0x65,0x42,
+0x12,0x67,0x61,0x7a,0x45,0x46,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x47,0x15,
+0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,0x31,1,0x6f,0x24,0x71,0x41,0x18,
+0x75,0x62,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65,0x41,2,0x63,0x32,0x6e,0x3c,0x6f,
+0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c,0x6f,0x73,0x65,0x25,0x20,0x12,0x6f,
+0x6e,0x65,0x21,6,0x6f,0x65,0x6f,0x4a,0x72,0x5c,0x74,0x64,0x76,0x1d,0x69,0x73,
+0x75,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x6c,0x65,0x66,0x74,0x3d,0x18,0x76,0x65,
+0x72,0x73,0x74,0x72,0x75,0x63,0x6b,0x2d,0x13,0x69,0x67,0x68,0x74,0x2f,0x11,0x6f,
+0x70,0x30,0x12,0x61,0x6e,0x64,2,0x62,0x32,0x6c,0x62,0x72,0x13,0x69,0x67,0x68,
+0x74,0x3b,0x14,0x6f,0x74,0x74,0x6f,0x6d,0x32,0x12,0x61,0x6e,0x64,1,0x6c,0x2e,
+0x72,0x13,0x69,0x67,0x68,0x74,0x35,0x12,0x65,0x66,0x74,0x3f,0x12,0x65,0x66,0x74,
+0x36,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,0x68,0x74,0x39,0x62,0x2c,0x6c,0x5c,0x6e,
+0x10,0x61,0x21,0x14,0x6f,0x74,0x74,0x6f,0x6d,0x22,0x12,0x61,0x6e,0x64,1,0x6c,
+0x2e,0x72,0x13,0x69,0x67,0x68,0x74,0x27,0x12,0x65,0x66,0x74,0x25,0x12,0x65,0x66,
+0x74,0x28,0x17,0x61,0x6e,0x64,0x72,0x69,0x67,0x68,0x74,0x2b,0xd,0x6e,0xaa,0x72,
+0x70,0x72,0x92,0x73,0xa2,0x46,0x74,0xa2,0x54,0x76,1,0x69,0x60,0x6f,0x12,0x77,
+0x65,0x6c,0x62,1,0x64,0x3a,0x69,0x19,0x6e,0x64,0x65,0x70,0x65,0x6e,0x64,0x65,
+0x6e,0x74,0x67,0x17,0x65,0x70,0x65,0x6e,0x64,0x65,0x6e,0x74,0x65,1,0x72,0x2e,
+0x73,0x13,0x61,0x72,0x67,0x61,0x61,0x12,0x61,0x6d,0x61,0x5f,0x1d,0x65,0x67,0x69,
+0x73,0x74,0x65,0x72,0x73,0x68,0x69,0x66,0x74,0x65,0x72,0x57,0x1e,0x79,0x6c,0x6c,
+0x61,0x62,0x6c,0x65,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x59,0x12,0x6f,0x6e,
+0x65,1,0x6c,0x2c,0x6d,0x12,0x61,0x72,0x6b,0x5d,0x14,0x65,0x74,0x74,0x65,0x72,
+0x5b,0x6e,0x3c,0x6f,0x7c,0x70,0x18,0x75,0x72,0x65,0x6b,0x69,0x6c,0x6c,0x65,0x72,
+0x55,1,0x6f,0x4c,0x75,1,0x6b,0x3c,0x6d,0x12,0x62,0x65,0x72,0x50,0x15,0x6a,
+0x6f,0x69,0x6e,0x65,0x72,0x53,0x11,0x74,0x61,0x4f,0x16,0x6e,0x6a,0x6f,0x69,0x6e,
+0x65,0x72,0x4d,0x13,0x74,0x68,0x65,0x72,0x21,0x67,0x3e,0x67,0x4a,0x69,0x64,0x6a,
+0x82,0x6d,0x1d,0x6f,0x64,0x69,0x66,0x79,0x69,0x6e,0x67,0x6c,0x65,0x74,0x74,0x65,
+0x72,0x4b,0x1c,0x65,0x6d,0x69,0x6e,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,
+0x45,0x1e,0x6e,0x76,0x69,0x73,0x69,0x62,0x6c,0x65,0x73,0x74,0x61,0x63,0x6b,0x65,
+0x72,0x47,0x14,0x6f,0x69,0x6e,0x65,0x72,0x49,0x61,0xa2,0xba,0x62,0xa2,0xc0,0x63,
+1,0x61,0xa2,0xa2,0x6f,0x16,0x6e,0x73,0x6f,0x6e,0x61,0x6e,0x74,0x2a,8,0x6b,
+0x67,0x6b,0x48,0x6d,0x52,0x70,0x5c,0x73,0xa2,0x42,0x77,0x19,0x69,0x74,0x68,0x73,
+0x74,0x61,0x63,0x6b,0x65,0x72,0x43,0x14,0x69,0x6c,0x6c,0x65,0x72,0x35,0x14,0x65,
+0x64,0x69,0x61,0x6c,0x37,1,0x6c,0x52,0x72,0x10,0x65,1,0x63,0x2e,0x66,0x13,
+0x69,0x78,0x65,0x64,0x3d,0x19,0x65,0x64,0x69,0x6e,0x67,0x72,0x65,0x70,0x68,0x61,
+0x3b,0x18,0x61,0x63,0x65,0x68,0x6f,0x6c,0x64,0x65,0x72,0x39,0x10,0x75,1,0x62,
+0x3e,0x63,0x1b,0x63,0x65,0x65,0x64,0x69,0x6e,0x67,0x72,0x65,0x70,0x68,0x61,0x41,
+0x15,0x6a,0x6f,0x69,0x6e,0x65,0x64,0x3f,0x64,0x4c,0x66,0x52,0x68,0x5a,0x69,0x1e,
+0x6e,0x69,0x74,0x69,0x61,0x6c,0x70,0x6f,0x73,0x74,0x66,0x69,0x78,0x65,0x64,0x33,
+0x12,0x65,0x61,0x64,0x2d,0x13,0x69,0x6e,0x61,0x6c,0x2f,0x18,0x65,0x61,0x64,0x6c,
+0x65,0x74,0x74,0x65,0x72,0x31,0x1d,0x6e,0x74,0x69,0x6c,0x6c,0x61,0x74,0x69,0x6f,
+0x6e,0x6d,0x61,0x72,0x6b,0x29,0x16,0x76,0x61,0x67,0x72,0x61,0x68,0x61,0x23,1,
+0x69,0x4a,0x72,0x10,0x61,0x1f,0x68,0x6d,0x69,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,
+0x6e,0x75,0x6d,0x62,0x65,0x72,0x27,0x12,0x6e,0x64,0x75,0x25,2,0x72,0x38,0x74,
+0x46,0x75,0x26,0x15,0x70,0x72,0x69,0x67,0x68,0x74,0x27,0x20,0x15,0x6f,0x74,0x61,
+0x74,0x65,0x64,0x21,1,0x72,0x24,0x75,0x25,0x22,0x18,0x61,0x6e,0x73,0x66,0x6f,
+0x72,0x6d,0x65,0x64,1,0x72,0x32,0x75,0x15,0x70,0x72,0x69,0x67,0x68,0x74,0x25,
+0x15,0x6f,0x74,0x61,0x74,0x65,0x64,0x23,0xd,0x6e,0xc1,0x86,0x73,0xa8,0x73,0x4c,
+0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20,0,0x70,
+0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c,0x6f,0xff,
+8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c,0xff,0xf,
+0,0,0,0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72,
+0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3,0,0x16,
+0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0,0,0,
+0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,0xff,1,0,0,0,0x16,0x70,
+0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,
+0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c,0x70,0x65,
+0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61,0x73,0x73,
+0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe,0x30,0xf8,
+0,0,9,0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80,0,0,
+0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8,0,0,
+0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69,0x76,0x61,
+0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0,0,0x64,
+0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0,0x1f,0x72,
+0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,
+0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75,0x13,0x6d,
+0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,
+0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6,0x80,1,
+3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,8,
+0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62,0x65,0x72,
+0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x80,0,
+0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xf9,
+0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79,0x6d,0xa4,
+0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15,0x64,0x69,
+0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,4,
+0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74,0x16,0x68,
+0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5,0xc0,1,
+0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61,0x6c,0x70,
+0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0,0,0x10,
+0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
+0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f,0x28,0x74,
+0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,
+0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74,0x65,0x72,
+0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73,0x65,0x70,
+0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96,0x65,0x1b,
+0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80,0xe6,0x80,
+1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b,0x72,0x72,
+0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0,0,0x22,
+0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e,1,0x6e,
+0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,
+0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0,0x19,0x62,
+0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63,0xd9,0x80,
+0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,
+0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c,0x65,0x74,
+0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74,0xa7,0,
+0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xe9,0,
+0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7,0
};
-const char PropNameData::nameGroups[22098]={
+const char PropNameData::nameGroups[22855]={
2,'A','l','p','h','a',0,'A','l','p','h','a','b','e','t','i','c',0,
4,'N',0,'N','o',0,'F',0,'F','a','l','s','e',0,4,'Y',0,'Y','e','s',0,'T',0,'T','r','u','e',0,
2,'N','R',0,'N','o','t','_','R','e','o','r','d','e','r','e','d',0,
@@ -1138,8 +1159,18 @@ const char PropNameData::nameGroups[22098]={
2,'R','I',0,'R','e','g','i','o','n','a','l','_','I','n','d','i','c','a','t','o','r',0,
2,'P','C','M',0,'P','r','e','p','e','n','d','e','d','_','C','o','n','c','a','t','e','n','a','t','i','o','n','_','M','a','r',
'k',0,2,'E','x','t','P','i','c','t',0,'E','x','t','e','n','d','e','d','_','P','i','c','t','o','g','r','a','p','h','i','c',
-0,2,'b','c',0,'B','i','d','i','_','C','l','a','s','s',0,
-2,'L',0,'L','e','f','t','_','T','o','_','R','i','g','h','t',0,
+0,2,'B','a','s','i','c','_','E','m','o','j','i',0,'B','a','s','i','c','_','E','m','o','j','i',0,
+2,'E','m','o','j','i','_','K','e','y','c','a','p','_','S','e','q','u','e','n','c','e',0,'E','m','o','j','i','_','K','e','y',
+'c','a','p','_','S','e','q','u','e','n','c','e',0,2,'R','G','I','_','E','m','o','j','i','_','M','o','d','i','f','i','e','r',
+'_','S','e','q','u','e','n','c','e',0,'R','G','I','_','E','m','o','j','i','_','M','o','d','i','f','i','e','r','_','S','e','q',
+'u','e','n','c','e',0,2,'R','G','I','_','E','m','o','j','i','_','F','l','a','g','_','S','e','q','u','e','n','c','e',0,
+'R','G','I','_','E','m','o','j','i','_','F','l','a','g','_','S','e','q','u','e','n','c','e',0,
+2,'R','G','I','_','E','m','o','j','i','_','T','a','g','_','S','e','q','u','e','n','c','e',0,
+'R','G','I','_','E','m','o','j','i','_','T','a','g','_','S','e','q','u','e','n','c','e',0,
+2,'R','G','I','_','E','m','o','j','i','_','Z','W','J','_','S','e','q','u','e','n','c','e',0,
+'R','G','I','_','E','m','o','j','i','_','Z','W','J','_','S','e','q','u','e','n','c','e',0,
+2,'R','G','I','_','E','m','o','j','i',0,'R','G','I','_','E','m','o','j','i',0,
+2,'b','c',0,'B','i','d','i','_','C','l','a','s','s',0,2,'L',0,'L','e','f','t','_','T','o','_','R','i','g','h','t',0,
2,'R',0,'R','i','g','h','t','_','T','o','_','L','e','f','t',0,
2,'E','N',0,'E','u','r','o','p','e','a','n','_','N','u','m','b','e','r',0,
2,'E','S',0,'E','u','r','o','p','e','a','n','_','S','e','p','a','r','a','t','o','r',0,
@@ -1509,9 +1540,22 @@ const char PropNameData::nameGroups[22098]={
'n','t',0,2,'S','y','m','b','o','l','s','_','F','o','r','_','L','e','g','a','c','y','_','C','o','m','p','u','t','i','n','g',
0,'S','y','m','b','o','l','s','_','F','o','r','_','L','e','g','a','c','y','_','C','o','m','p','u','t','i','n','g',0,
2,'T','a','n','g','u','t','_','S','u','p',0,'T','a','n','g','u','t','_','S','u','p','p','l','e','m','e','n','t',0,
-2,'Y','e','z','i','d','i',0,'Y','e','z','i','d','i',0,2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o',
-'m','b','i','n','i','n','g','_','C','l','a','s','s',0,2,'d','t',0,'D','e','c','o','m','p','o','s','i','t','i','o','n','_',
-'T','y','p','e',0,3,'N','o','n','e',0,'N','o','n','e',0,'n','o','n','e',0,
+2,'Y','e','z','i','d','i',0,'Y','e','z','i','d','i',0,2,'A','r','a','b','i','c','_','E','x','t','_','B',0,
+'A','r','a','b','i','c','_','E','x','t','e','n','d','e','d','_','B',0,
+2,'C','y','p','r','o','_','M','i','n','o','a','n',0,'C','y','p','r','o','_','M','i','n','o','a','n',0,
+2,'E','t','h','i','o','p','i','c','_','E','x','t','_','B',0,'E','t','h','i','o','p','i','c','_','E','x','t','e','n','d','e',
+'d','_','B',0,2,'K','a','n','a','_','E','x','t','_','B',0,'K','a','n','a','_','E','x','t','e','n','d','e','d','_','B',0,
+2,'L','a','t','i','n','_','E','x','t','_','F',0,'L','a','t','i','n','_','E','x','t','e','n','d','e','d','_','F',0,
+2,'L','a','t','i','n','_','E','x','t','_','G',0,'L','a','t','i','n','_','E','x','t','e','n','d','e','d','_','G',0,
+2,'O','l','d','_','U','y','g','h','u','r',0,'O','l','d','_','U','y','g','h','u','r',0,
+2,'T','a','n','g','s','a',0,'T','a','n','g','s','a',0,2,'T','o','t','o',0,'T','o','t','o',0,
+2,'U','C','A','S','_','E','x','t','_','A',0,'U','n','i','f','i','e','d','_','C','a','n','a','d','i','a','n','_','A','b','o',
+'r','i','g','i','n','a','l','_','S','y','l','l','a','b','i','c','s','_','E','x','t','e','n','d','e','d','_','A',0,
+2,'V','i','t','h','k','u','q','i',0,'V','i','t','h','k','u','q','i',0,
+2,'Z','n','a','m','e','n','n','y','_','M','u','s','i','c',0,'Z','n','a','m','e','n','n','y','_','M','u','s','i','c','a','l',
+'_','N','o','t','a','t','i','o','n',0,2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o','m','b','i','n','i',
+'n','g','_','C','l','a','s','s',0,2,'d','t',0,'D','e','c','o','m','p','o','s','i','t','i','o','n','_','T','y','p','e',0,
+3,'N','o','n','e',0,'N','o','n','e',0,'n','o','n','e',0,
3,'C','a','n',0,'C','a','n','o','n','i','c','a','l',0,'c','a','n',0,
3,'C','o','m',0,'C','o','m','p','a','t',0,'c','o','m',0,
3,'E','n','c',0,'C','i','r','c','l','e',0,'e','n','c',0,
@@ -1644,7 +1688,9 @@ const char PropNameData::nameGroups[22098]={
2,'H','a','n','i','f','i','_','R','o','h','i','n','g','y','a','_','K','i','n','n','a','_','Y','a',0,
'H','a','n','i','f','i','_','R','o','h','i','n','g','y','a','_','K','i','n','n','a','_','Y','a',0,
2,'H','a','n','i','f','i','_','R','o','h','i','n','g','y','a','_','P','a',0,'H','a','n','i','f','i','_','R','o','h','i','n',
-'g','y','a','_','P','a',0,2,'j','t',0,'J','o','i','n','i','n','g','_','T','y','p','e',0,
+'g','y','a','_','P','a',0,2,'T','h','i','n','_','Y','e','h',0,'T','h','i','n','_','Y','e','h',0,
+2,'V','e','r','t','i','c','a','l','_','T','a','i','l',0,'V','e','r','t','i','c','a','l','_','T','a','i','l',0,
+2,'j','t',0,'J','o','i','n','i','n','g','_','T','y','p','e',0,
2,'U',0,'N','o','n','_','J','o','i','n','i','n','g',0,2,'C',0,'J','o','i','n','_','C','a','u','s','i','n','g',0,
2,'D',0,'D','u','a','l','_','J','o','i','n','i','n','g',0,
2,'L',0,'L','e','f','t','_','J','o','i','n','i','n','g',0,
@@ -1795,8 +1841,11 @@ const char PropNameData::nameGroups[22098]={
2,'W','c','h','o',0,'W','a','n','c','h','o',0,2,'C','h','r','s',0,'C','h','o','r','a','s','m','i','a','n',0,
2,'D','i','a','k',0,'D','i','v','e','s','_','A','k','u','r','u',0,
2,'K','i','t','s',0,'K','h','i','t','a','n','_','S','m','a','l','l','_','S','c','r','i','p','t',0,
-2,'Y','e','z','i',0,'Y','e','z','i','d','i',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l',
-'e','_','T','y','p','e',0,2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0,
+2,'Y','e','z','i',0,'Y','e','z','i','d','i',0,2,'C','p','m','n',0,'C','y','p','r','o','_','M','i','n','o','a','n',0,
+2,'O','u','g','r',0,'O','l','d','_','U','y','g','h','u','r',0,
+2,'T','n','s','a',0,'T','a','n','g','s','a',0,2,'V','i','t','h',0,'V','i','t','h','k','u','q','i',0,
+2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l','e','_','T','y','p','e',0,
+2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0,
2,'L',0,'L','e','a','d','i','n','g','_','J','a','m','o',0,
2,'V',0,'V','o','w','e','l','_','J','a','m','o',0,2,'T',0,'T','r','a','i','l','i','n','g','_','J','a','m','o',0,
2,'L','V',0,'L','V','_','S','y','l','l','a','b','l','e',0,
diff --git a/Build/source/libs/icu/icu-src/source/common/putil.cpp b/Build/source/libs/icu/icu-src/source/common/putil.cpp
index e2681ca0051..68be079b3a3 100644
--- a/Build/source/libs/icu/icu-src/source/common/putil.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/putil.cpp
@@ -727,8 +727,10 @@ static char *gTimeZoneBufferPtr = NULL;
#if !U_PLATFORM_USES_ONLY_WIN32_API
#define isNonDigit(ch) (ch < '0' || '9' < ch)
+#define isDigit(ch) ('0' <= ch && ch <= '9')
static UBool isValidOlsonID(const char *id) {
int32_t idx = 0;
+ int32_t idxMax = 0;
/* Determine if this is something like Iceland (Olson ID)
or AST4ADT (non-Olson ID) */
@@ -736,6 +738,13 @@ static UBool isValidOlsonID(const char *id) {
idx++;
}
+ /* Allow at maximum 2 numbers at the end of the id to support zone id's
+ like GMT+11. */
+ idxMax = idx + 2;
+ while (id[idx] && isDigit(id[idx]) && idx < idxMax) {
+ idx++;
+ }
+
/* If we went through the whole string, then it might be okay.
The timezone is sometimes set to "CST-7CDT", "CST6CDT5,J129,J131/19:30",
"GRNLNDST3GRNLNDDT" or similar, so we cannot use it.
@@ -918,7 +927,7 @@ static UBool compareBinaryFiles(const char* defaultTZFileName, const char* TZFil
if (sizeFile != tzInfo->defaultTZFileSize) {
result = FALSE;
} else {
- /* Store the data from the files in seperate buffers and
+ /* Store the data from the files in separate buffers and
* compare each byte to determine equality.
*/
if (tzInfo->defaultTZBuffer == NULL) {
@@ -1139,7 +1148,7 @@ uprv_tzname(int n)
#endif
if (tzid != NULL && isValidOlsonID(tzid)
#if U_PLATFORM == U_PF_SOLARIS
- /* When TZ equals localtime on Solaris, check the /etc/localtime file. */
+ /* Don't misinterpret TZ "localtime" on Solaris as a time zone name. */
&& uprv_strcmp(tzid, TZ_ENV_CHECK) != 0
#endif
) {
diff --git a/Build/source/libs/icu/icu-src/source/common/putilimp.h b/Build/source/libs/icu/icu-src/source/common/putilimp.h
index a325c6c359a..5b95a68418c 100644
--- a/Build/source/libs/icu/icu-src/source/common/putilimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/putilimp.h
@@ -527,7 +527,7 @@ U_CAPI void * U_EXPORT2 uprv_maximumPtr(void *base);
* on the destination pointer and capacity cannot overflow.
*
* The pinned capacity must fulfill the following conditions (for positive capacities):
- * - dest + capacity is a valid pointer according to the machine arcitecture (AS/400, 64-bit, etc.)
+ * - dest + capacity is a valid pointer according to the machine architecture (AS/400, 64-bit, etc.)
* - (dest + capacity) >= dest
* - The size (in bytes) of T[capacity] does not exceed 0x7fffffff
*
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbi.cpp b/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
index 9b7e70c3cf4..f65177f2323 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
@@ -262,7 +262,7 @@ RuleBasedBreakIterator::operator=(const RuleBasedBreakIterator& that) {
fCharIter = &fSCharIter;
if (that.fCharIter != NULL && that.fCharIter != &that.fSCharIter) {
- // This is a little bit tricky - it will intially appear that
+ // This is a little bit tricky - it will initially appear that
// this->fCharIter is adopted, even if that->fCharIter was
// not adopted. That's ok.
fCharIter = that.fCharIter->clone();
@@ -366,16 +366,16 @@ RuleBasedBreakIterator::clone() const {
}
/**
- * Equality operator. Returns TRUE if both BreakIterators are of the
+ * Equality operator. Returns true if both BreakIterators are of the
* same class, have the same behavior, and iterate over the same text.
*/
-UBool
+bool
RuleBasedBreakIterator::operator==(const BreakIterator& that) const {
if (typeid(*this) != typeid(that)) {
- return FALSE;
+ return false;
}
if (this == &that) {
- return TRUE;
+ return true;
}
// The base class BreakIterator carries no state that participates in equality,
@@ -388,21 +388,21 @@ RuleBasedBreakIterator::operator==(const BreakIterator& that) const {
// The two break iterators are operating on different text,
// or have a different iteration position.
// Note that fText's position is always the same as the break iterator's position.
- return FALSE;
+ return false;
}
if (!(fPosition == that2.fPosition &&
fRuleStatusIndex == that2.fRuleStatusIndex &&
fDone == that2.fDone)) {
- return FALSE;
+ return false;
}
if (that2.fData == fData ||
(fData != NULL && that2.fData != NULL && *that2.fData == *fData)) {
// The two break iterators are using the same rules.
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
/**
@@ -671,7 +671,7 @@ int32_t RuleBasedBreakIterator::preceding(int32_t offset) {
}
/**
- * Returns true if the specfied position is a boundary position. As a side
+ * Returns true if the specified position is a boundary position. As a side
* effect, leaves the iterator pointing to the first boundary position at
* or after "offset".
*
@@ -812,7 +812,7 @@ int32_t RuleBasedBreakIterator::handleNext() {
}
#endif
- // handleNext alway sets the break tag value.
+ // handleNext always sets the break tag value.
// Set the default for it.
fRuleStatusIndex = 0;
@@ -1037,7 +1037,7 @@ int32_t RuleBasedBreakIterator::handleSafePrevious(int32_t fromPosition) {
if (state == STOP_STATE) {
// This is the normal exit from the lookup state machine.
- // Transistion to state zero means we have found a safe point.
+ // Transition to state zero means we have found a safe point.
break;
}
}
@@ -1260,6 +1260,7 @@ RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) {
// first.
fLanguageBreakEngines->insertElementAt(fUnhandledBreakEngine, 0, status);
// If we can't insert it, or creation failed, get rid of it
+ U_ASSERT(!fLanguageBreakEngines->hasDeleter());
if (U_FAILURE(status)) {
delete fUnhandledBreakEngine;
fUnhandledBreakEngine = 0;
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp b/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
index 63ff3001c70..6bfe3feca49 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
@@ -74,7 +74,7 @@ UBool RuleBasedBreakIterator::DictionaryCache::following(int32_t fromPos, int32_
return TRUE;
}
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
@@ -114,7 +114,7 @@ UBool RuleBasedBreakIterator::DictionaryCache::preceding(int32_t fromPos, int32_
return TRUE;
}
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPos, int32_t endPos,
@@ -163,7 +163,7 @@ void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPo
// Ask the language object if there are any breaks. It will add them to the cache and
// leave the text pointer on the other side of its range, ready to search for the next one.
if (lbe != NULL) {
- foundBreakCount += lbe->findBreaks(text, rangeStart, rangeEnd, fBreaks);
+ foundBreakCount += lbe->findBreaks(text, rangeStart, rangeEnd, fBreaks, status);
}
// Reload the loop variables for the next go-round
@@ -201,7 +201,7 @@ void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPo
/*
- * BreakCache implemetation
+ * BreakCache implementation
*/
RuleBasedBreakIterator::BreakCache::BreakCache(RuleBasedBreakIterator *bi, UErrorCode &status) :
@@ -258,7 +258,7 @@ void RuleBasedBreakIterator::BreakCache::preceding(int32_t startPos, UErrorCode
previous(status);
} else {
// seek() leaves the BreakCache positioned at the preceding boundary
- // if the requested position is between two bounaries.
+ // if the requested position is between two boundaries.
// current() pushes the BreakCache position out to the BreakIterator itself.
U_ASSERT(startPos > fTextIdx);
current();
@@ -386,7 +386,7 @@ UBool RuleBasedBreakIterator::BreakCache::populateNear(int32_t position, UErrorC
// Add following position(s) to the cache.
while (fBoundaries[fEndBufIdx] < position) {
if (!populateFollowing()) {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
fBufIdx = fEndBufIdx; // Set iterator position to the end of the buffer.
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbicst.pl b/Build/source/libs/icu/icu-src/source/common/rbbicst.pl
index 9aee3c16627..1a01386c7c1 100755
--- a/Build/source/libs/icu/icu-src/source/common/rbbicst.pl
+++ b/Build/source/libs/icu/icu-src/source/common/rbbicst.pl
@@ -7,7 +7,7 @@
# and others. All rights reserved.
#**************************************************************************
#
-# rbbicst Compile the RBBI rule paser state table data into initialized C data.
+# rbbicst Compile the RBBI rule parser state table data into initialized C data.
# Usage:
# cd icu/source/common
# perl rbbicst.pl < rbbirpt.txt > rbbirpt.h
@@ -357,7 +357,7 @@ else
print "U_NAMESPACE_BEGIN\n";
#
- # Emit the constants for indicies of Unicode Sets
+ # Emit the constants for indices of Unicode Sets
# Define one constant for each of the character classes encountered.
# At the same time, store the index corresponding to the set name back into hash.
#
@@ -382,7 +382,7 @@ else
print " rbbiLastAction};\n\n";
#
- # Emit the struct definition for transtion table elements.
+ # Emit the struct definition for transition table elements.
#
print "//-------------------------------------------------------------------------------\n";
print "//\n";
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp b/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
index 193acafc442..6338ed3ed85 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
@@ -170,17 +170,17 @@ RBBIDataWrapper::~RBBIDataWrapper() {
// should still be ==.
//
//-----------------------------------------------------------------------------
-UBool RBBIDataWrapper::operator ==(const RBBIDataWrapper &other) const {
+bool RBBIDataWrapper::operator ==(const RBBIDataWrapper &other) const {
if (fHeader == other.fHeader) {
- return TRUE;
+ return true;
}
if (fHeader->fLength != other.fHeader->fLength) {
- return FALSE;
+ return false;
}
if (uprv_memcmp(fHeader, other.fHeader, fHeader->fLength) == 0) {
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
int32_t RBBIDataWrapper::hashCode() {
@@ -283,7 +283,7 @@ void RBBIDataWrapper::printData() {
printTable("Forward State Transition Table", fForwardTable);
printTable("Reverse State Transition Table", fReverseTable);
- RBBIDebugPrintf("\nOrignal Rules source:\n");
+ RBBIDebugPrintf("\nOriginal Rules source:\n");
for (int32_t c=0; fRuleSource[c] != 0; c++) {
RBBIDebugPrintf("%c", fRuleSource[c]);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbidata.h b/Build/source/libs/icu/icu-src/source/common/rbbidata.h
index 3749f16799e..1bc76d5e5dc 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbidata.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbidata.h
@@ -171,7 +171,7 @@ public:
void init(const RBBIDataHeader *data, UErrorCode &status);
RBBIDataWrapper *addReference();
void removeReference();
- UBool operator ==(const RBBIDataWrapper &other) const;
+ bool operator ==(const RBBIDataWrapper &other) const;
int32_t hashCode();
const UnicodeString &getRuleSourceString() const;
void printData();
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp b/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
index 69d84151fe8..27bcd8f8feb 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
@@ -266,6 +266,7 @@ void RBBINode::findNodes(UVector *dest, RBBINode::NodeType kind, UErrorCode &s
if (U_FAILURE(status)) {
return;
}
+ U_ASSERT(!dest->hasDeleter());
if (fType == kind) {
dest->addElement(this, status);
}
@@ -351,7 +352,7 @@ void RBBINode::printTree(const RBBINode *node, UBool printHeading) {
printNode(node);
if (node != NULL) {
// Only dump the definition under a variable reference if asked to.
- // Unconditinally dump children of all other node types.
+ // Unconditionally dump children of all other node types.
if (node->fType != varRef) {
if (node->fLeftChild != NULL) {
printTree(node->fLeftChild, FALSE);
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbinode.h b/Build/source/libs/icu/icu-src/source/common/rbbinode.h
index cff3ba70c42..4ed84d4e073 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbinode.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbinode.h
@@ -71,7 +71,7 @@ class RBBINode : public UMemory {
int fLastPos; // Last position in the rule source string
// of any text associated with this node.
// If there's a right child, this will be the same
- // as that child's last postion.
+ // as that child's last position.
UBool fNullable; // See Aho.
int32_t fVal; // For leafChar nodes, the value.
@@ -108,7 +108,7 @@ class RBBINode : public UMemory {
private:
RBBINode &operator = (const RBBINode &other); // No defs.
- UBool operator == (const RBBINode &other); // Private, so these functions won't accidently be used.
+ bool operator == (const RBBINode &other); // Private, so these functions won't accidentally be used.
#ifdef RBBI_DEBUG
public:
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbirb.h b/Build/source/libs/icu/icu-src/source/common/rbbirb.h
index 037c1dc2ce8..11dbf343ece 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbirb.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbirb.h
@@ -73,10 +73,10 @@ private:
public:
// API inherited from class SymbolTable
- virtual const UnicodeString* lookup(const UnicodeString& s) const;
- virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const;
+ virtual const UnicodeString* lookup(const UnicodeString& s) const override;
+ virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const override;
virtual UnicodeString parseReference(const UnicodeString& text,
- ParsePosition& pos, int32_t limit) const;
+ ParsePosition& pos, int32_t limit) const override;
// Additional Functions
RBBISymbolTable(RBBIRuleScanner *, const UnicodeString &fRules, UErrorCode &status);
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbirpt.txt b/Build/source/libs/icu/icu-src/source/common/rbbirpt.txt
index 83f7aa401b0..86b75c11e96 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbirpt.txt
+++ b/Build/source/libs/icu/icu-src/source/common/rbbirpt.txt
@@ -50,7 +50,7 @@
# | character from the input only if 'n' appears here.
# |
# |--- Character or named character classes to test for. If the current character being scanned
-# matches, peform the actions and go to the state specified on this line.
+# matches, perform the actions and go to the state specified on this line.
# The input character is tested sequentally, in the order written. The characters and
# character classes tested for do not need to be mutually exclusive. The first match wins.
#
@@ -258,7 +258,7 @@ expr-cont-no-tag:
# to go to after completion of the variable name scanning.
#
# The current input character must be the $ that introduces the name.
-# The $ is consummed here rather than in the state that first detected it
+# The $ is consumed here rather than in the state that first detected it
# so that the doStartVariableName action only needs to happen in one
# place (here), and the other states don't need to worry about it.
#
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp b/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
index 9c406af6713..1304f7e37e6 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
@@ -175,7 +175,7 @@ RBBIRuleScanner::~RBBIRuleScanner() {
// Node Stack.
// Normally has one entry, which is the entire parse tree for the rules.
- // If errors occured, there may be additional subtrees left on the stack.
+ // If errors occurred, there may be additional subtrees left on the stack.
while (fNodeStackPtr > 0) {
delete fNodeStack[fNodeStackPtr];
fNodeStackPtr--;
@@ -284,7 +284,7 @@ UBool RBBIRuleScanner::doParseActions(int32_t action)
case doEndAssign:
{
- // We have reached the end of an assignement statement.
+ // We have reached the end of an assignment statement.
// Current scan char is the ';' that terminates the assignment.
// Terminate expression, leaves expression parse tree rooted in TOS node.
@@ -375,7 +375,7 @@ UBool RBBIRuleScanner::doParseActions(int32_t action)
RBBINode **destRules = (fReverseRule? &fRB->fSafeRevTree : fRB->fDefaultTree);
if (*destRules != NULL) {
- // This is not the first rule encounted.
+ // This is not the first rule encountered.
// OR previous stuff (from *destRules)
// with the current rule expression (on the Node Stack)
// with the resulting OR expression going to *destRules
@@ -856,6 +856,10 @@ UChar32 RBBIRuleScanner::nextCharLL() {
return (UChar32)-1;
}
ch = fRB->fRules.char32At(fNextIndex);
+ if (U_IS_SURROGATE(ch)) {
+ error(U_ILLEGAL_CHAR_FOUND);
+ return U_SENTINEL;
+ }
fNextIndex = fRB->fRules.moveIndex32(fNextIndex, 1);
if (ch == chCR ||
@@ -1219,7 +1223,7 @@ void RBBIRuleScanner::scanSet() {
// TODO: Get more accurate position of the error from UnicodeSet's return info.
// UnicodeSet appears to not be reporting correctly at this time.
#ifdef RBBI_DEBUG
- RBBIDebugPrintf("UnicodeSet parse postion.ErrorIndex = %d\n", pos.getIndex());
+ RBBIDebugPrintf("UnicodeSet parse position.ErrorIndex = %d\n", pos.getIndex());
#endif
error(localStatus);
delete uset;
@@ -1240,7 +1244,7 @@ void RBBIRuleScanner::scanSet() {
}
- // Advance the RBBI parse postion over the UnicodeSet pattern.
+ // Advance the RBBI parse position over the UnicodeSet pattern.
// Don't just set fScanIndex because the line/char positions maintained
// for error reporting would be thrown off.
i = pos.getIndex();
@@ -1263,7 +1267,7 @@ void RBBIRuleScanner::scanSet() {
fRB->fRules.extractBetween(n->fFirstPos, n->fLastPos, n->fText);
// findSetFor() serves several purposes here:
// - Adopts storage for the UnicodeSet, will be responsible for deleting.
- // - Mantains collection of all sets in use, needed later for establishing
+ // - Maintains collection of all sets in use, needed later for establishing
// character categories for run time engine.
// - Eliminates mulitiple instances of the same set.
// - Creates a new uset node if necessary (if this isn't a duplicate.)
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbiscan.h b/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
index 58022002c55..33fdf033546 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
@@ -144,7 +144,7 @@ private:
UnicodeSet fRuleSets[10]; // Unicode Sets that are needed during
// the scanning of RBBI rules. The
- // indicies for these are assigned by the
+ // indices for these are assigned by the
// perl script that builds the state tables.
// See rbbirpt.h.
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp b/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
index 5303f760969..627ec1827cd 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
@@ -63,7 +63,7 @@ RBBISymbolTable::~RBBISymbolTable()
//
-// RBBISymbolTable::lookup This function from the abstract symbol table inteface
+// RBBISymbolTable::lookup This function from the abstract symbol table interface
// looks up a variable name and returns a UnicodeString
// containing the substitution text.
//
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp b/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
index 70e260fc08b..a495f17a878 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
@@ -79,7 +79,7 @@ void RBBITableBuilder::buildForwardTable() {
//
// Walk through the tree, replacing any references to $variables with a copy of the
- // parse tree for the substition expression.
+ // parse tree for the substitution expression.
//
fTree = fTree->flattenVariables();
#ifdef RBBI_DEBUG
@@ -151,7 +151,7 @@ void RBBITableBuilder::buildForwardTable() {
//
// calculate the functions nullable, firstpos, lastpos and followpos on
// nodes in the parse tree.
- // See the alogrithm description in Aho.
+ // See the algorithm description in Aho.
// Understanding how this works by looking at the code alone will be
// nearly impossible.
//
@@ -390,6 +390,7 @@ void RBBITableBuilder::addRuleRootNodes(UVector *dest, RBBINode *node) {
if (node == NULL || U_FAILURE(*fStatus)) {
return;
}
+ U_ASSERT(!dest->hasDeleter());
if (node->fRuleRoot) {
dest->addElement(node, *fStatus);
// Note: rules cannot nest. If we found a rule start node,
@@ -694,7 +695,7 @@ void RBBITableBuilder::buildStateTable() {
}
}
return;
- // delete local pointers only if error occured.
+ // delete local pointers only if error occurred.
ExitBuildSTdeleteall:
delete initialState;
delete failState;
@@ -1042,6 +1043,8 @@ void RBBITableBuilder::sortedAdd(UVector **vector, int32_t val) {
//
//-----------------------------------------------------------------------------
void RBBITableBuilder::setAdd(UVector *dest, UVector *source) {
+ U_ASSERT(!dest->hasDeleter());
+ U_ASSERT(!source->hasDeleter());
int32_t destOriginalSize = dest->size();
int32_t sourceSize = source->size();
int32_t di = 0;
@@ -1070,6 +1073,9 @@ void RBBITableBuilder::setAdd(UVector *dest, UVector *source) {
(void) source->toArray(sourcePtr);
dest->setSize(sourceSize+destOriginalSize, *fStatus);
+ if (U_FAILURE(*fStatus)) {
+ return;
+ }
while (sourcePtr < sourceLim && destPtr < destLim) {
if (*destPtr == *sourcePtr) {
@@ -1431,7 +1437,7 @@ void RBBITableBuilder::exportTable(void *where) {
void RBBITableBuilder::buildSafeReverseTable(UErrorCode &status) {
// The safe table creation has three steps:
- // 1. Identifiy pairs of character classes that are "safe." Safe means that boundaries
+ // 1. Identify pairs of character classes that are "safe." Safe means that boundaries
// following the pair do not depend on context or state before the pair. To test
// whether a pair is safe, run it through the main forward state table, starting
// from each state. If the the final state is the same, no matter what the starting state,
@@ -1445,7 +1451,7 @@ void RBBITableBuilder::buildSafeReverseTable(UErrorCode &status) {
// the first of a pair. In each of these rows, the entry for the second character
// of a safe pair is set to the stop state (0), indicating that a match was found.
// All other table entries are set to the state corresponding the current input
- // character, allowing that charcter to be the of a start following pair.
+ // character, allowing that character to be the of a start following pair.
//
// Because the safe rules are to be run in reverse, moving backwards in the text,
// the first and second pair categories are swapped when building the table.
@@ -1490,16 +1496,25 @@ void RBBITableBuilder::buildSafeReverseTable(UErrorCode &status) {
// The table as a whole is UVector<UnicodeString>
// Each row is represented by a UnicodeString, being used as a Vector<int16>.
// Row 0 is the stop state.
- // Row 1 is the start sate.
+ // Row 1 is the start state.
// Row 2 and beyond are other states, initially one per char class, but
// after initial construction, many of the states will be combined, compacting the table.
// The String holds the nextState data only. The four leading fields of a row, fAccepting,
// fLookAhead, etc. are not needed for the safe table, and are omitted at this stage of building.
U_ASSERT(fSafeTable == nullptr);
- fSafeTable = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, numCharClasses + 2, status);
+ LocalPointer<UVector> lpSafeTable(
+ new UVector(uprv_deleteUObject, uhash_compareUnicodeString, numCharClasses + 2, status), status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ fSafeTable = lpSafeTable.orphan();
for (int32_t row=0; row<numCharClasses + 2; ++row) {
- fSafeTable->addElement(new UnicodeString(numCharClasses, 0, numCharClasses+4), status);
+ LocalPointer<UnicodeString> lpString(new UnicodeString(numCharClasses, 0, numCharClasses+4), status);
+ fSafeTable->adoptElement(lpString.orphan(), status);
+ }
+ if (U_FAILURE(status)) {
+ return;
}
// From the start state, each input char class transitions to the state for that input.
diff --git a/Build/source/libs/icu/icu-src/source/common/rbbitblb.h b/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
index fe3db8d7bf1..38607a819ac 100644
--- a/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
+++ b/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
@@ -69,12 +69,12 @@ public:
bool findDuplCharClassFrom(IntPair *categories);
/** Remove a column from the state table. Used when two character categories
- * have been found equivalent, and merged together, to eliminate the uneeded table column.
+ * have been found equivalent, and merged together, to eliminate the unneeded table column.
*/
void removeColumn(int32_t column);
/**
- * Check for, and remove dupicate states (table rows).
+ * Check for, and remove duplicate states (table rows).
* @return the number of states removed.
*/
int32_t removeDuplicateStates();
diff --git a/Build/source/libs/icu/icu-src/source/common/resbund.cpp b/Build/source/libs/icu/icu-src/source/common/resbund.cpp
index 7c5063b2114..47c0fe1c6ed 100644
--- a/Build/source/libs/icu/icu-src/source/common/resbund.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/resbund.cpp
@@ -135,7 +135,7 @@ U_NAMESPACE_BEGIN
* so forth, until the chain is exhausted or the tag is found.
*
* Thread-safety is implemented around caches, both the cache that
- * stores all the resouce data, and the cache that stores flags
+ * stores all the resource data, and the cache that stores flags
* indicating whether or not a file has been visited. These caches
* delete their storage at static cleanup time, when the process
* quits.
diff --git a/Build/source/libs/icu/icu-src/source/common/resource.h b/Build/source/libs/icu/icu-src/source/common/resource.h
index 3795694412a..48f5b9fa6ec 100644
--- a/Build/source/libs/icu/icu-src/source/common/resource.h
+++ b/Build/source/libs/icu/icu-src/source/common/resource.h
@@ -274,8 +274,10 @@ public:
*
* @param key The key string of the enumeration-start resource.
* Empty if the enumeration starts at the top level of the bundle.
- * @param value Call getArray() or getTable() as appropriate.
- * Then reuse for output values from Array and Table getters.
+ * @param value Call getArray() or getTable() as appropriate. Then reuse for
+ * output values from Array and Table getters. Note: ResourceTable and
+ * ResourceArray instances must outlive the ResourceValue instance for
+ * ResourceTracer to be happy.
* @param noFallback true if the bundle has no parent;
* that is, its top-level table has the nofallback attribute,
* or it is the root bundle of a locale tree.
diff --git a/Build/source/libs/icu/icu-src/source/common/restrace.cpp b/Build/source/libs/icu/icu-src/source/common/restrace.cpp
index 5c6498850e2..1f83372d682 100644
--- a/Build/source/libs/icu/icu-src/source/common/restrace.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/restrace.cpp
@@ -54,6 +54,9 @@ void ResourceTracer::traceOpen() const {
CharString& ResourceTracer::getFilePath(CharString& output, UErrorCode& status) const {
if (fResB) {
+ // Note: if you get a segfault around here, check that ResourceTable and
+ // ResourceArray instances outlive ResourceValue instances referring to
+ // their contents:
output.append(fResB->fData->fPath, status);
output.append('/', status);
output.append(fResB->fData->fName, status);
diff --git a/Build/source/libs/icu/icu-src/source/common/ruleiter.h b/Build/source/libs/icu/icu-src/source/common/ruleiter.h
index 28e2ca57530..09af1297842 100644
--- a/Build/source/libs/icu/icu-src/source/common/ruleiter.h
+++ b/Build/source/libs/icu/icu-src/source/common/ruleiter.h
@@ -94,7 +94,7 @@ public:
* position.
* @param text the text to be iterated
* @param sym the symbol table, or null if there is none. If sym is null,
- * then variables will not be deferenced, even if the PARSE_VARIABLES
+ * then variables will not be dereferenced, even if the PARSE_VARIABLES
* option is set.
* @param pos upon input, the index of the next character to return. If a
* variable has been dereferenced, then pos will <em>not</em> increment as
diff --git a/Build/source/libs/icu/icu-src/source/common/schriter.cpp b/Build/source/libs/icu/icu-src/source/common/schriter.cpp
index 17b68aee9d9..83b3db4ab0a 100644
--- a/Build/source/libs/icu/icu-src/source/common/schriter.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/schriter.cpp
@@ -79,10 +79,10 @@ StringCharacterIterator::operator=(const StringCharacterIterator& that) {
return *this;
}
-UBool
+bool
StringCharacterIterator::operator==(const ForwardCharacterIterator& that) const {
if (this == &that) {
- return TRUE;
+ return true;
}
// do not call UCharCharacterIterator::operator==()
@@ -90,7 +90,7 @@ StringCharacterIterator::operator==(const ForwardCharacterIterator& that) const
// while we compare UnicodeString objects
if (typeid(*this) != typeid(that)) {
- return FALSE;
+ return false;
}
StringCharacterIterator& realThat = (StringCharacterIterator&)that;
diff --git a/Build/source/libs/icu/icu-src/source/common/serv.cpp b/Build/source/libs/icu/icu-src/source/common/serv.cpp
index ce545b9dbd5..0c54a4dce99 100644
--- a/Build/source/libs/icu/icu-src/source/common/serv.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/serv.cpp
@@ -8,6 +8,7 @@
*/
#include "unicode/utypes.h"
+#include "unicode/localpointer.h"
#if !UCONFIG_NO_SERVICE
@@ -237,7 +238,7 @@ public:
* you're removing pointer to this somewhere. Management of that
* pointer will have to know how to deal with refcounts. Once
* the refcount drops to zero, the resource is released. Return
- * false if the resouce has been released.
+ * false if the resource has been released.
*/
CacheEntry* unref() {
if ((--refcount) == 0) {
@@ -256,20 +257,13 @@ public:
}
};
-// UObjectDeleter for serviceCache
+// Deleter for serviceCache
U_CDECL_BEGIN
static void U_CALLCONV
cacheDeleter(void* obj) {
U_NAMESPACE_USE ((CacheEntry*)obj)->unref();
}
-/**
-* Deleter for UObjects
-*/
-static void U_CALLCONV
-deleteUObject(void *obj) {
- U_NAMESPACE_USE delete (UObject*) obj;
-}
U_CDECL_END
/*
@@ -418,12 +412,6 @@ private:
UBool fActive;
};
-struct UVectorDeleter {
- UVector* _obj;
- UVectorDeleter() : _obj(NULL) {}
- ~UVectorDeleter() { delete _obj; }
-};
-
// called only by factories, treat as private
UObject*
ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUServiceFactory* factory, UErrorCode& status) const
@@ -454,6 +442,7 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer
if (serviceCache == NULL) {
ncthis->serviceCache = new Hashtable(status);
if (ncthis->serviceCache == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
if (U_FAILURE(status)) {
@@ -464,7 +453,7 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer
}
UnicodeString currentDescriptor;
- UVectorDeleter cacheDescriptorList;
+ LocalPointer<UVector> cacheDescriptorList;
UBool putInCache = FALSE;
int32_t startIndex = 0;
@@ -502,18 +491,17 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer
int32_t index = startIndex;
while (index < limit) {
ICUServiceFactory* f = (ICUServiceFactory*)factories->elementAt(index++);
- UObject* service = f->create(key, this, status);
+ LocalPointer<UObject> service(f->create(key, this, status));
if (U_FAILURE(status)) {
- delete service;
return NULL;
}
- if (service != NULL) {
- result = new CacheEntry(currentDescriptor, service);
+ if (service.isValid()) {
+ result = new CacheEntry(currentDescriptor, service.getAlias());
if (result == NULL) {
- delete service;
status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
+ service.orphan(); // result now owns service.
goto outerEnd;
}
@@ -524,19 +512,22 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer
// don't want to keep querying on an id that's going to
// fallback to the one that succeeded, we want to hit the
// cache the first time next goaround.
- if (cacheDescriptorList._obj == NULL) {
- cacheDescriptorList._obj = new UVector(uprv_deleteUObject, NULL, 5, status);
+ if (cacheDescriptorList.isNull()) {
+ cacheDescriptorList.adoptInsteadAndCheckErrorCode(new UVector(uprv_deleteUObject, NULL, 5, status), status);
if (U_FAILURE(status)) {
return NULL;
}
}
- UnicodeString* idToCache = new UnicodeString(currentDescriptor);
- if (idToCache == NULL || idToCache->isBogus()) {
+
+ LocalPointer<UnicodeString> idToCache(new UnicodeString(currentDescriptor), status);
+ if (U_FAILURE(status)) {
+ return NULL;
+ }
+ if (idToCache->isBogus()) {
status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
-
- cacheDescriptorList._obj->addElement(idToCache, status);
+ cacheDescriptorList->adoptElement(idToCache.orphan(), status);
if (U_FAILURE(status)) {
return NULL;
}
@@ -550,9 +541,9 @@ outerEnd:
return NULL;
}
- if (cacheDescriptorList._obj != NULL) {
- for (int32_t i = cacheDescriptorList._obj->size(); --i >= 0;) {
- UnicodeString* desc = (UnicodeString*)cacheDescriptorList._obj->elementAt(i);
+ if (cacheDescriptorList.isValid()) {
+ for (int32_t i = cacheDescriptorList->size(); --i >= 0;) {
+ UnicodeString* desc = (UnicodeString*)cacheDescriptorList->elementAt(i);
serviceCache->put(*desc, result, status);
if (U_FAILURE(status)) {
@@ -560,7 +551,7 @@ outerEnd:
}
result->ref();
- cacheDescriptorList._obj->removeElementAt(i);
+ cacheDescriptorList->removeElementAt(i);
}
}
}
@@ -613,6 +604,7 @@ ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorC
if (U_FAILURE(status)) {
return result;
}
+ UObjectDeleter *savedDeleter = result.setDeleter(uprv_deleteUObject);
{
Mutex mutex(&lock);
@@ -620,7 +612,7 @@ ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorC
if (map != NULL) {
ICUServiceKey* fallbackKey = createKey(matchID, status);
- for (int32_t pos = UHASH_FIRST;;) {
+ for (int32_t pos = UHASH_FIRST; U_SUCCESS(status); ) {
const UHashElement* e = map->nextElement(pos);
if (e == NULL) {
break;
@@ -633,17 +625,11 @@ ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorC
}
}
- UnicodeString* idClone = new UnicodeString(*id);
- if (idClone == NULL || idClone->isBogus()) {
- delete idClone;
+ LocalPointer<UnicodeString> idClone(new UnicodeString(*id), status);
+ if (U_SUCCESS(status) && idClone->isBogus()) {
status = U_MEMORY_ALLOCATION_ERROR;
- break;
- }
- result.addElement(idClone, status);
- if (U_FAILURE(status)) {
- delete idClone;
- break;
}
+ result.adoptElement(idClone.orphan(), status);
}
delete fallbackKey;
}
@@ -651,6 +637,7 @@ ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorC
if (U_FAILURE(status)) {
result.removeAllElements();
}
+ result.setDeleter(savedDeleter);
return result;
}
@@ -798,7 +785,7 @@ ICUService::getDisplayNames(UVector& result,
}
const UnicodeString* dn = (const UnicodeString*)entry->key.pointer;
StringPair* sp = StringPair::create(*id, *dn, status);
- result.addElement(sp, status);
+ result.adoptElement(sp, status);
if (U_FAILURE(status)) {
result.removeAllElements();
break;
@@ -846,32 +833,34 @@ ICUService::createSimpleFactory(UObject* objToAdopt, const UnicodeString& id, UB
}
URegistryKey
-ICUService::registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& status)
+ICUService::registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& status)
{
- if (U_SUCCESS(status) && factoryToAdopt != NULL) {
+ LocalPointer<ICUServiceFactory>lpFactoryToAdopt(factoryToAdopt);
+ if (U_FAILURE(status) || factoryToAdopt == nullptr) {
+ return nullptr;
+ }
+ {
Mutex mutex(&lock);
- if (factories == NULL) {
- factories = new UVector(deleteUObject, NULL, status);
+ if (factories == nullptr) {
+ LocalPointer<UVector> lpFactories(new UVector(uprv_deleteUObject, nullptr, status), status);
if (U_FAILURE(status)) {
- delete factories;
- return NULL;
+ return nullptr;
}
+ factories = lpFactories.orphan();
}
- factories->insertElementAt(factoryToAdopt, 0, status);
+ factories->insertElementAt(lpFactoryToAdopt.orphan(), 0, status);
if (U_SUCCESS(status)) {
clearCaches();
- } else {
- delete factoryToAdopt;
- factoryToAdopt = NULL;
}
- }
+ } // Close of mutex lock block.
- if (factoryToAdopt != NULL) {
+ if (U_SUCCESS(status)) {
notifyChanged();
+ return (URegistryKey)factoryToAdopt;
+ } else {
+ return nullptr;
}
-
- return (URegistryKey)factoryToAdopt;
}
UBool
diff --git a/Build/source/libs/icu/icu-src/source/common/serv.h b/Build/source/libs/icu/icu-src/source/common/serv.h
index ca070b6c6d6..3bd3d9a9b9e 100644
--- a/Build/source/libs/icu/icu-src/source/common/serv.h
+++ b/Build/source/libs/icu/icu-src/source/common/serv.h
@@ -191,7 +191,7 @@ public:
/**
* UObject RTTI boilerplate.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
#ifdef SERVICE_DEBUG
public:
@@ -315,7 +315,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory {
* @param status the error code status.
* @return the service object, or NULL if the factory does not support the key.
*/
- virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const override;
/**
* <p>This implementation adds a mapping from ID -> this to result if visible is true,
@@ -324,7 +324,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory {
* @param result the mapping table to update.
* @param status the error code status.
*/
- virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const;
+ virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const override;
/**
* <p>This implementation returns the factory ID if it equals id and visible is true,
@@ -336,7 +336,7 @@ class U_COMMON_API SimpleFactory : public ICUServiceFactory {
* @param result output parameter to hold the display name.
* @return result.
*/
- virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const;
+ virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const override;
public:
/**
@@ -347,7 +347,7 @@ public:
/**
* UObject RTTI boilerplate.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
#ifdef SERVICE_DEBUG
public:
@@ -363,7 +363,7 @@ public:
/**
* <p>ServiceListener is the listener that ICUService provides by default.
- * ICUService will notifiy this listener when factories are added to
+ * ICUService will notify this listener when factories are added to
* or removed from the service. Subclasses can provide
* different listener interfaces that extend EventListener, and modify
* acceptsListener and notifyListener as appropriate.</p>
@@ -390,7 +390,7 @@ public:
/**
* UObject RTTI boilerplate.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
};
@@ -930,7 +930,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
* @param l the listener to test.
* @return true if the service accepts the listener.
*/
- virtual UBool acceptsListener(const EventListener& l) const;
+ virtual UBool acceptsListener(const EventListener& l) const override;
/**
* <p>Notify the listener of a service change.</p>
@@ -941,7 +941,7 @@ class U_COMMON_API ICUService : public ICUNotifier {
*
* @param l the listener to notify.
*/
- virtual void notifyListener(EventListener& l) const;
+ virtual void notifyListener(EventListener& l) const override;
/************************************************************************
* Utilities for subclasses.
diff --git a/Build/source/libs/icu/icu-src/source/common/servloc.h b/Build/source/libs/icu/icu-src/source/common/servloc.h
index ccf6433379d..29c50a27d1a 100644
--- a/Build/source/libs/icu/icu-src/source/common/servloc.h
+++ b/Build/source/libs/icu/icu-src/source/common/servloc.h
@@ -106,7 +106,7 @@ class U_COMMON_API LocaleKey : public ICUServiceKey {
/**
* Append the prefix associated with the kind, or nothing if the kind is KIND_ANY.
*/
- virtual UnicodeString& prefix(UnicodeString& result) const;
+ virtual UnicodeString& prefix(UnicodeString& result) const override;
/**
* Return the kind code associated with this key.
@@ -116,17 +116,17 @@ class U_COMMON_API LocaleKey : public ICUServiceKey {
/**
* Return the canonicalID.
*/
- virtual UnicodeString& canonicalID(UnicodeString& result) const;
+ virtual UnicodeString& canonicalID(UnicodeString& result) const override;
/**
* Return the currentID.
*/
- virtual UnicodeString& currentID(UnicodeString& result) const;
+ virtual UnicodeString& currentID(UnicodeString& result) const override;
/**
* Return the (canonical) current descriptor, or null if no current id.
*/
- virtual UnicodeString& currentDescriptor(UnicodeString& result) const;
+ virtual UnicodeString& currentDescriptor(UnicodeString& result) const override;
/**
* Convenience method to return the locale corresponding to the (canonical) original ID.
@@ -147,13 +147,13 @@ class U_COMMON_API LocaleKey : public ICUServiceKey {
* unless the primary id was the empty string, in which case
* there is no fallback.
*/
- virtual UBool fallback();
+ virtual UBool fallback() override;
/**
* Return true if a key created from id matches, or would eventually
* fallback to match, the canonical ID of this key.
*/
- virtual UBool isFallbackOf(const UnicodeString& id) const;
+ virtual UBool isFallbackOf(const UnicodeString& id) const override;
public:
/**
@@ -161,7 +161,7 @@ class U_COMMON_API LocaleKey : public ICUServiceKey {
*/
static UClassID U_EXPORT2 getStaticClassID();
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* Destructor.
@@ -238,7 +238,7 @@ protected:
* kind off to handleCreate (which subclasses must implement).
*/
public:
- virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const override;
protected:
virtual UBool handlesKey(const ICUServiceKey& key, UErrorCode& status) const;
@@ -248,12 +248,12 @@ public:
* Override of superclass method. This adjusts the result based
* on the coverage rule for this factory.
*/
- virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const;
+ virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const override;
/**
* Return a localized name for the locale represented by id.
*/
- virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const;
+ virtual UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const override;
protected:
/**
@@ -281,7 +281,7 @@ public:
*/
static UClassID U_EXPORT2 getStaticClassID();
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
#ifdef SERVICE_DEBUG
public:
@@ -324,13 +324,13 @@ class U_COMMON_API SimpleLocaleKeyFactory : public LocaleKeyFactory {
/**
* Override of superclass method. Returns the service object if kind/locale match. Service is not used.
*/
- virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const override;
/**
* Override of superclass method. This adjusts the result based
* on the coverage rule for this factory.
*/
- virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const;
+ virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const override;
protected:
/**
@@ -345,7 +345,7 @@ public:
*/
static UClassID U_EXPORT2 getStaticClassID();
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
#ifdef SERVICE_DEBUG
public:
@@ -394,20 +394,20 @@ protected:
/**
* Return the supported IDs. This is the set of all locale names in ICULocaleData.
*/
- virtual const Hashtable* getSupportedIDs(UErrorCode& status) const;
+ virtual const Hashtable* getSupportedIDs(UErrorCode& status) const override;
/**
* Create the service. The default implementation returns the resource bundle
* for the locale, ignoring kind, and service.
*/
- virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* service, UErrorCode& status) const;
+ virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* service, UErrorCode& status) const override;
public:
/**
* UObject boilerplate.
*/
static UClassID U_EXPORT2 getStaticClassID();
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
#ifdef SERVICE_DEBUG
@@ -512,7 +512,7 @@ class U_COMMON_API ICULocaleService : public ICUService
* We really need a flag that is understood by all compilers that will suppress the warning about
* hidden overrides.
*/
- virtual URegistryKey registerInstance(UObject* objToAdopt, const UnicodeString& locale, UBool visible, UErrorCode& status);
+ virtual URegistryKey registerInstance(UObject* objToAdopt, const UnicodeString& locale, UBool visible, UErrorCode& status) override;
/**
* Convenience method for callers using locales. This returns the standard
@@ -531,7 +531,7 @@ class U_COMMON_API ICULocaleService : public ICUService
/**
* Override superclass createKey method.
*/
- virtual ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const;
+ virtual ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const override;
/**
* Additional createKey that takes a kind.
diff --git a/Build/source/libs/icu/icu-src/source/common/servls.cpp b/Build/source/libs/icu/icu-src/source/common/servls.cpp
index 81dc4f750ea..7108afd4a52 100644
--- a/Build/source/libs/icu/icu-src/source/common/servls.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/servls.cpp
@@ -179,7 +179,7 @@ private:
length = other._ids.size();
for(i = 0; i < length; ++i) {
- _ids.addElement(((UnicodeString *)other._ids.elementAt(i))->clone(), status);
+ _ids.addElementX(((UnicodeString *)other._ids.elementAt(i))->clone(), status);
}
if(U_SUCCESS(status)) {
@@ -201,7 +201,7 @@ public:
virtual ~ServiceEnumeration();
- virtual StringEnumeration *clone() const {
+ virtual StringEnumeration *clone() const override {
UErrorCode status = U_ZERO_ERROR;
ServiceEnumeration *cl = new ServiceEnumeration(*this, status);
if(U_FAILURE(status)) {
@@ -221,18 +221,18 @@ public:
return FALSE;
}
- virtual int32_t count(UErrorCode& status) const {
+ virtual int32_t count(UErrorCode& status) const override {
return upToDate(status) ? _ids.size() : 0;
}
- virtual const UnicodeString* snext(UErrorCode& status) {
+ virtual const UnicodeString* snext(UErrorCode& status) override {
if (upToDate(status) && (_pos < _ids.size())) {
return (const UnicodeString*)_ids[_pos++];
}
return NULL;
}
- virtual void reset(UErrorCode& status) {
+ virtual void reset(UErrorCode& status) override {
if (status == U_ENUM_OUT_OF_SYNC_ERROR) {
status = U_ZERO_ERROR;
}
@@ -245,7 +245,7 @@ public:
public:
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
ServiceEnumeration::~ServiceEnumeration() {}
diff --git a/Build/source/libs/icu/icu-src/source/common/servnotf.cpp b/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
index f577795cae9..342e0d9f24d 100644
--- a/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
@@ -59,7 +59,7 @@ ICUNotifier::addListener(const EventListener* l, UErrorCode& status)
}
}
- listeners->addElement((void*)l, status); // cast away const
+ listeners->addElementX((void*)l, status); // cast away const
}
#ifdef NOTIFIER_DEBUG
else {
diff --git a/Build/source/libs/icu/icu-src/source/common/servnotf.h b/Build/source/libs/icu/icu-src/source/common/servnotf.h
index 305570c1e67..e3b2cac32e4 100644
--- a/Build/source/libs/icu/icu-src/source/common/servnotf.h
+++ b/Build/source/libs/icu/icu-src/source/common/servnotf.h
@@ -40,7 +40,7 @@ public:
public:
static UClassID U_EXPORT2 getStaticClassID();
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
public:
#ifdef SERVICE_DEBUG
@@ -82,7 +82,7 @@ public:
/**
* Add a listener to be notified when notifyChanged is called.
* The listener must not be null. AcceptsListener must return
- * true for the listener. Attempts to concurrently
+ * true for the listener. Attempts to concurrently
* register the identical listener more than once will be
* silently ignored.
*/
@@ -90,7 +90,7 @@ public:
/**
* Stop notifying this listener. The listener must
- * not be null. Attemps to remove a listener that is
+ * not be null. Attempts to remove a listener that is
* not registered will be silently ignored.
*/
virtual void removeListener(const EventListener* l, UErrorCode& status);
diff --git a/Build/source/libs/icu/icu-src/source/common/sources.txt b/Build/source/libs/icu/icu-src/source/common/sources.txt
index e0410daaa47..e5c39dd2ce3 100644
--- a/Build/source/libs/icu/icu-src/source/common/sources.txt
+++ b/Build/source/libs/icu/icu-src/source/common/sources.txt
@@ -19,6 +19,7 @@ dictbe.cpp
dictionarydata.cpp
dtintrv.cpp
edits.cpp
+emojiprops.cpp
errorcode.cpp
filteredbrk.cpp
filterednormalizer2.cpp
@@ -40,6 +41,7 @@ locmap.cpp
locresdata.cpp
locutil.cpp
lsr.cpp
+lstmbe.cpp
messagepattern.cpp
normalizer2.cpp
normalizer2impl.cpp
diff --git a/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp b/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp
index 6f9cc2e5c22..4d52a88af74 100644
--- a/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp
@@ -383,7 +383,7 @@ StringTrieBuilder::equalNodes(const void *left, const void *right) {
return *(const Node *)left==*(const Node *)right;
}
-UBool
+bool
StringTrieBuilder::Node::operator==(const Node &other) const {
return this==&other || (typeid(*this)==typeid(other) && hash==other.hash);
}
@@ -396,13 +396,13 @@ StringTrieBuilder::Node::markRightEdgesFirst(int32_t edgeNumber) {
return edgeNumber;
}
-UBool
+bool
StringTrieBuilder::FinalValueNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!Node::operator==(other)) {
- return FALSE;
+ return false;
}
const FinalValueNode &o=(const FinalValueNode &)other;
return value==o.value;
@@ -413,25 +413,25 @@ StringTrieBuilder::FinalValueNode::write(StringTrieBuilder &builder) {
offset=builder.writeValueAndFinal(value, TRUE);
}
-UBool
+bool
StringTrieBuilder::ValueNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!Node::operator==(other)) {
- return FALSE;
+ return false;
}
const ValueNode &o=(const ValueNode &)other;
return hasValue==o.hasValue && (!hasValue || value==o.value);
}
-UBool
+bool
StringTrieBuilder::IntermediateValueNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!ValueNode::operator==(other)) {
- return FALSE;
+ return false;
}
const IntermediateValueNode &o=(const IntermediateValueNode &)other;
return next==o.next;
@@ -451,13 +451,13 @@ StringTrieBuilder::IntermediateValueNode::write(StringTrieBuilder &builder) {
offset=builder.writeValueAndFinal(value, FALSE);
}
-UBool
+bool
StringTrieBuilder::LinearMatchNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!ValueNode::operator==(other)) {
- return FALSE;
+ return false;
}
const LinearMatchNode &o=(const LinearMatchNode &)other;
return length==o.length && next==o.next;
@@ -471,21 +471,21 @@ StringTrieBuilder::LinearMatchNode::markRightEdgesFirst(int32_t edgeNumber) {
return edgeNumber;
}
-UBool
+bool
StringTrieBuilder::ListBranchNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!Node::operator==(other)) {
- return FALSE;
+ return false;
}
const ListBranchNode &o=(const ListBranchNode &)other;
for(int32_t i=0; i<length; ++i) {
if(units[i]!=o.units[i] || values[i]!=o.values[i] || equal[i]!=o.equal[i]) {
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
int32_t
@@ -550,13 +550,13 @@ StringTrieBuilder::ListBranchNode::write(StringTrieBuilder &builder) {
}
}
-UBool
+bool
StringTrieBuilder::SplitBranchNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!Node::operator==(other)) {
- return FALSE;
+ return false;
}
const SplitBranchNode &o=(const SplitBranchNode &)other;
return unit==o.unit && lessThan==o.lessThan && greaterOrEqual==o.greaterOrEqual;
@@ -584,13 +584,13 @@ StringTrieBuilder::SplitBranchNode::write(StringTrieBuilder &builder) {
offset=builder.write(unit);
}
-UBool
+bool
StringTrieBuilder::BranchHeadNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!ValueNode::operator==(other)) {
- return FALSE;
+ return false;
}
const BranchHeadNode &o=(const BranchHeadNode &)other;
return length==o.length && next==o.next;
diff --git a/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp b/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
index 6769aa6b2cc..c17dbb2e2b1 100644
--- a/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
@@ -37,7 +37,7 @@ enum {
};
static constexpr int32_t sizeInMaxAlignTs(int32_t sizeInBytes) {
- return (sizeInBytes + sizeof(max_align_t) - 1) / sizeof(max_align_t);
+ return (sizeInBytes + sizeof(std::max_align_t) - 1) / sizeof(std::max_align_t);
}
/* UComparator convenience implementations ---------------------------------- */
@@ -141,7 +141,7 @@ static void
insertionSort(char *array, int32_t length, int32_t itemSize,
UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
- icu::MaybeStackArray<max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE)> v;
+ icu::MaybeStackArray<std::max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE)> v;
if (sizeInMaxAlignTs(itemSize) > v.getCapacity() &&
v.resize(sizeInMaxAlignTs(itemSize)) == nullptr) {
*pErrorCode = U_MEMORY_ALLOCATION_ERROR;
@@ -235,7 +235,7 @@ static void
quickSort(char *array, int32_t length, int32_t itemSize,
UComparator *cmp, const void *context, UErrorCode *pErrorCode) {
/* allocate two intermediate item variables (x and w) */
- icu::MaybeStackArray<max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE) * 2> xw;
+ icu::MaybeStackArray<std::max_align_t, sizeInMaxAlignTs(STACK_ITEM_SIZE) * 2> xw;
if(sizeInMaxAlignTs(itemSize)*2 > xw.getCapacity() &&
xw.resize(sizeInMaxAlignTs(itemSize) * 2) == nullptr) {
*pErrorCode=U_MEMORY_ALLOCATION_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/common/uassert.h b/Build/source/libs/icu/icu-src/source/common/uassert.h
index afd31eeffd9..52187528991 100644
--- a/Build/source/libs/icu/icu-src/source/common/uassert.h
+++ b/Build/source/libs/icu/icu-src/source/common/uassert.h
@@ -10,7 +10,7 @@
*
* File uassert.h
*
-* Contains the U_ASSERT and UPRV_UNREACHABLE macros
+* Contains the U_ASSERT and UPRV_UNREACHABLE_* macros
*
******************************************************************************
*/
@@ -38,14 +38,34 @@
#endif
/**
- * \def UPRV_UNREACHABLE
+ * \def UPRV_UNREACHABLE_ASSERT
+ * This macro is used in places that we had believed were unreachable, but
+ * experience has shown otherwise (possibly due to memory corruption, etc).
+ * In this case we call assert() in debug versions as with U_ASSERT, instead
+ * of unconditionally calling abort(). However we also allow redefinition as
+ * with UPRV_UNREACHABLE_EXIT.
+ * @internal
+*/
+#if defined(UPRV_UNREACHABLE_ASSERT)
+ // Use the predefined value.
+#elif U_DEBUG
+# include <assert.h>
+# define UPRV_UNREACHABLE_ASSERT assert(false)
+#elif U_CPLUSPLUS_VERSION
+# define UPRV_UNREACHABLE_ASSERT (void)0
+#else
+# define UPRV_UNREACHABLE_ASSERT
+#endif
+
+/**
+ * \def UPRV_UNREACHABLE_EXIT
* This macro is used to unconditionally abort if unreachable code is ever executed.
* @internal
*/
-#if defined(UPRV_UNREACHABLE)
+#if defined(UPRV_UNREACHABLE_EXIT)
// Use the predefined value.
#else
-# define UPRV_UNREACHABLE abort()
+# define UPRV_UNREACHABLE_EXIT abort()
#endif
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/ubidi.cpp b/Build/source/libs/icu/icu-src/source/common/ubidi.cpp
index 3ddb45721e2..6d27827c504 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubidi.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ubidi.cpp
@@ -2047,7 +2047,7 @@ processPropertySeq(UBiDi *pBiDi, LevState *pLevState, uint8_t _prop,
break;
default: /* we should never get here */
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
if((addLevel) || (start < start0)) {
@@ -2250,7 +2250,7 @@ resolveImplicitLevels(UBiDi *pBiDi,
start2=i;
break;
default: /* we should never get here */
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
}
@@ -2724,7 +2724,7 @@ ubidi_setPara(UBiDi *pBiDi, const UChar *text, int32_t length,
break;
default:
/* we should never get here */
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
/*
* If there are no external levels specified and there
diff --git a/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h b/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
index 7a34870bd80..aad919fa2ef 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
@@ -1,6 +1,5 @@
-// © 2016 and later: Unicode, Inc. and others.
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
-//
// Copyright (C) 1999-2016, International Business Machines
// Corporation and others. All Rights Reserved.
//
@@ -8,798 +7,818 @@
//
// machine-generated by: icu/tools/unicode/c/genprops/bidipropsbuilder.cpp
-
#ifdef INCLUDED_FROM_UBIDI_PROPS_C
-static const UVersionInfo ubidi_props_dataVersion={0xd,0,0,0};
+static const UVersionInfo ubidi_props_dataVersion={0xe,0,0,0};
-static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x67ec,0x6200,0x28,0x620,0x8c8,0x10ac0,0x10d24,0,0,0,0,0,0,0,0x6502b6};
+static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x6a98,0x64a8,0x28,0x620,0x8cc,0x10ac0,0x10d24,0,0,0,0,0,0,0,0x6702b6};
-static const uint16_t ubidi_props_trieIndex[12536]={
-0x37c,0x384,0x38c,0x394,0x3ac,0x3b4,0x3bc,0x3c4,0x39c,0x3a4,0x39c,0x3a4,0x39c,0x3a4,0x39c,0x3a4,
-0x39c,0x3a4,0x39c,0x3a4,0x3ca,0x3d2,0x3da,0x3e2,0x3ea,0x3f2,0x3ee,0x3f6,0x3fe,0x406,0x401,0x409,
-0x39c,0x3a4,0x39c,0x3a4,0x411,0x419,0x39c,0x3a4,0x39c,0x3a4,0x39c,0x3a4,0x41f,0x427,0x42f,0x437,
-0x43f,0x447,0x44f,0x457,0x45d,0x465,0x46d,0x475,0x47d,0x485,0x48b,0x493,0x49b,0x4a3,0x4ab,0x4b3,
-0x4bf,0x4bb,0x4c7,0x4cf,0x431,0x4df,0x4e6,0x4d7,0x4ee,0x4f0,0x4f8,0x500,0x508,0x509,0x511,0x519,
-0x521,0x509,0x529,0x52e,0x521,0x509,0x536,0x53e,0x508,0x546,0x54e,0x500,0x556,0x39c,0x55e,0x562,
-0x56a,0x56c,0x574,0x57c,0x508,0x584,0x58c,0x500,0x413,0x590,0x511,0x500,0x508,0x39c,0x598,0x39c,
-0x39c,0x59e,0x5a6,0x39c,0x39c,0x5aa,0x5b2,0x39c,0x5b6,0x5bd,0x39c,0x5c5,0x5cd,0x5d4,0x555,0x39c,
-0x39c,0x5dc,0x5e4,0x5ec,0x5f4,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x5fc,0x39c,0x604,0x39c,0x39c,0x39c,
-0x60c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x614,0x39c,0x39c,0x39c,0x61c,0x61c,0x515,0x515,0x39c,0x622,0x62a,0x604,
-0x640,0x632,0x632,0x648,0x64f,0x638,0x39c,0x39c,0x39c,0x657,0x65f,0x39c,0x39c,0x39c,0x661,0x669,
-0x671,0x39c,0x678,0x680,0x39c,0x688,0x56b,0x39c,0x545,0x690,0x556,0x698,0x413,0x6a0,0x39c,0x6a7,
-0x39c,0x6ac,0x39c,0x39c,0x39c,0x39c,0x6b2,0x6ba,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x3ea,0x6c2,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x6ca,0x6d2,0x6d6,
-0x6ee,0x6f4,0x6de,0x6e6,0x6fc,0x704,0x708,0x5d7,0x710,0x718,0x720,0x39c,0x728,0x669,0x669,0x669,
-0x738,0x740,0x748,0x750,0x755,0x75d,0x765,0x730,0x76d,0x775,0x39c,0x77b,0x782,0x669,0x669,0x669,
-0x669,0x582,0x788,0x669,0x790,0x39c,0x39c,0x666,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,
-0x669,0x669,0x669,0x669,0x669,0x798,0x669,0x669,0x669,0x669,0x669,0x79e,0x669,0x669,0x7a6,0x7ae,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x669,0x669,0x669,0x669,0x7be,0x7c6,0x7ce,0x7b6,
-0x7de,0x7e6,0x7ee,0x7f5,0x7fc,0x804,0x808,0x7d6,0x669,0x669,0x669,0x810,0x816,0x669,0x669,0x81c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x824,0x39c,0x39c,0x39c,0x82c,0x39c,0x39c,0x39c,0x3ea,
-0x834,0x83c,0x840,0x39c,0x848,0x669,0x669,0x66c,0x669,0x669,0x669,0x669,0x669,0x669,0x84f,0x855,
-0x865,0x85d,0x39c,0x39c,0x86d,0x60c,0x39c,0x3c3,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x669,0x82b,
-0x3d1,0x39c,0x875,0x87d,0x39c,0x885,0x88d,0x39c,0x39c,0x39c,0x39c,0x891,0x39c,0x39c,0x661,0x3c2,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x669,0x669,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x875,0x669,0x582,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x898,0x39c,0x39c,0x89d,0x56c,0x39c,0x39c,0x5b8,0x669,0x660,0x39c,0x39c,0x8a5,0x39c,0x39c,0x39c,
-0x8ad,0x8b4,0x632,0x8bc,0x39c,0x39c,0x58e,0x8c4,0x39c,0x8cc,0x8d3,0x39c,0x4ee,0x8d8,0x39c,0x507,
-0x39c,0x8e0,0x8e8,0x509,0x39c,0x8ec,0x508,0x8f4,0x39c,0x39c,0x39c,0x8fa,0x39c,0x39c,0x39c,0x901,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x915,0x909,0x90d,0x49b,0x49b,0x49b,0x49b,0x49b,
-0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x49b,0x91d,0x49b,0x49b,0x49b,0x49b,0x925,0x929,
-0x931,0x939,0x93d,0x945,0x49b,0x49b,0x49b,0x949,0x951,0x38c,0x959,0x961,0x39c,0x39c,0x39c,0x969,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0xe70,0xe70,0xeb0,0xef0,0xe70,0xe70,0xe70,0xe70,0xe70,0xe70,0xf28,0xf68,0xfa8,0xfb8,0xff8,0x1004,
-0xe70,0xe70,0x1044,0xe70,0xe70,0xe70,0x107c,0x10bc,0x10fc,0x113c,0x1174,0x11b4,0x11f4,0x122c,0x126c,0x12ac,
+static const uint16_t ubidi_props_trieIndex[12876]={
+0x387,0x38f,0x397,0x39f,0x3b7,0x3bf,0x3c7,0x3cf,0x3a7,0x3af,0x3a7,0x3af,0x3a7,0x3af,0x3a7,0x3af,
+0x3a7,0x3af,0x3a7,0x3af,0x3d5,0x3dd,0x3e5,0x3ed,0x3f5,0x3fd,0x3f9,0x401,0x409,0x411,0x40c,0x414,
+0x3a7,0x3af,0x3a7,0x3af,0x41c,0x424,0x3a7,0x3af,0x3a7,0x3af,0x3a7,0x3af,0x42a,0x432,0x43a,0x442,
+0x44a,0x452,0x45a,0x462,0x468,0x470,0x478,0x480,0x488,0x490,0x496,0x49e,0x4a6,0x4ae,0x4b6,0x4be,
+0x4ca,0x4c6,0x4d2,0x4da,0x4e2,0x4f2,0x4f9,0x4ea,0x501,0x503,0x50b,0x513,0x51b,0x51c,0x524,0x52c,
+0x534,0x51c,0x53c,0x541,0x534,0x51c,0x549,0x551,0x51b,0x559,0x561,0x513,0x569,0x3a7,0x571,0x575,
+0x57d,0x57f,0x587,0x58f,0x51b,0x597,0x59f,0x513,0x41e,0x5a3,0x524,0x513,0x51b,0x3a7,0x5ab,0x3a7,
+0x3a7,0x5b1,0x5b9,0x3a7,0x3a7,0x5bd,0x5c5,0x3a7,0x5c9,0x5d0,0x3a7,0x5d8,0x5e0,0x5e7,0x568,0x3a7,
+0x3a7,0x5ef,0x5f7,0x5ff,0x607,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x60f,0x3a7,0x617,0x3a7,0x3a7,0x3a7,
+0x61f,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x627,0x3a7,0x3a7,0x3a7,0x62f,0x528,0x528,0x528,0x3a7,0x635,0x63d,0x617,
+0x653,0x645,0x645,0x65b,0x662,0x64b,0x3a7,0x3a7,0x3a7,0x66a,0x672,0x3a7,0x3a7,0x3a7,0x674,0x67c,
+0x684,0x3a7,0x68b,0x693,0x3a7,0x69b,0x4fe,0x3a7,0x558,0x6a3,0x569,0x6ab,0x41e,0x6b3,0x3a7,0x6ba,
+0x3a7,0x6bf,0x3a7,0x3a7,0x3a7,0x3a7,0x6c5,0x6cd,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3f5,0x3f5,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x6d4,0x6dc,0x6e0,
+0x6f8,0x6fe,0x6e8,0x6f0,0x706,0x70e,0x712,0x5ea,0x71a,0x722,0x72a,0x3a7,0x732,0x67c,0x67c,0x67c,
+0x742,0x74a,0x752,0x75a,0x75f,0x767,0x76f,0x73a,0x777,0x77f,0x3a7,0x785,0x78c,0x67c,0x67c,0x67c,
+0x67c,0x595,0x792,0x67c,0x79a,0x3a7,0x3a7,0x679,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,
+0x67c,0x67c,0x67c,0x67c,0x67c,0x7a2,0x67c,0x67c,0x67c,0x67c,0x67c,0x7a8,0x67c,0x67c,0x7b0,0x7b8,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x67c,0x67c,0x67c,0x67c,0x7c8,0x7d0,0x7d8,0x7c0,
+0x7e8,0x7f0,0x7f8,0x7ff,0x806,0x80e,0x812,0x7e0,0x67c,0x67c,0x67c,0x81a,0x820,0x67c,0x67c,0x826,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x82e,0x3a7,0x3a7,0x3a7,0x836,0x3a7,0x3a7,0x3a7,0x3f5,
+0x83e,0x846,0x849,0x3a7,0x851,0x67c,0x67c,0x67f,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x858,0x85e,
+0x86e,0x866,0x3a7,0x3a7,0x876,0x61f,0x3a7,0x3ce,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x67c,0x835,
+0x3dc,0x3a7,0x87e,0x886,0x3a7,0x88e,0x896,0x3a7,0x3a7,0x3a7,0x3a7,0x89a,0x3a7,0x3a7,0x674,0x3cd,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x67c,0x67c,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x87e,0x67c,0x595,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x8a1,0x3a7,0x3a7,0x8a6,0x8ae,0x3a7,0x3a7,0x5cb,0x67c,0x673,0x3a7,0x3a7,0x8b6,0x3a7,0x3a7,0x3a7,
+0x8be,0x8c5,0x645,0x8cd,0x3a7,0x3a7,0x5a1,0x8d5,0x3a7,0x8dd,0x8e4,0x3a7,0x501,0x8e9,0x3a7,0x51a,
+0x3a7,0x8f1,0x8f9,0x51c,0x3a7,0x8fd,0x51b,0x905,0x3a7,0x3a7,0x3a7,0x90b,0x3a7,0x3a7,0x3a7,0x912,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x926,0x91a,0x91e,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,
+0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x92e,0x936,0x4a6,0x4a6,0x4a6,0x93b,0x93f,
+0x947,0x94f,0x953,0x95b,0x4a6,0x4a6,0x4a6,0x95f,0x967,0x397,0x96f,0x977,0x3a7,0x3a7,0x3a7,0x97f,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0xe9c,0xe9c,0xedc,0xf1c,0xe9c,0xe9c,0xe9c,0xe9c,0xe9c,0xe9c,0xf54,0xf94,0xfd4,0xfe4,0x1024,0x1030,
+0xe9c,0xe9c,0x1070,0xe9c,0xe9c,0xe9c,0x10a8,0x10e8,0x1128,0x1168,0x11a0,0x11e0,0x1220,0x1258,0x1298,0x12d8,
0xa40,0xa80,0xac0,0xaff,0x1a0,0x1a0,0xb3f,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb68,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xba8,0x1a0,0x1a0,0xbdd,0xc1d,0xc5d,0xc9d,0xcdd,0xd1d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xba8,0x1a0,0xbce,0xc09,0xc49,0xc89,0xcc9,0xd09,0xd49,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
-0xd9d,0xdad,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
+0xdc9,0xdd9,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,
-0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd5d,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x971,0x39c,0x669,0x669,0x979,0x60c,0x39c,0x501,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x981,0x39c,0x39c,0x39c,0x988,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x990,0x431,0x431,0x431,0x431,0x431,0x431,0x431,
-0x998,0x99c,0x431,0x431,0x431,0x431,0x9ac,0x9a4,0x431,0x9b4,0x431,0x431,0x9bc,0x9c2,0x431,0x431,
-0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x9d2,0x9ca,0x431,0x431,0x431,0x431,0x431,0x431,
-0x431,0x431,0x431,0x9da,0x431,0x9e2,0x431,0x431,0x431,0x9e6,0x9ed,0x9f3,0x431,0x9f7,0x9ff,0x431,
-0x508,0xa07,0xa0e,0xa15,0x413,0xa18,0x39c,0x39c,0x4ee,0xa1f,0x39c,0xa25,0x413,0xa2a,0xa32,0x39c,
-0x39c,0xa37,0x39c,0x39c,0x39c,0x39c,0x82c,0xa3f,0x413,0x590,0x56b,0xa46,0x39c,0x39c,0x39c,0x39c,
-0x39c,0xa07,0xa4e,0x39c,0x39c,0xa56,0xa5e,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xa62,0xa6a,0x39c,
-0x39c,0xa72,0x56b,0xa7a,0x39c,0xa80,0x39c,0x39c,0x5fc,0xa88,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0xa8d,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xa94,0xa9c,0x39c,0x39c,0x39c,0xa9f,0x56b,0xaa7,
-0xaab,0xab3,0x39c,0xaba,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0xac1,0x39c,0x39c,0xacf,0xac9,0x39c,0x39c,0x39c,0xad7,0xadf,0x39c,0xae3,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x592,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xaf0,0xaeb,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0xaf8,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xaff,
-0x39c,0xb05,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0xa26,0x39c,0xb0b,0x39c,0x39c,0xb13,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x522,0xb1b,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xb22,0xb2a,0xb30,0x39c,0x39c,0x669,0x669,0xb38,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x669,0x669,0x83f,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0xb3a,0x39c,0xb41,0x39c,0xb3d,0x39c,0xb44,0x39c,0xb4c,0xb50,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x3ea,0xb58,0x3ea,
-0xb5f,0xb66,0xb6e,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xb76,0xb7e,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xb05,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0xb83,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x431,0x431,0x431,
-0x431,0x431,0x431,0xb8b,0x431,0xb93,0xb93,0xb9a,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,
-0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,
-0x90d,0x49b,0x49b,0x431,0x431,0x49b,0x49b,0x9f3,0x431,0x431,0x431,0x431,0x431,0x49b,0x49b,0x49b,
-0x49b,0x49b,0x49b,0x49b,0xba2,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x431,0x669,0xbaa,0x669,
-0x669,0x66c,0xbaf,0xbb3,0x84f,0xbbb,0x3be,0x39c,0xbc1,0x39c,0xbc6,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x779,0x39c,0x39c,0x39c,0x39c,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,
-0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,0x669,
-0x669,0x669,0x669,0x66b,0x979,0x669,0x669,0x669,0x66c,0x669,0x669,0xbce,0x66e,0xbaa,0x669,0xbd6,
-0x669,0xbde,0xbe3,0x39c,0x39c,0x669,0x669,0x669,0xbeb,0x669,0x669,0x798,0x669,0x669,0x669,0x66c,
-0xbf2,0xbfa,0xc00,0xc05,0x39c,0x669,0x669,0x669,0x669,0xc0d,0x669,0x788,0xc15,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xc1c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,
-0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0x39c,0xc1c,0xc2c,0xc24,0xc24,
-0xc24,0xc2d,0xc2d,0xc2d,0xc2d,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0xc35,0xc2d,0xc2d,0xc2d,
-0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
-0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
-0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
-0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0x37b,0x37b,0x37b,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8,
-9,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,
-2,2,2,2,2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x12,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x12,0x12,0x12,0x12,0x12,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-6,0xa,4,4,4,4,0xa,0xa,0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,
-4,4,2,2,0xa,0,0xa,0xa,0xa,2,0,0x900a,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xa,0xa,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd89,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x987,0x3a7,0x67c,0x67c,0x98f,0x61f,0x3a7,0x514,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x997,0x3a7,0x3a7,0x3a7,0x99e,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x9a6,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,
+0x9ae,0x9b2,0x43c,0x43c,0x43c,0x43c,0x9c2,0x9ba,0x43c,0x9ca,0x43c,0x43c,0x9d2,0x9d8,0x43c,0x43c,
+0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x9e8,0x9e0,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,
+0x43c,0x43c,0x43c,0x9f0,0x43c,0x9f8,0x43c,0x43c,0x43c,0x9fc,0xa03,0xa09,0xa11,0xa15,0xa1d,0x43c,
+0x51b,0xa25,0xa2c,0xa33,0x41e,0xa3b,0x569,0x3a7,0x501,0xa42,0x3a7,0xa48,0x41e,0xa4d,0xa55,0x3a7,
+0x3a7,0xa5a,0x3a7,0x3a7,0x3a7,0x3a7,0x836,0xa62,0x41e,0x5a3,0x57e,0xa69,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0xa25,0xa71,0x3a7,0x3a7,0xa79,0xa81,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xa85,0xa8d,0x3a7,
+0x3a7,0xa95,0x57e,0xa9d,0x3a7,0xaa3,0x3a7,0x3a7,0x60f,0xaab,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0xab0,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xab7,0xabf,0x3a7,0x3a7,0x3a7,0xac2,0x57e,0xaca,
+0xace,0xad6,0x3a7,0xadd,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0xae4,0x3a7,0x3a7,0xaf2,0xaec,0x3a7,0x3a7,0x3a7,0xafa,0xb02,0x3a7,0xb06,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x5a5,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xb13,0xb0e,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0xb1b,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xb22,
+0x3a7,0xb28,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0xa49,0x3a7,0xb2e,0x3a7,0x3a7,0xb36,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x535,0xb3e,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3f5,0xb46,0x500,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0xb4e,0xb56,0xb5c,0x3a7,0xb62,0x67c,0x67c,0xb6a,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x67c,0x67c,0xb72,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xb78,
+0x3a7,0xb7f,0x3a7,0xb7b,0x3a7,0xb82,0x3a7,0xb8a,0xb8e,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3f5,0xb96,0x3f5,0xb9d,0xba4,0xbac,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xbb4,0xbbc,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0xb28,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xa75,0x3a7,
+0xbc1,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0xbc9,
+0x43c,0xbd1,0xbd1,0xbd8,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,
+0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x91e,0x4a6,0x4a6,0x43c,
+0x43c,0x4a6,0x4a6,0xbe0,0x43c,0x43c,0x43c,0x43c,0x43c,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,0x4a6,
+0xbe8,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x43c,0x67c,0xbf0,0x67c,0x67c,0x67f,0xbf5,0xbf9,
+0x858,0xc01,0x3c9,0x3a7,0xc07,0x3a7,0xc0c,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x783,0x3a7,0x3a7,0x3a7,
+0x3a7,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,
+0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0xc14,
+0x98f,0x67c,0x67c,0x67c,0x67f,0x67c,0x67c,0xc1c,0xc24,0xbf0,0x67c,0xc2c,0x67c,0xc34,0xc39,0x3a7,
+0x3a7,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67c,0x67f,0xc41,0xc4d,0xc52,0xc5a,
+0xc49,0x67c,0x67c,0x67c,0x67c,0xc62,0x67c,0x792,0xc6a,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xc71,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,
+0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0x3a7,0xc71,0xc81,0xc79,0xc79,0xc79,0xc82,0xc82,0xc82,
+0xc82,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0x3f5,0xc8a,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,
+0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,
+0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,
+0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,
+0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0xc82,0x386,0x386,0x386,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8,9,0xa,0xa,4,
+4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2,
+2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0xa,0xa,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x12,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12,
+0x12,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,6,0xa,4,4,
+4,4,0xa,0xa,0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,4,4,2,2,
+0xa,0,0xa,0xa,0xa,2,0,0x900a,0xa,0xa,0xa,0xa,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0,
+0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xa,0xa,0,0,
-0,0,0,0,0,0,0xa,0,0,0,0,0,0xa,0xa,0,0xa,
+0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xa,0xa,0,0,0,0,0,0,
+0,0,0xa,0,0,0,0,0,0xa,0xa,0,0xa,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xa,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
+0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,
+0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xa,0,0,0xa,0xa,4,1,0xb1,0xb1,0xb1,
+0,0,0xa,0,0,0xa,0xa,4,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,
-0xb1,0xb1,1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,
-5,5,0xa,0xa,0xd,4,4,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0x8ad,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,
-0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,5,5,5,
-5,5,5,5,5,5,4,5,5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,
-0xd,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,
-0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,
+1,1,1,1,1,1,1,1,5,5,5,5,5,5,0xa,0xa,
+0xd,4,4,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xd,0x8ad,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,
+0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x8d,0x4d,0x4d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,5,5,5,5,5,5,5,
+5,5,4,5,5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d,
+0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
+0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
-0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d,0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,5,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,
-0xb1,0xb1,0x8d,0x8d,2,2,2,2,2,2,2,2,2,2,0x4d,0x4d,
-0x4d,0xd,0xd,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xad,0x8d,0xb1,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,
-0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,
-0x8d,0x4d,0x4d,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,
-0x8d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0x8d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,
+0x4d,0x4d,0x8d,0x8d,0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xa,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d,
+2,2,2,2,2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xad,
+0x8d,0xb1,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,
+0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xd,0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,
+0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,
-1,1,1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1,
+1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
-0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-1,1,0xa,0xa,0xa,0xa,0x21,1,1,0xb1,1,1,0xb1,0xb1,0xb1,0xb1,
-1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,
-0x41,0x41,0x81,0x81,0x41,0x81,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
-0x81,0x41,0x81,0x81,0x81,0xb1,0xb1,0xb1,1,1,1,1,0x4d,0xd,0x4d,0x4d,
-0x4d,0x4d,0xd,0x8d,0x4d,0x8d,0x8d,0xd,0xd,0xd,0xd,0xd,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,5,0xb1,
+0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,0xa,0xa,
+0xa,0xa,0x21,1,1,0xb1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,
+1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,
+0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x81,
+0x41,0x81,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x81,0x81,
+0x81,0xb1,0xb1,0xb1,1,1,1,1,0x4d,0xd,0x4d,0x4d,0x4d,0x4d,0xd,0x8d,
+0x4d,0x8d,0x8d,0xd,0xd,0xd,0xd,0xd,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
+0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x2d,0x2d,0x2d,0x4d,0xd,
+0xd,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0xd,5,5,0xd,0xd,0xd,0xd,0xd,0xd,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xb1,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,
-0x4d,0xd,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0x4d,0x8d,0x8d,0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,
+0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,4,4,0,0,0,0,0,0,0,4,0,0,0xb1,0,
+0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0,0,
0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
+0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,
0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,4,
-0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1,
-0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,
-0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,4,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,
+0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
+0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,
-0xa,4,0xa,0,0,0,0,0,0xb1,0,0,0,0xb1,0,0,0,
+0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,4,0xa,0,
+0,0,0,0,0xb1,0,0,0,0xb1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
+0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0,
+0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
+0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xa0,
-0,0,0,0,0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0,
+0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,
-0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0,4,0,0,0,0,0,0,0,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0,0,0xa0,0,0,0,0,
+0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0,0,4,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,
-0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
-0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0xb1,0xb1,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
+0,0,0,0,0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,
+0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x310a,0xf20a,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,
-0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
-0,0,0,4,0,0xb1,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0,0,0,0,0,0,0,0x310a,0xf20a,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4,
+0,0xb1,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0x40,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x4a,0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x40,0x40,0x40,0x40,0x40,0xb1,0x40,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0x4a,0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0xb1,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,
-0,0xb1,0xb1,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,
-0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb1,0,
-0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0xa,0,0,0,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x40,0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0xb1,0xb1,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,0,0,0,0xb1,
+0xb1,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,
+0,0xb1,0xb1,0xb1,0,0,0,0,0xa,0,0,0,0xa,0xa,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0,0,0,0,0,0,0,0xb1,0xb1,0,0,0xb1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xb1,0,0xb1,0xb1,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,
+0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0,
+0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0xb1,0,0,0,
-0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa,6,0x310a,0xf20a,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x814,0x815,
-0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0,2,2,2,2,
-2,2,3,3,0xa,0x310a,0xf20a,0,9,9,9,9,9,9,9,9,
-9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,
-4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,
-2,2,2,2,2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,
+0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,
+0xb1,0xb1,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
+0,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0,0,0,0,0,
-0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0,0,0,4,0,
-0,0,0,0,0,0,0,0,0,0,0xa,0xa,0,0,0,0,
-0x100a,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa,
+0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0,
+0xa,0xa,0xa,0xa,6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,
+0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
+2,0,0,0,2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,
+9,9,9,9,9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0,
+9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,4,4,4,4,4,0xa,0xa,0xa,
+0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,
+2,2,3,3,0xa,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0,
+0xa,0xa,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,
+0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,
+0,0xa,0,0,0,0,4,0,0,0,0,0,0,0,0,0,
+0,0,0xa,0xa,0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0,
+0,0,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
+0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,
+0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,
+0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,
+0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x900a,0x900a,0x900a,0x900a,0xa,0x900a,0xa,0x100a,0xa,
+0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,
+0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x900a,0x100a,0x100a,
+0x100a,0x100a,0x100a,0x100a,0x900a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,
+0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
+0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,
+0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,
+0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,
+0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,
+0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
-0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a,
-0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa,
-0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x900a,
-0x900a,0x900a,0x900a,0xa,0x900a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0xa,0xa,0xa,
-0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,
-0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a,
-0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0xa,
-0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,
-0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
-0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,
+0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,
+0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0x100a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0xa,0x300a,0xf00a,0xa,0x500a,0x100a,0xd00a,0xa,0xa,
+0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x900a,0x300a,0xf00a,0xa,
+0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,
+0xa,0x100a,0xa,0x100a,0x100a,0x100a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0x100a,0x900a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0xa,0xa,
+0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x710a,0x320a,0xf10a,
+0xb20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x900a,0x100a,0x100a,0x100a,0x100a,
+0x900a,0xa,0x100a,0x900a,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,
+0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x100a,0xa,0xa,0xa,
+0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x900a,0xa,
+0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
+0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,
+0x100a,0x100a,0xa,0xa,0x100a,0xa,0x100a,0xa,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,
+0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0xa,
-0x300a,0xf00a,0xa,0x500a,0x100a,0xd00a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0x300a,0xf00a,0xa,
-0xa,0xa,0xa,0xa,0x900a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x310a,0xf20a,
-0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a,0x100a,0x100a,0xa,0xa,
-0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x100a,0x100a,
-0x300a,0xf00a,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,
-0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x710a,0x320a,0xf10a,0xb20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,
-0xf20a,0xa,0xa,0x900a,0x100a,0x100a,0x100a,0x100a,0x900a,0xa,0x100a,0x900a,0x300a,0xf00a,0x100a,0x100a,
-0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0x100a,0x300a,0xf00a,0xa,0xa,
-0xa,0x100a,0xa,0xa,0xa,0xa,0x100a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,
-0x310a,0xf20a,0x310a,0xf20a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x900a,0x900a,0x900a,0x100a,0xa,
-0xa,0xa,0xa,0xa,0x300a,0xf00a,0x900a,0xa,0xa,0xa,0xa,0x100a,0xa,0xa,0xa,0x300a,
-0xf00a,0x300a,0xf00a,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,
-0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0x100a,0xa,0x100a,0xa,
-0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0xa,0xa,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,
-0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x100a,0x100a,
-0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0x300a,0xf00a,0xa,0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0xa,0xa,0x100a,
+0x100a,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
-0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x900a,0xa,
+0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,
+0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,
+0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,
+0xa,0xa,0xa,0xa,0x100a,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,0,0,0,0,0,0xa,0xa,0xa,
+0xa,0xa,0xa,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,
+0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,
+0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,
+0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,
+0xf20a,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x900a,0xa,
-0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xb1,
-0xb1,0xb1,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0,0,0,0xa,0,0,0,0,0,0,0,
+0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xa,0,0,0,0,0,0xa,0xa,
+0,0,0,0,0,0xa,0xa,0xa,9,0xa,0xa,0xa,0xa,0,0,0,
+0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,
+0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0x300a,0xf00a,0xa,0x300a,0xf00a,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,
-0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0xb1,0,0,0xa,0,0,0,0,0,0xa,0xa,0,0,0,0,
-0,0xa,0xa,0xa,9,0xa,0xa,0xa,0xa,0,0,0,0x310a,0xf20a,0x310a,0xf20a,
-0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xa,
-0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,
0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0,0,0,0xb1,0,0,0,0,0xb1,
+0,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xb1,0xb1,0,0xa,0xa,0xa,0xa,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0,
-0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-0x40,0x40,0x60,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
-0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0,0,
-0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,1,1,1,1,1,1,1,1,3,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0xb1,0,
+0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xa,0xa,0xa,0xa,
+0xb1,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
+0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+0x40,0x40,0x40,0x40,0x40,0x40,0x60,0,0xa,0xa,0xa,0xa,0,0,0,0,
+0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,
+0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,
+0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,
+0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,
+0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
+1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,1,0xb1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0,0,0,0,0,1,0xb1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a,
-0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa,
-0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xa,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,6,0xa,6,0,
+0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3,
+0x300a,0xf00a,0xa,0,0xa,4,4,0xa,0,0,0,0,0xd,0xd,0xd,0xd,
0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3,
-6,3,6,6,2,2,2,2,2,2,2,2,2,2,6,0xa,
-0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x510a,
-0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0,0,0,0,0,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0,0xa,0xa,4,
+4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2,
+2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,
-0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a,
+0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,4,0xa,0xa,
+0xa,4,4,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,0,0xa,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0,0,0,0xb1,2,2,2,2,2,2,2,2,2,2,2,
+0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xb1,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
+2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xa,
-1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,
+1,1,1,1,1,1,1,0xa,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,
+1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1,
-0x41,0x81,1,1,0x81,0xb1,0xb1,1,1,1,1,0x41,0x41,0x41,0x41,0x81,
+0xb1,0xb1,0xb1,1,1,1,1,0xb1,0x41,0x81,1,1,0x81,0xb1,0xb1,1,
+1,1,1,0x41,0x41,0x41,0x41,0x81,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x81,1,0x81,
+1,0x81,0x81,1,1,0x61,0x81,0x81,0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61,
+0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0x41,0x41,0x41,0x41,0x41,0x81,1,0x81,1,0x81,0x81,1,1,0x61,0x81,0x81,
-0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41,
+1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41,
+0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81,0x41,0x81,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0x81,0x81,0x81,0x81,0x41,0x41,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81,
-0x41,0x81,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,0x81,0x81,0x81,0x81,0x41,0x41,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0x4d,0x4d,0x8d,0x4d,0xb1,0xb1,0xb1,0xb1,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,5,5,5,5,5,5,5,5,
-5,5,0xd,0xd,0xd,0xd,0xd,0xd,0x6d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0x4d,0x8d,0x4d,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+5,5,5,5,5,5,5,5,5,5,0xd,0xd,0xd,0xd,0xd,0xd,
+0x6d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,
-1,1,1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,
-0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x8d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0x41,1,0x41,0x41,
-0x81,0x81,0x81,1,0x41,0x81,0x81,0x41,0x41,0x81,0x41,0x41,1,0x41,0x81,0x81,
-0x41,1,1,1,1,0x81,0x41,0x61,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,
-0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0xb1,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,
+1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+0x4d,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,
+0x8d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xd,0xd,0xd,0xd,0x41,0x41,0x41,0x41,0x81,0x81,0x41,0x41,0x41,0x41,0x41,0x41,
+0x41,0x41,0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x41,1,0x41,0x41,0x81,0x81,0x81,1,0x41,0x81,0x81,0x41,
+0x41,0x81,0x41,0x41,1,0x41,0x81,0x81,0x41,1,1,1,1,0x81,0x41,0x61,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,
+0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,
+0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
+0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,
+0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,
+0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
+0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0xb1,
+0,0,0,0,0,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,
-0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,
+0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,
+0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,
+0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0xb1,0,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,0,0,0,0,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
+0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa0,
+0xa0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
+0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xa0,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,0,
-0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0xb1,
+0,0,0,0,0,0,0,0,4,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xa0,0xa0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0xa0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,
-0,0xb1,0,0xb1,0,0,0,0,0,0,0,0,4,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
+0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,4,4,4,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0xa0,0xa0,0xa0,0xa0,
+0xa0,0xa0,0xa0,0xa0,0xa0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,4,4,4,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0xa,0,0xb1,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,
-0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,
+0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,
+0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0xb1,
0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,
0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,
0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0,0,0,0,0,
+0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+0,0,0,0,0,0,0,0,0,0,0,0x100a,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0x100a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0x100a,0,0,0,0,
+0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,
-0,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,
+2,2,2,2,2,2,2,2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
+0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,
+0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,
-0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,
-0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,0x41,0x41,0x41,0x41,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,4,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,
+1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
-0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xa1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,
-0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,2,2,2,2,
-2,2,2,2,2,2,2,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,
+0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,2,0xa,
0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0,0,0,
-0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,
-0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
+0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,
+0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,
0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,
0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
-0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,
+0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0,
+0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,
+0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
+2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,
+0,0,0x12,0x12,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
-0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
-0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0,0,0,0
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0,0,0,0
};
static const uint32_t ubidi_props_mirrors[40]={
@@ -808,7 +827,7 @@ static const uint32_t ubidi_props_mirrors[40]={
0x16029b8,0x4029f5,0x1802ade,0x1c02ae3,0x1a02ae4,0x1e02ae5,0xe02aee,0x602bfe
};
-static const uint8_t ubidi_props_jgArray[680]={
+static const uint8_t ubidi_props_jgArray[684]={
0x2d,0,3,3,0x2c,3,0x2d,3,4,0x2a,4,4,0xd,0xd,0xd,6,
6,0x1f,0x1f,0x23,0x23,0x21,0x21,0x28,0x28,1,1,0xb,0xb,0x37,0x37,0x37,
0,9,0x1d,0x13,0x16,0x18,0x1a,0x10,0x2c,0x2d,0x2d,0,0,0,0,0,
@@ -846,12 +865,12 @@ static const uint8_t ubidi_props_jgArray[680]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x5d,0x5a,0x60,0x63,0x5e,0x5f,0x59,0x61,0x5b,0x5c,0x62,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+3,3,3,0,0,0,0x66,0,0,0x1a,0xd,0x28,0x28,0xb,0x67,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,4,0xd,0x28,9,0x1d,0x16,0x18,0x2d,0x2d,0x1f,0x2c,0x39,0,6,0x21,
-0xb,0x55,0x1f,1,0x13,0,4,4,4,0x1f,0x2d,0x56,0x58,0x57,4,4,
-4,0xd,0xb,1,0x58,0xd,0xd,0x16
+0xb,0x55,0x1f,1,0x13,0x1d,4,4,4,0x1f,0x2d,0x56,0x58,0x57,4,4,
+4,0xd,0xb,1,0x58,0xd,0xd,0x16,0xb,0,0,0
};
static const uint8_t ubidi_props_jgArray2[612]={
@@ -904,16 +923,16 @@ static const UBiDiProps ubidi_props_singleton={
ubidi_props_jgArray2,
{
ubidi_props_trieIndex,
- ubidi_props_trieIndex+3568,
+ ubidi_props_trieIndex+3612,
NULL,
- 3568,
- 8968,
+ 3612,
+ 9264,
0x1a0,
- 0xe70,
+ 0xe9c,
0x0,
0x0,
0x110000,
- 0x30f4,
+ 0x3248,
NULL, 0, FALSE, FALSE, 0, NULL
},
{ 2,2,0,0 }
diff --git a/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp b/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp
index 3545f4e111c..fea239380a3 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp
@@ -31,7 +31,7 @@
* text in a single paragraph or in a line of a single paragraph
* which has already been processed according to
* the Unicode 6.3 BiDi algorithm as defined in
- * http://www.unicode.org/unicode/reports/tr9/ , version 28,
+ * https://www.unicode.org/reports/tr9/ , version 28,
* also described in The Unicode Standard, Version 6.3.0 .
*
* This means that there is a UBiDi object with a levels
@@ -530,7 +530,7 @@ static int32_t getRunFromLogicalIndex(UBiDi *pBiDi, int32_t logicalIndex) {
visualStart+=length;
}
/* we should never get here */
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
/*
diff --git a/Build/source/libs/icu/icu-src/source/common/ubrk.cpp b/Build/source/libs/icu/icu-src/source/common/ubrk.cpp
index f8bdf5a6b65..bb5bdd1b501 100644
--- a/Build/source/libs/icu/icu-src/source/common/ubrk.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ubrk.cpp
@@ -174,6 +174,18 @@ ubrk_safeClone(
return (UBreakIterator *)newBI;
}
+U_CAPI UBreakIterator * U_EXPORT2
+ubrk_clone(const UBreakIterator *bi, UErrorCode *status) {
+ if (U_FAILURE(*status)) {
+ return nullptr;
+ }
+ BreakIterator *newBI = ((BreakIterator *)bi)->clone();
+ if (newBI == nullptr) {
+ *status = U_MEMORY_ALLOCATION_ERROR;
+ return nullptr;
+ }
+ return (UBreakIterator *)newBI;
+}
U_CAPI void U_EXPORT2
diff --git a/Build/source/libs/icu/icu-src/source/common/ucase.cpp b/Build/source/libs/icu/icu-src/source/common/ucase.cpp
index 2b142f5bc24..4aa856507aa 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucase.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucase.cpp
@@ -351,7 +351,7 @@ strcmpMax(const UChar *s, int32_t length, const UChar *t, int32_t max) {
if(max==0 || *t==0) {
return 0; /* equal to length of both strings */
} else {
- return -max; /* return lengh difference */
+ return -max; /* return length difference */
}
}
@@ -681,7 +681,7 @@ ucase_isCaseSensitive(UChar32 c) {
* - In [CoreProps], C has one of the properties Uppercase, or Lowercase
* - Given D = NFD(C), then it is not the case that:
* D = UCD_lower(D) = UCD_upper(D) = UCD_title(D)
- * (This third criterium does not add any characters to the list
+ * (This third criterion does not add any characters to the list
* for Unicode 3.2. Ignored.)
*
* D2. A character C is defined to be case-ignorable
diff --git a/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h b/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
index aead6d58d1e..8bbf403cdca 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
@@ -1,6 +1,5 @@
-// © 2016 and later: Unicode, Inc. and others.
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
-//
// Copyright (C) 1999-2016, International Business Machines
// Corporation and others. All Rights Reserved.
//
@@ -8,148 +7,147 @@
//
// machine-generated by: icu/tools/unicode/c/genprops/casepropsbuilder.cpp
-
#ifdef INCLUDED_FROM_UCASE_CPP
-static const UVersionInfo ucase_props_dataVersion={0xd,0,0,0};
+static const UVersionInfo ucase_props_dataVersion={0xe,0,0,0};
-static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x70c2,0x6098,0x683,0x172,0,0,0,0,0,0,0,0,0,0,3};
+static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x7512,0x64e8,0x683,0x172,0,0,0,0,0,0,0,0,0,0,3};
-static const uint16_t ucase_props_trieIndex[12356]={
-0x336,0x33e,0x346,0x34e,0x35c,0x364,0x36c,0x374,0x37c,0x384,0x38b,0x393,0x39b,0x3a3,0x3ab,0x3b3,
-0x3b9,0x3c1,0x3c9,0x3d1,0x3d9,0x3e1,0x3e9,0x3f1,0x3f9,0x401,0x409,0x411,0x419,0x421,0x429,0x431,
-0x439,0x441,0x449,0x451,0x459,0x461,0x469,0x471,0x46d,0x475,0x47a,0x482,0x489,0x491,0x499,0x4a1,
-0x4a9,0x4b1,0x4b9,0x4c1,0x355,0x35d,0x4c6,0x4ce,0x4d3,0x4db,0x4e3,0x4eb,0x4ea,0x4f2,0x4f7,0x4ff,
-0x507,0x50e,0x512,0x355,0x355,0x355,0x519,0x521,0x529,0x52b,0x533,0x53b,0x53f,0x540,0x548,0x550,
-0x558,0x540,0x560,0x565,0x558,0x540,0x56d,0x575,0x53f,0x57d,0x585,0x58d,0x595,0x355,0x59d,0x355,
-0x5a5,0x4ec,0x5ad,0x58d,0x53f,0x57d,0x5b4,0x58d,0x5bc,0x5be,0x548,0x58d,0x53f,0x355,0x5c6,0x355,
-0x355,0x5cc,0x5d3,0x355,0x355,0x5d7,0x5df,0x355,0x5e3,0x5ea,0x355,0x5f1,0x5f9,0x600,0x608,0x355,
-0x355,0x60d,0x615,0x61d,0x625,0x62d,0x634,0x63c,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x644,0x355,0x355,0x654,0x654,0x64c,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x65c,0x65c,0x54c,0x54c,0x355,0x662,0x66a,0x355,
-0x672,0x355,0x67a,0x355,0x681,0x687,0x355,0x355,0x355,0x68f,0x355,0x355,0x355,0x355,0x355,0x355,
-0x696,0x355,0x69d,0x6a5,0x355,0x6ad,0x6b5,0x355,0x57c,0x6b8,0x6c0,0x6c6,0x5bc,0x6ce,0x355,0x6d5,
-0x355,0x6da,0x355,0x6e0,0x6e8,0x6ec,0x6f4,0x6fc,0x704,0x709,0x70c,0x714,0x724,0x71c,0x734,0x72c,
-0x37c,0x73c,0x37c,0x744,0x747,0x37c,0x74f,0x37c,0x757,0x75f,0x767,0x76f,0x777,0x77f,0x787,0x78f,
-0x797,0x79e,0x355,0x7a6,0x7ae,0x355,0x7b6,0x7be,0x7c6,0x7ce,0x7d6,0x7de,0x7e6,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x7e9,0x7ef,0x7f5,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x7fd,0x802,0x806,0x80e,0x37c,0x37c,0x37c,0x816,0x81e,0x825,0x355,0x82a,0x355,0x355,0x355,0x832,
-0x355,0x677,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x53e,0x83a,0x355,0x355,0x841,0x355,0x355,0x849,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x851,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x6e0,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x857,0x355,0x85f,0x864,0x86c,0x355,0x355,0x874,0x87c,0x884,0x37c,0x889,0x891,0x897,0x89f,0x8a2,
-0x8aa,0x8b1,0x355,0x355,0x355,0x355,0x8b8,0x8c0,0x355,0x8c8,0x8cf,0x355,0x529,0x8d4,0x8dc,0x681,
-0x355,0x8e2,0x8ea,0x8ee,0x355,0x8f6,0x8fe,0x906,0x355,0x90c,0x910,0x918,0x928,0x920,0x355,0x930,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x938,0x355,0x355,0x355,0x355,0x940,0x5bc,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x945,0x94d,0x951,0x355,0x355,0x355,0x355,0x338,0x33e,0x959,0x961,0x968,0x4ec,0x355,0x355,0x970,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0xd58,0xd58,0xd70,0xdb0,0xdf0,0xe2c,0xe6c,0xeac,0xee4,0xf24,0xf64,0xfa4,0xfe4,0x1024,0x1064,0x10a4,
-0x10e4,0x1124,0x1164,0x11a4,0x11b4,0x11e8,0x1224,0x1264,0x12a4,0x12e4,0xd54,0x1318,0x134c,0x138c,0x13a8,0x13dc,
-0x9e1,0xa11,0xa51,0xa90,0x188,0x188,0xac8,0x188,0x188,0x188,0x188,0x188,0x188,0xaf1,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xb31,0x188,0x188,0xb66,0xba5,0xbe5,0xc1f,0xc56,0x188,
+static const uint16_t ucase_props_trieIndex[12908]={
+0x354,0x35c,0x364,0x36c,0x37a,0x382,0x38a,0x392,0x39a,0x3a2,0x3a9,0x3b1,0x3b9,0x3c1,0x3c9,0x3d1,
+0x3d7,0x3df,0x3e7,0x3ef,0x3f7,0x3ff,0x407,0x40f,0x417,0x41f,0x427,0x42f,0x437,0x43f,0x447,0x44f,
+0x457,0x45f,0x467,0x46f,0x477,0x47f,0x487,0x48f,0x48b,0x493,0x498,0x4a0,0x4a7,0x4af,0x4b7,0x4bf,
+0x4c7,0x4cf,0x4d7,0x4df,0x373,0x37b,0x4e4,0x4ec,0x4f1,0x4f9,0x501,0x509,0x508,0x510,0x515,0x51d,
+0x525,0x52c,0x530,0x373,0x537,0x354,0x547,0x53f,0x54f,0x551,0x559,0x561,0x565,0x566,0x56e,0x576,
+0x57e,0x566,0x586,0x58b,0x57e,0x566,0x593,0x59b,0x565,0x5a3,0x5ab,0x5b3,0x5bb,0x373,0x5c3,0x373,
+0x5cb,0x5cd,0x5d5,0x5b3,0x565,0x5a3,0x5dc,0x5b3,0x5e4,0x5e6,0x56e,0x5b3,0x565,0x373,0x5ee,0x373,
+0x373,0x5f4,0x5fb,0x373,0x373,0x5ff,0x607,0x373,0x60b,0x612,0x373,0x619,0x621,0x628,0x630,0x373,
+0x373,0x635,0x63d,0x645,0x64d,0x655,0x65c,0x664,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x66c,0x373,0x373,0x67c,0x67c,0x674,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x684,0x68a,0x572,0x572,0x373,0x690,0x698,0x373,
+0x6a0,0x373,0x6a8,0x373,0x6af,0x6b5,0x373,0x373,0x373,0x6bd,0x373,0x373,0x373,0x373,0x373,0x373,
+0x6c4,0x373,0x6cb,0x6d3,0x373,0x6db,0x6e3,0x373,0x5a2,0x6e7,0x6ef,0x6f5,0x5e4,0x6fd,0x373,0x704,
+0x373,0x709,0x373,0x70f,0x717,0x71b,0x723,0x72b,0x733,0x738,0x73b,0x743,0x753,0x74b,0x763,0x75b,
+0x39a,0x76b,0x39a,0x773,0x776,0x39a,0x77e,0x39a,0x786,0x78e,0x796,0x79e,0x7a6,0x7ae,0x7b6,0x7be,
+0x7c6,0x7cd,0x373,0x7d5,0x7dd,0x373,0x7e5,0x7ed,0x7f5,0x7fd,0x805,0x80d,0x815,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x818,0x81e,0x824,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x82c,0x830,0x834,0x83c,0x39a,0x39a,0x39a,0x844,0x84c,0x853,0x373,0x858,0x373,0x373,0x373,0x860,
+0x373,0x6a5,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x564,0x868,0x373,0x373,0x86f,0x373,0x373,0x877,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x87f,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x70f,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x885,0x373,0x88d,0x892,0x89a,0x373,0x373,0x8a2,0x8aa,0x8b2,0x39a,0x8b7,0x8bf,0x8c5,0x8cc,0x8d3,
+0x8db,0x8e2,0x373,0x373,0x373,0x373,0x8e9,0x8f1,0x373,0x8f9,0x900,0x373,0x54f,0x905,0x90d,0x6af,
+0x373,0x913,0x91b,0x91f,0x373,0x927,0x92f,0x937,0x373,0x93d,0x941,0x949,0x959,0x951,0x373,0x961,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x969,0x373,0x373,0x373,0x373,0x971,0x54f,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x976,0x97e,0x982,0x373,0x373,0x373,0x373,0x356,0x35c,0x98a,0x992,0x999,0x50a,0x373,0x373,0x9a1,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0xdd0,0xdd0,0xde8,0xe28,0xe68,0xea4,0xee4,0xf24,0xf5c,0xf9c,0xfdc,0x101c,0x105c,0x109c,0x10dc,0x111c,
+0x115c,0x119c,0x11dc,0x121c,0x122c,0x1260,0x129c,0x12dc,0x131c,0x135c,0xdcc,0x1390,0x13c4,0x1404,0x1420,0x1454,
+0x9e1,0xa1f,0xa5f,0xa9e,0x188,0x188,0xad6,0x188,0x188,0x188,0x188,0x188,0x188,0xaff,0x188,0x188,
+0x188,0x188,0x188,0x188,0x188,0xb3f,0x188,0xb7f,0x188,0xba5,0xbe0,0xc1f,0xc5f,0xc99,0xcd0,0x188,
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
@@ -174,212 +172,222 @@ static const uint16_t ucase_props_trieIndex[12356]={
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0xc96,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x977,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x6b5,0x355,0x355,0x355,0x97f,0x355,0x355,0x355,
-0x355,0x987,0x98d,0x991,0x355,0x355,0x995,0x999,0x99f,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x9a7,0x9ab,0x355,0x355,0x355,0x355,0x355,0x9b3,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x9bb,0x9bf,0x9c7,0x9cb,0x355,0x9d2,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x9d8,0x355,0x355,0x355,0x355,0x9df,0x355,0x355,0x355,0x355,
-0x355,0x53f,0x9e4,0x9eb,0x5bd,0x5bc,0x9ef,0x53c,0x355,0x9f7,0x9fe,0x355,0xa04,0x5bc,0xa09,0xa11,
-0x355,0x355,0xa16,0x355,0x355,0x355,0x355,0x338,0xa1e,0x5bc,0x5be,0xa26,0xa2d,0x355,0x355,0x355,
-0x355,0x355,0x9e4,0xa35,0x355,0x355,0xa3d,0xa45,0x355,0x355,0x355,0x355,0x355,0x355,0xa49,0xa51,
-0x355,0x355,0xa59,0x4b0,0x355,0x355,0xa61,0x355,0x355,0xa67,0xa6f,0x355,0x355,0x355,0x355,0x355,
-0x355,0xa74,0x355,0x355,0x355,0xa7c,0xa84,0x355,0x355,0xa8c,0xa94,0x355,0x355,0x355,0xa97,0x6b5,
-0xa9f,0xaa3,0xaab,0x355,0xab2,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0xab9,0x355,0x355,0x940,0xac1,0x355,0x355,0x355,0xac7,0xacf,0x355,0xad3,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xad9,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xadf,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xae6,0x355,0xaec,0x57c,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0xa7c,0xa84,0x355,0x355,0x355,0x355,0x355,0x355,0x677,0x355,0xaf2,0x355,0x355,
-0xafa,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0xaff,0x57c,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0xb07,0xb0f,0xb15,0x355,0x355,0x355,0x355,0xb1d,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0xb25,0xb2d,0xb32,0xb38,0xb40,0xb48,0xb50,0xb29,0xb58,0xb60,
-0xb68,0xb6f,0xb2a,0xb25,0xb2d,0xb28,0xb38,0xb2b,0xb26,0xb77,0xb29,0xb7f,0xb87,0xb8f,0xb96,0xb82,
-0xb8a,0xb92,0xb99,0xb85,0xba1,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x87c,0xba9,0x87c,0xbb0,0xbb7,0xbbf,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0xbc7,0xbcf,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xbd3,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x9d0,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0xbdb,0x355,0xbe3,0xbeb,0xbf2,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0xb21,
-0xbfa,0xbfa,0xc00,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x9f9,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x53f,0x87c,0x87c,0x87c,0x355,0x355,0x355,0x355,0x87c,0x87c,
-0x87c,0x87c,0x87c,0x87c,0x87c,0xc08,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,0x355,
-0x355,0x355,0x355,0x355,0x355,0x355,0x335,0x335,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
-0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,
-0,0,4,0,0,0,0,0,0,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
-0x1012,0xa,0x5a,0x7a,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0xba,0x1012,0x1012,0x1012,0x1012,
-0x1012,0x1012,0x1012,0,0,0,4,0,4,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
-0xf011,0xf9,0xf031,0x149,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0x189,0xf011,0xf011,0xf011,0xf011,
-0xf011,0xf011,0xf011,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,1,0,0,4,0,4,
-0,0,0,0,4,0x1c9,0,4,4,0,1,0,0,0,0,0,
-0x1012,0x1012,0x1012,0x1012,0x1012,0x1fa,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x5a,0x5a,0x1012,0x1012,
-0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x239,
-0xf011,0xf011,0xf011,0xf011,0xf011,0x2d9,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
-0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0x3c91,
+0xd10,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x9a8,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x9b0,0x373,0x373,0x373,0x9b3,0x373,0x373,0x373,
+0x373,0x9bb,0x9c1,0x9c5,0x373,0x373,0x9c9,0x9cd,0x9d3,0x373,0x373,0x373,0x9da,0x9de,0x9e6,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x9f6,0x9ee,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x9fe,
+0xa02,0x373,0x373,0x373,0x373,0x373,0xa0a,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0xa12,0xa16,0xa1e,0xa22,0x373,0xa29,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0xa2f,0x373,0x373,0x373,0x373,0xa36,0x373,0xa3e,0x373,0x373,0x373,0x565,
+0xa40,0xa47,0xa4b,0x5e4,0xa53,0xa5b,0x373,0xa63,0xa6a,0x373,0xa70,0x5e4,0xa75,0xa7d,0x373,0x373,
+0xa82,0x373,0x373,0x373,0x373,0x356,0xa8a,0x5e4,0x5e6,0xa92,0xa99,0x373,0x373,0x373,0x373,0x373,
+0xa40,0xaa1,0x373,0x373,0xaa9,0xab1,0x373,0x373,0x373,0x373,0x373,0x373,0xab5,0xabd,0x373,0x373,
+0xac5,0x4ce,0x373,0x373,0xacd,0x373,0x373,0xad3,0xadb,0x373,0x373,0x373,0x373,0x373,0x373,0xae0,
+0x373,0x373,0x373,0xae8,0xaf0,0x373,0x373,0xaf8,0xb00,0x373,0x373,0x373,0xb03,0x9b0,0xb0b,0xb0f,
+0xb17,0x373,0xb1e,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xb25,
+0x373,0x373,0x971,0xb2d,0x373,0x373,0x373,0xb33,0xb3b,0x373,0xb3f,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0xb45,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xb4b,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0xb52,0x373,0xb58,0x5a2,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0xae8,0xaf0,0x373,0x373,0x373,0x373,0x373,0x373,0x6a5,0x373,0xb5e,0x373,0x373,0xb66,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xb6b,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0xb73,0x5a2,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x8aa,0xb7b,0xb82,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xb89,0xb91,0xb97,0x373,0x373,
+0x373,0x373,0xb9f,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0xba7,0xbaf,0xbb4,0xbba,0xbc2,0xbca,0xbd2,0xbab,0xbda,0xbe2,0xbea,0xbf1,0xbac,0xba7,0xbaf,0xbaa,
+0xbba,0xbad,0xba8,0xbf9,0xbab,0xc01,0xc09,0xc11,0xc18,0xc04,0xc0c,0xc14,0xc1b,0xc07,0xc23,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x8aa,
+0xc2b,0x8aa,0xc32,0xc39,0xc41,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xc51,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xc49,
+0xc59,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xc5d,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0xaa5,0x373,0xa27,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xc65,
+0x373,0xc6d,0xc75,0xc7c,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xba3,0xc84,0xc84,0xc8a,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0xa65,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x565,0x8aa,0x8aa,0x8aa,0x373,0x373,0x373,0x373,0x8aa,0x8aa,0x8aa,0x8aa,0x8aa,0x8aa,0x8aa,0xc92,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,0x373,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,4,0,0,0,0,0,0,4,0,
+0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,
+0,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0xa,0x5a,0x7a,0x1012,0x1012,0x1012,0x1012,
+0x1012,0x1012,0x1012,0xba,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0,0,0,4,0,
+4,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf9,0xf031,0x149,0xf011,0xf011,0xf011,0xf011,
+0xf011,0xf011,0xf011,0x189,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+4,0,1,0,0,4,0,4,0,0,0,0,4,0x1c9,0,4,
+4,0,1,0,0,0,0,0,0x1012,0x1012,0x1012,0x1012,0x1012,0x1fa,0x1012,0x1012,
+0x1012,0x1012,0x1012,0x1012,0x5a,0x5a,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0,
+0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x239,0xf011,0xf011,0xf011,0xf011,0xf011,0x2d9,0xf011,0xf011,
+0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,
+0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0x3c91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x31a,0xff91,0x92,0xff91,0x92,0xff91,0x31a,0xffb1,
-0x33a,0x389,0x92,0xff91,0x92,0xff91,0x92,0xff91,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,
-0xff91,0x92,0xff91,0x92,0xff91,0x3d9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x31a,0xff91,0x92,0xff91,0x92,0xff91,0x31a,0xffb1,0x33a,0x389,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x3d9,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0xc392,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x459,0x6191,0x6912,0x92,0xff91,
-0x92,0xff91,0x6712,0x92,0xff91,0x6692,0x6692,0x92,0xff91,1,0x2792,0x6512,0x6592,0x92,0xff91,0x6692,
-0x6792,0x3091,0x6992,0x6892,0x92,0xff91,0x5191,1,0x6992,0x6a92,0x4111,0x6b12,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x6d12,0x92,0xff91,0x6d12,1,1,0x92,0xff91,0x6d12,0x92,0xff91,0x6c92,0x6c92,0x92,
-0xff91,0x92,0xff91,0x6d92,0x92,0xff91,1,0,0x92,0xff91,1,0x1c11,0,0,0,0,
-0x48a,0x4bb,0x4f9,0x52a,0x55b,0x599,0x5ca,0x5fb,0x639,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,
-0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0xd891,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x669,0x6ea,0x71b,0x759,
-0x92,0xff91,0xcf92,0xe412,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0xc392,0x92,0xff91,0x92,
+0xff91,0x92,0xff91,0x459,0x6191,0x6912,0x92,0xff91,0x92,0xff91,0x6712,0x92,0xff91,0x6692,0x6692,0x92,
+0xff91,1,0x2792,0x6512,0x6592,0x92,0xff91,0x6692,0x6792,0x3091,0x6992,0x6892,0x92,0xff91,0x5191,1,
+0x6992,0x6a92,0x4111,0x6b12,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x6d12,0x92,0xff91,0x6d12,1,1,
+0x92,0xff91,0x6d12,0x92,0xff91,0x6c92,0x6c92,0x92,0xff91,0x92,0xff91,0x6d92,0x92,0xff91,1,0,
+0x92,0xff91,1,0x1c11,0,0,0,0,0x48a,0x4bb,0x4f9,0x52a,0x55b,0x599,0x5ca,0x5fb,
+0x639,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,
+0xff91,0xd891,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x669,0x6ea,0x71b,0x759,0x92,0xff91,0xcf92,0xe412,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0xbf12,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,1,1,1,1,1,1,0x78a,0x92,
-0xff91,0xae92,0x7aa,0x7c9,0x7c9,0x92,0xff91,0x9e92,0x2292,0x2392,0x92,0xff91,0x92,0xffb1,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x7e9,0x809,0x829,0x9711,0x9911,1,0x9991,0x9991,1,0x9b11,1,0x9a91,
-0x849,1,1,1,0x9991,0x869,1,0x9891,1,0x889,0x8a9,1,0x97b1,0x9691,0x8a9,0x8c9,
-0x8e9,1,1,0x9691,1,0x909,0x9591,1,1,0x9511,1,1,1,1,1,1,
-1,0x929,1,1,0x9311,1,0x949,0x9311,1,1,1,0x969,0x9311,0xdd91,0x9391,0x9391,
-0xdc91,1,1,1,1,1,0x9291,1,0,1,1,1,1,1,1,1,
-1,0x989,0x9a9,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,5,5,0x25,5,5,5,5,5,5,4,4,4,
-0x14,4,0x14,4,5,5,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,0x54,0x54,0x44,0x44,0x44,0x44,0x44,0x9cc,0x54,0x44,0x54,0x44,
-0x54,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
-0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
-0x64,0x64,0x64,0x64,0x64,0x74,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
-0x64,0x44,0x44,0x44,0x44,0x44,0x54,0x44,0x44,0x9dd,0x44,0x64,0x64,0x64,0x44,0x44,
-0x44,0x64,0x64,4,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x44,
-0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x92,0xff91,0x92,0xff91,4,4,0x92,0xff91,0,0,5,0x4111,
-0x4111,0x4111,0,0x3a12,0,0,0,0,4,4,0x1312,4,0x1292,0x1292,0x1292,0,
-0x2012,0,0x1f92,0x1f92,0xa29,0x1012,0xafa,0x1012,0x1012,0xb3a,0x1012,0x1012,0xb7a,0xbca,0xc1a,0x1012,
-0xc5a,0x1012,0x1012,0x1012,0xc9a,0xcda,0,0xd1a,0x1012,0x1012,0xd5a,0x1012,0x1012,0xd9a,0x1012,0x1012,
-0xed11,0xed91,0xed91,0xed91,0xdd9,0xf011,0xea9,0xf011,0xf011,0xee9,0xf011,0xf011,0xf29,0xf79,0xfc9,0xf011,
-0x1009,0xf011,0xf011,0xf011,0x1049,0x1089,0x10c9,0x10f9,0xf011,0xf011,0x1139,0xf011,0xf011,0x1179,0xf011,0xf011,
-0xe011,0xe091,0xe091,0x412,0x11b9,0x11e9,2,2,2,0x1239,0x1269,0xfc11,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0xbf12,1,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x1299,0x12c9,0x391,0xc631,0x12fa,0x1349,0,0x92,0xff91,0xfc92,0x92,0xff91,
-1,0xbf12,0xbf12,0xbf12,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,
-0x2812,0x2812,0x2812,0x2812,0x1012,0x1012,0x137a,0x1012,0x13ba,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
-0x1012,0x1012,0x13fa,0x1012,0x1012,0x143a,0x147a,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x14ca,0x1012,
-0x1012,0x1012,0x1012,0x1012,0xf011,0xf011,0x1509,0xf011,0x1549,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
-0xf011,0xf011,0x1589,0xf011,0xf011,0x15c9,0x1609,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0x1659,0xf011,
-0xf011,0xf011,0xf011,0xf011,0xd811,0xd811,0xd811,0xd811,0xd811,0xd811,0xd831,0xd811,0xd831,0xd811,0xd811,0xd811,
-0xd811,0xd811,0xd811,0xd811,0x92,0xff91,0x169a,0x16d9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44,0x44,0x44,0x44,0x44,4,4,0x92,0xff91,
+1,1,1,1,1,1,0x78a,0x92,0xff91,0xae92,0x7aa,0x7c9,0x7c9,0x92,0xff91,0x9e92,
+0x2292,0x2392,0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x7e9,0x809,0x829,0x9711,
+0x9911,1,0x9991,0x9991,1,0x9b11,1,0x9a91,0x849,1,1,1,0x9991,0x869,1,0x9891,
+1,0x889,0x8a9,1,0x97b1,0x9691,0x8a9,0x8c9,0x8e9,1,1,0x9691,1,0x909,0x9591,1,
+1,0x9511,1,1,1,1,1,1,1,0x929,1,1,0x9311,1,0x949,0x9311,
+1,1,1,0x969,0x9311,0xdd91,0x9391,0x9391,0xdc91,1,1,1,1,1,0x9291,1,
+0,1,1,1,1,1,1,1,1,0x989,0x9a9,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,5,5,0x25,5,
+5,5,5,5,5,4,4,4,0x14,4,0x14,4,5,5,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,
+5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,0x54,0x54,0x44,0x44,
+0x44,0x44,0x44,0x9cc,0x54,0x44,0x54,0x44,0x54,0x44,0x44,0x44,0x44,0x44,0x44,0x54,
+0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
+0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x74,0x64,0x64,
+0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x54,0x44,
+0x44,0x9dd,0x44,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x64,4,0x44,0x44,0x44,0x64,
+0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x92,0xff91,0x92,0xff91,
+4,4,0x92,0xff91,0,0,5,0x4111,0x4111,0x4111,0,0x3a12,0,0,0,0,
+4,4,0x1312,4,0x1292,0x1292,0x1292,0,0x2012,0,0x1f92,0x1f92,0xa29,0x1012,0xafa,0x1012,
+0x1012,0xb3a,0x1012,0x1012,0xb7a,0xbca,0xc1a,0x1012,0xc5a,0x1012,0x1012,0x1012,0xc9a,0xcda,0,0xd1a,
+0x1012,0x1012,0xd5a,0x1012,0x1012,0xd9a,0x1012,0x1012,0xed11,0xed91,0xed91,0xed91,0xdd9,0xf011,0xea9,0xf011,
+0xf011,0xee9,0xf011,0xf011,0xf29,0xf79,0xfc9,0xf011,0x1009,0xf011,0xf011,0xf011,0x1049,0x1089,0x10c9,0x10f9,
+0xf011,0xf011,0x1139,0xf011,0xf011,0x1179,0xf011,0xf011,0xe011,0xe091,0xe091,0x412,0x11b9,0x11e9,2,2,
+2,0x1239,0x1269,0xfc11,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x1299,0x12c9,0x391,0xc631,
+0x12fa,0x1349,0,0x92,0xff91,0xfc92,0x92,0xff91,1,0xbf12,0xbf12,0xbf12,0x2812,0x2812,0x2812,0x2812,
+0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x2812,0x1012,0x1012,0x137a,0x1012,
+0x13ba,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x13fa,0x1012,0x1012,0x143a,0x147a,0x1012,
+0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x14ca,0x1012,0x1012,0x1012,0x1012,0x1012,0xf011,0xf011,0x1509,0xf011,
+0x1549,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0x1589,0xf011,0xf011,0x15c9,0x1609,0xf011,
+0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0x1659,0xf011,0xf011,0xf011,0xf011,0xf011,0xd811,0xd811,0xd811,0xd811,
+0xd811,0xd811,0xd831,0xd811,0xd831,0xd811,0xd811,0xd811,0xd811,0xd811,0xd811,0xd811,0x92,0xff91,0x169a,0x16d9,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44,
+0x44,0x44,0x44,0x44,4,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x792,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,
-0xff91,0x92,0xff91,0xf891,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x792,0x92,0xff91,0x92,
+0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0xf891,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
-0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,
-0,4,0,0,0,0,0,4,1,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x1812,0x1812,0x1812,
+0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
+0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,0,4,0,0,0,0,0,4,
+1,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
-0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0x1719,1,0,0,0,
-0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64,
-0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x44,
-0x44,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
-0x64,0x64,0,0x64,0,0x64,0x64,0,0x44,0x64,0,0x64,0,0,0,0,
+0xe811,0xe811,0xe811,0x1719,1,0,0,0,0,0,0,0,0,0x64,0x44,0x44,
+0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,
+0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,0x64,0x64,0x64,0x64,
+0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0x64,0,0x64,0x64,0,
+0x44,0x64,0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0,
-0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0,
-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0x64,
-0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,
-0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,4,0,0x44,0x44,0x44,0x44,0x64,0x44,4,4,0x44,
-0x44,0,0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,0,0x64,0,0,
+4,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
+4,4,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,
+0x44,0x44,0x44,0x44,0x64,0x64,0x64,0,4,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x64,0x44,0x44,
-0x64,0x44,0x44,0x64,0x64,0x64,0x44,0x64,0x64,0x44,0x64,0x44,0x44,0x44,0x64,0x44,
-0x64,0x44,0x64,0x44,0x64,0x44,0x44,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,
+0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,0,0x44,
+0x44,0x44,0x44,0x64,0x44,4,4,0x44,0x44,0,0x64,0x44,0x44,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,
-4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,
+0,0,0,4,0,0x64,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x44,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x44,0x64,
+0x64,0x44,0x64,0x44,0x44,0x44,0x64,0x44,0x64,0x44,0x64,0x44,0x64,0x44,0x44,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,
-4,4,0,0,0,0,4,0,0,0x64,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,
-4,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,4,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x44,0x44,
-0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,
-0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,
+4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,0,0x64,0,0,0,0,4,4,4,
-4,4,4,4,4,0,0,0,0,0x64,0,0,0,0x44,0x64,0x44,
-0x44,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,4,4,0,0,0,0,4,0,
+0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,4,0x44,
+0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0x64,0x64,0x64,0,0,0,0,
+0,0,0,0,4,0,0,0,0,0,0,0,4,4,0,0,
+0,0,0,0,0x44,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,4,0x64,
+0x44,0x44,0x64,0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,
+0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0,0,0,0,
+0,0,0,0,0,4,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,
+0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,4,4,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
+0x64,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,
+0,0x64,0,0,0,0x44,0x64,0x44,0x44,4,4,4,0,0,0,0,
+0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,
-0,4,4,4,4,0,0,0,0,0,0,0,0,0x64,0,0,
+0,0,0,0,0x64,0,0,0,0,4,4,4,4,0,0,0,
+0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0,
-0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x44,0,0,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,4,0,0,0,0,4,4,0,0,4,4,0x64,0,0,
-0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0,0,0,4,0,0,0,0,0,0,
-0,0,0,0,0,4,4,4,4,4,0,4,4,0,0,0,
-0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,4,
+4,0,0,4,4,0x64,0,0,0,4,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,
+0,4,0,0,0,0,0,0,0,0,0,0,0,4,4,4,
+4,4,0,4,4,0,0,0,0,0x64,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,
-4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x64,0,0,4,0,4,4,4,4,0,0,0,0,0,0,0,
-0,0x64,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
-0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,4,4,4,4,4,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x64,0,0,4,0,4,4,4,
+4,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,
+0,4,4,0,0,0,0,0,0,0,0,0,0,0,4,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
-0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,0,0,0,0,0,4,4,4,0,4,4,
+0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x64,0,4,4,4,0,0,0,0,0,4,4,4,0,4,4,
4,0x64,0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,
0,0,0,0,0,0,4,0,0,0,0,0,4,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -424,206 +432,209 @@ static const uint16_t ucase_props_trieIndex[12356]={
0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,
0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,0x201a,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,
-4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,0,
-0,4,4,4,4,4,4,4,4,4,0x64,4,0,0,0,4,
-0,0,0,0,0,0x44,0,0,0,0,0,0,0,0,0,0,
-0,0,0,4,4,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
+0,0,4,4,0x64,0x60,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,4,4,0x60,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
+0,0,0,0,4,4,0,4,4,4,4,4,4,4,0,0,
+0,0,0,0,0,0,4,0,0,4,4,4,4,4,4,4,
+4,4,0x64,4,0,0,0,4,0,0,0,0,0,0x44,0,0,
+0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,0,
-0,0,0,4,4,0,0,0,0,0,0,0,0,0,4,0,
-0,0,0,0,0,0x64,0x44,0x64,0,0,0,0,0,0,0,0,
+0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,4,4,0,0,0,0,4,4,0,0,0,
+0,0,0,0,0,0,4,0,0,0,0,0,0,0x64,0x44,0x64,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x44,0x64,0,0,4,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,4,0,4,4,4,4,4,4,4,0,0x64,0,4,0,
+0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,4,
+4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0x64,0,0,0,0,
+0,0,0,4,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,
+0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,4,0x64,0x64,0x44,0x44,0x64,
+0x64,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x44,0x44,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x64,0,4,4,4,4,4,0,4,0,0,0,0,0,4,0,
+0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,
-0x64,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,0,4,4,4,4,
-4,4,4,0,0x64,0,4,0,0,4,4,4,4,4,4,4,
-4,0,0,0,0,0,0,4,4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0,0,0x64,0,0,0,0,0,0,0,4,0,0,0,0,
-0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,
-0x44,0x64,4,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x64,0,4,4,4,4,4,0,4,0,0,0,
-0,0,4,0,0x60,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,0,
-4,4,0x60,0x64,4,4,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x64,0,4,4,0,0,
-0,4,0,4,4,4,0x60,0x60,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,4,4,4,4,4,4,0,0,4,0x64,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0,
-0x2179,0x21a9,0x21d9,0x2209,0x2239,0x2289,0x22d9,0x2309,0x2339,0,0,0,0,0,0,0,
-0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,
-0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0,0,0x236a,0x236a,0x236a,
+0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,4,4,4,4,0,0,4,4,0x60,0x64,
+4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x64,0,4,4,0,0,0,4,0,4,
+4,4,0x60,0x60,0,0,0,0,0,0,0,0,0,0,0,0,
+4,4,4,4,4,4,4,4,0,0,4,0x64,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0x44,0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,
-0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0,
-0,0,0,0,0x44,0,0,0,0x44,0x44,0,0,0,0,0,0,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0,0,0,0,4,4,4,4,4,4,0,0,0x2179,0x21a9,0x21d9,0x2209,
+0x2239,0x2289,0x22d9,0x2309,0x2339,0,0,0,0,0,0,0,0x236a,0x236a,0x236a,0x236a,
+0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,
+0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0x236a,0,0,0x236a,0x236a,0x236a,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0,
+0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0,0x64,0x64,
+0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0,0,0,0,0,
+0x44,0,0,0,0x44,0x44,0,0,0,0,0,0,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x25,5,5,5,5,5,5,5,5,1,1,1,1,1,
-1,1,1,1,1,1,1,1,5,0x2389,1,1,1,0x23a9,1,1,
-5,5,5,5,0x25,5,5,5,0x25,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x23c9,1,
-1,1,1,1,1,1,0x21,1,1,1,1,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x25,5,
+5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,
+1,1,1,1,5,0x2389,1,1,1,0x23a9,1,1,5,5,5,5,
+0x25,5,5,5,0x25,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0x23c9,1,1,1,1,1,
+1,1,0x21,1,1,1,1,5,5,5,5,5,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0,0x44,0x64,0x64,0x44,0x64,
-0x44,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,
-0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,
+0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x44,0x64,0x64,0x44,0x64,0x44,0x44,0x64,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x44,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x23ea,0x2429,0x92,0xff91,
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x23ea,0x2429,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x2469,0x24e9,0x2569,0x25e9,0x2669,0x26e9,1,1,0x271a,1,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
-0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,
-0x411,0x411,0,0,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x2769,0x411,0x27e9,0x411,
-0x2899,0x411,0x2949,0x411,0,0xfc12,0,0xfc12,0,0xfc12,0,0xfc12,0x411,0x411,0x411,0x411,
-0x411,0x411,0x411,0x411,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x2511,0x2511,0x2b11,0x2b11,
-0x2b11,0x2b11,0x3211,0x3211,0x4011,0x4011,0x3811,0x3811,0x3f11,0x3f11,0,0,0x29f9,0x2a69,0x2ad9,0x2b49,
-0x2bb9,0x2c29,0x2c99,0x2d09,0x2d7b,0x2deb,0x2e5b,0x2ecb,0x2f3b,0x2fab,0x301b,0x308b,0x30f9,0x3169,0x31d9,0x3249,
-0x32b9,0x3329,0x3399,0x3409,0x347b,0x34eb,0x355b,0x35cb,0x363b,0x36ab,0x371b,0x378b,0x37f9,0x3869,0x38d9,0x3949,
-0x39b9,0x3a29,0x3a99,0x3b09,0x3b7b,0x3beb,0x3c5b,0x3ccb,0x3d3b,0x3dab,0x3e1b,0x3e8b,0x411,0x411,0x3ef9,0x3f79,
-0x3fe9,0,0x4069,0x40e9,0xfc12,0xfc12,0xdb12,0xdb12,0x419b,4,0x4209,4,4,4,0x4259,0x42d9,
-0x4349,0,0x43c9,0x4449,0xd512,0xd512,0xd512,0xd512,0x44fb,4,4,4,0x411,0x411,0x4569,0x4619,
-0,0,0x46e9,0x4769,0xfc12,0xfc12,0xce12,0xce12,0,4,4,4,0x411,0x411,0x4819,0x48c9,
-0x4999,0x391,0x4a19,0x4a99,0xfc12,0xfc12,0xc812,0xc812,0xfc92,4,4,4,0,0,0x4b49,0x4bc9,
-0x4c39,0,0x4cb9,0x4d39,0xc012,0xc012,0xc112,0xc112,0x4deb,4,4,0,0,0,0,0,
-0,0,0,0,0,0,0,4,4,4,4,4,0,0,0,0,
-0,0,0,0,4,4,0,0,0,0,0,0,4,0,0,4,
-0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,4,
-4,4,4,4,4,4,4,4,0,0x25,0,0,0,0,0,0,
-0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,
-0x64,0x64,0x64,0x44,0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44,
-0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2,
-0,0,1,2,2,2,1,1,2,2,2,1,0,2,0,0,
-0,2,2,2,2,2,0,0,0,0,0,0,2,0,0x4e5a,0,
-2,0,0x4e9a,0x4eda,2,2,0,1,2,2,0xe12,2,1,0,0,0,
-0,1,0,0,1,1,2,2,0,0,0,0,0,2,1,1,
-0x21,0x21,0,0,0,0,0xf211,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,
-0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,
-0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0,0,0,0x92,0xff91,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,
-0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xf311,0xf311,0xf311,0xf311,
-0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x2469,0x24e9,
+0x2569,0x25e9,0x2669,0x26e9,1,1,0x271a,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xffb1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,
+0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0,0,
+0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,
+0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,
+0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0,0,
+0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0,0,0x2769,0x411,0x27e9,0x411,0x2899,0x411,0x2949,0x411,
+0,0xfc12,0,0xfc12,0,0xfc12,0,0xfc12,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,
+0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0xfc12,0x2511,0x2511,0x2b11,0x2b11,0x2b11,0x2b11,0x3211,0x3211,
+0x4011,0x4011,0x3811,0x3811,0x3f11,0x3f11,0,0,0x29f9,0x2a69,0x2ad9,0x2b49,0x2bb9,0x2c29,0x2c99,0x2d09,
+0x2d7b,0x2deb,0x2e5b,0x2ecb,0x2f3b,0x2fab,0x301b,0x308b,0x30f9,0x3169,0x31d9,0x3249,0x32b9,0x3329,0x3399,0x3409,
+0x347b,0x34eb,0x355b,0x35cb,0x363b,0x36ab,0x371b,0x378b,0x37f9,0x3869,0x38d9,0x3949,0x39b9,0x3a29,0x3a99,0x3b09,
+0x3b7b,0x3beb,0x3c5b,0x3ccb,0x3d3b,0x3dab,0x3e1b,0x3e8b,0x411,0x411,0x3ef9,0x3f79,0x3fe9,0,0x4069,0x40e9,
+0xfc12,0xfc12,0xdb12,0xdb12,0x419b,4,0x4209,4,4,4,0x4259,0x42d9,0x4349,0,0x43c9,0x4449,
+0xd512,0xd512,0xd512,0xd512,0x44fb,4,4,4,0x411,0x411,0x4569,0x4619,0,0,0x46e9,0x4769,
+0xfc12,0xfc12,0xce12,0xce12,0,4,4,4,0x411,0x411,0x4819,0x48c9,0x4999,0x391,0x4a19,0x4a99,
+0xfc12,0xfc12,0xc812,0xc812,0xfc92,4,4,4,0,0,0x4b49,0x4bc9,0x4c39,0,0x4cb9,0x4d39,
+0xc012,0xc012,0xc112,0xc112,0x4deb,4,4,0,0,0,0,0,0,0,0,0,
+0,0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,
+4,4,0,0,0,0,0,0,4,0,0,4,0,0,4,4,
+4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,4,4,4,4,0,4,4,4,4,4,4,
+4,4,4,4,0,0x25,0,0,0,0,0,0,0,0,0,0,
+0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x44,
+0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44,0x64,0x44,0x64,0x64,
+0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,2,0,0,0,0,2,0,0,1,2,
+2,2,1,1,2,2,2,1,0,2,0,0,0,2,2,2,
+2,2,0,0,0,0,0,0,2,0,0x4e5a,0,2,0,0x4e9a,0x4eda,
+2,2,0,1,2,2,0xe12,2,1,0,0,0,0,1,0,0,
+1,1,2,2,0,0,0,0,0,2,1,1,0x21,0x21,0,0,
+0,0,0xf211,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,0x812,
+0x812,0x812,0x812,0x812,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,0xf811,
+0xf811,0xf811,0xf811,0xf811,0,0,0,0x92,0xff91,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,
+0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xd12,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,
+0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0xf311,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
-0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
-0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0,0x92,0xff91,0x4f1a,0x4f3a,0x4f5a,0x4f79,0x4f99,0x92,
-0xff91,0x92,0xff91,0x92,0xff91,0x4fba,0x4fda,0x4ffa,0x501a,1,0x92,0xff91,1,0x92,0xff91,1,
-1,1,1,1,0x25,5,0x503a,0x503a,0x92,0xff91,0x92,0xff91,1,0,0,0,
-0,0,0,0x92,0xff91,0x92,0xff91,0x44,0x44,0x44,0x92,0xff91,0,0,0,0,
-0,0,0,0,0,0,0,0,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,
+0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
+0x92,0xff91,0x4f1a,0x4f3a,0x4f5a,0x4f79,0x4f99,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x4fba,0x4fda,0x4ffa,
+0x501a,1,0x92,0xff91,1,0x92,0xff91,1,1,1,1,1,0x25,5,0x503a,0x503a,
+0x92,0xff91,0x92,0xff91,1,0,0,0,0,0,0,0x92,0xff91,0x92,0xff91,0x44,
+0x44,0x44,0x92,0xff91,0,0,0,0,0,0,0,0,0,0,0,0,
0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,
-0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0,0x5059,0,0,0,0,
-0,0x5059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,0x5059,
+0x5059,0x5059,0,0x5059,0,0,0,0,0,0x5059,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,
-0,0,0x64,0x64,0x64,0x64,0x60,0x60,0,4,4,4,4,4,0,0,
-0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,4,
-4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x507a,0x50b9,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44,
-4,4,4,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,4,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,5,5,0x44,0x44,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-1,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,5,1,1,1,1,1,1,1,1,0x92,0xff91,0x92,
-0xff91,0x50fa,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,4,4,4,0x92,
-0xff91,0x511a,1,0,0x92,0xff91,0x92,0xff91,0x1811,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x513a,0x515a,0x517a,0x519a,0x513a,1,0x51ba,0x51da,0x51fa,0x521a,
-0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0,0x92,0xff91,
-0xe812,0x523a,0x525a,0x92,0xff91,0x92,0xff91,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x92,0xff91,0,
-5,5,1,0,0,0,0,0,0,0,4,0,0,0,0x64,0,
-0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,
-0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x64,4,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
-0,0,0,0,0,0,4,4,4,4,4,0x64,0x64,0x64,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,4,4,4,4,4,4,4,4,4,4,4,0,0x60,
+0,0,0,0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x60,0x60,
+0,4,4,4,4,4,0,0,0,0,0,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x64,0,0,4,4,4,4,0,0,4,4,0,0,
-0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
+0,0,0,0,0,0x64,0x64,4,4,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,4,4,4,4,4,4,0,0,4,4,0,0,4,4,0,
-0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,
-0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
-0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x44,0,0x44,0x44,0x64,0,0,0x44,
-0x44,0,0,0,0,0,0x44,0x44,0,0x44,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,0,0,0,0,0,4,4,0,0x64,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,0x5279,1,1,1,1,1,1,1,4,5,5,5,5,
-1,1,1,1,1,1,1,1,1,4,4,4,0,0,0,0,
-0x5299,0x52c9,0x52f9,0x5329,0x5359,0x5389,0x53b9,0x53e9,0x5419,0x5449,0x5479,0x54a9,0x54d9,0x5509,0x5539,0x5569,
-0x5b99,0x5bc9,0x5bf9,0x5c29,0x5c59,0x5c89,0x5cb9,0x5ce9,0x5d19,0x5d49,0x5d79,0x5da9,0x5dd9,0x5e09,0x5e39,0x5e69,
-0x5e99,0x5ec9,0x5ef9,0x5f29,0x5f59,0x5f89,0x5fb9,0x5fe9,0x6019,0x6049,0x6079,0x60a9,0x60d9,0x6109,0x6139,0x6169,
-0x5599,0x55c9,0x55f9,0x5629,0x5659,0x5689,0x56b9,0x56e9,0x5719,0x5749,0x5779,0x57a9,0x57d9,0x5809,0x5839,0x5869,
-0x5899,0x58c9,0x58f9,0x5929,0x5959,0x5989,0x59b9,0x59e9,0x5a19,0x5a49,0x5a79,0x5aa9,0x5ad9,0x5b09,0x5b39,0x5b69,
-0,0,0,0,0,4,0,0,4,0,0,0,0,0x64,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x6199,0x6219,0x6299,0x6319,0x63c9,0x6479,0x6519,0,0,0,0,0,0,0,0,0,
-0,0,0,0x65b9,0x6639,0x66b9,0x6739,0x67b9,0,0,0,0,0,0,0x64,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,0,0,0,4,0,0,0,0,0,0,0,0,
-0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,
-0x64,0x64,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,4,0,0,4,0,0,0,0,0,0,
-0,0,0,0,0,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
-0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0,
-0,0,4,0,4,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
-0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0,
+0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x507a,0x50b9,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0,0x44,4,4,4,0,0x44,0x44,0x44,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,0,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,5,5,0x44,0x44,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x44,0x44,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,1,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,5,1,1,1,
+1,1,1,1,1,0x92,0xff91,0x92,0xff91,0x50fa,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,4,4,4,0x92,0xff91,0x511a,1,0,0x92,0xff91,0x92,0xff91,
+0x1811,1,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x513a,0x515a,
+0x517a,0x519a,0x513a,1,0x51ba,0x51da,0x51fa,0x521a,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
+0x92,0xff91,0x92,0xff91,0xe812,0x523a,0x525a,0x92,0xff91,0x92,0xff91,0,0,0,0,0,
+0x92,0xff91,0,1,0,1,0x92,0xff91,0x92,0xff91,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,
+4,0x92,0xff91,0,5,5,1,0,0,0,0,0,0,0,4,0,
+0,0,0x64,0,0,0,0,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,
+0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x64,4,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,
+0,0,0,4,0,0,0,0,0,0,4,4,4,4,4,0x64,
+0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,
+4,4,0,0x60,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x64,0,0,4,4,4,4,0,0,
+4,4,0,0,0x60,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,
+0,0,0,0,0,4,4,4,4,4,4,0,0,4,4,0,
+0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,4,
+0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x44,0,0x44,0x44,
+0x64,0,0,0x44,0x44,0,0,0,0,0,0x44,0x44,0,0x44,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,4,
+4,0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0x5279,1,1,1,1,1,1,1,4,
+5,5,5,5,1,1,1,1,1,1,1,1,1,4,4,4,
+0,0,0,0,0x5299,0x52c9,0x52f9,0x5329,0x5359,0x5389,0x53b9,0x53e9,0x5419,0x5449,0x5479,0x54a9,
+0x54d9,0x5509,0x5539,0x5569,0x5b99,0x5bc9,0x5bf9,0x5c29,0x5c59,0x5c89,0x5cb9,0x5ce9,0x5d19,0x5d49,0x5d79,0x5da9,
+0x5dd9,0x5e09,0x5e39,0x5e69,0x5e99,0x5ec9,0x5ef9,0x5f29,0x5f59,0x5f89,0x5fb9,0x5fe9,0x6019,0x6049,0x6079,0x60a9,
+0x60d9,0x6109,0x6139,0x6169,0x5599,0x55c9,0x55f9,0x5629,0x5659,0x5689,0x56b9,0x56e9,0x5719,0x5749,0x5779,0x57a9,
+0x57d9,0x5809,0x5839,0x5869,0x5899,0x58c9,0x58f9,0x5929,0x5959,0x5989,0x59b9,0x59e9,0x5a19,0x5a49,0x5a79,0x5aa9,
+0x5ad9,0x5b09,0x5b39,0x5b69,0,0,0,0,0,4,0,0,4,0,0,0,
+0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x6199,0x6219,0x6299,0x6319,0x63c9,0x6479,0x6519,0,0,0,0,0,
+0,0,0,0,0,0,0,0x65b9,0x6639,0x66b9,0x6739,0x67b9,0,0,0,0,
+0,0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,0,0,0,4,0,0,0,0,
+0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,
+0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,4,0,0,4,0,0,
+0,0,0,0,0,0,0,0,0,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
+0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,0x1012,
+0x1012,0x1012,0x1012,0,0,0,4,0,4,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
+0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,0xf011,
+0xf011,0xf011,0xf011,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,
+0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0x1412,0x1412,0x1412,0x1412,
0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
@@ -633,27 +644,41 @@ static const uint16_t ucase_props_trieIndex[12356]={
0,0,0,0,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,
0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0x1412,0,0,0,0,0xec11,0xec11,0xec11,0xec11,
0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,
-0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0,0,0,0,0,4,4,4,
-0,4,4,0,0,0,0,0,4,0x64,4,0x44,0,0,0,0,
+0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0xec11,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,
+0x1392,0x1392,0x1392,0,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0,0x1392,0x1392,0,0xec91,
+0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0,0xec91,0xec91,0xec91,0xec91,0xec91,
+0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0xec91,0,0xec91,0xec91,0xec91,0xec91,0xec91,
+0xec91,0xec91,0,0xec91,0xec91,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
+5,5,5,0,0,0,0,0,5,4,4,5,5,5,0,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,4,4,4,0,4,4,0,
+0,0,0,0,4,0x64,4,0x44,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x44,0x64,0x64,0,0,0,0,0x64,0,0,0,0,0,0x44,0x64,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x44,0x64,0x64,0,0,0,0,0x64,0,0,0,0,
-0,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x2012,0x2012,0x2012,0x2012,
+0,0,0,0,0,0,0,0,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,
0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,
-0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xe011,0xe011,0xe011,0xe011,
+0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0x2012,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,
0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,
-0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,
+0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0xe011,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x64,0x64,0x64,0x64,0,0,0,
+0,0,0,0,0,0,0,0x44,0x44,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,
+0x44,0x44,0x44,0x64,0x44,0x64,0x64,0x64,0x64,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x44,0x64,0x44,0x64,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,4,
+4,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
-4,4,4,0,0,0x64,0x64,0,0,4,0,0,0x44,0x44,0x44,0,
+4,4,4,0,0,0x64,0x64,0,0,4,0,0,0,0,4,0,
+0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
4,4,4,4,0,4,4,4,4,4,4,0x64,0x64,0,0,0,
@@ -720,75 +745,82 @@ static const uint16_t ucase_props_trieIndex[12356]={
0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,0,4,4,0,0,0,
0,0,0,0,0,0,0,0,0x60,0x60,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
+0,4,4,4,4,4,4,4,0,4,4,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,4,0x64,0,0,0,0,0,
-0,0x60,0x60,0x64,0x64,0x64,0,0,0,0x60,0x60,0x60,0x60,0x60,0x60,4,
-4,4,4,4,4,4,4,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,
-0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,
-0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x44,0x44,0x44,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,4,0x64,0,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,0,0,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,
-1,1,1,1,1,1,0x21,0x21,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,1,1,1,1,1,1,1,0,0x21,0x21,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
+0,0,0,0,0,0,0,0,0,0x60,0x60,0x64,0x64,0x64,0,0,
+0,0x60,0x60,0x60,0x60,0x60,0x60,4,4,4,4,4,4,4,4,0x64,
+0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x44,0x44,0x44,0x44,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,
+0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,1,1,1,1,1,1,1,1,0x21,0x21,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,2,0,2,2,
-0,0,2,0,0,2,2,0,0,2,2,2,2,0,2,2,
-2,2,2,2,2,2,1,1,1,1,0,1,0,1,0x21,0x21,
-1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,1,1,1,1,1,1,1,1,0x21,0x21,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,
+1,1,1,1,1,0,0x21,0x21,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-1,1,1,1,2,2,0,2,2,2,2,0,0,2,2,2,
-2,2,2,2,2,0,2,2,2,2,2,2,2,0,1,1,
-1,1,1,1,1,1,0x21,0x21,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,2,2,0,2,2,2,2,0,
-2,2,2,2,2,0,2,0,0,0,2,2,2,2,2,2,
-2,0,1,1,1,1,1,1,1,1,0x21,0x21,1,1,1,1,
+2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,
+1,1,0x21,0x21,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,2,0,2,2,0,0,2,0,0,2,2,0,
+0,2,2,2,2,0,2,2,2,2,2,2,2,2,1,1,
+1,1,0,1,0,1,0x21,0x21,1,1,1,1,0,1,1,1,
1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
-1,1,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,
+2,2,2,2,2,2,2,2,1,1,1,1,2,2,0,2,
+2,2,2,0,0,2,2,2,2,2,2,2,2,0,2,2,
+2,2,2,2,2,0,1,1,1,1,1,1,1,1,0x21,0x21,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,
+2,2,0,2,2,2,2,0,2,2,2,2,2,0,2,0,
+0,0,2,2,2,2,2,2,2,0,1,1,1,1,1,1,
+1,1,0x21,0x21,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,
+2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,1,1,1,0,1,1,1,1,1,1,2,1,
+2,2,2,2,1,1,1,1,1,1,0,0,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
+1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,
+1,1,1,1,1,1,2,1,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,0,0,0,0,4,4,4,4,4,4,4,4,4,
+4,4,4,4,4,0,0,0,0,0,0,0,0,4,0,0,
+0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
+4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0x44,0x44,0x44,0x44,
+0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0x44,
+0x44,0x44,0x44,0x44,1,1,1,1,1,1,1,1,1,1,0,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x21,1,
+1,1,1,0,0x44,0x44,0,0x44,0x44,0,0x44,0x44,0x44,0x44,0x44,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,4,
-4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,
-0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,
-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,4,4,4,4,4,0,4,4,4,
-4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,0x44,0x44,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0x44,
-0x44,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,
-0x44,0x44,0x44,4,4,4,4,4,4,4,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,
-0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0x1112,0x1112,0x1112,0x1112,
+0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,4,4,4,4,
+4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0,0,0,
+0,0,0,0,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,
0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,
-0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0xef11,0xef11,
+0x1112,0x1112,0x1112,0x1112,0x1112,0x1112,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,
0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,
-0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0xef11,0x44,0x44,0x44,0x44,
-0x44,0x44,0x64,4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
-2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+0xef11,0xef11,0xef11,0xef11,0x44,0x44,0x44,0x44,0x44,0x44,0x64,4,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0
+2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0
};
static const uint16_t ucase_props_exceptions[1667]={
@@ -933,16 +965,16 @@ static const UCaseProps ucase_props_singleton={
ucase_props_unfold,
{
ucase_props_trieIndex,
- ucase_props_trieIndex+3288,
+ ucase_props_trieIndex+3408,
NULL,
- 3288,
- 9068,
+ 3408,
+ 9500,
0x188,
- 0xd54,
+ 0xdcc,
0x0,
0x0,
0xe0800,
- 0x3040,
+ 0x3268,
NULL, 0, FALSE, FALSE, 0, NULL
},
{ 4,0,0,0 }
diff --git a/Build/source/libs/icu/icu-src/source/common/uchar.cpp b/Build/source/libs/icu/icu-src/source/common/uchar.cpp
index eb14e4c75d5..61e9c3d900d 100644
--- a/Build/source/libs/icu/icu-src/source/common/uchar.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uchar.cpp
@@ -194,7 +194,7 @@ u_isISOControl(UChar32 c) {
/* Some control characters that are used as space. */
#define IS_THAT_CONTROL_SPACE(c) \
- (c<=0x9f && ((c>=TAB && c<=CR) || (c>=0x1c && c <=0x1f) || c==NL))
+ (c<=0x9f && ((c>=TAB && c<=CR) || (c>=0x1c && c <=0x1f) || c==0x85))
/* Java has decided that U+0085 New Line is not whitespace any more. */
#define IS_THAT_ASCII_CONTROL_SPACE(c) \
@@ -677,14 +677,14 @@ uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
sa->add(sa->set, CR+1); /* range TAB..CR */
sa->add(sa->set, 0x1c);
sa->add(sa->set, 0x1f+1);
- USET_ADD_CP_AND_NEXT(sa, NL);
+ USET_ADD_CP_AND_NEXT(sa, 0x85); // NEXT LINE (NEL)
/* add for u_isIDIgnorable() what was not added above */
- sa->add(sa->set, DEL); /* range DEL..NBSP-1, NBSP added below */
+ sa->add(sa->set, 0x7f); /* range DEL..NBSP-1, NBSP added below */
sa->add(sa->set, HAIRSP);
sa->add(sa->set, RLM+1);
- sa->add(sa->set, INHSWAP);
- sa->add(sa->set, NOMDIG+1);
+ sa->add(sa->set, 0x206a); // INHIBIT SYMMETRIC SWAPPING
+ sa->add(sa->set, 0x206f+1); // NOMINAL DIGIT SHAPES
USET_ADD_CP_AND_NEXT(sa, ZWNBSP);
/* add no-break spaces for u_isWhitespace() what was not added above */
@@ -693,23 +693,25 @@ uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) {
USET_ADD_CP_AND_NEXT(sa, NNBSP);
/* add for u_digit() */
- sa->add(sa->set, U_a);
- sa->add(sa->set, U_z+1);
- sa->add(sa->set, U_A);
- sa->add(sa->set, U_Z+1);
- sa->add(sa->set, U_FW_a);
- sa->add(sa->set, U_FW_z+1);
- sa->add(sa->set, U_FW_A);
- sa->add(sa->set, U_FW_Z+1);
+ sa->add(sa->set, u'a');
+ sa->add(sa->set, u'z'+1);
+ sa->add(sa->set, u'A');
+ sa->add(sa->set, u'Z'+1);
+ // fullwidth
+ sa->add(sa->set, u'a');
+ sa->add(sa->set, u'z'+1);
+ sa->add(sa->set, u'A');
+ sa->add(sa->set, u'Z'+1);
/* add for u_isxdigit() */
- sa->add(sa->set, U_f+1);
- sa->add(sa->set, U_F+1);
- sa->add(sa->set, U_FW_f+1);
- sa->add(sa->set, U_FW_F+1);
+ sa->add(sa->set, u'f'+1);
+ sa->add(sa->set, u'F'+1);
+ // fullwidth
+ sa->add(sa->set, u'f'+1);
+ sa->add(sa->set, u'F'+1);
/* add for UCHAR_DEFAULT_IGNORABLE_CODE_POINT what was not added above */
- sa->add(sa->set, WJ); /* range WJ..NOMDIG */
+ sa->add(sa->set, 0x2060); /* range 2060..206f */
sa->add(sa->set, 0xfff0);
sa->add(sa->set, 0xfffb+1);
sa->add(sa->set, 0xe0000);
diff --git a/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h b/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
index 9a78918204f..c45b9da3fd0 100644
--- a/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
+++ b/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
@@ -1,6 +1,5 @@
-// © 2016 and later: Unicode, Inc. and others.
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
-//
// Copyright (C) 1999-2016, International Business Machines
// Corporation and others. All Rights Reserved.
//
@@ -8,149 +7,148 @@
//
// machine-generated by: icu/tools/unicode/c/genprops/corepropsbuilder.cpp
-
#ifdef INCLUDED_FROM_UCHAR_C
-static const UVersionInfo dataVersion={0xd,0,0,0};
+static const UVersionInfo dataVersion={0xe,0,0,0};
-static const uint16_t propsTrie_index[22276]={
-0x46d,0x475,0x47d,0x485,0x49d,0x4a5,0x4ad,0x4b5,0x4bd,0x4c5,0x4cb,0x4d3,0x4db,0x4e3,0x4eb,0x4f3,
-0x4f9,0x501,0x509,0x511,0x514,0x51c,0x524,0x52c,0x534,0x53c,0x538,0x540,0x548,0x550,0x555,0x55d,
-0x565,0x56d,0x571,0x579,0x581,0x589,0x591,0x599,0x595,0x59d,0x5a2,0x5aa,0x5b0,0x5b8,0x5c0,0x5c8,
-0x5d0,0x5d8,0x5e0,0x5e8,0x5ed,0x5f5,0x5f8,0x600,0x608,0x610,0x616,0x61e,0x61d,0x625,0x62d,0x635,
-0x645,0x63d,0x64d,0x655,0x48d,0x665,0x66b,0x65d,0x67b,0x67d,0x685,0x673,0x695,0x69b,0x6a3,0x68d,
-0x6b3,0x6b9,0x6c1,0x6ab,0x6d1,0x6d7,0x6df,0x6c9,0x6ef,0x6f5,0x6fd,0x6e7,0x70d,0x715,0x71d,0x705,
-0x72d,0x733,0x73b,0x725,0x74b,0x751,0x759,0x743,0x769,0x76e,0x776,0x761,0x786,0x78d,0x795,0x77e,
-0x619,0x79d,0x7a5,0x48d,0x7ad,0x7b4,0x7bc,0x48d,0x7c4,0x7cc,0x7d4,0x7d9,0x7e1,0x7e8,0x7f0,0x48d,
-0x5d8,0x7f8,0x800,0x808,0x810,0x565,0x820,0x818,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x828,0x5d8,0x830,0x834,0x83c,0x5d8,0x842,0x5d8,0x848,0x850,0x858,0x565,0x565,0x860,
-0x868,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x86d,0x875,0x5d8,0x5d8,0x87d,0x885,0x88d,0x895,0x89d,0x5d8,0x8a5,0x8ad,0x8b5,
-0x8c5,0x5d8,0x8cd,0x8cf,0x8d7,0x8bd,0x5d8,0x8da,0x8ee,0x8e2,0x8ea,0x8f6,0x5d8,0x8fe,0x904,0x90c,
-0x914,0x5d8,0x924,0x92c,0x934,0x91c,0x944,0x48d,0x94c,0x94f,0x957,0x93c,0x967,0x95f,0x5d8,0x96e,
-0x5d8,0x97d,0x976,0x985,0x98d,0x991,0x999,0x9a1,0x50d,0x9a9,0x9ac,0x9b2,0x9b9,0x9ac,0x534,0x9c1,
-0x4bd,0x4bd,0x4bd,0x4bd,0x9c9,0x4bd,0x4bd,0x4bd,0x9d9,0x9e1,0x9e9,0x9f1,0x9f9,0x9fd,0xa05,0x9d1,
-0xa1d,0xa25,0xa0d,0xa15,0xa2d,0xa35,0xa3d,0xa45,0xa5d,0xa4d,0xa55,0xa65,0xa6d,0xa7c,0xa81,0xa74,
-0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa91,0xa99,0x90c,0xa9c,0xaa4,0xaab,0xab0,0xab8,
-0x90c,0xabf,0xabe,0xacf,0xad2,0x90c,0x90c,0xac7,0x90c,0x90c,0x90c,0x90c,0x90c,0xae1,0xae9,0xad9,
-0x90c,0x90c,0x90c,0xaee,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xaf4,0xafc,0x90c,0xb04,0xb0b,
-0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xa89,0xa89,0xa89,0xa89,0xb13,0xa89,0xb1a,0xb21,
-0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0x90c,0xb29,0xb30,0xb34,0xb3a,0x90c,0x90c,0x90c,
-0x565,0xb4a,0xb42,0xb52,0x4bd,0x4bd,0x4bd,0xb5a,0x50d,0xb62,0x5d8,0xb68,0xb78,0xb70,0xb70,0x534,
-0xb80,0xb88,0xb90,0x48d,0xb98,0x90c,0x90c,0xb9f,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xba7,0xbad,
-0xbbd,0xbb5,0x619,0x5d8,0xbc5,0x868,0x5d8,0xbcd,0xbd5,0xbd9,0x5d8,0x5d8,0xbde,0x5d8,0x90c,0xbe5,
-0xab9,0xbed,0xbf3,0x90c,0xbed,0xbfb,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
-0xc03,0x5d8,0x5d8,0x5d8,0xc0b,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0xc11,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc16,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x90c,0x90c,
-0xc1e,0x5d8,0xc21,0x5d8,0xc29,0xc2f,0xc37,0xc3f,0xc44,0x5d8,0x5d8,0xc48,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc4f,0x5d8,0xc56,0xc5c,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc64,0x5d8,0x5d8,0x5d8,0xc6c,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc6e,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc75,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0xc7c,0x5d8,0x5d8,0x5d8,0xc83,0xc8b,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc90,0x5d8,0x5d8,0xc98,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc9c,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xc9f,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xca2,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0xca8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0xcb0,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0xcb5,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xcba,0x5d8,0x5d8,0x5d8,0xcbf,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0xcc7,0xcce,0xcd2,0x5d8,0x5d8,0x5d8,0xcd9,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x8ce,
-0xce7,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0xcdf,0x90c,0xcef,0x985,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0xcf4,0xcfc,0x4bd,0xd0c,0xd04,0x5d8,0x5d8,0xd14,0xd1c,0xd2c,0x4bd,0xd31,0xd39,0xd3f,0xd47,0xd24,
-0xd4f,0xd57,0x5d8,0xd5f,0xd6f,0xd72,0xd67,0xd7a,0x62d,0xd82,0xd89,0x8ce,0x67b,0xd99,0xd91,0xda1,
-0x5d8,0xda9,0xdb1,0xdb9,0x5d8,0xdc1,0xdc9,0xdd1,0xdd9,0xde1,0xde5,0xded,0x50d,0x50d,0x5d8,0xdf5,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xdfd,0xe09,0xe01,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,
-0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0x5d8,0x5d8,0x5d8,0xe21,0x5d8,0xcda,0xe28,0xe2d,
-0x5d8,0x5d8,0x5d8,0xe35,0x5d8,0x5d8,0x8d9,0x48d,0xe4b,0xe3b,0xe43,0x5d8,0x5d8,0xe53,0xe5b,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xe60,0xe68,0x5d8,0xe6c,0x5d8,0xe72,0xe76,
-0xe7e,0xe86,0xe8d,0xe95,0x5d8,0x5d8,0x5d8,0xe9b,0xeb3,0x47d,0xebb,0xec3,0xec8,0x8ee,0xea3,0xeab,
-0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,
-0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,0xe11,
-0x1234,0x1234,0x1274,0x12b4,0x12f4,0x132c,0x136c,0x13ac,0x13e4,0x1424,0x1450,0x1490,0x14d0,0x14e0,0x1520,0x1554,
-0x1594,0x15c4,0x1604,0x1644,0x1654,0x1688,0x16c0,0x1700,0x1740,0x1780,0x17b4,0x17e0,0x1820,0x1858,0x1874,0x18b4,
-0xa80,0xac0,0xb00,0xb40,0xb80,0xa40,0xbc0,0xa40,0xbe2,0xa40,0xa40,0xa40,0xa40,0xc22,0x1db,0x1db,
-0xc62,0xca2,0xa40,0xa40,0xa40,0xa40,0xce2,0xd02,0xa40,0xa40,0xd42,0xd82,0xdc2,0xe02,0xe42,0xe82,
-0xec2,0xef9,0x1db,0x1db,0xf1d,0xf51,0x1db,0xf79,0x1db,0x1db,0x1db,0x1db,0xfa6,0x1db,0x1db,0x1db,
-0x1db,0x1db,0x1db,0x1db,0xfba,0x1db,0xff2,0x1032,0x1db,0x103d,0x1db,0x1db,0x1db,0x1073,0xa40,0x10b3,
-0x1db,0x1db,0x10f3,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
+static const uint16_t propsTrie_index[22688]={
+0x48c,0x494,0x49c,0x4a4,0x4bc,0x4c4,0x4cc,0x4d4,0x4dc,0x4e4,0x4ea,0x4f2,0x4fa,0x502,0x50a,0x512,
+0x518,0x520,0x528,0x530,0x533,0x53b,0x543,0x54b,0x553,0x55b,0x557,0x55f,0x567,0x56f,0x574,0x57c,
+0x584,0x58c,0x590,0x598,0x5a0,0x5a8,0x5b0,0x5b8,0x5b4,0x5bc,0x5c1,0x5c9,0x5cf,0x5d7,0x5df,0x5e7,
+0x5ef,0x5f7,0x5ff,0x607,0x60c,0x614,0x617,0x61f,0x627,0x62f,0x635,0x63d,0x63c,0x644,0x64c,0x654,
+0x664,0x65c,0x66c,0x674,0x67a,0x5f7,0x68a,0x682,0x69a,0x69c,0x6a4,0x692,0x6b4,0x6ba,0x6c2,0x6ac,
+0x6d2,0x6d8,0x6e0,0x6ca,0x6f0,0x6f6,0x6fe,0x6e8,0x70e,0x714,0x71c,0x706,0x72c,0x734,0x73c,0x724,
+0x74c,0x752,0x75a,0x744,0x76a,0x770,0x778,0x762,0x788,0x78d,0x795,0x780,0x7a5,0x7ac,0x7b4,0x79d,
+0x638,0x7bc,0x7c4,0x4ac,0x7cc,0x7d3,0x7db,0x4ac,0x7e3,0x7eb,0x7f3,0x7f8,0x800,0x807,0x80f,0x4ac,
+0x5f7,0x817,0x81f,0x827,0x82f,0x584,0x83f,0x837,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x847,0x5f7,0x84f,0x853,0x85b,0x5f7,0x861,0x5f7,0x867,0x86f,0x877,0x584,0x584,0x87f,
+0x887,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x88c,0x894,0x5f7,0x5f7,0x89c,0x8a4,0x8ac,0x8b4,0x8bc,0x5f7,0x8c4,0x8cc,0x8d4,
+0x8e4,0x5f7,0x8ec,0x8ee,0x8f6,0x8dc,0x5f7,0x8f9,0x90d,0x901,0x909,0x915,0x5f7,0x91d,0x923,0x92b,
+0x933,0x5f7,0x943,0x94b,0x953,0x93b,0x963,0x4ac,0x96b,0x96e,0x976,0x95b,0x986,0x97e,0x5f7,0x98d,
+0x5f7,0x99c,0x995,0x9a4,0x9ac,0x9b0,0x9b8,0x9c0,0x52c,0x9c8,0x9cb,0x9d1,0x9d8,0x9cb,0x553,0x553,
+0x4dc,0x4dc,0x4dc,0x4dc,0x9e0,0x4dc,0x4dc,0x4dc,0x9f0,0x9f8,0xa00,0xa08,0xa10,0xa14,0xa1c,0x9e8,
+0xa34,0xa3c,0xa24,0xa2c,0xa44,0xa4c,0xa54,0xa5c,0xa74,0xa64,0xa6c,0xa7c,0xa84,0xa93,0xa98,0xa8b,
+0xaa0,0xaa0,0xaa0,0xaa0,0xaa0,0xaa0,0xaa0,0xaa0,0xaa8,0xab0,0x92b,0xab3,0xabb,0xac2,0xac7,0xacf,
+0x92b,0xad6,0xad5,0xae6,0xae9,0x92b,0x92b,0xade,0x92b,0x92b,0x92b,0x92b,0x92b,0xaf8,0xb00,0xaf0,
+0x92b,0x92b,0x92b,0xb05,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0xb0b,0xb13,0x92b,0xb1b,0xb22,
+0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0xaa0,0xaa0,0xaa0,0xaa0,0xb2a,0xaa0,0xb31,0xb38,
+0xaa0,0xaa0,0xaa0,0xaa0,0xaa0,0xaa0,0xaa0,0xaa0,0x92b,0xb40,0xb47,0xb4b,0xb51,0x92b,0x92b,0x92b,
+0x584,0x58c,0x52c,0xb59,0x4dc,0x4dc,0x4dc,0xb61,0x52c,0xb69,0x5f7,0xb6f,0xb7f,0xb77,0xb77,0x553,
+0xb87,0xb8f,0xb97,0x4ac,0xb9f,0x92b,0x92b,0xba6,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0xbae,0xbb4,
+0xbc4,0xbbc,0x638,0x5f7,0xbcc,0x887,0x5f7,0xbd4,0xbdc,0xbe0,0x5f7,0x5f7,0xbe5,0x5f7,0x92b,0xbec,
+0xad0,0xbf4,0xbfa,0x92b,0xbf4,0xc02,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,
+0xc0a,0x5f7,0x5f7,0x5f7,0xc12,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0xc18,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xc1d,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x92b,0x92b,
+0xc25,0x5f7,0xc28,0x5f7,0xc30,0xc36,0xc3e,0xc46,0xc4b,0x5f7,0x5f7,0xc4f,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xc56,0x5f7,0xc5d,0xc63,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xc6b,0x5f7,0x5f7,0x5f7,0xc73,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xc75,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xc7c,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0xc83,0x5f7,0x5f7,0x5f7,0xc8a,0xc92,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xc97,0x5f7,0x5f7,0xc9f,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xca3,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xca6,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xca9,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0xcaf,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0xcb7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0xcbc,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xcc1,0x5f7,0x5f7,0x5f7,0xcc6,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0xcce,0xcd5,0xcd9,0x5f7,0x5f7,0x5f7,0xce0,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0xcee,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0xce6,0x92b,0xcf6,0x9a4,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0xcfb,0xd03,0x4dc,0xd13,0xd0b,0x5f7,0x5f7,0xd1b,0xd23,0xd33,0x4dc,0xd38,0xd40,0xd46,0xd4d,0xd2b,
+0xd55,0xd5d,0x5f7,0xd65,0xd75,0xd78,0xd6d,0xd80,0x64c,0xd88,0xd8f,0x8ed,0x69a,0xd9f,0xd97,0xda7,
+0x5f7,0xdaf,0xdb7,0xdbf,0x5f7,0xdc7,0xdcf,0xdd7,0xddf,0xde7,0xdeb,0xdf3,0x52c,0x52c,0x5f7,0xdfb,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xe03,0xe0f,0xe07,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,
+0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0x5f7,0x5f7,0x5f7,0xe27,0x5f7,0xce1,0xe2e,0xe33,
+0x5f7,0x5f7,0x5f7,0xe3b,0x5f7,0x5f7,0x8f8,0x4ac,0xe51,0xe41,0xe49,0x5f7,0x5f7,0xe59,0xe61,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xe66,0x92f,0x5f7,0xe6e,0x5f7,0xe74,0xe78,
+0xe80,0xe88,0xe8f,0xe97,0x5f7,0x5f7,0x5f7,0xe9d,0xeb5,0x49c,0xebd,0xec5,0xeca,0x90d,0xea5,0xead,
+0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,
+0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,0xe17,
+0x12b0,0x12b0,0x12f0,0x1330,0x1370,0x13a8,0x13e8,0x1428,0x1460,0x14a0,0x14cc,0x150c,0x154c,0x155c,0x159c,0x15d0,
+0x1610,0x1640,0x1680,0x16c0,0x16d0,0x1704,0x173c,0x177c,0x17bc,0x17fc,0x1830,0x185c,0x189c,0x18d4,0x18f0,0x1930,
+0xa80,0xac0,0xb00,0xb40,0xb80,0xbab,0xbeb,0xa40,0xc0d,0xa40,0xa40,0xa40,0xa40,0xc4d,0x1db,0x1db,
+0xc8d,0xccd,0xa40,0xa40,0xa40,0xcf6,0xd36,0xd56,0xa40,0xd7c,0xdbc,0xdfc,0xe3c,0xe7c,0xebc,0xefc,
+0xf3c,0xf73,0x1db,0x1db,0xf97,0xfcb,0x1db,0xff3,0x1db,0x1db,0x1db,0x1db,0x1020,0x1db,0x1db,0x1db,
+0x1db,0x1db,0x1db,0x1db,0x1034,0x1db,0x106c,0x10ac,0x1db,0x10b7,0x1db,0x1db,0x1db,0x10ed,0xa40,0x112d,
+0x1db,0x1db,0x116d,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
@@ -172,997 +170,1011 @@ static const uint16_t propsTrie_index[22276]={
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0x1133,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
+0x11ad,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,
-0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1173,
+0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x11ed,
0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,
-0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1173,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0xed0,0xed7,0xedf,0x48d,0x5d8,0x5d8,0x5d8,0xee7,0xef7,0xeef,0xf0e,0xeff,0xf06,0xf16,0xf1a,0xf1e,
-0x48d,0x48d,0x48d,0x48d,0x8ce,0x5d8,0xf26,0xf2e,0x5d8,0xf36,0xf3e,0xf42,0xf4a,0x5d8,0xf52,0x48d,
-0x565,0x56f,0xf5a,0x5d8,0xf5e,0xf66,0xf76,0xf6e,0x5d8,0xf7e,0x5d8,0xf85,0x48d,0x48d,0x48d,0x48d,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xb78,0x8da,0xe72,0x48d,0x48d,0x48d,0x48d,
-0xf95,0xf8d,0xf98,0xfa0,0x8ee,0xfa8,0x48d,0xfb0,0xfb8,0xfc0,0x48d,0x48d,0x5d8,0xfd0,0xfd8,0xfc8,
-0xfe8,0xfef,0xfe0,0xff7,0xfff,0x48d,0x100f,0x1007,0x5d8,0x1012,0x101a,0x1022,0x102a,0x1032,0x48d,0x48d,
-0x5d8,0x5d8,0x103a,0x48d,0x565,0x1042,0x50d,0x104a,0x5d8,0x1052,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x105a,0x5d8,0x1062,0x48d,0x48d,0x106a,0x1072,0x1079,0x48d,0x48d,0xe68,0x1081,0xb78,
-0x1091,0x60e,0x1099,0x1089,0x967,0x10a1,0x10a9,0x10af,0x10c7,0x10b7,0x10bf,0x10cb,0x967,0x10db,0x10d3,0x10e3,
-0x10f3,0x10eb,0x48d,0x48d,0x10fa,0x1102,0x630,0x110a,0x111a,0x1120,0x1128,0x1112,0x48d,0x48d,0x48d,0x48d,
-0x5d8,0x1130,0x1138,0x1140,0x5d8,0x1148,0x1150,0x48d,0x48d,0x48d,0x48d,0x48d,0x5d8,0x1158,0x1160,0x48d,
-0x5d8,0x1168,0x1170,0x1178,0x5d8,0x1188,0x1180,0x48d,0x848,0x1190,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x5d8,0x1198,0x48d,0x48d,0x48d,0x565,0x50d,0x11a0,0x11b0,0x11b6,0x11a8,0x48d,0x48d,0x11c6,0x11ca,0x11be,
-0x11e2,0x11d2,0x11da,0x5d8,0x11f2,0x11ea,0x5d8,0x8cf,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x1208,0x120d,0x11fa,0x1202,0x121d,0x1215,0x48d,0x48d,0x122c,0x1230,0x1224,0x1240,0x1238,0x1180,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x1244,0x48d,0x48d,0x48d,0x48d,0x48d,0x124b,0x125b,0x1253,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x8d9,0x48d,0x48d,0x48d,
-0x126b,0x1273,0x127b,0x1263,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x1283,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x128b,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x1293,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x8cf,0x8ee,0x129b,0x48d,0x48d,0xe68,0x12a3,0x5d8,0x12b3,0x12bb,0x12c3,0x12ab,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x565,0x50d,0x12cb,0x48d,0x48d,0x48d,0x5d8,0x5d8,0x12d3,0x12d8,0x12de,0x48d,
-0x48d,0x12e6,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x12ee,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x8da,0x48d,0x103a,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x8ee,0x48d,0x12f4,0x12fb,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xe01,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x1301,0x1306,0x130e,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0xba7,0x90c,0x1316,0x90c,0x131d,0x1325,0x132b,
-0x90c,0x1331,0x90c,0x90c,0x1339,0x48d,0x48d,0x48d,0x48d,0x1341,0x90c,0x90c,0xabb,0x1349,0x48d,0x48d,
-0x48d,0x48d,0x1359,0x1360,0x1365,0x136b,0x1373,0x137b,0x1383,0x135d,0x138b,0x1393,0x139b,0x13a0,0x1372,0x1359,
-0x1360,0x135c,0x136b,0x13a8,0x135a,0x13ab,0x135d,0x13b3,0x13bb,0x13c3,0x13ca,0x13b6,0x13be,0x13c6,0x13cd,0x13b9,
-0x13d5,0x1351,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
-0x90c,0x90c,0x534,0x13e5,0x534,0x13ec,0x13f3,0x13dd,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x13fa,0x1402,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x5d8,0x1412,0x140a,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x5d8,0x141a,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x1422,0x48d,0x565,0x1432,0x142a,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x143a,0x144a,0x1442,0x48d,0x48d,0x145a,0x1452,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x146a,0x1472,0x147a,0x1482,0x148a,0x1492,0x48d,0x1462,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x90c,0x149a,0x90c,0x90c,0xb9f,0x149f,0x14a3,0xba7,0x14ab,0x90c,0x90c,0x90c,0x90c,0xba9,
-0x48d,0x14b3,0x14bb,0x14bf,0x14c7,0x14cf,0x48d,0x48d,0x48d,0x48d,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
-0x90c,0x14d7,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,
-0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x14df,0x14e7,0x90c,0x90c,0x90c,0xb9f,0x90c,0x90c,
-0x14ef,0x14f7,0x149a,0x90c,0x14ff,0x90c,0x1507,0x150c,0x48d,0x48d,0x90c,0x90c,0x90c,0x1514,0x90c,0x90c,
-0x151b,0x90c,0x90c,0x90c,0xb9f,0x1520,0x1528,0x152e,0x1533,0x48d,0x90c,0x90c,0x90c,0x90c,0x153b,0x90c,
-0xabe,0x117c,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x1543,0x5d8,0x5d8,0x154a,0x5d8,0x5d8,0x5d8,0x1552,0x5d8,0x155a,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0xc80,0x5d8,0x5d8,0x1562,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x156a,0x1572,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0xcbf,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x1579,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x1580,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x1587,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0xf5e,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x158b,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0xf5e,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x1066,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x1590,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x1598,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0xf5e,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,
-0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x5d8,0x655,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x15a8,0x15a0,0x15a0,0x15a0,0x48d,0x48d,0x48d,0x48d,0x534,0x534,0x534,0x534,0x534,
-0x534,0x534,0x15b0,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,0x48d,
-0x48d,0x48d,0x48d,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
-0xe19,0xe19,0x15b8,0x46c,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
+0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x11ed,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0xed2,0xed9,0xee1,0x4ac,0x5f7,0x5f7,0x5f7,0xee9,0xef9,0xef1,0xf10,0xf01,0xf08,0xf18,0xf1c,0xf20,
+0x4ac,0x4ac,0x4ac,0x4ac,0x8ed,0x5f7,0xf28,0xf30,0x5f7,0xf38,0xf40,0xf44,0xf4c,0x5f7,0xf54,0x4ac,
+0x584,0x58e,0xf5c,0x5f7,0xf60,0xf68,0xf78,0xf70,0x5f7,0xf80,0x5f7,0xf87,0xf97,0xf8f,0x4ac,0x4ac,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xb7f,0x8f9,0xf9f,0xfaf,0xfa7,0x4ac,0x4ac,
+0xfbf,0xfb7,0xfc2,0xfca,0x90d,0xfd2,0x4ac,0xfda,0xfe2,0xfea,0x4ac,0x4ac,0x5f7,0xffa,0x1002,0xff2,
+0x1012,0x1019,0x100a,0x1021,0x1029,0x4ac,0x1039,0x1031,0x5f7,0x103c,0x1044,0x104c,0x1054,0x105c,0x4ac,0x4ac,
+0x5f7,0x5f7,0x1064,0x4ac,0x584,0x106c,0x52c,0x1074,0x5f7,0x107c,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x1084,0x5f7,0x108c,0x4ac,0x4ac,0x1094,0x109c,0x10a3,0xfd6,0x10ab,0xfd6,0x10b3,0xb7f,
+0x10c3,0x62d,0x10cb,0x10bb,0x986,0x10d3,0x10db,0x10e1,0x10f9,0x10e9,0x10f1,0x10fd,0x986,0x110d,0x1105,0x1115,
+0x1125,0x111d,0x4ac,0x4ac,0x112c,0x1134,0x64f,0x113c,0x114c,0x1152,0x115a,0x1144,0x4ac,0x4ac,0x4ac,0x4ac,
+0x5f7,0x1162,0x116a,0x1172,0x5f7,0x117a,0x1182,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x5f7,0x118a,0x1192,0x4ac,
+0x5f7,0x119a,0x11a2,0x11aa,0x5f7,0x11ba,0x11b2,0x4ac,0x867,0x11c2,0x11ca,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x5f7,0x11d2,0x4ac,0x4ac,0x4ac,0x584,0x52c,0x11da,0x11ea,0x11f0,0x11e2,0x4ac,0x4ac,0x1200,0x1204,0x11f8,
+0x121c,0x120c,0x1214,0x5f7,0x122a,0x1224,0x5f7,0x8ee,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x1240,0x1245,0x1232,0x123a,0x1255,0x124d,0x4ac,0x4ac,0x1264,0x1268,0x125c,0x1278,0x1270,0x11b2,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x127c,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x1283,0x1293,0x128b,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x8f8,0x4ac,0x4ac,0x4ac,
+0x12a3,0x12ab,0x12b3,0x129b,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x12bb,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0xfd6,0x5f7,0x5f7,0x12c3,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x12cb,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x11ca,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x8ee,0x90d,
+0xd9b,0x5f7,0x90d,0x12d3,0x12d8,0x5f7,0x12e8,0x12f0,0x12f8,0x12e0,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x584,
+0x52c,0x1300,0x4ac,0x4ac,0x4ac,0x5f7,0x5f7,0x1308,0x130d,0x1313,0x4ac,0x4ac,0x131b,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x1323,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x8f9,0x4ac,0x1064,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x1329,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x1331,
+0x1335,0x133c,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xe07,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x5f7,0x5f7,0x5f7,0x1342,0x1347,0x134f,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x553,0x135f,0x1366,0x92b,0x92b,0x92b,0x1357,0x4ac,0x92b,0x92b,0x92b,0x92b,
+0x92b,0x92b,0x92b,0xbae,0x92b,0x136d,0x92b,0x1374,0x137c,0x1382,0x92b,0xad5,0x92b,0x92b,0x138a,0x4ac,
+0x4ac,0x4ac,0x4ac,0x1392,0x92b,0x92b,0xad2,0x139a,0x4ac,0x4ac,0x4ac,0x4ac,0x13aa,0x13b1,0x13b6,0x13bc,
+0x13c4,0x13cc,0x13d4,0x13ae,0x13dc,0x13e4,0x13ec,0x13f1,0x13c3,0x13aa,0x13b1,0x13ad,0x13bc,0x13f9,0x13ab,0x13fc,
+0x13ae,0x1404,0x140c,0x1414,0x141b,0x1407,0x140f,0x1417,0x141e,0x140a,0x1426,0x13a2,0x92b,0x92b,0x92b,0x92b,
+0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x553,0x1436,0x553,0x143d,
+0x1444,0x142e,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x1453,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x144b,0x145b,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x5f7,0x146b,0x1463,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0xfd6,0x1473,0x5f7,0x147b,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x1483,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x148b,0x4ac,0x584,0x149b,0x1493,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x14a3,
+0x14b3,0x14ab,0x4ac,0x4ac,0x14c3,0x14bb,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x14d3,0x14db,0x14e3,0x14eb,
+0x14f3,0x14fb,0x4ac,0x14cb,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x92b,0x1503,0x92b,0x92b,
+0xba6,0x136b,0x150b,0xbae,0x1513,0x92b,0x92b,0x92b,0x92b,0xbb0,0x4ac,0x151b,0x1523,0x1527,0x152f,0x1537,
+0x4ac,0x4ac,0x4ac,0x4ac,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x153f,0x92b,0x92b,0x92b,0x92b,
+0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,
+0x92b,0x92b,0x1547,0x154f,0x92b,0x92b,0x92b,0xba6,0x92b,0x92b,0x1557,0x155f,0x1503,0x92b,0x1567,0x92b,
+0x156f,0x1574,0x4ac,0x4ac,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0x92b,0xba6,0x157c,
+0x1588,0x158d,0x1595,0x1584,0x92b,0x92b,0x92b,0x92b,0x159d,0x92b,0xad5,0x11ae,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x15a5,0x5f7,0x5f7,0x15ac,
+0x5f7,0x5f7,0x5f7,0x15b4,0x5f7,0x15bc,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xc87,0x5f7,0x5f7,0x15c4,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x15cc,0x15d4,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0xcc6,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x15db,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x15e2,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x15e9,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x4ac,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x8ee,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xf60,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x1090,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x15f1,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x5f7,0x5f7,0x5f7,
+0x5f7,0x15f9,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0xf60,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,
+0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x15ff,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x160f,0x1607,0x1607,
+0x1607,0x4ac,0x4ac,0x4ac,0x4ac,0x553,0x553,0x553,0x553,0x553,0x553,0x553,0x1617,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,
+0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0x4ac,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,
+0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0xe1f,0x161f,0x48b,0x48b,0x48b,
0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0xf,0xf,0xf,0xf,0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,
-0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,
-0x18,0x18,0x18,0x17,0x17,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x14,
-0x17,0x15,0x1a,0x16,0x1a,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x14,
-0x18,0x15,0x18,0xf,0,0,0,0,0,0,0,0,0,0,0,0,
+0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
+0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17,
+0x17,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0x14,0x17,0x15,0x1a,0x16,
+0x1a,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,0x14,0x18,0x15,0x18,0xf,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0xf,0xf,0xf,0xf,0xc,0x17,0x19,0x19,0x19,0x19,0x1b,0x17,0x1a,0x1b,5,0x1c,
-0x18,0x10,0x1b,0x1a,0x1b,0x18,0x34b,0x38b,0x1a,2,0x17,0x17,0x1a,0x30b,5,0x1d,
-0x34cb,0x344b,0x3ccb,0x17,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0x18,1,1,1,1,
-1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,0x18,2,2,2,2,
-2,2,2,2,1,2,1,2,1,2,1,2,1,2,1,2,
+0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
+0xc,0x17,0x19,0x19,0x19,0x19,0x1b,0x17,0x1a,0x1b,5,0x1c,0x18,0x10,0x1b,0x1a,
+0x1b,0x18,0x34b,0x38b,0x1a,2,0x17,0x17,0x1a,0x30b,5,0x1d,0x34cb,0x344b,0x3ccb,0x17,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0x18,1,1,1,1,1,1,1,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,2,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,2,1,2,1,
-2,1,2,1,2,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1,
+2,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,1,2,1,2,1,2,2,2,1,1,2,
-1,2,1,1,2,1,1,1,2,2,1,1,1,1,2,1,
-1,2,1,1,1,2,2,2,1,1,2,1,1,2,1,2,
-1,2,1,1,2,1,2,2,1,2,1,1,2,1,1,1,
-2,1,2,1,1,2,2,5,1,2,2,2,5,5,5,5,
-1,3,2,1,3,2,1,3,2,1,2,1,2,1,2,1,
-2,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,2,1,3,2,
-1,2,1,1,1,2,1,2,1,2,1,2,1,2,1,2,
+1,1,2,1,2,1,2,2,2,1,1,2,1,2,1,1,
+2,1,1,1,2,2,1,1,1,1,2,1,1,2,1,1,
+1,2,2,2,1,1,2,1,1,2,1,2,1,2,1,1,
+2,1,2,2,1,2,1,1,2,1,1,1,2,1,2,1,
+1,2,2,5,1,2,2,2,5,5,5,5,1,3,2,1,
+3,2,1,3,2,1,2,1,2,1,2,1,2,1,2,1,
+2,1,2,1,2,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,1,2,2,1,3,2,1,2,1,1,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,2,2,2,2,2,2,1,1,
-2,1,1,2,2,1,2,1,1,1,1,2,1,2,1,2,
-1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,2,2,2,2,2,2,1,1,2,1,1,2,
+2,1,2,1,1,1,1,2,1,2,1,2,1,2,1,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,5,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,4,
-4,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
-4,4,4,4,4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,0x1a,4,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
+5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x1a,0x1a,
+0x1a,0x1a,4,4,4,4,4,4,4,4,4,4,4,4,0x1a,0x1a,
+0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,
+4,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,0x1a,4,0x1a,0x1a,0x1a,0x1a,0x1a,
+0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-1,2,1,2,4,0x1a,1,2,0,0,4,2,2,2,0x17,1,
-0,0,0,0,0x1a,0x1a,1,0x17,1,1,1,0,1,0,1,1,
-2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,1,2,2,1,1,1,2,2,2,1,2,1,2,
+6,6,6,6,6,6,6,6,6,6,6,6,1,2,1,2,
+4,0x1a,1,2,0,0,4,2,2,2,0x17,1,0,0,0,0,
+0x1a,0x1a,1,0x17,1,1,1,0,1,0,1,1,2,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,
+1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,
+2,2,1,1,1,2,2,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,2,2,2,2,1,2,0x18,1,2,1,1,2,
-2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+2,2,2,2,1,2,0x18,1,2,1,1,2,2,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,0x1b,6,6,6,6,6,7,7,1,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,0x1b,6,6,6,6,6,7,7,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,1,2,1,2,1,2,1,2,1,2,1,
-2,1,2,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,0,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
-0,4,0x17,0x17,0x17,0x17,0x17,0x17,2,2,2,2,2,2,2,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0,0,4,0x17,0x17,
+0x17,0x17,0x17,0x17,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,0x17,0x13,0,0,0x1b,0x1b,0x19,
-0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+2,2,2,2,2,0x17,0x13,0,0,0x1b,0x1b,0x19,0,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,0x13,6,
-0x17,6,6,0x17,6,6,0x17,6,0,0,0,0,0,0,0,0,
+6,6,6,6,6,6,6,6,6,6,0x13,6,0x17,6,6,0x17,
+6,6,0x17,6,0,0,0,0,0,0,0,0,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,5,
-5,5,5,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,
-0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x18,0x18,0x17,0x17,0x19,0x17,0x17,0x1b,0x1b,
-6,6,6,6,6,6,6,6,6,6,6,0x17,0x10,0,0x17,0x17,
+5,5,5,5,5,5,5,0,0,0,0,5,5,5,5,0x17,
+0x17,0,0,0,0,0,0,0,0,0,0,0,0x10,0x10,0x10,0x10,
+0x10,0x10,0x18,0x18,0x18,0x17,0x17,0x19,0x17,0x17,0x1b,0x1b,6,6,6,6,
+6,6,6,6,6,6,6,0x17,0x10,0x17,0x17,0x17,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,
+5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,6,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,5,5,6,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,5,5,
-6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x17,5,6,6,6,6,6,6,6,0x10,0x1b,6,
-6,6,6,6,6,4,4,6,6,0x1b,6,6,6,6,5,5,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,0x1b,0x1b,5,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0x10,
-5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x17,5,6,6,6,6,6,6,6,0x10,0x1b,6,6,6,6,6,
+6,4,4,6,6,0x1b,6,6,6,6,5,5,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,0x1b,0x1b,5,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0x10,5,6,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,0,0,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,
+0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,
-6,6,6,6,6,5,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,
+5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,
+6,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-6,6,6,6,6,6,6,6,4,4,0x1b,0x17,0x17,0x17,4,0,
-0,6,0x19,0x19,6,6,6,6,4,6,6,6,4,6,6,6,
-6,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,6,6,6,6,4,6,
-6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,
-0,0,0x17,0,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,6,6,0x10,6,6,6,6,6,6,6,6,6,
+5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,
+6,6,6,6,4,4,0x1b,0x17,0x17,0x17,4,0,0,6,0x19,0x19,
+6,6,6,6,4,6,6,6,4,6,6,6,6,6,0,0,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,6,6,6,6,4,6,6,6,6,6,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,6,6,6,0,0,0x17,0,
+5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x1a,5,5,5,5,5,5,0,0x10,0x10,0,0,0,0,0,0,
+6,6,6,6,6,6,6,6,6,6,0x10,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,
+6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,
+5,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,5,5,6,6,0x17,0x17,0x49,0x89,
+0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,4,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,6,6,6,8,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,6,8,6,5,8,8,
+8,6,6,6,6,6,6,6,6,8,8,8,8,6,8,8,
+5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,
+5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
+5,5,0x19,0x19,0x37cb,0x35cb,0x3fcb,0x34cb,0x3ccb,0x94b,0x1b,0x19,5,0x17,6,0,
+5,6,8,8,0,5,5,5,5,5,5,5,5,0,0,5,
+5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,5,5,5,5,5,5,5,0,5,0,0,0,5,5,
+5,5,0,0,6,5,8,8,8,6,6,6,6,0,0,8,
+8,0,0,8,8,6,5,0,0,0,0,0,0,0,0,8,
+0,0,0,0,5,5,0,5,0,0,0,0,0,0,0x49,0x89,
+0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,6,6,5,5,5,6,0x17,0,
+0,0,0,0,0,0,0,0,0,6,6,8,0,5,5,5,
+5,5,5,0,0,0,0,5,5,0,0,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,6,
-6,6,6,6,6,6,6,6,6,6,6,6,5,5,6,6,
-0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,4,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,8,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8,
-6,5,8,8,8,6,6,6,6,6,6,6,6,8,8,8,
-8,6,8,8,5,6,6,6,6,6,6,6,5,5,5,5,
-5,5,5,5,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,5,5,0x19,0x19,0x37cb,0x35cb,0x3fcb,0x34cb,0x3ccb,0x94b,0x1b,0x19,
-5,0x17,6,0,5,6,8,8,0,5,5,5,5,5,5,5,
-5,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,0,
-0,0,5,5,5,5,0,0,6,5,8,8,8,6,6,6,
-6,0,0,8,8,0,0,8,8,6,5,0,0,0,0,0,
-0,0,0,8,0,0,0,0,5,5,0,5,0,0,0,0,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,6,6,5,5,
-5,6,0x17,0,0,0,0,0,0,0,0,0,0,6,6,8,
-0,5,5,5,5,5,5,0,0,0,0,5,5,0,0,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,5,5,5,0,5,5,0,5,5,0,5,5,0,0,
-6,0,8,8,8,6,6,0,0,0,0,6,6,0,0,6,
-6,6,0,0,0,6,0,0,0,0,0,0,0,5,5,5,
-5,0,5,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x17,0x19,0,0,0,0,0,0,0,5,6,6,
-6,6,6,6,0,6,6,8,0,5,5,5,5,5,5,5,
-5,5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5,
-0,5,5,5,5,5,0,0,6,5,8,8,8,6,6,6,
-6,6,0,6,6,8,0,8,8,6,0,0,5,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,6,6,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x1b,5,0x34cb,0x344b,
-0x3ccb,0x37cb,0x35cb,0x3fcb,0,0,0,0,0,0,0,0,0,6,8,8,
-0,5,5,5,5,5,5,5,5,0,0,5,5,0,0,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,5,5,5,0,5,5,0,5,5,5,5,5,0,0,
-6,5,8,6,8,6,6,6,6,0,0,8,8,0,0,8,
-8,6,0,0,0,0,0,0,0,6,6,8,0,0,0,0,
-5,5,0,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1b,0,
-0,0,0,0,0,0,6,5,0,5,5,5,5,5,5,0,
-0,0,5,5,5,0,5,5,5,5,0,0,0,5,5,0,
-5,0,5,5,0,0,0,5,5,0,0,0,5,5,5,0,
-0,0,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,0,8,8,6,8,8,0,0,0,8,8,8,0,8,8,
-8,6,0,0,5,0,0,0,0,0,0,8,0,0,0,0,
-0,0,0,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0x17,0x54b,0x58b,0x5cb,0x60b,
-0x58b,0x5cb,0x60b,0x1b,6,8,8,8,6,5,5,5,5,5,5,5,
-5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0,5,6,6,6,8,8,8,
-8,0,6,6,6,0,6,6,6,6,0,0,0,0,0,0,
-0,6,6,0,5,5,5,0,0,0,0,0,5,5,6,6,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,5,5,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,6,8,8,
-0x17,5,5,5,5,5,5,5,5,0,5,5,5,0,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
-5,5,5,5,5,5,5,5,0,5,5,5,5,5,0,0,
-6,5,8,6,8,8,8,8,8,0,6,8,8,0,8,8,
-6,6,0,0,0,0,0,0,0,8,8,0,0,0,0,0,
-0,0,5,0,5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,5,5,
-5,5,5,5,6,6,8,8,5,5,5,5,5,5,5,5,
-5,0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,6,6,5,8,8,8,6,6,6,6,0,8,8,
-8,0,8,8,8,6,5,0x1b,0,0,0,0,5,5,5,8,
-0xcc0b,0xca0b,0xcb4b,0xc90b,0x364b,0xc94b,0x350b,5,0,0,0,0,0,0,0x49,0x89,
-0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,8,8,0x17,0,0,0,
+5,0,5,5,0,5,5,0,5,5,0,0,6,0,8,8,
+8,6,6,0,0,0,0,6,6,0,0,6,6,6,0,0,
+0,6,0,0,0,0,0,0,0,5,5,5,5,0,5,0,
+5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
+0x17,0x19,0,0,0,0,0,0,0,5,6,6,6,6,6,6,
+0,6,6,8,0,5,5,5,5,5,5,5,5,5,0,5,
+5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5,
+5,5,0,0,6,5,8,8,8,6,6,6,6,6,0,6,
+6,8,0,8,8,6,0,0,5,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,6,6,0,0,0x49,0x89,
+0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x1b,5,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,
0,0,0,0,0,0,0,0,0,6,8,8,0,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
-0,5,0,0,5,5,5,5,5,5,5,0,0,0,6,0,
-0,0,0,8,8,8,6,6,6,0,6,0,8,8,8,8,
-8,8,8,8,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,6,5,5,6,6,6,6,6,6,6,0,
-0,0,0,0x19,5,5,5,5,5,5,4,6,6,6,6,6,
-6,6,6,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,
-0,0,0,0,0,5,5,0,5,0,5,5,5,5,5,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0,5,0,5,5,5,5,5,5,5,5,5,
-5,6,5,5,6,6,6,6,6,6,6,6,6,5,0,0,
-5,5,5,5,5,0,4,0,6,6,6,6,6,6,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,5,5,5,5,
-5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x1b,0x17,0x1b,0x1b,0x1b,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,
-0x644b,0x6c4b,0x744b,0x2c4b,0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8,
-5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,8,6,6,6,6,6,0x17,6,6,5,5,5,5,
-5,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6,
+5,5,5,5,5,0,0,5,5,0,0,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
+5,0,5,5,0,5,5,5,5,5,0,0,6,5,8,6,
+8,6,6,6,6,0,0,8,8,0,0,8,8,6,0,0,
+0,0,0,0,0,6,6,8,0,0,0,0,5,5,0,5,
+0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
+0x7cb,0x1e4b,0x784b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x1b,0,0,0,0,0,
+0,0,6,5,0,5,5,5,5,5,5,0,0,0,5,5,
+5,0,5,5,5,5,0,0,0,5,5,0,5,0,5,5,
+0,0,0,5,5,0,0,0,5,5,5,0,0,0,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,0,0,8,8,
+6,8,8,0,0,0,8,8,8,0,8,8,8,6,0,0,
+5,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,
+5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
+0,0,0,0,0,0,0,0x17,0x54b,0x58b,0x5cb,0x60b,0x58b,0x5cb,0x60b,0x1b,
+6,8,8,8,6,5,5,5,5,5,5,5,5,0,5,5,
+5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,0,6,5,6,6,6,8,8,8,8,0,6,6,
+6,0,6,6,6,6,0,0,0,0,0,0,0,6,6,0,
+5,5,5,0,0,5,0,0,5,5,6,6,0,0,0x49,0x89,
+0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,5,5,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,6,8,8,0x17,5,5,5,
+5,5,5,5,5,0,5,5,5,0,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
+5,5,5,5,0,5,5,5,5,5,0,0,6,5,8,6,
+8,8,8,8,8,0,6,8,8,0,8,8,6,6,0,0,
+0,0,0,0,0,8,8,0,0,0,0,0,0,5,5,0,
+5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
+0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,5,5,5,5,5,5,
+6,6,8,8,5,5,5,5,5,5,5,5,5,0,5,5,
+5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
+6,5,8,8,8,6,6,6,6,0,8,8,8,0,8,8,
+8,6,5,0x1b,0,0,0,0,5,5,5,8,0xcc0b,0xca0b,0xcb4b,0xc90b,
+0x364b,0xc94b,0x350b,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,0,0,8,8,0x17,0,0,0,0,0,0,0,
+0,0,0,0,0,6,8,8,0,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,5,5,5,5,5,5,5,5,5,0,5,0,0,
+5,5,5,5,5,5,5,0,0,0,6,0,0,0,0,8,
+8,8,6,6,6,0,6,0,8,8,8,8,8,8,8,8,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,6,5,5,6,6,6,6,6,6,6,0,0,0,0,0x19,
+5,5,5,5,5,5,4,6,6,6,6,6,6,6,6,0x17,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0,0,0,0,
+0,5,5,0,5,0,5,5,5,5,5,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0,5,0,5,5,5,5,5,5,5,5,5,5,6,5,5,
+6,6,6,6,6,6,6,6,6,5,0,0,5,5,5,5,
+5,0,4,0,6,6,6,6,6,6,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,5,5,5,5,5,0x1b,0x1b,0x1b,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b,
+0x17,0x1b,0x1b,0x1b,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,0x644b,0x6c4b,0x744b,0x2c4b,
+0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8,5,5,5,5,
+5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
+0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,
+6,6,6,6,6,0x17,6,6,5,5,5,5,5,6,6,6,
+6,6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,0,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,
-0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,8,8,6,6,6,
-6,8,6,6,6,6,6,6,8,6,6,8,8,6,6,5,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,
-5,5,5,5,5,5,8,8,6,6,5,5,5,5,6,6,
-6,5,8,8,8,5,5,8,8,8,8,8,8,8,5,5,
-5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,
-5,5,6,8,8,6,6,8,8,8,8,8,8,6,5,8,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,8,8,8,6,0x1b,0x1b,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,0x17,4,2,2,2,
-1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0,
+6,6,6,6,6,6,6,6,6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x17,0x17,0x17,0x17,
+0x17,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,8,8,6,6,6,6,8,6,6,
+6,6,6,6,8,6,6,8,8,6,6,5,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,
+5,5,8,8,6,6,5,5,5,5,6,6,6,5,8,8,
+8,5,5,8,8,8,8,8,8,8,5,5,5,6,6,6,
+6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8,
+8,6,6,8,8,8,8,8,8,6,5,8,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,8,8,8,6,0x1b,0x1b,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0,
-5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,0,
-5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0,
+2,2,2,2,2,2,2,0x17,4,2,2,2,1,1,1,1,
+1,1,0,1,0,0,0,0,0,1,0,0,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,
+5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5,
+5,5,5,0,5,0,5,5,5,5,0,0,5,5,5,5,
+5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
+5,5,0,0,5,5,5,5,5,5,5,0,5,0,5,5,
+5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,5,5,5,5,0,0,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,0,
-5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0,
+5,5,5,5,5,5,5,0,0,6,6,6,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,
+0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0,0,2,2,2,2,2,2,0,0,0x13,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,6,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,
-0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x1b,0x17,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,0,0,2,2,2,2,2,2,0,0,
-0x13,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x1b,0x17,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0xc,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x14,
-0x15,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0x17,
-0x17,0x17,0x98a,0x9ca,0xa0a,5,5,5,5,5,5,5,5,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,5,5,5,5,6,6,6,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,6,6,6,0x17,0x17,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,6,6,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,5,5,5,0,6,6,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,6,6,8,6,6,6,6,6,
-6,6,8,8,8,8,8,8,8,8,6,8,8,6,6,6,
-6,6,6,6,6,6,6,6,0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,
-5,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,6,5,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,
-6,6,0x10,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,5,5,5,4,5,5,5,5,5,5,5,5,
+0xc,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0x14,0x15,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x98a,0x9ca,
+0xa0a,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5,
-5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,0,0,0,0,0,0,0,6,6,6,8,8,8,8,6,
-6,8,8,8,0,0,0,0,8,8,6,8,8,8,8,8,
-8,6,6,6,0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89,
-0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5,
+5,5,6,6,6,8,0,0,0,0,0,0,0,0,0,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,5,5,5,5,5,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x30b,0,0,0,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+5,5,6,6,8,0x17,0x17,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,6,6,8,8,6,0,0,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0,0,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,
+5,5,6,6,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
+5,0,6,6,0,0,0,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,8,6,8,6,6,6,6,6,6,6,0,
-6,8,6,8,8,6,6,6,6,6,6,6,6,8,8,8,
-8,8,8,6,6,6,6,6,6,6,6,6,6,0,0,6,
+5,5,5,5,6,6,8,6,6,6,6,6,6,6,8,8,
+8,8,8,8,8,8,6,8,8,6,6,6,6,6,6,6,
+6,6,6,6,0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0,
0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,6,5,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0x10,6,
0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
-0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,
-6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
-6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6,6,6,6,8,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-6,8,6,6,6,6,6,8,6,8,8,8,8,8,6,8,
-8,5,5,5,5,5,5,5,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,8,6,6,
-6,6,8,8,6,6,8,6,6,6,5,5,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,6,6,8,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8,
-6,6,8,8,8,6,8,6,6,6,8,8,0,0,0,0,
-0,0,0,0,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,5,5,5,5,5,5,8,8,8,8,8,8,8,8,
-6,6,6,6,6,6,6,6,8,8,6,6,0,0,0,0x17,
-0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,
-4,4,0x17,0x17,2,2,2,2,2,2,2,2,2,0,0,0,
-0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
-0,1,1,1,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,
-0,0,0,0,6,6,6,0x17,6,6,6,6,6,6,6,6,
-6,6,6,6,6,8,6,6,6,6,6,6,6,5,5,5,
-5,6,5,5,5,5,5,5,6,5,5,8,6,6,5,0,
-0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
-4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,0,0,0,0,0,0,5,5,5,5,5,6,6,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,
+0,0,0,0,6,6,6,8,8,8,8,6,6,8,8,8,
+0,0,0,0,8,8,6,8,8,8,8,8,8,6,6,6,
+0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,0,5,5,5,5,5,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0x30b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,6,6,8,8,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0,0,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,7,6,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,8,6,8,6,6,6,6,6,6,6,0,6,8,6,8,
+8,6,6,6,6,6,6,6,6,8,8,8,8,8,8,6,
+6,6,6,6,6,6,6,6,6,0,0,6,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x17,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,
+8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,6,8,6,6,
+6,6,6,8,6,8,8,8,8,8,6,8,8,5,5,5,
+5,5,5,5,5,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,8,6,6,6,6,8,8,
+6,6,8,6,6,6,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,5,5,5,5,5,5,6,6,8,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,6,8,6,6,8,8,
+8,6,8,6,6,6,8,8,0,0,0,0,0,0,0,0,
+0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,
+5,5,5,5,8,8,8,8,8,8,8,8,6,6,6,6,
+6,6,6,6,8,8,6,6,0,0,0,0x17,0x17,0x17,0x17,0x17,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,4,4,4,4,4,4,0x17,0x17,
+2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,
+6,6,6,0x17,6,6,6,6,6,6,6,6,6,6,6,6,
+6,8,6,6,6,6,6,6,6,5,5,5,5,6,5,5,
+5,5,5,5,6,5,5,8,6,6,5,0,0,0,0,0,
+2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,
-4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,
-4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6,
-6,6,6,6,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,2,2,2,2,2,2,
-2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,
-1,0x1a,0x1a,0x1a,0,0,2,2,2,0,2,2,1,1,1,1,
-3,0x1a,0x1a,0,2,2,2,2,2,2,2,2,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1,
-1,1,0,0,2,2,2,2,2,2,2,2,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1,
-1,1,0,0,2,2,2,2,2,2,2,2,0,1,0,1,
-0,1,0,1,2,2,2,2,2,2,2,2,1,1,1,1,
-1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,0,0,2,2,2,2,2,2,2,2,3,3,3,3,
-3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,
-3,3,3,3,2,2,2,2,2,0,2,2,1,1,1,1,
-3,0x1a,2,0x1a,0x1a,0x1a,2,2,2,0,2,2,1,1,1,1,
-3,0x1a,0x1a,0x1a,2,2,2,2,0,0,2,2,1,1,1,1,
-0,0x1a,0x1a,0x1a,0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,0x10,0,0x10,0x10,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x2cb,4,0,0,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,
-0x18,0x14,0x15,4,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,
-0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,
-0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,
-0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,
-0x17,0x17,0x17,0x16,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,
-0x18,0x14,0x15,0,4,4,4,4,4,4,4,4,4,4,4,4,
-4,0,0,0,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,
+2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,2,1,2,2,2,2,2,2,2,2,2,1,2,
+2,2,2,2,2,2,2,2,1,1,1,1,1,0x1a,0x1a,0x1a,
+0,0,2,2,2,0,2,2,1,1,1,1,3,0x1a,0x1a,0,
+2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,0,0,1,1,1,1,1,1,0,0,
+2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,0,0,1,1,1,1,1,1,0,0,
+2,2,2,2,2,2,2,2,0,1,0,1,0,1,0,1,
+2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,
+2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,
+2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,
+2,2,2,2,2,0,2,2,1,1,1,1,3,0x1a,2,0x1a,
+0x1a,0x1a,2,2,2,0,2,2,1,1,1,1,3,0x1a,0x1a,0x1a,
+2,2,2,2,0,0,2,2,1,1,1,1,0,0x1a,0x1a,0x1a,
+0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc,
+0x10,0x10,0x10,0x10,0x10,0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+0x2cb,4,0,0,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,4,
+0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10,
+0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16,
+0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,0,
+4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,
0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
-0x19,0x19,0x19,0x19,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
-6,7,7,7,7,6,7,7,7,6,6,6,6,6,6,6,
-6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1,
-1,1,0x1b,2,1,1,1,1,2,5,5,5,5,2,0x1b,0x1b,
-2,2,1,1,0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18,
-0x1b,0x1b,2,0x1b,0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb,
-0x3dcb,0x45cb,0x4dcb,0x58b,0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,
-1,1,2,2,1,1,1,2,0x1b,1,0x1b,0x1b,0x18,1,1,1,
-1,1,0x1b,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,
-0x11ca,0x1e4a,0x980a,0x784a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,
-0x11ca,0x1e4a,0x980a,0x784a,0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b,
-0,0,0,0,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,
+0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
+0x19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,
+7,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6,
+6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2,
+1,1,1,1,2,5,5,5,5,2,0x1b,0x1b,2,2,1,1,
+0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0x1b,
+0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb,0x3dcb,0x45cb,0x4dcb,0x58b,
+0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2,
+1,1,1,2,0x1b,1,0x1b,0x1b,0x18,1,1,1,1,1,0x1b,0x1b,
+0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a,
+0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a,
+0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b,0,0,0,0,
+0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,
+0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,
+0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,
+0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
-0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,
-0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x2cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,
+0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,
+0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,
0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,
-0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,
-0x98b,0x9cb,0xa0b,0xa4b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
-0x14,0x15,0x14,0x15,0x14,0x15,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,
-0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,
-0x48b,0x4cb,0x50b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,
+0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
+0x14,0x15,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,
+0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,
+0x18,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,
+0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,
0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
-0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,1,
-2,1,2,1,2,1,1,1,1,2,1,2,2,1,2,2,
-2,2,2,2,4,4,1,1,1,2,1,2,2,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,1,2,1,2,6,6,6,1,2,0,0,0,0,
-0,0x17,0x17,0x17,0x17,0x344b,0x17,0x17,2,2,2,2,2,2,0,2,
-0,0,0,0,0,2,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,4,
-0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
-5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,
-0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17,
-0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x17,0x17,4,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x13,0x17,0x17,0x17,0x17,
-0x13,0x17,0x14,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x1b,0x1b,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0,0,0,0,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6,
-6,6,8,8,0x13,4,4,4,4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4,
-5,0x17,0x1b,0x1b,0xc,0x17,0x17,0x17,0x1b,4,5,0x54a,0x14,0x15,0x14,0x15,
-0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
-0x13,0x14,0x15,0x15,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,0x1a,
-0x1a,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x17,
-4,4,4,5,0,0,0,0,0,5,5,5,5,5,5,5,
+0x1b,0x1b,0x1b,0x1b,1,2,1,1,1,2,2,1,2,1,2,1,
+2,1,1,1,1,2,1,2,2,1,2,2,2,2,2,2,
+4,4,1,1,1,2,1,2,2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,1,
+2,1,2,6,6,6,1,2,0,0,0,0,0,0x17,0x17,0x17,
+0x17,0x344b,0x17,0x17,2,2,2,2,2,2,0,2,0,0,0,0,
+0,2,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0,0,0,0,0,0,0,4,0x17,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,6,5,5,5,5,
+5,5,5,0,5,5,5,5,5,5,5,0,5,5,5,5,
+5,5,5,0,5,5,5,5,5,5,5,0,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x1b,0x1b,
+5,5,5,0,0,0,0,0,0,0,0,0,0x17,0x17,0x1c,0x1d,
+0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x13,0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17,0x1c,0x1d,0x14,0x15,
+0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x13,0x17,0x17,0x17,0x17,0x13,0x17,0x14,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x17,0x17,
+0x17,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x13,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1b,0xa8b,0xacb,0xb0b,
-0xb4b,0xb8b,0xbcb,0xc0b,0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe4b,0xe8b,0xecb,
-0xf0b,0xf4b,0xf8b,0xfcb,0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb,5,5,5,5,
-5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
+0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,
+0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6,6,6,8,8,
+0x13,4,4,4,4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4,5,0x17,0x1b,0x1b,
+0xc,0x17,0x17,0x17,0x1b,4,5,0x54a,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,
+0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x13,0x14,0x15,0x15,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,0,6,6,0x1a,0x1a,4,4,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x685,5,
+5,5,5,5,5,5,5,5,5,5,5,0x17,4,4,4,5,
+0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x705,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x585,5,5,0x705,5,5,5,0x7885,
-5,0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x785,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x5c5,5,5,5,5,5,5,5,0x685,5,0x645,5,5,5,5,5,
+0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1b,0xa8b,0xacb,0xb0b,0xb4b,0xb8b,0xbcb,0xc0b,
+0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe4b,0xe8b,0xecb,0xf0b,0xf4b,0xf8b,0xfcb,
+0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb,5,5,5,5,5,0x685,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0x7985,0x7c5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0x7845,5,5,5,5,
-5,5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x685,5,5,
+5,5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x1e45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x7985,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7a85,5,
+5,0x705,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0x585,5,5,0x705,5,5,5,0x7885,5,0x605,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x5c5,5,0x745,5,0x6c5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,
+5,5,5,5,0x685,5,0x645,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x7c5,5,0x7845,0xa45,0xcc5,5,5,5,5,5,5,0xf45,5,5,5,
+5,5,5,5,5,5,5,0x7985,0x7c5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x605,0x605,0x605,0x605,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0x7845,5,5,5,5,5,5,5,5,
+0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x1e45,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x7985,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x585,5,5,5,5,5,5,5,0x585,5,5,
+5,5,5,5,5,5,5,5,5,5,0x7a85,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x585,5,5,5,5,5,
+5,5,5,5,5,0x5c5,5,0x745,5,0x6c5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x7c5,5,0x7845,
+0xa45,0xcc5,5,5,5,5,5,5,0xf45,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,0x605,0x605,
+0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x645,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x785,0xa45,5,5,5,5,
-5,5,5,5,5,5,5,5,0x585,0x5c5,0x605,5,0x5c5,5,5,5,
+5,0x585,5,5,5,5,5,5,5,0x585,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7c5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x745,5,5,5,
+5,5,5,5,5,5,0x585,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x705,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,5,
+5,5,5,5,5,5,0x785,0xa45,5,5,5,5,5,5,5,5,
+5,5,5,5,0x585,0x5c5,0x605,5,0x5c5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x1e45,5,
-5,5,5,5,5,5,0x645,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0x7c5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0x745,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x705,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x7885,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0x5c5,5,5,5,5,0x5c5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,0x7845,5,5,
+5,5,5,5,5,5,5,5,5,5,0x785,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,
-5,5,5,5,0x1e45,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0x1e45,5,5,5,5,5,
+5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x7885,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x545,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,
+5,5,0x5c5,5,5,5,5,0x5c5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0x7845,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,4,5,5,5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,4,0x17,0x17,0x17,
+5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,5,5,
+0x1e45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,0x545,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,
+5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,4,0x17,0x17,0x17,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,
1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,2,1,2,1,2,4,4,6,6,
-1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,6,
-7,7,7,0x17,6,6,6,6,6,6,6,6,6,6,0x17,4,
-5,5,5,5,5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x54a,
-6,6,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,
+1,2,1,2,1,2,1,2,4,4,6,6,1,2,1,2,
+1,2,1,2,1,2,1,2,1,2,5,6,7,7,7,0x17,
+6,6,6,6,6,6,6,6,6,6,0x17,4,5,5,5,5,
+5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x54a,6,6,0x17,0x17,
+0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0x1a,0x1a,0x1a,0x1a,
0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,1,2,5,4,4,2,5,5,5,5,5,
-0x1a,0x1a,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-2,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
-1,2,1,2,4,2,2,2,2,2,2,2,2,1,2,1,
-2,1,1,2,1,2,1,2,1,2,1,2,4,0x1a,0x1a,1,
-2,1,2,5,1,2,1,2,2,2,1,2,1,2,1,2,
-1,2,1,2,1,2,1,1,1,1,1,2,1,1,1,1,
-1,2,1,2,1,2,1,2,1,2,1,2,0,0,1,2,
-1,1,1,1,2,1,2,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,6,5,
-5,5,6,5,5,5,5,6,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,
-8,6,6,8,0x1b,0x1b,0x1b,0x1b,6,0,0,0,0x34cb,0x344b,0x3ccb,0x37cb,
-0x35cb,0x3fcb,0x1b,0x1b,0x19,0x1b,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,8,8,8,8,
-6,6,0,0,0,0,0,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,8,8,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,8,
-8,8,8,8,8,8,8,8,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,
-0x17,0x17,0x17,5,0x17,5,5,6,5,5,5,5,5,5,6,6,
-6,6,6,6,6,6,0x17,0x17,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,
-6,6,6,6,6,6,8,8,0,0,0,0,0,0,0,0,
-0,0,0,0x17,8,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0,4,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,6,8,8,6,6,6,6,8,8,
-6,6,8,8,5,5,5,5,5,6,4,5,5,5,5,5,
-5,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,
-5,5,5,0,5,5,5,5,5,5,5,5,5,6,6,6,
-6,6,6,8,8,6,6,8,8,6,6,0,0,0,0,0,
-0,0,0,0,5,5,5,6,5,5,5,5,5,5,5,5,
-6,8,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,4,5,5,5,5,5,5,0x1b,0x1b,0x1b,5,8,
-6,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,6,5,6,6,6,5,5,6,6,5,5,5,
-5,5,6,6,5,6,5,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,
-5,4,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,8,
-6,6,8,8,0x17,0x17,5,4,4,8,6,0,0,0,0,0,
-0,0,0,0,0,5,5,5,5,5,5,0,0,5,5,5,
-5,5,5,0,0,5,5,5,5,5,5,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,0,5,5,5,5,
-5,5,5,0,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x1a,
-4,4,4,4,2,2,2,2,2,2,2,2,2,4,0x1a,0x1a,
-0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,5,5,5,8,8,6,8,8,6,8,8,0x17,
-8,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
-0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,
+0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,
+4,1,2,5,4,4,2,5,5,5,5,5,0x1a,0x1a,1,2,
+1,2,1,2,1,2,1,2,1,2,1,2,2,2,1,2,
+1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,
+4,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,
+1,2,1,2,1,2,1,2,4,0x1a,0x1a,1,2,1,2,5,
+1,2,1,2,2,2,1,2,1,2,1,2,1,2,1,2,
+1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,2,
+1,2,1,2,1,2,1,2,1,1,1,1,2,1,2,0,
+0,0,0,0,1,2,0,2,0,2,1,2,1,2,0,0,
+0,0,0,0,5,5,6,5,5,5,6,5,5,5,5,6,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,8,8,6,6,8,0x1b,0x1b,0x1b,0x1b,
+6,0,0,0,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,0x1b,0x19,0x1b,0,0,
0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17,0,0,0,0,
+0,0,0,0,8,8,8,8,6,6,0,0,0,0,0,0,
+0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0,0,0,0,8,8,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0,0,0,0,5,5,5,5,5,5,5,0,0,0,0,5,
+5,5,5,5,8,8,8,8,8,8,8,8,8,8,8,8,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+6,6,5,5,5,5,5,5,0x17,0x17,0x17,5,0x17,5,5,6,
+5,5,5,5,5,5,6,6,6,6,6,6,6,6,0x17,0x17,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,6,6,6,6,6,6,6,6,6,6,6,8,8,
+0,0,0,0,0,0,0,0,0,0,0,0x17,8,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,4,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
+8,8,6,6,6,6,8,8,6,6,8,8,5,5,5,5,
+5,6,4,5,5,5,5,5,5,5,5,5,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,0,5,5,5,5,
+5,5,5,5,5,6,6,6,6,6,6,8,8,6,6,8,
+8,6,6,0,0,0,0,0,0,0,0,0,5,5,5,6,
+5,5,5,5,5,5,5,5,6,8,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0x17,0x17,0x17,0x17,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,
+5,5,5,0x1b,0x1b,0x1b,5,8,6,8,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,
+6,5,5,6,6,5,5,5,5,5,6,6,5,6,5,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,5,5,4,0x17,0x17,5,5,5,5,
+5,5,5,5,5,5,5,8,6,6,8,8,0x17,0x17,5,4,
+4,8,6,0,0,0,0,0,0,0,0,0,0,5,5,5,
+5,5,5,0,0,5,5,5,5,5,5,0,0,5,5,5,
+5,5,5,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,0,5,5,5,5,5,5,5,0,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,0x1a,4,4,4,4,2,2,2,2,
+2,2,2,2,2,4,0x1a,0x1a,0,0,0,0,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,8,
+8,6,8,8,6,8,8,0x17,8,6,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+5,5,5,5,5,5,5,5,0,0,0,0,5,5,5,5,
+5,5,5,0,0,0,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0x12,0x12,0x12,0x12,
0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
-0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
+0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-0x11,0x11,0x11,0x11,5,5,5,5,5,5,5,5,5,5,5,0x605,
-5,5,5,5,5,5,5,0x7c5,5,5,5,5,0x5c5,5,5,5,
+0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,5,5,5,5,
+5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5,0x7c5,
+5,5,5,5,0x5c5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0x6c5,5,0x6c5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x6c5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x18,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,5,5,5,5,5,0,5,0,5,5,0,5,
-5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,2,2,2,2,
-2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,
-2,2,2,2,0,0,0,0,0,5,6,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x1a,0x1a,
-0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x15,0x14,
+5,5,5,5,5,5,5,5,5,0x7c5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x18,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
+5,0,5,0,5,5,0,5,5,0,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,2,2,2,2,2,2,2,0,0,0,0,0,
+0,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0,
+0,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
+0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0x15,0x14,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0x1b,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,0x19,0x1b,0x1b,0x1b,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,0x15,0x17,0,0,0,0,0,0,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,
+0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0,
+0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x18,0x13,
+0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,0,0,0,0,5,5,5,5,
+5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,0x19,0x1b,0,0,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,
-0x15,0x17,0,0,0,0,0,0,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,0x17,0x13,0x13,0x16,0x16,0x14,0x15,0x14,
-0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x14,0x15,0x17,0x17,0x17,
-0x17,0x16,0x16,0x16,0x17,0x17,0x17,0,0x17,0x17,0x17,0x17,0x13,0x14,0x15,0x14,
-0x15,0x14,0x15,0x17,0x17,0x17,0x18,0x13,0x18,0x18,0x18,0,0x17,0x19,0x17,0x17,
-0,0,0,0,5,5,5,5,5,0,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,0,0x10,0,0,5,5,
+5,0,0,0x10,0,0,5,5,5,5,5,5,0,0,5,5,
5,5,5,5,0,0,5,5,5,5,5,5,0,0,5,5,
-5,5,5,5,0,0,5,5,5,0,0,0,0x19,0x19,0x18,0x1a,
-0x1b,0x19,0x19,0,0x1b,0x18,0x18,0x18,0x18,0x1b,0x1b,0,0,0,0,0,
-0,0,0,0,0,0x10,0x10,0x10,0x1b,0x1b,0,0,0,0x17,0x17,0x17,
-0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x18,0x18,0x18,0x17,0x1a,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,0x14,0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,
-0x17,0x17,5,5,5,5,5,5,5,5,5,5,4,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,
-5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,5,5,0,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5,
+5,0,0,0,0x19,0x19,0x18,0x1a,0x1b,0x19,0x19,0,0x1b,0x18,0x18,0x18,
+0x18,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0x10,0x10,0x10,
+0x1b,0x1b,0,0,0,0x17,0x17,0x17,0x19,0x17,0x17,0x17,0x14,0x15,0x17,0x18,
+0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,
+0x18,0x18,0x18,0x17,0x1a,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x14,
+0x18,0x15,0x18,0x14,0x15,0x17,0x14,0x15,0x17,0x17,5,5,5,5,5,5,
+5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,0,0,0xb00b,0xb80b,0x784b,0x804b,
-0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,
-0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0x17,0,
-0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,
-0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0x7ca,0x7ca,0x7ca,0x7ca,
-0x7ca,0xcca,0x11ca,0x11ca,0x11ca,0x11ca,0x1e4a,0x880a,0x980a,0x980a,0x980a,0x980a,0x980a,0x784a,0x984a,0x68a,
-0x11ca,0x344b,0x344b,0x388b,0x3ccb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x54b,0x34cb,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,
-0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x984a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,
-0x58a,0x58a,0x58a,0x5ca,0x5ca,0x5ca,0x5ca,0x68a,0x1b,0,0,0,0,0,0,0,
+5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,5,
+5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
+5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
+0,0,0,0,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,
+0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x17,0x17,0x17,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,
+0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,
+0x900b,0x980b,0xa00b,0xa80b,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0xcca,0x11ca,0x11ca,0x11ca,0x11ca,0x1e4a,0x880a,
+0x980a,0x980a,0x980a,0x980a,0x980a,0x784a,0x984a,0x68a,0x11ca,0x344b,0x344b,0x388b,0x3ccb,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0x34cb,0x1b,0x1b,0x1b,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
+0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x984a,0x68a,
+0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,0x58a,0x58a,0x58a,0x5ca,0x5ca,0x5ca,0x5ca,0x68a,
+0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,6,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,6,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
-0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,
-0xa00b,0xa80b,0xb00b,0xb80b,0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0,0,0,0,
-0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x1bca,5,5,5,5,5,5,
-5,5,0xb80a,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,
-6,6,6,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0x17,5,5,5,5,0,0,0,0,
-5,5,5,5,5,5,5,5,0x17,0x58a,0x5ca,0x7ca,0xa4a,0x1e4a,0,0,
-0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,0,0,0,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,
-2,2,2,2,2,2,2,2,5,5,5,5,5,5,5,5,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,
-0,0,0,0x17,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,5,5,0,0,0,
-5,0,0,5,5,5,5,5,5,5,0,0,5,0,5,5,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,0x17,0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,
+5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+6,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,
+0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0,0,0,0,
+0x58b,0x68b,0x7cb,0x11cb,0,0,0,0,0,0,0,0,0,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,
-0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,0x1bca,5,5,5,5,5,5,5,5,0xb80a,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,0,5,5,0,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,
+5,5,5,5,5,5,6,6,6,6,6,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0x17,
+5,5,5,5,0,0,0,0,5,5,5,5,5,5,5,5,
+0x17,0x58a,0x5ca,0x7ca,0xa4a,0x1e4a,0,0,0,0,0,0,0,0,0,0,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0x17,
-0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,
-0x90cb,0x98cb,0xa0cb,0xa8cb,0xb0cb,0xb8cb,0x36cb,0x354b,0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,2,
+5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,0,0,0,0x5ecb,0x344b,5,5,
-0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,
-0,0,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,
-0x30b,0x34b,0x38b,0x3cb,0x7cb,0xa4b,0x1e4b,0x784b,0x344b,0,0,0,0,0,0,0,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,
-5,6,6,6,0,6,6,0,0,0,0,0,6,6,6,6,
-5,5,5,5,0,5,5,5,0,5,5,5,5,5,5,5,
+0,0,0,0,0,0,0,0,0,0,0,0x17,1,1,1,1,
+1,1,1,1,1,1,1,0,1,1,1,1,2,2,0,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,
+2,2,2,2,2,2,0,2,2,0,0,0,1,1,1,1,
+1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,
+1,1,0,2,2,2,2,2,2,2,2,2,5,5,5,5,
+5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,0,4,4,
+4,4,4,4,4,4,4,0,0,0,0,0,4,4,4,4,
+4,4,0,4,4,4,4,4,4,4,4,4,4,4,4,4,
+4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,0,5,5,0,0,0,5,0,0,5,5,5,5,5,
+5,5,0,0,5,0,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0x17,
+0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x1b,
+0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0,0,0,0,0,0,0,0x58b,
+0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,5,5,0,0,
+0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x58b,0x7cb,
+0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0,0,6,6,6,0,0,0,0,6,5,5,5,5,
+5,5,0,0,0,0,0,0x17,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b,
+0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,0x90cb,0x98cb,0xa0cb,0xa8cb,0xb0cb,0xb8cb,0x36cb,0x354b,
+0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x58b,0x11cb,0x17,5,5,5,5,
+0,0,0,0,0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,
+0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,
+0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb,0x7cb,0xa4b,0x1e4b,0x784b,
+0x344b,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0,0,0,0,0,0,0,5,6,6,6,0,6,6,0,
+0,0,0,0,6,6,6,6,5,5,5,5,0,5,5,5,
+0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0,0,6,6,6,0,
+0,0,0,6,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x58b,0x7cb,0xa4b,5,5,5,5,
-5,6,6,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,0x1b,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
-0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,
-0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,
-0,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,
-0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
-0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,
-0,0,0x58b,0x68b,0x7cb,0x11cb,0x1e4b,0x784b,5,5,5,5,6,6,6,6,
-0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,
-0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,
-0xa80b,0xb00b,0xb80b,0x344b,0x34cb,0x348b,0x388b,0,5,5,5,5,5,5,5,5,
-5,5,0,6,6,0x13,0,0,5,5,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,0x58b,0x11cb,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0xccb,0x1e4b,0x344b,5,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,
-6,6,6,6,6,0x58b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0,0,
-0,0,0,0,5,5,5,5,5,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,6,8,6,8,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0,0,0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,
-0xa4b,0xccb,0xf4b,0x11cb,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,8,8,8,6,6,6,6,8,8,6,6,0x17,
-0x17,0x10,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,
-0,0x10,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5,
-5,5,5,6,6,6,6,6,8,6,6,6,6,6,6,6,
-6,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,
-5,8,8,5,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,
+5,0x58b,0x7cb,0xa4b,5,5,5,5,5,6,6,0,0,0,0,0x58b,
+0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,0x1b,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,
-0x17,0x17,5,0,0,0,0,0,0,0,0,0,8,5,5,5,
-5,0x17,0x17,0x17,0x17,6,6,6,6,0x17,8,6,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,5,0x17,5,0x17,0x17,0x17,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,
-8,8,6,6,6,6,6,6,6,6,6,8,0,0x58b,0x5cb,0x60b,
-0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,
-0x784b,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,8,8,8,6,6,6,8,8,
-6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,6,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-5,0,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
-5,0x17,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,
-6,6,6,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0,5,5,8,8,0,0,6,6,
-6,6,6,6,6,0,0,0,6,6,6,6,6,0,0,0,
-0,0,0,0,0,0,0,0,6,6,8,8,0,5,5,5,
-5,5,5,5,5,0,0,5,5,0,0,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,
-5,0,5,5,0,5,5,5,5,5,0,6,6,5,8,8,
-6,8,8,8,8,0,0,8,8,0,0,8,8,8,0,0,
-5,0,0,0,0,0,0,8,0,0,0,0,0,5,5,5,
+5,5,5,5,5,5,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,
-8,8,6,6,6,8,6,5,5,5,5,0x17,0x17,0x17,0x17,0x17,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0,0x17,6,5,
-5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-8,8,8,6,6,6,6,6,6,8,6,8,8,8,8,6,
-6,8,6,6,5,5,0x17,5,0,0,0,0,0,0,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8,
-8,8,6,6,6,6,0,0,8,8,8,8,6,6,8,6,
-6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,6,6,0,0,
+5,5,5,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-8,8,8,6,6,6,6,6,6,6,6,8,8,6,8,6,
-6,0x17,0x17,0x17,5,0,0,0,0,0,0,0,0,0,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
-0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,
+5,5,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0,0,0,
+0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,6,8,6,8,8,
-6,6,6,6,6,6,8,6,5,0,0,0,0,0,0,0,
-8,8,6,6,6,6,8,6,6,6,6,6,0,0,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,0,0,0,0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0x1e4b,0x784b,
+5,5,5,5,6,6,6,6,0,0,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
+0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,
+0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b,0x34cb,0x348b,0x388b,0,
+5,5,5,5,5,5,5,5,5,5,0,6,6,0x13,0,0,
+5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x58b,0x5cb,0x60b,
+0x64b,0x68b,0x7cb,0xa4b,0xccb,0x1e4b,0x344b,5,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,6,6,6,6,6,6,6,6,6,6,6,0x58b,0x7cb,0xa4b,
+0x1e4b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,5,5,6,6,
+6,6,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x144b,0x16cb,0x194b,0x1bcb,
+0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,6,5,5,6,
+6,5,0,0,0,0,0,0,0,0,0,6,8,6,8,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,
+6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0x30b,0x34b,
+0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,
-6,6,6,6,6,6,6,6,8,6,6,0x17,0,0,0,0,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,
-0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0,0,0,0,5,
-8,5,8,6,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,
+6,6,6,8,8,6,6,0x17,0x17,0x10,0x17,0x17,0x17,0x17,6,0,
+0,0,0,0,0,0,0,0,0,0x10,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,
+0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,
+0,0,0,0,5,5,5,5,5,5,5,6,6,6,6,6,
+8,6,6,6,6,6,6,6,6,0,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,5,8,8,5,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,6,0x17,0x17,5,0,0,0,0,0,
+0,0,0,0,8,5,5,5,5,0x17,0x17,0x17,0x17,6,6,6,
+6,0x17,8,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,0x17,
+5,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,6,
+6,6,6,8,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,
+0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+8,8,8,6,6,6,8,8,6,8,6,6,0x17,0x17,0x17,0x17,
+0x17,0x17,6,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,
+5,5,5,5,5,5,5,5,5,0x17,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+8,8,8,6,6,6,6,6,6,6,6,0,0,0,0,0,
0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,
-5,5,5,5,5,5,5,0,0,5,0,0,5,5,5,5,
-5,5,5,5,0,5,5,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,8,8,8,8,8,8,0,8,
-8,0,0,6,6,8,6,5,6,5,0x17,5,8,0,0,0,
+5,5,8,8,0,0,6,6,6,6,6,6,6,0,0,0,
+6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,
+6,6,8,8,0,5,5,5,5,5,5,5,5,0,0,5,
+5,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0,5,5,5,5,5,5,5,0,5,5,0,5,5,5,
+5,5,0,6,6,5,8,8,6,8,8,8,8,0,0,8,
+8,0,0,8,8,8,0,0,5,0,0,0,0,0,0,8,
+0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,8,8,8,
+6,6,6,6,6,6,6,6,8,8,6,6,6,8,6,5,
+5,5,5,0x17,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0x17,0x17,0,0x17,6,5,5,5,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-0,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,
-0,0,6,6,8,8,8,8,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,
-6,8,5,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,6,
-0,0,0,0,0,0,0,0,5,6,6,6,6,6,6,8,
-8,6,6,6,5,5,5,5,5,6,6,6,6,6,6,6,
-6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0x17,0x17,0x17,0,0,0,0,0,
+5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,
+6,8,6,8,8,8,8,6,6,8,6,6,5,5,0x17,5,
+0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,8,8,8,6,6,6,6,0,0,
+8,8,8,8,6,6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+5,5,5,5,6,6,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6,
+6,6,6,8,8,6,8,6,6,0x17,0x17,0x17,5,0,0,0,
+0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,6,8,6,8,8,6,6,6,6,6,6,8,6,
+5,0x17,0,0,0,0,0,0,8,8,6,6,6,6,8,6,
+6,6,6,6,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b,5,5,5,5,5,5,5,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,6,
+8,6,6,0x17,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0,
+0,0,0,0,0,0,0,5,8,5,8,6,0x17,0x17,0x17,0,
+0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
+0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,0,
+0,5,0,0,5,5,5,5,5,5,5,5,0,5,5,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+8,8,8,8,8,8,0,8,8,0,0,6,6,8,6,5,
+6,5,0x17,5,8,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,8,8,8,6,6,6,6,0,0,6,6,8,8,8,8,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,6,6,6,6,6,6,8,5,6,6,6,6,0x17,
+0x17,0x17,0x17,0x17,0x17,0x17,0x17,6,0,0,0,0,0,0,0,0,
+5,6,6,6,6,6,6,8,8,6,6,6,5,5,5,5,
+5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,8,
6,6,0x17,0x17,0x17,5,0x17,0x17,5,0x17,0x17,0x17,0x17,0x17,0,0,
0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
@@ -1201,140 +1213,152 @@ static const uint16_t propsTrie_index[22276]={
0x68a,0x68a,0x5ca,0x60a,0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca,5,5,5,5,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0,0x10,0x10,0x10,0x10,
-0x10,0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0,0,6,6,6,6,
-6,0x17,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0,
0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,
-6,6,6,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,4,4,4,4,
-0x17,0x1b,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b,0x7a0b,0x7a8b,0,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,0,5,5,5,0x54b,0x58b,0x5cb,0x60b,
-0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,
-0x58b,0x5cb,0x60b,0x17,0x17,0x17,0x17,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,0,0,0,0,6,5,8,8,8,
-8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+5,5,5,5,5,5,5,5,5,5,5,0,0x10,0x10,0x10,0x10,
+0x10,0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
+6,6,6,6,6,0x17,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,
+4,4,4,4,0x17,0x1b,0,0,0,0,0,0,0,0,0,0,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b,
+0x7a0b,0x7a8b,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,0,0,0,5,5,5,
+0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,
+0x94b,0x98b,0x9cb,0xa0b,0x58b,0x5cb,0x60b,0x17,0x17,0x17,0x17,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,6,
+5,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-0,0,0,0,0,0,0,6,6,6,6,4,4,4,4,4,
-4,4,4,4,4,4,4,4,4,4,0x17,4,6,0,0,0,
-0,0,0,0,0,0,0,0,8,8,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
+8,8,8,8,0,0,0,0,0,0,0,6,6,6,6,4,
+4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x17,4,
+6,0,0,0,0,0,0,0,0,0,0,0,8,8,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,4,4,4,4,0,4,4,4,4,4,4,4,
+0,4,4,0,5,5,5,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,0,0,0,0,0,0,0,0,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
-0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,0,0,0x1b,6,6,0x17,0x10,0x10,0x10,0x10,0,0,0,0,
+0,0,0,0,5,5,5,0,0,0,0,0,0,0,0,0,
+0,0,0,0,5,5,5,5,0,0,0,0,0,0,0,0,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0,0,0,0,0,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,0,0,0x1b,6,6,0x17,0x10,0x10,0x10,0x10,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b,
-0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,
-6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,6,6,6,6,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1b,0x1b,6,6,6,0x1b,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,0,0,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,
+0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b,0x1b,8,8,8,
+8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,6,6,6,6,
+6,6,6,0x1b,0x1b,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,0x1b,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x80b,
-0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0,0,0,0,0,0,0,0,
-0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,
-0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x58b,0x5cb,0x60b,0x64b,0x68b,0x58b,0x68b,0,0,0,
-0,0,0,0,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
-0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,
-0x1c9,0x209,0x249,0x289,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,2,2,2,2,2,2,2,0,2,2,2,2,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,1,0,1,1,0,0,1,0,
-0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,
-1,1,2,2,2,2,0,2,0,2,2,2,2,2,2,2,
-0,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
-1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,
-1,0,1,1,1,1,1,1,1,0,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,1,1,0,1,1,1,1,0,1,1,1,1,
-1,0,1,0,0,0,1,1,1,1,1,1,1,0,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
+0,0,0,0,0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
+0x74b,0x78b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0,0,0,0,
+0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,
+0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x58b,0x5cb,0x60b,0x64b,0x68b,0x58b,
+0x68b,0,0,0,0,0,0,0,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,
+0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,
+0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,2,2,2,2,2,2,2,0,2,2,
+2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,
-2,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,0x18,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,1,0,1,1,
+0,0,1,0,0,1,1,0,0,1,1,1,1,0,1,1,
+1,1,1,1,1,1,2,2,2,2,0,2,0,2,2,2,
+2,2,2,2,0,2,2,2,2,2,2,2,2,2,2,2,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+2,2,2,2,1,1,0,1,1,1,1,0,0,1,1,1,
+1,1,1,1,1,0,1,1,1,1,1,1,1,0,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,1,1,
+2,2,2,2,2,2,2,2,1,1,0,1,1,1,1,0,
+1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,
+1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0x18,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,2,2,2,2,2,0x18,2,2,
-2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,2,2,2,0x18,2,2,2,2,2,2,1,2,
-0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,
-0x149,0x189,0x1c9,0x209,0,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,6,
-6,6,6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,0,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,0,0,6,6,6,6,6,6,6,0,6,6,0,6,6,
-6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,5,0x1b,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0,0,0,6,6,6,6,6,6,6,4,
-4,4,4,4,4,4,0,0,5,5,5,5,5,5,5,5,
-5,5,5,5,6,6,6,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0,0x19,5,5,5,5,5,0,0,0x58b,
-0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,6,6,6,6,6,6,6,0,
-0,0,0,0,0,0,0,0,2,2,2,2,6,6,6,6,
-6,6,6,4,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,
-0x249,0x289,0,0,0,0,0x17,0x17,1,1,2,2,2,2,2,2,
+1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
-0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x78cb,0x794b,0x814b,0x58b,0x5cb,0x60b,0x64b,0x68b,
-0x6cb,0x70b,0x74b,0x78b,0x1b,0x34cb,0x344b,0x3ccb,0x19,0x58b,0x5cb,0x788b,0x78cb,0,0,0,
-0,0,0,0,0,0,0,0,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,
-0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,
-0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x984b,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,
-0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x1b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,
-0x900b,0xa00b,0x804b,0x788b,0x344b,0x354b,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,
-0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,
-0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x18,0x18,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,5,5,5,5,0,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,0,5,5,0,5,0,0,5,
-0,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
-0,5,0,5,0,0,0,0,0,0,5,0,0,0,0,5,
-0,5,0,5,0,5,5,5,0,5,5,0,5,0,0,5,
-0,5,0,5,0,5,0,5,0,5,5,0,5,0,0,5,
-5,5,5,0,5,5,5,5,5,5,5,0,5,5,5,5,
-0,5,5,5,5,0,5,0,5,5,5,5,5,5,5,5,
-5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,0,5,5,5,0,5,5,5,
-5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+2,2,2,2,2,2,0,0,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0x18,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,0x18,2,2,2,2,
+2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0x18,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,0x18,2,2,2,2,2,2,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,2,2,2,0x18,2,2,2,2,
+2,2,1,2,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,
+0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0x1b,
+0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6,6,6,6,6,
+6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,
+6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,
+6,6,6,6,6,0,0,6,6,6,6,6,2,2,2,2,
+2,2,2,2,2,2,5,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,0,6,6,0,6,
+6,0,6,6,6,6,6,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,5,0x1b,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,0,0,0,6,6,6,6,
+6,6,6,4,4,4,4,4,4,4,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,6,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+5,5,5,5,5,5,5,5,6,6,6,6,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0x19,5,5,5,5,
+5,5,5,0,5,5,5,5,0,5,5,0,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
+5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,6,6,6,6,
+6,6,6,0,0,0,0,0,0,0,0,0,2,2,2,2,
+6,6,6,6,6,6,6,4,0,0,0,0,0x49,0x89,0xc9,0x109,
+0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17,1,1,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,
+0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x78cb,0x794b,0x814b,0x58b,
+0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x1b,0x34cb,0x344b,0x3ccb,0x19,0x58b,0x5cb,0x788b,
+0x78cb,0,0,0,0,0,0,0,0,0,0,0,0x16cb,0x194b,0x1bcb,0x1e4b,
+0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0xa04b,0xa84b,0xb04b,
+0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x984b,0xa04b,0xa84b,0xb04b,
+0xb84b,0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x1b,0x5cb,0x60b,0x64b,0x68b,0x6cb,
+0x70b,0x74b,0x78b,0x7cb,0x900b,0xa00b,0x804b,0x788b,0x344b,0x354b,0,0,0,0x58b,0x5cb,0x60b,
+0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,
+0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x18,0x18,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
+0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,0,
+5,0,0,5,0,5,5,5,5,5,5,5,5,5,5,0,
+5,5,5,5,0,5,0,5,0,0,0,0,0,0,5,0,
+0,0,0,5,0,5,0,5,0,5,5,5,0,5,5,0,
+5,0,0,5,0,5,0,5,0,5,0,5,0,5,5,0,
+5,0,0,5,5,5,5,0,5,5,5,5,5,5,5,0,
+5,5,5,5,0,5,5,5,5,0,5,0,5,5,5,5,
+5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,0,0,0,5,5,5,
+0,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,
0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x54b,0x54b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
@@ -1351,2181 +1375,2229 @@ static const uint16_t propsTrie_index[22276]={
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0,0,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,
0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
-0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,0x705,5,5,
+0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,
+0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,
+0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,
+0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x1b,0x1b,0x1b,5,0x705,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x645,5,5,5,
+5,5,5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,0x645,5,5,5,5,5,
+5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5,5,
+5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0xcc5,5,5,5,5,
-5,5,5,5,0xf45,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,0xf45,5,5,5,5,5,5,5,5,5,5,5,
-5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,
+5,5,5,0xcc5,5,5,5,5,5,5,5,5,0xf45,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,0xf45,5,5,5,
+5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,5,
+5,5,5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,5,5,5,5,5,5,5,5,5,5,0x605,5,5,5,5,
-5,5,5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,
+5,5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5,5,5,0x605,5,5,5,5,5,5,5,5,5,5,5,5,
+5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x785,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,0x785,5,5,5,5,5,5,5,5,5,5,5,
+5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
-0,0x10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0,0x10,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,
+6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
-0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,
-0,0,0,0
+0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0,0,0,0,0,0
};
static const UTrie2 propsTrie={
propsTrie_index,
- propsTrie_index+4532,
+ propsTrie_index+4656,
NULL,
- 4532,
- 17744,
+ 4656,
+ 18032,
0xa40,
- 0x1234,
+ 0x12b0,
0x0,
0x0,
0x110000,
- 0x5700,
+ 0x589c,
NULL, 0, FALSE, FALSE, 0, NULL
};
-static const uint16_t propsVectorsTrie_index[31228]={
-0x4e8,0x4f0,0x4f8,0x500,0x518,0x520,0x528,0x530,0x538,0x540,0x548,0x550,0x558,0x560,0x568,0x570,
-0x577,0x57f,0x587,0x58f,0x592,0x59a,0x5a2,0x5aa,0x5b2,0x5ba,0x5c2,0x5ca,0x5d2,0x5da,0x5e2,0x5ea,
-0x5f2,0x5fa,0x601,0x609,0x611,0x619,0x621,0x629,0x631,0x639,0x63e,0x646,0x64d,0x655,0x65d,0x665,
-0x66d,0x675,0x67d,0x685,0x68c,0x694,0x69c,0x6a4,0x6ac,0x6b4,0x6bc,0x6c4,0x6cc,0x6d4,0x6dc,0x6e4,
-0x1a38,0xd5e,0xe35,0x6ec,0x508,0xe9c,0xea4,0x1bf2,0x1300,0x1310,0x12f8,0x1308,0x7c5,0x7cb,0x7d3,0x7db,
-0x7e3,0x7e9,0x7f1,0x7f9,0x801,0x807,0x80f,0x817,0x81f,0x825,0x82d,0x835,0x83d,0x845,0x84d,0x854,
-0x85c,0x862,0x86a,0x872,0x87a,0x880,0x888,0x890,0x898,0x1318,0x8a0,0x8a8,0x8b0,0x8b7,0x8bf,0x8c7,
-0x8cf,0x8d3,0x8db,0x8e2,0x8ea,0x8f2,0x8fa,0x902,0x162c,0x1634,0x90a,0x912,0x91a,0x922,0x92a,0x931,
-0x1692,0x1682,0x168a,0x1973,0x197b,0x1328,0x939,0x1320,0x1572,0x1572,0x1574,0x133c,0x133d,0x1330,0x1332,0x1334,
-0x169a,0x169c,0x941,0x169c,0x949,0x94e,0x956,0x16a1,0x95c,0x169c,0x962,0x96a,0xc39,0x16a9,0x16a9,0x972,
-0x16b9,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,
-0x16ba,0x16ba,0x16ba,0x16b1,0x97a,0x16c2,0x16c2,0x982,0xb59,0xb61,0xb69,0xb71,0x16d2,0x16ca,0x98a,0x992,
-0x99a,0x16dc,0x16e4,0x9a2,0x16da,0x9aa,0x1a40,0xd66,0xb79,0xb81,0xb89,0xb8e,0x18e1,0xc6c,0xc73,0x1849,
-0xc09,0x1a48,0xd6e,0xd76,0xd7e,0xd86,0xf47,0xf48,0x1939,0x193e,0xca8,0xcb0,0x19af,0x19b7,0x1b11,0xe3d,
-0x19bf,0xcf2,0xcfa,0x19c7,0x10f6,0x1196,0xf27,0xd8e,0x1869,0x1851,0x1861,0x1859,0x18f9,0x18f1,0x18b9,0xc19,
-0x1345,0x1345,0x1345,0x1345,0x1348,0x1345,0x1345,0x1350,0x9b2,0x1358,0x9b6,0x9be,0x1358,0x9c6,0x9ce,0x9d6,
-0x1368,0x1360,0x1370,0x9de,0x9e6,0x1378,0x9ee,0x9f6,0x1380,0x1388,0x1390,0x1398,0x9fe,0x13a0,0x13a7,0x13af,
-0x13b7,0x13bf,0x13c7,0x13cf,0x13d7,0x13de,0x13e6,0x13ee,0x13f6,0x13fe,0x1401,0x1403,0x16ec,0x17dc,0x17e2,0x1929,
-0x140b,0xa06,0xa0e,0x1525,0x152a,0x152d,0x1535,0x1413,0x153d,0x153d,0x1423,0x141b,0x142b,0x1433,0x143b,0x1443,
-0x144b,0x1453,0x145b,0x1463,0x17ea,0x1841,0x1983,0x1ad9,0x1473,0x147a,0x1482,0x148a,0x146b,0x1492,0x17f2,0x17f9,
-0x16f4,0x16f4,0x16f4,0x16f4,0x16f4,0x16f4,0x16f4,0x16f4,0x1801,0x1804,0x1801,0x1801,0x180c,0x1813,0x1815,0x181c,
-0x1824,0x1828,0x1828,0x182b,0x1828,0x1828,0x1831,0x1828,0x1871,0x1931,0x198b,0xb96,0xb9c,0x1c36,0x1c3e,0x1d15,
-0x18d1,0xc49,0xc4d,0x1946,0x18c1,0x18c1,0x18c1,0xc21,0x18c9,0xc41,0x1911,0xc98,0xc29,0xc31,0xc31,0x19cf,
-0x1901,0x1993,0xc83,0xc88,0xa16,0x16fc,0x16fc,0xa1e,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0xa26,0x6f0,
-0x155a,0x157c,0xa2e,0x1584,0xa36,0x158c,0x1594,0x159c,0xa3e,0xa43,0x15a4,0x15ab,0xa48,0x170c,0x1921,0xc11,
-0xa50,0x1606,0x160d,0x15b3,0x1615,0x161c,0x15bb,0x15bf,0x15d8,0x15d8,0x15da,0x15c7,0x15cf,0x15cf,0x15d0,0x1624,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,
-0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1714,0x1717,0x1879,0x1879,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,
-0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e2,0x15e9,0x1a30,0x12b5,
-0x171f,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,
-0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,
-0x1725,0x1725,0x1725,0x1725,0xa58,0x172d,0xa60,0x1a50,0x19db,0x19db,0x19db,0x19db,0x19db,0x19db,0x19db,0x19db,
-0x19d7,0xd02,0x19eb,0x19e3,0x19ed,0x1a58,0x1a58,0xd96,0x18d9,0x194e,0x19a3,0x19a7,0x199b,0x1b09,0xcb8,0xcbb,
-0x1909,0xc90,0x1956,0xcc3,0x19f5,0x19f8,0xd0a,0x1a60,0x1a08,0x1a00,0xd12,0xd9e,0x1a68,0x1a6c,0xda6,0xff0,
-0x1a10,0xd1a,0xd22,0x1a74,0x1a84,0x1a7c,0xdae,0xef7,0xe45,0xe4d,0x1c85,0xfa8,0x1d32,0x1d32,0x1a8c,0xdb6,
-0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,
-0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,
-0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,
-0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,
-0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,
-0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,
-0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,
-0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,
-0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,
-0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,
-0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,
-0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,
-0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,
-0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,
-0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,
-0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,
-0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,
-0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,
-0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,
-0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,
-0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,
-0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0x167a,0x1674,0x1675,0x1676,0x1677,0x1678,0x1679,0xa68,0xdbe,0xdc1,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,
-0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,0x164c,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,
-0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x15f1,0x15f1,0x15f1,0x15f1,0x15f1,0x15f1,0x15f1,0x15f1,
-0x15f6,0x15fe,0x1839,0x12bd,0x1919,0x1919,0x12c1,0x12c8,0xa70,0xa78,0xa80,0x14b2,0x14b9,0x14c1,0xa88,0x14c9,
-0x14fa,0x14fa,0x14a2,0x14aa,0x14d1,0x14f1,0x14f2,0x1502,0x14d9,0x149a,0xa90,0x14e1,0xa98,0x14e9,0xaa0,0xaa4,
-0xca0,0x150a,0xaac,0xab4,0x1512,0x1518,0x151d,0xabc,0xacc,0x1562,0x156a,0x154d,0x1552,0xad4,0xadc,0xac4,
-0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,
-0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x163c,0x1644,0x1644,0x1644,0x1644,
-0x1420,0x1420,0x1460,0x14a0,0x14e0,0x1520,0x1560,0x15a0,0x15dc,0x161c,0x1648,0x1688,0x16c8,0x1708,0x1748,0x1788,
-0x17c8,0x1804,0x1844,0x1884,0x18c4,0x18f8,0x1934,0x1974,0x19b4,0x19f4,0x1a30,0x1a70,0x1ab0,0x1af0,0x1b30,0x1b70,
-0xa80,0xac0,0xb00,0xb40,0xb80,0xa40,0xe75,0xa40,0xe97,0xa40,0xa40,0xa40,0xa40,0xbc0,0x12dd,0x12dd,
-0xed7,0xc00,0xa40,0xa40,0xa40,0xa40,0xf17,0xc2d,0xa40,0xa40,0xc6d,0xcad,0xced,0xd2d,0xe35,0xda5,
-0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,0x121d,
-0x121d,0x121d,0x121d,0x121d,0xf57,0x125d,0x1092,0x10d2,0x129d,0x10dd,0x131d,0x131d,0x131d,0xf97,0xfb7,0xff7,
-0x135d,0x135d,0x1037,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,
-0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0xfb7,0x1052,
+static const uint16_t propsVectorsTrie_index[32060]={
+0x511,0x519,0x521,0x529,0x541,0x549,0x551,0x559,0x561,0x569,0x571,0x579,0x581,0x589,0x591,0x599,
+0x5a0,0x5a8,0x5b0,0x5b8,0x5bb,0x5c3,0x5cb,0x5d3,0x5db,0x5e3,0x5eb,0x5f3,0x5fb,0x603,0x60b,0x613,
+0x61b,0x623,0x62a,0x632,0x63a,0x642,0x64a,0x652,0x65a,0x662,0x667,0x66f,0x676,0x67e,0x686,0x68e,
+0x696,0x69e,0x6a6,0x6ae,0x6b5,0x6bd,0x6c5,0x6cd,0x6d5,0x6dd,0x6e5,0x6ed,0x6f5,0x6fd,0x705,0x70d,
+0x1aba,0xd5a,0xe2e,0x1162,0x1299,0x1c7b,0x1e12,0x1c73,0x1367,0x1377,0x135f,0x136f,0x7da,0x7e0,0x7e8,0x7f0,
+0x7f8,0x7fe,0x806,0x80e,0x816,0x81c,0x824,0x82c,0x834,0x83a,0x842,0x84a,0x852,0x85a,0x862,0x869,
+0x871,0x877,0x87f,0x887,0x88f,0x895,0x89d,0x8a5,0x8ad,0x137f,0x8b5,0x8bd,0x8c5,0x8cc,0x8d4,0x8dc,
+0x8e4,0x8e8,0x8f0,0x8f7,0x8ff,0x907,0x90f,0x917,0x169a,0x16a2,0x91f,0x927,0x92f,0x937,0x93f,0x946,
+0x1700,0x16f0,0x16f8,0x19f5,0x19fd,0x138f,0x94e,0x1387,0x15e3,0x15e3,0x15e5,0x13a3,0x13a4,0x1397,0x1399,0x139b,
+0x1708,0x170a,0x956,0x170a,0x95e,0x963,0x96b,0x170f,0x971,0x170a,0x977,0x97f,0xc3a,0x1717,0x1717,0x987,
+0x1727,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,
+0x1728,0x1728,0x1728,0x171f,0x98f,0x1730,0x1730,0x997,0xb62,0xb6a,0xb72,0xb7a,0x1740,0x1738,0x99f,0x9a7,
+0x9af,0x174a,0x1752,0x9b7,0x1748,0x9bf,0x1ac2,0xd62,0xb82,0xb8a,0xb92,0xb97,0x195b,0xc61,0xc68,0x18b7,
+0xc12,0x1aca,0xd6a,0xd72,0xd7a,0xd82,0xf38,0xf3c,0x19bb,0x19c0,0xca0,0xca8,0x1a31,0x1a39,0x1b93,0xe36,
+0x1a41,0xcee,0xcf6,0x1a49,0x10e2,0x118a,0xf10,0xd8a,0x18d7,0x18bf,0x18cf,0x18c7,0x1973,0x196b,0x1927,0x19b3,
+0x13ac,0x13ac,0x13ac,0x13ac,0x13af,0x13ac,0x13ac,0x13b7,0x9c7,0x13bf,0x9cb,0x9d3,0x13bf,0x9db,0x9e3,0x9eb,
+0x13cf,0x13c7,0x13d7,0x9f3,0x9fb,0x13df,0xa03,0xa0b,0x13e7,0x13ef,0x13f7,0x13ff,0xa13,0x1407,0x140e,0x1416,
+0x141e,0x1426,0x142e,0x1436,0x143e,0x1445,0x144d,0x1455,0x145d,0x1465,0x1468,0x146a,0x175a,0x184d,0x1853,0x19a3,
+0x1472,0xa1b,0xa23,0x1598,0x159d,0x15a0,0x15a6,0x147a,0x15ae,0x15ae,0x148a,0x1482,0x1492,0x149a,0x14a2,0x14aa,
+0x14b2,0x14ba,0x14c2,0x14ca,0x185b,0x18af,0x1a05,0x1b5b,0x14da,0x14e0,0x14e8,0x14f0,0x14d2,0x14f8,0x1863,0x186a,
+0x1762,0x1762,0x1762,0x1762,0x1762,0x1762,0x1762,0x1762,0x1872,0x1872,0x1872,0x1872,0x187a,0x1881,0x1883,0x188a,
+0x1892,0x1896,0x1896,0x1899,0x1896,0x1896,0x189f,0x1896,0x18df,0x19ab,0x1a0d,0xb9f,0xba5,0x1cbf,0x1cc7,0x1d9d,
+0x194b,0x193f,0x1943,0x19c8,0x192f,0x192f,0x192f,0xc22,0x1937,0xc42,0x198b,0xc90,0xc2a,0xc32,0xc32,0x1a51,
+0x197b,0x1a15,0xc78,0xc80,0xa2b,0x176a,0x176a,0xa33,0x1772,0x1772,0x1772,0x1772,0x1772,0x1772,0xa3b,0x715,
+0x15cb,0x15ed,0xa43,0x15f5,0xa4b,0x15fd,0x1605,0x160d,0xa53,0xa58,0x1615,0x161c,0xa5d,0x177a,0x199b,0xc1a,
+0xa65,0x1677,0x167e,0x1624,0x1686,0x168a,0x162c,0x1630,0x1649,0x1649,0x164b,0x1638,0x1640,0x1640,0x1641,0x1692,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,
+0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1782,0x1785,0x18e7,0x18e7,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,
+0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x165a,0x1ab2,0x1e7e,
+0x178d,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,
+0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,0x1793,
+0x1793,0x1793,0x1793,0x1793,0xa6d,0x179b,0xa75,0x1ad2,0x1a5d,0x1a5d,0x1a5d,0x1a5d,0x1a5d,0x1a5d,0x1a5d,0x1a5d,
+0x1a59,0xcfe,0x1a6d,0x1a65,0x1a6f,0x1ada,0x1ada,0xd92,0x1953,0x19d0,0x1a25,0x1a29,0x1a1d,0x1b8b,0xcb0,0xcb7,
+0x1983,0xc88,0x19d8,0xcbf,0x1a77,0x1a7a,0xd06,0x1ae2,0x1a8a,0x1a82,0xd0e,0xd9a,0x1aea,0x1aee,0xda2,0xfec,
+0x1a92,0xd16,0xd1e,0x1af6,0x1b06,0x1afe,0xdaa,0xee0,0xe3e,0xe46,0x1d0d,0xf9c,0x1dba,0x1dba,0x1b0e,0xdb2,
+0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,
+0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,
+0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,
+0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,
+0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,
+0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,
+0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,
+0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,
+0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,
+0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,
+0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,
+0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,
+0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,
+0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,
+0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,
+0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,
+0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,
+0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,
+0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,
+0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,
+0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,
+0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0x16e8,0x16e2,0x16e3,0x16e4,0x16e5,0x16e6,0x16e7,0xa7d,0xdba,0xdbd,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,
+0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,0x16ba,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,
+0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x15b6,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,
+0x1667,0x166f,0x18a7,0x132c,0x1993,0x1993,0x1330,0x1337,0xa85,0xa8d,0xa95,0x1518,0x151f,0x1527,0xa9d,0x152f,
+0x156d,0x156d,0x1500,0x1508,0x1537,0x1564,0x1565,0x1575,0x153f,0x1544,0x154c,0x1554,0xaa5,0x155c,0xaad,0x1510,
+0xc98,0x157d,0xab5,0xabd,0x1585,0x158b,0x1590,0xac5,0xad5,0x15d3,0x15db,0x15be,0x15c3,0xadd,0xae5,0xacd,
+0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,
+0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16b2,0x16b2,0x16b2,0x16b2,
+0x14c4,0x14c4,0x1504,0x1544,0x1584,0x15c4,0x1604,0x1644,0x1680,0x16c0,0x16ec,0x172c,0x176c,0x17ac,0x17ec,0x182c,
+0x186c,0x18a8,0x18e8,0x1928,0x1968,0x199c,0x19d8,0x1a18,0x1a58,0x1a98,0x1ad4,0x1b14,0x1b54,0x1b94,0x1bd4,0x1c14,
+0xe59,0xa80,0xac0,0xb00,0xb40,0xb6b,0xed9,0xa40,0xefb,0xa40,0xa40,0xa40,0xa40,0xbab,0x1381,0x1381,
+0xf3b,0xfbb,0xa40,0xa40,0xa40,0xbeb,0xf7b,0xc2b,0xa40,0xc51,0xc91,0xcd1,0xd11,0xd51,0xe99,0xdc9,
+0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,0x12c1,
+0x12c1,0x12c1,0x12c1,0x12c1,0xffb,0x1301,0x1136,0x1176,0x1341,0x1181,0x13c1,0x13c1,0x13c1,0x103b,0x105b,0x109b,
+0x1401,0x1401,0x10db,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,
+0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x105b,0x10f6,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
-0xde5,0xdf5,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
-0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd65,
-0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,
-0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x111d,
-0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,
-0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x11dd,0x115d,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0xba4,0xbab,0xbb3,0xbbb,0x1881,0x1881,0x1881,0xbc3,0xbcb,0xbce,0x18b1,0x18a9,0xc01,0xd2a,0xd2e,0xd32,
-0x508,0x508,0x508,0x508,0xd3a,0x1a18,0xd42,0xf3f,0x1735,0xae4,0xaea,0x1000,0xbd6,0x18e9,0xc7b,0x508,
-0x174a,0x173d,0x1742,0x1889,0xbde,0xbe6,0x1134,0x113a,0x1c6d,0xf5d,0x1c5d,0x6f8,0x508,0x508,0x508,0x508,
-0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0x1c8d,0xfb0,0xfb8,0xfc0,0x508,0x508,0x508,0x508,
-0xbee,0xbf1,0xdc9,0x1cd5,0xff8,0x700,0x508,0x1092,0xccb,0xd4a,0x508,0x508,0x1c02,0xeff,0xf07,0x1d1d,
-0xc55,0xc5c,0xc64,0x1a94,0x1cb5,0x508,0x1c95,0xfd0,0x1a9c,0xdd1,0xdd9,0xde1,0x1020,0x708,0x508,0x508,
-0x1aa4,0x1aa4,0x710,0x508,0x1d4a,0x10aa,0x1d42,0x10b2,0x1e0e,0x11ac,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0xde9,0x1e66,0x1291,0x508,0x508,0x1e2e,0x11d4,0x11db,0x718,0x508,0x71c,0x1248,0x11e3,
-0x1b19,0x1b1b,0xe55,0xe5c,0x1aac,0x1ab4,0xdf1,0xf1f,0x1bfa,0xee7,0xeef,0xfc8,0x1c1a,0x1c1e,0x1c26,0x1040,
-0xf93,0xf98,0x724,0x508,0x109a,0x10a2,0x1c7d,0xfa0,0xf75,0xf7b,0xf83,0xf8b,0x508,0x508,0x508,0x508,
-0x1daa,0x1da2,0x1124,0x112c,0x1cfd,0x1cf5,0x1068,0x508,0x508,0x508,0x508,0x508,0x1ce5,0x1028,0x1030,0x1038,
-0x1cad,0x1ca5,0xfe0,0x111c,0x1c2e,0xf2f,0x72c,0x508,0x1078,0x1080,0x508,0x508,0x508,0x508,0x508,0x508,
-0x1e06,0x118e,0x734,0x508,0x508,0x1d0d,0x1d05,0x1070,0x1250,0x1256,0x125e,0x508,0x508,0x11eb,0x11ef,0x11f7,
-0x1dde,0x1dd6,0x1176,0x1dce,0x1dc6,0x73c,0x1cdd,0x1018,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x10da,0x10df,0x10e7,0x10ee,0x110e,0x1114,0x508,0x508,0x115a,0x115e,0x1166,0x119e,0x11a4,0x744,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x11bc,0x508,0x508,0x508,0x508,0x508,0x748,0x1e4e,0x1238,
-0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,
-0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x195e,0x1963,0xcd3,0xcda,0xcda,0xcda,
-0x196b,0x196b,0x196b,0xce2,0x1d3a,0x1d3a,0x1d3a,0x1d3a,0x1d3a,0x1d3a,0x750,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,0x1b23,
-0x1b23,0xe64,0xfe8,0x758,0x508,0x508,0x75c,0xf37,0x1ccd,0x1cc5,0x1008,0x1010,0x764,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x1e26,0x1e1e,0x11cc,0x508,0x508,0x508,0x1c12,0x1c12,0xf0f,0x1c0a,0xf17,0x508,0x508,0x1106,
-0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,
-0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dba,0x1dbe,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,
-0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1e76,0x1266,0x126c,0x1286,0x1289,0x1289,0x1289,0x76c,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1c65,0x1c65,0x1c65,
-0xf50,0xf55,0x774,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1752,0x1752,0x1752,
-0x1752,0x1752,0x1752,0x1752,0xaf2,0x1762,0xafa,0x1763,0x175a,0x176b,0x1771,0x1779,0xb02,0x18a1,0x18a1,0x77c,
-0x508,0x508,0x508,0x508,0x11c4,0x1891,0x1891,0xbf9,0xcea,0x508,0x508,0x508,0x508,0x17aa,0x17b1,0xb0a,
-0x17b4,0xb12,0xb1a,0xb22,0x17ae,0xb2a,0xb32,0xb3a,0x17b3,0x17bb,0x17aa,0x17b1,0x17ad,0x17b4,0x17bc,0x17ab,
-0x17b2,0x17ae,0xb41,0x1781,0x1789,0x1790,0x1797,0x1784,0x178c,0x1793,0x179a,0xb49,0x17a2,0x1d62,0x1d62,0x1d62,
-0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d62,0x1d52,0x1d55,0x1d52,
-0x1d5c,0x10ca,0x784,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x10fe,0x78c,0x508,
-0x508,0x508,0x508,0x508,0x508,0x1e46,0x11ff,0x794,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x1e56,0x1240,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1c9d,0x1c9d,0x1c9d,
-0x1c9d,0x1c9d,0x1c9d,0xfd8,0x508,0x1d9a,0x1d92,0x10d2,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x798,0x1e16,0x11b4,0x508,0x508,0x1207,0x1208,0x7a0,0x508,0x508,0x508,0x508,0x508,0xeac,0xeb4,0xebc,
-0xec4,0xecc,0xed4,0xedb,0xedf,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x7a4,0x1048,0x1ced,0x104e,0x1ced,0x1056,0x105b,0x1060,0x1060,0x1d72,0x1d82,0x1d8a,
-0x10ba,0x1d7a,0x1e36,0x10c2,0x1dee,0x1e3e,0x1e3e,0x117e,0x1186,0x121f,0x1225,0x122a,0x1230,0x1e5e,0x1e5e,0x1e5e,
-0x1e5e,0x1274,0x1e5e,0x127a,0x127e,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,
-0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,0x7ac,
-0x7ac,0x7ac,0x7ac,0x7ac,0x7ad,0xb51,0x17c4,0x17c4,0x17c4,0x7b5,0x7b5,0x7b5,0x7b5,0x1899,0x1899,0x1899,
-0x1899,0x1899,0x1899,0x1899,0x7bd,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,
-0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,
-0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,
-0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,
-0x7b5,0x7b5,0x7b5,0x7b5,0x7b5,0x1a20,0xd52,0x1a28,0x1a28,0xd56,0xe6c,0xe74,0xe7c,0x1ae9,0x1ad1,0x1af1,
-0x1af9,0x1ae1,0xe01,0xe05,0xe0c,0xe14,0xe1b,0xe23,0xe2b,0xe2d,0xe2d,0xe2d,0xe2d,0x1b5a,0x1b62,0x1b5a,
-0x1b68,0x1b70,0x1b3b,0x1b78,0x1b80,0x1b5a,0x1b88,0x1b90,0x1b97,0x1b9f,0x1b43,0x1b5a,0x1ba4,0x1b4b,0x1b52,0x1bac,
-0x1bb2,0x1c4e,0x1c55,0x1c46,0x1bba,0x1bc2,0x1bca,0x1bd2,0x1cbd,0x1bda,0x1be2,0xe84,0xe8c,0x1b2b,0x1b2b,0x1b2b,
-0xe94,0x1c75,0x1c75,0xf65,0xf6d,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,
-0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abe,0x1abc,0x1ac6,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,
-0x1ac9,0x1abc,0x1abc,0x1abc,0x1abc,0x1abc,0xdf9,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,
-0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d2a,0x1d25,0x1d25,0x1d25,0x1088,0x108a,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
-0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
-0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
-0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
-0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1142,0x1b33,0x1de6,0x1de6,0x1de6,0x1de6,0x1de6,0x1de6,0x1de6,0x114a,
-0x1152,0x1210,0x1217,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x1dfe,0x116e,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x508,
-0x508,0x508,0x508,0x508,0x508,0x508,0x508,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
-0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
-0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
-0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x12d0,0x1299,0x1b01,
-0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
-0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
-0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x12a1,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,
-0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x17d4,0x12d8,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x12a5,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
-0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
-0x1e6e,0x12ad,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
-0x1299,0x12a5,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
-0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
-0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
-0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x12e0,0x1bea,0x1bea,0x1bea,0x1bea,
-0x1bea,0x1bea,0x12e8,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
-0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
-0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
-0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
-0x1d6a,0x1d6a,0x12f0,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1664,0x1664,0x1664,
-0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
-0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
-0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
-0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1654,0x166c,0x166c,0x166c,
-0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
-0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
-0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
-0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x165c,0x1664,0x1664,0x1664,
-0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
-0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
-0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,
-0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x1664,0x166c,0x166c,0x166c,
-0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
-0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
-0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,
-0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x166c,0x17cc,0x17cc,0x17cc,
-0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
-0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
-0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,
-0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x17cc,0x1b01,0x1b01,0x1b01,
-0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
-0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
-0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,
-0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1b01,0x1d6a,0x1d6a,0x1d6a,
-0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
-0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
-0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,
-0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1d6a,0x1db2,0x1db2,0x1db2,
-0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
-0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
-0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,
-0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1db2,0x1df6,0x1df6,0x1df6,
-0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
-0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
-0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,
-0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1df6,0x1e6e,0x1e6e,0x1e6e,
-0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
-0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
-0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,
-0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x1e6e,0x4e7,0x4e7,0x4e7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2ca,0x2d3,0x2cd,0x2cd,0x2d0,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x7fb,0x7f5,0x7da,0x7d1,0x7c8,0x7c5,0x7bc,0x7d7,0x7c2,0x7ce,0x7d1,0x7ec,0x7e3,0x7d4,0x7f8,0x7cb,
-0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7e0,0x7dd,0x7e6,0x7e6,0x7e6,0x7f5,
-0x7bc,0x807,0x807,0x807,0x807,0x807,0x807,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,
-0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x7c2,0x7c8,0x7ce,0x7f2,0x7b6,
-0x7ef,0x804,0x804,0x804,0x804,0x804,0x804,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,
-0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7c2,0x7e9,0x7bf,0x7e6,0x2c7,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2e5,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,
-0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,
-0x2d9,0x651,0x810,0x813,0x657,0x813,0x80d,0x64e,0x645,0x2df,0x663,0x2e2,0x816,0x63c,0x65a,0x80a,
-0x654,0x660,0x642,0x642,0x648,0x2dc,0x64e,0x64b,0x645,0x642,0x663,0x2e2,0x63f,0x63f,0x63f,0x651,
-0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x66c,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,
-0x66c,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x65d,0x66c,0x2eb,0x2eb,0x2eb,0x2eb,0x2eb,0x66c,0x666,
-0x669,0x669,0x2e8,0x2e8,0x2e8,0x2e8,0x666,0x2e8,0x669,0x669,0x669,0x2e8,0x669,0x669,0x2e8,0x2e8,
-0x666,0x2e8,0x669,0x669,0x2e8,0x2e8,0x2e8,0x65d,0x666,0x669,0x669,0x2e8,0x669,0x2e8,0x666,0x2e8,
-0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,
-0x2f4,0x66f,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,
-0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x678,0x66f,0x2f7,0x2ee,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,
-0x2f7,0x66f,0x67b,0x675,0x2f7,0x2ee,0x2f7,0x2ee,0x66f,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x67b,
-0x675,0x678,0x66f,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x672,0x67e,0x678,0x66f,0x2f7,0x672,0x2f7,0x2ee,
-0x2f7,0x2ee,0x678,0x66f,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,
-0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x678,0x66f,0x2f7,0x2ee,0x2f7,0x672,0x2f7,0x2ee,0x2f7,0x2ee,
-0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2f7,0x2ee,0x2f7,0x2ee,0x2f7,0x2ee,0x2f1,
-0x2fa,0x306,0x306,0x2fa,0x306,0x2fa,0x306,0x306,0x2fa,0x306,0x306,0x306,0x2fa,0x2fa,0x306,0x306,
-0x306,0x306,0x2fa,0x306,0x306,0x2fa,0x306,0x306,0x306,0x2fa,0x2fa,0x2fa,0x306,0x306,0x2fa,0x306,
-0x309,0x2fd,0x306,0x2fa,0x306,0x2fa,0x306,0x306,0x2fa,0x306,0x2fa,0x2fa,0x306,0x2fa,0x306,0x309,
-0x2fd,0x306,0x306,0x306,0x2fa,0x306,0x2fa,0x306,0x306,0x2fa,0x2fa,0x303,0x306,0x2fa,0x2fa,0x2fa,
-0x303,0x303,0x303,0x303,0x30c,0x30c,0x300,0x30c,0x30c,0x300,0x30c,0x30c,0x300,0x309,0x681,0x309,
-0x681,0x309,0x681,0x309,0x681,0x309,0x681,0x309,0x681,0x309,0x681,0x309,0x681,0x2fa,0x309,0x2fd,
-0x309,0x2fd,0x309,0x2fd,0x306,0x2fa,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,
-0x2fd,0x30c,0x30c,0x300,0x309,0x2fd,0x9ea,0x9ea,0x9ed,0x9e7,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,
-0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,0x309,0x2fd,
-0x309,0x2fd,0x309,0x2fd,0x9ed,0x9e7,0x9ed,0x9e7,0x9ea,0x9e4,0x9ed,0x9e7,0xbaf,0xcb7,0x9ea,0x9e4,
-0x9ea,0x9e4,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,0x9ed,0x9e7,
-0xcb7,0xcb7,0xcb7,0xdb6,0xdb6,0xdb6,0xdb9,0xdb9,0xdb6,0xdb9,0xdb9,0xdb6,0xdb6,0xdb9,0xefa,0xefd,
-0xefd,0xefd,0xefd,0xefa,0xefd,0xefa,0xefd,0xefa,0xefd,0xefa,0xefd,0xefa,0x30f,0x684,0x30f,0x30f,
-0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x684,0x30f,0x30f,
-0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,
-0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x312,0x30f,0x30f,0x30f,
-0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,0x30f,
-0x30f,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0xcba,0xcba,0x327,0x327,0x327,0x327,0x327,0x327,0x327,0x327,
-0x327,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31b,0x31b,0x318,0x318,0x68a,0x318,0x31e,0x68d,
-0x321,0x68d,0x68d,0x68d,0x321,0x68d,0x31e,0x31e,0x690,0x324,0x318,0x318,0x318,0x318,0x318,0x318,
-0x687,0x687,0x687,0x687,0x315,0x687,0x318,0xb25,0x327,0x327,0x327,0x327,0x327,0x318,0x318,0x318,
-0x318,0x318,0x9f9,0x9f9,0x9f6,0x9f3,0x9f6,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,
-0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
-0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
-0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
-0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,
-0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x696,0x696,0x94b,0x696,0x696,0x94e,0xb28,0xb28,
-0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xc6c,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,0xd83,
-0xebe,0xebe,0xebe,0xebe,0xec1,0xd86,0xd86,0xd86,0x699,0x699,0xb2b,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,
-0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xfa8,0xfa5,0xfa8,0xfa5,0x333,0x33c,0xfa8,0xfa5,
-9,9,0x342,0xf00,0xf00,0xf00,0x32a,0x14fd,9,9,9,9,0x33f,0x32d,0x351,0x330,
-0x351,0x351,0x351,9,0x351,9,0x351,0x351,0x348,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,
-0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,0x69f,9,0x69f,0x69f,0x69f,0x69f,0x69f,
-0x69f,0x69f,0x351,0x351,0x348,0x348,0x348,0x348,0x348,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,
-0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x345,0x69c,0x69c,0x69c,0x69c,0x69c,
-0x69c,0x69c,0x348,0x348,0x348,0x348,0x348,0xfa8,0x354,0x354,0x357,0x351,0x351,0x354,0x34b,0x9fc,
-0xbb8,0xbb5,0x34e,0x9fc,0x34e,0x9fc,0x34e,0x9fc,0x34e,0x9fc,0x339,0x336,0x339,0x336,0x339,0x336,
-0x339,0x336,0x339,0x336,0x339,0x336,0x339,0x336,0x354,0x354,0x34b,0x345,0xb67,0xb64,0xbb2,0xcc3,
-0xcc0,0xcc6,0xcc3,0xcc0,0xdbc,0xdbf,0xdbf,0xdbf,0xa0b,0x6ab,0x363,0x366,0x363,0x363,0x363,0x366,
-0x363,0x363,0x363,0x363,0x366,0xa0b,0x366,0x363,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,
-0x6a8,0x6ab,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,
-0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a8,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,
-0x6a2,0x6a5,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,0x6a2,
-0x6a2,0x6a2,0x6a2,0x6a2,0xa05,0x6a5,0x35d,0x360,0x35d,0x35d,0x35d,0x360,0x35d,0x35d,0x35d,0x35d,
-0x360,0xa05,0x360,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,
-0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x366,0x360,0x363,0x35d,0x363,0x35d,
-0x363,0x35d,0x363,0x35d,0x363,0x35d,0x35a,0x957,0x95a,0x93c,0x93c,0x114f,0x9ff,0x9ff,0xbbe,0xbbb,
-0xa08,0xa02,0xa08,0xa02,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,
-0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,
-0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,0x363,0x35d,
-0x363,0x35d,0x363,0x35d,0x363,0x366,0x360,0x363,0x35d,0xbbe,0xbbb,0x363,0x35d,0xbbe,0xbbb,0x363,
-0x35d,0xbbe,0xbbb,0xf03,0x366,0x360,0x366,0x360,0x363,0x35d,0x366,0x360,0x363,0x35d,0x366,0x360,
-0x366,0x360,0x366,0x360,0x363,0x35d,0x366,0x360,0x366,0x360,0x366,0x360,0x363,0x35d,0x366,0x360,
-0xa0b,0xa05,0x366,0x360,0x366,0x360,0x366,0x360,0x366,0x360,0xdc5,0xdc2,0x366,0x360,0xf06,0xf03,
-0xf06,0xf03,0xf06,0xf03,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,0xc2d,0xc2a,
-0xc2d,0xc2a,0xc2d,0xc2a,0xf33,0xf30,0xf33,0xf30,0x1023,0x1020,0x1023,0x1020,0x1023,0x1020,0x1023,0x1020,
-0x1023,0x1020,0x1023,0x1020,0x1023,0x1020,0x1023,0x1020,0x1188,0x1185,0x1371,0x136e,0x1536,0x1533,0x1536,0x1533,
-0x1536,0x1533,0x1536,0x1533,0xc,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,
-0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0xc,
-0xc,0x37b,0x369,0x369,0x369,0x36f,0x369,0x36c,0x1941,0x372,0x372,0x372,0x372,0x372,0x372,0x372,
-0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,
-0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x372,0x375,0x1941,0x37e,0xa0e,0xc,
-0xc,0x1500,0x1500,0x141c,0xf,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,
-0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0xdc8,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,0x97e,
-0x97e,0x97e,0x97e,0x97e,0x381,0x381,0x381,0x381,0x381,0x381,0x381,0x381,0x381,0x381,0xf09,0x381,
-0x381,0x381,0x38d,0x381,0x384,0x381,0x381,0x390,0x981,0xdcb,0xdce,0xdcb,0xf,0xf,0xf,0xf,
-0xf,0xf,0xf,0xf,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,
-0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0xf,
-0xf,0xf,0xf,0x1944,0x393,0x393,0x393,0x38a,0x387,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
-0xf,0xf,0xf,0xf,0xcdb,0xcdb,0xcdb,0xcdb,0x141f,0x1503,0xfb1,0xfb1,0xfb1,0xfae,0xfae,0xdd4,
-0x8c7,0xcd5,0xcd2,0xcd2,0xcc9,0xcc9,0xcc9,0xcc9,0xcc9,0xcc9,0xfab,0xfab,0xfab,0xfab,0xfab,0x8c4,
-0x14fa,0x12,0xdd7,0x8ca,0x1338,0x3ae,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,
-0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0xfb4,
-0xfb4,0xfb4,0xfb4,0xfb4,0x8cd,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x942,
-0x942,0x942,0x942,0x942,0x942,0x942,0x942,0xb5e,0xb5e,0xb5e,0xcc9,0xccf,0xccc,0xdd1,0xdd1,0xdd1,
-0xdd1,0xdd1,0xdd1,0x1335,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x960,0x3a8,0x3a5,
-0x3a2,0x39f,0xbc1,0xbc1,0x93f,0x3ae,0x3ae,0x3ba,0x3ae,0x3b4,0x3b4,0x3b4,0x3b4,0x3ae,0x3ae,0x3ae,
-0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,
-0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,
-0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,
-0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0xa14,0xa14,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0xa14,
-0x3b1,0x3ae,0x3b1,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0x3ae,0xa14,
-0x3ae,0x3ae,0x3ae,0x3b1,0x95d,0x3ae,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x396,0x39f,0x39c,
-0x39c,0x399,0x399,0x399,0x399,0x3b7,0x3b7,0x399,0x399,0x39f,0x39c,0x39c,0x39c,0x399,0xcd8,0xcd8,
-0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0xa14,0xa14,0xa14,0xa11,0xa11,0xcd8,
-0xa29,0xa29,0xa29,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa20,0xa23,0xa20,0x15,0xa2c,
-0xa26,0xa17,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,
-0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xa26,0xcde,0xcde,0xcde,
-0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,
-0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0xa1a,0x15,0x15,0xcde,0xcde,0xcde,
-0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,
-0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0x1035,0x1035,
-0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,0x1035,
-0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,
-0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,
-0xa32,0xa32,0xa32,0xa32,0xa32,0xa32,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,
-0xa2f,0xbc4,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
-0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,
-0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,
-0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf4e,0xf42,0xf42,0xf42,0xf42,0xf42,
-0xf42,0xf42,0xf42,0xf42,0xf51,0xf51,0xf45,0xf45,0xf48,0xf57,0xf54,0x10b,0x10b,0x1968,0x196b,0x196b,
-0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x18f9,0x252,0x252,0x252,0x252,0x252,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xb37,0xb37,0xb3a,0xb3a,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0xb37,0x72,0x72,0x72,0x72,
-0x15ba,0x15ba,0x15ba,0x15ba,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x1bc,0x15b7,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,0x16ad,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x174,0x174,0x174,0x174,0x174,0x174,0x174,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,
-0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x18e7,0x18ea,0x18ea,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x19b6,0x261,0x261,0x261,0x261,0x261,0x261,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1b1b,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
-0x17a9,0x17a9,0x17a9,0x17a9,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x1e9,0x1e9,0x1e9,0x1e9,0x1665,0x1665,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,
-0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1713,0x1713,0x1713,0x1713,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xe2e,0xe2e,0xe2b,0xe2b,0xe2b,0xe2e,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x225,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
+0xe09,0xe19,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,
+0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xd89,
+0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,
+0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x1241,0x11c1,
+0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,
+0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1201,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0xbf7,0xbfa,0xdc5,0x1d5d,0xff4,0x71d,0x531,0x108e,0xcc7,0xd46,0x531,0x531,0x1c8b,0xee8,0xef0,0x1da5,
+0xc4a,0xc51,0xc59,0x1b16,0x1d3d,0x531,0x1d1d,0xfc4,0x1b1e,0xdcd,0xdd5,0xddd,0x101c,0x725,0x531,0x531,
+0x1b26,0x1b26,0x72d,0x531,0x1dd2,0x10a6,0x1dca,0x10ae,0x1ebe,0x11a0,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0xde5,0x1f16,0x1291,0x531,0x531,0x1ede,0x11c8,0x11cf,0x11d6,0x12cd,0x12d1,0x1248,0x11de,
+0x1b9b,0x1b9d,0xe4e,0xe55,0x1b2e,0x1b36,0xded,0xf08,0x1c83,0xed0,0xed8,0xfbc,0x1ca3,0x1ca7,0x1caf,0x103c,
+0xf87,0xf8c,0x735,0x531,0x1096,0x109e,0x1d05,0xf94,0xf69,0xf6f,0xf77,0xf7f,0x531,0x531,0x531,0x531,
+0x1e42,0x1e3a,0x1110,0x1118,0x1d85,0x1d7d,0x1064,0x531,0x531,0x531,0x531,0x531,0x1d6d,0x1024,0x102c,0x1034,
+0x1d35,0x1d2d,0xfd4,0x1108,0x1cb7,0xf18,0x73d,0x531,0x1074,0x107c,0x745,0x531,0x531,0x531,0x531,0x531,
+0x1eb6,0x1182,0x74d,0x531,0x531,0x1d95,0x1d8d,0x106c,0x1250,0x1256,0x125e,0x531,0x531,0x11e6,0x11ea,0x11f2,
+0x1e76,0x1e6e,0x116a,0x1e66,0x1e5e,0x115a,0x1d65,0x1014,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x10c6,0x10cb,0x10d3,0x10da,0x10fa,0x1100,0x531,0x531,0x113e,0x1142,0x114a,0x1192,0x1198,0x755,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x11b0,0x531,0x531,0x531,0x531,0x531,0x759,0x1efe,0x1238,
+0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,
+0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e5,0xccf,0xcd6,0xcd6,0xcd6,
+0x19ed,0x19ed,0x19ed,0xcde,0x1dc2,0x1dc2,0x1dc2,0x1dc2,0x1dc2,0x1dc2,0x761,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x765,0x1f2e,0x1f2e,0x12a1,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,
+0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0x1ba5,0xe5d,0xfdc,0xfe4,0x1f36,
+0x12d9,0x12e1,0xf20,0x1d55,0x1d4d,0x1004,0x100c,0x76d,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x1ed6,0x1ece,0x11c0,
+0x531,0x531,0x531,0x1c9b,0x1c9b,0xef8,0x1c93,0xf00,0x531,0x531,0x10f2,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x771,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x1ced,0x1ced,0x1ced,0xf44,0xf49,
+0x779,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x1f46,0x1301,0x1308,0x1f3e,0x1f3e,0x1f3e,0x781,
+0x531,0x17c0,0x17c0,0x17c0,0x17c0,0x17c0,0x17c0,0x17c0,0xafb,0x17d0,0xb03,0x17d1,0x17c8,0x17d9,0x17df,0x17e7,
+0xb0b,0x190f,0x190f,0x789,0x531,0x531,0x531,0x531,0x11b8,0x18ff,0x18ff,0xc02,0xce6,0x531,0x531,0x531,
+0x531,0x1818,0x181f,0xb13,0x1822,0xb1b,0xb23,0xb2b,0x181c,0xb33,0xb3b,0xb43,0x1821,0x1829,0x1818,0x181f,
+0x181b,0x1822,0x182a,0x1819,0x1820,0x181c,0xb4a,0x17ef,0x17f7,0x17fe,0x1805,0x17f2,0x17fa,0x1801,0x1808,0xb52,
+0x1810,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,0x1dea,
+0x1dea,0x1dda,0x1ddd,0x1dda,0x1de4,0x10b6,0x791,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x12bd,0x12c5,0x12c5,0x12c5,0x12c5,0x12c5,0x12c5,
+0x12c5,0x10ea,0x799,0x531,0x531,0x531,0x531,0x531,0x531,0x1ef6,0x11fa,0x7a1,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x7a5,0x12e9,0x1f06,0x1240,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x12a9,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0x1d25,0xfcc,0x531,0x1e32,0x1e2a,0x10be,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x7ad,0x1ec6,0x11a8,0x531,0x531,0x1202,0x1203,0x7b5,0x531,0x531,0x531,0x531,
+0x531,0xe95,0xe9d,0xea5,0xead,0xeb5,0xebd,0xec4,0xec8,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x7b9,0x1044,0x1d75,0x104a,0x1d75,0x1052,0x1057,0x105c,
+0x105c,0x1dfa,0x1e1a,0x1e22,0x1e8e,0x1e02,0x1ee6,0x1e0a,0x1e96,0x1eee,0x1eee,0x1172,0x117a,0x121a,0x1220,0x1228,
+0x1230,0x1f0e,0x1f0e,0x1f0e,0x1f0e,0x1274,0x1f0e,0x127a,0x127e,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,
+0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,
+0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c1,0x7c2,0xb5a,0x1832,0x1832,0x1832,0x7ca,0x7ca,0x7ca,
+0x7ca,0x1907,0x1907,0x1907,0x1907,0x1907,0x1907,0x1907,0x7d2,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,
+0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,
+0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,
+0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,
+0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0xbad,0xbb4,0xbbc,0xbc4,0x18ef,0x18ef,0x18ef,
+0xbcc,0xbd4,0xbd7,0x191f,0x1917,0xc0a,0xd26,0xd2a,0xd2e,0x531,0x531,0x531,0x531,0xd36,0x1a9a,0xd3e,
+0xf30,0x17a3,0xaed,0xaf3,0xffc,0xbdf,0x1963,0xc70,0x531,0x17b8,0x17ab,0x17b0,0x18f7,0xbe7,0xbef,0x1120,
+0x1126,0x1cf5,0xf51,0x1ce5,0xf28,0x12f1,0x12f9,0x531,0x531,0x1d15,0x1d15,0x1d15,0x1d15,0x1d15,0x1d15,0x1d15,
+0x1d15,0x1d15,0xfa4,0xfac,0xfb4,0x12b1,0x12b5,0x531,0x531,0x1aa2,0xd4e,0x1aaa,0x1aaa,0xd52,0xe65,0xe6d,
+0xe75,0x1b6b,0x1b53,0x1b73,0x1b7b,0x1b63,0xdfd,0xe01,0xe08,0xe10,0xe14,0xe1c,0xe24,0xe26,0xe26,0xe26,
+0xe26,0x1bdc,0x1be4,0x1bdc,0x1bea,0x1bf2,0x1bbd,0x1bfa,0x1c02,0x1bdc,0x1c0a,0x1c12,0x1c19,0x1c21,0x1bc5,0x1bdc,
+0x1c26,0x1bcd,0x1bd4,0x1c2e,0x1c34,0x1cd6,0x1cdd,0x1ccf,0x1c3b,0x1c43,0x1c4b,0x1c53,0x1d45,0x1c5b,0x1c63,0xe7d,
+0xe85,0x1bad,0x1bad,0x1bad,0xe8d,0x1cfd,0x1cfd,0xf59,0xf61,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,
+0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b40,0x1b3e,0x1b48,0x1b3e,0x1b3e,
+0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b4b,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0x1b3e,0xdf5,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x1dad,0x1dad,0x1dad,0x1dad,0x1dad,
+0x1dad,0x1dad,0x1dad,0x1dad,0x1dad,0x1dad,0x1dad,0x1dad,0x1dad,0x1db2,0x1dad,0x1dad,0x1dad,0x1084,0x1086,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,
+0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,
+0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,
+0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,
+0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x112e,0x1bb5,0x1e86,0x1e86,0x1e86,0x1e86,
+0x1e86,0x1e86,0x1e86,0x1ea6,0x1136,0x120b,0x1212,0x1eae,0x1eae,0x1eae,0x1eae,0x1eae,0x1eae,0x1eae,0x1eae,0x1eae,
+0x1eae,0x1eae,0x1152,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,
+0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,0x1e52,
+0x1e52,0x1e52,0x1e56,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,0x1f26,
+0x1f26,0x1266,0x126c,0x1286,0x1289,0x1289,0x1289,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,
+0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x531,0x183a,0x183a,0x183a,0x183a,0x183a,
+0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,
+0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,
+0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,
+0x183a,0x183d,0x1310,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,
+0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,
+0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1318,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1845,0x1845,0x1845,0x1845,0x1845,
+0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x133f,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x131c,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,
+0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,
+0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1324,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,0x1310,
+0x1310,0x1310,0x1310,0x1310,0x1310,0x131c,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,
+0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,
+0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,
+0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1347,
+0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x1c6b,0x134f,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,
+0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,
+0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,
+0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,
+0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1357,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,
+0x1e9e,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,
+0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,
+0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,
+0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,
+0x16c2,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,
+0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,
+0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,
+0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,
+0x16ca,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,
+0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,
+0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,
+0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,0x16d2,
+0x16d2,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,
+0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,
+0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,
+0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,
+0x16da,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,
+0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,
+0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,
+0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,0x183a,
+0x183a,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,
+0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,
+0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,
+0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,0x1b83,
+0x1b83,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,
+0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,
+0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,
+0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,0x1df2,
+0x1df2,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,
+0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,
+0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,
+0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,0x1e4a,
+0x1e4a,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,
+0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,
+0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,
+0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,0x1e9e,
+0x1e9e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,
+0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,
+0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,
+0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,0x1f1e,
+0x1f1e,0x510,0x510,0x510,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d6,0x2df,0x2d9,
+0x2d9,0x2dc,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,0x2d3,
+0x2d3,0x2d3,0x2d3,0x2d3,0x7cb,0x7c5,0x7aa,0x78f,0x79b,0x798,0x78f,0x7a7,0x795,0x7a1,0x78f,0x7bc,
+0x7b3,0x7a4,0x7c8,0x79e,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x7b0,0x7ad,
+0x7b6,0x7b6,0x7b6,0x7c5,0x78f,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d7,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,
+0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x795,
+0x79b,0x7a1,0x7c2,0x789,0x7bf,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7d4,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,
+0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x795,
+0x7b9,0x792,0x7b6,0x2d3,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1845,0x1845,0x231,0x1845,0x1845,0x231,0x1845,0x1845,0x1845,0x1845,0x1845,0x231,0x231,0x231,0x231,0x231,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x1a6d,0x282,0x282,0x282,0x282,0x1a70,0x1a6a,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x267,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,
-0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,
+0,0,0,0,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2f1,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,
+0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,0x2e2,
+0x2e2,0x2e2,0x2e2,0x2e2,0x2e5,0x63c,0x7e0,0x7e3,0x642,0x7e3,0x7dd,0x636,0x62d,0x2eb,0x64b,0x2ee,
+0x7e6,0x624,0x639,0x7da,0x63f,0x648,0x62a,0x62a,0x630,0x2e8,0x636,0x633,0x62d,0x62a,0x64b,0x2ee,
+0x627,0x627,0x627,0x63c,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x654,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,
+0x2f7,0x2f7,0x2f7,0x2f7,0x654,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x645,0x654,0x2f7,0x2f7,0x2f7,
+0x2f7,0x2f7,0x654,0x64e,0x651,0x651,0x2f4,0x2f4,0x2f4,0x2f4,0x64e,0x2f4,0x651,0x651,0x651,0x2f4,
+0x651,0x651,0x2f4,0x2f4,0x64e,0x2f4,0x651,0x651,0x2f4,0x2f4,0x2f4,0x645,0x64e,0x651,0x651,0x2f4,
+0x651,0x2f4,0x64e,0x2f4,0x303,0x65a,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,
+0x303,0x2fa,0x303,0x2fa,0x300,0x657,0x303,0x65a,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x65a,
+0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x660,0x657,0x303,0x2fa,0x303,0x65a,
+0x303,0x2fa,0x303,0x2fa,0x303,0x657,0x663,0x65d,0x303,0x2fa,0x303,0x2fa,0x657,0x303,0x2fa,0x303,
+0x2fa,0x303,0x2fa,0x663,0x65d,0x660,0x657,0x303,0x65a,0x303,0x2fa,0x303,0x65a,0x666,0x660,0x657,
+0x303,0x65a,0x303,0x2fa,0x303,0x2fa,0x660,0x657,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,
+0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x660,0x657,0x303,0x2fa,0x303,0x65a,
+0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x2fa,0x303,0x303,0x2fa,0x303,
+0x2fa,0x303,0x2fa,0x2fd,0x306,0x312,0x312,0x306,0x312,0x306,0x312,0x312,0x306,0x312,0x312,0x312,
+0x306,0x306,0x312,0x312,0x312,0x312,0x306,0x312,0x312,0x306,0x312,0x312,0x312,0x306,0x306,0x306,
+0x312,0x312,0x306,0x312,0x315,0x309,0x312,0x306,0x312,0x306,0x312,0x312,0x306,0x312,0x306,0x306,
+0x312,0x306,0x312,0x315,0x309,0x312,0x312,0x312,0x306,0x312,0x306,0x312,0x312,0x306,0x306,0x30f,
+0x312,0x306,0x306,0x306,0x30f,0x30f,0x30f,0x30f,0x318,0x318,0x30c,0x318,0x318,0x30c,0x318,0x318,
+0x30c,0x315,0x669,0x315,0x669,0x315,0x669,0x315,0x669,0x315,0x669,0x315,0x669,0x315,0x669,0x315,
+0x669,0x306,0x315,0x309,0x315,0x309,0x315,0x309,0x312,0x306,0x315,0x309,0x315,0x309,0x315,0x309,
+0x315,0x309,0x315,0x309,0x309,0x318,0x318,0x30c,0x315,0x309,0x9bd,0x9bd,0x9c0,0x9ba,0x315,0x309,
+0x315,0x309,0x315,0x309,0x315,0x309,0x315,0x309,0x315,0x309,0x315,0x309,0x315,0x309,0x315,0x309,
+0x315,0x309,0x315,0x309,0x315,0x309,0x315,0x309,0x9c0,0x9ba,0x9c0,0x9ba,0x9bd,0x9b7,0x9c0,0x9ba,
+0xb79,0xc72,0x9bd,0x9b7,0x9bd,0x9b7,0x9c0,0x9ba,0x9c0,0x9ba,0x9c0,0x9ba,0x9c0,0x9ba,0x9c0,0x9ba,
+0x9c0,0x9ba,0x9c0,0x9ba,0xc72,0xc72,0xc72,0xd6b,0xd6b,0xd6b,0xd6e,0xd6e,0xd6b,0xd6e,0xd6e,0xd6b,
+0xd6b,0xd6e,0xeac,0xeaf,0xeaf,0xeaf,0xeaf,0xeac,0xeaf,0xeac,0xeaf,0xeac,0xeaf,0xeac,0xeaf,0xeac,
+0x31b,0x66c,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,
+0x31b,0x66c,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,
+0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,
+0x31e,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,0x31b,
+0x31b,0x31b,0x31b,0x31b,0x31b,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0xc75,0xc75,0x333,0x333,0x333,0x333,
+0x333,0x333,0x333,0x333,0x333,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x327,0x327,0x324,0x324,
+0x672,0x324,0x32a,0x675,0x32d,0x675,0x675,0x675,0x32d,0x675,0x32a,0x32a,0x678,0x330,0x324,0x324,
+0x324,0x324,0x324,0x324,0x66f,0x66f,0x66f,0x66f,0x321,0x66f,0x324,0xaef,0x333,0x333,0x333,0x333,
+0x333,0x324,0x324,0x324,0x324,0x324,0x9cc,0x9cc,0x9c9,0x9c6,0x9c9,0xc78,0xc78,0xc78,0xc78,0xc78,
+0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0x67b,0x67b,0x67b,0x67b,
+0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,
+0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,
+0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,
+0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67b,0x67e,0x67e,0x91e,0x67e,
+0x67e,0x921,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xc2a,0xd35,0xd35,0xd35,0xd35,
+0xd35,0xd35,0xd35,0xd35,0xe70,0xe70,0xe70,0xe70,0xe73,0xd38,0xd38,0xd38,0x681,0x681,0xaf5,0xc6f,
+0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xf5a,0xf57,0xf5a,0xf57,
+0x33f,0x348,0xf5a,0xf57,9,9,0x34e,0xeb2,0xeb2,0xeb2,0x336,0x149d,9,9,9,9,
+0x34b,0x339,0x35d,0x33c,0x35d,0x35d,0x35d,9,0x35d,9,0x35d,0x35d,0x354,0x687,0x687,0x687,
+0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,0x687,9,0x687,
+0x687,0x687,0x687,0x687,0x687,0x687,0x35d,0x35d,0x354,0x354,0x354,0x354,0x354,0x684,0x684,0x684,
+0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x684,0x351,0x684,
+0x684,0x684,0x684,0x684,0x684,0x684,0x354,0x354,0x354,0x354,0x354,0xf5a,0x360,0x360,0x363,0x35d,
+0x35d,0x360,0x357,0x9cf,0xb82,0xb7f,0x35a,0x9cf,0x35a,0x9cf,0x35a,0x9cf,0x35a,0x9cf,0x345,0x342,
+0x345,0x342,0x345,0x342,0x345,0x342,0x345,0x342,0x345,0x342,0x345,0x342,0x360,0x360,0x357,0x351,
+0xb31,0xb2e,0xb7c,0xc7e,0xc7b,0xc81,0xc7e,0xc7b,0xd71,0xd74,0xd74,0xd74,0x9de,0x693,0x36f,0x372,
+0x36f,0x36f,0x36f,0x372,0x36f,0x36f,0x36f,0x36f,0x372,0x9de,0x372,0x36f,0x690,0x690,0x690,0x690,
+0x690,0x690,0x690,0x690,0x690,0x693,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,
+0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x68a,0x68a,0x68a,0x68a,
+0x68a,0x68a,0x68a,0x68a,0x68a,0x68d,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,
+0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x68a,0x9d8,0x68d,0x369,0x36c,0x369,0x369,0x369,0x36c,
+0x369,0x369,0x369,0x369,0x36c,0x9d8,0x36c,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,
+0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x372,0x36c,
+0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x366,0x92a,0x92d,0x90f,0x90f,0x1101,
+0x9d2,0x9d2,0xb88,0xb85,0x9db,0x9d5,0x9db,0x9d5,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,
+0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,
+0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,
+0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x369,0x36f,0x372,0x36c,0x36f,0x369,0xb88,0xb85,0x36f,
+0x369,0xb88,0xb85,0x36f,0x369,0xb88,0xb85,0xeb5,0x372,0x36c,0x372,0x36c,0x36f,0x369,0x372,0x36c,
+0x36f,0x369,0x372,0x36c,0x372,0x36c,0x372,0x36c,0x36f,0x369,0x372,0x36c,0x372,0x36c,0x372,0x36c,
+0x36f,0x369,0x372,0x36c,0x9de,0x9d8,0x372,0x36c,0x372,0x36c,0x372,0x36c,0x372,0x36c,0xd7a,0xd77,
+0x372,0x36c,0xeb8,0xeb5,0xeb8,0xeb5,0xeb8,0xeb5,0xbee,0xbeb,0xbee,0xbeb,0xbee,0xbeb,0xbee,0xbeb,
+0xbee,0xbeb,0xbee,0xbeb,0xbee,0xbeb,0xbee,0xbeb,0xee5,0xee2,0xee5,0xee2,0xfd5,0xfd2,0xfd5,0xfd2,
+0xfd5,0xfd2,0xfd5,0xfd2,0xfd5,0xfd2,0xfd5,0xfd2,0xfd5,0xfd2,0xfd5,0xfd2,0x113a,0x1137,0x1317,0x1314,
+0x14d3,0x14d0,0x14d3,0x14d0,0x14d3,0x14d0,0x14d3,0x14d0,0xc,0x384,0x384,0x384,0x384,0x384,0x384,0x384,
+0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,0x384,
+0x384,0x384,0x384,0xc,0xc,0x387,0x375,0x375,0x375,0x37b,0x375,0x378,0x18d8,0x37e,0x37e,0x37e,
+0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,
+0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x37e,0x381,
+0x18d8,0x38a,0x9e1,0xc,0xc,0x14a0,0x14a0,0x13bc,0xf,0x951,0x951,0x951,0x951,0x951,0x951,0x951,
+0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0xd7d,0x951,0x951,0x951,0x951,0x951,
+0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,0x38d,
+0x38d,0x38d,0xebb,0x38d,0x38d,0x38d,0x399,0x38d,0x390,0x38d,0x38d,0x39c,0x954,0xd80,0xd83,0xd80,
+0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,
+0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,0x39f,
+0x39f,0x39f,0x39f,0xf,0xf,0xf,0xf,0x18db,0x39f,0x39f,0x39f,0x396,0x393,0xf,0xf,0xf,
+0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xc96,0xc96,0xc96,0xc96,0x13bf,0x14a3,0xf63,0xf63,
+0xf63,0xf60,0xf60,0xd89,0x897,0xc90,0xc8d,0xc8d,0xc84,0xc84,0xc84,0xc84,0xc84,0xc84,0xf5d,0xf5d,
+0xf5d,0xf5d,0xf5d,0x894,0x149a,0x1aeb,0xd8c,0x89a,0x12de,0x3ba,0x3bd,0x3bd,0x3bd,0x3bd,0x3bd,0x3ba,
+0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,
+0x3ba,0x3ba,0x3ba,0xf66,0xf66,0xf66,0xf66,0xf66,0x89d,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,
+0x3ba,0x3ba,0x3ba,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0x915,0xb28,0xb28,0xb28,0xc84,0xc8a,
+0xc87,0xd86,0xd86,0xd86,0xd86,0xd86,0xd86,0x12db,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,
+0x930,0x930,0x3b4,0x3b1,0x3ae,0x3ab,0xb8b,0xb8b,0x912,0x3ba,0x3ba,0x3c6,0x3ba,0x3c0,0x3c0,0x3c0,
+0x3c0,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,
+0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,
+0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,
+0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x9e7,0x9e7,0x3ba,0x3ba,
+0x3ba,0x3ba,0x3ba,0x9e7,0x3bd,0x3ba,0x3bd,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,0x3ba,
+0x3ba,0x3ba,0x3ba,0x9e7,0x3ba,0x3ba,0x3ba,0x3bd,0x933,0x3ba,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,
+0x3a5,0x3a2,0x3ab,0x3a8,0x3a8,0x3a5,0x3a5,0x3a5,0x3a5,0x3c3,0x3c3,0x3a5,0x3a5,0x3ab,0x3a8,0x3a8,
+0x3a8,0x3a5,0xc93,0xc93,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x9e7,0x9e7,
+0x9e7,0x9e4,0x9e4,0xc93,0x9fc,0x9fc,0x9fc,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f6,0x9f3,
+0x9f6,0x9f3,0x12,0x9ff,0x9f9,0x9ea,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,
+0x9f9,0xc99,0xc99,0xc99,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,
+0x9f0,0x9f0,0x9f0,0x9f0,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x9ed,0x12,
+0x12,0xc99,0xc99,0xc99,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,
+0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,0xde9,
+0xde9,0xde9,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,0xfe7,
+0xfe7,0xfe7,0xfe7,0xfe7,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,
+0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,
+0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa05,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,
+0xa02,0xa02,0xa02,0xa02,0xa02,0xb8e,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
+0x15,0x15,0x15,0x15,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xf00,0xf00,
+0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,
+0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xef4,
+0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xf03,0xf03,0xef7,0xef7,0xefa,0xf09,0xf06,0x102,
+0x102,0x18ff,0x1902,0x1902,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xb01,0xb01,0xb04,0xb04,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,
+0x6f,0x6f,0x6f,0x6f,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1605,0x1605,0x1605,0x1605,0x1605,
+0x1605,0x1605,0x1605,0x1605,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x163e,0x163e,0x163e,
+0x163e,0x163e,0x163e,0x163e,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x16b,0x16b,0x16b,
+0x16b,0x16b,0x16b,0x16b,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,
+0x1c5,0x1c5,0x1c5,0x1c5,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1476,0x1aa,0x1aa,
+0x1aa,0x1aa,0x1aa,0x1aa,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x204,0x204,0x204,0x204,0x204,
+0x204,0x204,0x204,0x204,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,
+0x24c,0x24c,0x24c,0x24c,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x194d,0x194d,0x194d,0x194d,0x194d,0x194d,0x194d,0x194d,0x194d,0x194d,0x252,0x252,
+0x252,0x252,0x252,0x252,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1aaf,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,
+0x28e,0x28e,0x28e,0x28e,0x1740,0x1740,0x1740,0x1740,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,
+0x20a,0x20a,0x20a,0x20a,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,
+0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,
+0x162c,0x162c,0x162c,0x162c,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1bb1,0x1bb1,0x1bb1,0x1bb1,0x2a3,0x1bb1,0x1bb1,0x1bb1,0x1bb1,0x1bb1,0x1bb1,0x1bb1,
+0x2a3,0x1bb1,0x1bb1,0x2a3,0x16a4,0x16a4,0x16a4,0x16a4,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,
+0x1f2,0x1f2,0x1f2,0x1f2,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,
+0x2b8,0x2b8,0x2b8,0x2b8,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0xde0,0xde0,0xddd,0xddd,0xddd,0xde0,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,
+0xd5,0xd5,0xd5,0xd5,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x216,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,
+0x1758,0x1758,0x1758,0x1758,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x17dc,0x17dc,0x222,0x17dc,0x17dc,0x222,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x222,
+0x222,0x222,0x222,0x222,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x1a01,0x273,0x273,
+0x273,0x273,0x1a04,0x19fe,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,
+0x1b81,0x1b81,0x1b81,0x1b81,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0x258,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,
+0x1962,0x1962,0x1962,0x1962,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,
+0x276,0x276,0x276,0x276,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x97b,0x97b,
-3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+0,0,0x94e,0x94e,3,3,3,3,3,3,3,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
-3,3,0x97b,0x97b,6,6,6,6,6,6,6,6,6,6,6,6,
+3,3,3,3,3,3,0x94e,0x94e,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,
-0xd8c,0xd8c,0xd8c,0xd8c,6,6,6,6,6,6,6,6,6,6,6,6,
-6,6,6,6,0x1509,0x3d5,0x3e4,0x3e4,0x1b,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,
-0x3ea,0x1b,0x1b,0x3ea,0x3ea,0x1b,0x1b,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,
-0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x1b,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x1b,0x3ea,0x1b,
-0x1b,0x1b,0x3ea,0x3ea,0x3ea,0x3ea,0x1b,0x1b,0x3d8,0xce4,0x3d5,0x3e4,0x3e4,0x3d5,0x3d5,0x3d5,
-0x3d5,0x1b,0x1b,0x3e4,0x3e4,0x1b,0x1b,0x3e7,0x3e7,0x3db,0xddd,0x1b,0x1b,0x1b,0x1b,0x1b,
-0x1b,0x1b,0x1b,0x3d5,0x1b,0x1b,0x1b,0x1b,0x3ed,0x3ed,0x1b,0x3ed,0x3ea,0x3ea,0x3d5,0x3d5,
-0x1b,0x1b,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x3ea,0x3ea,0x3e1,0x3e1,
-0x3de,0x3de,0x3de,0x3de,0x3de,0x3e1,0x3de,0x115e,0x18a2,0x189f,0x1947,0x1b,0x1e,0xce7,0x3f0,0xcea,
-0x1e,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x1e,0x1e,0x1e,0x1e,0x3fc,0x3fc,0x1e,0x1e,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x1e,0x3fc,0x3fc,
-0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x1e,0x3fc,0x3ff,0x1e,0x3fc,0x3ff,0x1e,0x3fc,0x3fc,0x1e,0x1e,
-0x3f3,0x1e,0x3f9,0x3f9,0x3f9,0x3f0,0x3f0,0x1e,0x1e,0x1e,0x1e,0x3f0,0x3f0,0x1e,0x1e,0x3f0,
-0x3f0,0x3f6,0x1e,0x1e,0x1e,0xfbd,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x3ff,0x3ff,0x3ff,
-0x3fc,0x1e,0x3ff,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x969,0x969,0x969,0x969,0x969,0x969,
-0x969,0x969,0x969,0x969,0x3f0,0x3f0,0x3fc,0x3fc,0x3fc,0xfbd,0x194a,0x1e,0x1e,0x1e,0x1e,0x1e,
-0x1e,0x1e,0x1e,0x1e,0x21,0x402,0x402,0x40b,0x21,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,
-0xcf3,0x40e,0x21,0x40e,0x40e,0x40e,0x21,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,
-0x40e,0x40e,0x40e,0x40e,0x40e,0x21,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x40e,0x21,0x40e,0x40e,
-0x21,0x40e,0x40e,0x40e,0x40e,0x40e,0x21,0x21,0x405,0x40e,0x40b,0x40b,0x40b,0x402,0x402,0x402,
-0x402,0x402,0x21,0x402,0x402,0x40b,0x21,0x40b,0x40b,0x408,0x21,0x21,0x40e,0x21,0x21,0x21,
-0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x40e,0xcf3,0xced,0xced,
-0x21,0x21,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x1422,0xcf0,0x21,0x21,
-0x21,0x21,0x21,0x21,0x21,0x1725,0x18a5,0x18a5,0x18a5,0x18a8,0x18a8,0x18a8,0x24,0x411,0x420,0x420,
-0x24,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x24,0x24,0x426,0x426,0x24,0x24,0x426,
-0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x426,0x24,0x426,0x426,
-0x426,0x426,0x426,0x426,0x426,0x24,0x426,0x426,0x24,0xcf6,0x426,0x426,0x426,0x426,0x24,0x24,
-0x414,0x426,0x411,0x411,0x420,0x411,0x411,0x411,0xfc0,0x24,0x24,0x420,0x423,0x24,0x24,0x423,
-0x423,0x417,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x1ab5,0x411,0x411,0x24,0x24,0x24,0x24,
-0x429,0x429,0x24,0x426,0x426,0x426,0xfc0,0xfc0,0x24,0x24,0x41d,0x41d,0x41d,0x41d,0x41d,0x41d,
-0x41d,0x41d,0x41d,0x41d,0x41a,0xcf6,0x1344,0x1344,0x1344,0x1344,0x1344,0x1344,0x24,0x24,0x24,0x24,
-0x24,0x24,0x24,0x24,0x27,0x27,0x42c,0x438,0x27,0x438,0x438,0x438,0x438,0x438,0x438,0x27,
-0x27,0x27,0x438,0x438,0x438,0x27,0x438,0x438,0x43b,0x438,0x27,0x27,0x27,0x438,0x438,0x27,
-0x438,0x27,0x438,0x438,0x27,0x27,0x27,0x438,0x438,0x27,0x27,0x27,0x438,0x438,0x438,0x27,
-0x27,0x27,0x438,0x438,0x438,0x438,0x438,0x438,0x438,0x438,0xde0,0x438,0x438,0x438,0x27,0x27,
-0x27,0x27,0x42c,0x432,0x42c,0x432,0x432,0x27,0x27,0x27,0x432,0x432,0x432,0x27,0x435,0x435,
-0x435,0x42f,0x27,0x27,0xfc3,0x27,0x27,0x27,0x27,0x27,0x27,0x42c,0x27,0x27,0x27,0x27,
-0x27,0x27,0x27,0x27,0x27,0x27,0xef7,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,0x972,
-0x96f,0x96f,0x96f,0xdb0,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcfc,0xcf9,0x27,0x27,0x27,0x27,0x27,
-0x150c,0x44a,0x44a,0x44a,0x194d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x2a,0x44d,0x44d,
-0x44d,0x2a,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,
-0x44d,0x2a,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x44d,0x150f,0x44d,0x44d,0x44d,
-0x44d,0x44d,0x2a,0x2a,0x2a,0xfcc,0x43e,0x43e,0x43e,0x44a,0x44a,0x44a,0x44a,0x2a,0x43e,0x43e,
-0x441,0x2a,0x43e,0x43e,0x43e,0x444,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x43e,0x43e,0x2a,
-0xfcc,0xfcc,0x1728,0x2a,0x2a,0x2a,0x2a,0x2a,0x44d,0x44d,0xfc6,0xfc6,0x2a,0x2a,0x447,0x447,
-0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x447,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x1a19,
-0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0x17e5,0x1512,0x456,0x456,0x1950,0x45c,0x45c,0x45c,
-0x45c,0x45c,0x45c,0x45c,0x45c,0x2d,0x45c,0x45c,0x45c,0x2d,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,
-0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x2d,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,
-0x45c,0x45c,0x45c,0x45c,0x2d,0x45c,0x45c,0x45c,0x45c,0x45c,0x2d,0x2d,0xcff,0xd02,0x456,0x450,
-0x459,0x456,0x450,0x456,0x456,0x2d,0x450,0x459,0x459,0x2d,0x459,0x459,0x450,0x453,0x2d,0x2d,
-0x2d,0x2d,0x2d,0x2d,0x2d,0x450,0x450,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x45c,0x2d,
-0x45c,0x45c,0xf0f,0xf0f,0x2d,0x2d,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,0x975,
-0x2d,0xf12,0xf12,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
-0x18ab,0x1515,0x468,0x468,0x1ab8,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x30,0x46e,0x46e,
-0x46e,0x30,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,
-0x468,0x45f,0x45f,0x45f,0xfcf,0x30,0x468,0x468,0x468,0x30,0x46b,0x46b,0x46b,0x462,0x134a,0x17e8,
-0x30,0x30,0x30,0x30,0x17eb,0x17eb,0x17eb,0x45f,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x172b,
-0x46e,0x46e,0xfcf,0xfcf,0x30,0x30,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,0x465,
-0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0x17e8,0x17e8,0x17e8,0xfd5,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,0xfd8,
-0x33,0x1abb,0xa3e,0xa3e,0x33,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,
-0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0x33,0x33,0x33,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,
-0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0x33,0xa44,
-0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0x33,0xa44,0x33,0x33,0xa44,0xa44,0xa44,0xa44,
-0xa44,0xa44,0xa44,0x33,0x33,0x33,0xa38,0x33,0x33,0x33,0x33,0xa35,0xa3e,0xa3e,0xa35,0xa35,
-0xa35,0x33,0xa35,0x33,0xa3e,0xa3e,0xa41,0xa3e,0xa41,0xa41,0xa41,0xa35,0x33,0x33,0x33,0x33,
-0x33,0x33,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x33,0x33,0xa3e,0xa3e,
-0xa3b,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x489,0x489,0x489,
-0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,
-0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x474,0x489,0x486,
-0x474,0x474,0x474,0x474,0x474,0x474,0x47a,0x36,0x36,0x36,0x36,0x471,0x48f,0x48f,0x48f,0x48f,
-0x48f,0x489,0x48c,0x477,0x477,0x477,0x477,0x477,0x477,0x474,0x477,0x47d,0x483,0x483,0x483,0x483,
-0x483,0x483,0x483,0x483,0x483,0x483,0x480,0x480,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+6,6,6,6,6,6,6,6,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,
+0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,6,6,6,6,6,6,6,6,
+6,6,6,6,6,6,6,6,0x14a9,0x3e1,0x3f0,0x3f0,0x18,0x3f6,0x3f6,0x3f6,
+0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x18,0x18,0x3f6,0x3f6,0x18,0x18,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,
+0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x18,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,
+0x3f6,0x18,0x3f6,0x18,0x18,0x18,0x3f6,0x3f6,0x3f6,0x3f6,0x18,0x18,0x3e4,0xc9f,0x3e1,0x3f0,
+0x3f0,0x3e1,0x3e1,0x3e1,0x3e1,0x18,0x18,0x3f0,0x3f0,0x18,0x18,0x3f3,0x3f3,0x3e7,0xd92,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3e1,0x18,0x18,0x18,0x18,0x3f9,0x3f9,0x18,0x3f9,
+0x3f6,0x3f6,0x3e1,0x3e1,0x18,0x18,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x939,
+0x3f6,0x3f6,0x3ed,0x3ed,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ed,0x3ea,0x1110,0x1839,0x1836,0x18de,0x18,
+0x1b,0xca2,0x3fc,0xca5,0x1b,0x408,0x408,0x408,0x408,0x408,0x408,0x1b,0x1b,0x1b,0x1b,0x408,
+0x408,0x1b,0x1b,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,
+0x408,0x1b,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x1b,0x408,0x40b,0x1b,0x408,0x40b,0x1b,
+0x408,0x408,0x1b,0x1b,0x3ff,0x1b,0x405,0x405,0x405,0x3fc,0x3fc,0x1b,0x1b,0x1b,0x1b,0x3fc,
+0x3fc,0x1b,0x1b,0x3fc,0x3fc,0x402,0x1b,0x1b,0x1b,0xf6f,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+0x1b,0x40b,0x40b,0x40b,0x408,0x1b,0x40b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x93c,0x93c,
+0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x93c,0x3fc,0x3fc,0x408,0x408,0x408,0xf6f,0x18e1,0x1b,
+0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1e,0x40e,0x40e,0x417,0x1e,0x41a,0x41a,0x41a,
+0x41a,0x41a,0x41a,0x41a,0xcae,0x41a,0x1e,0x41a,0x41a,0x41a,0x1e,0x41a,0x41a,0x41a,0x41a,0x41a,
+0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x1e,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,
+0x41a,0x1e,0x41a,0x41a,0x1e,0x41a,0x41a,0x41a,0x41a,0x41a,0x1e,0x1e,0x411,0x41a,0x417,0x417,
+0x417,0x40e,0x40e,0x40e,0x40e,0x40e,0x1e,0x40e,0x40e,0x417,0x1e,0x417,0x417,0x414,0x1e,0x1e,
+0x41a,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
+0x41a,0xcae,0xca8,0xca8,0x1e,0x1e,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,0x93f,
+0x13c2,0xcab,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x16b9,0x183c,0x183c,0x183c,0x183f,0x183f,0x183f,
+0x21,0x41d,0x42c,0x42c,0x21,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x21,0x21,0x432,
+0x432,0x21,0x21,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x432,
+0x432,0x21,0x432,0x432,0x432,0x432,0x432,0x432,0x432,0x21,0x432,0x432,0x21,0xcb1,0x432,0x432,
+0x432,0x432,0x21,0x21,0x420,0x432,0x41d,0x41d,0x42c,0x41d,0x41d,0x41d,0xf72,0x21,0x21,0x42c,
+0x42f,0x21,0x21,0x42f,0x42f,0x423,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1a49,0x41d,0x41d,
+0x21,0x21,0x21,0x21,0x435,0x435,0x21,0x432,0x432,0x432,0xf72,0xf72,0x21,0x21,0x429,0x429,
+0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x429,0x426,0xcb1,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,
+0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x24,0x24,0x438,0x444,0x24,0x444,0x444,0x444,
+0x444,0x444,0x444,0x24,0x24,0x24,0x444,0x444,0x444,0x24,0x444,0x444,0x447,0x444,0x24,0x24,
+0x24,0x444,0x444,0x24,0x444,0x24,0x444,0x444,0x24,0x24,0x24,0x444,0x444,0x24,0x24,0x24,
+0x444,0x444,0x444,0x24,0x24,0x24,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0xd95,0x444,
+0x444,0x444,0x24,0x24,0x24,0x24,0x438,0x43e,0x438,0x43e,0x43e,0x24,0x24,0x24,0x43e,0x43e,
+0x43e,0x24,0x441,0x441,0x441,0x43b,0x24,0x24,0xf75,0x24,0x24,0x24,0x24,0x24,0x24,0x438,
+0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xea9,0x945,0x945,0x945,0x945,0x945,
+0x945,0x945,0x945,0x945,0x942,0x942,0x942,0xd65,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb7,0xcb4,0x24,
+0x24,0x24,0x24,0x24,0x14ac,0x456,0x456,0x456,0x18e4,0x459,0x459,0x459,0x459,0x459,0x459,0x459,
+0x459,0x27,0x459,0x459,0x459,0x27,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,
+0x459,0x459,0x459,0x459,0x459,0x27,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,
+0x14af,0x459,0x459,0x459,0x459,0x459,0x27,0x27,0x1aee,0xf7e,0x44a,0x44a,0x44a,0x456,0x456,0x456,
+0x456,0x27,0x44a,0x44a,0x44d,0x27,0x44a,0x44a,0x44a,0x450,0x27,0x27,0x27,0x27,0x27,0x27,
+0x27,0x44a,0x44a,0x27,0xf7e,0xf7e,0x16bc,0x27,0x27,0x1af1,0x27,0x27,0x459,0x459,0xf78,0xf78,
+0x27,0x27,0x453,0x453,0x453,0x453,0x453,0x453,0x453,0x453,0x453,0x453,0x27,0x27,0x27,0x27,
+0x27,0x27,0x27,0x19ad,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0xf7b,0x177c,0x14b2,0x462,0x462,
+0x18e7,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x2a,0x468,0x468,0x468,0x2a,0x468,0x468,
+0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x2a,0x468,0x468,
+0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x468,0x2a,0x468,0x468,0x468,0x468,0x468,0x2a,0x2a,
+0xcba,0xcbd,0x462,0x45c,0x465,0x462,0x45c,0x462,0x462,0x2a,0x45c,0x465,0x465,0x2a,0x465,0x465,
+0x45c,0x45f,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x45c,0x45c,0x2a,0x2a,0x2a,0x2a,0x2a,
+0x2a,0x1af4,0x468,0x2a,0x468,0x468,0xec1,0xec1,0x2a,0x2a,0x948,0x948,0x948,0x948,0x948,0x948,
+0x948,0x948,0x948,0x948,0x2a,0xec4,0xec4,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
+0x2a,0x2a,0x2a,0x2a,0x1842,0x14b5,0x474,0x474,0x1a4c,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,
+0x47a,0x2d,0x47a,0x47a,0x47a,0x2d,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,
+0x47a,0x47a,0x47a,0x47a,0x474,0x46b,0x46b,0x46b,0xf81,0x2d,0x474,0x474,0x474,0x2d,0x477,0x477,
+0x477,0x46e,0x12f0,0x177f,0x2d,0x2d,0x2d,0x2d,0x1782,0x1782,0x1782,0x46b,0x177f,0x177f,0x177f,0x177f,
+0x177f,0x177f,0x177f,0x16bf,0x47a,0x47a,0xf81,0xf81,0x2d,0x2d,0x471,0x471,0x471,0x471,0x471,0x471,
+0x471,0x471,0x471,0x471,0xf84,0xf84,0xf84,0xf84,0xf84,0xf84,0x177f,0x177f,0x177f,0xf87,0xf8a,0xf8a,
+0xf8a,0xf8a,0xf8a,0xf8a,0x30,0x1a4f,0xa11,0xa11,0x30,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,
+0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0x30,0x30,0x30,0xa17,0xa17,
+0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,
+0xa17,0xa17,0x30,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0x30,0xa17,0x30,0x30,
+0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0x30,0x30,0x30,0xa0b,0x30,0x30,0x30,0x30,0xa08,
+0xa11,0xa11,0xa08,0xa08,0xa08,0x30,0xa08,0x30,0xa11,0xa11,0xa14,0xa11,0xa14,0xa14,0xa14,0xa08,
+0x30,0x30,0x30,0x30,0x30,0x30,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,
+0x30,0x30,0xa11,0xa11,0xa0e,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+0x33,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,
+0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,0x495,
+0x495,0x480,0x495,0x492,0x480,0x480,0x480,0x480,0x480,0x480,0x486,0x33,0x33,0x33,0x33,0x47d,
+0x49b,0x49b,0x49b,0x49b,0x49b,0x495,0x498,0x483,0x483,0x483,0x483,0x483,0x483,0x480,0x483,0x489,
+0x48f,0x48f,0x48f,0x48f,0x48f,0x48f,0x48f,0x48f,0x48f,0x48f,0x48c,0x48c,0x33,0x33,0x33,0x33,
+0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
+0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x4aa,0x4aa,0x36,
+0x4aa,0x36,0x19b3,0x4aa,0x4aa,0x19b3,0x4aa,0x36,0x19b3,0x4aa,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,0x19b3,
+0x4aa,0x4aa,0x4aa,0x4aa,0x19b3,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x19b3,0x4aa,0x4aa,0x4aa,
+0x36,0x4aa,0x36,0x4aa,0x19b3,0x19b3,0x4aa,0x4aa,0x19b3,0x4aa,0x4aa,0x4aa,0x4aa,0x49e,0x4aa,0x4a7,
+0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x19b0,0x49e,0x49e,0x4aa,0x36,0x36,0x4b3,0x4b3,0x4b3,0x4b3,
+0x4b3,0x36,0x4b0,0x36,0x4a1,0x4a1,0x4a1,0x4a1,0x4a1,0x49e,0x36,0x36,0x4a4,0x4a4,0x4a4,0x4a4,
+0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x4a4,0x36,0x36,0x4ad,0x4ad,0x13c5,0x13c5,0x36,0x36,0x36,0x36,
0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x49e,0x49e,0x39,0x49e,0x39,0x1a1f,0x49e,
-0x49e,0x1a1f,0x49e,0x39,0x1a1f,0x49e,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x49e,0x49e,0x49e,0x49e,
-0x1a1f,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x1a1f,0x49e,0x49e,0x49e,0x39,0x49e,0x39,0x49e,
-0x1a1f,0x1a1f,0x49e,0x49e,0x1a1f,0x49e,0x49e,0x49e,0x49e,0x492,0x49e,0x49b,0x492,0x492,0x492,0x492,
-0x492,0x492,0x1a1c,0x492,0x492,0x49e,0x39,0x39,0x4a7,0x4a7,0x4a7,0x4a7,0x4a7,0x39,0x4a4,0x39,
-0x495,0x495,0x495,0x495,0x495,0x492,0x39,0x39,0x498,0x498,0x498,0x498,0x498,0x498,0x498,0x498,
-0x498,0x498,0x39,0x39,0x4a1,0x4a1,0x1425,0x1425,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
+0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x98a,0x98a,0x98a,0x98d,
+0x98a,0x98a,0x98a,0x98a,0x39,0x98a,0x98a,0x98a,0x98a,0x98d,0x98a,0x98a,0x98a,0x98a,0x98d,0x98a,
+0x98a,0x98a,0x98a,0x98d,0x98a,0x98a,0x98a,0x98a,0x98d,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,0x98a,
+0x98a,0x98a,0x98a,0x98a,0x98a,0x98d,0xa26,0xf96,0xf96,0x39,0x39,0x39,0x39,0x957,0x957,0x95a,
+0x957,0x95a,0x95a,0x963,0x95a,0x963,0x957,0x957,0x957,0x957,0x957,0x984,0x957,0x95a,0x95d,0x95d,
+0x960,0x969,0x95d,0x95d,0x98a,0x98a,0x98a,0x98a,0x12f9,0x12f3,0x12f3,0x12f3,0x957,0x957,0x957,0x95a,
+0x957,0x957,0xa1a,0x957,0x39,0x957,0x957,0x957,0x957,0x95a,0x957,0x957,0x957,0x957,0x95a,0x957,
+0x957,0x957,0x957,0x95a,0x957,0x957,0x957,0x957,0x95a,0x957,0xa1a,0xa1a,0xa1a,0x957,0x957,0x957,
+0x957,0x957,0x957,0x957,0xa1a,0x95a,0xa1a,0xa1a,0xa1a,0x39,0xa23,0xa23,0xa20,0xa20,0xa20,0xa20,
+0xa20,0xa20,0xa1d,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0x39,0xf8d,0xa20,0xd98,0xd98,0xf90,0xf93,
+0xf8d,0x1113,0x1113,0x1113,0x1113,0x12f6,0x12f6,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
-0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x9b7,0x9b7,0x9b7,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,
-0x3c,0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,
-0x9b7,0x9b7,0x9b7,0x9b7,0x9ba,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,0x9b7,
-0x9b7,0x9ba,0xa53,0xfe4,0xfe4,0x3c,0x3c,0x3c,0x3c,0x984,0x984,0x987,0x984,0x987,0x987,0x990,
-0x987,0x990,0x984,0x984,0x984,0x984,0x984,0x9b1,0x984,0x987,0x98a,0x98a,0x98d,0x996,0x98a,0x98a,
-0x9b7,0x9b7,0x9b7,0x9b7,0x1353,0x134d,0x134d,0x134d,0x984,0x984,0x984,0x987,0x984,0x984,0xa47,0x984,
-0x3c,0x984,0x984,0x984,0x984,0x987,0x984,0x984,0x984,0x984,0x987,0x984,0x984,0x984,0x984,0x987,
-0x984,0x984,0x984,0x984,0x987,0x984,0xa47,0xa47,0xa47,0x984,0x984,0x984,0x984,0x984,0x984,0x984,
-0xa47,0x987,0xa47,0xa47,0xa47,0x3c,0xa50,0xa50,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4a,0xa4d,
-0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0x3c,0xfdb,0xa4d,0xde3,0xde3,0xfde,0xfe1,0xfdb,0x1161,0x1161,0x1161,
-0x1161,0x1350,0x1350,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
-0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
-0x3c,0x3c,0x3c,0x3c,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x3f,0x142b,0x3f,0x3f,0x3f,0x3f,
-0x3f,0x142b,0x3f,0x3f,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,
-0x4aa,0x4aa,0x4aa,0x4aa,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0x42,0xa7d,0xa7d,
-0xa7d,0xa7d,0x42,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0xa7d,0x42,0xa7d,0xa7d,
-0xa7d,0xa7d,0x42,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0x42,0xa7d,0xa7d,
-0xa7d,0xa7d,0x42,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
-0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0x42,
-0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0xa7d,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0x42,
-0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0x42,
-0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,
-0xa7d,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0x42,0x42,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,
-0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
-0xa7d,0xa7d,0xa7d,0x42,0x42,0x1356,0x1356,0xdec,0xdef,0xa77,0xa80,0xa74,0xa74,0xa74,0xa74,0xa80,
-0xa80,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa7a,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
-0xa71,0xa71,0xa71,0xa71,0xa71,0x42,0x42,0x42,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,
-0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0x1731,0x45,0x45,
-0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x45,0x45,0xa95,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,
-0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,0xa98,
-0xa98,0xa98,0xa98,0xa92,0xa8f,0x48,0x48,0x48,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,
-0xa9e,0xa9e,0xa9e,0xa9b,0xa9b,0xa9b,0xa9e,0xa9e,0xa9e,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,
-0x151b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xaa1,0xabf,
-0xabf,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa4,0xaa7,0xaa4,0xab6,0xab6,0xab9,0xac2,
-0xab0,0xaad,0xab6,0xab3,0xac2,0xd05,0x4e,0x4e,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,
-0xabc,0xabc,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,
-0xd08,0xd08,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xad1,0xad1,0xb52,0xb55,0xad7,0xb4f,0xad4,0xad1,
-0xada,0xae9,0xadd,0xaec,0xaec,0xaec,0xac8,0x51,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,
-0xae0,0xae0,0x51,0x51,0x51,0x51,0x51,0x51,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
-0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
-0x1953,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
-0xae3,0xacb,0x1002,0x51,0x51,0x51,0x51,0x51,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
-0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x54,0x54,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x54,0x54,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x54,0x4ce,0x54,0x4ce,0x54,0x4ce,0x54,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x54,0x54,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x54,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4c5,0x4cb,0x4c5,0x4c5,0x4c2,0x4cb,0x4cb,0x4cb,0x54,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4c2,0x4c2,0x4c2,0x4cb,0x4cb,0x4cb,0x4cb,0x54,0x54,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x54,0x4c2,0x4c2,0x4c2,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4c2,0x4c2,0x4c2,0x54,0x54,0x4cb,0x4cb,0x4cb,0x54,0x4cb,0x4cb,
-0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4c8,0x4c5,0x54,0xbca,0xbcd,0xbcd,0xbcd,0x100b,0x57,0x14f7,0x14f7,
-0x14f7,0x14f7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x522,0xbdf,0x5a,0x5a,0x6e1,0x522,0x522,0x522,
-0x522,0x522,0x528,0x53a,0x528,0x534,0x52e,0x6e4,0x51f,0x6de,0x6de,0x6de,0x6de,0x51f,0x51f,0x51f,
-0x51f,0x51f,0x525,0x537,0x525,0x531,0x52b,0x5a,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0x1359,0x1359,0x1359,
-0x1359,0x1359,0x1359,0x1359,0x1359,0x5a,0x5a,0x5a,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
-0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,
-0x549,0x549,0x549,0x549,0x549,0x546,0x546,0x546,0x546,0x549,0xafb,0xafe,0xbe5,0xbeb,0xbeb,0xbe8,
-0xbe8,0xbe8,0xbe8,0xe01,0xf15,0xf15,0xf15,0xf15,0x114c,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
-0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x579,0x579,0x579,0xb07,0xf1e,0x1011,0x1011,0x1011,
-0x1011,0x12ab,0x1737,0x1737,0x63,0x63,0x63,0x63,0x70b,0x70b,0x70b,0x70b,0x70e,0x70e,0x70e,0x70e,
-0x70e,0x70e,0x585,0x585,0x582,0x582,0x582,0x582,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0xb13,0xb13,0x66,
-0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,
-0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,
-0x5af,0x5af,0x5af,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,
-0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
-0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
-0xb2e,0xb2e,0x6c,0xb2e,0xb2e,0xb2e,0xb2e,0xb31,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
-0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb31,0x6c,0x6c,0x6c,0x6c,
-0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
-0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0x6f,0x6f,
-0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x75,0x843,0x83d,0x843,0x83d,0x843,0x83d,0x843,
-0x83d,0x843,0x83d,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,
-0x840,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x83d,0x83d,0x83d,0x843,0x83d,0x843,0x83d,0x843,
-0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x843,0x83d,0x83d,0x83d,0x83d,0x83d,0x840,0xc93,0xc93,0x75,
-0x75,0x954,0x954,0x91e,0x91e,0x846,0x849,0xc90,0x78,0x78,0x78,0x78,0x78,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,
-0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x85b,0x113a,0x191a,0x1a01,0x7b,0x85e,0x85e,0x85e,
-0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x7b,
-0x927,0x927,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,0x92a,
-0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,
-0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0x867,0xd98,0xd98,0x7e,
-0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0x81,0x81,0x81,
-0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,
-0xb4c,0xc9c,0xb4c,0xb4c,0xb4c,0xc9c,0xb4c,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
-0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,
-0x9db,0x9db,0x9db,0x9db,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,
-0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,
-0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x60c,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,
-0x8a,0x8a,0x8a,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x8a,0x8a,0x8a,0x8a,0x8a,0xb1f,0x5fd,0x603,
-0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x600,0x603,0x603,0x603,0x603,0x603,0x603,
-0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x8a,0x603,0x603,0x603,0x603,0x603,0x8a,0x603,0x8a,
-0x603,0x603,0x8a,0x603,0x603,0x8a,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x606,
-0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,
-0x136b,0x136b,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
-0x8d,0x8d,0x8d,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x61e,0x618,
-0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
-0x61b,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x618,0x61b,0x618,0x618,0x61b,0x61b,0x618,0x618,
-0x618,0x618,0x618,0x61b,0x618,0x618,0x61b,0x618,0x61b,0x61b,0x61b,0x618,0x61b,0x61b,0x61b,0x61b,
-0x8d,0x8d,0x61b,0x61b,0x61b,0x61b,0x618,0x618,0x61b,0x618,0x618,0x618,0x618,0x61b,0x618,0x618,
-0x618,0x618,0x618,0x61b,0x61b,0x61b,0x618,0x618,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
+0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x3c,0x13cb,
+0x3c,0x3c,0x3c,0x3c,0x3c,0x13cb,0x3c,0x3c,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,
+0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xda7,
+0xa50,0x3f,0xa50,0xa50,0xa50,0xa50,0x3f,0x3f,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0x3f,
+0xa50,0x3f,0xa50,0xa50,0xa50,0xa50,0x3f,0x3f,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xda7,
+0xa50,0x3f,0xa50,0xa50,0xa50,0xa50,0x3f,0x3f,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,
+0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xda7,0xa50,0x3f,0xa50,0xa50,
+0xa50,0xa50,0x3f,0x3f,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0x3f,0xa50,0x3f,0xa50,0xa50,
+0xa50,0xa50,0x3f,0x3f,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xda7,0xa50,0xa50,0xa50,0xa50,
+0xa50,0xa50,0xa50,0x3f,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,
+0xa50,0xa50,0xa50,0xda7,0xa50,0x3f,0xa50,0xa50,0xa50,0xa50,0x3f,0x3f,0xa50,0xa50,0xa50,0xa50,
+0xa50,0xa50,0xa50,0xda7,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,
+0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0x3f,0x3f,0x12fc,0x12fc,0xda1,0xda4,0xa4a,0xa53,0xa47,
+0xa47,0xa47,0xa47,0xa53,0xa53,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa44,0xa44,
+0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0x3f,0x3f,0x3f,0xa56,0xa56,0xa56,0xa56,
+0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+0xa56,0x16c5,0x42,0x42,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x42,0x42,0xa68,0xa6b,0xa6b,0xa6b,
+0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,
+0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa6b,0xa65,0xa62,0x45,0x45,0x45,0xa71,0xa71,0xa71,0xa71,
+0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa6e,0xa6e,0xa6e,0xa71,0xa71,0xa71,0x14bb,0x14bb,0x14bb,
+0x14bb,0x14bb,0x14bb,0x14bb,0x14bb,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa92,0xa92,0xa92,0xa92,
+0xa92,0xa92,0xa74,0xa92,0xa92,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa77,0xa7a,0xa77,
+0xa89,0xa89,0xa8c,0xa95,0xa83,0xa80,0xa89,0xa86,0xa95,0xcc0,0x4b,0x4b,0xa8f,0xa8f,0xa8f,0xa8f,
+0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0xa8f,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xcc3,0xcc3,0xcc3,0xcc3,
+0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xaa4,0xaa4,0xb1c,0xb1f,
+0xaaa,0xb19,0xaa7,0xaa4,0xaad,0xabc,0xab0,0xabf,0xabf,0xabf,0xa9b,0x1af7,0xab3,0xab3,0xab3,0xab3,
+0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xab6,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0x18ea,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xab6,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xa9e,0xfb4,0x4e,0x4e,0x4e,0x4e,0x4e,0x116a,0x116a,0x116a,0x116a,
+0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x51,0x51,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x51,0x51,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x51,0x4da,0x51,0x4da,0x51,0x4da,0x51,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x51,0x51,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x51,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4d1,0x4d7,0x4d1,0x4d1,0x4ce,0x4d7,0x4d7,
+0x4d7,0x51,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4ce,0x4ce,0x4ce,0x4d7,0x4d7,0x4d7,0x4d7,
+0x51,0x51,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x51,0x4ce,0x4ce,0x4ce,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4ce,0x4ce,0x4ce,0x51,0x51,0x4d7,0x4d7,
+0x4d7,0x51,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4d4,0x4d1,0x51,0xb94,0xb97,0xb97,0xb97,
+0xfbd,0x54,0x1497,0x1497,0x1497,0x1497,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x4e3,0x52e,0xba9,0x57,0x57,
+0x6c9,0x52e,0x52e,0x52e,0x52e,0x52e,0x534,0x546,0x534,0x540,0x53a,0x6cc,0x52b,0x6c6,0x6c6,0x6c6,
+0x6c6,0x52b,0x52b,0x52b,0x52b,0x52b,0x531,0x543,0x531,0x53d,0x537,0x57,0xdb0,0xdb0,0xdb0,0xdb0,
+0xdb0,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x12ff,0x57,0x57,0x57,0x1afa,0x5a,0x5a,0x5a,
+0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x555,0x555,0x555,0x555,
+0x555,0x555,0x555,0x555,0x555,0x555,0x555,0x555,0x555,0x552,0x552,0x552,0x552,0x555,0xacb,0xacb,
+0xbaf,0xbb5,0xbb5,0xbb2,0xbb2,0xbb2,0xbb2,0xdb6,0xec7,0xec7,0xec7,0xec7,0x10fe,0x5d,0x5d,0x5d,
+0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x585,0x585,0x585,0xad4,
+0xed0,0xfc3,0xfc3,0xfc3,0xfc3,0x125d,0x16cb,0x16cb,0x60,0x60,0x60,0x60,0x6f3,0x6f3,0x6f3,0x6f3,
+0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x6f3,0x591,0x591,0x58e,0x58e,0x58e,0x58e,0x5b2,0x5b2,0x5b2,0x5b2,
+0x5b2,0xadd,0xadd,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,
+0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x5b5,0x5b5,0x5b5,0x5b5,
+0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,
+0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0xaf8,0xaf8,0xaf8,0xaf8,
+0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,
+0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0x69,0xaf8,0xaf8,0xaf8,0xaf8,0xafb,0xaf8,0xaf8,0xaf8,0xaf8,
+0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xafb,
+0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xafe,0xafe,0xafe,0xafe,
+0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,
+0xafe,0xafe,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x72,0x813,0x80d,0x813,
+0x80d,0x813,0x80d,0x813,0x80d,0x813,0x80d,0x80d,0x810,0x80d,0x810,0x80d,0x810,0x80d,0x810,0x80d,
+0x810,0x80d,0x810,0x80d,0x810,0x80d,0x810,0x80d,0x810,0x80d,0x810,0x80d,0x80d,0x80d,0x80d,0x813,
+0x80d,0x813,0x80d,0x813,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x813,0x80d,0x80d,0x80d,0x80d,0x80d,
+0x810,0xc4e,0xc4e,0x72,0x72,0x927,0x927,0x8ee,0x8ee,0x816,0x819,0xc4b,0x75,0x75,0x75,0x75,
+0x75,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,
+0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x82b,0x10ec,0x18b1,0x1998,
+0x78,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,
+0x82e,0x82e,0x82e,0x78,0x8f7,0x8f7,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,0x8fa,
+0x8fa,0x8fa,0x8fa,0x8fa,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,
+0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,0x837,
+0x837,0xd4a,0xd4a,0x7b,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,
+0xb10,0x7e,0x7e,0x7e,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,
+0xb16,0xb16,0xb16,0xb16,0xb16,0xc57,0xb16,0xb16,0xb16,0xc57,0xb16,0x81,0x81,0x81,0x81,0x81,
+0x81,0x81,0x81,0x81,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,
+0x1191,0x1191,0x1191,0x1191,0x9ae,0x9ae,0x9ae,0x9ae,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
+0x84,0x84,0x84,0x84,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,
+0x1206,0x1206,0x1206,0x1206,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x5fa,0x87,0x87,0x87,0x87,0x87,
+0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x5e8,0x5e8,0x5e8,0x5e8,0x5e8,0x87,0x87,0x87,0x87,
+0x87,0xae9,0x5eb,0x5f1,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5f7,0x5ee,0x5f1,0x5f1,
+0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x87,0x5f1,0x5f1,0x5f1,0x5f1,
+0x5f1,0x87,0x5f1,0x87,0x5f1,0x5f1,0x87,0x5f1,0x5f1,0x87,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,0x5f1,
+0x5f1,0x5f1,0x5f1,0x5f4,0x606,0x600,0x606,0x600,0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,
+0x603,0x609,0x606,0x600,0x1311,0x1311,0x1afd,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,
+0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x606,0x600,0x603,0x609,0x606,0x600,0x606,0x600,0x606,
+0x600,0x606,0x606,0x600,0x600,0x600,0x600,0x603,0x600,0x600,0x603,0x600,0x603,0x603,0x603,0x600,
+0x603,0x603,0x603,0x603,0x8a,0x8a,0x603,0x603,0x603,0x603,0x600,0x600,0x603,0x600,0x600,0x600,
+0x600,0x603,0x600,0x600,0x600,0x600,0x600,0x603,0x603,0x603,0x600,0x600,0x8a,0x8a,0x8a,0x8a,
+0x8a,0x8a,0x8a,0x1afd,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
+0xb34,0xb34,0xb34,0xb34,0x84f,0x861,0x85e,0x861,0x85e,0xc6c,0xc6c,0xd56,0xd53,0x852,0x852,0x852,
+0x852,0x864,0x864,0x864,0x87c,0x87f,0x88e,0x8d,0x882,0x885,0x891,0x891,0x879,0x870,0x86a,0x870,
+0x86a,0x870,0x86a,0x86d,0x86d,0x888,0x888,0x88b,0x888,0x888,0x888,0x8d,0x888,0x876,0x873,0x86d,
+0x8d,0x8d,0x8d,0x8d,0x612,0x61e,0x612,0xbe8,0x612,0x90,0x612,0x61e,0x612,0x61e,0x612,0x61e,
+0x612,0x61e,0x612,0x61e,0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,
+0x61e,0x61b,0x615,0x61b,0x615,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x61b,0x615,0x61b,0x615,0x61b,
+0x615,0x90,0x90,0x60f,0x750,0x753,0x768,0x76b,0x74a,0x753,0x753,0x96,0x732,0x735,0x735,0x735,
+0x735,0x732,0x732,0x96,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0xaec,0xaec,0xaec,
+0x9b1,0x72c,0x621,0x621,0x96,0x77a,0x759,0x74a,0x753,0x750,0x74a,0x75c,0x74d,0x747,0x74a,0x768,
+0x75f,0x756,0x777,0x74a,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x774,0x765,0x762,
+0x768,0x768,0x768,0x77a,0x73b,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,
+0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,
+0x738,0x738,0x738,0x96,0x96,0x96,0x738,0x738,0x738,0x738,0x738,0x738,0x96,0x96,0x738,0x738,
+0x738,0x738,0x738,0x738,0x96,0x96,0x738,0x738,0x738,0x738,0x738,0x738,0x96,0x96,0x738,0x738,
+0x738,0x96,0x96,0x96,0xb37,0xb37,0xb37,0xb37,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+0x99,0x184e,0x184e,0x184e,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,
+0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0x9c,0x9c,0x9c,0x9c,0x9c,0x1614,0x1614,0x1614,0x1614,
+0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0xb46,0xb46,0xb46,0xb46,
+0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,
+0xb46,0xb46,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xb52,0xb52,0xb52,0xb52,
+0xb52,0xb52,0xb52,0xa2,0xa2,0xfcf,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,
+0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0x16d1,0x16d1,0x16d1,0x16d1,
+0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0x1b00,0x1b00,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,
+0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xa5,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb6a,0xb6a,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb6a,0xa5,0xb6a,0xb6a,0xa5,0xa5,0xb6a,0xa5,
+0xa5,0xb6a,0xb6a,0xa5,0xa5,0xb6a,0xb6a,0xb6a,0xb6a,0xa5,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb67,0xb67,0xb67,0xb67,0xa5,0xb67,0xa5,0xb67,0xb67,0xb67,0xb67,0xcde,0xb67,0xb67,
+0xa5,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb67,0xb67,0xb67,0xb67,
+0xb6a,0xb6a,0xa5,0xb6a,0xb6a,0xb6a,0xb6a,0xa5,0xa5,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xa5,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xa5,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb6a,0xb6a,0xa5,0xb6a,0xb6a,0xb6a,0xb6a,0xa5,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xa5,0xb6a,0xa5,0xa5,0xa5,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xa5,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xdc8,0xdc8,0xa5,0xa5,
0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
-0x61e,0x61e,0x978,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x615,0x615,0xc24,0xdb3,0x8d,0x8d,
-0x87f,0x891,0x88e,0x891,0x88e,0xcb1,0xcb1,0xda4,0xda1,0x882,0x882,0x882,0x882,0x894,0x894,0x894,
-0x8ac,0x8af,0x8be,0x90,0x8b2,0x8b5,0x8c1,0x8c1,0x8a9,0x8a0,0x89a,0x8a0,0x89a,0x8a0,0x89a,0x89d,
-0x89d,0x8b8,0x8b8,0x8bb,0x8b8,0x8b8,0x8b8,0x90,0x8b8,0x8a6,0x8a3,0x89d,0x90,0x90,0x90,0x90,
-0x62a,0x636,0x62a,0xc27,0x62a,0x93,0x62a,0x636,0x62a,0x636,0x62a,0x636,0x62a,0x636,0x62a,0x636,
-0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,
-0x62d,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,0x62d,0x633,0x62d,0x633,0x62d,0x93,0x93,0x627,
-0x77d,0x780,0x795,0x798,0x777,0x780,0x780,0x99,0x75f,0x762,0x762,0x762,0x762,0x75f,0x75f,0x99,
-0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0xb22,0xb22,0xb22,0x9de,0x759,0x639,0x639,
-0x99,0x7a7,0x786,0x777,0x780,0x77d,0x777,0x789,0x77a,0x774,0x777,0x795,0x78c,0x783,0x7a4,0x777,
-0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x7a1,0x792,0x78f,0x795,0x795,0x795,0x7a7,
-0x768,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,
-0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x765,0x99,
-0x99,0x99,0x765,0x765,0x765,0x765,0x765,0x765,0x99,0x99,0x765,0x765,0x765,0x765,0x765,0x765,
-0x99,0x99,0x765,0x765,0x765,0x765,0x765,0x765,0x99,0x99,0x765,0x765,0x765,0x99,0x99,0x99,
-0xb6d,0xb6d,0xb6d,0xb6d,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x18b7,0x18b7,0x18b7,
-0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
-0xb73,0xb73,0xb73,0x9f,0x9f,0x9f,0x9f,0x9f,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,
-0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,
-0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xa2,0xa2,
-0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xa5,
-0xa5,0x101d,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
-0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,
-0x173d,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,
-0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xa8,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xa8,0xba0,0xba0,0xa8,0xa8,0xba0,0xa8,0xa8,0xba0,0xba0,0xa8,
-0xa8,0xba0,0xba0,0xba0,0xba0,0xa8,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xb9d,0xb9d,
-0xb9d,0xb9d,0xa8,0xb9d,0xa8,0xb9d,0xb9d,0xb9d,0xb9d,0xd29,0xb9d,0xb9d,0xa8,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xa8,0xba0,
-0xba0,0xba0,0xba0,0xa8,0xa8,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xa8,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xa8,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xba0,0xba0,0xa8,0xba0,0xba0,0xba0,0xba0,0xa8,0xba0,0xba0,0xba0,0xba0,0xba0,0xa8,0xba0,0xa8,
-0xa8,0xa8,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xa8,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xe16,0xe16,0xa8,0xa8,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xf2d,0xf2a,
-0xa8,0xa8,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,
-0xb9a,0xb9a,0xb9a,0xb9a,0xab,0xba6,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
-0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
-0xab,0xab,0xab,0xab,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,0xc36,
-0xc36,0xae,0xc36,0xc36,0xc36,0xc36,0xc30,0xc30,0xc33,0xae,0xae,0xae,0xae,0xae,0xae,0xae,
-0xae,0xae,0xae,0xae,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,
-0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc3f,0xc39,0xc39,0xc3c,0xca5,0xca5,0xb1,0xb1,0xb1,0xb1,0xb1,
-0xb1,0xb1,0xb1,0xb1,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,
-0xc45,0xc45,0xc45,0xc45,0xc45,0xc45,0xc42,0xc42,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,
-0xb4,0xb4,0xb4,0xb4,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,0xc4b,
-0xc4b,0xb7,0xc4b,0xc4b,0xc4b,0xb7,0xc48,0xc48,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,
-0xb7,0xb7,0xb7,0xb7,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,
-0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,0xd3b,
-0xd3b,0x1539,0x1539,0xba,0xd2c,0xd2c,0xd2c,0xd38,0xd38,0xd38,0xd38,0xd2c,0xd2c,0xd38,0xd38,0xd38,
-0xba,0xba,0xba,0xba,0xd38,0xd38,0xd2c,0xd38,0xd38,0xd38,0xd38,0xd38,0xd38,0xd2f,0xd2f,0xd2f,
-0xba,0xba,0xba,0xba,0xd32,0xba,0xba,0xba,0xd3e,0xd3e,0xd35,0xd35,0xd35,0xd35,0xd35,0xd35,
-0xd35,0xd35,0xd35,0xd35,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,
-0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xbd,0xbd,0xd41,0xd41,0xd41,0xd41,0xd41,0xbd,0xbd,0xbd,
-0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
-0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0xc0,0xc0,0x153c,0x153c,
-0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
-0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0xc0,0x1abe,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
-0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xc3,0xd68,0xd68,0xd68,
-0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,
-0xd68,0xd68,0xd68,0xc3,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,
-0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xc3,0xd68,0xd68,0xc3,0xd68,0xd68,0xd68,0xd68,0xd68,
-0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xc3,0xc3,0xd68,0xd68,0xd68,0xd68,
-0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xd68,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
-0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
-0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xd6b,0xd6b,0xd6b,0xd6b,
-0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
-0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xc6,0xc6,0xc6,0xc6,0xc6,0xdad,0xdad,0xdad,0xc9,
-0xc9,0xc9,0xc9,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,
-0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xda7,0xc9,0xc9,0xc9,0xdaa,
-0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xdaa,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,
-0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,
-0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xcc,0xd6e,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,
-0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,
-0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xd7a,0xcf,0xcf,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,0xd77,
-0xd77,0xd77,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,
-0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd2,0xd2,
-0xd7d,0xd2,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,
-0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd7d,0xd2,0xd7d,0xd7d,0xd2,0xd2,0xd2,
-0xd7d,0xd2,0xd2,0xd7d,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,
-0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd5,0xd5,0xd5,0xd5,0xd5,
-0xd5,0xd5,0xd5,0xd5,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0x153f,
-0x153f,0x17f1,0x17f1,0xdb,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,0x1119,
-0x1acd,0x132,0x132,0x132,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,
-0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe3a,0xe3a,0xe40,0xe40,0xe3a,
-0xde,0xde,0xe3d,0xe3d,0x1149,0x1149,0x1149,0x1149,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
-0xe1,0xe1,0xe1,0xe1,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,
-0xca2,0xca2,0xca2,0xca2,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1542,0x1542,0x1542,0x1542,0x1542,
-0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1545,0x18bd,0x18bd,0x193e,0x18bd,0xe4,0x17f4,
-0x1377,0x118b,0xf3c,0xf3c,0xe55,0xe52,0xe55,0xe52,0xe52,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0x1194,
-0x1191,0x1194,0x1191,0x118e,0x118e,0x118e,0x1434,0x1431,0xe7,0xe7,0xe7,0xe7,0xe7,0xe4f,0xe4c,0xe4c,
-0xe4c,0xe49,0xe4f,0xe4c,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,
-0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xea,0xea,0xea,0xea,0xea,
-0xea,0xea,0xea,0xea,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xea,0xe58,0xe58,0xe58,0xe58,
-0xe58,0xe58,0xe58,0xea,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xea,0xe58,0xe58,0xe58,0xe58,
-0xe58,0xe58,0xe58,0xea,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,0xe5e,
-0xe5e,0xe5e,0xe5e,0xe5e,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xe5b,0xed,0xed,
-0xed,0xed,0xed,0xed,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xf0,0x1437,0xf0,0xf0,0xf0,0xf0,
-0xf0,0x1437,0xf0,0xf0,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,
-0xeb8,0xeb8,0xeb8,0xeb8,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
-0xe67,0xe67,0xe67,0xf3,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,
-0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,
-0xe64,0xe64,0xe64,0xf3,0xe79,0xe6d,0xe6d,0xe6d,0xf6,0xe6d,0xe6d,0xf6,0xf6,0xf6,0xf6,0xf6,
-0xe6d,0xe6d,0xe6d,0xe6d,0xe79,0xe79,0xe79,0xe79,0xf6,0xe79,0xe79,0xe79,0xf6,0xe79,0xe79,0xe79,
-0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,0xe79,
-0xe79,0xe79,0xe79,0xe79,0x195c,0x195c,0xf6,0xf6,0xe6a,0xe6a,0xe6a,0xf6,0xf6,0xf6,0xf6,0xe70,
-0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0xe73,0x1959,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
-0xe76,0xe76,0xe76,0xe76,0xe76,0xe76,0xe7c,0xe7c,0xe73,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
-0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0x119a,0x119a,0xf9,0xf9,0xf9,0xf9,
-0xe88,0xe88,0xe88,0xe88,0xe88,0xe8b,0xe8b,0xe8b,0xe88,0xe88,0xe8b,0xe88,0xe88,0xe88,0xe88,0xe88,
-0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xe85,0xe85,0xe85,0xe85,
-0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0x1197,0xf9,0xf9,0xf9,0xe82,0xe82,0xe91,0xe91,0xe91,0xe91,
-0xfc,0xfc,0xfc,0xfc,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe8e,0xe91,0xe91,0xe91,
-0xe91,0xe91,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x154e,0x1554,0x1551,0x189c,
-0x17f7,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x1962,0x195f,0x1965,0x195f,0x1965,0x1a25,0x1ac1,0x1ac1,0x1ac1,0xff,
-0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
-0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
-0xeb5,0xeb5,0xeb5,0xeb2,0xeb2,0xea9,0xea9,0xeb2,0xeaf,0xeaf,0xeaf,0xeaf,0x1ac4,0x102,0x102,0x102,
-0x1314,0x1314,0x1314,0x1317,0x1317,0x1317,0x130e,0x130e,0x1311,0x130e,0x156,0x156,0x156,0x156,0x156,0x156,
-0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0x1443,0x1443,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0xebb,
-0x137d,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x137a,
-0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc72,0xc75,
-0xee8,0xed9,0xed3,0xee5,0xee2,0xedc,0xedc,0xeeb,0xed6,0xedf,0x108,0x108,0x108,0x108,0x108,0x108,
-0xf6f,0xf6f,0xf5a,0xf6f,0xf72,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0x10e,0x10e,0x10e,0x10e,
-0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf7b,0xf7b,0xf60,0xf66,0xf7b,0xf7b,
-0xf63,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,
-0xf5d,0xf5d,0xf5d,0xf5d,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0xf60,0x10e,0x10e,0x10e,
-0x111,0x111,0x1a2b,0x1a28,0x1a2b,0x1a2b,0x1a2b,0x1aca,0x1ac7,0x1aca,0x1ac7,0x111,0x111,0x111,0x111,0x111,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb67,0xb67,0xb67,0xb61,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xedf,0xedc,0xa5,0xa5,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,
+0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xa8,0xb70,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
+0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
+0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,
+0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0x1b06,0xbf7,0xbf7,0xbf7,0xbf7,0xbf1,0xbf1,0xbf4,0x1b03,0xab,0xab,
+0xab,0xab,0xab,0xab,0xab,0xab,0xab,0x1b06,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,
+0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xbfa,0xbfa,0xbfd,0xc60,0xc60,0xae,
+0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
+0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc03,0xc03,0xb1,0xb1,0xb1,0xb1,
+0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,
+0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xb4,0xc0c,0xc0c,0xc0c,0xb4,0xc09,0xc09,0xb4,0xb4,0xb4,0xb4,
+0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,
+0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,
+0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0x14d6,0x14d6,0xb7,0xce1,0xce1,0xce1,0xced,0xced,0xced,0xced,0xce1,
+0xce1,0xced,0xced,0xced,0xb7,0xb7,0xb7,0xb7,0xced,0xced,0xce1,0xced,0xced,0xced,0xced,0xced,
+0xced,0xce4,0xce4,0xce4,0xb7,0xb7,0xb7,0xb7,0xce7,0xb7,0xb7,0xb7,0xcf3,0xcf3,0xcea,0xcea,
+0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,
+0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xba,0xba,0xcf6,0xcf6,0xcf6,0xcf6,
+0xcf6,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0x14d9,0x14d9,0x14d9,0x14d9,
+0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,
+0xbd,0xbd,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,
+0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0xbd,0x1a52,0x14d9,0x14d9,0x14d9,0x14d9,
+0x14d9,0x14d9,0x14d9,0x14d9,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,
+0xc0,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,
+0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xc0,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,
+0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xc0,0xd1a,0xd1a,0xc0,0xd1a,
+0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xc0,0xc0,
+0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xc0,0xc0,
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,
+0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xc3,0xc3,0xc3,0xc3,0xc3,
+0xd5c,0xd5c,0xd62,0xc6,0xc6,0xc6,0xc6,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,
+0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,0xd59,
+0xc6,0xc6,0xc6,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd23,0xd23,0xd23,0xd23,
+0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,
+0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xc9,0xd20,0xd2c,0xd2c,0xd2c,0xd2c,
+0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,
+0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xd2c,0xcc,0xcc,0xd29,0xd29,0xd29,0xd29,
+0xd29,0xd29,0xd29,0xd29,0xd29,0xd29,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x1812,0x1812,0x1812,0x1812,
+0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xcf,0xcf,0xd2f,0xcf,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,
+0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xd2f,0xcf,0xd2f,
+0xd2f,0xcf,0xcf,0xcf,0xd2f,0xcf,0xcf,0xd2f,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,
+0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd2,
+0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,
+0xde3,0xde3,0xde3,0x14dc,0x14dc,0x1788,0x1788,0xd8,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,0x10cb,
+0x10cb,0x10cb,0x10cb,0x10cb,0x1a61,0x129,0x129,0x129,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,
+0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdec,
+0xdec,0xdf2,0xdf2,0xdec,0xdb,0xdb,0xdef,0xdef,0x10fb,0x10fb,0x10fb,0x10fb,0xde,0xde,0xde,0xde,
+0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,
+0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xc5d,0xe07,0xe04,0xe07,0xe04,0xe04,0xdfb,0xdfb,0xdfb,
+0xdfb,0xdfb,0xdfb,0x1146,0x1143,0x1146,0x1143,0x1140,0x1140,0x1140,0x13d4,0x13d1,0xe1,0xe1,0xe1,0xe1,
+0xe1,0xe01,0xdfe,0xdfe,0xdfe,0xdfb,0xe01,0xdfe,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,
+0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe4,
+0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe4,
+0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe4,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe4,
+0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe4,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,
+0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,
+0xe0d,0xe0d,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xea,0x13d7,
+0xea,0xea,0xea,0xea,0xea,0x13d7,0xea,0xea,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,
+0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe2b,0xe1f,0xe1f,0xe1f,0xed,0xe1f,0xe1f,0xed,
+0xed,0xed,0xed,0xed,0xe1f,0xe1f,0xe1f,0xe1f,0xe2b,0xe2b,0xe2b,0xe2b,0xed,0xe2b,0xe2b,0xe2b,
+0xed,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,
+0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0x18f3,0x18f3,0xed,0xed,0xe1c,0xe1c,0xe1c,0xed,
+0xed,0xed,0xed,0xe22,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0x18f0,0xed,0xed,0xed,
+0xed,0xed,0xed,0xed,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe2e,0xe2e,0xe25,0xed,0xed,0xed,
+0xed,0xed,0xed,0xed,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0x114c,0x114c,
+0xf0,0xf0,0xf0,0xf0,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3d,0xe3d,0xe3d,0xe3a,0xe3a,0xe3d,0xe3a,
+0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
+0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0x1149,0xf0,0xf0,0xf0,0xe34,0xe34,
+0xe43,0xe43,0xe43,0xe43,0xf3,0xf3,0xf3,0xf3,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,
+0xe40,0xe43,0xe43,0xe43,0xe43,0xe43,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,
+0x14eb,0x14f1,0x14ee,0x1833,0x178e,0x1857,0x1857,0x1857,0x1857,0x1857,0x18f9,0x18f6,0x18fc,0x18f6,0x18fc,0x19b9,
+0x1a55,0x1a55,0x1a55,0x1b18,0x1b18,0x1b12,0x1b0f,0x1b12,0x1b0f,0x1b12,0x1b0f,0x1b12,0x1b0f,0x1b15,0xf6,0xf6,
+0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
+0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
+0xe67,0xe67,0xe67,0xe64,0xe64,0xe5b,0xe5b,0xe64,0xe61,0xe61,0xe61,0xe61,0x1a58,0xf9,0xf9,0xf9,
+0x12ba,0x12ba,0x12ba,0x12bd,0x12bd,0x12bd,0x12b4,0x12b4,0x12b7,0x12b4,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,
+0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0x13e3,0x13e3,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xe6d,
+0x1323,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x1320,
+0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,0xc30,
+0xe9a,0xe8b,0xe85,0xe97,0xe94,0xe8e,0xe8e,0xe9d,0xe88,0xe91,0xff,0xff,0xff,0xff,0xff,0xff,
+0xf21,0xf21,0xf0c,0xf21,0xf24,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0x1b1b,0x105,0x105,0x105,
+0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf1b,0xf2d,0xf2d,0xf12,0xf18,0xf2d,0xf2d,
+0xf15,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf0f,0xf0f,0xf0f,0xf0f,0xf0f,
+0xf0f,0xf0f,0xf0f,0xf0f,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0xf12,0x1b1e,0x1b1e,0x105,
+0x1b27,0x1b21,0x19bf,0x19bc,0x19bf,0x19bf,0x19bf,0x1a5e,0x1a5b,0x1a5e,0x1a5b,0x108,0x108,0x108,0x108,0x108,
+0x1b27,0x1b21,0x108,0x1b21,0x108,0x1b21,0x1b27,0x1b21,0x1b27,0x1b21,0x108,0x108,0x108,0x108,0x108,0x108,
+0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x1b24,0x1b24,
+0x1b24,0x1a5e,0x1a5b,0x14fa,0x13ec,0x13ec,0x1326,0x1026,0x1026,0x1026,0x1026,0x1026,0xf3c,0xf3c,0xf3c,0xf3c,
+0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,
+0xf39,0xf39,0xf3f,0xf3f,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0xf48,0xf48,0xf48,0xf48,
+0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,0xf48,
+0xf48,0xf48,0xf42,0xf42,0xf42,0xf42,0x1155,0x1155,0x10e,0x10e,0x10e,0xf45,0x1500,0x1500,0x1500,0x1500,
+0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,
+0x1500,0x1500,0x1500,0x1500,0x1500,0x16e0,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,
0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,
-0x111,0x1aca,0x1ac7,0x155d,0x144c,0x144c,0x1380,0x1074,0x1074,0x1074,0x1074,0x1074,0xf8a,0xf8a,0xf8a,0xf8a,
-0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,
-0xf87,0xf87,0xf8d,0xf8d,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0xf96,0xf96,0xf96,0xf96,
-0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,
-0xf96,0xf96,0xf90,0xf90,0xf90,0xf90,0x11a3,0x11a3,0x117,0x117,0x117,0xf93,0x1563,0x1563,0x1563,0x1563,
-0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,
-0x1563,0x1563,0x1563,0x1563,0x1563,0x174c,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,
-0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,
-0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xf9f,0xf9f,0xf9f,0x1569,0x1569,0x1569,0x1569,0x1569,
-0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x11d,0xf9c,0xf9c,0xf9c,0xf9c,0x1566,0x11d,0x11d,0x11d,
-0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,
-0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,
-0x1974,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x109b,0x109b,0x109b,0x109b,0x1098,0x1098,0x1098,0x1098,
-0x1098,0x1098,0x1098,0x1098,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1098,0x1098,0x108f,0x108c,
-0x123,0x123,0x123,0x109e,0x109e,0x1092,0x1092,0x1092,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,
-0x1095,0x1095,0x123,0x123,0x123,0x109b,0x109b,0x109b,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,
-0x10a1,0x10a1,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,
-0x10b6,0x10b6,0x10b9,0x10b9,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,
-0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x10e0,0x10e0,0x10e0,0x10e0,0x10da,0x17fd,0x129,0x129,
-0x129,0x129,0x129,0x129,0x129,0x129,0x10e6,0x10e6,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,
-0x10dd,0x10dd,0x129,0x129,0x129,0x129,0x129,0x129,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x10f8,
-0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10f8,0x10fe,0x1101,0x12c,0x12c,0x12c,0x12c,
-0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x10fb,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,
-0x1113,0x1107,0x1107,0x1107,0x1107,0x1107,0x1107,0x1110,0x1110,0x1107,0x1107,0x1110,0x1110,0x1107,0x1107,0x12f,
-0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x1113,0x1113,0x1113,0x1107,0x1113,0x1113,0x1113,0x1113,
-0x1113,0x1113,0x1113,0x1113,0x1107,0x1110,0x12f,0x12f,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,
-0x110d,0x110d,0x12f,0x12f,0x110a,0x1116,0x1116,0x1116,0x1575,0x132,0x132,0x132,0x132,0x132,0x132,0x132,
-0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,
-0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,
-0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,
-0x111c,0x111c,0x111c,0x111c,0x111c,0x111f,0x135,0x135,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,
-0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,
-0x1122,0x1122,0x1122,0x1122,0x1122,0x138,0x138,0x138,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,
-0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
-0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,
-0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,
-0x112b,0x112b,0x13e,0x13e,0x13e,0x13e,0x13e,0x1128,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,
-0x112e,0x112e,0x112e,0x112e,0x141,0x141,0x141,0x141,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,
-0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x144,0x144,0x144,0x144,
-0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x144,0x11a9,0x11a9,0x11a9,0x11a9,0x11b2,0x11a9,0x11a9,0x11a9,
-0x11b2,0x11a9,0x11a9,0x11a9,0x11a9,0x11a6,0x147,0x147,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11af,0x11b5,
-0x11af,0x11b5,0x11af,0x11af,0x11af,0x11b5,0x11b5,0x147,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
-0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x14a,0x14a,
-0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,
-0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d0,0x11bb,0x11d0,
-0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x14d,0x11c4,0x11cd,0x11bb,0x11cd,0x11cd,0x11bb,0x11bb,0x11bb,
-0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11bb,0x11bb,0x11c1,0x11c1,0x11c1,
-0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x14d,0x14d,0x11be,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,
-0x11ca,0x11ca,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,0x11ca,
-0x11ca,0x11ca,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11d6,
-0x11d9,0x11d9,0x11d9,0x11d9,0x11c7,0x11c7,0x14d,0x14d,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,
-0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15bd,0x1adf,0x1329,0x1302,0x1320,0x1320,0x1320,0x1320,0x1320,0x1320,
-0x1320,0x1308,0x1305,0x12fc,0x12fc,0x1326,0x12fc,0x12fc,0x12fc,0x12fc,0x130b,0x14eb,0x14f1,0x14ee,0x14ee,0x193b,
-0x1716,0x1716,0x1aac,0x150,0x150,0x150,0x150,0x150,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,
-0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11e5,0x11e5,0x11e8,0x11f1,0x11eb,0x11eb,0x11eb,0x11f1,
-0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x153,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,
-0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,
-0x12ea,0x12ea,0x12ea,0x12ea,0x12ea,0x159,0x159,0x159,0x120f,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1206,
-0x1215,0x1215,0x1203,0x1203,0x1203,0x1203,0x15c,0x131a,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,
-0x1209,0x1209,0x15c,0x15c,0x15c,0x15c,0x1203,0x1203,0x1233,0x1227,0x1233,0x15f,0x15f,0x15f,0x15f,0x15f,
-0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,0x15f,
-0x15f,0x15f,0x15f,0x1230,0x1230,0x1236,0x122a,0x122d,0x124b,0x124b,0x124b,0x1245,0x1245,0x123c,0x1245,0x1245,
-0x123c,0x1245,0x1245,0x124e,0x1248,0x123f,0x162,0x162,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,0x1242,
-0x1242,0x1242,0x162,0x162,0x162,0x162,0x162,0x162,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x1254,0x165,
-0x165,0x165,0x165,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
-0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
-0x165,0x165,0x165,0x165,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,
-0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x168,0x125a,0x1257,0x1257,0x1257,0x1257,
-0x1257,0x1257,0x1257,0x1257,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,
-0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x16b,0x16b,0x16b,0x1266,0x1269,0x1269,
-0x1269,0x1269,0x1269,0x1269,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,
-0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x16e,0x16e,0x126f,0x126f,0x126f,0x126f,
-0x126f,0x126f,0x126f,0x126f,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,
-0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x1278,0x171,0x171,0x171,0x171,0x171,0x1275,0x1275,0x1275,0x1275,
-0x1275,0x1275,0x1275,0x1275,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,
-0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,
-0x127e,0x127e,0x127e,0x177,0x1299,0x1299,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,
-0x17a,0x197d,0x17a,0x17a,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,
-0x14ca,0x14ca,0x14ca,0x14ca,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
-0x129f,0x129f,0x129f,0x17d,0x1a4f,0x1a4f,0x1a4f,0x1a4f,0x1a4f,0x1a4f,0x1a4f,0x1a52,0x1a4c,0x279,0x279,0x279,
-0x279,0x279,0x279,0x279,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,0x187e,
-0x187e,0x1ad0,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,
-0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,
-0x180,0x180,0x180,0x180,0x180,0x180,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,
-0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,
-0x12f6,0x13f5,0x13f2,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,
-0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f3,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,
-0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f3,0x12f0,0x12f0,0x13f5,0x13f5,
-0x13f5,0x13f5,0x13f5,0x13f2,0x13f5,0x13f5,0x13f5,0x1881,0x183,0x183,0x183,0x183,0x12ed,0x12ed,0x12ed,0x12ed,
-0x12ed,0x12ed,0x12ed,0x12ed,0x12ed,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x1419,0x1419,0x183,0x183,
-0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x1920,0x1920,0x1920,0x1920,
-0x1920,0x1920,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,
-0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,
-0x183,0x183,0x183,0x183,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,
-0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x138f,0x138f,0x138f,
-0x186,0x186,0x1392,0x186,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x1398,0x13a1,0x139b,0x139b,0x13a1,0x13a1,
-0x13a1,0x139b,0x13a1,0x139b,0x139b,0x139b,0x13a4,0x13a4,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,
-0x139e,0x139e,0x139e,0x139e,0x18c,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x18c,0x18c,0x13aa,0x13aa,0x13aa,
-0x13aa,0x13aa,0x13aa,0x18c,0x18c,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x18c,0x18c,0x18c,0x18c,0x18c,
-0x18c,0x18c,0x18c,0x18c,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x18c,0x13aa,0x13aa,0x13aa,0x13aa,
-0x13aa,0x13aa,0x13aa,0x18c,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,
-0x161d,0x161d,0x161d,0x161d,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13b0,0x13c2,0x13c2,0x13b6,0x13b6,0x13b6,
-0x13b6,0x13b6,0x18f,0x18f,0x18f,0x18f,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,
-0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b3,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,
-0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x1584,
-0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,
-0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x192,0x192,0x192,0x192,0x192,0x192,0x192,
-0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x195,
-0x195,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x1587,
-0x195,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13fe,
-0x195,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,
-0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,
-0x1587,0x1587,0x1587,0x1587,0x1587,0x1587,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,
-0x1413,0x1410,0x1410,0x1410,0x1410,0x1410,0x159c,0x159c,0x159c,0x159c,0x159c,0x159f,0x170d,0x159f,0x159f,0x159f,
-0x17d9,0x188a,0x188a,0x18c3,0x18c3,0x1a8e,0x1b39,0x1b39,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,
-0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159c,0x159c,0x159c,0x159f,0x159c,0x170a,0x170a,0x198,0x198,0x198,
-0x159f,0x159c,0x159c,0x159f,0x188a,0x188a,0x188a,0x1926,0x1926,0x1a07,0x1a8e,0x1b39,0x1b39,0x198,0x198,0x198,
-0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,
-0x13cb,0x13cb,0x13cb,0x13cb,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,
-0x1467,0x15a5,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x15a5,0x15a5,0x15a5,
-0x15a5,0x15a5,0x15a5,0x175e,0x175e,0x19e,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1ad3,0x1ad3,
-0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x1ad3,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,
-0x19e,0x19e,0x19e,0x1983,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1806,
-0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,
-0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,
-0x1a1,0x146d,0x146d,0x1a1,0x146d,0x1a1,0x1a1,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,
-0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x1a1,0x1a1,0x1a1,
-0x1a1,0x1a1,0x146d,0x1a1,0x1a1,0x1a1,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x146d,0x146d,
-0x1a1,0x146d,0x146d,0x1a1,0x146d,0x1a1,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,0x1a1,0x146d,
-0x1a1,0x146d,0x146d,0x1a1,0x146d,0x1a1,0x1a1,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,
-0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x1a1,
-0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,
-0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a1,0x1a1,0x1a1,0x1a1,
-0x1a1,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a1,0x146d,0x146d,0x146d,0x146d,0x146d,
-0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a1,0x1a1,0x1a1,0x1a1,
-0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,
-0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x146a,0x146a,0x1a1,0x1a1,
-0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1482,0x1482,0x1482,0x1482,
-0x1482,0x1482,0x1482,0x1470,0x1470,0x1470,0x1470,0x1470,0x147f,0x1470,0x1473,0x1473,0x1470,0x1470,0x1470,0x1476,
-0x1476,0x1a4,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x147c,0x1479,0x1485,0x1485,0x1485,
-0x1989,0x1986,0x1986,0x1ad6,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x162f,0x162f,0x162f,0x162f,
-0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x1491,0x1491,0x1491,0x1491,
-0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x148e,0x1488,0x1488,0x148e,0x148e,0x1497,0x1497,0x1491,0x1494,
-0x1494,0x148e,0x148b,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x149a,0x149a,0x149a,0x149a,
-0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,0x149a,
-0x149a,0x149a,0x149a,0x149a,0x1aa,0x1aa,0x1aa,0x1aa,0x1761,0x1761,0x149a,0x149a,0x1761,0x1761,0x1761,0x1761,
-0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1aa,0x1aa,0x1761,0x1761,
-0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x14a6,0x14a6,0x14a6,0x14a6,
-0x14a6,0x1a37,0x1a37,0x1a37,0x1a37,0x1a37,0x1a37,0x1ad,0x1ad,0x1ad,0x1ad,0x1a31,0x14a6,0x14a3,0x14a3,0x14a3,
-0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x1a34,0x1a34,0x1a34,0x1a34,
-0x1a34,0x1a34,0x1a34,0x1a34,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x14a0,0x14a0,0x14a0,0x14a0,0x14a9,
-0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14a9,0x14ca,0x14ca,0x14ca,0x14ca,
-0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x14c7,0x14c7,0x14c7,0x14c7,
-0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x14c7,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x14cd,0x14cd,0x14cd,0x14cd,
-0x14cd,0x14cd,0x14cd,0x14cd,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1323,0x1320,0x1323,0x12ff,
-0x1320,0x1326,0x1326,0x1329,0x1326,0x1329,0x132c,0x1320,0x1329,0x1329,0x1320,0x1320,0x14df,0x14df,0x14df,0x14df,
-0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14d0,0x14d9,0x14d0,0x14d9,0x14d9,0x14d0,0x14d0,0x14d0,0x14d0,
-0x14d0,0x14d0,0x14dc,0x14d3,0x1a3a,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x15b1,0x15b1,0x15b1,0x15b1,
-0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x1b9,0x1b9,0x15ae,0x15ae,0x15ae,0x15ae,
-0x15ae,0x15b4,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1719,0x1710,0x1710,0x1710,
-0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,
-0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1bf,0x1bf,0x1bf,0x1bf,0x1adf,0x1c2,0x1c2,0x1c2,
-0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,
-0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,
-0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,
-0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1c5,0x1c5,0x1c5,
-0x1c5,0x1c5,0x1c5,0x1c5,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1c5,0x1c5,
-0x15c9,0x15c3,0x15c6,0x15cf,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x1c8,0x1c8,0x1c8,0x1c8,
-0x1c8,0x1c8,0x1c8,0x1c8,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,
-0x15ba,0x15ba,0x15ba,0x15ba,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,
-0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x198c,0x198c,0x198c,0x198c,0x1cb,0x1cb,0x1cb,
-0x1cb,0x1cb,0x1cb,0x1cb,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,0x1a91,
-0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,
-0x1cb,0x1cb,0x1cb,0x1cb,0x1776,0x171c,0x15de,0x1722,0x1ce,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,
-0x15e7,0x1ce,0x1ce,0x15e7,0x15e7,0x1ce,0x1ce,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,
-0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x1ce,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x1ce,0x15e7,0x15e7,
-0x1ce,0x15e7,0x15e7,0x15e7,0x15e7,0x15e7,0x1ce,0x1a16,0x171f,0x15e7,0x15d8,0x15de,0x15d8,0x15de,0x15de,0x15de,
-0x15de,0x1ce,0x1ce,0x15de,0x15de,0x1ce,0x1ce,0x15e1,0x15e1,0x15e4,0x1ce,0x1ce,0x1779,0x1ce,0x1ce,0x1ce,
-0x1ce,0x1ce,0x1ce,0x15d8,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x15ea,0x15e7,0x15e7,0x15e7,0x15e7,0x15de,0x15de,
-0x1ce,0x1ce,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x1ce,0x1ce,0x1ce,0x15db,0x15db,0x15db,0x15db,
-0x15db,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x15ff,0x15ff,0x15ff,0x15ff,
-0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x1d1,0x15ff,
-0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15f9,0x15f9,0x15f9,0x15ed,
-0x15ed,0x15ed,0x15f9,0x15f9,0x15ed,0x15fc,0x15f0,0x15ed,0x1602,0x1602,0x15f6,0x1602,0x1602,0x15f3,0x180c,0x1d1,
-0x1611,0x1611,0x1611,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1608,0x160b,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,
-0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,
-0x177c,0x177c,0x177c,0x177c,0x161d,0x161a,0x1a3d,0x1a3d,0x1ae5,0x1ae8,0x1ae2,0x1ae2,0x1d7,0x1d7,0x1d7,0x1d7,
-0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
-0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,
-0x162f,0x162f,0x162f,0x1626,0x1629,0x162c,0x162f,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,
-0x163e,0x163e,0x163e,0x163e,0x163e,0x1632,0x1632,0x1e0,0x1e0,0x1e0,0x1e0,0x1635,0x1635,0x1635,0x1635,0x1635,
-0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x1638,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,
-0x1647,0x1647,0x1647,0x1647,0x1647,0x1e3,0x1e3,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,
-0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,
-0x164a,0x165c,0x165c,0x1650,0x1659,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
-0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
-0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,
-0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1662,0x1e9,
-0x166e,0x166e,0x166e,0x166e,0x166e,0x1668,0x1671,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,
-0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166e,0x166e,0x166e,0x166e,0x166e,0x1ec,
-0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,
-0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1ef,
-0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,
-0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,0x1680,0x1680,0x1680,0x1680,0x1680,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,
-0x169b,0x169b,0x169e,0x169e,0x16a1,0x1692,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,
-0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1698,0x1f5,0x1692,0x1692,0x1692,0x1692,0x1692,
-0x1692,0x1692,0x1f5,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
-0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x169b,0x169b,0x169b,
-0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,
-0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,
-0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,
-0x16b3,0x16b3,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x16b0,0x16b0,0x16b0,0x16b0,0x1fb,0x1fb,0x1fb,
-0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16b6,
-0x16c8,0x16c8,0x16b6,0x16b6,0x16b6,0x16b6,0x201,0x201,0x16c8,0x16c8,0x16cb,0x16cb,0x16b6,0x16b6,0x16c8,0x16bc,
-0x16b9,0x16bf,0x16d1,0x16d1,0x16c2,0x16c2,0x16c5,0x16c5,0x16c5,0x16d1,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,
-0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1785,0x1782,0x1782,0x1782,0x1782,0x177f,0x177f,0x201,0x201,
-0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,
-0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,
-0x204,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,
-0x16d4,0x16d4,0x16d4,0x16d4,0x16d4,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,
-0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x207,0x207,0x207,0x207,
-0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
-0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
-0x16d7,0x16d7,0x207,0x207,0x207,0x207,0x207,0x207,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
-0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
-0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x207,0x207,0x1aeb,0x1aeb,0x207,0x207,
-0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,
+0x111,0x111,0x111,0x111,0x111,0x111,0x111,0x111,0xf51,0xf51,0xf51,0x1506,0x1506,0x1506,0x1506,0x1506,
+0x1506,0x1506,0x1506,0x1506,0x1506,0x1506,0x1506,0x114,0xf4e,0xf4e,0xf4e,0xf4e,0x1503,0x114,0x114,0x114,
+0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,
+0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0xf54,0x190b,0x190b,0x190b,0x190b,0x190b,0x190b,
+0x190b,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x104d,0x104d,0x104d,0x104d,0x104a,0x104a,0x104a,0x104a,
+0x104a,0x104a,0x104a,0x104a,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x104a,0x104a,0x1041,0x103e,
+0x11a,0x11a,0x11a,0x1050,0x1050,0x1044,0x1044,0x1044,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,
+0x1047,0x1047,0x11a,0x11a,0x11a,0x104d,0x104d,0x104d,0x1053,0x1053,0x1053,0x1053,0x1053,0x1053,0x1053,0x1053,
+0x1053,0x1053,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1068,0x1068,0x1068,0x1068,0x1068,0x1068,0x1068,0x1068,
+0x1068,0x1068,0x106b,0x106b,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,
+0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x1092,0x1092,0x1092,0x1092,0x108c,0x1794,0x120,0x120,
+0x120,0x120,0x120,0x120,0x120,0x120,0x1098,0x1098,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,
+0x108f,0x108f,0x120,0x120,0x120,0x120,0x120,0x120,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10aa,
+0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10b0,0x10b3,0x123,0x123,0x123,0x123,
+0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x10ad,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,
+0x10c5,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10c2,0x10c2,0x10b9,0x10b9,0x10c2,0x10c2,0x10b9,0x10b9,0x126,
+0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x10c5,0x10c5,0x10c5,0x10b9,0x10c5,0x10c5,0x10c5,0x10c5,
+0x10c5,0x10c5,0x10c5,0x10c5,0x10b9,0x10c2,0x126,0x126,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,0x10bf,
+0x10bf,0x10bf,0x126,0x126,0x10bc,0x10c8,0x10c8,0x10c8,0x1512,0x129,0x129,0x129,0x129,0x129,0x129,0x129,
+0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,
+0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,
+0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,
+0x10ce,0x10ce,0x10ce,0x10ce,0x10ce,0x10d1,0x12c,0x12c,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,
+0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,
+0x10d4,0x10d4,0x10d4,0x10d4,0x10d4,0x12f,0x12f,0x12f,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,
+0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x132,0x132,0x132,0x132,0x132,0x132,0x132,
+0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,
+0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,0x10dd,
+0x10dd,0x10dd,0x135,0x135,0x135,0x135,0x135,0x10da,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,
+0x10e0,0x10e0,0x10e0,0x10e0,0x138,0x138,0x138,0x138,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,
+0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x13b,0x13b,0x13b,0x13b,
+0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x115b,0x115b,0x115b,0x115b,0x1164,0x115b,0x115b,0x115b,
+0x1164,0x115b,0x115b,0x115b,0x115b,0x1158,0x13e,0x13e,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1161,0x1167,
+0x1161,0x1167,0x1161,0x1161,0x1161,0x1167,0x1167,0x13e,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,
+0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x141,0x141,
+0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,
+0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1182,0x116d,0x1182,
+0x116d,0x116d,0x116d,0x116d,0x116d,0x116d,0x116d,0x144,0x1176,0x117f,0x116d,0x117f,0x117f,0x116d,0x116d,0x116d,
+0x116d,0x116d,0x116d,0x116d,0x116d,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x116d,0x116d,0x1173,0x1173,0x1173,
+0x1173,0x1173,0x1173,0x1173,0x1173,0x144,0x144,0x1170,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,
+0x117c,0x117c,0x144,0x144,0x144,0x144,0x144,0x144,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,
+0x117c,0x117c,0x144,0x144,0x144,0x144,0x144,0x144,0x1179,0x1179,0x1179,0x1179,0x1179,0x1179,0x1179,0x1188,
+0x118b,0x118b,0x118b,0x118b,0x1179,0x1179,0x144,0x144,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,
+0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x154e,0x1a73,0x12cf,0x12a8,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,
+0x12c6,0x12ae,0x12ab,0x12a2,0x12a2,0x12cc,0x12a2,0x12a2,0x12a2,0x12a2,0x12b1,0x148b,0x1491,0x148e,0x148e,0x18d2,
+0x16a7,0x16a7,0x1a40,0x147,0x147,0x147,0x147,0x147,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,
+0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x1197,0x1197,0x119a,0x11a3,0x119d,0x119d,0x119d,0x11a3,
+0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,
+0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,
+0x1293,0x1293,0x1293,0x1293,0x1293,0x150,0x150,0x150,0x11c1,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b8,
+0x11c7,0x11c7,0x11b5,0x11b5,0x11b5,0x11b5,0x153,0x12c3,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,
+0x11bb,0x11bb,0x153,0x153,0x153,0x153,0x11b5,0x11b5,0x11e5,0x11d9,0x11e5,0x156,0x156,0x156,0x156,0x156,
+0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156,
+0x156,0x156,0x156,0x11e2,0x11e2,0x11e8,0x11dc,0x11df,0x11fd,0x11fd,0x11fd,0x11f7,0x11f7,0x11ee,0x11f7,0x11f7,
+0x11ee,0x11f7,0x11f7,0x1200,0x11fa,0x11f1,0x159,0x159,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,
+0x11f4,0x11f4,0x159,0x159,0x159,0x159,0x159,0x159,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x15c,
+0x15c,0x15c,0x15c,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,
+0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,
+0x15c,0x15c,0x15c,0x15c,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,
+0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x15f,0x120c,0x1209,0x1209,0x1209,0x1209,
+0x1209,0x1209,0x1209,0x1209,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,
+0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x162,0x162,0x162,0x1218,0x121b,0x121b,
+0x121b,0x121b,0x121b,0x121b,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,
+0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x1224,0x165,0x165,0x1221,0x1221,0x1221,0x1221,
+0x1221,0x1221,0x1221,0x1221,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,
+0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x168,0x168,0x168,0x168,0x168,0x1227,0x1227,0x1227,0x1227,
+0x1227,0x1227,0x1227,0x1227,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
+0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
+0x1230,0x1230,0x1230,0x16e,0x124b,0x124b,0x1b2a,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,0x171,
+0x171,0x1914,0x171,0x171,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,
+0x146a,0x146a,0x146a,0x146a,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
+0x1251,0x1251,0x1251,0x174,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e3,0x19e6,0x19e0,0x26a,0x26a,0x26a,
+0x26a,0x26a,0x26a,0x26a,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,0x1815,
+0x1815,0x1a64,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,
+0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,0x177,
+0x177,0x177,0x177,0x177,0x177,0x177,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,
+0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,
+0x129c,0x1395,0x1395,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,
+0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,0x1299,
+0x1299,0x1299,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1818,0x17a,0x17a,0x17a,0x17a,
+0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x1296,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,
+0x13b9,0x13b9,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,
+0x18b7,0x18b7,0x18b7,0x18b7,0x18b7,0x18b7,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,
+0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,
+0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,
+0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,
+0x133b,0x1335,0x1335,0x1335,0x17d,0x17d,0x1338,0x17d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x133e,0x1347,
+0x1341,0x1341,0x1347,0x1347,0x1347,0x1341,0x1347,0x1341,0x1341,0x1341,0x134a,0x134a,0x180,0x180,0x180,0x180,
+0x180,0x180,0x180,0x180,0x1344,0x1344,0x1344,0x1344,0x183,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x183,
+0x183,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x183,0x183,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x183,
+0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x183,
+0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x183,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,
+0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1356,0x1368,
+0x1368,0x135c,0x135c,0x135c,0x135c,0x135c,0x186,0x186,0x186,0x186,0x1359,0x1359,0x1359,0x1359,0x1359,0x1359,
+0x1359,0x1359,0x1359,0x1359,0x1359,0x1359,0x1359,0x1359,0x1359,0x1359,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f,
+0x135f,0x135f,0x135f,0x135f,0x1b30,0x1b33,0x1b33,0x1b2d,0x1b2d,0x1b33,0x186,0x186,0x186,0x186,0x186,0x186,
+0x186,0x186,0x186,0x1521,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,
+0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x189,0x189,0x189,
+0x189,0x189,0x189,0x189,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,
+0x136e,0x136e,0x136e,0x18c,0x18c,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,
+0x136e,0x136e,0x136e,0x1524,0x18c,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,
+0x136e,0x136e,0x136e,0x139e,0x18c,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,
+0x136e,0x136e,0x136e,0x136e,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,
+0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x1524,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,
+0x18c,0x18c,0x18c,0x18c,0x13b3,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,
+0x169e,0x1530,0x1530,0x1530,0x1770,0x1821,0x1821,0x185a,0x185a,0x1a22,0x1acd,0x1acd,0x18f,0x18f,0x18f,0x18f,
+0x18f,0x1b9c,0x1b9c,0x1b9c,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x169b,
+0x169b,0x18f,0x18f,0x18f,0x1530,0x1530,0x1530,0x1530,0x1821,0x1821,0x1821,0x18bd,0x18bd,0x199e,0x1a22,0x1acd,
+0x1acd,0x18f,0x18f,0x18f,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,
+0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,
+0x192,0x192,0x192,0x192,0x140d,0x140d,0x140d,0x140d,0x195,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,
+0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,
+0x140d,0x140d,0x140d,0x140d,0x195,0x140d,0x140d,0x195,0x140d,0x195,0x195,0x140d,0x195,0x140d,0x140d,0x140d,
+0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x195,0x140d,0x140d,0x140d,0x140d,0x195,0x140d,0x195,0x140d,
+0x195,0x195,0x195,0x195,0x195,0x195,0x140d,0x195,0x195,0x195,0x195,0x140d,0x195,0x140d,0x195,0x140d,
+0x195,0x140d,0x140d,0x140d,0x195,0x140d,0x140d,0x195,0x140d,0x195,0x195,0x140d,0x195,0x140d,0x195,0x140d,
+0x195,0x140d,0x195,0x140d,0x195,0x140d,0x140d,0x195,0x140d,0x195,0x195,0x140d,0x140d,0x140d,0x140d,0x195,
+0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x195,0x140d,0x140d,0x140d,0x140d,0x195,0x140d,0x140d,0x140d,
+0x140d,0x195,0x140d,0x195,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x195,0x140d,
+0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,
+0x195,0x195,0x195,0x195,0x195,0x140d,0x140d,0x140d,0x195,0x140d,0x140d,0x140d,0x140d,0x140d,0x195,0x140d,
+0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,
+0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,
+0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,
+0x140a,0x140a,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195,
+0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1410,0x1410,0x1410,0x1410,0x1410,0x141f,0x1410,0x1413,0x1413,
+0x1410,0x1410,0x1410,0x1416,0x1416,0x198,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,
+0x1419,0x1425,0x1425,0x1425,0x1920,0x191d,0x191d,0x1a6a,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,
+0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,
+0x1431,0x1431,0x1431,0x1431,0x1431,0x1431,0x1431,0x1431,0x1431,0x1431,0x1431,0x142e,0x1428,0x1428,0x142e,0x142e,
+0x1437,0x1437,0x1431,0x1434,0x1434,0x142e,0x142b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,
+0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,
+0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x19e,0x19e,0x19e,0x19e,0x16f5,0x16f5,0x143a,0x143a,
+0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,
+0x19e,0x19e,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,
+0x1446,0x1446,0x1446,0x1446,0x1446,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x1a1,0x1a1,0x1a1,0x1a1,0x19c5,
+0x1446,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,
+0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x19c8,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1440,
+0x1440,0x1440,0x1440,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,0x1449,
+0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x146a,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,
+0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,
+0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,
+0x12c9,0x12c6,0x12c9,0x12a5,0x12c6,0x12cc,0x12cc,0x12cf,0x12cc,0x12cf,0x12d2,0x12c6,0x12cf,0x12cf,0x12c6,0x12c6,
+0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x1470,0x1479,0x1470,0x1479,0x1479,
+0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x147c,0x1473,0x19ce,0x1b3f,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,
+0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1ad,0x1ad,
+0x153f,0x153f,0x153f,0x153f,0x153f,0x1545,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,
+0x154b,0x154b,0x154b,0x154b,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1548,
+0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x2b5,0x1b8a,0x1b8a,0x1b8a,0x1b8a,
+0x16aa,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,
+0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x16a1,0x1b3,0x1b3,0x1b3,0x1b3,
+0x1a73,0x1b45,0x1b45,0x1b45,0x1b45,0x1b45,0x1b45,0x1b45,0x1b45,0x1b45,0x1b45,0x1b45,0x1b42,0x1b42,0x1b42,0x1b6,
+0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,
+0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,0x1b6,
+0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,
+0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x1b9,0x1b9,0x1b9,
+0x1b9,0x1b9,0x1b9,0x1b9,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x1b9,0x1b9,
+0x155a,0x1554,0x1557,0x1560,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1bc,0x1bc,0x1bc,0x1bc,
+0x1bc,0x1bc,0x1bc,0x1bc,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,
+0x154b,0x154b,0x154b,0x154b,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,
+0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1923,0x1923,0x1923,0x1923,0x1bf,0x1bf,0x1bf,
+0x1bf,0x1bf,0x1bf,0x1bf,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,0x1a25,
+0x1bf,0x1bf,0x1bf,0x1bf,0x1b9f,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,
+0x1bf,0x1bf,0x1bf,0x1bf,0x170a,0x16ad,0x156f,0x16b3,0x1c2,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,
+0x1578,0x1c2,0x1c2,0x1578,0x1578,0x1c2,0x1c2,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,
+0x1578,0x1578,0x1578,0x1578,0x1578,0x1c2,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1578,0x1c2,0x1578,0x1578,
+0x1c2,0x1578,0x1578,0x1578,0x1578,0x1578,0x1c2,0x19aa,0x16b0,0x1578,0x1569,0x156f,0x1569,0x156f,0x156f,0x156f,
+0x156f,0x1c2,0x1c2,0x156f,0x156f,0x1c2,0x1c2,0x1572,0x1572,0x1575,0x1c2,0x1c2,0x170d,0x1c2,0x1c2,0x1c2,
+0x1c2,0x1c2,0x1c2,0x1569,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x157b,0x1578,0x1578,0x1578,0x1578,0x156f,0x156f,
+0x1c2,0x1c2,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x1c2,0x1c2,0x1c2,0x156c,0x156c,0x156c,0x156c,
+0x156c,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1590,0x1590,0x1590,0x1590,
+0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1c5,0x1590,
+0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x158a,0x158a,0x158a,0x157e,
+0x157e,0x157e,0x158a,0x158a,0x157e,0x158d,0x1581,0x157e,0x1593,0x1593,0x1587,0x1593,0x1593,0x1584,0x17a3,0x1c5,
+0x15a2,0x15a2,0x15a2,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1599,0x159c,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,
+0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,
+0x1710,0x1710,0x1710,0x1710,0x15ae,0x15ab,0x19d1,0x19d1,0x1a79,0x1a7c,0x1a76,0x1a76,0x1cb,0x1cb,0x1cb,0x1cb,
+0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,
+0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,
+0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,
+0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,
+0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,
+0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,
+0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,0x1ce,
+0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,
+0x15c0,0x15c0,0x15c0,0x15b7,0x15ba,0x15bd,0x15c0,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,
+0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15c3,0x15c3,0x1d4,0x1d4,0x1d4,0x1d4,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,
+0x15cc,0x15cc,0x16b6,0x15cc,0x15cc,0x15cc,0x15c9,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,
+0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x1d7,0x1d7,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,
+0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,
+0x15db,0x15ed,0x15ed,0x15e1,0x15ea,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
+0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,
+0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,
+0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x15f3,0x1dd,
+0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x1dd,0x1dd,0x1dd,0x1dd,0x15f6,0x15f6,
+0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,
+0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15f9,0x1602,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,
+0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15fc,0x15ff,0x15ff,0x15ff,0x15ff,0x15ff,0x1e0,
+0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,
+0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1e3,
+0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,
+0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1611,0x1611,0x1611,0x1611,0x1611,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+0x162c,0x162c,0x162f,0x162f,0x1632,0x1623,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,
+0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1e9,0x1623,0x1623,0x1623,0x1623,0x1623,
+0x1623,0x1623,0x1e9,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,
+0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x162c,0x162c,0x162c,
+0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,
+0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,
+0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,
+0x1644,0x1644,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1641,0x1641,0x1641,0x1641,0x1ef,0x1ef,0x1ef,
+0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x1647,
+0x1659,0x1659,0x1647,0x1647,0x1647,0x1647,0x1f5,0x1f5,0x1659,0x1659,0x165c,0x165c,0x1647,0x1647,0x1659,0x164d,
+0x164a,0x1650,0x1662,0x1662,0x1653,0x1653,0x1656,0x1656,0x1656,0x1662,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,
+0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1716,0x1716,0x1716,0x1716,0x1713,0x1713,0x1f5,0x1f5,
+0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,
+0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,
+0x1f8,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,
+0x1665,0x1665,0x1665,0x1665,0x1665,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,0x1f8,
+0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1fb,0x1fb,0x1fb,0x1fb,
+0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,
+0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,
+0x1668,0x1668,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,
+0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,
+0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1fb,0x1fb,0x1a7f,0x1a7f,0x1fb,0x1fb,
+0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,
+0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,0x1fb,
+0x166b,0x167a,0x1671,0x166e,0x1680,0x1680,0x1674,0x1680,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,
+0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1677,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,
+0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1683,0x1683,0x1683,0x1683,0x1683,0x1683,
+0x1683,0x1683,0x1683,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x201,0x168c,
+0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,
+0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x172e,0x1926,0x204,0x204,0x171c,0x171c,0x171c,
+0x1728,0x1728,0x171c,0x171c,0x171c,0x171c,0x172b,0x171c,0x171c,0x171c,0x171c,0x171f,0x204,0x204,0x204,0x204,
+0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1722,0x1722,0x1731,0x1731,0x1731,0x1722,
+0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,
0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,
-0x16da,0x16e9,0x16e0,0x16dd,0x16ef,0x16ef,0x16e3,0x16ef,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,
-0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x16e6,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,
-0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,0x16f2,
-0x16f2,0x16f2,0x16f2,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x16fb,
-0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,
-0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x1797,0x198f,0x210,0x210,0x1788,0x1788,0x1788,
-0x1794,0x1794,0x1788,0x1788,0x1788,0x1788,0x1794,0x1788,0x1788,0x1788,0x1788,0x178b,0x210,0x210,0x210,0x210,
-0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x1791,0x178e,0x178e,0x179a,0x179a,0x179a,0x178e,
-0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,
-0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,
-0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,
-0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x219,0x17af,0x17af,0x219,0x219,
-0x219,0x219,0x219,0x17ac,0x17ac,0x17ac,0x17ac,0x17ac,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x21c,
-0x17b2,0x21c,0x17b2,0x17b2,0x17b2,0x17b2,0x21c,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,
-0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x21c,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,
-0x17b2,0x17b5,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,
-0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,
-0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x21f,0x21f,0x21f,0x21f,0x21f,
-0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,
-0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x21f,0x21f,0x21f,0x21f,0x21f,
-0x21f,0x21f,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,
-0x1929,0x1929,0x1929,0x1929,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a94,0x1b3c,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1b3f,
-0x1b3c,0x222,0x1a0a,0x1a94,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x17df,0x1a0a,0x1a0a,0x1a94,0x1a94,0x1a94,0x1a94,0x1a94,
-0x1a94,0x1a94,0x1a94,0x1b3c,0x222,0x1a97,0x1a97,0x1a97,0x1929,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,
-0x192c,0x192c,0x192c,0x192c,0x192c,0x192c,0x1929,0x1929,0x17c4,0x17c4,0x17c4,0x17c4,0x17c1,0x17c4,0x17c4,0x17c7,
-0x17ca,0x17c7,0x17c7,0x17c4,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,
-0x225,0x225,0x225,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x1821,0x1821,0x1821,0x1821,0x1818,0x1818,0x1818,0x1812,
-0x1815,0x1815,0x1815,0x1a40,0x228,0x228,0x228,0x228,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,0x181e,
-0x181e,0x181e,0x228,0x228,0x228,0x228,0x181b,0x181b,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,
-0x183c,0x22b,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,
-0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x183c,0x1839,0x1827,0x1827,0x1827,0x1827,
-0x1827,0x1827,0x1827,0x22b,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x1839,0x182a,0x183c,0x183f,0x183f,0x1833,
-0x1830,0x1830,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x1836,0x1836,0x1836,0x1836,
-0x1836,0x1836,0x1836,0x1836,0x1836,0x1836,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,
-0x182d,0x182d,0x182d,0x182d,0x182d,0x22b,0x22b,0x22b,0x184b,0x184e,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,
-0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,0x1842,
-0x1842,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,
-0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x231,
-0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,0x1845,
-0x1845,0x231,0x231,0x1845,0x1845,0x1845,0x1845,0x1845,0x1893,0x192f,0x1a9a,0x1a9d,0x1b45,0x234,0x234,0x234,
-0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1b42,0x1b42,0x234,0x234,0x234,0x234,0x234,0x234,
-0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,
-0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x1854,0x237,0x237,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,
-0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,0x237,0x1851,0x1848,0x1848,0x1848,0x1848,0x1848,0x1848,
-0x1848,0x1851,0x1848,0x1848,0x1851,0x1848,0x1848,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,
-0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x1857,0x23a,0x23a,0x23a,
-0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,
-0x186f,0x186f,0x1860,0x185a,0x185a,0x186f,0x185d,0x1872,0x1872,0x1872,0x1872,0x1875,0x1875,0x1869,0x1866,0x1863,
-0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x1aee,0x1869,0x23d,0x1863,0x1992,0x1a43,
-0x1af1,0x1af1,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,
-0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,
-0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,0x187b,
-0x187b,0x187b,0x187b,0x187b,0x240,0x240,0x240,0x240,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,
-0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,0x1878,
-0x1878,0x1878,0x1878,0x1878,0x240,0x240,0x240,0x240,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,
-0x1896,0x1896,0x1896,0x1896,0x1896,0x1a13,0x1a13,0x1a13,0x1a13,0x1a13,0x1aa0,0x1aa0,0x1aa0,0x1aa0,0x1aa0,0x1aa0,
-0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,
-0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,
-0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x1935,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,
-0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,
-0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x249,
-0x18d5,0x18d5,0x249,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,
-0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18d5,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x249,
-0x249,0x249,0x18c9,0x249,0x18c9,0x18c9,0x249,0x18c9,0x18c9,0x18c9,0x18cc,0x18c9,0x18cf,0x18cf,0x18d8,0x18c9,
-0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,0x18d2,
-0x18d2,0x18d2,0x249,0x249,0x249,0x249,0x249,0x249,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,
-0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,
-0x1938,0x1938,0x1938,0x1938,0x24c,0x24c,0x24c,0x24c,0x1905,0x1908,0x1917,0x1917,0x1908,0x190b,0x1905,0x1902,
-0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x18f0,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18ed,
-0x18ed,0x18db,0x18db,0x18db,0x18f0,0x18f0,0x18f0,0x18f0,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,
-0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x258,0x258,0x258,0x258,
-0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,
-0x1998,0x1998,0x1998,0x1998,0x1998,0x1998,0x258,0x258,0x1aa9,0x1aa9,0x1aa9,0x1aa9,0x1b4b,0x28b,0x28b,0x28b,
-0x1aa9,0x1aa9,0x1aa9,0x28b,0x28b,0x28b,0x28b,0x28b,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,
-0x19aa,0x19aa,0x19aa,0x19aa,0x19a7,0x19a7,0x19a7,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,0x199b,
-0x19a7,0x19a1,0x199e,0x19a4,0x25b,0x25b,0x25b,0x25b,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,
-0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,0x19ad,
-0x19ad,0x19ad,0x19ad,0x25e,0x25e,0x19ad,0x19ad,0x19ad,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x261,0x19bc,
-0x19bc,0x261,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,
-0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19bc,0x19b9,0x19b9,0x19b9,0x19b9,0x19b9,0x261,
-0x19b0,0x19b0,0x261,0x19b9,0x19b9,0x19b0,0x19b9,0x19b3,0x19bc,0x261,0x261,0x261,0x261,0x261,0x261,0x261,
-0x19c5,0x19c5,0x19c8,0x19c8,0x19bf,0x19bf,0x19bf,0x19bf,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,
-0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x19c2,0x264,0x264,0x264,0x264,0x264,0x264,
-0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19ce,0x19cb,0x19cb,0x19cb,
-0x19ce,0x19cb,0x19cb,0x19cb,0x19cb,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,
-0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,0x19d7,
-0x19d7,0x19d7,0x19d7,0x19d1,0x19d1,0x19d4,0x19d4,0x19da,0x19da,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,
-0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,
-0x19dd,0x19dd,0x19dd,0x19dd,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,
-0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,
-0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e0,0x19e3,0x19ec,0x19e0,0x19e0,0x270,0x270,0x270,0x270,0x270,
-0x19ef,0x19ef,0x19ef,0x19ef,0x19ef,0x19ef,0x19ef,0x19f2,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,
-0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,
-0x19fb,0x19fb,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f5,0x19f8,0x19f8,0x19f8,
-0x19f8,0x19fe,0x19fe,0x19fe,0x19fe,0x19fe,0x276,0x276,0x276,0x276,0x276,0x276,0x1a55,0x1a55,0x1a55,0x1a55,
-0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,0x1a55,
-0x1a55,0x1a55,0x1a55,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x1a64,0x1a64,0x1a64,0x1a64,
-0x1a64,0x1a64,0x1a64,0x1a64,0x27f,0x27f,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,
-0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a64,0x1a61,0x1a61,0x1a61,
-0x1a58,0x1a58,0x1a58,0x1a58,0x27f,0x27f,0x1a58,0x1a58,0x1a61,0x1a61,0x1a61,0x1a61,0x1a5b,0x1a64,0x1a5e,0x1a64,
-0x1a61,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,
-0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x1a70,0x1a70,0x1a70,0x1a70,
-0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x282,0x282,0x282,0x1a67,0x1a67,0x1a67,0x1a67,
-0x1a67,0x1a67,0x1a67,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a73,0x1a73,0x282,0x282,0x285,0x1a76,0x1a76,0x1a76,
-0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,
-0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x1a76,0x285,0x285,
-0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,
-0x1aa3,0x1aa3,0x1aa3,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,
-0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x1938,0x1938,0x1938,0x1938,
-0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1aa9,0x1aa9,0x1aa9,0x1b4b,
-0x1b4b,0x1b4b,0x1b4b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x1aa9,0x1aa9,0x1aa9,0x1aa9,
-0x1aa9,0x1aa9,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x28b,0x28b,0x28b,
-0x28b,0x28b,0x28b,0x28b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x28b,0x28b,0x28b,0x28b,0x28b,
-0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x28b,
+0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,
+0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x20d,0x1746,0x1746,0x20d,0x20d,
+0x20d,0x20d,0x20d,0x1743,0x1743,0x1743,0x1743,0x1743,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x210,
+0x1749,0x210,0x1749,0x1749,0x1749,0x1749,0x210,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,
+0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x210,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,0x1749,
+0x1749,0x174c,0x210,0x210,0x210,0x210,0x210,0x210,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,
+0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,
+0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x213,0x213,0x213,0x213,0x213,
+0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,
+0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x213,0x213,0x213,0x213,0x213,
+0x213,0x213,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x175b,0x175b,0x175b,0x175b,0x1758,0x175b,0x175b,0x175e,
+0x1761,0x175e,0x175e,0x175b,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,
+0x216,0x216,0x216,0x1758,0x1758,0x1758,0x1758,0x1758,0x17b8,0x17b8,0x17b8,0x17b8,0x17af,0x17af,0x17af,0x17a9,
+0x17ac,0x17ac,0x17ac,0x19d4,0x219,0x219,0x219,0x219,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,
+0x17b5,0x17b5,0x219,0x219,0x219,0x219,0x17b2,0x17b2,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,
+0x17d3,0x21c,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,
+0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x17d0,0x17be,0x17be,0x17be,0x17be,
+0x17be,0x17be,0x17be,0x21c,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17d0,0x17c1,0x17d3,0x17d6,0x17d6,0x17ca,
+0x17c7,0x17c7,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x17cd,0x17cd,0x17cd,0x17cd,
+0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,
+0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x21c,0x21c,0x21c,0x17e2,0x17e5,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,
+0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,
+0x17d9,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x21f,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,
+0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x222,
+0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,
+0x17dc,0x222,0x222,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x182a,0x18c6,0x1a2e,0x1a31,0x1ad9,0x225,0x225,0x225,
+0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x1ad6,0x1ad6,0x225,0x225,0x225,0x225,0x225,0x225,
+0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,
+0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x228,0x228,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,
+0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x228,0x17e8,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,
+0x17df,0x17e8,0x17df,0x17df,0x17e8,0x17df,0x17df,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,0x228,
+0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x17ee,0x22b,0x22b,0x22b,
+0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,
+0x1806,0x1806,0x17f7,0x17f1,0x17f1,0x1806,0x17f4,0x1809,0x1809,0x1809,0x1809,0x180c,0x180c,0x1800,0x17fd,0x17fa,
+0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1a82,0x1800,0x22e,0x17fa,0x1929,0x19d7,
+0x1a85,0x1a85,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,
+0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,
+0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
+0x1812,0x1812,0x1812,0x1812,0x231,0x231,0x231,0x231,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,
+0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,
+0x180f,0x180f,0x180f,0x180f,0x231,0x231,0x231,0x231,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,
+0x182d,0x182d,0x182d,0x182d,0x182d,0x19a7,0x19a7,0x19a7,0x19a7,0x19a7,0x1a34,0x1a34,0x1a34,0x1a34,0x1a34,0x1a34,
+0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1ba8,0x1ba8,0x1ba8,0x237,0x237,0x237,0x237,0x237,
+0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,
+0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x23a,
+0x186c,0x186c,0x23a,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,
+0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x186c,0x1860,0x1860,0x1860,0x1860,0x1860,0x1860,0x23a,
+0x23a,0x23a,0x1860,0x23a,0x1860,0x1860,0x23a,0x1860,0x1860,0x1860,0x1863,0x1860,0x1866,0x1866,0x186f,0x1860,
+0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,0x1869,
+0x1869,0x1869,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,
+0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,
+0x18cf,0x18cf,0x18cf,0x18cf,0x23d,0x23d,0x23d,0x23d,0x187e,0x1881,0x1881,0x240,0x240,0x240,0x240,0x240,
+0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x1b84,0x1b84,0x1b84,0x1b84,0x1b84,0x1b84,0x1b84,0x1b84,
+0x1b84,0x1b84,0x1b84,0x1b84,0x1b84,0x1b84,0x1b84,0x1b84,0x1890,0x1890,0x1890,0x1890,0x1890,0x1890,0x1890,0x1890,
+0x1890,0x1890,0x1890,0x243,0x243,0x243,0x243,0x243,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,
+0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x189c,0x189f,0x18ae,0x18ae,0x189f,0x18a2,0x189c,0x1899,
+0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x1887,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1884,
+0x1884,0x1872,0x1872,0x1872,0x1887,0x1887,0x1887,0x1887,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,
+0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x249,0x249,0x249,0x249,
+0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x192f,0x192f,0x192f,0x192f,0x192f,0x192f,0x192f,0x192f,
+0x192f,0x192f,0x192f,0x192f,0x192f,0x192f,0x249,0x249,0x1a3d,0x1a3d,0x1a3d,0x1a3d,0x1adf,0x27c,0x27c,0x27c,
+0x1a3d,0x1a3d,0x1a3d,0x1bab,0x1bab,0x27c,0x27c,0x27c,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,
+0x1941,0x1941,0x1941,0x1941,0x193e,0x193e,0x193e,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,
+0x193e,0x1938,0x1935,0x193b,0x24c,0x24c,0x24c,0x24c,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,
+0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,0x1944,
+0x1944,0x1944,0x1944,0x24f,0x24f,0x1944,0x1944,0x1944,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x252,0x1953,
+0x1953,0x252,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,
+0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1953,0x1950,0x1950,0x1950,0x1950,0x1950,0x252,
+0x1947,0x1947,0x252,0x1950,0x1950,0x1947,0x1950,0x194a,0x1953,0x252,0x252,0x252,0x252,0x252,0x252,0x252,
+0x195c,0x195c,0x195f,0x195f,0x1956,0x1956,0x1956,0x1956,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,
+0x1959,0x1959,0x1959,0x1959,0x1959,0x1959,0x1959,0x1959,0x1959,0x1959,0x255,0x255,0x255,0x255,0x255,0x255,
+0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1965,0x1962,0x1962,0x1962,
+0x1965,0x1962,0x1962,0x1962,0x1962,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,
+0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,0x196e,
+0x196e,0x196e,0x196e,0x1968,0x1968,0x196b,0x196b,0x1971,0x1971,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,
+0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,0x1974,
+0x1974,0x1974,0x1974,0x1974,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,
+0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,
+0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x197a,0x1983,0x1977,0x1977,0x261,0x261,0x261,0x261,0x261,
+0x1986,0x1986,0x1986,0x1986,0x1986,0x1986,0x1986,0x1989,0x264,0x264,0x264,0x264,0x264,0x264,0x264,0x264,
+0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,0x1992,
+0x1992,0x1992,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198c,0x198f,0x198f,0x198f,
+0x198f,0x1995,0x1995,0x1995,0x1995,0x1995,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,
+0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x267,0x1b72,0x1b72,0x1b72,0x1b72,0x1b72,0x1b72,0x1b72,0x1b72,
+0x1b72,0x1b72,0x1b72,0x1b72,0x1b72,0x1b72,0x1b72,0x1b72,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,
+0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x26d,
+0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x26d,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,
+0x270,0x270,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,
+0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f8,0x19f5,0x19f5,0x19f5,0x19ec,0x19ec,0x19ec,0x19ec,
+0x270,0x270,0x19ec,0x19ec,0x19f5,0x19f5,0x19f5,0x19f5,0x19ef,0x19f8,0x19f2,0x19f8,0x19f5,0x270,0x270,0x270,
+0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,
+0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,
+0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x273,0x273,0x273,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x19fb,0x1a04,
+0x1a04,0x1a04,0x1a04,0x1a04,0x1a07,0x1a07,0x273,0x273,0x276,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,
+0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,
+0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x276,0x276,0x279,0x279,0x279,0x279,
+0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x1a37,0x1a37,0x1a37,0x279,
+0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x1a3a,0x1a3a,0x1a3a,0x1a3a,
+0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x279,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,
+0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x1a3d,0x1a3d,0x1a3d,0x1adf,0x1adf,0x1adf,0x1adf,0x27c,
+0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x1a3d,0x1a3d,0x1a3d,0x1a3d,0x1a3d,0x1a3d,0x1adf,0x1adf,
+0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1bab,0x1bab,0x1bab,0x1bab,0x27c,0x27c,0x27c,
+0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1bab,0x1bab,0x1bab,0x1bab,0x27c,0x27c,0x27c,0x27c,0x27c,
+0x1adf,0x1adf,0x1adf,0x1bae,0x1bae,0x1bae,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,
+0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1adf,0x1bab,0x1bab,0x1bab,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,
+0x1bab,0x1bab,0x1bab,0x1bab,0x1bab,0x1bab,0x1bab,0x1bab,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,
+0x1bae,0x1bae,0x1bae,0x1bae,0x1bae,0x1bae,0x1bae,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,0x27c,
+0x1a13,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,
+0x1a0d,0x1a0d,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x27f,0x1a10,
+0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a16,0x1a16,0x1a16,0x1a16,
+0x1a1c,0x1a1c,0x1a1c,0x1a1c,0x1a1c,0x1a1c,0x1a1c,0x1a1c,0x1a1c,0x1a1c,0x282,0x282,0x282,0x282,0x282,0x1a19,
+0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x285,0x285,0x285,0x285,
+0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,0x285,
+0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x288,0x288,0x1aa6,0x288,0x288,0x1aa6,0x1aa6,0x1aa6,0x1aa6,
+0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x288,0x1aa6,0x1aa6,0x288,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,
+0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1aa6,0x1a8e,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x1a9d,0x288,0x1a9d,
+0x1aa0,0x288,0x288,0x1a8e,0x1a8e,0x1aa3,0x1a94,0x1aa9,0x1a9d,0x1aa9,0x1a9d,0x1a91,0x1aac,0x1a97,0x1aac,0x288,
+0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x288,0x1a9a,0x1a9a,0x1a9a,0x1a9a,0x1a9a,0x1a9a,0x1a9a,0x1a9a,
+0x1a9a,0x1a9a,0x288,0x288,0x288,0x288,0x288,0x288,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,
+0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x28b,0x28b,
0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,
0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,0x28b,
-0x1a7f,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,
-0x1a79,0x1a79,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x28e,0x1a7c,
-0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a82,0x1a82,0x1a82,0x1a82,
-0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x1a88,0x291,0x291,0x291,0x291,0x291,0x1a85,
-0x1af7,0x1af7,0x1af7,0x1af7,0x1af7,0x1af4,0x1af4,0x1af4,0x1af4,0x1af4,0x1af4,0x1af4,0x294,0x294,0x294,0x294,
+0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,
+0x1ab2,0x1ab2,0x1ab2,0x291,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,
+0x1ab2,0x1ab2,0x1ab2,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,
+0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x291,0x1ab5,0x1ab5,0x1ab5,0x1ab5,0x1ab5,0x1ab5,0x1ab5,0x1ab5,
+0x1ab5,0x1ab5,0x291,0x291,0x291,0x291,0x291,0x291,0x1ae8,0x1ae8,0x1ae8,0x1ae8,0x1ae8,0x1ae8,0x1ae8,0x1ae8,
+0x1ae8,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,
0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,0x294,
-0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x297,0x297,0x1b12,0x297,0x297,0x1b12,0x1b12,0x1b12,0x1b12,
-0x1b12,0x1b12,0x1b12,0x1b12,0x297,0x1b12,0x1b12,0x297,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,
-0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1b12,0x1afa,0x1b09,0x1b09,0x1b09,0x1b09,0x1b09,0x297,0x1b09,
-0x1b0c,0x297,0x297,0x1afa,0x1afa,0x1b0f,0x1b00,0x1b15,0x1b09,0x1b15,0x1b09,0x1afd,0x1b18,0x1b03,0x1b18,0x297,
-0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x1b06,0x1b06,0x1b06,0x1b06,0x1b06,0x1b06,0x1b06,0x1b06,
-0x1b06,0x1b06,0x297,0x297,0x297,0x297,0x297,0x297,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,
-0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x29a,0x29a,
-0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
-0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,
-0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,
-0x1b1e,0x1b1e,0x1b1e,0x2a0,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,
-0x1b1e,0x1b1e,0x1b1e,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,
-0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x1b21,0x1b21,0x1b21,0x1b21,0x1b21,0x1b21,0x1b21,0x1b21,
-0x1b21,0x1b21,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x1b54,0x1b54,0x1b54,0x1b54,0x1b54,0x1b54,0x1b54,0x1b54,
-0x1b54,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,
-0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,0x2a3,
-0x2a3,0x2a3,0x2a3,0x2a3,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x2a6,0x1b24,
-0x1b24,0x1b27,0x2a6,0x2a6,0x1b2a,0x1b2a,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,0x2a6,
-0x2a6,0x2a6,0x2a6,0x2a6,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
-0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
-0x2a9,0x2a9,0x2a9,0x2a9,0x1932,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,
-0x2c1,0x2c1,0x2c1,0x2c1,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
+0x294,0x294,0x294,0x294,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x297,0x1ab8,
+0x1ab8,0x1abb,0x297,0x297,0x1abe,0x1abe,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,
+0x297,0x297,0x297,0x297,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b4e,0x1b51,0x1b51,0x1b51,
+0x1b51,0x1b51,0x1b51,0x29a,0x1b54,0x1b54,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x1b4b,0x1b4b,0x1b4b,0x1b4b,
+0x1b4b,0x1b4b,0x1b4b,0x1b4b,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,
+0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b57,0x1b57,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,0x29d,
+0x29d,0x29d,0x29d,0x29d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x2a0,0x1b5d,0x1b5d,0x1b5d,0x1b5d,
+0x2a0,0x1b5d,0x1b5d,0x2a0,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,0x1b5d,
+0x1b5d,0x1b5d,0x1b5d,0x2a0,0x1b60,0x1b66,0x1b66,0x1b63,0x1b63,0x1b63,0x2a6,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,
+0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,
+0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x2a6,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x1b63,0x2a6,
+0x2a6,0x2a6,0x2a6,0x2a6,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b6c,0x1b69,
+0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,0x1b69,
+0x1b69,0x1b69,0x1b69,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
-0x2a9,0x2a9,0x97b,0x97b,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x2c4,
-0x2c4,0x2c4,0x2c4,0x2c4,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,0x2a9,
-0x2a9,0x2a9,0x2a9,0x2a9,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x1a04,
-0x1a04,0x1a04,0x1a04,0x1a04,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,0x1b33,
-0x1b33,0x2ac,0x2ac,0x2ac,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0x12e4,
-0x12e4,0x12e4,0x2af,0x2af,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
-0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0x2af,0x2af,
-0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,
-0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,0x2af,
-0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
-0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x2b2,0x2b2,
-0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,
-0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0x2b5,0x2b5,
-0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,
-0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,
-0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,
-0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x2bb,0x2bb,
-0x17dc,0x17dc,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,
-0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,
-0x3cc,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3c0,0x3cc,0x3cc,0x3cc,0x3cc,0x3c6,0x1158,0x133e,
-0x3cf,0x945,0x948,0x3bd,0x3bd,0x1155,0x133b,0x133b,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,
-0x1155,0x3c0,0x3c0,0x3cc,0xce1,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,
-0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,
-0x3cf,0x3cf,0x3c0,0x3c0,0x8d0,0x8d3,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,0x963,
-0x3c9,0xfba,0xfb7,0x1341,0x1341,0x1341,0x1341,0x1341,0x1506,0x115b,0x115b,0xf0c,0xf0c,0xdda,0xf0c,0xf0c,
-0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3d2,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,
-0x3cf,0x3d2,0x3cf,0x3cf,0x3d2,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x133b,0x133e,0x3c3,0x3cf,0x3cc,0x3cc,
-0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1347,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,
-0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1347,0x18ae,0x18ae,0xfd8,0x45f,0x468,
-0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,
-0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0x4aa,0xbc7,0xbc7,0xde6,0xde6,0x8d6,0xde9,0x1428,0x1428,0x1428,
-0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
-0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,
-0x4b3,0x4b3,0x4b3,0x1170,0x1170,0x1170,0x1170,0x1170,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,
-0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,
-0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x116d,0x116d,0x116d,0x116d,0x116d,0x116d,
-0x4b6,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,
-0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,0x4b3,
-0x4b3,0x4b3,0x4b3,0x4b3,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,
-0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,
-0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4bc,0x9bd,0x1005,0x1005,0x1008,0x1005,
-0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,
-0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x4bf,0x4b9,0x1008,0x1005,0x1008,0x1005,0x1008,0x1005,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,
-0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,
-0x6ae,0x6ae,0x6b1,0x4e9,0x6bd,0x6ba,0x6ba,0x6b7,0x513,0x513,0x4d1,0x4d1,0x4d1,0x4d1,0x4d1,0xb58,
-0x6c0,0x4f5,0x6d8,0x6db,0x50a,0x6c0,0x4f8,0x4f8,0x4e9,0x504,0x504,0x6ae,0x510,0x50d,0x6b4,0x4e3,
-0x4da,0x4da,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0x4e0,0x4dd,0x4dd,0x4dd,0x4d4,0x51c,0x519,0x516,0x516,
-0x6cc,0x4fe,0x4fb,0x6c9,0x6c6,0x6c3,0x6d5,0x4ec,0x6d2,0x6d2,0x501,0x504,0x6cf,0x6cf,0x501,0x504,
-0x4e6,0x4e9,0x4e9,0x4e9,0x507,0x4f2,0x4ef,0xbdc,0xaf2,0xaf5,0xaef,0xaef,0xaef,0xaef,0xbd3,0xbd3,
-0xbd3,0xbd3,0xbd9,0xd0e,0xd0b,0xdf5,0xdf8,0xbd6,0xdf8,0xdf8,0xdf8,0xdf8,0xdf5,0xdf8,0xdf8,0xbd0,
-0x540,0x540,0x540,0x540,0x540,0x540,0x540,0x53d,0x543,0x75c,0x540,0x9c0,0x9e1,0xaf8,0xaf8,0xaf8,
-0xbe2,0xbe2,0xdfe,0xdfe,0xdfe,0xdfe,0x1179,0x117c,0x117c,0x135c,0x14f4,0x151e,0x1521,0x1521,0x1734,0x18b1,
-0x54f,0x54f,0x567,0x6ea,0x54c,0x6e7,0x54f,0x564,0x54c,0x6ea,0x55e,0x567,0x567,0x567,0x55e,0x55e,
-0x567,0x567,0x567,0x6f3,0x54c,0x567,0x6ed,0x54c,0x55b,0x567,0x567,0x567,0x567,0x567,0x54c,0x54c,
-0x552,0x6e7,0x6f0,0x54c,0x567,0x54c,0x6f6,0x54c,0x567,0x555,0x56d,0x6f9,0x567,0x567,0x558,0x55e,
-0x567,0x567,0x56a,0x567,0x55e,0x561,0x561,0x561,0x561,0xb04,0xb01,0xd11,0xe07,0xbf7,0xbfa,0xbfa,
-0xbf4,0xbf1,0xbf1,0xbf1,0xbf1,0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xbee,0xbf1,0xe04,0xf18,0xf1b,0x100e,
-0x117f,0x117f,0x117f,0x6ff,0x6fc,0x570,0x573,0x573,0x573,0x573,0x573,0x6fc,0x6ff,0x6ff,0x6fc,0x573,
-0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x57c,0x57c,0x57c,0x57c,
-0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x576,0x576,0x576,0x576,0x576,0x576,
-0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x57f,0x588,0x588,0x582,0x582,0x582,0x585,0x57f,
-0x582,0x582,0x57f,0x57f,0x57f,0x57f,0x582,0x582,0x708,0x708,0x57f,0x57f,0x582,0x582,0x582,0x582,
-0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x585,0x585,0x585,0x582,0x582,0x70b,0x582,
-0x70b,0x582,0x582,0x582,0x582,0x582,0x582,0x582,0x57f,0x582,0x57f,0x57f,0x57f,0x57f,0x57f,0x57f,
-0x582,0x582,0x57f,0x708,0x57f,0x57f,0x57f,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,
-0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0xbfd,0x711,0x58b,0x711,0x711,
-0x58e,0x58b,0x58b,0x711,0x711,0x58e,0x58b,0x711,0x58e,0x58b,0x58b,0x711,0x58b,0x711,0x59a,0x597,
-0x58b,0x711,0x58b,0x58b,0x58b,0x58b,0x711,0x58b,0x58b,0x711,0x711,0x711,0x711,0x58b,0x58b,0x711,
-0x58e,0x711,0x58e,0x711,0x711,0x711,0x711,0x711,0x717,0x591,0x711,0x591,0x591,0x58b,0x58b,0x58b,
-0x711,0x711,0x711,0x711,0x58b,0x58b,0x58b,0x58b,0x711,0x711,0x58b,0x58b,0x58b,0x58e,0x58b,0x58b,
-0x58e,0x58b,0x58b,0x58e,0x711,0x58e,0x58b,0x58b,0x711,0x58b,0x58b,0x58b,0x58b,0x58b,0x711,0x58b,
-0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x714,0x711,0x58e,0x58b,
-0x711,0x711,0x711,0x711,0x58b,0x58b,0x711,0x711,0x58b,0x58e,0x714,0x714,0x58e,0x58e,0x58b,0x58b,
-0x58e,0x58e,0x58b,0x58b,0x58e,0x58e,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58e,0x58e,0x711,0x711,
-0x58e,0x58e,0x711,0x711,0x58e,0x58e,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,
-0x58b,0x711,0x58b,0x58b,0x58b,0x711,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x711,0x58b,0x58b,
-0x58b,0x58b,0x58b,0x58b,0x58e,0x58e,0x58e,0x58e,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,
-0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x711,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,
-0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,
-0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58e,0x58e,0x58e,0x58e,0x58b,0x58b,0x58b,0x58b,
-0x58b,0x58b,0x58e,0x58e,0x58e,0x58e,0x58b,0x594,0x58b,0x58b,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,
-0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0x59d,0xb0d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,
-0x5a9,0x5a6,0x5a9,0x5a6,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x71a,0x59d,0x59d,0x59d,0x59d,0x59d,
-0x59d,0x59d,0x81f,0x81f,0x59d,0x59d,0x59d,0x59d,0x5a3,0x5a3,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,
-0x5a0,0x825,0x822,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,
-0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,
-0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0x59d,0xb0d,0xc06,0xb0d,0xb0d,0xb0d,0x5ac,0x5ac,0x5ac,0x5ac,
-0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,
-0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x723,0x723,0x723,0x723,
-0x723,0x723,0x723,0x723,0x723,0x723,0x5b2,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,
-0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xc6f,0xd89,0x72c,0x72c,0x72c,0x72c,
-0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,
-0x5b5,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x5b8,0x72c,0x72c,0x72c,0x72c,
-0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x5b8,0x5b8,0x5b8,0x5b8,0x72c,0x72c,0x72c,0x72c,
-0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72f,0x72f,0x72f,0x72f,
-0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x72f,0x5bb,0x5bb,0x72f,0x72f,
-0x72f,0x72f,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0x735,0x735,0x5be,0x732,
-0x732,0x732,0x732,0x732,0x732,0x732,0x5c1,0x5c1,0x5be,0x5be,0x5c4,0x5c4,0x5c4,0x5c4,0x735,0x735,
-0x5c4,0x5c4,0x738,0x735,0x5be,0x5be,0x5be,0x5be,0x735,0x735,0x5c4,0x5c4,0x738,0x735,0x5be,0x5be,
-0x5be,0x5be,0x735,0x735,0x732,0x5be,0x5c4,0x735,0x5be,0x5be,0x732,0x735,0x735,0x735,0x5c4,0x5c4,
-0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x735,0x732,
-0x735,0x732,0x5be,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5be,0x5be,0x732,0xb16,0xb16,0xb16,0xb16,
-0xb16,0xb16,0xb16,0xb16,0xc0c,0xc0c,0xc0c,0xc0f,0xc0f,0xc8a,0xc8a,0xc0c,0x5d3,0x5d3,0x5d3,0x5d3,
-0x5d0,0x74a,0x747,0x5ca,0x5ca,0x73b,0x5ca,0x5ca,0x5ca,0x5ca,0x741,0x73b,0x5ca,0x5d0,0x5ca,0x5c7,
-0xd92,0xd92,0xc15,0xc15,0xe13,0xb19,0x5cd,0x5cd,0x73e,0x5d6,0x73e,0x5cd,0x5d0,0x5ca,0x5d0,0x5d0,
-0x5ca,0x5ca,0x5d0,0x5ca,0x5ca,0x5ca,0x5d0,0x5ca,0x5ca,0x5ca,0x5d0,0x5d0,0x5ca,0x5ca,0x5ca,0x5ca,
-0x5ca,0x5ca,0x5ca,0x5ca,0x5d0,0x5d3,0x5d3,0x5cd,0x5ca,0x5ca,0x5ca,0x5ca,0x74d,0x5ca,0x74d,0x5ca,
-0x5ca,0x5ca,0x5ca,0x5ca,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,0x828,
-0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5d0,0x74d,0x74a,0x5d9,0x74d,
-0x73b,0x741,0x5d0,0x73b,0x744,0x73b,0x73b,0x5ca,0x73b,0x74a,0x5d9,0x74a,0xb19,0xb19,0xc18,0xc18,
-0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc1b,0xc18,0xc18,0xe10,0xec7,0x5dc,0x5dc,0x5dc,0x5dc,
-0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,0x5dc,
-0x5df,0x13e6,0x13e6,0x13e6,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x152a,0x5eb,0x5f4,0x5eb,
-0x5eb,0x13e6,0x5df,0x5df,0x5f4,0x5f4,0x13e9,0x13e9,0x5f7,0x5f7,0x5e8,0x5ee,0x5e8,0x5e8,0x5ee,0x5df,
-0x5ee,0x5df,0x5ee,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5ee,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
-0x13e6,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5ee,0x5ee,0x5df,0x5df,0x5df,
-0x5df,0x5df,0x5df,0x5df,0x5df,0x753,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5ee,0x5df,0x5df,0x5ee,
-0x5df,0x5df,0x5df,0x5df,0x13e6,0x5df,0x13e6,0x5df,0x5df,0x5df,0x5df,0x13e6,0x13e6,0x13e6,0x5df,0x12de,
-0x5df,0x5df,0x5df,0x5e5,0x5e5,0x5e5,0x5e5,0x1368,0x1368,0x5df,0x5e2,0x5f1,0x5f4,0x5e8,0x5e8,0x5e8,
-0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0xc21,0xc1e,0x750,0x750,
-0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x5df,0x5ee,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
-0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x13e6,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,
-0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x5df,0x13e6,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
-0x618,0x618,0x618,0x618,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x621,0x621,0x621,0x621,
-0x621,0x621,0x621,0x621,0x618,0x61e,0x60f,0x612,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
-0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
-0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x615,0x615,0x615,0x615,0x615,0x615,0x618,0x618,0x618,0x618,
-0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
-0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,
-0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,
-0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,
-0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61b,0x621,0x61e,0x618,
-0x61b,0x621,0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61e,0x618,
-0x61b,0x621,0x61e,0x618,0x61e,0x618,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,
-0x136b,0x136b,0x136b,0x136b,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61b,0x621,0x61b,0x621,0x61e,0x618,
-0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61e,0x618,0x61b,0x61e,0x618,0x61b,
-0x61e,0x618,0x61b,0x621,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
-0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,
-0x61b,0x61b,0x61b,0x61b,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
-0x61e,0x61e,0x61e,0x61e,0x61e,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
-0x618,0x618,0x618,0x618,0x61b,0x61b,0x618,0x61b,0x618,0x61b,0x618,0x618,0x61b,0x618,0x618,0x61b,
-0x618,0x61b,0x618,0x618,0x61b,0x618,0x61b,0x61b,0x618,0x618,0x618,0x61b,0x618,0x618,0x618,0x618,
-0x618,0x61b,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,
-0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x618,0x61b,0x61b,0x618,0x618,0x61b,0x618,0x61b,0x618,
-0x618,0x618,0x618,0x618,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,
-0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,
-0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x61b,0x621,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
-0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,
-0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,
-0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x61e,0x61e,0x61e,
-0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x61e,0x624,0x624,0x624,0x624,0x101a,0x101a,0x101a,0x152d,
-0x152d,0x152d,0x152d,0x152d,0x152d,0x152d,0x173a,0x173a,0x885,0x88b,0x88b,0x897,0x897,0x888,0x87f,0x888,
-0x87f,0x888,0x87f,0x888,0x87f,0x888,0x87f,0x888,0x633,0x633,0x62d,0x633,0x62d,0x633,0x62d,0x633,
-0x62d,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,0x62d,0x630,
-0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x633,0x62d,0x633,0x62d,0x633,
-0x62d,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,
-0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,0x636,0x633,0x62d,0x630,
-0x636,0x633,0x62d,0x630,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,
-0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x720,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,
-0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,
-0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x71d,0x726,0x726,0x726,0x726,0x726,0x726,
-0x726,0x726,0x726,0x726,0x726,0x726,0x729,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,0x726,
-0x726,0x726,0x726,0x726,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,
-0x723,0x723,0x723,0x723,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,
-0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,
-0x72c,0x72c,0x72c,0x72c,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
-0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,0x756,
-0x756,0x756,0x756,0x756,0xc78,0x8e8,0x8e2,0x8df,0x8e5,0x8dc,0x76b,0x76e,0x76e,0x76e,0x76e,0x76e,
-0x76e,0x76e,0x76e,0x76e,0x8ee,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,
-0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,
-0x76b,0x76b,0x76b,0x76b,0x76b,0x76b,0x8eb,0x8eb,0x771,0x8fd,0x900,0x906,0x82b,0x837,0x91b,0x834,
-0x8f4,0x8f1,0x8f4,0x8f1,0x8fa,0x8f7,0x8fa,0x8f7,0x8f4,0x8f1,0x831,0x906,0x8f4,0x8f1,0x8f4,0x8f1,
-0x8f4,0x8f1,0x8f4,0x8f1,0x909,0x912,0x90f,0x90f,0x777,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7b3,0x7ad,
-0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,0x7ad,
-0x7ad,0x7ad,0x7ad,0x77a,0x795,0x774,0x79b,0x79e,0x798,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7b0,0x7aa,
-0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,0x7aa,
-0x7aa,0x7aa,0x7aa,0x77a,0x795,0x774,0x795,0xc7b,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,
-0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,
-0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x12d8,0x12d8,0x12d8,0x12d8,0x12d8,0x81c,
-0x831,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x834,0x951,0x951,0x951,0x951,0x83a,0x83a,
-0x90c,0x918,0x918,0x918,0x918,0x915,0x82e,0x903,0xb3d,0xb3d,0xb3d,0xc8d,0xcab,0xca8,0xb5b,0x8d9,
-0x840,0x83d,0x840,0x843,0x83d,0x840,0x83d,0x840,0x83d,0x840,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,
-0x840,0x840,0x83d,0x840,0x840,0x83d,0x840,0x840,0x83d,0x840,0x840,0x83d,0x840,0x840,0x83d,0x83d,
-0xcae,0x852,0x84c,0x852,0x84c,0x852,0x84c,0x852,0x84c,0x852,0x84c,0x84c,0x84f,0x84c,0x84f,0x84c,
-0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,
-0x84f,0x84c,0x84f,0x852,0x84c,0x84f,0x84c,0x84f,0x84c,0x84f,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,
-0x84f,0x84f,0x84c,0x84f,0x84f,0x84c,0x84f,0x84f,0x84c,0x84f,0x84f,0x84c,0x84f,0x84f,0x84c,0x84c,
-0x84c,0x84c,0x84c,0x852,0x84c,0x852,0x84c,0x852,0x84c,0x84c,0x84c,0x84c,0x84c,0x84c,0x852,0x84c,
-0x84c,0x84c,0x84c,0x84c,0x84f,0x852,0x852,0x84f,0x84f,0x84f,0x84f,0x921,0x924,0x855,0x858,0xc96,
-0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
-0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
-0x861,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,
-0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x85e,0x86a,0x86a,0x86a,0x86a,
-0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,
-0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0x86a,0xd9b,0xd9b,0xeca,0x864,0x92d,0x92d,0x92d,0x92d,
-0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0xd95,0xd95,0xd95,0xd95,0x86d,0x86d,0x86d,0x86d,
-0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,
-0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x86d,0x1ab2,0x936,0x936,0x936,0x936,
-0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x870,0x870,0x870,
-0x870,0x870,0x870,0xd9e,0xd9e,0xd9e,0xd9e,0x939,0x939,0x939,0x939,0x939,0x870,0x870,0x870,0x870,
-0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,
-0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0x870,0xd9e,0xd9e,
-0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,
-0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,0x873,
-0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,
-0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,
-0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0x876,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,
-0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,
-0x113d,0x113d,0x113d,0x113d,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,
-0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x879,
-0x879,0x879,0x879,0x879,0x879,0x879,0x87c,0x87c,0x879,0x87c,0x879,0x87c,0x87c,0x879,0x879,0x879,
-0x879,0x879,0x879,0x879,0x879,0x879,0x879,0x87c,0x879,0x87c,0x879,0x87c,0x87c,0x879,0x879,0x87c,
-0x87c,0x87c,0x879,0x879,0x879,0x879,0x14e5,0x14e5,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,
-0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,
-0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,
-0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x131d,0x131d,0x131d,0x131d,0x12bd,0x12bd,0x12bd,0x12bd,
-0x12bd,0x12bd,0x12bd,0x12bd,0xd95,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,
-0xc99,0xc99,0xc99,0xc99,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,
-0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x933,0x930,0x933,0x930,0x930,
-0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,0x930,
-0x930,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,0xc99,
-0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,
-0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0xd9e,
-0x9b7,0x999,0x999,0x999,0x999,0x993,0x999,0x999,0x9ab,0x999,0x999,0x996,0x9a2,0x9a8,0x9a8,0x9a8,
-0x9a8,0x9a8,0x9ab,0x993,0x99f,0x993,0x993,0x993,0x98a,0x98a,0x993,0x993,0x993,0x993,0x993,0x993,
-0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x993,0x993,0x993,0x993,0x993,0x993,
-0x993,0x993,0x993,0x993,0x996,0x98a,0x993,0x98a,0x993,0x98a,0x9a5,0x99c,0x9a5,0x99c,0x9b4,0x9b4,
-0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
-0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,
-0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,
-0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,
-0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
-0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,0x9c9,
-0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,
-0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9cc,0x9cc,
-0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,
-0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9cf,0x9cf,
-0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,
-0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,0x9d2,
-0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,
-0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,
-0x9d8,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,
-0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9d8,0x9db,0x9db,0x9db,
-0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,
-0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0x9db,0xa68,0xa68,0xfff,0xa68,0xa68,0xa68,0xa6b,0xa68,
-0xfff,0xa68,0xa68,0xff6,0xa62,0xa56,0xa56,0xa56,0xa56,0xa65,0xa56,0xfe7,0xfe7,0xfe7,0xa56,0xa59,
-0xa62,0xa5c,0xfed,0xff9,0xff9,0xfe7,0xfe7,0xfff,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,0xb61,
-0xb61,0xb61,0xa6e,0xa6e,0xa5f,0xa5f,0xa5f,0xa5f,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa65,0xa65,
-0xa56,0xa56,0xfff,0xfff,0xfff,0xfff,0xfe7,0xfe7,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,
-0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,
-0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xdf2,
-0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
-0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
-0xa7d,0xa7d,0xa7d,0xdf2,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,0xa7d,
-0xa7d,0xa7d,0xa7d,0xa7d,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,
-0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,0xa83,
-0xa83,0xa83,0xa83,0xa83,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,
-0xa89,0xa86,0xa8c,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0x1176,0x1176,0x1176,0x1176,0x1176,
-0x1176,0x1176,0x1176,0x1176,0x1173,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,
-0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,
-0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,
-0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,
-0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xa9e,0xac2,0xac2,0xac2,0xac5,0xac5,0xac2,0xac2,0xac2,
-0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xaaa,0xaaa,0xabf,0xaa1,
-0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xabf,0xabf,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,
-0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,
-0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xac2,0xae3,0xae3,0xae3,0xae3,0xae3,0xace,0xace,0xae3,
-0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
-0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
-0xae3,0xae3,0xae3,0xae6,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
-0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,
-0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb10,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,
-0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xc06,0xc06,0xc06,0xc06,0xc06,
-0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,
-0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,
-0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
-0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,0xb2e,
-0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
+0x2a9,0x2a9,0x2a9,0x2a9,0x1b72,0x1b72,0x1b6f,0x1b6f,0x1b6f,0x1b6f,0x1b75,0x1b75,0x1b75,0x1b75,0x2ac,0x2ac,
+0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,
+0x2ac,0x2ac,0x2ac,0x2ac,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,
+0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,
+0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,
+0x1b7b,0x1b7b,0x1b7b,0x2af,0x1b78,0x1b78,0x1b78,0x1b78,0x1b78,0x1b78,0x1b78,0x1b78,0x1b78,0x1b78,0x2af,0x2af,
+0x2af,0x2af,0x2af,0x2af,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,0x1542,
+0x1542,0x1542,0x1542,0x1542,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,0x1b81,
+0x1b81,0x1b81,0x1b7e,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,0x2b2,
+0x2b2,0x2b2,0x2b2,0x2b2,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x2b5,
+0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x1b8a,0x2b5,0x1b8a,0x1b8a,0x2b5,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,
+0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x2b5,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,
+0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x2b5,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x1b87,0x2b5,0x1b87,
+0x1b87,0x2b5,0x2b5,0x2b5,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,
+0x1b90,0x1b90,0x2b8,0x2b8,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,
+0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,0x2b8,
+0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,
+0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,
+0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,
+0x18c9,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,0x2cd,
+0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,
+0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x94e,0x94e,
+0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x2d0,0x2d0,0x2d0,0x2d0,0x2d0,
+0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,
+0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0x128d,0x128d,0x128d,0x2be,0x2be,
+0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,
+0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,
+0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,
+0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0x2be,0xb76,0xb76,0xb76,0xb76,
+0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,
+0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0x2c1,0x2c1,0x129f,0x129f,0x129f,0x129f,
+0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
+0x129f,0x1b99,0x1b99,0x1b99,0x1b99,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x2c4,0x13b6,0x13b6,0x13b6,0x13b6,
+0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,
+0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x2c7,0x2c7,0x1773,0x1773,0x2ca,0x2ca,
+0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x2ca,0x18c9,0x18c9,0x18c9,0x18c9,
+0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x3d8,0x3cc,0x3cc,0x3cc,
+0x3cc,0x3cc,0x3cc,0x3cc,0x3cc,0x3d8,0x3d8,0x3d8,0x3d8,0x3d2,0x110a,0x12e4,0x3db,0x918,0x91b,0x3c9,
+0x3c9,0x1107,0x12e1,0x12e1,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x3de,0x1107,0x3cc,0x3cc,0x3d8,
+0xc9c,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3cc,0x3cc,
+0x8a0,0x8a3,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x936,0x3d5,0xf6c,0xf69,0x12e7,
+0x12e7,0x12e7,0x12e7,0x12e7,0x14a6,0x110d,0x110d,0xebe,0xebe,0xd8f,0xebe,0xebe,0x3db,0x3db,0x3db,0x3db,
+0x3db,0x3db,0x3db,0x3db,0x3db,0x3de,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3db,0x3de,0x3db,0x3db,
+0x3de,0x3db,0x3db,0x3db,0x3db,0x3db,0x12e1,0x12e4,0x3cf,0x3db,0x3d8,0x3d8,0x47a,0x47a,0x47a,0x47a,
+0x47a,0x47a,0x47a,0x47a,0x47a,0x12ed,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,
+0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x12ed,0x1845,0x1845,0xf8a,0x46b,0x474,0x4b6,0x4b6,0x4b6,0x4b6,
+0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,0x4b6,
+0x4b6,0x4b6,0x4b6,0xb91,0xb91,0xd9b,0xd9b,0x8a6,0xd9e,0x13c8,0x13c8,0x13c8,0x4b9,0x4b9,0x4b9,0x4b9,
+0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,
+0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4b9,0x4bf,0x4bf,0x4bf,0x1122,
+0x1122,0x1122,0x1122,0x1122,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,
+0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,
+0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x4bc,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x4c2,0x4bf,0x4bf,0x4bf,
+0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,
+0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,
+0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,
+0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,
+0x4cb,0x4c5,0x4c5,0x4c5,0x4c5,0x4c5,0x4c8,0x990,0xfb7,0xfb7,0xfba,0xfb7,0x4cb,0x4c5,0x4cb,0x4c5,
+0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,
+0x4cb,0x4c5,0x4cb,0x4c5,0x4cb,0x4c5,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4d7,0x4d7,0x4d7,0x4d7,
+0x4d7,0x4d7,0x4d7,0x4d7,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x4da,0x696,0x696,0x699,0x4f5,
+0x6a5,0x6a2,0x6a2,0x69f,0x51f,0x51f,0x4dd,0x4dd,0x4dd,0x4dd,0x4dd,0xb22,0x6a8,0x501,0x6c0,0x6c3,
+0x516,0x6a8,0x504,0x504,0x4f5,0x510,0x510,0x696,0x51c,0x519,0x69c,0x4ef,0x4e6,0x4e6,0x4e9,0x4e9,
+0x4e9,0x4e9,0x4e9,0x4ec,0x4e9,0x4e9,0x4e9,0x4e0,0x528,0x525,0x522,0x522,0x6b4,0x50a,0x507,0x6b1,
+0x6ae,0x6ab,0x6bd,0x4f8,0x6ba,0x6ba,0x50d,0x510,0x6b7,0x6b7,0x50d,0x510,0x4f2,0x4f5,0x4f5,0x4f5,
+0x513,0x4fe,0x4fb,0xba6,0xac5,0xac5,0xac2,0xac2,0xac2,0xac2,0xb9d,0xb9d,0xb9d,0xb9d,0xba3,0xcc9,
+0xcc6,0xdaa,0xdad,0xba0,0xdad,0xdad,0xdad,0xdad,0xdaa,0xdad,0xdad,0xb9a,0x54c,0x54c,0x54c,0x54c,
+0x54c,0x54c,0x54c,0x549,0x54f,0x72f,0x54c,0x993,0x9b4,0xac8,0xac8,0xac8,0xbac,0xbac,0xdb3,0xdb3,
+0xdb3,0xdb3,0x112b,0x112e,0x112e,0x1302,0x1494,0x14be,0x14c1,0x14c1,0x16c8,0x1848,0x55b,0x55b,0x573,0x6d5,
+0x558,0x6cf,0x55b,0x570,0x558,0x6d5,0x56a,0x573,0x573,0x573,0x56a,0x56a,0x573,0x573,0x573,0x6db,
+0x558,0x573,0x6d8,0x558,0x567,0x573,0x573,0x573,0x573,0x573,0x558,0x558,0x55e,0x6cf,0x6d2,0x558,
+0x573,0x558,0x6de,0x558,0x573,0x561,0x579,0x6e1,0x573,0x573,0x564,0x56a,0x573,0x573,0x576,0x573,
+0x56a,0x56d,0x56d,0x56d,0x56d,0xad1,0xace,0xccc,0xdbc,0xbc1,0xbc4,0xbc4,0xbbe,0xbbb,0xbbb,0xbbb,
+0xbbb,0xbc4,0xbc1,0xbc1,0xbc1,0xbc1,0xbb8,0xbbb,0xdb9,0xeca,0xecd,0xfc0,0x1131,0x1131,0x1131,0x6e7,
+0x6e4,0x57c,0x57f,0x57f,0x57f,0x57f,0x57f,0x6e4,0x6e7,0x6e7,0x6e4,0x57f,0x6ed,0x6ed,0x6ed,0x6ed,
+0x6ed,0x6ed,0x6ed,0x6ed,0x6ed,0x6ed,0x6ed,0x6ed,0x588,0x588,0x588,0x588,0x6ea,0x6ea,0x6ea,0x6ea,
+0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x6ea,0x582,0x582,0x582,0x582,0x582,0x582,0x58e,0x58e,0x58e,0x58e,
+0x58e,0x58e,0x58e,0x58e,0x58b,0x58e,0x58e,0x58e,0x58e,0x58e,0x591,0x58b,0x58e,0x58e,0x58b,0x58b,
+0x58b,0x58b,0x58e,0x58e,0x6f0,0x6f0,0x58b,0x58b,0x58e,0x58e,0x58e,0x58e,0x58e,0x58e,0x58e,0x58e,
+0x58e,0x58e,0x58e,0x58e,0x58e,0x591,0x591,0x591,0x58e,0x58e,0x6f3,0x58e,0x6f3,0x58e,0x58e,0x58e,
+0x58e,0x58e,0x58e,0x58e,0x58b,0x58e,0x58b,0x58b,0x58b,0x58b,0x58b,0x58b,0x58e,0x58e,0x58b,0x6f0,
+0x58b,0x58b,0x58b,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xbc7,0xbc7,0xbc7,0xbc7,
+0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0x6f6,0x594,0x6f6,0x6f6,0x597,0x594,0x594,0x6f6,
+0x6f6,0x597,0x594,0x6f6,0x597,0x594,0x594,0x6f6,0x594,0x6f6,0x5a3,0x5a0,0x594,0x6f6,0x594,0x594,
+0x594,0x594,0x6f6,0x594,0x594,0x6f6,0x6f6,0x6f6,0x6f6,0x594,0x594,0x6f6,0x597,0x6f6,0x597,0x6f6,
+0x6f6,0x6f6,0x6f6,0x6f6,0x6fc,0x59a,0x6f6,0x59a,0x59a,0x594,0x594,0x594,0x6f6,0x6f6,0x6f6,0x6f6,
+0x594,0x594,0x594,0x594,0x6f6,0x6f6,0x594,0x594,0x594,0x597,0x594,0x594,0x597,0x594,0x594,0x597,
+0x6f6,0x597,0x594,0x594,0x6f6,0x594,0x594,0x594,0x594,0x594,0x6f6,0x594,0x594,0x594,0x594,0x594,
+0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x6f9,0x6f6,0x597,0x594,0x6f6,0x6f6,0x6f6,0x6f6,
+0x594,0x594,0x6f6,0x6f6,0x594,0x597,0x6f9,0x6f9,0x597,0x597,0x594,0x594,0x597,0x597,0x594,0x594,
+0x597,0x597,0x594,0x594,0x594,0x594,0x594,0x594,0x597,0x597,0x6f6,0x6f6,0x597,0x597,0x6f6,0x6f6,
+0x597,0x597,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x6f6,0x594,0x594,
+0x594,0x6f6,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x6f6,0x594,0x594,0x594,0x594,0x594,0x594,
+0x597,0x597,0x597,0x597,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,
+0x594,0x594,0x594,0x6f6,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,
+0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,0x594,
+0x594,0x594,0x594,0x594,0x597,0x597,0x597,0x597,0x594,0x594,0x594,0x594,0x594,0x594,0x597,0x597,
+0x597,0x597,0x594,0x59d,0x594,0x594,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,
+0xbca,0xbca,0xbca,0xbca,0x5a6,0xada,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5af,0x5ac,0x5af,0x5ac,
+0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x6ff,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x7ef,0x7ef,
+0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x7f5,0x7f2,0x5a6,
+0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,
+0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,
+0x5a6,0x5a6,0x5a6,0xada,0xbd0,0xada,0xada,0xada,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,
+0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,
+0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,
+0x708,0x708,0x5b8,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,
+0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xd3b,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,
+0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x5bb,0x5be,0x5be,0x5be,
+0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,
+0x70e,0x70e,0x70e,0x70e,0x5be,0x5be,0x5be,0x5be,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,
+0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,
+0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x5c1,0x5c1,0x711,0x711,0x711,0x711,0xbd3,0xbd3,
+0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0x717,0x717,0x5c4,0x714,0x714,0x714,0x714,0x714,
+0x714,0x714,0x5c4,0x5c4,0x5c4,0x5c4,0x5c7,0x5c7,0x5c7,0x5c7,0x717,0x717,0x5c7,0x5c7,0x717,0x717,
+0x5c4,0x5c4,0x5c4,0x5c4,0x717,0x717,0x5c7,0x5c7,0x717,0x717,0x5c4,0x5c4,0x5c4,0x5c4,0x717,0x717,
+0x714,0x5c4,0x5c7,0x717,0x5c4,0x5c4,0x714,0x717,0x717,0x717,0x5c7,0x5c7,0x5c4,0x5c4,0x5c4,0x5c4,
+0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x717,0x714,0x717,0x714,0x5c4,0x5c7,
+0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c4,0x5c4,0x714,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,
+0xbd6,0xbd6,0xbd6,0xbd6,0xbd6,0xc45,0xc45,0xbd6,0x5cd,0x5cd,0x5cd,0x5cd,0x5ca,0x720,0x720,0x5ca,
+0x5ca,0x71a,0x5ca,0x5ca,0x5ca,0x5ca,0x71a,0x71a,0x5ca,0x5ca,0x5ca,0x5ca,0xd44,0xd44,0xbd9,0xbd9,
+0xdc5,0xae3,0x5cd,0x5cd,0x71d,0x5d0,0x71d,0x5cd,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,
+0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,
+0x5ca,0x5cd,0x5cd,0x5cd,0x5ca,0x5ca,0x5ca,0x5ca,0x720,0x5ca,0x720,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,
+0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x5ca,0x5ca,0x5ca,0x5ca,
+0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x720,0x720,0x5d3,0x720,0x71a,0x71a,0x5ca,0x71a,
+0x71d,0x71a,0x71a,0x5ca,0x71a,0x720,0x5d3,0x720,0xae3,0xae3,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,
+0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xdc2,0xe79,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,
+0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d6,0x5d9,0x1389,0x1389,0x1389,
+0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x14c7,0x5df,0x5df,0x5df,0x5df,0x1389,0x5d9,0x5d9,
+0x5df,0x5df,0x138c,0x138c,0x5e5,0x5e5,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,
+0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x1389,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,
+0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x726,0x5d9,0x5d9,
+0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x1389,0x5d9,0x1389,0x5d9,
+0x5d9,0x5d9,0x5d9,0x1389,0x1389,0x1389,0x5d9,0x1287,0x5d9,0x5d9,0x5d9,0x5e2,0x5e2,0x5e2,0x5e2,0x130e,
+0x130e,0x5d9,0x5dc,0x5dc,0x5df,0x5d9,0x5d9,0x5d9,0xbe2,0xbdf,0xbe2,0xbdf,0xbe2,0xbdf,0xbe2,0xbdf,
+0xbe2,0xbdf,0xbe2,0xbdf,0xbe2,0xbdf,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,0x723,
+0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,
+0x1389,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x5d9,0x1389,
+0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,
+0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x5fd,0x5fd,
+0x5fd,0x5fd,0x5fd,0x5fd,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,
-0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,
-0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0x13ec,0x13ec,0x13ec,0x1b2d,0x1b2d,0x1b2d,0x1b2d,0x1b2d,
+0x606,0x606,0x94b,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x5fd,0x5fd,0xbe5,0xd68,0x1afd,0x1afd,
+0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,
+0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,
+0x606,0x600,0x606,0x600,0x606,0x600,0x606,0x600,0x606,0x600,0x606,0x600,0x603,0x609,0x606,0x600,
+0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,0x606,0x600,0x603,0x609,
+0x606,0x600,0x606,0x600,0x603,0x609,0x606,0x600,0x603,0x609,0x606,0x600,0x606,0x600,0x1311,0x1311,
+0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x606,0x600,0x606,0x600,
+0x606,0x600,0x603,0x609,0x603,0x609,0x606,0x600,0x606,0x600,0x606,0x600,0x606,0x600,0x606,0x600,
+0x606,0x600,0x606,0x600,0x603,0x606,0x600,0x603,0x606,0x600,0x603,0x609,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x606,0x606,0x606,0x606,
+0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x603,0x603,0x603,
+0x603,0x603,0x603,0x603,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x600,0x606,0x909,0x90c,
+0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,0x1afd,
+0x603,0x600,0x603,0x603,0x603,0x603,0x603,0x603,0x600,0x603,0x600,0x600,0x603,0x603,0x600,0x600,
+0x603,0x603,0x600,0x603,0x600,0x603,0x600,0x600,0x603,0x600,0x600,0x603,0x600,0x603,0x600,0x600,
+0x603,0x600,0x603,0x603,0x600,0x600,0x600,0x603,0x600,0x600,0x600,0x600,0x600,0x603,0x600,0x600,
+0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,0x600,
+0x600,0x600,0x600,0x600,0x603,0x603,0x600,0x600,0x603,0x600,0x603,0x600,0x600,0x600,0x600,0x600,
+0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,
+0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,0x603,
+0x603,0x603,0x603,0x609,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,
+0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,0x606,
+0x606,0x606,0x606,0x606,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,
+0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x609,0x606,0x606,0x606,0x606,0x606,0x606,0x606,
+0x606,0x606,0x606,0x606,0x60c,0x60c,0x60c,0x60c,0xfcc,0xfcc,0xfcc,0x14ca,0x14ca,0x14ca,0x14ca,0x14ca,
+0x14ca,0x14ca,0x16ce,0x16ce,0x855,0x85b,0x85b,0x867,0x867,0x858,0x84f,0x858,0x84f,0x858,0x84f,0x858,
+0x84f,0x858,0x84f,0x858,0x61b,0x61b,0x615,0x61b,0x615,0x61b,0x615,0x61b,0x615,0x61b,0x615,0x618,
+0x61e,0x61b,0x615,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,
+0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x61b,0x615,0x61b,0x615,0x61b,0x615,0x61b,0x615,0x618,
+0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,
+0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,0x61e,0x61b,0x615,0x618,
+0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,0x705,
+0x705,0x705,0x705,0x705,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,
+0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,0x702,
+0x702,0x702,0x702,0x702,0x702,0x702,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,
+0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,
+0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x708,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,
+0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,
+0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x70e,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,
+0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,
+0x729,0x729,0x729,0x729,0x729,0x729,0x729,0x729,0xc33,0x8b8,0x8b2,0x8af,0x8b5,0x8ac,0x73e,0x741,
+0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x741,0x8be,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,
+0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,
+0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x8bb,0x8bb,0x744,0x8cd,0x8d0,0x8d6,
+0x7fb,0x807,0x8eb,0x804,0x8c4,0x8c1,0x8c4,0x8c1,0x8ca,0x8c7,0x8ca,0x8c7,0x8c4,0x8c1,0x801,0x8d6,
+0x8c4,0x8c1,0x8c4,0x8c1,0x8c4,0x8c1,0x8c4,0x8c1,0x8dc,0x8e2,0x8df,0x8df,0x74a,0x786,0x786,0x786,
+0x786,0x786,0x786,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x780,
+0x780,0x780,0x780,0x780,0x780,0x780,0x780,0x74d,0x768,0x747,0x76e,0x771,0x76b,0x783,0x783,0x783,
+0x783,0x783,0x783,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,
+0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x77d,0x74d,0x768,0x747,0x768,0xc36,0x7e9,0x7e9,0x7e9,0x7e9,
+0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,
+0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x7e9,0x1281,0x1281,
+0x1281,0x1281,0x1281,0x7ec,0x801,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x924,0x924,
+0x924,0x924,0x80a,0x80a,0x8d9,0x8e8,0x8e8,0x8e8,0x8e8,0x8e5,0x7fe,0x8d3,0xb07,0xb07,0xb07,0xc48,
+0xc66,0xc63,0xb25,0x8a9,0x810,0x80d,0x810,0x813,0x80d,0x810,0x80d,0x810,0x80d,0x810,0x80d,0x80d,
+0x80d,0x80d,0x80d,0x80d,0x810,0x810,0x80d,0x810,0x810,0x80d,0x810,0x810,0x80d,0x810,0x810,0x80d,
+0x810,0x810,0x80d,0x80d,0xc69,0x822,0x81c,0x822,0x81c,0x822,0x81c,0x822,0x81c,0x822,0x81c,0x81c,
+0x81f,0x81c,0x81f,0x81c,0x81f,0x81c,0x81f,0x81c,0x81f,0x81c,0x81f,0x81c,0x81f,0x81c,0x81f,0x81c,
+0x81f,0x81c,0x81f,0x81c,0x81f,0x81c,0x81f,0x822,0x81c,0x81f,0x81c,0x81f,0x81c,0x81f,0x81c,0x81c,
+0x81c,0x81c,0x81c,0x81c,0x81f,0x81f,0x81c,0x81f,0x81f,0x81c,0x81f,0x81f,0x81c,0x81f,0x81f,0x81c,
+0x81f,0x81f,0x81c,0x81c,0x81c,0x81c,0x81c,0x822,0x81c,0x822,0x81c,0x822,0x81c,0x81c,0x81c,0x81c,
+0x81c,0x81c,0x822,0x81c,0x81c,0x81c,0x81c,0x81c,0x81f,0x822,0x822,0x81f,0x81f,0x81f,0x81f,0x8f1,
+0x8f4,0x825,0x828,0xc51,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,
+0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,
+0x82e,0x82e,0x82e,0x82e,0x831,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,
+0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,0x82e,
+0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,
+0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0x83a,0xd4d,0xd4d,0xe7c,0x834,
+0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0xd47,0xd47,0xd47,0xd47,
+0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,
+0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x83d,0x1a46,
+0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,
+0x903,0x840,0x840,0x840,0x840,0x840,0x840,0xd50,0xd50,0xd50,0xd50,0x906,0x906,0x906,0x906,0x906,
+0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,
+0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,0x840,
+0x840,0x840,0xd50,0xd50,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,
+0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,0x843,
+0x843,0x843,0x843,0x843,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x846,0x846,0x846,0x846,
+0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,
+0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0x846,0xe7f,0xe7f,
+0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,
+0xe7f,0xe7f,0xe7f,0xe7f,0x10ef,0x10ef,0x10ef,0x10ef,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,
+0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,
+0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x84c,0x84c,0x849,0x84c,0x849,0x84c,
+0x84c,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x849,0x84c,0x849,0x84c,0x849,0x84c,
+0x84c,0x849,0x849,0x84c,0x84c,0x84c,0x849,0x849,0x849,0x849,0x1485,0x1485,0xc5a,0xc5a,0xc5a,0xc5a,
+0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0x8fd,0x8fd,0x8fd,0x8fd,
+0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,
+0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x12c0,0x12c0,0x12c0,0x12c0,
+0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0x1269,0xd47,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
+0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,
+0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,
+0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0x900,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
+0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,
+0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,0x903,
+0x903,0x903,0x903,0x903,0x903,0x903,0x903,0xd50,0x98a,0x96c,0x96c,0x96c,0x96c,0x966,0x96c,0x96c,
+0x97e,0x96c,0x96c,0x969,0x975,0x97b,0x97b,0x97b,0x97b,0x97b,0x97e,0x966,0x972,0x966,0x966,0x966,
+0x95d,0x95d,0x966,0x966,0x966,0x966,0x966,0x966,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,
+0x981,0x981,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x966,0x969,0x95d,0x966,0x95d,
+0x966,0x95d,0x978,0x96f,0x978,0x96f,0x987,0x987,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,
+0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,
+0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x996,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,
+0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,
+0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x999,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,
+0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,
+0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,
+0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,
+0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x99f,0x99f,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,
+0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,
+0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a2,0x9a2,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,
+0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,
+0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,
+0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,
+0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9ab,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
+0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
+0x9ae,0x9ae,0x9ae,0x9ae,0x9ab,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
+0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,
+0xa3b,0xa3b,0xfb1,0xa3b,0xa3b,0xa3b,0xa3e,0xa3b,0xfb1,0xa3b,0xa3b,0xfa8,0xa35,0xa29,0xa29,0xa29,
+0xa29,0xa38,0xa29,0xf99,0xf99,0xf99,0xa29,0xa2c,0xa35,0xa2f,0xf9f,0xfab,0xfab,0xf99,0xf99,0xfb1,
+0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xa41,0xa41,0xa32,0xa32,0xa32,0xa32,
+0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa38,0xa38,0xa29,0xa29,0xfb1,0xfb1,0xfb1,0xfb1,0xf99,0xf99,
+0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,
+0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,
+0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xda7,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,
+0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,
+0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xda7,0xa50,0xa50,0xa50,0xa50,
+0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa50,0xa56,0xa56,0xa56,0xa56,
+0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,
+0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa56,0xa5c,0xa5c,0xa5c,0xa5c,
+0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa59,0xa5f,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,
+0xa5c,0xa5c,0xa5c,0x1128,0x1128,0x1128,0x1128,0x1128,0x1128,0x1128,0x1128,0x1128,0x1125,0xa5c,0xa5c,0xa5c,
+0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,
+0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,
+0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
+0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,0xa71,
+0xa95,0xa95,0xa95,0xa98,0xa98,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,
+0xa95,0xa95,0xa95,0xa95,0xa7d,0xa7d,0xa92,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa74,0xa92,0xa92,
+0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,
+0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xaa1,0xaa1,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab9,0xab6,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,
+0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xab6,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,
+0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,
+0xada,0xada,0xada,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,
+0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,
+0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,
+0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,
+0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xaf8,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,
+0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,
+0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,
+0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,
+0x138f,0x138f,0x138f,0x1ac1,0x1ac1,0x1ac1,0x1ac1,0x1ac1,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,
+0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,
+0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0xb0d,0x1ac4,0x1ac4,0x1ac4,0x1ac4,0x1ac4,0x1ac4,
+0x1ac4,0x1ac4,0x1ac4,0x1ac4,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,
+0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb13,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,
+0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,
+0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb16,0xb16,0xc57,0xc57,
+0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,
+0xc57,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb3a,0xb3a,0xb3a,0xb3a,
+0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,
+0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0x14cd,0xb43,0xb43,0xb43,0xb43,
+0xb43,0xb43,0xcdb,0xcdb,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,
+0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xcd8,0xcd8,
+0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,
0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,
0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,
-0xb43,0xb43,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0x1b30,0xb46,0xb46,0xb46,0xb46,
0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,
-0xb46,0xb49,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,
0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,0xb46,
-0xb46,0xb46,0xb46,0xb46,0xb4c,0xb4c,0xc9c,0xc9c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,
-0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xc9c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,
-0xb4c,0xb4c,0xb4c,0xb4c,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
-0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,0xb70,
-0xb70,0xb70,0xb70,0x1530,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xd26,0xd26,0xb76,0xb76,0xb76,0xb76,
+0xb55,0xb55,0xb55,0xb55,0xb55,0xb4c,0xb58,0xb5e,0xb5e,0xb5e,0xb52,0xb52,0xb52,0xb5b,0xb4f,0xb4f,
+0xb4f,0xb4f,0xb4f,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,
+0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,
+0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,
+0xb52,0xb52,0xb55,0xb55,0xb5e,0xb5e,0xb5e,0xb52,0xb52,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,0xb5e,
+0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,
+0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb5e,0xb5e,0xb5e,0xb5e,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,
+0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb55,0xb55,0xb55,0xb55,0xb55,0xb55,0xb52,0xb52,0xb52,
+0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,
+0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0xb52,0x16d1,0x16d1,0xb6a,0xb61,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb61,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb61,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb61,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb61,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,
+0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,0xb64,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,
+0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb6a,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,0xb67,
+0xb67,0xb67,0xb67,0xb67,0xb6a,0xb6a,0xb6a,0xb6a,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,
+0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,
+0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb6d,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
+0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,
+0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0x1aca,0x1aca,0x1aca,0x1aca,0x1aca,
+0x1aca,0x1aca,0x1b96,0x1b96,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,
0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,
-0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xd23,0xd23,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
-0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,
-0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,
-0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,
-0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,
-0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb82,0xb8e,0xb94,
-0xb94,0xb94,0xb88,0xb88,0xb88,0xb91,0xb85,0xb85,0xb85,0xb85,0xb85,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,
-0xb7f,0xb7f,0xb7f,0xb94,0xb94,0xb94,0xb94,0xb94,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
-0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
-0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,0xb8b,0xb94,0xb94,0xb94,0xb88,
-0xb88,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb94,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
-0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb94,0xb94,
-0xb94,0xb94,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb8b,
-0xb8b,0xb8b,0xb8b,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
-0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,0xb88,
-0xb88,0xb88,0x173d,0x173d,0xba0,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb97,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xb97,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xb97,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,
-0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,
-0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xb9a,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,
-0xba0,0xba0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,
-0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xba0,0xba0,0xba0,0xba0,
-0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,
-0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,
-0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
-0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,
-0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,
-0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,
-0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,
-0xc06,0xc06,0xc06,0xc06,0xc06,0xc06,0xc03,0xc06,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,
-0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xc03,0xd14,0xd17,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,
-0xe0a,0xe0a,0xe0a,0xe0a,0xf24,0xf24,0xf24,0xf24,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc12,0xc12,
-0xc12,0xc12,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1d,0xd1d,0xe10,0xec4,0xe10,0xe10,0xe10,0xe10,
-0xe0d,0xe10,0xe0d,0xe10,0xe10,0x1014,0x12ae,0x12ae,0xe19,0xe19,0xe19,0xe19,0xe19,0xe1f,0xe1c,0xf36,
-0xf36,0xf36,0xf36,0x142e,0x1026,0x142e,0x1374,0x1374,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,
-0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc81,0xc7e,0xc81,0xc7e,0xc81,0xc7e,
-0x1137,0x1134,0x102c,0x1029,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,0xc51,
-0xc51,0xc51,0xc51,0xc51,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
-0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
-0xc54,0xc54,0xc54,0xc54,0xc57,0xc57,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,0xc54,
-0xc5a,0xc5a,0xc5a,0xc60,0xc5d,0xc87,0xc84,0xc60,0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc60,
-0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc60,0xc5d,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
-0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
-0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc60,0xc5d,0xc60,0xc5d,
+0xb76,0xb76,0xb76,0xb76,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,
+0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbcd,0xbd0,0xbcd,0xbcd,0xbcd,0xbcd,
+0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xbcd,0xccf,0xcd2,0xdbf,0xdbf,0xdbf,
+0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xdbf,0xed6,0xed6,0xed6,0xed6,0xbdc,0xbdc,0xbdc,0xbdc,
+0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xdc2,0xe76,
+0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xfc6,0x1260,0x1260,0xdcb,0xdcb,0xdcb,0xdcb,
+0xdcb,0xdd1,0xdce,0xee8,0xee8,0xee8,0xee8,0x13ce,0xfd8,0x13ce,0x131a,0x131a,0xc0f,0xc0f,0xc0f,0xc0f,
+0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc3c,0xc39,
+0xc3c,0xc39,0xc3c,0xc39,0x10e9,0x10e6,0xfde,0xfdb,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,
+0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,
+0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,
+0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc15,0xc18,0xc18,0xc18,0xc1e,0xc1b,0xc42,0xc3f,0xc1e,
+0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,0xc1b,0xc1e,
+0xc1b,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,
+0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,
+0xc18,0xc18,0xc18,0xc18,0xc1e,0xc1b,0xc1e,0xc1b,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,
+0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,0xc18,
+0xc18,0xc18,0xc18,0xc18,0xc1e,0xc1b,0xc18,0xc18,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,
+0xc21,0xc21,0xc21,0xc21,0xc27,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,
+0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,
+0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc27,0xc27,0xc27,0xc21,0xc21,0xc21,0xc21,0xc21,
+0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,
+0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc21,0xc24,0xc21,0xc21,0xc21,0xc5a,0xc5a,0xc5a,0xc5a,
0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,
-0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc60,0xc5d,0xc5a,0xc5a,
-0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc69,0xc63,0xc63,0xc63,
-0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
-0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
-0xc69,0xc69,0xc69,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
-0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,0xc63,
-0xc66,0xc63,0xc63,0xc63,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,
-0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,0xc9f,
-0xc9f,0xc9f,0xc9f,0xc9f,0xd20,0xd8f,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe10,0xe0d,0xe0d,0xec4,0xec4,
-0xe0d,0xe0d,0xe0d,0xe0d,0xe10,0xe10,0xf27,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,
-0x1014,0x12db,0x12db,0x12b1,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,
-0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,0xd44,
-0xd44,0xd44,0xd44,0xd44,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd4a,0xd4a,0xd4a,0xd4a,0xd4a,0xd47,
-0xd5c,0xd5c,0xd5c,0xd56,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd56,
-0xd5c,0xd5c,0xd5c,0xd5c,0xd50,0xd50,0xd59,0xd59,0xd59,0xd59,0xd4d,0xd4d,0xd4d,0xd4d,0xd4d,0xd53,
-0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe22,0xe25,0xe25,0xe25,
-0xe25,0xe25,0xe25,0xe25,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
-0xd5c,0xd5c,0xd56,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,0xd5c,
-0xd5c,0xd50,0xd50,0xd50,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,
-0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,0xd53,
-0xd53,0xd53,0xd53,0xd53,0xd5f,0xd5f,0xd5f,0xd5f,0xd5f,0xd62,0xd62,0xd62,0xd5f,0xd5f,0xd5f,0xd5f,
-0xd5f,0xd5f,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0x1140,
-0x1140,0x102f,0x102f,0x102f,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,
-0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,
-0xd65,0xd65,0xd65,0xd65,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
-0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,0xd6b,
-0xd6b,0xd6b,0xd6b,0xd6b,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
-0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,
-0xd74,0xd74,0xd74,0xd74,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,
-0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,0xd80,
-0xd80,0xd80,0xd80,0xd80,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,
-0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,0xd8c,
-0xd8c,0xd8c,0xd8c,0xd8c,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,
-0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,
-0xe2e,0xe2e,0xe2e,0xe2e,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,
-0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,
-0xe31,0xe31,0xe31,0xe31,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,
-0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34,
-0xe34,0xe34,0xe34,0xe34,0xef4,0xef4,0xe46,0xe46,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0x103b,
-0x103b,0x103b,0x103b,0x103b,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,
-0x1038,0x1038,0x1038,0x1038,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,
-0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,0xe55,0xe52,
-0xe55,0xe52,0xe55,0xe52,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,
-0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,0xe61,
-0xe61,0xe61,0xe61,0xe61,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
-0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
-0xe67,0xe67,0xe67,0xe67,0xeee,0xeee,0xeee,0xeee,0xeee,0xeee,0xeee,0xeee,0xe7f,0xe7f,0xe7f,0xe7f,
-0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xe7f,0xf3f,0xf3f,0xf3f,0xf3f,0x103e,
-0x103e,0x103e,0x103e,0x103e,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,
-0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,0xe88,
-0xe88,0xe88,0xe88,0xe88,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,
-0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,0xe91,
-0xe91,0xe91,0xe91,0xe91,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,
-0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,0xe9a,
-0xe9a,0xe9a,0xe9a,0xe94,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,
-0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe97,0xe9a,
-0xe9a,0xe9a,0xe9a,0xe9a,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,
-0xea3,0xea3,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xe9d,0xea6,0x104a,0x1044,0x1053,0x1041,
-0xea3,0xea3,0x1041,0x1041,0xeb5,0xeb5,0xea9,0xeb5,0xeb5,0xeb5,0xeac,0xeb5,0xeb5,0xeb5,0xeb5,0xea9,
-0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,
-0xeb5,0xeb5,0xeb5,0xeb5,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,
-0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,0xeb8,
-0xeb8,0xeb8,0xeb8,0xeb8,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
-0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,
-0xed0,0xed0,0xed0,0xed0,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,
-0xef1,0xef1,0xef1,0xef1,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,
-0x1149,0x1149,0x1149,0x1149,0xf24,0xf24,0xf24,0xf21,0xf21,0xf21,0xf21,0xf21,0x1182,0x13dd,0x13dd,0x13dd,
-0x13dd,0x135f,0x135f,0x135f,0x13e0,0x1362,0x1362,0x13e0,0x1524,0x1524,0x1524,0x1524,0x1527,0x1527,0x1527,0x17ee,
-0x17ee,0x17ee,0x17ee,0x18b4,0xf39,0xf39,0xf39,0xf39,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,
-0x102f,0x102f,0x102f,0x102f,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,
-0x1032,0x1032,0x1032,0x1032,0xf5a,0xf5a,0xf5a,0xf5a,0xf6c,0xf75,0xf78,0xf75,0xf78,0xf75,0xf78,0xf75,
-0xf78,0xf75,0xf78,0xf75,0xf75,0xf75,0xf78,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,
-0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf75,0xf5d,0xf5a,0xf5a,0xf5a,
-0xf5a,0xf5a,0xf5a,0xf6f,0xf5a,0xf6f,0xf6c,0xf6c,0xf81,0xf7e,0xf81,0xf81,0xf81,0xf7e,0xf7e,0xf81,
-0xf7e,0xf81,0xf7e,0xf81,0xf7e,0x1065,0x1065,0x1065,0x11a0,0x105c,0x1065,0x105c,0xf7e,0xf81,0xf7e,0xf7e,
-0x105c,0x105c,0x105c,0x105c,0x105f,0x1062,0x11a0,0x11a0,0xf84,0xf84,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,
-0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x106e,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,
-0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,
-0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,
-0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf8a,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,
-0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,
-0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0x1563,0x1563,0x1563,0x1563,0x1563,
-0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0xf9f,0xf9f,0xf9f,0xf9f,
-0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,
-0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xfe7,0xfff,0xff6,0xffc,
-0xffc,0xfff,0xfff,0xff6,0xff6,0xffc,0xffc,0xffc,0xffc,0xffc,0xfff,0xfff,0xfff,0xfe7,0xfe7,0xfe7,
-0xfe7,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfff,0xfe7,0xff6,
-0xff9,0xfe7,0xfe7,0xffc,0xffc,0xffc,0xffc,0xffc,0xffc,0xfea,0xfff,0xffc,0xff3,0xff3,0xff3,0xff3,
-0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0x116a,0x116a,0x1167,0x1164,0xff0,0xff0,0x1017,0x1017,0x1017,0x1017,
-0x12db,0x12db,0x12b1,0x12b1,0x12b7,0x12ae,0x12ae,0x12ae,0x12ae,0x12b1,0x13e3,0x12b7,0x12b1,0x12b7,0x12ae,0x12b7,
-0x12db,0x12ae,0x12ae,0x12ae,0x12b1,0x12b1,0x12ae,0x12ae,0x12b1,0x12ae,0x12ae,0x12b1,0x1032,0x1032,0x1032,0x1032,
-0x1032,0x102f,0x102f,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x153c,0x153c,0x153c,0x1140,0x102f,0x102f,0x102f,
-0x102f,0x12e7,0x12c0,0x12c0,0x12c0,0x12c0,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x1050,0x1050,0x104d,0x1047,
-0x104d,0x1047,0x104d,0x1047,0x104d,0x1047,0x1044,0x1044,0x1044,0x1044,0x1059,0x1056,0x1044,0x119d,0x143a,0x143d,
-0x143d,0x143a,0x143a,0x143a,0x143a,0x143a,0x1440,0x1440,0x1557,0x154b,0x154b,0x1548,0x1077,0x106e,0x1077,0x106e,
-0x1077,0x106e,0x1077,0x106e,0x106b,0x1068,0x1068,0x1077,0x106e,0x1383,0x1380,0x1746,0x1383,0x1380,0x1449,0x1446,
-0x155a,0x155a,0x1560,0x155a,0x1560,0x155a,0x1560,0x155a,0x1560,0x155a,0x1560,0x155a,0x1077,0x106e,0x1077,0x106e,
-0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,
-0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x106e,0x1071,0x106e,0x106e,0x106e,
-0x106e,0x106e,0x106e,0x106e,0x106e,0x1077,0x106e,0x1077,0x106e,0x1077,0x1077,0x106e,0x107a,0x107a,0x1080,0x1086,
-0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,
-0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1080,0x107a,0x107a,
-0x107a,0x107a,0x1080,0x1080,0x107a,0x107a,0x1083,0x1452,0x144f,0x144f,0x1086,0x1086,0x107d,0x107d,0x107d,0x107d,
-0x107d,0x107d,0x107d,0x107d,0x107d,0x107d,0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x109b,0x109b,0x109b,0x109b,
-0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,
-0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x10a4,0x10a4,0x10a4,0x10a4,
-0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,
-0x10a4,0x10a4,0x10a4,0x10a4,0x10a7,0x10a7,0x10a7,0x10aa,0x10a7,0x10a7,0x10ad,0x10ad,0x10b0,0x10b0,0x10b0,0x10b0,
-0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,
-0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b9,0x10b9,0x10b9,0x10b9,
-0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10bc,0x10b3,0x10c2,0x10bf,0x10b9,0x10b9,0x10b9,0x10b9,
-0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,
-0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x1389,0x1386,0x10d4,0x10ce,
-0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d1,0x1152,0x10c5,0x10c5,0x10c5,0x10cb,
-0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x10c8,0x10c8,0x10cb,0x10d7,0x10d4,0x10ce,0x10d4,0x10ce,
-0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,
-0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x10d4,0x10ce,0x156f,0x156c,0x156f,0x156c,
-0x1572,0x1572,0x174f,0x1458,0x10e0,0x10e0,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,
+0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xc5a,0xcd5,0xd41,0xdc2,0xdc2,
+0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xe76,0xe76,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xed9,0xfc6,
+0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0x1284,0x1284,0x1263,0xcf9,0xcf9,0xcf9,0xcf9,
+0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,
+0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xcf9,0xd08,0xd08,0xd08,0xd08,
+0xd08,0xd08,0xcff,0xcff,0xcff,0xcff,0xcff,0xcfc,0xd11,0xd11,0xd11,0xd0b,0xd11,0xd11,0xd11,0xd11,
+0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd0b,0xd11,0xd11,0xd11,0xd11,0xd05,0xd05,0xd0e,0xd0e,
+0xd0e,0xd0e,0xd02,0xd02,0xd02,0xd02,0xd02,0xd08,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,
+0xdd7,0xdd7,0xdd7,0xdd7,0xdd4,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xd11,0xd11,0xd11,0xd11,
+0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd0b,0xd11,0xd11,0xd11,0xd11,0xd11,
+0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd05,0xd05,0xd05,0xd08,0xd08,0xd08,0xd08,
+0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,
+0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd14,0xd14,0xd14,0xd14,
+0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xdda,0xdda,0xdda,0xdda,0xdda,0xdda,
+0xeeb,0xeeb,0xeeb,0xeeb,0xeeb,0xeeb,0xeeb,0x10f2,0x10f2,0xfe1,0xfe1,0xfe1,0xd17,0xd17,0xd17,0xd17,
+0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,
+0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd1d,0xd1d,0xd1d,0xd1d,
+0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,
+0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd1d,0xd26,0xd26,0xd26,0xd26,
+0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,
+0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd26,0xd32,0xd32,0xd32,0xd32,
+0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,
+0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd32,0xd3e,0xd3e,0xd3e,0xd3e,
+0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,
+0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xde0,0xde0,0xde0,0xde0,
+0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,
+0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde6,0xde6,0xde6,0xde6,
+0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,
+0xde6,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde6,0xde6,0xde6,0xde6,
+0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,
+0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xea6,0xea6,0xdf8,0xdf8,
+0xeee,0xeee,0xeee,0xeee,0xeee,0xeee,0xeee,0xfed,0xfed,0xfed,0xfed,0xfed,0xfea,0xfea,0xfea,0xfea,
+0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0xe07,0xe04,0xe07,0xe04,
+0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,
+0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe07,0xe04,0xe13,0xe13,0xe13,0xe13,
+0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,
+0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0x1b0c,0xe16,0xe16,0xe16,0xe16,
+0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,
+0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0xe16,0x1b09,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,
+0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0xea0,0xea0,0xea0,0xea0,
+0xea0,0xea0,0xea0,0xea0,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,0xe31,
+0xe31,0xe31,0xe31,0xef1,0xef1,0xef1,0xef1,0xff0,0xff0,0xff0,0xff0,0xff0,0xe3a,0xe3a,0xe3a,0xe3a,
+0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,
+0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe43,0xe43,0xe43,0xe43,
+0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,
+0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe43,0xe4c,0xe4c,0xe4c,0xe4c,
+0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,
+0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe46,0xe49,0xe49,0xe49,0xe49,
+0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,
+0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe49,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe55,0xe55,0xe55,0xe55,
+0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe55,0xe52,0xe52,0xe52,0xe52,0xe52,0xe52,
+0xe52,0xe52,0xe4f,0xe58,0xffc,0xff6,0x1005,0xff3,0xe55,0xe55,0xff3,0xff3,0xe67,0xe67,0xe5b,0xe67,
+0xe67,0xe67,0xe5e,0xe67,0xe67,0xe67,0xe67,0xe5b,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,
+0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe6a,0xe6a,0xe6a,0xe6a,
+0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,
+0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe6a,0xe82,0xe82,0xe82,0xe82,
+0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,
+0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xe82,0xea3,0xea3,0xea3,0xea3,
+0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0x10fb,0x10fb,0x10fb,0x10fb,
+0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0x10fb,0xed6,0xed6,0xed6,0xed3,
+0xed3,0xed3,0xed3,0xed3,0x1134,0x1380,0x1380,0x1380,0x1380,0x1305,0x1305,0x1305,0x1383,0x1308,0x1308,0x1383,
+0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x14c4,0x1785,0x1785,0x1785,0x1785,0x184b,0xeeb,0xeeb,0xeeb,0xeeb,
+0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe1,0xfe4,0xfe4,0xfe4,0xfe4,
+0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfea,0xfea,0xfea,0xfea,
+0xfea,0xfea,0xfea,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,
+0x14df,0x14e2,0x1854,0x1854,0x18d5,0x1854,0x1bb4,0x178b,0x131d,0x113d,0xeee,0xeee,0xf0c,0xf0c,0xf0c,0xf0c,
+0xf1e,0xf27,0xf2a,0xf27,0xf2a,0xf27,0xf2a,0xf27,0xf2a,0xf27,0xf2a,0xf27,0xf27,0xf27,0xf2a,0xf27,
+0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,0xf27,
+0xf27,0xf27,0xf27,0xf27,0xf0f,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf0c,0xf21,0xf0c,0xf21,0xf1e,0xf1e,
+0xf33,0xf30,0xf33,0xf33,0xf33,0xf30,0xf30,0xf33,0xf30,0xf33,0xf30,0xf33,0xf30,0x1017,0x1017,0x1017,
+0x1152,0x100e,0x1017,0x100e,0xf30,0xf33,0xf30,0xf30,0x100e,0x100e,0x100e,0x100e,0x1011,0x1014,0x1152,0x1152,
+0xf36,0xf36,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,
+0x1020,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,
+0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,
+0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,0xf3c,
+0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,
+0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,0xf4b,
+0xf4b,0xf4b,0xf4b,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,0x1500,
+0x1500,0x1500,0x1500,0x1500,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,
+0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,0xf51,
+0xf51,0xf51,0xf51,0xf51,0xf99,0xfb1,0xfa8,0xfae,0xfae,0xfb1,0xfb1,0xfa8,0xfa8,0xfae,0xfae,0xfae,
+0xfae,0xfae,0xfb1,0xfb1,0xfb1,0xf99,0xf99,0xf99,0xf99,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,
+0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xfb1,0xf99,0xfa8,0xfab,0xf99,0xf99,0xfae,0xfae,0xfae,0xfae,0xfae,
+0xfae,0xf9c,0xfb1,0xfae,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0x111c,0x111c,
+0x1119,0x1116,0xfa2,0xfa2,0xfc9,0xfc9,0xfc9,0xfc9,0x1284,0x1284,0x1263,0x1263,0x1263,0x1260,0x1260,0x1260,
+0x1260,0x1263,0x1386,0x1263,0x1263,0x1263,0x1260,0x1263,0x1284,0x1260,0x1260,0x1260,0x1263,0x1263,0x1260,0x1260,
+0x1263,0x1260,0x1260,0x1263,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,0xfe1,0xfe1,0xfe4,0xfe4,0xfe4,0xfe4,0xfe4,
+0xfe4,0x14d9,0x14d9,0x14d9,0x10f2,0xfe1,0xfe1,0xfe1,0xfe1,0x1290,0x126c,0x126c,0x126c,0x126c,0x14d9,0x14d9,
+0x14d9,0x14d9,0x14d9,0x14d9,0x1002,0x1002,0xfff,0xff9,0xfff,0xff9,0xfff,0xff9,0xfff,0xff9,0xff6,0xff6,
+0xff6,0xff6,0x100b,0x1008,0xff6,0x114f,0x13da,0x13dd,0x13dd,0x13da,0x13da,0x13da,0x13da,0x13da,0x13e0,0x13e0,
+0x14f4,0x14e8,0x14e8,0x14e5,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x101d,0x101a,0x101a,0x1029,
+0x1020,0x1329,0x1326,0x16da,0x1329,0x1326,0x13e9,0x13e6,0x14f7,0x14f7,0x14fd,0x14f7,0x14fd,0x14f7,0x14fd,0x14f7,
+0x14fd,0x14f7,0x14fd,0x14f7,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,
+0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,0x1029,0x1020,
+0x1029,0x1020,0x1029,0x1020,0x1023,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1029,0x1020,0x1029,
+0x1020,0x1029,0x1029,0x1020,0x102c,0x102c,0x1032,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,
+0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,
+0x1038,0x1038,0x1038,0x1038,0x1038,0x1032,0x102c,0x102c,0x102c,0x102c,0x1032,0x1032,0x102c,0x102c,0x1035,0x13f2,
+0x13ef,0x13ef,0x1038,0x1038,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x13f5,0x13f5,
+0x13f5,0x13f5,0x13f5,0x13f5,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,
+0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,
+0x104d,0x104d,0x104d,0x104d,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,
+0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1056,0x1059,0x1059,0x1059,0x105c,
+0x1059,0x1059,0x105f,0x105f,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,
+0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,0x1062,
+0x1062,0x1062,0x1062,0x1062,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,
+0x106e,0x1065,0x1074,0x1071,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,
+0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,0x106b,
+0x106b,0x106b,0x106b,0x106b,0x132f,0x132c,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,
+0x1086,0x1080,0x1083,0x1104,0x1077,0x1077,0x1077,0x107d,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,
+0x107a,0x107a,0x107d,0x1089,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,
+0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,0x1086,0x1080,
+0x1086,0x1080,0x1086,0x1080,0x150c,0x1509,0x150c,0x1509,0x150f,0x150f,0x16e3,0x13f8,0x1092,0x1092,0x1095,0x1095,
+0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,
+0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1095,0x1092,0x1092,0x1092,0x1092,
+0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x109b,0x109b,
+0x109b,0x109b,0x109b,0x109e,0x109e,0x109e,0x10f8,0x10a7,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,
+0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10b6,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,
+0x10a1,0x10a1,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,
+0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,
+0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,
+0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,
+0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,
+0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10e0,0x10e0,0x10e0,0x10e0,0x10f5,0x10e0,0x10e0,0x10e0,
+0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,
+0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,
0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,
-0x10e3,0x10e3,0x10e3,0x10e3,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,
-0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10e9,0x10e9,0x10e9,0x10e9,0x10e9,0x10ec,0x10ec,0x10ec,0x1146,0x10f5,
-0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,0x1104,
-0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10ef,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,
-0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,0x10f2,
-0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,
-0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,0x1113,
-0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,
-0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,
-0x112e,0x112e,0x112e,0x112e,0x1143,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,
-0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,0x112e,
-0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,
-0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,
-0x113d,0x113d,0x113d,0x113d,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x14e2,0x17cd,0x17cd,0x17cd,
-0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,0x191d,
-0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,
-0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11a9,0x11a9,0x11ac,0x11ac,0x11b2,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,
-0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
-0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,0x11b8,
-0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,
-0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,
-0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,
-0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11dc,0x11e2,
-0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,
-0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,0x11ee,
-0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,0x11f4,
-0x11f4,0x132f,0x11fa,0x1332,0x11fa,0x11fa,0x11fa,0x11fa,0x11f7,0x11f7,0x11f7,0x11fa,0x1752,0x1755,0x197a,0x1977,
-0x11fd,0x11fd,0x11fd,0x120c,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,
-0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,
-0x1212,0x1212,0x1212,0x1200,0x120c,0x120c,0x11fd,0x11fd,0x11fd,0x11fd,0x120c,0x120c,0x11fd,0x11fd,0x120c,0x120c,
+0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10e3,0x10ef,0x10ef,0x10ef,0x10ef,0x128a,0x128a,0x128a,0x128a,
+0x128a,0x128a,0x128a,0x128a,0x1482,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x1764,0x18b4,0x18b4,
+0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,
+0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x115b,0x115b,
+0x115e,0x115e,0x1164,0x115b,0x115b,0x115b,0x115b,0x115b,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,
+0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,
+0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x116a,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,
+0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,
+0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1185,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,
+0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,
+0x1191,0x1191,0x1191,0x1191,0x1191,0x1191,0x118e,0x1194,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,
+0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,
+0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a0,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,
+0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x12d5,0x11ac,0x12d8,0x11ac,0x11ac,0x11ac,0x11ac,
+0x11a9,0x11a9,0x11a9,0x11ac,0x16e6,0x16e9,0x1911,0x190e,0x11af,0x11af,0x11af,0x11be,0x11c4,0x11c4,0x11c4,0x11c4,
+0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,
+0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11b2,0x11be,0x11be,0x11af,0x11af,
+0x11af,0x11af,0x11be,0x11be,0x11af,0x11af,0x11be,0x11be,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,
+0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d3,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11d0,0x11ca,
+0x11ca,0x11ca,0x11d0,0x11cd,0x1515,0x1518,0x151b,0x151b,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,
+0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11d6,0x11e2,0x11d6,0x11d6,0x11d6,0x11eb,0x11eb,0x11d6,
+0x11d6,0x11eb,0x11e2,0x11eb,0x11eb,0x11e2,0x11d6,0x11d9,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,
+0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,
+0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,
+0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,
+0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,
+0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,0x1215,
+0x1215,0x1215,0x1215,0x1215,0x1215,0x1212,0x1212,0x1212,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,
0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,
-0x1221,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x1218,0x1218,0x1218,0x121e,0x121b,0x1578,0x157b,0x157e,0x157e,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1224,0x1230,0x1224,0x1224,0x1224,0x1239,0x1239,0x1224,0x1224,0x1239,0x1230,0x1239,0x1239,0x1230,0x1224,0x1227,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,0x1230,
-0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,
-0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,0x124b,
-0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,
-0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1263,0x1260,0x1260,0x1260,
-0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,
-0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,0x126c,
-0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,
-0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,0x127b,
-0x1281,0x1281,0x1290,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,
-0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1296,0x1293,0x1296,0x1293,0x1293,0x1293,
-0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1293,0x1296,0x1293,0x1293,0x1293,0x1293,
-0x1290,0x1290,0x1290,0x1284,0x1284,0x1284,0x1284,0x1290,0x1290,0x128a,0x1287,0x128d,0x128d,0x129c,0x1299,0x1299,
-0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
+0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x121e,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,
+0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,
+0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x122d,0x1233,0x1233,0x1242,0x1245,0x1245,0x1245,0x1245,0x1245,
+0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,
+0x1245,0x1245,0x1248,0x1245,0x1248,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,0x1245,
+0x1245,0x1245,0x1245,0x1248,0x1245,0x1245,0x1245,0x1245,0x1242,0x1242,0x1242,0x1236,0x1236,0x1236,0x1236,0x1242,
+0x1242,0x123c,0x1239,0x123f,0x123f,0x124e,0x124b,0x124b,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
+0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
+0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1257,0x1257,0x1257,0x1254,0x1254,0x1254,0x1251,0x1251,
+0x1251,0x1251,0x1254,0x1251,0x1251,0x1251,0x1257,0x1254,0x1257,0x1254,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
+0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,
+0x1251,0x1251,0x1251,0x1251,0x1251,0x1257,0x1254,0x1254,0x1251,0x1251,0x1251,0x1251,0x1272,0x1272,0x1272,0x1272,
+0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1275,0x1275,0x1275,0x125a,0x1917,0x137d,0x127e,0x137d,0x137d,
+0x137d,0x137d,0x137d,0x137d,0x137d,0x137d,0x137d,0x137d,0x137d,0x127e,0x137d,0x127e,0x1263,0x1263,0x130b,0x1260,
+0x130b,0x130b,0x130b,0x130b,0x1260,0x1260,0x1284,0x1260,0x1260,0x1260,0x1260,0x1260,0x1260,0x1263,0x1284,0x1284,
+0x1263,0x1284,0x1260,0x1263,0x1263,0x1266,0x1284,0x1260,0x1260,0x1284,0x1263,0x1263,0x137a,0x137a,0x137a,0x137a,
+0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x126f,0x126f,0x126f,0x126f,0x1392,0x1374,0x1278,0x1392,0x1392,0x1392,
+0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1392,0x1815,0x1815,0x1815,0x1815,0x1815,0x1272,0x1272,0x1272,0x1272,
+0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x151e,0x151e,0x1a64,0x1a64,0x1a64,0x1272,0x1272,0x1272,0x1272,
+0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x1272,0x137d,0x137d,0x127e,0x137d,
+0x137d,0x137d,0x127e,0x137d,0x137d,0x137d,0x1278,0x1278,0x1278,0x1278,0x1278,0x1377,0x137a,0x137a,0x137a,0x137a,
+0x137a,0x137a,0x137a,0x127b,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x127b,0x137a,0x137a,0x137a,0x137a,
+0x137a,0x137a,0x137a,0x137a,0x137a,0x137a,0x13fb,0x13fb,0x19c2,0x1a64,0x1a64,0x1a64,0x137a,0x137a,0x137a,0x137a,
+0x137a,0x137a,0x137a,0x137a,0x137a,0x127b,0x137a,0x127b,0x127b,0x137a,0x137a,0x127b,0x129f,0x129f,0x129f,0x129f,
0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
-0x12a5,0x12a5,0x12a5,0x12a2,0x12a2,0x12a2,0x129f,0x129f,0x129f,0x129f,0x12a2,0x129f,0x129f,0x129f,0x12a5,0x12a2,
-0x12a5,0x12a2,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,
-0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x12a5,0x12a2,0x12a2,
-0x129f,0x129f,0x129f,0x129f,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c9,
-0x12c9,0x12c9,0x12a8,0x1980,0x13d7,0x12d2,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,0x13d7,
-0x13d7,0x12d2,0x13d7,0x12d2,0x12b1,0x12b1,0x1365,0x12ae,0x1365,0x1365,0x1365,0x1365,0x12ae,0x12b4,0x12db,0x12ae,
-0x12ae,0x12ae,0x12ae,0x12ae,0x12b4,0x12b7,0x12db,0x12db,0x12b7,0x12db,0x12ae,0x12b7,0x12b7,0x12ba,0x12db,0x12ae,
-0x12ae,0x12db,0x12b1,0x12b1,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x12c3,0x12c3,
-0x12c3,0x12c3,0x13ef,0x13ce,0x12cc,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x13ef,0x187e,
-0x187e,0x187e,0x187e,0x187e,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x1581,
-0x1581,0x1ad0,0x1ad0,0x1ad0,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,0x12c6,
-0x12c6,0x12c6,0x12c6,0x12c6,0x13d7,0x13d7,0x12d2,0x13d7,0x13d7,0x13d7,0x12d2,0x13d7,0x13d7,0x13d7,0x12cc,0x12cc,
-0x12cc,0x12cc,0x12cc,0x13d1,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x12cf,0x13d4,0x13d4,0x13d4,0x13d4,
-0x13d4,0x13d4,0x13d4,0x12cf,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x145b,0x145b,
-0x1a2e,0x1ad0,0x1ad0,0x1ad0,0x13da,0x13da,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x12cf,0x13d4,0x12cf,
-0x12cf,0x13d4,0x13da,0x12d5,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,
-0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,
-0x12f9,0x12f9,0x12f9,0x12f9,0x1383,0x1380,0x1383,0x1380,0x1383,0x1380,0x1383,0x1380,0x1383,0x1380,0x1449,0x1560,
-0x1560,0x1560,0x17fa,0x196e,0x1560,0x1560,0x1749,0x1749,0x1749,0x1743,0x1749,0x1743,0x1971,0x196e,0x1a2b,0x1a28,
-0x1a2b,0x1a28,0x1a2b,0x1a28,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,
-0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,
-0x13a7,0x13a7,0x13a7,0x13a7,0x13bc,0x13ad,0x13bc,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,
-0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,
-0x13bf,0x13bf,0x13bf,0x13bf,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13c5,0x13c5,0x13c5,0x13c5,
-0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,
-0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13cb,0x13cb,0x13cb,0x13cb,
-0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,
-0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13fb,0x13f8,0x1923,0x1923,
-0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,
-0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1401,0x1401,0x1404,0x1404,0x1404,0x1404,0x1404,0x1401,0x1404,0x1404,0x1404,0x1401,0x1404,0x1401,0x1404,
-0x1401,0x1404,0x1404,0x1404,0x1404,0x1404,0x1407,0x1404,0x1404,0x1404,0x1404,0x1401,0x1404,0x1401,0x1401,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1401,0x1401,0x1401,0x1401,
-0x1401,0x1401,0x1401,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,
-0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x158a,0x158a,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1596,0x1590,0x1590,0x1596,0x1596,0x1596,0x1596,
-0x1596,0x1596,0x1596,0x1596,0x1596,0x17d0,0x17d0,0x17d0,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1596,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1596,0x17d0,0x17d0,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1407,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1590,0x1590,0x1596,0x1596,0x1590,0x1596,0x1596,0x1596,0x158d,0x158d,0x1596,0x1596,
-0x1404,0x1404,0x1407,0x1407,0x1407,0x1701,0x1404,0x1407,0x1404,0x1404,0x1407,0x1599,0x1599,0x1596,0x1596,0x17d0,
-0x17d0,0x17d0,0x17d0,0x17d0,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1590,0x1590,0x1596,0x1701,0x1596,0x1590,0x1596,0x17d0,0x17d0,0x17d0,0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1596,
-0x1404,0x1596,0x1407,0x1407,0x1404,0x1404,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,
-0x1407,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,
-0x1407,0x1407,0x1407,0x1407,0x1407,0x1404,0x1404,0x1404,0x1407,0x1404,0x1404,0x1404,0x1404,0x1407,0x1407,0x1407,
-0x1404,0x1407,0x1407,0x1407,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1407,0x1404,0x1407,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1701,0x1404,0x1404,0x1404,0x1404,0x1596,0x1590,0x17d0,
-0x145e,0x145e,0x145e,0x145e,0x158a,0x158a,0x158d,0x158d,0x158d,0x1593,0x1596,0x17d0,0x17d0,0x17d0,0x17d0,0x1758,
-0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,
-0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1596,0x1590,0x1590,0x1596,0x1599,0x1599,0x1596,0x1596,
-0x1596,0x1596,0x1887,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1590,0x1596,0x1590,0x1590,0x1590,0x1590,
-0x1596,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1590,0x1590,0x1590,0x1596,0x158d,0x158d,0x158d,0x158d,
-0x158d,0x158d,0x1596,0x1404,0x1404,0x1404,0x1404,0x1404,0x14e8,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,
-0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x14e8,0x140a,0x140a,0x140a,0x14e8,0x140a,0x14e8,
-0x140a,0x14e8,0x140a,0x14e8,0x140a,0x140a,0x140a,0x14e8,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x14e8,0x14e8,
-0x140a,0x140a,0x140a,0x140a,0x14e8,0x140a,0x14e8,0x14e8,0x140a,0x140a,0x140a,0x140a,0x14e8,0x140a,0x140a,0x140a,
-0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x1707,0x1707,0x17d6,0x17d6,0x140d,0x140d,0x140d,
-0x140a,0x140a,0x140a,0x140d,0x140d,0x140d,0x140d,0x140d,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,
-0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,
-0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,
-0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1413,0x1410,0x1410,0x1410,0x1410,
-0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1413,0x1413,0x1413,0x1410,
-0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1410,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,
-0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,
-0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1803,0x1803,0x1800,0x175b,0x1464,0x1464,0x1464,0x1464,
-0x1464,0x1464,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,
-0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x1464,0x15a2,0x1470,0x1470,0x1470,0x1482,0x1482,0x1482,0x1482,0x1482,
-0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,
-0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,
-0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,
-0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x149d,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,
-0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,
-0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x14a3,0x1a34,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,
-0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,
-0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14a6,0x14ac,0x14ac,0x14b8,0x14be,0x14be,0x14be,0x14be,0x14be,
-0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,
-0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14b8,0x14b8,0x14b8,0x14ac,0x14ac,
-0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14b8,0x14bb,0x14be,0x14c1,0x14c1,0x14be,0x14c4,0x14c4,0x14af,
-0x14b2,0x1764,0x1767,0x1767,0x1767,0x15ab,0x1adc,0x1ad9,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,0x14b5,
-0x14b5,0x14b5,0x15a8,0x176d,0x1770,0x176a,0x1773,0x1773,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,
-0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,
-0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
-0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
-0x153c,0x153c,0x1956,0x1956,0x1956,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,
-0x153c,0x1a22,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x18ba,0x1956,0x1956,0x1956,0x1956,0x1956,
-0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1590,0x1590,0x1596,0x1596,0x1596,0x1590,0x1590,0x1590,
-0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1596,0x1596,0x158d,0x158d,0x158d,0x158d,
-0x158d,0x158d,0x158d,0x158d,0x1596,0x1596,0x1596,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,
-0x1590,0x1590,0x1596,0x1596,0x1596,0x1596,0x1590,0x1590,0x1599,0x1590,0x1590,0x1590,0x1590,0x1704,0x1704,0x1590,
-0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1884,0x1596,0x1590,0x1590,0x1596,0x1590,0x1590,0x1590,
-0x1590,0x1590,0x1590,0x1590,0x1590,0x1596,0x1596,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,0x1590,
-0x1596,0x1590,0x1590,0x1590,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,
-0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,
-0x15ba,0x15ba,0x15ba,0x15ba,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,
-0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,
-0x15cc,0x15cc,0x15cc,0x15cc,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,
-0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,
-0x15d2,0x15d2,0x15d2,0x15d2,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,
-0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,
-0x15d5,0x15d5,0x15d5,0x15d5,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,
-0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,
-0x1614,0x1614,0x1614,0x1605,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,
-0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x1617,
-0x1620,0x1620,0x1620,0x1620,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,0x1623,
-0x1623,0x1623,0x1623,0x1623,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x1635,0x163e,0x163e,0x163e,
-0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,
-0x163e,0x163e,0x163e,0x163e,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,
-0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,0x1647,
-0x1647,0x1647,0x1647,0x1647,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,
-0x1659,0x1659,0x1659,0x1659,0x1656,0x1656,0x1656,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x1656,
-0x1656,0x164a,0x1656,0x164d,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,
-0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,0x1659,
-0x1659,0x1659,0x1659,0x1659,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,
-0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,
-0x167d,0x167a,0x167a,0x167a,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,
-0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x168c,0x168c,0x168c,0x1689,0x1689,0x1689,
-0x1686,0x1686,0x1686,0x1686,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
-0x169b,0x169b,0x169b,0x169b,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x16a1,0x16a1,0x1695,0x1692,0x1692,
-0x1692,0x1692,0x1692,0x1692,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
-0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,0x169b,
-0x169b,0x169b,0x169b,0x169b,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,
-0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a4,0x16a4,0x16a4,0x16a4,0x16a4,
-0x16a4,0x16a4,0x16a4,0x16a4,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,
-0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,0x16aa,
-0x16aa,0x16aa,0x16aa,0x16aa,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,
-0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,0x16ce,
-0x16ce,0x16ce,0x16ce,0x16ce,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
-0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,
-0x16d7,0x16d7,0x16d7,0x16d7,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,
-0x16ef,0x16ef,0x16ef,0x16ef,0x16da,0x16e9,0x16e9,0x16da,0x16da,0x16da,0x16da,0x16da,0x16da,0x16e9,0x16da,0x16ec,
-0x16ec,0x16da,0x16ec,0x16da,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,
-0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,
-0x16ef,0x16ef,0x16ef,0x16ef,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,
-0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,
-0x16f8,0x16f8,0x16f8,0x16f8,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,
-0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,
-0x16fe,0x16fe,0x16fe,0x16fe,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,
-0x1740,0x1740,0x1740,0x1740,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,0x1956,
-0x1956,0x1956,0x1956,0x1a22,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,
-0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,
-0x1761,0x1761,0x1761,0x1761,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,
-0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,
-0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x17a3,0x17a0,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,
-0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,
-0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,
-0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a6,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,
-0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,
-0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17a9,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,
+0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x129f,0x1329,0x1326,0x1329,0x1326,
+0x1329,0x1326,0x1329,0x1326,0x1329,0x1326,0x13e9,0x14fd,0x14fd,0x14fd,0x1791,0x1905,0x14fd,0x14fd,0x16dd,0x16dd,
+0x16dd,0x16d7,0x16dd,0x16d7,0x1908,0x1905,0x19bf,0x19bc,0x19bf,0x19bc,0x19bf,0x19bc,0x134d,0x134d,0x134d,0x134d,
+0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,
+0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x1362,0x1353,0x1362,0x1365,
+0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,
+0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1365,0x1353,0x1353,0x1353,0x1353,
+0x1353,0x1353,0x1353,0x1353,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,
+0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,0x136b,
+0x136b,0x136b,0x136b,0x136b,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,
+0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,0x1371,
+0x1371,0x1371,0x1371,0x1371,0x139b,0x1398,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,
+0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,
+0x18ba,0x18ba,0x18ba,0x18ba,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a1,0x13a1,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a1,0x13a4,0x13a4,0x13a4,0x13a1,0x13a4,0x13a1,0x13a4,0x13a1,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a7,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a1,0x13a4,0x13a1,0x13a1,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,
+0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x1527,0x1527,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x1767,0x1767,0x1767,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x152a,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x152a,0x1767,0x1767,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a7,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x152a,0x152a,0x152a,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x1527,0x1527,0x152a,0x152a,0x13a4,0x13a4,0x13a7,0x13a7,0x13a7,0x1692,0x13a4,0x13a7,
+0x13a4,0x13a4,0x13a7,0x152d,0x152d,0x152a,0x152a,0x1767,0x1767,0x1767,0x1767,0x1767,0x152a,0x152a,0x152a,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x152a,0x152a,0x152a,0x1692,0x152a,0x152a,0x152a,
+0x1767,0x1767,0x1767,0x176a,0x176a,0x176a,0x176a,0x176a,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x152a,0x13a4,0x152a,0x13a7,0x13a7,0x13a4,0x13a4,0x13a7,0x13a7,
+0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,
+0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a4,0x13a4,0x13a4,
+0x13a7,0x13a4,0x13a4,0x13a4,0x13a4,0x13a7,0x13a7,0x13a7,0x13a4,0x13a7,0x13a7,0x13a7,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a7,0x13a4,0x13a7,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x1692,0x13a4,0x13a4,0x13a4,0x13a4,0x152a,0x152a,0x1767,0x13fe,0x13fe,0x13fe,0x13fe,0x1527,0x1527,0x1527,0x1527,
+0x1527,0x1527,0x152a,0x1767,0x1767,0x1767,0x1767,0x16ec,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,
+0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x152d,0x152d,0x152a,0x152a,0x152a,0x152a,0x181e,0x152a,0x152a,0x152a,0x152a,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,
+0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x152a,0x13a4,0x13a4,0x13a4,0x13a4,0x13a4,0x1488,0x13aa,0x13aa,0x13aa,
+0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x1488,0x13aa,0x13aa,
+0x13aa,0x1488,0x13aa,0x1488,0x13aa,0x1488,0x13aa,0x1488,0x13aa,0x13aa,0x13aa,0x1488,0x13aa,0x13aa,0x13aa,0x13aa,
+0x13aa,0x13aa,0x1488,0x1488,0x13aa,0x13aa,0x13aa,0x13aa,0x1488,0x13aa,0x1488,0x1488,0x13aa,0x13aa,0x13aa,0x13aa,
+0x1488,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x1698,0x1698,0x176d,
+0x176d,0x13ad,0x13ad,0x13ad,0x13aa,0x13aa,0x13aa,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x1617,0x1617,0x1617,0x1617,
+0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x13b0,0x13b0,0x13b0,0x13b0,
+0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,
+0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b3,
+0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,
+0x13b3,0x13b3,0x13b3,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b0,0x13b6,0x13b6,0x13b6,0x13b6,
+0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,
+0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x13b6,0x179a,0x179a,0x1797,0x16ef,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1404,0x1404,0x1404,0x1404,
+0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404,0x1533,0x1407,0x1536,0x1407,0x1407,
+0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1407,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x16f2,
+0x16f2,0x1b39,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x17a0,0x1a67,0x1a67,0x1410,0x1410,0x1410,0x1422,
+0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,
+0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x143d,0x143d,0x143d,0x143d,
+0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,
+0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x1443,0x1443,0x1443,0x1443,
+0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,
+0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x1443,0x19c8,0x1446,0x1446,0x1446,0x1446,
+0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,
+0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x144c,0x144c,0x1458,0x145e,
+0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,
+0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x1458,
+0x1458,0x1458,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x144c,0x1458,0x145b,0x145e,0x1461,0x1461,
+0x145e,0x1464,0x1464,0x144f,0x1452,0x16f8,0x16fb,0x16fb,0x16fb,0x153c,0x1a70,0x1a6d,0x1455,0x1455,0x1455,0x1455,
+0x1455,0x1455,0x1455,0x1455,0x1455,0x1455,0x1539,0x1701,0x1704,0x16fe,0x1707,0x1707,0x147f,0x147f,0x147f,0x147f,
+0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,
+0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x147f,0x14d9,0x14d9,0x14d9,0x14d9,
+0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,
+0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x18ed,0x18ed,0x18ed,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,
+0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x19b6,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x14d9,0x1851,0x18ed,
+0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x152a,0x152a,0x152a,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,
+0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152d,0x152a,0x152a,0x152a,0x152a,0x1695,0x1695,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x181b,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,
+0x152a,0x152a,0x152a,0x152a,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,
+0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,0x154b,
+0x154b,0x154b,0x154b,0x154b,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,
+0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,
+0x155d,0x155d,0x155d,0x155d,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,
+0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,
+0x1563,0x1563,0x1563,0x1563,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,
+0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,0x1566,
+0x1566,0x1566,0x1566,0x1566,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,
+0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,
+0x15a5,0x15a5,0x15a5,0x1596,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,
+0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15ae,0x15a8,
+0x15b1,0x15b1,0x15b1,0x15b1,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,
+0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,
+0x15b4,0x15b4,0x15b4,0x15b4,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15c6,0x15cf,0x15cf,0x15cf,
+0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,0x15cf,
+0x15cf,0x15cf,0x15cf,0x15cf,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,
+0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,0x15d8,
+0x15d8,0x15d8,0x15d8,0x15d8,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,
+0x15ea,0x15ea,0x15ea,0x15ea,0x15e7,0x15e7,0x15e7,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15e7,
+0x15e7,0x15db,0x15e7,0x15de,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,
+0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,
+0x15ea,0x15ea,0x15ea,0x15ea,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,
+0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,
+0x160e,0x160b,0x160b,0x160b,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,
+0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x1617,0x161d,0x161d,0x161d,0x161a,0x161a,0x161a,
+0x1617,0x1617,0x1617,0x1617,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,
+0x162c,0x162c,0x162c,0x162c,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1620,0x1632,0x1632,0x1626,0x1623,0x1623,
+0x1623,0x1623,0x1623,0x1623,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,
+0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,
+0x162c,0x162c,0x162c,0x162c,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,
+0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1635,0x1635,0x1635,0x1635,0x1635,
+0x1635,0x1635,0x1635,0x1635,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,
+0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,0x163b,
+0x163b,0x163b,0x163b,0x163b,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,
+0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,
+0x165f,0x165f,0x165f,0x165f,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,
+0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,0x1668,
+0x1668,0x1668,0x1668,0x1668,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,
+0x1680,0x1680,0x1680,0x1680,0x166b,0x167a,0x167a,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x167a,0x166b,0x167d,
+0x167d,0x166b,0x167d,0x166b,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,
+0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,0x1680,
+0x1680,0x1680,0x1680,0x1680,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,
+0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,
+0x1689,0x1689,0x1689,0x1689,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,
+0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,
+0x168f,0x168f,0x168f,0x168f,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,
+0x16d4,0x16d4,0x16d4,0x16d4,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,0x18ed,
+0x18ed,0x18ed,0x18ed,0x19b6,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,
+0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,
+0x16f5,0x16f5,0x16f5,0x16f5,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,
+0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,
+0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x173a,0x1737,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,
+0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x1734,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,
+0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,
+0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,
+0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,
+0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1740,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,
+0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,
+0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,
+0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,
+0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,
+0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,
+0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x175b,0x175b,0x175b,0x175b,0x1758,
+0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x175b,0x175b,0x175b,
+0x175b,0x175b,0x175b,0x175b,0x175b,0x1758,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,
+0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,
+0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x175b,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,
+0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,
+0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,0x185d,
+0x185d,0x185d,0x185d,0x185d,0x1ad3,0x1a28,0x1a28,0x1a2b,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,0x1776,
+0x1779,0x1827,0x1827,0x1827,0x1827,0x1827,0x1827,0x18c3,0x1776,0x1776,0x1776,0x1776,0x1776,0x1824,0x1824,0x1824,
+0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,
+0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x1776,0x19a1,0x19a1,0x1a28,0x1a28,0x1a28,0x1a28,0x1a28,
+0x1a28,0x1a28,0x1a28,0x1ad0,0x1ba2,0x1a2b,0x1a2b,0x1a2b,0x18c0,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,
+0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c0,0x18c0,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,0x1a67,
+0x1b39,0x1b3c,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x1b36,0x191a,0x179d,0x179d,0x179d,0x179d,
+0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1827,0x1824,
+0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x1827,0x18c3,0x18c3,0x1827,0x1827,0x1827,0x1827,0x1827,
+0x1827,0x1827,0x1824,0x17a6,0x1827,0x1827,0x1827,0x1a28,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x17a6,0x1824,
+0x1824,0x1824,0x1824,0x1824,0x18c0,0x19a1,0x19a1,0x19a1,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,
+0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x18c0,0x17bb,0x17bb,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,
+0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,
+0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,
0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,
-0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,
-0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,
-0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,
-0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,
-0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c4,0x17c4,0x17c4,0x17c4,0x17c1,
-0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c1,0x17c4,0x17c4,0x17c4,
-0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c1,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,
-0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,
-0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17c4,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,
-0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,
-0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x17dc,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,0x18c6,
-0x18c6,0x18c6,0x18c6,0x18c6,0x1b3f,0x1a94,0x1a94,0x1a97,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,0x17df,
-0x17e2,0x1890,0x1890,0x1890,0x1890,0x1890,0x1890,0x192c,0x17df,0x17df,0x17df,0x17df,0x17df,0x188d,0x188d,0x188d,
-0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,
-0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x1890,0x188d,
-0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1890,0x192c,0x192c,0x1890,0x1890,0x1890,0x1890,0x1890,
-0x1890,0x1890,0x188d,0x180f,0x1890,0x1890,0x1890,0x1a94,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x180f,0x188d,
-0x188d,0x188d,0x188d,0x188d,0x1929,0x1a0a,0x1a0a,0x1a0a,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,
-0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x188d,0x1929,0x1824,0x1824,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,
-0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,
-0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,
-0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,
-0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,
-0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x186f,0x186f,0x186f,
-0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x185a,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,
-0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,
-0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,
-0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,
-0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,
-0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,
-0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1899,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,
-0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x1b48,0x18f0,0x18f0,0x18f0,0x18f0,0x1a46,0x1a46,0x18f3,0x18f3,
-0x18f3,0x18f3,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18db,0x18ed,
-0x18de,0x18e1,0x18e4,0x18f6,0x18f6,0x1995,0x18e7,0x18e7,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,
-0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,
-0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x18f0,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,
-0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x18fc,0x1902,0x18ff,0x18ff,0x18ff,
-0x18ff,0x190e,0x1914,0x18ff,0x18ff,0x18ff,0x18ff,0x190b,0x1911,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,0x18ff,
-0x18ff,0x18ff,0x18ff,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,
-0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1911,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,
-0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,
-0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1923,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1929,0x1a0a,
-0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,
-0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1a0a,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,
-0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,
-0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1932,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,
-0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,
-0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x1938,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,
-0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,
-0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19aa,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,
-0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,
-0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19c5,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,
-0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,
-0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19cb,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,
-0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,
-0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e6,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,
-0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,
-0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19e9,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,
-0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,
-0x19f2,0x19f2,0x19f2,0x19f2,0x19f2,0x19ef,0x19ef,0x19ef,0x1a0a,0x1a0a,0x1a0a,0x1b3c,0x1b3c,0x1a94,0x1a94,0x1a94,
-0x1a94,0x1a94,0x1a94,0x1b3c,0x1b3c,0x1b3c,0x1a94,0x1a94,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0a,0x1a10,0x1a10,0x1a0a,
-0x1a10,0x1a10,0x1a94,0x1a97,0x1a94,0x1a94,0x1a94,0x1a94,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,
-0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,
-0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a49,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,
-0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,
-0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a70,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,
-0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1aaf,0x1aaf,0x1a79,0x1aaf,0x1a79,0x1a79,0x1a79,0x1a79,
-0x1a79,0x1a79,0x1a79,0x1a79,0x1a79,0x1a7f,0x1a7f,0x1a7f,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,
-0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,
-0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1a8b,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,
-0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,
-0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b1e,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,
-0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,
-0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b2a,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,
-0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,
-0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b4e,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,
-0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,
-0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0x1b51,0,0,0,0
+0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x17bb,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,
+0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1806,0x1806,0x1806,
+0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x17f1,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,
+0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,
+0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,
+0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,
+0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,
+0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,
+0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1830,0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,
+0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,0x1adc,0x1887,0x1887,0x1887,0x1887,0x19da,0x19da,0x188a,0x188a,
+0x188a,0x188a,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1872,0x1884,
+0x1875,0x1878,0x187b,0x188d,0x188d,0x192c,0x187e,0x187e,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,
+0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,
+0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x1887,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,
+0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x1893,0x1899,0x1896,0x1896,0x1896,
+0x1896,0x18a5,0x18ab,0x1896,0x1896,0x1896,0x1896,0x18a2,0x18a8,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,0x1896,
+0x1896,0x1896,0x1896,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,
+0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18a8,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,0x18b4,
+0x18b4,0x18b4,0x18b4,0x199b,0x199b,0x199b,0x199b,0x199b,0x1ac7,0x1ac7,0x1ac7,0x1ac7,0x1ac7,0x1ac7,0x1ac7,0x1ac7,
+0x1ac7,0x1ac7,0x1ac7,0x1ac7,0x1ac7,0x1b93,0x1b93,0x1b93,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,
+0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,
+0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18ba,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,
+0x18c0,0x18c0,0x18c0,0x18c0,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x1a28,0x1ad0,0x19a1,0x19a1,0x19a1,0x19a1,0x1ad3,
+0x1ad0,0x1ba2,0x19a1,0x1a28,0x19a1,0x19a1,0x19a1,0x19a1,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x18c0,0x19a1,
+0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,
+0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,
+0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,
+0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18c9,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,
+0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,
+0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x18cc,0x1ba5,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,
+0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,
+0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x18cf,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,
+0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,
+0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x1941,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,
+0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,
+0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x195c,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,
+0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,
+0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x1962,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,
+0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,
+0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,
+0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,
+0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1980,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,
+0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,0x1989,
+0x1989,0x1989,0x1989,0x1989,0x1989,0x1986,0x1986,0x1986,0x19a1,0x19a1,0x19a1,0x1ad0,0x1ad0,0x1a28,0x1a28,0x1a28,
+0x1a28,0x1a28,0x1a28,0x1ad0,0x1ad0,0x1ad0,0x1a28,0x1a28,0x19a1,0x19a1,0x19a1,0x19a1,0x19a1,0x19a4,0x19a4,0x19a1,
+0x19a4,0x19a4,0x1a28,0x1a2b,0x1a28,0x1a28,0x1a28,0x1a28,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,
+0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,
+0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x19dd,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,
+0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,
+0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a04,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,
+0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a43,0x1a43,0x1a0d,0x1a43,0x1a0d,0x1a0d,0x1a0d,0x1a0d,
+0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a0d,0x1a13,0x1a13,0x1a13,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,
+0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,
+0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1a1f,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,
+0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,
+0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1ab2,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,
+0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,
+0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,
+0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,
+0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae2,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,
+0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,
+0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1ae5,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,
+0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,
+0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b5a,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,
+0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,
+0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b7b,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,
+0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,
+0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b8d,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,
+0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,
+0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0x1b90,0,0,0,0
};
static const UTrie2 propsVectorsTrie={
propsVectorsTrie_index,
- propsVectorsTrie_index+5024,
+ propsVectorsTrie_index+5188,
NULL,
- 5024,
- 26204,
+ 5188,
+ 26872,
0xa40,
- 0x1420,
+ 0x14c4,
0x0,
0x0,
0x110000,
- 0x79f8,
+ 0x7d38,
NULL, 0, FALSE, FALSE, 0, NULL
};
-static const uint32_t propsVectors[6999]={
-0x67,0,0,0x67,0,0x4e00000,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67,
-0,0,0xc67,0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0,
-0,0x1267,0,0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0,
-0x1767,0,0,0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67,
-0,0,0x1f67,0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0,
-0,0x2567,0,0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000,
-0x2b67,0,0,0x2d67,0,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67,0,0,0x3b67,
-0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0,0,0x4467,0,
-0,0x4867,0,0,0x4967,0,0,0x4a67,0,0,0x5067,0,0,0x5167,0,0,
-0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767,0,0,0x5867,0,0,0x5967,
-0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0,0,0x6067,0x80000,0x20,0x6267,0,
-0,0x6367,0,0,0x6467,0,0,0x6567,0,0,0x6f67,0,0,0x7067,0,0,
-0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767,0,0,0x7867,0,0,0x7a67,
-0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,0,0,0x7f67,0,0,0x8167,0,
-0,0x8267,0,0,0x8367,0,0,0x8467,0,0,0x8567,0,0,0x8667,0,0,
-0x8767,0,0,0x8867,0,0,0x8967,0,0,0x8b67,0,0,0x8c67,0,0,0x8e67,
-0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,0,0,0x9267,0,0,0x9367,0,
-0,0x9567,0,0,0x9667,0,0,0x9767,0,0,0x9867,0,0,0x9967,0,0,
-0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167,0,0,0xa367,0,0,0xa467,
-0,0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0,0,0xa967,0,
-0,0xaa67,0,0x4e00000,0xab67,0,0x4e00000,0xac67,0,0,0xad67,0,0,0xae67,0,0,
-0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb467,0,0,0xb567,0,0,0xb767,
-0,0,0xb867,0,0,0xb967,0,0,0xba67,0,0,0xbc67,0,0,0xbd67,0,
-0,0xbe67,0,0,0xbf67,0,0,0xc067,0,0,0xc167,0,0,0xc267,0,0,
-0xc367,0,0x4e00000,0xc467,0,0x4e00000,0xc667,0,0,0xc767,0,0,0xc867,0,0,0xc967,
-0,0,0xca67,0,0,0xcc67,0,0x4e00000,0xcf67,0,0x4e00000,0xd067,0,0x4e00000,0xd267,0,
-0,0xd367,0,0,0xd467,0,0,0xd567,0,0,0xd667,0,0,0xd867,0,0,
-0xda67,0,0,0xdb67,0,0,0xdc67,0,0,0xdd67,0,0,0xde67,0,0,0xdf67,
-0,0,0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,0,0x4e00000,0xe467,0,
-0,0xe567,0,0,0xe667,0,0,0xe767,0,0,0xe867,0,0,0xe967,0,0,
-0xea67,0,0,0xeb67,0,0,0xec67,0,0,0xed67,0,0,0xee67,0,0,0xef67,
-0,0,0xf167,0,0,0xf367,0,0,0xf567,0,0,0xf667,0,0,0xf767,0,
-0,0xf867,0,0,0xf967,0,0,0xfa67,0,0x4e00000,0xfb67,0,0,0xfc67,0,0,
-0xfd67,0,0,0xfe67,0,0,0x10167,0,0,0x10267,0,0,0x10367,0,0,0x10467,
-0,0,0x10567,0,0x4e00000,0x10667,0,0,0x10767,0,0,0x10867,0,0,0x10967,0,
-0,0x10a67,0,0,0x10b67,0,0,0x10c67,0,0,0x10d67,0,0,0x10e67,0,0,
-0x10f67,0,0,0x11067,0,0,0x11367,0,0,0x11467,0,0,0x11567,0,0,0x11667,
-0,0,0x11767,0,0,0x11867,0,0,0x11967,0,0x4e00000,0x11a67,0,0,0x11b67,0,
-0,0x11c67,0,0,0x11d67,0,0,0x11e67,0,0,0x11f67,0,0,0x12067,0,0,
-0x12167,0,0,0x12267,0,0,0x12367,0,0,0x12467,0,0,0x12567,0,0,0x12667,
-0,0,0x12767,0,0,0x12867,0,0,0x12967,0,0,0x12a67,0,0x4e00000,0x12b67,0,
-0,0x12c67,0,0,0x12d67,0,0,0x12f67,0,0,0x13067,0,0,0x13167,0,0,
-0x13267,0,0,0x13367,0,0,0x13467,0,0,0xa0067,0,0xe00000,0xa4767,0,0xe00000,0xa4f67,
-0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000,0xb0067,0,
-0xe00000,0xb1267,0,0xe00000,0xb2e67,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,
-0x11000100,0x40000001,0xa5a040,0x11000100,0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,
-0x24000000,0x14200000,0x11000200,0x24000008,0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,
-0x220401,0x11000319,0x7c00100,0x220402,0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,
-0x11000419,0x7c00100,0x220402,0x11000419,0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,
-0x7c00100,0x220400,0x11000519,0x7c00100,0x230400,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x200400,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,
-0x230400,0x11000600,0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,
-0x11000800,0x6800010,0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,
-0x4000400,0x200002,0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,
-0x250400,0x1100080e,0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,
-0x11000908,0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200400,0x11000a03,0x4000000,0x201000,0x11000a03,
-0x4000000,0x270000,0x11000a03,0x7c00100,0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000a03,0xc000010,
-0x1049400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000,0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,
-0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800,0x11000c00,0x80000000,0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,
-0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,
-0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000f01,0x2802400,0x962460,
-0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a,0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,
-0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,
-0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100,0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,
-0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110,0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,
-0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400,0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,
-0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,
-0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,
-0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423,0x6800100,0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,
-0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460,0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,
-0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,
-0x2802100,0x962460,0x1100171a,0x2806400,0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,
-0x230400,0x11001900,0x4000000,0x1600000,0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,
-0x11001926,0x4000010,0x400000,0x11001926,0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,
-0x7e00100,0x1830000,0x11001a18,0x2802100,0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,
-0x1830000,0x11001a18,0x7c00100,0x1830002,0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,
-0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,
-0x7c00100,0x250401,0x1100270e,0x4000400,0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,
-0x250401,0x11002800,0x80000,0x918820,0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x445801,0x11002800,0x4000001,0x445802,
-0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,
-0x24000000,0x810000,0x11002800,0x24000000,0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,
-0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,
-0x11002800,0x2c000010,0x15248002,0x11002800,0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0xaa65620,0x11002801,0x82000,0x962460,0x11002900,
-0x4000000,0x20000e,0x11002900,0x4000000,0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,
-0x81000f,0x11002900,0x4000020,0x141000e,0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,
-0x11002a00,0x4000000,0x1600000,0x11002a00,0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,
-0x4000000,0x200002,0x11002c00,0x4000000,0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,
-0x220405,0x11002c00,0x7c00120,0x230402,0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,
-0x11002d00,0x4000000,0x100006,0x11002d00,0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,
-0x24000000,0x200000,0x11002e00,0x24000020,0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x14200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,
-0x200001,0x11002f00,0x24000020,0x200002,0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,
-0x11003000,0x24000000,0x14200000,0x11003000,0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,
-0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,
-0x200000,0x11003600,0x24000000,0x14200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0x4200000,0x11003700,0x24000000,0x4e00000,
-0x11003700,0x24000000,0x14200000,0x11003700,0x24000000,0x14e00000,0x11003700,0x24000000,0x96800000,0x11003700,0x24000020,0x4200000,0x11003800,0x4000000,0x100000,0x11003800,
-0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x4200000,0x11003800,0x24000000,0x4e00000,0x11003800,0x24000000,
-0x14200000,0x11003800,0x24000000,0x14b00000,0x11003800,0x24000000,0x14e00000,0x11003800,0x24000000,0x96800000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,
-0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,
-0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,
-0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,
-0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,
-0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,
-0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x14200000,0x11020200,0x24000020,0x100000,
-0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,
-0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,
-0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200400,0x11020600,0x7c00500,0x130400,
-0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,
-0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,
-0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,
-0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,
-0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,
-0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,
-0x11022c00,0x4000000,0x1410000f,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,
-0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,
-0x14100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,
-0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023300,0x4000100,0x14150403,0x11023400,0x24000000,0x100000,0x11023500,
-0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023600,0x24000020,0x14100000,0x11023700,0x24000000,0x4100000,0x11023700,0x24000000,
-0x4e00000,0x11023700,0x24000000,0x14100000,0x11023700,0x24000000,0x14e00000,0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x4100000,0x11023700,0x24000020,0x14100000,
-0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,
-0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0xe3040a,0x11045712,0x7c80100,0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,
-0x2530c0a,0x11063d00,0x4000001,0x445811,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,
-0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,
-0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,
-0xe01c11,0x11065700,0x6800040,0xe29811,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,
-0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x19329800,0x11080100,0x24000000,0x200000,0x11080100,
-0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,
-0x2410000,0x11080100,0x24000000,0x18200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,
+static const uint32_t propsVectors[7095]={
+0x67,0,0,0x67,0,0xe00000,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67,
+0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0,0,0x1267,0,
+0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0,0x1767,0,0,
+0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67,0,0,0x1f67,
+0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0,0,0x2567,0,
+0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000,0x2b67,0,0,
+0x2d67,0,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67,0,0,0x3b67,0,0,0x3c67,
+0,0,0x3e67,0,0,0x4067,0,0,0x4167,0,0,0x4467,0,0,0x4867,0,
+0,0x4967,0,0,0x4a67,0,0,0x5067,0,0,0x5167,0,0,0x5467,0,0,
+0x5567,0,0,0x5667,0x80000,0x20,0x5767,0,0,0x5867,0,0,0x5967,0,0,0x5b67,
+0,0,0x5c67,0,0,0x5d67,0,0,0x6067,0x80000,0x20,0x6267,0,0,0x6367,0,
+0,0x6467,0,0,0x6567,0,0,0x6f67,0,0,0x7067,0,0,0x7367,0x20000000,0,
+0x7567,0,0,0x7667,0,0,0x7767,0,0,0x7867,0,0,0x7a67,0,0,0x7b67,
+0,0,0x7c67,0,0,0x7e67,0,0,0x7f67,0,0,0x8167,0,0,0x8267,0,
+0,0x8467,0,0,0x8567,0,0,0x8667,0,0,0x8767,0,0,0x8967,0,0,
+0x8b67,0,0,0x8c67,0,0,0x8e67,0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,
+0,0,0x9267,0,0,0x9367,0,0,0x9567,0,0,0x9667,0,0,0x9767,0,
+0,0x9867,0,0,0x9967,0,0,0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,
+0xa167,0,0,0xa367,0,0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,
+0,0,0xa867,0,0,0xa967,0,0,0xaa67,0,0xe00000,0xab67,0,0xe00000,0xac67,0,
+0,0xad67,0,0,0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,
+0xb467,0,0,0xb567,0,0,0xb767,0,0,0xb867,0,0,0xb967,0,0,0xba67,
+0,0,0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0,0xc067,0,
+0,0xc167,0,0,0xc267,0,0,0xc367,0,0xe00000,0xc467,0,0xe00000,0xc667,0,0,
+0xc767,0,0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcc67,0,0xe00000,0xcf67,
+0,0xe00000,0xd067,0,0xe00000,0xd367,0,0,0xd467,0,0,0xd567,0,0,0xd667,0,
+0,0xd867,0,0,0xda67,0,0,0xdb67,0,0,0xdc67,0,0,0xdd67,0,0,
+0xde67,0,0,0xdf67,0,0,0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,
+0,0xe00000,0xe467,0,0,0xe567,0,0,0xe667,0,0,0xe767,0,0,0xe867,0,
+0,0xe967,0,0,0xea67,0,0,0xeb67,0,0,0xec67,0,0,0xed67,0,0,
+0xee67,0,0,0xef67,0,0,0xf167,0,0,0xf367,0,0,0xf567,0,0,0xf667,
+0,0,0xf767,0,0,0xf867,0,0,0xf967,0,0,0xfa67,0,0xe00000,0xfb67,0,
+0,0xfc67,0,0,0xfd67,0,0,0xfe67,0,0,0x10167,0,0,0x10267,0,0,
+0x10367,0,0,0x10467,0,0,0x10667,0,0,0x10767,0,0,0x10867,0,0,0x10967,
+0,0,0x10a67,0,0,0x10b67,0,0,0x10c67,0,0,0x10d67,0,0,0x10e67,0,
+0,0x10f67,0,0,0x11067,0,0,0x11367,0,0,0x11467,0,0,0x11567,0,0,
+0x11667,0,0,0x11767,0,0,0x11867,0,0,0x11967,0,0xe00000,0x11a67,0,0,0x11b67,
+0,0,0x11c67,0,0,0x11d67,0,0,0x11e67,0,0,0x11f67,0,0,0x12067,0,
+0,0x12167,0,0,0x12267,0,0,0x12367,0,0,0x12467,0,0,0x12567,0,0,
+0x12667,0,0,0x12767,0,0,0x12867,0,0,0x12967,0,0,0x12a67,0,0xe00000,0x12b67,
+0,0,0x12c67,0,0,0x12d67,0,0,0x12f67,0,0,0x13067,0,0,0x13167,0,
+0,0x13267,0,0,0x13367,0,0,0x13467,0,0,0x13567,0,0,0x13667,0,0,
+0x13767,0,0,0x13867,0,0,0x13967,0,0,0x13a67,0,0,0x13b67,0,0,0x13c67,
+0,0,0x13d67,0,0,0x13f67,0,0,0x14067,0,0,0xa0067,0,0xe00000,0xa4f67,0,
+0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000,0xb0067,0,0xe00000,0xb1267,0,0xe00000,
+0xb2e67,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100,
+0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x200000,0x11000200,0x24000008,
+0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402,
+0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419,
+0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100,
+0x230400,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x200400,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400,0x11000600,0x7c00500,0x530400,
+0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800,0x6800010,0x201001,0x11000800,
+0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400,0x200002,0x1100080e,0x7000500,
+0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400,0x1100080e,0x7c00100,0x250401,
+0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,0x11000908,0x7c00100,0x220401,0x11000908,
+0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200400,0x11000a03,0x4000000,0x201000,0x11000a03,0x4000000,0x270000,0x11000a03,0x7c00100,
+0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000a03,0xc000010,0x1049400,0x11000b13,0x2802500,0x962460,
+0x11000b13,0x4000000,0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,
+0x7c00100,0x2633800,0x11000c00,0x80000000,0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,
+0x1329400,0x11000c02,0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,
+0x11000c02,0x7c00100,0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000f01,0x2802400,0x962460,0x11000f0a,0x2802100,0x962460,0x11000f0a,
+0x2802400,0x962460,0x11000f0a,0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,
+0x230401,0x11001004,0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,
+0x11001004,0x6800100,0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,
+0x2802400,0x962460,0x11001110,0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,
+0x962460,0x1100120f,0x2802400,0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,
+0x1100131f,0x2802400,0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,
+0x6800100,0x962541,0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,
+0x962540,0x11001423,0x6800100,0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,
+0x11001524,0x2806400,0x962460,0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,
+0x2806400,0x962460,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400,
+0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000,
+0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926,
+0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18,0x2802100,
+0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100,0x1830002,
+0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12,
+0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400,
+0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820,
+0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x445801,0x11002800,0x4000001,0x445802,0x11002800,0x4000001,0xc4000b,0x11002800,
+0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000,
+0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000,
+0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x1248002,0x11002800,
+0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0x2a65620,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000,
+0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e,
+0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00,
+0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000,
+0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402,
+0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006,0x11002d00,
+0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00,0x24000020,
+0x200000,0x11002e00,0x24000020,0x200001,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020,0x200002,0x11002f00,0x24000020,0xf00000,
+0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,
+0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,
+0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0xe00000,
+0x11003700,0x24000000,0x2800000,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,
+0x24000000,0xe00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x2800000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,
+0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005102,0x7000100,0x230408,
+0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,
+0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,
+0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,
+0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x200000,0x11020200,0x24000000,0x1400000,0x11020200,
+0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,
+0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,
+0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,
+0x4000400,0x100002,0x11020600,0x4000400,0x200400,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,
+0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,
+0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,
+0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,
+0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,
+0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,
+0x4000000,0x100002,0x11022c00,0x4000000,0x10000f,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,
+0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,
+0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,
+0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023400,0x24000000,
+0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,0xe00000,
+0x11023700,0x24000020,0x100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,
+0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0xe3040a,0x11045712,0x7c80100,0xe3040a,0x11045716,0x7c00100,
+0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x445811,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,
+0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,
+0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,
+0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe29811,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,
+0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x1329800,0x11080100,
+0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,
+0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,
0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,
0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a45800,0x11080119,0x7c00100,
0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,
0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,
-0x24000000,0x34e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000,0x34200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,
+0x24000000,0xe00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000,0x200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,
0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,
0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,
0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,
@@ -3535,188 +3607,185 @@ static const uint32_t propsVectors[6999]={
0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,
0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,
0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,
-0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400c0c,0x4000010,0xb00000,0x11400c0c,0x4000010,0x1071400,0x11400c0c,0xc000010,0xb48000,0x11400c16,0x7c00900,0x230400,
-0x11400f40,0xc000010,0x448000,0x11400f54,0xc000010,0x448000,0x11401d89,0x4000000,0x200000,0x11403dbf,0x4000000,0xe00000,0x114457b4,0x4000004,0x120000a,0x114457b4,
-0x4000008,0x81000a,0x114457b4,0x4000008,0x141000a,0x114457b4,0x4000010,0x87000a,0x114457b4,0xc000010,0x84800a,0x114457bd,0x3802500,0x126246a,0x114457bd,0x7c00d00,
-0x2530c0a,0x114a3db4,0x24000000,0x810000,0x114a3db4,0x24000000,0x1410000,0x114a3db4,0x24000008,0x810000,0x114a3db4,0x24000008,0x1410000,0x114a3db4,0x24000010,0x870000,
-0x114a3db4,0x2c000010,0x848000,0x114a3dba,0x4000000,0xe00000,0x114a3dba,0x24000000,0xe00000,0x114a3dba,0x24000002,0x1200000,0x114a3dba,0x24000002,0x14e00000,0x114a3dba,
-0x24000008,0x810000,0x114a3dba,0x24000008,0x1410000,0x114a3dbd,0x7c00900,0x930c00,0x114a3dbd,0x7c00900,0xe30c00,0x114a3dbf,0x7c00300,0xe30000,0x114a3ebd,0x7000400,
-0x1200c02,0x114a3fb4,0x4000004,0x1200000,0x114a3fbd,0x7c00d00,0x2530c00,0x114a42bf,0x4000000,0xe00000,0x114a42bf,0x4000000,0xe0000f,0x114a44bf,0x4000000,0xe00002,
-0x114a44bf,0x4000000,0xe00003,0x114a44bf,0x4000000,0x14e00003,0x114a45bf,0x4000000,0xe00002,0x114a45bf,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c1e,
-0x2802100,0x962460,0x11800c1e,0x2802500,0x962460,0x11800f27,0x2802400,0x962460,0x11800f34,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,
-0x962460,0x118a3dc0,0x2802400,0x962460,0x118a3ebd,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c20,0xc000010,0xb48000,
-0x11c00c23,0x6800000,0x1329800,0x11c00f6d,0x6800000,0x1329800,0x11c01072,0x6800000,0x1329800,0x11c01176,0x6800000,0x1329800,0x11c0127a,0x6800000,0x1329800,0x11c0147e,
-0x4000000,0x200000,0x11c0147e,0x6800000,0x1329800,0x11c01682,0x6800000,0x1329800,0x11c051fa,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,
-0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,
-0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,
-0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,
-0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,
-0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900000,0x20004c67,0,0x1900000,0x20004d67,0,0x1900000,0x20006d67,0x1000,0,0x20006e67,
-0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,
-0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,
-0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200400,0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200400,0x3000080e,0x7c00100,0x220400,0x30000908,
-0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,
-0x400400,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,
-0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000d22,0x80000000,0x218960,0x30000e25,
-0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,
-0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,
-0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,
-0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,
-0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,
-0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000000,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,
-0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x445800,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,
-0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,
-0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,
-0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,
-0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,
-0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,
-0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010,0x15248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002b01,0x2000,
-0x8962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x14220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,
-0x30003000,0x24000000,0x4200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x4200000,0x3000392e,0x24000000,0x200000,0x30005013,
-0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500400,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,
-0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,
-0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x3040258f,
-0x4000010,0x400000,0x3040258f,0x4000010,0xb70000,0x3040258f,0xc000010,0xb48000,0x304028af,0x4000001,0xc41c0b,0x304a3dbf,0x4000000,0xe00000,0x30800c1e,0x2802100,
-0x962460,0x30c01c87,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,
-0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,
-0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,
-0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,
-0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x8962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,
-0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,
-0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,
-0x32002800,0x4000001,0x445802,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,
-0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,
-0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,
-0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600,
-0x24000020,0x14200000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x4100000,0x32003700,0x24000000,0x4200000,0x32003700,0x24000000,0x14200000,0x32003800,0x24000000,
-0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,
-0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,
-0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,
-0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x14200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,
-0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,
-0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32026c01,0x12882000,0x8962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,
-0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x34200000,0x320a3d11,0x7c00100,0x1230400,
-0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,
-0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x3240638b,0xc000010,0x448000,0x324a3dc2,0x4000000,0x14e00000,0x324a3dc2,0x7c00100,0x1230400,0x324a3fbd,0x4000002,
-0x1200c00,0x324a53ba,0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,
-0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,
-0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000c02,0x80000000,0x218960,0x40000d22,0x7c00100,
-0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,
-0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,
-0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,
-0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x14200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x4200000,
-0x40003700,0x24000000,0x14200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,
-0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,
-0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,
-0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,
-0x24000000,0x200000,0x40007300,0x24000000,0x14200000,0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,
-0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,
-0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,
-0x24000000,0x34200000,0x400a3700,0x24000000,0x34e00000,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,
-0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x404077fc,0x4000000,0x200000,0x404077ff,0x4000000,0x200000,0x404077ff,0x4000000,0x400000,
-0x40c0147e,0x4000000,0x200000,0x40c051fa,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,
-0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,
-0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0x1500000,0x41000c02,0xc000010,0xb48000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,
-0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802400,0x962460,0x41001f0b,
-0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,
-0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x4200000,
-0x41003700,0x24000000,0x14200000,0x41003700,0x24000000,0x14e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,
-0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,
-0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,
-0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,
-0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,
-0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,
-0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008939,0xc000010,0x448000,0x41008a00,
-0x4000400,0x200400,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b,0x7e00100,0x1830000,0x41008c3d,0x4000010,
-0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,
-0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,
-0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,
-0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x34200000,0x410a3700,0x24000000,0x34e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,
-0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,
-0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x41408ac5,0x4000400,
-0x200000,0x414a82bf,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c0147e,0x6800000,0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,
-0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,
-0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,
-0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x4200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,
-0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,
-0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,
-0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,
-0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,
-0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,
-0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200400,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,
-0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,
-0x7c00100,0x230400,0x50409abf,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,
-0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,
-0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,
-0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,
-0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802500,0x1862460,0x51001c1c,0x2806400,0x1862460,
-0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800500,0x1862400,0x51001c1c,
-0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,
-0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x4200000,0x51003700,0x24000000,0x4e00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,
-0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,
-0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,
-0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,
-0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,
-0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000400,0x200400,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,
-0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,
-0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,
-0x2802d00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,
-0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,
-0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,
-0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,
-0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,
-0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,
-0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,
-0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,
-0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,
-0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,
-0x4e00000,0x5100ab00,0x4000000,0x4e00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,
-0x510a7300,0x24000000,0x34200000,0x510aaa00,0x4000000,0x34e00000,0x5140a2f3,0x4000400,0x400000,0x514a82bf,0x4000000,0xe00000,0x51802bb1,0x2802000,0x962460,0x51c00908,
-0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,
-0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800500,0x1862400,0x52001e12,0x7c00100,0x2230500,
-0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,
-0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,
-0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,
-0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,
-0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ac7e,0xc000010,0x248000,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,0x5200ae6a,0x2802400,
-0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,0x6800100,0x1862400,
-0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010,0x400000,0x5200b083,
-0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,
-0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,
-0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,
-0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800500,0x1862400,0x5200b61c,0x7c00100,
-0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,
-0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,
-0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,
-0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74,0x7c00100,0x230400,
-0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100,0x230400,0x5200bd7d,
-0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400,0x5200c002,0x4000000,
-0x200000,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,
-0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c178,0x80000000,0x218960,0x5200c247,
-0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006,0x52023700,0x24000000,
-0x4100000,0x52023700,0x24000000,0x4e00000,0x52023700,0x24000000,0x14100000,0x52023700,0x24000000,0x14e00000,0x52023700,0x24000000,0x96800000,0x52024400,0x4000000,0x100000,
-0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300,0x4000000,0x10000d,0x5202c300,
-0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x14150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700,0x24000000,0x34e00000,0x520a3800,0x24000000,
-0x34100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x34100000,0x520ab412,0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,
-0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x34e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,0x5240af91,0x7c00100,0x230400,0x5240af96,
-0x4000400,0x200000,0x5240af98,0x6800400,0x962540,0x5240af98,0x7c00100,0x230400,0x5240afa2,0x7c00100,0x230400,0x5240afa4,0x7c00100,0x230400,0x5240b2c7,0x4000000,
-0x200000,0x5240b2c7,0x4000000,0x1500000,0x5240b2d2,0x4000000,0x200000,0x5240b2e0,0x4000000,0x200000,0x5240b5f6,0x7c00900,0x230400,0x524a44bf,0x4000000,0xe00003,
-0x5280af91,0x2802400,0x962460,0x5280af92,0x2802400,0x962460,0x5280af98,0x2802400,0x962460,0x5280af9a,0x2802400,0x962460,0x5280af9c,0x2802400,0x962460,0x52c0b3ed,
-0x2802400,0x962460,0x52c0b3f1,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460,0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,
-0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a,0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,
-0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802400,0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,
-0x24000000,0x14200000,0x60003000,0x24000000,0x14e00000,0x60003700,0x24000000,0x4200000,0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,
-0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,
-0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x3a703580,0x6000c654,
-0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,
-0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,
-0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,
-0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,0x4e00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,
-0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x14150400,0x600a3000,0x24000000,0x34200000,
-0x600a3000,0x24000000,0x34e00000,0x600a3700,0x24000000,0x34200000,0x600a3800,0x24000000,0x34200000,0x600a3800,0x24000000,0xb6800000,0x600a4305,0x7c00100,0xe30400,0x600ac300,
-0x4000000,0x34100000,0x600ac400,0x4000000,0x14e0000d,0x600ac400,0x4000000,0x34e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,
-0x34e00000,0x600acd00,0x4000000,0x34200000,0x600acd00,0x4000000,0x34e00000,0x600acd00,0x4000000,0xb6800000,0x600ace00,0x4000000,0x34e00000,0x600ace00,0x4000000,0xb6800000,
-0x600acf00,0x4000000,0x34e00000,0x600acf00,0x4000000,0xb6800000,0x600ad111,0x7c40300,0xe30000,0x604ac4bf,0x4000000,0x34e00003,0x61000a03,0x4000000,0x1600000,0x61000c02,
+0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400c0c,0x4000010,0xb00000,0x11400c0c,0x4000010,0x1071400,0x11400c17,0xc000010,0xb48000,0x11400c1e,0x7c00900,0x230400,
+0x11400f4b,0xc000010,0x448000,0x11400f5f,0xc000010,0x448000,0x11401d94,0x4000000,0x200000,0x11403dca,0x4000000,0xe00000,0x114457bf,0x4000004,0x120000a,0x114457bf,
+0x4000008,0x81000a,0x114457bf,0x4000008,0x141000a,0x114457bf,0x4000010,0x87000a,0x114457bf,0xc000010,0x84800a,0x114457c8,0x3802500,0x126246a,0x114457c8,0x7c00d00,
+0x2530c0a,0x114a3dbf,0x24000000,0x810000,0x114a3dbf,0x24000000,0x1410000,0x114a3dbf,0x24000008,0x810000,0x114a3dbf,0x24000008,0x1410000,0x114a3dbf,0x24000010,0x870000,
+0x114a3dbf,0x2c000010,0x848000,0x114a3dc5,0x4000000,0xe00000,0x114a3dc5,0x24000000,0xe00000,0x114a3dc5,0x24000002,0xe00000,0x114a3dc5,0x24000002,0x1200000,0x114a3dc5,
+0x24000008,0x810000,0x114a3dc5,0x24000008,0x1410000,0x114a3dc8,0x7c00900,0x930c00,0x114a3dc8,0x7c00900,0xe30c00,0x114a3dca,0x7c00300,0xe30000,0x114a3ec8,0x7000400,
+0x1200c02,0x114a3fbf,0x4000004,0x1200000,0x114a3fc8,0x7c00d00,0x2530c00,0x114a42ca,0x4000000,0xe00000,0x114a42ca,0x4000000,0xe0000f,0x114a44ca,0x4000000,0xe00002,
+0x114a44ca,0x4000000,0xe00003,0x114a45ca,0x4000000,0xe00002,0x114a45ca,0x4000000,0xe0000d,0x11505103,0x24000000,0x810000,0x11505103,0x24000000,0x1410000,0x1180090a,
+0x2802400,0x962460,0x11800c27,0x2802100,0x962460,0x11800c27,0x2802500,0x962460,0x11800f32,0x2802400,0x962460,0x11800f3f,0x2802400,0x962460,0x11820700,0x2802400,
+0x962460,0x11820700,0x2802500,0x962460,0x118a3dcb,0x2802400,0x962460,0x118a3ec8,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,
+0x11c00c2c,0x6800000,0x1329800,0x11c00c30,0xc000010,0xb48000,0x11c00f78,0x6800000,0x1329800,0x11c0107d,0x6800000,0x1329800,0x11c01181,0x6800000,0x1329800,0x11c01285,
+0x6800000,0x1329800,0x11c01489,0x4000000,0x200000,0x11c01489,0x6800000,0x1329800,0x11c0168d,0x6800000,0x1329800,0x11d05107,0x7c00100,0x230408,0x20000067,0x1000,
+0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,
+0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,
+0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,
+0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,
+0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900000,0x20004c67,0,0x1900000,0x20004d67,0,0x1900000,0x20006d67,
+0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,
+0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,
+0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200400,0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200400,0x3000080e,
+0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,
+0x250401,0x30000a03,0x4000006,0x400400,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,
+0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000d22,
+0x80000000,0x218960,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,
+0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,
+0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,
+0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,
+0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,
+0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000000,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,
+0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x445800,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,
+0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,
+0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,
+0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,
+0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,
+0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,
+0x12882000,0x962460,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,
+0x200000,0x30002c00,0x7c00100,0x220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,
+0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,
+0x4000400,0x500400,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,
+0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,
+0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x3040259a,0x4000010,0x400000,0x3040259a,0x4000010,0xb70000,0x3040259a,
+0xc000010,0xb48000,0x304028ba,0x4000001,0xc41c0b,0x304a3dca,0x4000000,0xe00000,0x30800c27,0x2802100,0x962460,0x30c01c92,0x6800000,0x1329800,0x3100080e,0x7c00120,
+0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,
+0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,
+0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,
+0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x962460,
+0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,
+0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,
+0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,0x32002800,0x4000001,0x445802,0x32002800,0x24000000,0x200000,
+0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,
+0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,
+0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,
+0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003800,
+0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,
+0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806400,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x6804000,0x962540,
+0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,
+0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,
+0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,
+0x32026c01,0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,
+0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,
+0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,
+0x32406396,0xc000010,0x448000,0x324a3dcd,0x4000000,0xe00000,0x324a3dcd,0x7c00100,0x1230400,0x324a3fc8,0x4000002,0x1200c00,0x324a53c5,0x24000000,0xe00000,0x32820701,
+0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200400,0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,
+0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,
+0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000c02,0x80000000,0x218960,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,
+0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,
+0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100,0x230400,
+0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002,0x40003000,
+0x24000000,0x200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,
+0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,
+0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,
+0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,
+0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,
+0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,
+0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,
+0x962460,0x400a3700,0x24000000,0x200000,0x400a3700,0x24000000,0xe00000,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,
+0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x40507709,0x4000000,0x200000,0x4050770c,0x4000000,0x400000,0x4050770f,
+0x4000000,0x200000,0x4050770f,0x4000000,0x400000,0x40c01489,0x4000000,0x200000,0x40d05107,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,
+0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,
+0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0x1500000,0x41000c02,0xc000010,0xb48000,0x41000f0a,
+0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,
+0x23040f,0x41001f0b,0x2802400,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,
+0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,
+0x24000000,0x200000,0x41003700,0x24000000,0x200000,0x41003700,0x24000000,0xe00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,
+0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,
+0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,
+0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,
+0x400000,0x41008407,0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,
+0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,
+0x2802100,0x962460,0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008939,0xc000010,
+0x448000,0x41008a00,0x4000400,0x200400,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b,0x7e00100,0x1830000,
+0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,
+0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,
+0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,
+0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x200000,0x410a3700,0x24000000,0xe00000,0x410a4412,0x4000000,0xe00003,0x410a4711,
+0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,
+0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,
+0x41408ad0,0x4000400,0x200000,0x414a82ca,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c01489,0x6800000,0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,
+0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,
+0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,
+0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x200000,0x50005d00,0x7c00120,0x220405,0x50005d00,
+0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000,0x50008301,0x2802400,
+0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,
+0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,
+0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,
+0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,
+0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200400,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,
+0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,
+0x400000,0x50009965,0x7c00100,0x230400,0x50409aca,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02,0x2802100,0x962460,
+0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,
+0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,
+0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,
+0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802500,0x1862460,0x51001c1c,
+0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800500,
+0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,
+0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51003700,0x24000000,0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,
+0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,
+0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,
+0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,
+0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,
+0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000400,0x200400,0x51009500,0x7c00500,0x230400,
+0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,
+0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,
+0x962460,0x51009c52,0x2802d00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,
+0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,
+0xc000010,0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,
+0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,
+0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,
+0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,
+0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,
+0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,
+0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,
+0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,
+0x5100aa00,0x4000000,0xe00000,0x5100ab00,0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,
+0x7c40300,0xe30000,0x510a7300,0x24000000,0x200000,0x510aaa00,0x4000000,0xe00000,0x5140a2fe,0x4000400,0x400000,0x514a82ca,0x4000000,0xe00000,0x51802bbc,0x2802000,
+0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,
+0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800500,0x1862400,0x52001e12,
+0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,
+0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460,
+0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,
+0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,
+0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ac7e,0xc000010,0x248000,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,
+0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,
+0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010,
+0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,
+0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,
+0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,
+0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800500,0x1862400,
+0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,
+0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,
+0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,
+0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74,
+0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100,
+0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400,
+0x5200c002,0x4000000,0x200000,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,
+0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c178,0x80000000,
+0x218960,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006,
+0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700,0x24000000,0x2800000,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,
+0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,
+0x15040d,0x520a1e12,0x7c00100,0x2130480,0x520a3700,0x24000000,0xe00000,0x520a3800,0x24000000,0x100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,
+0x520a7300,0x24000000,0x100000,0x520ab412,0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,
+0x7c40300,0xe30000,0x5240af9c,0x7c00100,0x230400,0x5240afa1,0x4000400,0x200000,0x5240afa3,0x6800400,0x962540,0x5240afa3,0x7c00100,0x230400,0x5240afad,0x7c00100,
+0x230400,0x5240afaf,0x7c00100,0x230400,0x5240b2d2,0x4000000,0x200000,0x5240b2d2,0x4000000,0x1500000,0x5240b2dd,0x4000000,0x200000,0x5240b2eb,0x4000000,0x200000,
+0x524a44ca,0x4000000,0xe00003,0x5250b501,0x7c00900,0x230400,0x5280af9c,0x2802400,0x962460,0x5280af9d,0x2802400,0x962460,0x5280afa3,0x2802400,0x962460,0x5280afa5,
+0x2802400,0x962460,0x5280afa7,0x2802400,0x962460,0x52c0b3f8,0x2802400,0x962460,0x52c0b3fc,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460,0x60000c02,0x7c00100,
+0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a,0x7c00100,0x230400,
+0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802400,0x962460,0x60002919,
+0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x200000,0x60003000,0x24000000,0xe00000,0x60003700,0x24000000,0x200000,0x60003800,0x24000000,
+0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802400,0x962460,
+0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,
+0x7c00100,0x250400,0x6000c300,0x4000000,0x2703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,
+0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,
+0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806400,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,
+0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,
+0xe00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,
+0x600a3000,0x24000000,0x200000,0x600a3000,0x24000000,0xe00000,0x600a3700,0x24000000,0x200000,0x600a3800,0x24000000,0x200000,0x600a3800,0x24000000,0x2800000,0x600a4305,
+0x7c00100,0xe30400,0x600ac300,0x4000000,0x100000,0x600ac400,0x4000000,0xe0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,
+0xe00000,0x600acd00,0x4000000,0x200000,0x600acd00,0x4000000,0xe00000,0x600acd00,0x4000000,0x2800000,0x600ace00,0x4000000,0xe00000,0x600ace00,0x4000000,0x2800000,
+0x600acf00,0x4000000,0xe00000,0x600acf00,0x4000000,0x2800000,0x600ad111,0x7c40300,0xe30000,0x604ac4ca,0x4000000,0xe00003,0x61000a03,0x4000000,0x1600000,0x61000c02,
0x80000000,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400,0x61001d0c,0x7c00100,0x250400,0x61006600,0x24000020,
0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000,0x400000,
0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f,0x61009b71,
@@ -3729,132 +3798,145 @@ static const uint32_t propsVectors[6999]={
0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997,0x7c00100,
0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000,0x200000,
0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540,0x6100dc99,
-0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0x34e00000,0x6140af96,0x7c00100,0x230400,0x6140af98,0x7c00100,
-0x230400,0x6180af93,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63002800,0x80000,0x918820,0x63c00c14,0x80000,0x918820,0x7000080e,0x7c00100,0x250400,
+0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0xe00000,0x6140afa1,0x7c00100,0x230400,0x6140afa3,0x7c00100,
+0x230400,0x6180af9e,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63002800,0x80000,0x918820,0x63c00c15,0x80000,0x918820,0x7000080e,0x7c00100,0x250400,
0x70000a03,0x4000000,0x200000,0x70000c00,0x80000000,0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100,0x230400,0x70001524,0x2802100,0x962460,0x70001524,
0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800,0x70002320,0x7c00100,0x230400,0x70002a00,0x4000000,
-0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x14200000,0x70003800,0x24000000,0x4e00000,0x70005201,0x2802400,0x962460,
-0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,
-0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,
-0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,
-0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,
-0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802500,0x1862460,0x7000b61c,0x6800500,0x1862400,0x7000b61c,0x7c00100,
-0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0x4e00000,0x7000cd00,0x4000000,0x200000,0x7000cd00,0x4000000,0x4200000,
-0x7000cd00,0x4000000,0x4e00000,0x7000cd00,0x4000000,0x14200000,0x7000cd00,0x4000000,0x14e00000,0x7000cd00,0x4000000,0x96800000,0x7000cf00,0x4000000,0x4e00000,0x7000cf00,
-0x4000000,0x14e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,
-0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,
-0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,
-0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,
-0x962540,0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,
-0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,
-0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,
-0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400,0x200400,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,
-0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,
-0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,
-0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,
-0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,
-0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802500,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,
-0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,
-0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,
-0x2802400,0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,
-0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,
-0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,
-0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,
-0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,
-0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,
-0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,
-0x250400,0x700acd00,0x4000000,0x34e00000,0x700acd00,0x4000000,0xb6800000,0x700ace00,0x4000000,0x34e00000,0x700acf00,0x4000000,0x34e00000,0x700acf00,0x4000000,0xb6800000,
-0x7050df01,0x4000000,0x200000,0x7050f705,0x80000,0x918820,0x7080af96,0x2802400,0x962460,0x7090df01,0x2802400,0x962460,0x70d0e403,0x2802100,0x962460,0x70d0e403,
-0x2802400,0x962460,0x70d0e403,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400,0x8000171a,0x7c00100,0x230400,0x80002006,0x7c00100,
-0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208,0x2802400,0x962460,0x80005c00,0x4000000,0x200000,
-0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100,0x250400,0x80009865,0x7c00100,0x230400,0x8000a008,
-0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0x4e00000,0x8000d202,0x2802500,0x962460,0x8000d202,0x7c00100,
-0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802000,0x962460,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x400000,0x8000d997,0x4000000,0x500000,
-0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400,0x8000e719,0x7c00100,0x220400,0x8000f8a6,
-0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1,0x2806400,0x1862460,0x8000fda1,0x4000000,
-0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010,0x448000,0x8000fe9c,0x7c00100,0x230400,
-0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400,0x800102a2,0x4000000,0x200000,0x800102a2,
-0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c,0x7c00100,0x220400,0x8001044c,0x7c00100,
-0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,
-0x800acd00,0x4000000,0x34e00000,0x800acd00,0x4000000,0x7a902460,0x800ace00,0x4000000,0x34e00000,0x800acf00,0x4000000,0x34e00000,0x800b0011,0x7c40300,0xe30000,0x800b0500,
-0x4000000,0x34e00000,0x800b0500,0x4000000,0xb6800000,0x90001615,0x7c00100,0x230400,0x9000171a,0x4000000,0x200000,0x9000171a,0x7c00100,0x230400,0x90003000,0x24000000,
-0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00,0x24000000,0x400000,0x90009519,0x7c00100,0x250400,0x9000a16f,0x2802100,0x962460,
-0x9000d200,0x80000000,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,0x9000d202,0x7c00100,0x230400,0x9000e59d,0x2802100,0x962460,0x90010500,
-0x4000000,0xe00000,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000,0x900107a7,0x6800000,
-0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8,0x2806400,0x962460,0x900108a8,0x4000000,0x200000,
-0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100,0x230400,0x900108a8,
-0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9,0x4000010,
-0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400,0x962460,
-0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800,0x90010eaa,
-0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300,0x4000000,
-0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x34e00000,0x900acd00,0x4000000,0xb6800000,0x900acf00,0x4000000,0x34e00000,0x900b0500,0x4000000,0x34e00000,
-0x900b0500,0x4000000,0xb6800000,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,0x900b119a,0x7c00300,0xe30000,0x90408e06,0x24000000,0x400000,0xa0001004,
-0x4000000,0x200000,0xa0001004,0x7c00100,0x230400,0xa000120f,0x2802100,0x962460,0xa000120f,0x2802400,0x962460,0xa000171a,0x2802100,0x962460,0xa000171a,0x2806400,
-0x962460,0xa0002a00,0x4000000,0x1600000,0xa0003000,0x24000000,0x200000,0xa000581e,0x7c00100,0x230400,0xa0007300,0x24000000,0x200000,0xa0008301,0x2802400,0x962460,
-0xa0008e00,0x24000000,0x400000,0xa000cf00,0x4000000,0x4e00000,0xa0010500,0x4000000,0x200000,0xa00114af,0x2802100,0x962460,0xa00114af,0x2802400,0x962460,0xa00114af,
-0x2806400,0x962460,0xa00114af,0x6800000,0x1329800,0xa00114af,0x7c00100,0x230400,0xa00114af,0x7c00100,0x230560,0xa00116b0,0x2802100,0x962460,0xa00116b0,0x2802800,
-0x962460,0xa00116b0,0x2806400,0x962460,0xa00116b0,0x4000000,0x400000,0xa00116b0,0x4000000,0x500000,0xa00116b0,0x4000010,0x400000,0xa00116b0,0x6800100,0x962540,
-0xa00116b0,0x7c00100,0x230400,0xa00116b0,0x7c00100,0x230560,0xa00116b0,0xc000010,0x448000,0xa0011722,0x7c00100,0x230400,0xa00118b1,0x2802000,0x962460,0xa00118b1,
-0x2802100,0x962460,0xa00118b1,0x2806400,0x962460,0xa00118b1,0x4000000,0x200000,0xa00118b1,0x4000000,0x400000,0xa00118b1,0x4000000,0x500000,0xa00118b1,0x6800100,
-0x962540,0xa00118b1,0x7c00100,0x230400,0xa00118b1,0x7c00100,0x230560,0xa00118b1,0xc000010,0x448000,0xa00a4005,0x7c00100,0xe30400,0xa00a4711,0x7c40300,0xe30000,
-0xa00ac400,0x4000000,0x4e00000,0xa00acb14,0x7c00100,0xe30000,0xa00acf00,0x4000000,0x34e00000,0xa00b0500,0x4000000,0x34e00000,0xa00b0500,0x4000000,0xb6800000,0xa00b0b96,
-0x7c00900,0x1230400,0xa00b1211,0x7c40300,0xe30000,0xa00b1314,0x7c00100,0xe30000,0xa00b1596,0x7c00300,0xe30000,0xa040afac,0x6800400,0x962540,0xa08083ad,0x2802400,
-0x962460,0xb0000a03,0x7c00100,0x220400,0xb0000b13,0x7c00100,0x2633800,0xb0001004,0x2802000,0x962460,0xb0001110,0x4000000,0x200000,0xb0001524,0x2802000,0x962460,
-0xb0001615,0x4000000,0x500000,0xb000251b,0x7c00100,0x230400,0xb0007300,0x24000000,0x200000,0xb0008939,0x4000000,0x200000,0xb0008939,0x7c00100,0x230400,0xb0008e00,
-0x24000000,0x200000,0xb0008e00,0x24000000,0x400000,0xb0008e00,0x24000010,0x400000,0xb0009257,0x2802000,0x962460,0xb0009257,0x4000000,0x1600000,0xb0009519,0x7c00100,
-0x220400,0xb0009519,0x7c00100,0x250400,0xb0009a00,0x4000000,0x200000,0xb000b30a,0x2802100,0x962460,0xb000b30a,0x7c00100,0x230400,0xb000c178,0x80000000,0x218960,
-0xb000c300,0x4000000,0x4200000,0xb000d202,0x2802000,0x962460,0xb000d476,0x6800100,0x962540,0xb000d476,0x7c00100,0x230400,0xb000e300,0x4000000,0x4e00000,0xb000fda1,
-0x7c00100,0x1830000,0xb0010eaa,0x2802000,0x962460,0xb00116b0,0x7c00100,0x230400,0xb0011900,0x4000000,0x4e00000,0xb0011ab2,0x2802100,0x962460,0xb0011ab2,0x2802400,
-0x962460,0xb0011ab2,0x2806400,0x962460,0xb0011ab2,0x4000000,0x200000,0xb0011ab2,0x6800100,0x962540,0xb0011ab2,0x7c00100,0x230400,0xb0011b0c,0x7c00100,0x230400,
-0xb0011cb3,0x2802100,0x962460,0xb0011cb3,0x2806400,0x962460,0xb0011cb3,0x6800000,0x1329800,0xb0011cb3,0x6800100,0x962540,0xb0011cb3,0x7c00100,0x230400,0xb0011db6,
-0x2802500,0x962460,0xb0011db6,0x6800000,0x1329800,0xb0011db6,0x7c00100,0x230400,0xb0011db6,0x7c00500,0x230400,0xb0011e00,0x4000000,0x200000,0xb0011e00,0x4000000,
-0x1500000,0xb0011fb4,0x2802100,0x962460,0xb0011fb4,0x6800100,0x962540,0xb0011fb4,0x7c00100,0x230400,0xb0011fb4,0xc000010,0x248000,0xb0012000,0x4000000,0x200000,
-0xb00121b5,0x4000000,0x200000,0xb00121b5,0x4000010,0x400000,0xb00121b5,0x7c00100,0x220400,0xb00121b5,0x7c00100,0x250400,0xb00121b5,0xc000010,0x448000,0xb00122b8,
-0x4000000,0x200000,0xb00122b8,0x7c00100,0x230400,0xb00123b7,0x2802400,0x962460,0xb00123b7,0x4000000,0x200000,0xb00123b7,0x7c00100,0x230400,0xb00123b7,0xc000010,
-0x248000,0xb00a4005,0x7c00100,0xe30400,0xb00a4711,0x7c40300,0xe30000,0xb00acf00,0x4000000,0x34e00000,0xb00b0500,0x4000000,0x34e00000,0xb00b0500,0x4000000,0x3ce00000,
-0xb00b0500,0x4000000,0xb6800000,0xb00b109a,0x7c00300,0xe30000,0xb080e47c,0x2802000,0x962460,0xc0001524,0x4000000,0x500000,0xc0001a18,0x2806400,0x1862460,0xc0001a18,
-0x7c00100,0x1830000,0xc0007300,0x24000000,0x200000,0xc0008e00,0x24000010,0x400000,0xc0009519,0x7c00100,0x220400,0xc0009519,0x7c00100,0x250400,0xc000c300,0x4000000,
-0x420000f,0xc000d85c,0x2802100,0x962460,0xc000d85c,0x6800100,0x962540,0xc000d85c,0x7c00100,0x230400,0xc000dc99,0x7c00100,0x230400,0xc000e719,0x7c00100,0x220400,
-0xc00107a7,0x7c00100,0x230400,0xc0010eaa,0x7c00100,0x230400,0xc00116b0,0x7c00100,0x230560,0xc0011900,0x4000000,0x4200000,0xc0012447,0,0x818820,0xc0012447,
-0,0xc18820,0xc0012447,0,0x1418820,0xc00125b9,0x7c00100,0x230400,0xc00126bb,0x2802100,0x962460,0xc00126bb,0x2806400,0x962460,0xc00126bb,0x4000000,
-0x500000,0xc00126bb,0x6800100,0x962540,0xc00126bb,0x7c00100,0x230400,0xc00127ba,0x2802400,0x962460,0xc00127ba,0x4000000,0x200000,0xc00127ba,0x6800000,0x1329800,
-0xc00127ba,0x7c00100,0x230400,0xc00127ba,0x7c00900,0x230400,0xc0012800,0x4000000,0x200000,0xc0012b23,0x4000000,0x200000,0xc0012b23,0x4000000,0x400000,0xc0012b23,
-0x4000000,0x1500000,0xc0012cbc,0x2802400,0x962460,0xc0012cbc,0x4000000,0x1600000,0xc0012cbc,0x6800000,0x1329800,0xc0012cbc,0x7c00100,0x230400,0xc00acf00,0x4000000,
-0x34e00000,0xc00ae300,0x4000000,0x34e00000,0xc00b0500,0x4000000,0x34e00000,0xc00b0500,0x4000000,0xb6800000,0xc00b0b00,0x4000000,0x1200000,0xc00b0b00,0x7c00900,0x1230400,
-0xc00b109a,0x7c00300,0xe30000,0xc00b2914,0x7c00100,0x2530000,0xc00b2916,0x7c00100,0x2530c00,0xc00b2a00,0x4000000,0x34e00000,0xc040af53,0x7c00100,0x230400,0xc0c12b7e,
-0x4000000,0x200000,0xc14a44bf,0x4000000,0xe0000d,0xd000131f,0x2802c00,0x962460,0xd000171a,0x7c00100,0x230400,0xd0001821,0x2802100,0x962460,0xd0007300,0x24000000,
-0x200000,0xd0008e00,0x24000000,0x200000,0xd0008f3a,0x2806000,0x962460,0xd0009519,0x7c00100,0x220400,0xd0009519,0x7c00100,0x250400,0xd000a500,0x4000000,0x200000,
-0xd000c300,0x4000000,0x4e00000,0xd000d202,0x7c00100,0x230400,0xd000d476,0x7c00100,0x230400,0xd000d997,0x2802100,0x962460,0xd000d997,0x6800100,0x962540,0xd000e001,
-0x2802100,0x962460,0xd000e700,0x4000400,0x200000,0xd000e719,0x7c00100,0x220400,0xd000e719,0x7c00500,0x23040f,0xd000fa00,0x4000000,0x4e00000,0xd0010eaa,0x4000010,
-0x400000,0xd0010eaa,0x7c00100,0x230400,0xd0012dbd,0x4000000,0x200000,0xd0012dbd,0x7c00100,0x230400,0xd0012fbe,0x2802100,0x962460,0xd0012fbe,0x2802400,0x962460,
-0xd0012fbe,0x2806400,0x962460,0xd0012fbe,0x4000000,0x400000,0xd0012fbe,0x6800000,0x1329800,0xd0012fbe,0x6800100,0x962540,0xd0012fbe,0x6800100,0x962541,0xd0012fbe,
-0x6804400,0x962540,0xd0012fbe,0x7c00100,0x230400,0xd0012fbe,0x7c00100,0x230560,0xd0012fbe,0xc000010,0x448000,0xd0013183,0x7c00100,0x230400,0xd0013200,0x4000000,
-0x200000,0xd0013200,0x6800000,0x1329805,0xd00134c0,0x2802100,0x962460,0xd00134c0,0x4000002,0x400000,0xd00134c0,0x7c00100,0x230400,0xd00a4305,0x7c00100,0xe30400,
-0xd00a4611,0x7c40300,0xe30000,0xd00a4711,0x7c40300,0xe30000,0xd00a5e11,0x7c40300,0xe30000,0xd00acf00,0x4000000,0x34e00000,0xd00b0500,0x4000000,0x34e00000,0xd00b0500,
-0x4000000,0xb6800000,0xd00b0b11,0x6800500,0x962540,0xd00b0bbf,0x2802200,0xc62460,0xd00b119a,0x7c00300,0xe30000,0xd00b2a00,0x4000000,0x34e00000,0xd00b2e11,0x7c40300,
-0xe30000,0xd00b30bf,0x7c00300,0x230000,0xd00b339a,0x7c00300,0xe30000};
+0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003800,0x24000000,0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,
+0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,
+0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,
+0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,
+0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,
+0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802500,0x1862460,0x7000b61c,0x6800500,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,
+0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x2800000,
+0x7000cf00,0x4000000,0xe00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,
+0x2802400,0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2400,
+0x962460,0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,
+0x7000e187,0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,
+0x6800100,0x962540,0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,
+0x962460,0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,
+0x7000e59d,0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,
+0x6800000,0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400,0x200400,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,
+0x220400,0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,
+0x7000e9a0,0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,
+0x7c00100,0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,
+0x962460,0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,
+0x7000ed95,0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802500,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,
+0x7c00100,0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,
+0x230400,0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,
+0x7000f34b,0x2802400,0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,
+0x7c00900,0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,
+0x200000,0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,
+0x7000f8a6,0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,
+0x7c00100,0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,
+0x962460,0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,
+0x7000fb9e,0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,
+0x7c00100,0x250400,0x700acd00,0x4000000,0xe00000,0x700acd00,0x4000000,0x2800000,0x700ace00,0x4000000,0xe00000,0x700acf00,0x4000000,0xe00000,0x700acf00,0x4000000,
+0x2800000,0x7050df11,0x4000000,0x200000,0x7050f719,0x80000,0x918820,0x7080afa1,0x2802400,0x962460,0x7090df11,0x2802400,0x962460,0x70d0e417,0x2802100,0x962460,
+0x70d0e417,0x2802400,0x962460,0x70d0e417,0x6800100,0x962540,0x70d0ea15,0x4000010,0x400000,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400,0x8000171a,
+0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208,0x2802400,
+0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100,0x250400,
+0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0xe00000,0x8000d202,
+0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802000,0x962460,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,
+0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400,
+0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1,
+0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862400,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,
+0x1830000,0x8000fda1,0xc000010,0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,
+0x80010165,0x7c00100,0x230400,0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,
+0x4000000,0x200000,0x8001044c,0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,
+0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0xe00000,0x800acd00,0x4000000,0x2902460,0x800ace00,0x4000000,0xe00000,
+0x800acf00,0x4000000,0xe00000,0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0xe00000,0x800b0500,0x4000000,0x2800000,0x90001615,0x7c00100,0x230400,0x9000171a,
+0x4000000,0x200000,0x9000171a,0x7c00100,0x230400,0x90003000,0x24000000,0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802400,0x962460,0x90008e00,0x24000000,
+0x400000,0x90009519,0x7c00100,0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200,0x80000000,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,
+0x9000d202,0x7c00100,0x230400,0x9000e59d,0x2802100,0x962460,0x90010500,0x4000000,0xe00000,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,
+0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000,0x900107a7,0x6800000,0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,
+0x962460,0x900108a8,0x2806400,0x962460,0x900108a8,0x4000000,0x200000,0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,
+0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100,0x230400,0x900108a8,0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,
+0x2802100,0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9,0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,
+0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400,0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,
+0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800,0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,
+0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300,0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0xe00000,0x900acd00,0x4000000,
+0x2800000,0x900acf00,0x4000000,0xe00000,0x900b0500,0x4000000,0xe00000,0x900b0500,0x4000000,0x2800000,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,
+0x900b119a,0x7c00300,0xe30000,0x90408e06,0x24000000,0x400000,0xa0001004,0x4000000,0x200000,0xa0001004,0x7c00100,0x230400,0xa000120f,0x2802100,0x962460,0xa000120f,
+0x2802400,0x962460,0xa000171a,0x2802100,0x962460,0xa000171a,0x2806400,0x962460,0xa0002a00,0x4000000,0x1600000,0xa0003000,0x24000000,0x200000,0xa000581e,0x7c00100,
+0x230400,0xa0007300,0x24000000,0x200000,0xa0008301,0x2802400,0x962460,0xa0008e00,0x24000000,0x400000,0xa000cf00,0x4000000,0xe00000,0xa0010500,0x4000000,0x200000,
+0xa00114af,0x2802100,0x962460,0xa00114af,0x2802400,0x962460,0xa00114af,0x2806400,0x962460,0xa00114af,0x6800000,0x1329800,0xa00114af,0x7c00100,0x230400,0xa00114af,
+0x7c00100,0x230560,0xa00116b0,0x2802100,0x962460,0xa00116b0,0x2802800,0x962460,0xa00116b0,0x2806400,0x962460,0xa00116b0,0x4000000,0x400000,0xa00116b0,0x4000000,
+0x500000,0xa00116b0,0x4000010,0x400000,0xa00116b0,0x6800100,0x962540,0xa00116b0,0x7c00100,0x230400,0xa00116b0,0x7c00100,0x230560,0xa00116b0,0xc000010,0x448000,
+0xa0011722,0x7c00100,0x230400,0xa00118b1,0x2802000,0x962460,0xa00118b1,0x2802100,0x962460,0xa00118b1,0x2806400,0x962460,0xa00118b1,0x4000000,0x200000,0xa00118b1,
+0x4000000,0x400000,0xa00118b1,0x4000000,0x500000,0xa00118b1,0x6800100,0x962540,0xa00118b1,0x7c00100,0x230400,0xa00118b1,0x7c00100,0x230560,0xa00118b1,0xc000010,
+0x448000,0xa00a4005,0x7c00100,0xe30400,0xa00a4711,0x7c40300,0xe30000,0xa00ac400,0x4000000,0xe00000,0xa00acb14,0x7c00100,0xe30000,0xa00acf00,0x4000000,0xe00000,
+0xa00b0500,0x4000000,0xe00000,0xa00b0500,0x4000000,0x2800000,0xa00b0b96,0x7c00900,0x1230400,0xa00b1211,0x7c40300,0xe30000,0xa00b1314,0x7c00100,0xe30000,0xa00b1596,
+0x7c00300,0xe30000,0xa040afb7,0x6800400,0x962540,0xa08083b8,0x2802400,0x962460,0xb0000a03,0x7c00100,0x220400,0xb0000b13,0x7c00100,0x2633800,0xb0001004,0x2802000,
+0x962460,0xb0001110,0x4000000,0x200000,0xb0001524,0x2802000,0x962460,0xb0001615,0x4000000,0x500000,0xb000251b,0x7c00100,0x230400,0xb0007300,0x24000000,0x200000,
+0xb0008939,0x4000000,0x200000,0xb0008939,0x7c00100,0x230400,0xb0008e00,0x24000000,0x200000,0xb0008e00,0x24000000,0x400000,0xb0008e00,0x24000010,0x400000,0xb0009257,
+0x2802000,0x962460,0xb0009257,0x4000000,0x1600000,0xb0009519,0x7c00100,0x220400,0xb0009519,0x7c00100,0x250400,0xb0009a00,0x4000000,0x200000,0xb000b30a,0x2802100,
+0x962460,0xb000b30a,0x7c00100,0x230400,0xb000c178,0x80000000,0x218960,0xb000c300,0x4000000,0x200000,0xb000d202,0x2802000,0x962460,0xb000d476,0x6800100,0x962540,
+0xb000d476,0x7c00100,0x230400,0xb000e300,0x4000000,0xe00000,0xb000fda1,0x7c00100,0x1830000,0xb0010eaa,0x2802000,0x962460,0xb00116b0,0x7c00100,0x230400,0xb0011900,
+0x4000000,0xe00000,0xb0011ab2,0x2802100,0x962460,0xb0011ab2,0x2802400,0x962460,0xb0011ab2,0x2806400,0x962460,0xb0011ab2,0x4000000,0x200000,0xb0011ab2,0x6800100,
+0x962540,0xb0011ab2,0x7c00100,0x230400,0xb0011b0c,0x7c00100,0x230400,0xb0011cb3,0x2802100,0x962460,0xb0011cb3,0x2806400,0x962460,0xb0011cb3,0x6800000,0x1329800,
+0xb0011cb3,0x6800100,0x962540,0xb0011cb3,0x7c00100,0x230400,0xb0011db6,0x2802500,0x962460,0xb0011db6,0x6800000,0x1329800,0xb0011db6,0x7c00100,0x230400,0xb0011db6,
+0x7c00500,0x230400,0xb0011e00,0x4000000,0x200000,0xb0011e00,0x4000000,0x1500000,0xb0011fb4,0x2802100,0x962460,0xb0011fb4,0x6800100,0x962540,0xb0011fb4,0x7c00100,
+0x230400,0xb0011fb4,0xc000010,0x248000,0xb0012000,0x4000000,0x200000,0xb00121b5,0x4000000,0x200000,0xb00121b5,0x4000010,0x400000,0xb00121b5,0x7c00100,0x220400,
+0xb00121b5,0x7c00100,0x250400,0xb00121b5,0xc000010,0x448000,0xb00122b8,0x4000000,0x200000,0xb00122b8,0x7c00100,0x230400,0xb00123b7,0x2802400,0x962460,0xb00123b7,
+0x4000000,0x200000,0xb00123b7,0x7c00100,0x230400,0xb00123b7,0xc000010,0x248000,0xb00a4005,0x7c00100,0xe30400,0xb00a4711,0x7c40300,0xe30000,0xb00acf00,0x4000000,
+0xe00000,0xb00b0500,0x4000000,0xe00000,0xb00b0500,0x4000000,0x2800000,0xb00b109a,0x7c00300,0xe30000,0xb080e487,0x2802000,0x962460,0xc0001524,0x4000000,0x500000,
+0xc0001a18,0x2806400,0x1862460,0xc0001a18,0x7c00100,0x1830000,0xc0007300,0x24000000,0x200000,0xc0008e00,0x24000010,0x400000,0xc0009519,0x7c00100,0x220400,0xc0009519,
+0x7c00100,0x250400,0xc000c300,0x4000000,0x20000f,0xc000d85c,0x2802100,0x962460,0xc000d85c,0x6800100,0x962540,0xc000d85c,0x7c00100,0x230400,0xc000dc99,0x7c00100,
+0x230400,0xc000e719,0x7c00100,0x220400,0xc00107a7,0x7c00100,0x230400,0xc0010eaa,0x7c00100,0x230400,0xc00116b0,0x7c00100,0x230560,0xc0011900,0x4000000,0x200000,
+0xc0012447,0,0x818820,0xc0012447,0,0xc18820,0xc0012447,0,0x1418820,0xc00125b9,0x7c00100,0x230400,0xc00126bb,0x2802100,0x962460,0xc00126bb,
+0x2806400,0x962460,0xc00126bb,0x4000000,0x500000,0xc00126bb,0x6800100,0x962540,0xc00126bb,0x7c00100,0x230400,0xc00127ba,0x2802400,0x962460,0xc00127ba,0x4000000,
+0x200000,0xc00127ba,0x6800000,0x1329800,0xc00127ba,0x7c00100,0x230400,0xc00127ba,0x7c00900,0x230400,0xc0012800,0x4000000,0x200000,0xc0012b23,0x4000000,0x200000,
+0xc0012b23,0x4000000,0x400000,0xc0012b23,0x4000000,0x1500000,0xc0012cbc,0x2802400,0x962460,0xc0012cbc,0x4000000,0x1600000,0xc0012cbc,0x6800000,0x1329800,0xc0012cbc,
+0x7c00100,0x230400,0xc00acf00,0x4000000,0xe00000,0xc00ae300,0x4000000,0xe00000,0xc00b0500,0x4000000,0xe00000,0xc00b0500,0x4000000,0x2800000,0xc00b0b11,0x4000000,
+0x1200000,0xc00b0b11,0x7c00900,0x1230400,0xc00b109a,0x7c00300,0xe30000,0xc00b2914,0x7c00100,0x2530000,0xc00b2916,0x7c00100,0x2530c00,0xc00b2a00,0x4000000,0xe00000,
+0xc040af5e,0x7c00100,0x230400,0xc0c12b89,0x4000000,0x200000,0xc14a44ca,0x4000000,0xe0000d,0xd000131f,0x2802c00,0x962460,0xd000171a,0x7c00100,0x230400,0xd0001821,
+0x2802100,0x962460,0xd0007300,0x24000000,0x200000,0xd0008e00,0x24000000,0x200000,0xd0008f3a,0x2806000,0x962460,0xd0009519,0x7c00100,0x220400,0xd0009519,0x7c00100,
+0x250400,0xd000a500,0x4000000,0x200000,0xd000c300,0x4000000,0xe00000,0xd000d202,0x7c00100,0x230400,0xd000d476,0x7c00100,0x230400,0xd000d997,0x2802100,0x962460,
+0xd000d997,0x6800100,0x962540,0xd000e001,0x2802100,0x962460,0xd000e700,0x4000400,0x200000,0xd000e719,0x7c00100,0x220400,0xd000e719,0x7c00500,0x23040f,0xd000fa00,
+0x4000000,0xe00000,0xd0010eaa,0x4000010,0x400000,0xd0010eaa,0x7c00100,0x230400,0xd0012dbd,0x4000000,0x200000,0xd0012dbd,0x7c00100,0x230400,0xd0012fbe,0x2802100,
+0x962460,0xd0012fbe,0x2802400,0x962460,0xd0012fbe,0x2806400,0x962460,0xd0012fbe,0x4000000,0x400000,0xd0012fbe,0x6800000,0x1329800,0xd0012fbe,0x6800100,0x962540,
+0xd0012fbe,0x6800100,0x962541,0xd0012fbe,0x6804400,0x962540,0xd0012fbe,0x7c00100,0x230400,0xd0012fbe,0x7c00100,0x230560,0xd0012fbe,0xc000010,0x448000,0xd0013183,
+0x7c00100,0x230400,0xd0013200,0x4000000,0x200000,0xd0013200,0x6800000,0x1329805,0xd00134c0,0x2802100,0x962460,0xd00134c0,0x4000002,0x400000,0xd00134c0,0x7c00100,
+0x230400,0xd00a4305,0x7c00100,0xe30400,0xd00a4611,0x7c40300,0xe30000,0xd00a4711,0x7c40300,0xe30000,0xd00a5e11,0x7c40300,0xe30000,0xd00acf00,0x4000000,0xe00000,
+0xd00b0500,0x4000000,0xe00000,0xd00b0500,0x4000000,0x2800000,0xd00b0b11,0x6800500,0x962540,0xd00b0bbf,0x2802200,0xc62460,0xd00b119a,0x7c00300,0xe30000,0xd00b2a00,
+0x4000000,0xe00000,0xd00b2e11,0x7c40300,0xe30000,0xd00b30bf,0x7c00300,0x230000,0xd00b339a,0x7c00300,0xe30000,0xe0000c02,0xc000010,0xb48000,0xe0001524,0x2802400,
+0x962460,0xe0001524,0x7c00100,0x230400,0xe0001615,0x7c00100,0x230400,0xe000251b,0x12882000,0x962460,0xe0002a00,0x4000000,0x1500000,0xe0005102,0x4000000,0x200000,
+0xe0005c00,0x4000000,0x200000,0xe000622a,0x6804400,0x962540,0xe000622a,0x7c00100,0x230400,0xe0008838,0x7c00100,0x220400,0xe0008838,0x7c00100,0x250400,0xe0008e00,
+0x24000000,0x810000,0xe0008e00,0x24000000,0x1410000,0xe0008e00,0x24000002,0x400000,0xe0008e00,0x2c000010,0xb48000,0xe000933e,0x7c00100,0x230400,0xe000933e,0xc000010,
+0x448000,0xe0009519,0x7c00100,0x220400,0xe0009519,0x7c00100,0x23040f,0xe0009519,0x7c00100,0x250400,0xe000c178,0x2802100,0x962460,0xe000c941,0x2802100,0x962460,
+0xe000c941,0x2806400,0x962460,0xe000c941,0x7c00100,0x230400,0xe000d202,0x2802400,0x962460,0xe000d202,0x7c00100,0x230400,0xe000d202,0x7c00500,0x230400,0xe000dc99,
+0x4000000,0x200000,0xe000e001,0x2802100,0x962460,0xe000e001,0x2802400,0x962460,0xe000fda1,0x7c00100,0x1830000,0xe0013502,0x2802400,0x962460,0xe0013502,0x4000000,
+0x200000,0xe0013502,0x7c00100,0x230400,0xe0013502,0x80000000,0x218960,0xe00136c1,0x4000000,0x200000,0xe00136c1,0x7c00100,0x230400,0xe001370b,0x7c00100,0x230400,
+0xe0013919,0x7c00500,0x220400,0xe0013919,0x7c00500,0x22040f,0xe0013919,0x7c00d00,0x23040f,0xe0013a19,0x7c00100,0x220400,0xe0013a19,0x7c00100,0x230400,0xe0013bc2,
+0x2802400,0x962460,0xe0013bc2,0x7c00100,0x230400,0xe0013bc2,0xc000010,0x248000,0xe0013cc3,0x6800000,0x1329800,0xe0013cc3,0x7c00100,0x230400,0xe0013dc4,0x2802400,
+0x962460,0xe0013dc4,0x7c00100,0x230400,0xe0013e28,0x7c00100,0x230400,0xe0013fc5,0x7c00100,0x220400,0xe0013fc5,0x7c00100,0x250400,0xe0014000,0x4000000,0x200000,
+0xe0014001,0x2802400,0x962460,0xe00a4711,0x7c40300,0xe30000,0xe00a5e11,0x7c40300,0xe30000,0xe00ac511,0x7c40300,0xe30000,0xe00acf00,0x4000000,0xe00000,0xe00ae300,
+0x4000000,0xe00000,0xe00b0500,0x4000000,0xe00000,0xe00b1314,0x7c00100,0xe30000,0xe00b1316,0x7c00100,0xe30c00,0xe00b2a00,0x4000000,0xe00000,0xe00b2a00,0x4000000,
+0x2800000,0xe00b3816,0x7c00500,0x230c00,0xe0808328,0x2802400,0x962460};
-static const int32_t countPropsVectors=6999;
+static const int32_t countPropsVectors=7095;
static const int32_t propsVectorsColumns=3;
-static const uint16_t scriptExtensions[262]={
-0x800e,0x8019,8,0x8059,8,2,8,0x8038,8,6,8,0x8019,2,0x22,0x25,0xb6,
-0x80c0,2,0x22,0x8025,2,0x11,2,0x22,0x54,0x79,0x7b,0xa7,0xb6,0x80b7,2,0x8022,
-2,0x25,0x80c0,2,0x20,2,0x80b6,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,
-0x24,0x89,0x97,0x809e,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x809e,
-4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89,0x91,0x99,0x9e,0xa0,
-0xaf,0xb2,0xb3,0x80bb,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x30,0x3a,
-0x89,0x91,0x99,0x9e,0xa0,0xaf,0xb2,0xb3,0x80bb,0xa,0x78,0xa0,0x80b2,0xa,0x69,4,
-0x3a,0x8076,4,0x6f,0x10,0x80a4,0x10,0x74,0xf,0x809d,0xf,0x78,0x23,0x8089,0x23,0x7c,
-0x15,0x80bb,0x15,0x80,0x1c,0x34,0x8076,0x1c,0x84,0xc,0x8019,0x2a,0x2b,0x2c,0x802d,0x1b,
-0x805a,0x800a,4,0xa,0x15,0x8089,0xa,0x8089,4,0x800a,0xa,0x8097,0xa,0x15,0x1a,0x1f,
-0x23,0x8024,0xa,0x80bb,4,0xa,0x15,0x1f,0x24,0x89,0x9e,0x80bb,0x8004,8,0x8022,0x19,
-0x801b,0xa,0x19,0x8089,5,0x11,0x12,0x14,0x16,0x8029,5,0x11,0x12,0x14,0x8016,0x8011,
-5,0x8011,0x11,0x14,0x8016,0x11,0x8019,0xa,0xf,0x10,0x78,0x91,0x99,0x9d,0x9e,0xa0,
-0xa3,0x80b2,0xa,0xf,0x10,0x15,0x1a,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0xb2,0x80bb,
-0xa,0xf,0x10,0x15,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0xb2,0x80bb,0xa,0x98,0xa,
-0x8023,0xa,0xef,0x19,0x1c,0x804f,0x37,0x804e,2,0x8025,2,0xf8,0x2f,0x31,0x8053,0x2f,
-0x8031,2,0x8007,0x89,0x7c,0x8087};
+static const uint16_t scriptExtensions[282]={
+0x800e,0x8019,8,0x8059,8,2,8,0x8038,8,6,8,0x8019,2,0x22,0x25,0x57,
+0xb6,0x80c0,2,0x22,0x8025,2,0x12,2,0x22,0x25,0x57,0xa7,0xb6,0x80c0,2,0x22,
+0x54,0x79,0x7b,0xa7,0xb6,0xb7,0x80c2,2,0x8022,2,0x25,0x80c0,2,0x29,2,0x80b6,
+2,0x2e,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x97,0x809e,4,
+0xa,0xf,0x10,0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x809e,4,0xa,0xf,0x10,0x15,
+0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89,0x91,0x99,0x9e,0xa0,0xaf,0xb2,0xb3,0x80bb,4,
+0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x30,0x3a,0x89,0x91,0x99,0x9e,0xa0,
+0xaf,0xb2,0xb3,0x80bb,0xa,0x78,0xa0,0x80b2,0xa,0x74,4,0x3a,0x8076,4,0x7a,0x10,
+0x80a4,0x10,0x7f,0xf,0x809d,0xf,0x83,0x23,0x8089,0x23,0x87,0x15,0x80bb,0x15,0x8b,0x1c,
+0x34,0x8076,0x1c,0x8f,0xc,0x8019,0x2a,0x2b,0x2c,0x802d,0x1b,0x805a,0x800a,4,0xa,0x15,
+0x8089,0xa,0x8089,4,0x800a,0xa,0x8097,0xa,0x15,0x1a,0x1f,0x23,0x8024,0xa,0x80bb,4,
+0xa,0x15,0x1f,0x24,0x89,0x9e,0x80bb,0x8004,8,0x8022,0x19,0x801b,0xa,0x19,0x8089,5,
+0x11,0x12,0x14,0x16,0x8029,5,0x11,0x12,0x14,0x8016,0x8011,5,0x8011,0x11,0x14,0x8016,
+0x11,0x8019,0xa,0xf,0x10,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0x80b2,0xa,0xf,0x10,
+0x15,0x1a,0x78,0x91,0x99,0x9d,0x9e,0xa0,0xa3,0xb2,0x80bb,0xa,0xf,0x10,0x15,0x78,
+0x91,0x99,0x9d,0x9e,0xa0,0xa3,0xb2,0x80bb,0xa,0xa3,0xa,0x8023,0xa,0xfa,0x19,0x1c,
+0x804f,0x37,0x804e,2,0x8057,2,0x8025,2,0x105,0x2f,0x31,0x8053,0x2f,0x31,0x80c1,0x2f,
+0x8031,2,0x8007,0x79,0x80c2,0x79,0x113,0x89,0x87,0x8087};
-static const int32_t indexes[UPROPS_INDEX_COUNT]={0x2b96,0x2b96,0x2b96,0x2b96,0x6898,3,0x83ef,0x8472,0x8472,0x8472,0xb34c0,0x2a75a31,0,0,0,0};
+static const int32_t indexes[UPROPS_INDEX_COUNT]={0x2c64,0x2c64,0x2c64,0x2c64,0x6b06,3,0x86bd,0x874a,0x874a,0x874a,0xb40c5,0x2a75a31,0,0,0,0};
#endif // INCLUDED_FROM_UCHAR_C
diff --git a/Build/source/libs/icu/icu-src/source/common/ucharstriebuilder.cpp b/Build/source/libs/icu/icu-src/source/common/ucharstriebuilder.cpp
index 049997a2754..3871df6c274 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucharstriebuilder.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucharstriebuilder.cpp
@@ -290,13 +290,13 @@ UCharsTrieBuilder::UCTLinearMatchNode::UCTLinearMatchNode(const UChar *units, in
hash=hash*37u+ustr_hashUCharsN(units, len);
}
-UBool
+bool
UCharsTrieBuilder::UCTLinearMatchNode::operator==(const Node &other) const {
if(this==&other) {
- return TRUE;
+ return true;
}
if(!LinearMatchNode::operator==(other)) {
- return FALSE;
+ return false;
}
const UCTLinearMatchNode &o=(const UCTLinearMatchNode &)other;
return 0==u_memcmp(s, o.s, length);
diff --git a/Build/source/libs/icu/icu-src/source/common/uchriter.cpp b/Build/source/libs/icu/icu-src/source/common/uchriter.cpp
index bedbabc74c2..2967375a6a3 100644
--- a/Build/source/libs/icu/icu-src/source/common/uchriter.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uchriter.cpp
@@ -66,13 +66,13 @@ UCharCharacterIterator::operator=(const UCharCharacterIterator& that) {
UCharCharacterIterator::~UCharCharacterIterator() {
}
-UBool
+bool
UCharCharacterIterator::operator==(const ForwardCharacterIterator& that) const {
if (this == &that) {
- return TRUE;
+ return true;
}
if (typeid(*this) != typeid(that)) {
- return FALSE;
+ return false;
}
UCharCharacterIterator& realThat = (UCharCharacterIterator&)that;
diff --git a/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h b/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h
index 44b73e94da7..dd366417f62 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h
@@ -51,6 +51,7 @@ typedef enum ECleanupCommonType {
UCLN_COMMON_USET,
UCLN_COMMON_UNAMES,
UCLN_COMMON_UPROPS,
+ UCLN_COMMON_EMOJIPROPS,
UCLN_COMMON_UCNV,
UCLN_COMMON_UCNV_IO,
UCLN_COMMON_UDATA,
diff --git a/Build/source/libs/icu/icu-src/source/common/ucmndata.cpp b/Build/source/libs/icu/icu-src/source/common/ucmndata.cpp
index ba2310bb7ab..4215d66257d 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucmndata.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucmndata.cpp
@@ -18,7 +18,7 @@
* contents for locating the individual items by name.
*
* Two formats for the table of contents are supported, which is
- * why there is an abstract inteface involved.
+ * why there is an abstract interface involved.
*
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/ucmndata.h b/Build/source/libs/icu/icu-src/source/common/ucmndata.h
index c3eba9f4d02..486b4fd7b5f 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucmndata.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucmndata.h
@@ -18,10 +18,10 @@
* contents for locating the individual items by name.
*
* Two formats for the table of contents are supported, which is
- * why there is an abstract inteface involved.
+ * why there is an abstract interface involved.
*
* These functions are part of the ICU internal implementation, and
- * are not inteded to be used directly by applications.
+ * are not intended to be used directly by applications.
*/
#ifndef __UCMNDATA_H__
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
index 169ad4c5261..aa1e169c99c 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
@@ -527,7 +527,7 @@ _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){
ucnv_loadSharedData("ksc_5601", &stackPieces, &stackArgs, errorCode);
}
- /* set the function pointers to appropriate funtions */
+ /* set the function pointers to appropriate functions */
cnv->sharedData=(UConverterSharedData*)(&_ISO2022JPData);
uprv_strcpy(myConverterData->locale,"ja");
@@ -578,7 +578,7 @@ _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){
setInitialStateToUnicodeKR(cnv, myConverterData);
setInitialStateFromUnicodeKR(cnv, myConverterData);
- /* set the function pointers to appropriate funtions */
+ /* set the function pointers to appropriate functions */
cnv->sharedData=(UConverterSharedData*)&_ISO2022KRData;
uprv_strcpy(myConverterData->locale,"ko");
}
@@ -605,7 +605,7 @@ _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){
ucnv_loadSharedData("cns-11643-1992", &stackPieces, &stackArgs, errorCode);
- /* set the function pointers to appropriate funtions */
+ /* set the function pointers to appropriate functions */
cnv->sharedData=(UConverterSharedData*)&_ISO2022CNData;
uprv_strcpy(myConverterData->locale,"cn");
@@ -820,7 +820,7 @@ getKey_2022(char c,int32_t* key,int32_t* offset){
return INVALID_2022;
}
-/*runs through a state machine to determine the escape sequence - codepage correspondance
+/*runs through a state machine to determine the escape sequence - codepage correspondence
*/
static void
changeState_2022(UConverter* _this,
@@ -1424,7 +1424,7 @@ toUnicodeCallback(UConverter *cnv,
* KSC5601 : alias to ibm-949 mapping table
* GB2312 : alias to ibm-1386 mapping table
* ISO-8859-1 : Algorithmic implemented as LATIN1 case
-* ISO-8859-7 : alisas to ibm-9409 mapping table
+* ISO-8859-7 : alias to ibm-9409 mapping table
*/
/* preference order of JP charsets */
@@ -2147,7 +2147,7 @@ escape:
changeState_2022(args->converter,&(mySource),
mySourceLimit, ISO_2022_JP,err);
- /* If in ISO-2022-JP only and we successully completed an escape sequence, but previous segment was empty, create an error */
+ /* If in ISO-2022-JP only and we successfully completed an escape sequence, but previous segment was empty, create an error */
if(myData->version==0 && myData->key==0 && U_SUCCESS(*err) && myData->isEmptySegment) {
*err = U_ILLEGAL_ESCAPE_SEQUENCE;
args->converter->toUCallbackReason = UCNV_IRREGULAR;
@@ -2324,7 +2324,7 @@ endloop:
/***************************************************************
* Rules for ISO-2022-KR encoding
* i) The KSC5601 designator sequence should appear only once in a file,
-* at the begining of a line before any KSC5601 characters. This usually
+* at the beginning of a line before any KSC5601 characters. This usually
* means that it appears by itself on the first line of the file
* ii) There are only 2 shifting sequences SO to shift into double byte mode
* and SI to shift into single byte mode
@@ -2849,21 +2849,21 @@ getTrailByte:
* SS2 is a Chinese character as defined in CNS
* 11643-plane-2, until another SS2designation
* appears
-* (Meaning <ESC>N must preceed every 2 byte
+* (Meaning <ESC>N must precede every 2 byte
* sequence.)
*
* ESC $ + I Indicates the immediate two bytes following SS3
* is a Chinese character as defined in CNS
* 11643-plane-3, until another SS3designation
* appears
-* (Meaning <ESC>O must preceed every 2 byte
+* (Meaning <ESC>O must precede every 2 byte
* sequence.)
*
* ESC $ + J Indicates the immediate two bytes following SS3
* is a Chinese character as defined in CNS
* 11643-plane-4, until another SS3designation
* appears
-* (In English: <ESC>O must preceed every 2 byte
+* (In English: <ESC>O must precede every 2 byte
* sequence.)
*
* ESC $ + K Indicates the immediate two bytes following SS3
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
index 0e198892f1b..d08eec73696 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
@@ -427,7 +427,7 @@ getAlgorithmicTypeFromName(const char *realName)
#define UCNV_CACHE_LOAD_FACTOR 2
/* Puts the shared data in the static hashtable SHARED_DATA_HASHTABLE */
-/* Will always be called with the cnvCacheMutex alrady being held */
+/* Will always be called with the cnvCacheMutex already being held */
/* by the calling function. */
/* Stores the shared data in the SHARED_DATA_HASHTABLE
* @param data The shared data
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h b/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h
index 59be8bdb37b..e89eebe54ed 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h
@@ -164,7 +164,7 @@ typedef const char * (*UConverterGetName) (const UConverter *cnv);
* If this function is not set, then ucnv_cbFromUWriteSub() writes
* the substitution character from UConverter.
* For stateful converters, it is typically necessary to handle this
- * specificially for the converter in order to properly maintain the state.
+ * specifically for the converter in order to properly maintain the state.
*/
typedef void (*UConverterWriteSub) (UConverterFromUnicodeArgs *pArgs, int32_t offsetIndex, UErrorCode *pErrorCode);
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_err.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv_err.cpp
index 6b738face5e..4210673ef93 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_err.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_err.cpp
@@ -61,7 +61,7 @@
* When an ignorable code point is found and is unmappable, the default callbacks
* will ignore them.
* For a list of the default ignorable code points, use this link:
- * https://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B%3ADI%3A%5D&abb=on&g=&i=
+ * https://util.unicode.org/UnicodeJsps/list-unicodeset.jsp?a=%5B%3ADI%3A%5D&abb=on&g=&i=
*
* This list should be sync with the one in CharsetCallback.java
*/
@@ -72,7 +72,7 @@
(c == 0x115F) || \
(c == 0x1160) || \
(0x17B4 <= c && c <= 0x17B5) || \
- (0x180B <= c && c <= 0x180E) || \
+ (0x180B <= c && c <= 0x180F) || \
(0x200B <= c && c <= 0x200F) || \
(0x202A <= c && c <= 0x202E) || \
(0x2060 <= c && c <= 0x206F) || \
@@ -321,7 +321,7 @@ UCNV_FROM_U_CALLBACK_ESCAPE (
case UCNV_PRV_ESCAPE_CSS2:
valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */
valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 0);
- /* Always add space character, becase the next character might be whitespace,
+ /* Always add space character, because the next character might be whitespace,
which would erroneously be considered the termination of the escape sequence. */
valueString[valueStringLength++] = (UChar) UNICODE_SPACE_CODEPOINT;
break;
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_imp.h b/Build/source/libs/icu/icu-src/source/common/ucnv_imp.h
index c5e6aeb47e4..cb939911e47 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_imp.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_imp.h
@@ -9,7 +9,7 @@
*
* ucnv_imp.h:
* Contains all internal and external data structure definitions
-* Created & Maitained by Bertrand A. Damiba
+* Created & Maintained by Bertrand A. Damiba
*
*
*
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.cpp
index 168392837b5..6969727927e 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.cpp
@@ -81,7 +81,7 @@
[G] D1 [D2]
That is, a sometimes-optional 'group' byte, followed by 1 and sometimes 2
- data bytes. The maximum size of a LMBCS chjaracter is 3 bytes:
+ data bytes. The maximum size of a LMBCS character is 3 bytes:
*/
#define ULMBCS_CHARSIZE_MAX 3
/*
@@ -149,7 +149,7 @@ Next, you will notice that the list of group bytes has some gaps.
These are used in various ways.
We reserve a few special single byte values for common control
-characters. These are in the same place as their ANSI eqivalents for speed.
+characters. These are in the same place as their ANSI equivalents for speed.
*/
#define ULMBCS_HT 0x09 /* Fixed control char - Horizontal Tab */
@@ -164,7 +164,7 @@ beginning of internal 'system' range names: */
/* Then we needed a place to put all the other ansi control characters
that must be moved to different values because LMBCS reserves those
values for other purposes. To represent the control characters, we start
-with a first byte of 0xF & add the control chaarcter value as the
+with a first byte of 0xF & add the control character value as the
second byte */
#define ULMBCS_GRP_CTRL 0x0F
@@ -192,7 +192,7 @@ LMBCS, was to use up the spaces of the form
LOTUS added a new group 0x14 to hold Unicode values not otherwise
represented in LMBCS: */
#define ULMBCS_GRP_UNICODE 0x14
-/* The two bytes appearing after a 0x14 are intrepreted as UFT-16 BE
+/* The two bytes appearing after a 0x14 are interpreted as UFT-16 BE
(Big-Endian) characters. The exception comes when the UTF16
representation would have a zero as the second byte. In that case,
'F6' is used in its place, and the bytes are swapped. (This prevents
@@ -878,7 +878,7 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args,
A) The optimization group
B) The locale group
C) The last group that succeeded with this string.
- D) every other group that's relevent (single or double)
+ D) every other group that's relevant (single or double)
E) If its single-byte ambiguous, try the exceptions group
4. And as a grand fallback: Unicode
@@ -1049,7 +1049,7 @@ _LMBCSFromUnicode(UConverterFromUnicodeArgs* args,
}
}
- /* we have a translation. increment source and write as much as posible to target */
+ /* we have a translation. increment source and write as much as possible to target */
args->source++;
pLMBCS = LMBCS;
while (args->target < args->targetLimit && bytes_written--)
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_u32.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv_u32.cpp
index 9f98914b9d7..bf6bd11dbac 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_u32.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_u32.cpp
@@ -488,7 +488,7 @@ static const UConverterImpl _UTF32BEImpl = {
NULL
};
-/* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */
+/* The 1232 CCSID refers to any version of Unicode with any endianness of UTF-32 */
static const UConverterStaticData _UTF32BEStaticData = {
sizeof(UConverterStaticData),
"UTF-32BE",
@@ -983,7 +983,7 @@ static const UConverterImpl _UTF32LEImpl = {
NULL
};
-/* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */
+/* The 1232 CCSID refers to any version of Unicode with any endianness of UTF-32 */
static const UConverterStaticData _UTF32LEStaticData = {
sizeof(UConverterStaticData),
"UTF-32LE",
@@ -1230,7 +1230,7 @@ static const UConverterImpl _UTF32Impl = {
NULL
};
-/* The 1236 CCSID refers to any version of Unicode with a BOM sensitive endianess of UTF-32 */
+/* The 1236 CCSID refers to any version of Unicode with a BOM sensitive endianness of UTF-32 */
static const UConverterStaticData _UTF32StaticData = {
sizeof(UConverterStaticData),
"UTF-32",
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnv_u7.cpp b/Build/source/libs/icu/icu-src/source/common/ucnv_u7.cpp
index 87ba8cf37ec..de9f3f42ec9 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnv_u7.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnv_u7.cpp
@@ -814,7 +814,7 @@ const UConverterSharedData _UTF7Data=
* the use of "~" in some servers as a home directory indicator.
*
* 5) UTF-7 permits multiple alternate forms to represent the same
- * string; in particular, printable US-ASCII chararacters can be
+ * string; in particular, printable US-ASCII characters can be
* represented in encoded form.
*
* In modified UTF-7, printable US-ASCII characters except for "&"
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnvisci.cpp b/Build/source/libs/icu/icu-src/source/common/ucnvisci.cpp
index 44a7c05a3c8..f303e7e24fc 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnvisci.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnvisci.cpp
@@ -128,7 +128,7 @@ typedef struct {
MaskEnum currentMaskToUnicode; /* mask for current state in toUnicode */
MaskEnum defMaskToUnicode; /* mask for default state in toUnicode */
UBool isFirstBuffer; /* boolean for fromUnicode to see if we need to announce the first script */
- UBool resetToDefaultToUnicode; /* boolean for reseting to default delta and mask when a newline is encountered*/
+ UBool resetToDefaultToUnicode; /* boolean for resetting to default delta and mask when a newline is encountered*/
char name[sizeof(ISCII_CNV_PREFIX) + 1];
UChar32 prevToUnicodeStatus; /* Hold the previous toUnicodeStatus. This is necessary because we may need to know the last two code points. */
} UConverterDataISCII;
@@ -992,7 +992,7 @@ UConverter_fromUnicode_ISCII_OFFSETS_LOGIC(
if (converterData->currentDeltaFromUnicode == PNJ_DELTA) {
if (sourceChar == PNJ_TIPPI) {
- /* Make sure Tippi is converterd to Bindi. */
+ /* Make sure Tippi is converted to Bindi. */
sourceChar = PNJ_BINDI;
} else if (sourceChar == PNJ_ADHAK) {
/* This is for consonant cluster handling. */
@@ -1105,7 +1105,7 @@ getTrail:
}
static const uint16_t lookupTable[][2]={
- { ZERO, ZERO }, /*DEFALT*/
+ { ZERO, ZERO }, /*DEFAULT*/
{ ZERO, ZERO }, /*ROMAN*/
{ DEVANAGARI, DEV_MASK },
{ BENGALI, BNG_MASK },
@@ -1147,7 +1147,7 @@ static const uint16_t lookupTable[][2]={
/* is the code point valid in current script? */ \
if(sourceChar> ASCII_END && \
(validityTable[(targetUniChar & 0x7F)] & data->currentMaskToUnicode)==0){ \
- /* Vocallic RR is assigne in ISCII Telugu and Unicode */ \
+ /* Vocallic RR is assigned in ISCII Telugu and Unicode */ \
if(data->currentDeltaToUnicode!=(TELUGU_DELTA) || \
targetUniChar!=VOCALLIC_RR){ \
targetUniChar=missingCharMarker; \
@@ -1164,15 +1164,15 @@ static const uint16_t lookupTable[][2]={
* Post context
* i) ATR : Attribute code is used to declare the font and script switching.
* Currently we only switch scripts and font codes consumed without generating an error
- * ii) EXT : Extention code is used to declare switching to Sanskrit and for obscure,
+ * ii) EXT : Extension code is used to declare switching to Sanskrit and for obscure,
* obsolete characters
* Pre context
- * i) Halant: if preceeded by a halant then it is a explicit halant
+ * i) Halant: if preceded by a halant then it is a explicit halant
* ii) Nukta :
- * a) if preceeded by a halant then it is a soft halant
- * b) if preceeded by specific consonants and the ligatures have pre-composed
+ * a) if preceded by a halant then it is a soft halant
+ * b) if preceded by specific consonants and the ligatures have pre-composed
* characters in Unicode then convert to pre-composed characters
- * iii) Danda: If Danda is preceeded by a Danda then convert to Double Danda
+ * iii) Danda: If Danda is preceded by a Danda then convert to Double Danda
*
*/
@@ -1208,7 +1208,7 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCo
if (target < targetLimit) {
sourceChar = (unsigned char)*(source)++;
- /* look at the post-context preform special processing */
+ /* look at the post-context perform special processing */
if (*contextCharToUnicode==ATR) {
/* If we have ATR in *contextCharToUnicode then we need to change our
@@ -1272,7 +1272,7 @@ UConverter_toUnicode_ISCII_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCo
goto CALLBACK;
} else if (*contextCharToUnicode==ISCII_INV) {
if (sourceChar==ISCII_HALANT) {
- targetUniChar = 0x0020; /* replace with space accoding to Indic FAQ */
+ targetUniChar = 0x0020; /* replace with space according to Indic FAQ */
} else {
targetUniChar = ZWJ;
}
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.cpp b/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.cpp
index ca9b0a335ad..420aa02af5b 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.cpp
@@ -1091,7 +1091,7 @@ ucnv_MBCSGetUnicodeSet(const UConverter *cnv,
* Definition of LINEAR macros and gb18030Ranges see near the beginning of the file.
*
* In the future, conversion extensions may handle m:n mappings and delta tables,
- * see http://source.icu-project.org/repos/icu/icuhtml/trunk/design/conversion/conversion_extensions.html
+ * see https://htmlpreview.github.io/?https://github.com/unicode-org/icu-docs/blob/main/design/conversion/conversion_extensions.html
*
* If an input character cannot be mapped, then these functions set an error
* code. The framework will then call the callback function.
@@ -4444,7 +4444,7 @@ getTrail:
* For EUC encodings that use only either 0x8e or 0x8f as the first
* byte of their longest byte sequences, the first two bytes in
* this third stage indicate with their 7th bits whether these bytes
- * are to be written directly or actually need to be preceeded by
+ * are to be written directly or actually need to be preceded by
* one of the two Single-Shift codes. With this, the third stage
* stores one byte fewer per character than the actual maximum length of
* EUC byte sequences.
diff --git a/Build/source/libs/icu/icu-src/source/common/ucnvscsu.cpp b/Build/source/libs/icu/icu-src/source/common/ucnvscsu.cpp
index 74b5722b975..7b580291e1d 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucnvscsu.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucnvscsu.cpp
@@ -16,7 +16,7 @@
* created by: Markus W. Scherer
*
* This is an implementation of the Standard Compression Scheme for Unicode
-* as defined in http://www.unicode.org/unicode/reports/tr6/ .
+* as defined in https://www.unicode.org/reports/tr6/ .
* Reserved commands and window settings are treated as illegal sequences and
* will result in callback calls.
*/
@@ -119,7 +119,7 @@ enum {
};
typedef struct SCSUData {
- /* dynamic window offsets, intitialize to default values from initialDynamicOffsets */
+ /* dynamic window offsets, initialize to default values from initialDynamicOffsets */
uint32_t toUDynamicOffsets[8];
uint32_t fromUDynamicOffsets[8];
diff --git a/Build/source/libs/icu/icu-src/source/common/ucptrie_impl.h b/Build/source/libs/icu/icu-src/source/common/ucptrie_impl.h
index 1fe6a18ac53..048353c80df 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucptrie_impl.h
+++ b/Build/source/libs/icu/icu-src/source/common/ucptrie_impl.h
@@ -148,7 +148,7 @@ U_CFUNC void umutablecptrie_setName(UMutableCPTrie *builder, const char *name);
/*
* Format of the binary, memory-mappable representation of a UCPTrie/CodePointTrie.
- * For overview information see http://site.icu-project.org/design/struct/utrie
+ * For overview information see https://icu.unicode.org/design/struct/utrie
*
* The binary trie data should be 32-bit-aligned.
* The overall layout is:
diff --git a/Build/source/libs/icu/icu-src/source/common/ucurr.cpp b/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
index 0e14cddcff3..67aab4e8ffe 100644
--- a/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
@@ -287,7 +287,7 @@ myUCharsToChars(char* resultOfLen4, const UChar* currency) {
* four integers. The first is the fraction digits. The second is the
* rounding increment, or 0 if none. The rounding increment is in
* units of 10^(-fraction_digits). The third and fourth are the same
- * except that they are those used in cash transations ( cashDigits
+ * except that they are those used in cash transactions ( cashDigits
* and cashRounding ).
*/
static const int32_t*
@@ -844,7 +844,7 @@ typedef struct {
#endif
-// Comparason function used in quick sort.
+// Comparison function used in quick sort.
static int U_CALLCONV currencyNameComparator(const void* a, const void* b) {
const CurrencyNameStruct* currName_1 = (const CurrencyNameStruct*)a;
const CurrencyNameStruct* currName_2 = (const CurrencyNameStruct*)b;
@@ -1312,7 +1312,7 @@ searchCurrencyName(const CurrencyNameStruct* currencyNames,
// The 2nd round binary search search the second "B" in the text against
// the 2nd char in currency names, and narrow the matching range to
// "BB BBEX BBEXYZ" (and the maximum matching "BB").
- // The 3rd round returnes the range as "BBEX BBEXYZ" (without changing
+ // The 3rd round returns the range as "BBEX BBEXYZ" (without changing
// maximum matching).
// The 4th round returns the same range (the maximum matching is "BBEX").
// The 5th round returns no matching range.
@@ -1530,7 +1530,7 @@ uprv_parseCurrency(const char* locale,
int32_t max = 0;
int32_t matchIndex = -1;
- // case in-sensitive comparision against currency names
+ // case in-sensitive comparison against currency names
searchCurrencyName(currencyNames, total_currency_name_count,
upperText, textLen, partialMatchLen, &max, &matchIndex);
@@ -1791,7 +1791,6 @@ static const struct CurrencyList {
{"ECV", UCURR_UNCOMMON|UCURR_DEPRECATED},
{"EEK", UCURR_COMMON|UCURR_DEPRECATED},
{"EGP", UCURR_COMMON|UCURR_NON_DEPRECATED},
- {"EQE", UCURR_COMMON|UCURR_DEPRECATED}, // questionable, remove?
{"ERN", UCURR_COMMON|UCURR_NON_DEPRECATED},
{"ESA", UCURR_UNCOMMON|UCURR_DEPRECATED},
{"ESB", UCURR_UNCOMMON|UCURR_DEPRECATED},
@@ -1963,9 +1962,11 @@ static const struct CurrencyList {
{"UYI", UCURR_UNCOMMON|UCURR_NON_DEPRECATED},
{"UYP", UCURR_COMMON|UCURR_DEPRECATED},
{"UYU", UCURR_COMMON|UCURR_NON_DEPRECATED},
+ {"UYW", UCURR_UNCOMMON|UCURR_NON_DEPRECATED},
{"UZS", UCURR_COMMON|UCURR_NON_DEPRECATED},
{"VEB", UCURR_COMMON|UCURR_DEPRECATED},
{"VEF", UCURR_COMMON|UCURR_NON_DEPRECATED},
+ {"VES", UCURR_COMMON|UCURR_NON_DEPRECATED},
{"VND", UCURR_COMMON|UCURR_NON_DEPRECATED},
{"VNN", UCURR_COMMON|UCURR_DEPRECATED},
{"VUV", UCURR_COMMON|UCURR_NON_DEPRECATED},
diff --git a/Build/source/libs/icu/icu-src/source/common/uelement.h b/Build/source/libs/icu/icu-src/source/common/uelement.h
index 88dd4d66fb9..2c5a2043e17 100644
--- a/Build/source/libs/icu/icu-src/source/common/uelement.h
+++ b/Build/source/libs/icu/icu-src/source/common/uelement.h
@@ -54,9 +54,12 @@ typedef UBool U_CALLCONV UElementsAreEqual(const UElement e1, const UElement e2)
* An element sorting (three-way) comparison function.
* @param e1 An element (object or integer)
* @param e2 An element (object or integer)
- * @return 0 if the two elements are equal, -1 if e1 is < e2, or +1 if e1 is > e2.
+ * @return 32-bit signed integer comparison result:
+ * ==0 if the two elements are equal,
+ * <0 if e1 is < e2, or
+ * >0 if e1 is > e2.
*/
-typedef int8_t U_CALLCONV UElementComparator(UElement e1, UElement e2);
+typedef int32_t U_CALLCONV UElementComparator(UElement e1, UElement e2);
/**
* An element assignment function. It may copy an integer, copy
diff --git a/Build/source/libs/icu/icu-src/source/common/uhash.cpp b/Build/source/libs/icu/icu-src/source/common/uhash.cpp
index 86311ceb0b2..2e331b71722 100644
--- a/Build/source/libs/icu/icu-src/source/common/uhash.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uhash.cpp
@@ -133,8 +133,10 @@ static const float RESIZE_POLICY_RATIO_TABLE[6] = {
* or a pointer. If a hint bit is zero, then the associated
* token is assumed to be an integer.
*/
+#define HINT_BOTH_INTEGERS (0)
#define HINT_KEY_POINTER (1)
#define HINT_VALUE_POINTER (2)
+#define HINT_ALLOW_ZERO (4)
/********************************************************************
* PRIVATE Implementation
@@ -318,7 +320,7 @@ _uhash_create(UHashFunction *keyHash,
* Stop if it is identical or empty, otherwise continue by adding a
* "jump" value (moduloing by the length again to keep it within
* range) and retesting. For efficiency, there need enough empty
- * values so that the searchs stop within a reasonable amount of time.
+ * values so that the searches stop within a reasonable amount of time.
* This can be changed by changing the high/low water marks.
*
* In theory, this function can return NULL, if it is full (no empty
@@ -377,7 +379,7 @@ _uhash_find(const UHashtable *hash, UHashTok key,
* WILL NEVER HAPPEN as long as uhash_put() makes sure that
* count is always < length.
*/
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
return &(elements[theIndex]);
}
@@ -479,8 +481,9 @@ _uhash_put(UHashtable *hash,
goto err;
}
U_ASSERT(hash != NULL);
- /* Cannot always check pointer here or iSeries sees NULL every time. */
- if ((hint & HINT_VALUE_POINTER) && value.pointer == NULL) {
+ if ((hint & HINT_VALUE_POINTER) ?
+ value.pointer == NULL :
+ value.integer == 0 && (hint & HINT_ALLOW_ZERO) == 0) {
/* Disallow storage of NULL values, since NULL is returned by
* get() to indicate an absent key. Storing NULL == removing.
*/
@@ -687,6 +690,28 @@ uhash_igeti(const UHashtable *hash,
return _uhash_find(hash, keyholder, hash->keyHasher(keyholder))->value.integer;
}
+U_CAPI int32_t U_EXPORT2
+uhash_getiAndFound(const UHashtable *hash,
+ const void *key,
+ UBool *found) {
+ UHashTok keyholder;
+ keyholder.pointer = (void *)key;
+ const UHashElement *e = _uhash_find(hash, keyholder, hash->keyHasher(keyholder));
+ *found = !IS_EMPTY_OR_DELETED(e->hashcode);
+ return e->value.integer;
+}
+
+U_CAPI int32_t U_EXPORT2
+uhash_igetiAndFound(const UHashtable *hash,
+ int32_t key,
+ UBool *found) {
+ UHashTok keyholder;
+ keyholder.integer = key;
+ const UHashElement *e = _uhash_find(hash, keyholder, hash->keyHasher(keyholder));
+ *found = !IS_EMPTY_OR_DELETED(e->hashcode);
+ return e->value.integer;
+}
+
U_CAPI void* U_EXPORT2
uhash_put(UHashtable *hash,
void* key,
@@ -736,7 +761,34 @@ uhash_iputi(UHashtable *hash,
keyholder.integer = key;
valueholder.integer = value;
return _uhash_put(hash, keyholder, valueholder,
- 0, /* neither is a ptr */
+ HINT_BOTH_INTEGERS,
+ status).integer;
+}
+
+U_CAPI int32_t U_EXPORT2
+uhash_putiAllowZero(UHashtable *hash,
+ void *key,
+ int32_t value,
+ UErrorCode *status) {
+ UHashTok keyholder, valueholder;
+ keyholder.pointer = key;
+ valueholder.integer = value;
+ return _uhash_put(hash, keyholder, valueholder,
+ HINT_KEY_POINTER | HINT_ALLOW_ZERO,
+ status).integer;
+}
+
+
+U_CAPI int32_t U_EXPORT2
+uhash_iputiAllowZero(UHashtable *hash,
+ int32_t key,
+ int32_t value,
+ UErrorCode *status) {
+ UHashTok keyholder, valueholder;
+ keyholder.integer = key;
+ valueholder.integer = value;
+ return _uhash_put(hash, keyholder, valueholder,
+ HINT_BOTH_INTEGERS | HINT_ALLOW_ZERO,
status).integer;
}
@@ -785,6 +837,29 @@ uhash_removeAll(UHashtable *hash) {
U_ASSERT(hash->count == 0);
}
+U_CAPI UBool U_EXPORT2
+uhash_containsKey(const UHashtable *hash, const void *key) {
+ UHashTok keyholder;
+ keyholder.pointer = (void *)key;
+ const UHashElement *e = _uhash_find(hash, keyholder, hash->keyHasher(keyholder));
+ return !IS_EMPTY_OR_DELETED(e->hashcode);
+}
+
+/**
+ * Returns true if the UHashtable contains an item with this integer key.
+ *
+ * @param hash The target UHashtable.
+ * @param key An integer key stored in a hashtable
+ * @return true if the key is found.
+ */
+U_CAPI UBool U_EXPORT2
+uhash_icontainsKey(const UHashtable *hash, int32_t key) {
+ UHashTok keyholder;
+ keyholder.integer = key;
+ const UHashElement *e = _uhash_find(hash, keyholder, hash->keyHasher(keyholder));
+ return !IS_EMPTY_OR_DELETED(e->hashcode);
+}
+
U_CAPI const UHashElement* U_EXPORT2
uhash_find(const UHashtable *hash, const void* key) {
UHashTok keyholder;
diff --git a/Build/source/libs/icu/icu-src/source/common/uhash.h b/Build/source/libs/icu/icu-src/source/common/uhash.h
index b59d2711bb2..2ce296f0ec7 100644
--- a/Build/source/libs/icu/icu-src/source/common/uhash.h
+++ b/Build/source/libs/icu/icu-src/source/common/uhash.h
@@ -23,7 +23,7 @@
/**
* UHashtable stores key-value pairs and does moderately fast lookup
* based on keys. It provides a good tradeoff between access time and
- * storage space. As elements are added to it, it grows to accomodate
+ * storage space. As elements are added to it, it grows to accommodate
* them. By default, the table never shrinks, even if all elements
* are removed from it.
*
@@ -54,6 +54,13 @@
* uhash_remove() on that key. This keeps uhash_get(), uhash_count(),
* and uhash_nextElement() consistent with one another.
*
+ * Keys and values can be integers.
+ * Functions that work with an integer key have an "i" prefix.
+ * Functions that work with an integer value have an "i" suffix.
+ * As with putting a NULL value pointer, putting a zero value integer removes the item.
+ * Except, there are pairs of functions that allow setting zero values
+ * and fetching (value, found) pairs.
+ *
* To see everything in a hashtable, use uhash_nextElement() to
* iterate through its contents. Each call to this function returns a
* UHashElement pointer. A hash element contains a key, value, and
@@ -121,7 +128,7 @@ typedef UElementsAreEqual UValueComparator;
/* see cmemory.h for UObjectDeleter and uprv_deleteUObject() */
/**
- * This specifies whether or not, and how, the hastable resizes itself.
+ * This specifies whether or not, and how, the hashtable resizes itself.
* See uhash_setResizePolicy().
*/
enum UHashResizePolicy {
@@ -202,7 +209,7 @@ uhash_open(UHashFunction *keyHash,
* NULL.
* @param keyComp A pointer to the function that compares keys. Must
* not be NULL.
- * @param size The initial capacity of this hash table.
+ * @param size The initial capacity of this hashtable.
* @param status A pointer to an UErrorCode to receive any errors.
* @return A pointer to a UHashtable, or 0 if an error occurred.
* @see uhash_open
@@ -237,7 +244,7 @@ uhash_init(UHashtable *hash,
* NULL.
* @param keyComp A pointer to the function that compares keys. Must
* not be NULL.
- * @param size The initial capacity of this hash table.
+ * @param size The initial capacity of this hashtable.
* @param status A pointer to an UErrorCode to receive any errors.
* @return A pointer to a UHashtable, or 0 if an error occurred.
* @see uhash_openSize
@@ -315,7 +322,7 @@ U_CAPI UObjectDeleter *U_EXPORT2
uhash_setValueDeleter(UHashtable *hash, UObjectDeleter *fn);
/**
- * Specify whether or not, and how, the hastable resizes itself.
+ * Specify whether or not, and how, the hashtable resizes itself.
* By default, tables grow but do not shrink (policy U_GROW).
* See enum UHashResizePolicy.
* @param hash The UHashtable to set
@@ -406,6 +413,44 @@ uhash_iputi(UHashtable *hash,
UErrorCode *status);
/**
+ * Put a (key=pointer, value=integer) item in a UHashtable. If the
+ * keyDeleter is non-NULL, then the hashtable owns 'key' after this
+ * call. valueDeleter must be NULL.
+ * Storing a 0 value is possible; call uhash_igetiAndFound() to retrieve values including zero.
+ *
+ * @param hash The target UHashtable.
+ * @param key The key to store.
+ * @param value The integer value to store.
+ * @param status A pointer to an UErrorCode to receive any errors.
+ * @return The previous value, or 0 if none.
+ * @see uhash_getiAndFound
+ */
+U_CAPI int32_t U_EXPORT2
+uhash_putiAllowZero(UHashtable *hash,
+ void *key,
+ int32_t value,
+ UErrorCode *status);
+
+/**
+ * Put a (key=integer, value=integer) item in a UHashtable. If the
+ * keyDeleter is non-NULL, then the hashtable owns 'key' after this
+ * call. valueDeleter must be NULL.
+ * Storing a 0 value is possible; call uhash_igetiAndFound() to retrieve values including zero.
+ *
+ * @param hash The target UHashtable.
+ * @param key The key to store.
+ * @param value The integer value to store.
+ * @param status A pointer to an UErrorCode to receive any errors.
+ * @return The previous value, or 0 if none.
+ * @see uhash_igetiAndFound
+ */
+U_CAPI int32_t U_EXPORT2
+uhash_iputiAllowZero(UHashtable *hash,
+ int32_t key,
+ int32_t value,
+ UErrorCode *status);
+
+/**
* Retrieve a pointer value from a UHashtable using a pointer key,
* as previously stored by uhash_put().
* @param hash The target UHashtable.
@@ -449,6 +494,34 @@ uhash_igeti(const UHashtable *hash,
int32_t key);
/**
+ * Retrieves an integer value from a UHashtable using a pointer key,
+ * as previously stored by uhash_putiAllowZero() or uhash_puti().
+ *
+ * @param hash The target UHashtable.
+ * @param key A pointer key stored in a hashtable
+ * @param found A pointer to a boolean which will be set for whether the key was found.
+ * @return The requested item, or 0 if not found.
+ */
+U_CAPI int32_t U_EXPORT2
+uhash_getiAndFound(const UHashtable *hash,
+ const void *key,
+ UBool *found);
+
+/**
+ * Retrieves an integer value from a UHashtable using an integer key,
+ * as previously stored by uhash_iputiAllowZero() or uhash_iputi().
+ *
+ * @param hash The target UHashtable.
+ * @param key An integer key stored in a hashtable
+ * @param found A pointer to a boolean which will be set for whether the key was found.
+ * @return The requested item, or 0 if not found.
+ */
+U_CAPI int32_t U_EXPORT2
+uhash_igetiAndFound(const UHashtable *hash,
+ int32_t key,
+ UBool *found);
+
+/**
* Remove an item from a UHashtable stored by uhash_put().
* @param hash The target UHashtable.
* @param key A key stored in a hashtable
@@ -496,6 +569,26 @@ U_CAPI void U_EXPORT2
uhash_removeAll(UHashtable *hash);
/**
+ * Returns true if the UHashtable contains an item with this pointer key.
+ *
+ * @param hash The target UHashtable.
+ * @param key A pointer key stored in a hashtable
+ * @return true if the key is found.
+ */
+U_CAPI UBool U_EXPORT2
+uhash_containsKey(const UHashtable *hash, const void *key);
+
+/**
+ * Returns true if the UHashtable contains an item with this integer key.
+ *
+ * @param hash The target UHashtable.
+ * @param key An integer key stored in a hashtable
+ * @return true if the key is found.
+ */
+U_CAPI UBool U_EXPORT2
+uhash_icontainsKey(const UHashtable *hash, int32_t key);
+
+/**
* Locate an element of a UHashtable. The caller must not modify the
* returned object. The primary use of this function is to obtain the
* stored key when it may not be identical to the search key. For
@@ -687,7 +780,7 @@ uhash_deleteHashtable(void *obj);
/* Use uprv_free() itself as a deleter for any key or value allocated using uprv_malloc. */
/**
- * Checks if the given hash tables are equal or not.
+ * Checks if the given hashtables are equal or not.
* @param hash1
* @param hash2
* @return true if the hashtables are equal and false if not.
diff --git a/Build/source/libs/icu/icu-src/source/common/uloc.cpp b/Build/source/libs/icu/icu-src/source/common/uloc.cpp
index ebfbb506508..c8a3f1ff731 100644
--- a/Build/source/libs/icu/icu-src/source/common/uloc.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uloc.cpp
@@ -143,7 +143,7 @@ static const char * const LANGUAGES[] = {
"mad", "maf", "mag", "mai", "mak", "man", "mas", "mde",
"mdf", "mdh", "mdr", "men", "mer", "mfe", "mg", "mga",
"mgh", "mgo", "mh", "mi", "mic", "min", "mis", "mk",
- "ml", "mn", "mnc", "mni", "mo",
+ "ml", "mn", "mnc", "mni",
"moh", "mos", "mr", "mrj",
"ms", "mt", "mua", "mul", "mus", "mwl", "mwr", "mwv",
"my", "mye", "myv", "mzn",
@@ -166,9 +166,9 @@ static const char * const LANGUAGES[] = {
"sl", "sli", "sly", "sm", "sma", "smj", "smn", "sms",
"sn", "snk", "so", "sog", "sq", "sr", "srn", "srr",
"ss", "ssy", "st", "stq", "su", "suk", "sus", "sux",
- "sv", "sw", "swb", "swc", "syc", "syr", "szl",
+ "sv", "sw", "swb", "syc", "syr", "szl",
"ta", "tcy", "te", "tem", "teo", "ter", "tet", "tg",
- "th", "ti", "tig", "tiv", "tk", "tkl", "tkr", "tl",
+ "th", "ti", "tig", "tiv", "tk", "tkl", "tkr",
"tlh", "tli", "tly", "tmh", "tn", "to", "tog", "tpi",
"tr", "tru", "trv", "ts", "tsd", "tsi", "tt", "ttt",
"tum", "tvl", "tw", "twq", "ty", "tyv", "tzm",
@@ -181,7 +181,7 @@ static const char * const LANGUAGES[] = {
"za", "zap", "zbl", "zea", "zen", "zgh", "zh", "zu",
"zun", "zxx", "zza",
NULL,
- "in", "iw", "ji", "jw", "sh", /* obsolete language codes */
+ "in", "iw", "ji", "jw", "mo", "sh", "swc", "tl", /* obsolete language codes */
NULL
};
@@ -260,7 +260,7 @@ static const char * const LANGUAGES_3[] = {
"mad", "maf", "mag", "mai", "mak", "man", "mas", "mde",
"mdf", "mdh", "mdr", "men", "mer", "mfe", "mlg", "mga",
"mgh", "mgo", "mah", "mri", "mic", "min", "mis", "mkd",
- "mal", "mon", "mnc", "mni", "mol",
+ "mal", "mon", "mnc", "mni",
"moh", "mos", "mar", "mrj",
"msa", "mlt", "mua", "mul", "mus", "mwl", "mwr", "mwv",
"mya", "mye", "myv", "mzn",
@@ -283,9 +283,9 @@ static const char * const LANGUAGES_3[] = {
"slv", "sli", "sly", "smo", "sma", "smj", "smn", "sms",
"sna", "snk", "som", "sog", "sqi", "srp", "srn", "srr",
"ssw", "ssy", "sot", "stq", "sun", "suk", "sus", "sux",
- "swe", "swa", "swb", "swc", "syc", "syr", "szl",
+ "swe", "swa", "swb", "syc", "syr", "szl",
"tam", "tcy", "tel", "tem", "teo", "ter", "tet", "tgk",
- "tha", "tir", "tig", "tiv", "tuk", "tkl", "tkr", "tgl",
+ "tha", "tir", "tig", "tiv", "tuk", "tkl", "tkr",
"tlh", "tli", "tly", "tmh", "tsn", "ton", "tog", "tpi",
"tur", "tru", "trv", "tso", "tsd", "tsi", "tat", "ttt",
"tum", "tvl", "twi", "twq", "tah", "tyv", "tzm",
@@ -298,8 +298,8 @@ static const char * const LANGUAGES_3[] = {
"zha", "zap", "zbl", "zea", "zen", "zgh", "zho", "zul",
"zun", "zxx", "zza",
NULL,
-/* "in", "iw", "ji", "jw", "sh", */
- "ind", "heb", "yid", "jaw", "srp",
+/* "in", "iw", "ji", "jw", "mo", "sh", "swc", "tl", */
+ "ind", "heb", "yid", "jaw", "mol", "srp", "swc", "tgl",
NULL
};
@@ -334,13 +334,13 @@ static const char * const COUNTRIES[] = {
"BJ", "BL", "BM", "BN", "BO", "BQ", "BR", "BS", "BT", "BV",
"BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG",
"CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR",
- "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DJ", "DK",
- "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER",
+ "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DG", "DJ", "DK",
+ "DM", "DO", "DZ", "EA", "EC", "EE", "EG", "EH", "ER",
"ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR",
"GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL",
"GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU",
"GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU",
- "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS",
+ "IC", "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS",
"IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI",
"KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA",
"LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU",
@@ -357,7 +357,7 @@ static const char * const COUNTRIES[] = {
"TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV",
"TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ",
"VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF",
- "WS", "YE", "YT", "ZA", "ZM", "ZW",
+ "WS", "XK", "YE", "YT", "ZA", "ZM", "ZW",
NULL,
"AN", "BU", "CS", "FX", "RO", "SU", "TP", "YD", "YU", "ZR", /* obsolete country codes */
NULL
@@ -397,10 +397,10 @@ static const char * const COUNTRIES_3[] = {
"BWA", "BLR", "BLZ", "CAN", "CCK", "COD", "CAF", "COG",
/* "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", */
"CHE", "CIV", "COK", "CHL", "CMR", "CHN", "COL", "CRI",
-/* "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DJ", "DK", */
- "CUB", "CPV", "CUW", "CXR", "CYP", "CZE", "DEU", "DJI", "DNK",
-/* "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", */
- "DMA", "DOM", "DZA", "ECU", "EST", "EGY", "ESH", "ERI",
+/* "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DG", "DJ", "DK", */
+ "CUB", "CPV", "CUW", "CXR", "CYP", "CZE", "DEU", "DGA", "DJI", "DNK",
+/* "DM", "DO", "DZ", "EA", "EC", "EE", "EG", "EH", "ER", */
+ "DMA", "DOM", "DZA", "XEA", "ECU", "EST", "EGY", "ESH", "ERI",
/* "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", */
"ESP", "ETH", "FIN", "FJI", "FLK", "FSM", "FRO", "FRA",
/* "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", */
@@ -409,8 +409,8 @@ static const char * const COUNTRIES_3[] = {
"GMB", "GIN", "GLP", "GNQ", "GRC", "SGS", "GTM", "GUM",
/* "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", */
"GNB", "GUY", "HKG", "HMD", "HND", "HRV", "HTI", "HUN",
-/* "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS" */
- "IDN", "IRL", "ISR", "IMN", "IND", "IOT", "IRQ", "IRN", "ISL",
+/* "IC", "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS" */
+ "XIC", "IDN", "IRL", "ISR", "IMN", "IND", "IOT", "IRQ", "IRN", "ISL",
/* "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", */
"ITA", "JEY", "JAM", "JOR", "JPN", "KEN", "KGZ", "KHM", "KIR",
/* "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", */
@@ -443,8 +443,8 @@ static const char * const COUNTRIES_3[] = {
"TWN", "TZA", "UKR", "UGA", "UMI", "USA", "URY", "UZB",
/* "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", */
"VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF",
-/* "WS", "YE", "YT", "ZA", "ZM", "ZW", */
- "WSM", "YEM", "MYT", "ZAF", "ZMB", "ZWE",
+/* "WS", "XK", "YE", "YT", "ZA", "ZM", "ZW", */
+ "WSM", "XXK", "YEM", "MYT", "ZAF", "ZMB", "ZWE",
NULL,
/* "AN", "BU", "CS", "FX", "RO", "SU", "TP", "YD", "YU", "ZR" */
"ANT", "BUR", "SCG", "FXX", "ROM", "SUN", "TMP", "YMD", "YUG", "ZAR",
@@ -478,15 +478,24 @@ static const CanonicalizationMap CANONICALIZE_MAP[] = {
/* Test if the locale id has BCP47 u extension and does not have '@' */
#define _hasBCP47Extension(id) (id && uprv_strstr(id, "@") == NULL && getShortestSubtagLength(localeID) == 1)
/* Converts the BCP47 id to Unicode id. Does nothing to id if conversion fails */
-#define _ConvertBCP47(finalID, id, buffer, length,err) UPRV_BLOCK_MACRO_BEGIN { \
- if (uloc_forLanguageTag(id, buffer, length, NULL, err) <= 0 || \
- U_FAILURE(*err) || *err == U_STRING_NOT_TERMINATED_WARNING) { \
- finalID=id; \
- if (*err == U_STRING_NOT_TERMINATED_WARNING) { *err = U_BUFFER_OVERFLOW_ERROR; } \
- } else { \
- finalID=buffer; \
- } \
-} UPRV_BLOCK_MACRO_END
+static const char* _ConvertBCP47(
+ const char* id, char* buffer, int32_t length,
+ UErrorCode* err, int32_t* pLocaleIdSize) {
+ const char* finalID;
+ int32_t localeIDSize = uloc_forLanguageTag(id, buffer, length, NULL, err);
+ if (localeIDSize <= 0 || U_FAILURE(*err) || *err == U_STRING_NOT_TERMINATED_WARNING) {
+ finalID=id;
+ if (*err == U_STRING_NOT_TERMINATED_WARNING) {
+ *err = U_BUFFER_OVERFLOW_ERROR;
+ }
+ } else {
+ finalID=buffer;
+ }
+ if (pLocaleIdSize != nullptr) {
+ *pLocaleIdSize = localeIDSize;
+ }
+ return finalID;
+}
/* Gets the size of the shortest subtag in the given localeID. */
static int32_t getShortestSubtagLength(const char *localeID) {
int32_t localeIDLength = static_cast<int32_t>(uprv_strlen(localeID));
@@ -767,7 +776,8 @@ ulocimp_getKeywordValue(const char* localeID,
}
if (_hasBCP47Extension(localeID)) {
- _ConvertBCP47(tmpLocaleID, localeID, tempBuffer, sizeof(tempBuffer), status);
+ tmpLocaleID = _ConvertBCP47(localeID, tempBuffer,
+ sizeof(tempBuffer), status, nullptr);
} else {
tmpLocaleID=localeID;
}
@@ -1404,10 +1414,11 @@ uloc_openKeywords(const char* localeID,
}
if (_hasBCP47Extension(localeID)) {
- _ConvertBCP47(tmpLocaleID, localeID, tempBuffer, sizeof(tempBuffer), status);
+ tmpLocaleID = _ConvertBCP47(localeID, tempBuffer,
+ sizeof(tempBuffer), status, nullptr);
} else {
if (localeID==NULL) {
- localeID=uloc_getDefault();
+ localeID=uloc_getDefault();
}
tmpLocaleID=localeID;
}
@@ -1473,19 +1484,41 @@ _canonicalize(const char* localeID,
ByteSink& sink,
uint32_t options,
UErrorCode* err) {
+ if (U_FAILURE(*err)) {
+ return;
+ }
+
int32_t j, fieldCount=0, scriptSize=0, variantSize=0;
- char tempBuffer[ULOC_FULLNAME_CAPACITY];
+ PreflightingLocaleIDBuffer tempBuffer; // if localeID has a BCP47 extension, tmpLocaleID points to this
+ CharString localeIDWithHyphens; // if localeID has a BPC47 extension and have _, tmpLocaleID points to this
const char* origLocaleID;
const char* tmpLocaleID;
const char* keywordAssign = NULL;
const char* separatorIndicator = NULL;
- if (U_FAILURE(*err)) {
- return;
- }
-
if (_hasBCP47Extension(localeID)) {
- _ConvertBCP47(tmpLocaleID, localeID, tempBuffer, sizeof(tempBuffer), err);
+ const char* localeIDPtr = localeID;
+
+ // convert all underbars to hyphens, unless the "BCP47 extension" comes at the beginning of the string
+ if (uprv_strchr(localeID, '_') != nullptr && localeID[1] != '-' && localeID[1] != '_') {
+ localeIDWithHyphens.append(localeID, -1, *err);
+ if (U_SUCCESS(*err)) {
+ for (char* p = localeIDWithHyphens.data(); *p != '\0'; ++p) {
+ if (*p == '_') {
+ *p = '-';
+ }
+ }
+ localeIDPtr = localeIDWithHyphens.data();
+ }
+ }
+
+ do {
+ // After this call tmpLocaleID may point to localeIDPtr which may
+ // point to either localeID or localeIDWithHyphens.data().
+ tmpLocaleID = _ConvertBCP47(localeIDPtr, tempBuffer.getBuffer(),
+ tempBuffer.getCapacity(), err,
+ &(tempBuffer.requestedCapacity));
+ } while (tempBuffer.needToTryAgain(err));
} else {
if (localeID==NULL) {
localeID=uloc_getDefault();
@@ -1771,7 +1804,7 @@ uloc_getVariant(const char* localeID,
}
if (_hasBCP47Extension(localeID)) {
- _ConvertBCP47(tmpLocaleID, localeID, tempBuffer, sizeof(tempBuffer), err);
+ tmpLocaleID =_ConvertBCP47(localeID, tempBuffer, sizeof(tempBuffer), err, nullptr);
} else {
if (localeID==NULL) {
localeID=uloc_getDefault();
diff --git a/Build/source/libs/icu/icu-src/source/common/uloc_keytype.cpp b/Build/source/libs/icu/icu-src/source/common/uloc_keytype.cpp
index 019da058cf4..580244124ee 100644
--- a/Build/source/libs/icu/icu-src/source/common/uloc_keytype.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uloc_keytype.cpp
@@ -168,11 +168,13 @@ initFromResourceBundle(UErrorCode& sts) {
}
// look up type map for the key, and walk through the mapping data
- tmpSts = U_ZERO_ERROR;
- LocalUResourceBundlePointer typeMapResByKey(ures_getByKey(typeMapRes.getAlias(), legacyKeyId, NULL, &tmpSts));
- if (U_FAILURE(tmpSts)) {
- // type map for each key must exist
- UPRV_UNREACHABLE;
+ LocalUResourceBundlePointer typeMapResByKey(ures_getByKey(typeMapRes.getAlias(), legacyKeyId, NULL, &sts));
+ if (U_FAILURE(sts)) {
+ // We fail here if typeMap does not have an entry corresponding to every entry in keyMap (should
+ // not happen for valid keyTypeData), or if ures_getByKeyfails fails for some other reason
+ // (e.g. data file cannot be loaded, using stubdata, over-aggressive data filtering has removed
+ // something like timezoneTypes.res, etc.). Error code is already set. See ICU-21669.
+ UPRV_UNREACHABLE_ASSERT;
} else {
LocalUResourceBundlePointer typeMapEntry;
@@ -271,7 +273,7 @@ initFromResourceBundle(UErrorCode& sts) {
if (U_FAILURE(sts)) {
break;
}
- // check if this is an alias of canoncal legacy type
+ // check if this is an alias of canonical legacy type
if (uprv_compareInvWithUChar(NULL, legacyTypeId, -1, to, toLen) == 0) {
const char* from = ures_getKey(typeAliasDataEntry.getAlias());
if (isTZ) {
diff --git a/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp b/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
index 7f7fd9119e9..0150e94cefd 100644
--- a/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
@@ -129,7 +129,6 @@ static const char* const LEGACY[] = {
// Legacy tags with no preferred value in the IANA
// registry. Kept for now for the backward compatibility
// because ICU has mapped them this way.
- "cel-gaulish", "xtg-x-cel-gaulish",
"i-default", "en-x-i-default",
"i-enochian", "und-x-i-enochian",
"i-mingo", "see-x-i-mingo",
@@ -140,7 +139,7 @@ static const char* const LEGACY[] = {
Updated on 2018-09-12 from
https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry .
- The table lists redundant tags with preferred value in the IANA languate tag registry.
+ The table lists redundant tags with preferred value in the IANA language tag registry.
It's generated with the following command:
curl https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry |\
@@ -647,6 +646,22 @@ _isTKey(const char* s, int32_t len)
return FALSE;
}
+U_CAPI const char * U_EXPORT2
+ultag_getTKeyStart(const char *localeID) {
+ const char *result = localeID;
+ const char *sep;
+ while((sep = uprv_strchr(result, SEP)) != nullptr) {
+ if (_isTKey(result, static_cast<int32_t>(sep - result))) {
+ return result;
+ }
+ result = ++sep;
+ }
+ if (_isTKey(result, -1)) {
+ return result;
+ }
+ return nullptr;
+}
+
static UBool
_isTValue(const char* s, int32_t len)
{
@@ -671,9 +686,13 @@ _isTransformedExtensionSubtag(int32_t& state, const char* s, int32_t len)
const int32_t kGotTKey = -1; // Got tkey, wait for tvalue. ERROR if stop here.
const int32_t kGotTValue = 6; // Got tvalue, wait for tkey, tvalue or end
+
+ if (len < 0) {
+ len = (int32_t)uprv_strlen(s);
+ }
switch (state) {
case kStart:
- if (ultag_isLanguageSubtag(s, len)) {
+ if (ultag_isLanguageSubtag(s, len) && len != 4) {
state = kGotLanguage;
return TRUE;
}
@@ -1593,7 +1612,7 @@ _appendLDMLExtensionAsKeywords(const char* ldmlext, ExtensionListEntry** appendT
}
if (pKwds) {
- const char *pBcpKey = NULL; /* u extenstion key subtag */
+ const char *pBcpKey = NULL; /* u extension key subtag */
const char *pBcpType = NULL; /* beginning of u extension type subtag(s) */
int32_t bcpKeyLen = 0;
int32_t bcpTypeLen = 0;
@@ -1775,11 +1794,6 @@ _appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode* status)
return;
}
- /* Determine if variants already exists */
- if (ultag_getVariantsSize(langtag)) {
- posixVariant = TRUE;
- }
-
n = ultag_getExtensionsSize(langtag);
/* resolve locale keywords and reordering keys */
@@ -1787,6 +1801,11 @@ _appendKeywords(ULanguageTag* langtag, icu::ByteSink& sink, UErrorCode* status)
key = ultag_getExtensionKey(langtag, i);
type = ultag_getExtensionValue(langtag, i);
if (*key == LDMLEXT) {
+ /* Determine if variants already exists */
+ if (ultag_getVariantsSize(langtag)) {
+ posixVariant = TRUE;
+ }
+
_appendLDMLExtensionAsKeywords(type, &kwdFirst, extPool, kwdBuf, &posixVariant, status);
if (U_FAILURE(*status)) {
break;
@@ -2028,7 +2047,10 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
*status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
- uprv_memcpy(tagBuf, tag, tagLen);
+
+ if (tagLen > 0) {
+ uprv_memcpy(tagBuf, tag, tagLen);
+ }
*(tagBuf + tagLen) = 0;
/* create a ULanguageTag */
@@ -2067,6 +2089,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
legacyLen = checkLegacyLen; /* back up for output parsedLen */
int32_t replacementLen = static_cast<int32_t>(uprv_strlen(LEGACY[i+1]));
newTagLength = replacementLen + tagLen - checkLegacyLen;
+ int32_t oldTagLength = tagLen;
if (tagLen < newTagLength) {
uprv_free(tagBuf);
tagBuf = (char*)uprv_malloc(newTagLength + 1);
@@ -2080,7 +2103,10 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
parsedLenDelta = checkLegacyLen - replacementLen;
uprv_strcpy(t->buf, LEGACY[i + 1]);
if (checkLegacyLen != tagLen) {
- uprv_strcpy(t->buf + replacementLen, tag + checkLegacyLen);
+ uprv_memcpy(t->buf + replacementLen, tag + checkLegacyLen,
+ oldTagLength - checkLegacyLen);
+ // NUL-terminate after memcpy().
+ t->buf[replacementLen + oldTagLength - checkLegacyLen] = 0;
}
break;
}
@@ -2284,7 +2310,7 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta
if (next & EXTV) {
if (_isExtensionSubtag(pSubtag, subtagLen)) {
if (pExtValueSubtag == NULL) {
- /* if the start postion of this extension's value is not yet,
+ /* if the start position of this extension's value is not yet,
this one is the first value subtag */
pExtValueSubtag = pSubtag;
}
@@ -2692,8 +2718,7 @@ ulocimp_toLanguageTag(const char* localeID,
if (U_SUCCESS(tmpStatus)) {
if (ultag_isPrivateuseValueSubtags(buf.data(), buf.length())) {
/* return private use only tag */
- static const char PREFIX[] = { PRIVATEUSE, SEP };
- sink.Append(PREFIX, sizeof(PREFIX));
+ sink.Append("und-x-", 6);
sink.Append(buf.data(), buf.length());
done = TRUE;
} else if (strict) {
diff --git a/Build/source/libs/icu/icu-src/source/common/ulocimp.h b/Build/source/libs/icu/icu-src/source/common/ulocimp.h
index 5691fe9a77f..755e02c6b88 100644
--- a/Build/source/libs/icu/icu-src/source/common/ulocimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/ulocimp.h
@@ -286,6 +286,9 @@ ultag_isUnicodeLocaleType(const char* s, int32_t len);
U_CFUNC UBool
ultag_isVariantSubtags(const char* s, int32_t len);
+U_CAPI const char * U_EXPORT2
+ultag_getTKeyStart(const char *localeID);
+
U_CFUNC const char*
ulocimp_toBcpKey(const char* key);
@@ -304,4 +307,72 @@ U_CAPI const char* const* ulocimp_getKnownCanonicalizedLocaleForTest(int32_t* le
// Return true if the value is already canonicalized.
U_CAPI bool ulocimp_isCanonicalizedLocaleForTest(const char* localeName);
+/**
+ * A utility class for handling locale IDs that may be longer than ULOC_FULLNAME_CAPACITY.
+ * This encompasses all of the logic to allocate a temporary locale ID buffer on the stack,
+ * and then, if it's not big enough, reallocate it on the heap and try again.
+ *
+ * You use it like this:
+ * UErrorCode err = U_ZERO_ERROR;
+ *
+ * PreflightingLocaleIDBuffer tempBuffer;
+ * do {
+ * tempBuffer.requestedCapacity = uloc_doSomething(localeID, tempBuffer.getBuffer(), tempBuffer.getCapacity(), &err);
+ * } while (tempBuffer.needToTryAgain(&err));
+ * if (U_SUCCESS(err)) {
+ * uloc_doSomethingWithTheResult(tempBuffer.getBuffer());
+ * }
+ */
+class PreflightingLocaleIDBuffer {
+private:
+ char stackBuffer[ULOC_FULLNAME_CAPACITY];
+ char* heapBuffer = nullptr;
+ int32_t capacity = ULOC_FULLNAME_CAPACITY;
+
+public:
+ int32_t requestedCapacity = ULOC_FULLNAME_CAPACITY;
+
+ // No heap allocation. Use only on the stack.
+ static void* U_EXPORT2 operator new(size_t) U_NOEXCEPT = delete;
+ static void* U_EXPORT2 operator new[](size_t) U_NOEXCEPT = delete;
+#if U_HAVE_PLACEMENT_NEW
+ static void* U_EXPORT2 operator new(size_t, void*) U_NOEXCEPT = delete;
+#endif
+
+ PreflightingLocaleIDBuffer() {}
+
+ ~PreflightingLocaleIDBuffer() { uprv_free(heapBuffer); }
+
+ char* getBuffer() {
+ if (heapBuffer == nullptr) {
+ return stackBuffer;
+ } else {
+ return heapBuffer;
+ }
+ }
+
+ int32_t getCapacity() {
+ return capacity;
+ }
+
+ bool needToTryAgain(UErrorCode* err) {
+ if (heapBuffer != nullptr) {
+ return false;
+ }
+
+ if (*err == U_BUFFER_OVERFLOW_ERROR || *err == U_STRING_NOT_TERMINATED_WARNING) {
+ int32_t newCapacity = requestedCapacity + 2; // one for the terminating null, one just for paranoia
+ heapBuffer = static_cast<char*>(uprv_malloc(newCapacity));
+ if (heapBuffer == nullptr) {
+ *err = U_MEMORY_ALLOCATION_ERROR;
+ } else {
+ *err = U_ZERO_ERROR;
+ capacity = newCapacity;
+ }
+ return U_SUCCESS(*err);
+ }
+ return false;
+ }
+};
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/umapfile.h b/Build/source/libs/icu/icu-src/source/common/umapfile.h
index 92bd567a2a9..adc265203dc 100644
--- a/Build/source/libs/icu/icu-src/source/common/umapfile.h
+++ b/Build/source/libs/icu/icu-src/source/common/umapfile.h
@@ -18,7 +18,7 @@
* whatever means are available.
*
* These functions are part of the ICU internal implementation, and
- * are not inteded to be used directly by applications.
+ * are not intended to be used directly by applications.
*
*----------------------------------------------------------------------------------*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h b/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
index fc99254de14..f77df88e39c 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
@@ -174,7 +174,7 @@ public:
* @return true if the operation succeeded
* @stable ICU 4.8
*/
- virtual UBool appendCodeUnit(char16_t c);
+ virtual UBool appendCodeUnit(char16_t c) override;
/**
* Appends a code point to the string.
@@ -182,7 +182,7 @@ public:
* @return true if the operation succeeded
* @stable ICU 4.8
*/
- virtual UBool appendCodePoint(UChar32 c);
+ virtual UBool appendCodePoint(UChar32 c) override;
/**
* Appends a string to the UnicodeString.
@@ -191,7 +191,7 @@ public:
* @return true if the operation succeeded
* @stable ICU 4.8
*/
- virtual UBool appendString(const char16_t *s, int32_t length);
+ virtual UBool appendString(const char16_t *s, int32_t length) override;
/**
* Tells the UnicodeString that the caller is going to append roughly
@@ -200,7 +200,7 @@ public:
* @return true if the operation succeeded
* @stable ICU 4.8
*/
- virtual UBool reserveAppendCapacity(int32_t appendCapacity);
+ virtual UBool reserveAppendCapacity(int32_t appendCapacity) override;
/**
* Returns a writable buffer for appending and writes the buffer's capacity to
@@ -226,7 +226,7 @@ public:
virtual char16_t *getAppendBuffer(int32_t minCapacity,
int32_t desiredCapacityHint,
char16_t *scratch, int32_t scratchCapacity,
- int32_t *resultCapacity);
+ int32_t *resultCapacity) override;
private:
UnicodeString &str;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h b/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
index 9bba5fcccc3..3a121cf703b 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
@@ -99,7 +99,7 @@ U_NAMESPACE_BEGIN
* <p>
* Code snippets illustrating the use of the Break Iterator APIs
* are available in the ICU User Guide,
- * http://icu-project.org/userguide/boundaryAnalysis.html
+ * https://unicode-org.github.io/icu/userguide/boundaryanalysis/
* and in the sample program icu/source/samples/break/break.cpp
*
*/
@@ -124,7 +124,7 @@ public:
* object, and styles are not considered.
* @stable ICU 2.0
*/
- virtual UBool operator==(const BreakIterator&) const = 0;
+ virtual bool operator==(const BreakIterator&) const = 0;
/**
* Returns the complement of the result of operator==
@@ -132,7 +132,7 @@ public:
* @return the complement of the result of operator==
* @stable ICU 2.0
*/
- UBool operator!=(const BreakIterator& rhs) const { return !operator==(rhs); }
+ bool operator!=(const BreakIterator& rhs) const { return !operator==(rhs); }
/**
* Return a polymorphic copy of this object. This is an abstract
@@ -146,7 +146,7 @@ public:
* will return distinct unequal values.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const = 0;
+ virtual UClassID getDynamicClassID(void) const override = 0;
/**
* Return a CharacterIterator over the text being analyzed.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h b/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h
index 044f7a77e78..997746e4280 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h
@@ -71,7 +71,6 @@ public:
*/
virtual void Append(const char* bytes, int32_t n) = 0;
-#ifndef U_HIDE_DRAFT_API
/**
* Appends n bytes to this. Same as Append().
* Call AppendU8() with u8"string literals" which are const char * in C++11
@@ -81,7 +80,7 @@ public:
*
* @param bytes the pointer to the bytes
* @param n the number of bytes; must be non-negative
- * @draft ICU 67
+ * @stable ICU 67
*/
inline void AppendU8(const char* bytes, int32_t n) {
Append(bytes, n);
@@ -97,13 +96,12 @@ public:
*
* @param bytes the pointer to the bytes
* @param n the number of bytes; must be non-negative
- * @draft ICU 67
+ * @stable ICU 67
*/
inline void AppendU8(const char8_t* bytes, int32_t n) {
Append(reinterpret_cast<const char*>(bytes), n);
}
#endif
-#endif // U_HIDE_DRAFT_API
/**
* Returns a writable buffer for appending and writes the buffer's capacity to
@@ -208,7 +206,7 @@ public:
* @param n the number of bytes; must be non-negative
* @stable ICU 4.2
*/
- virtual void Append(const char* bytes, int32_t n);
+ virtual void Append(const char* bytes, int32_t n) override;
/**
* Returns a writable buffer for appending and writes the buffer's capacity to
* *result_capacity. For details see the base class documentation.
@@ -226,7 +224,7 @@ public:
virtual char* GetAppendBuffer(int32_t min_capacity,
int32_t desired_capacity_hint,
char* scratch, int32_t scratch_capacity,
- int32_t* result_capacity);
+ int32_t* result_capacity) override;
/**
* Returns the number of bytes actually written to the sink.
* @return number of bytes written to the buffer
@@ -293,7 +291,7 @@ class StringByteSink : public ByteSink {
* @param n the number of bytes; must be non-negative
* @stable ICU 4.2
*/
- virtual void Append(const char* data, int32_t n) { dest_->append(data, n); }
+ virtual void Append(const char* data, int32_t n) override { dest_->append(data, n); }
private:
StringClass* dest_;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h b/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
index 85f802df420..271a81d1b4d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
@@ -30,6 +30,8 @@
#include "unicode/uobject.h"
#include "unicode/ustringtrie.h"
+class BytesTrieTest;
+
U_NAMESPACE_BEGIN
class ByteSink;
@@ -378,6 +380,7 @@ public:
private:
friend class BytesTrieBuilder;
+ friend class ::BytesTrieTest;
/**
* Constructs a BytesTrie reader instance.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h b/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h
index cae16e48b45..382f5e0095f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h
@@ -30,6 +30,8 @@
#include "unicode/stringpiece.h"
#include "unicode/stringtriebuilder.h"
+class BytesTrieTest;
+
U_NAMESPACE_BEGIN
class BytesTrieElement;
@@ -125,26 +127,28 @@ public:
BytesTrieBuilder &clear();
private:
+ friend class ::BytesTrieTest;
+
BytesTrieBuilder(const BytesTrieBuilder &other); // no copy constructor
BytesTrieBuilder &operator=(const BytesTrieBuilder &other); // no assignment operator
void buildBytes(UStringTrieBuildOption buildOption, UErrorCode &errorCode);
- virtual int32_t getElementStringLength(int32_t i) const;
- virtual char16_t getElementUnit(int32_t i, int32_t byteIndex) const;
- virtual int32_t getElementValue(int32_t i) const;
+ virtual int32_t getElementStringLength(int32_t i) const override;
+ virtual char16_t getElementUnit(int32_t i, int32_t byteIndex) const override;
+ virtual int32_t getElementValue(int32_t i) const override;
- virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t byteIndex) const;
+ virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t byteIndex) const override;
- virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t byteIndex) const;
- virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t byteIndex, int32_t count) const;
- virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, char16_t byte) const;
+ virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t byteIndex) const override;
+ virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t byteIndex, int32_t count) const override;
+ virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t byteIndex, char16_t byte) const override;
- virtual UBool matchNodesCanHaveValues() const { return false; }
+ virtual UBool matchNodesCanHaveValues() const override { return false; }
- virtual int32_t getMaxBranchLinearSubNodeLength() const { return BytesTrie::kMaxBranchLinearSubNodeLength; }
- virtual int32_t getMinLinearMatch() const { return BytesTrie::kMinLinearMatch; }
- virtual int32_t getMaxLinearMatchLength() const { return BytesTrie::kMaxLinearMatchLength; }
+ virtual int32_t getMaxBranchLinearSubNodeLength() const override { return BytesTrie::kMaxBranchLinearSubNodeLength; }
+ virtual int32_t getMinLinearMatch() const override { return BytesTrie::kMinLinearMatch; }
+ virtual int32_t getMaxLinearMatchLength() const override { return BytesTrie::kMaxLinearMatchLength; }
/**
* @internal (private)
@@ -152,22 +156,23 @@ private:
class BTLinearMatchNode : public LinearMatchNode {
public:
BTLinearMatchNode(const char *units, int32_t len, Node *nextNode);
- virtual UBool operator==(const Node &other) const;
- virtual void write(StringTrieBuilder &builder);
+ virtual bool operator==(const Node &other) const override;
+ virtual void write(StringTrieBuilder &builder) override;
private:
const char *s;
};
virtual Node *createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length,
- Node *nextNode) const;
+ Node *nextNode) const override;
UBool ensureCapacity(int32_t length);
- virtual int32_t write(int32_t byte);
+ virtual int32_t write(int32_t byte) override;
int32_t write(const char *b, int32_t length);
- virtual int32_t writeElementUnits(int32_t i, int32_t byteIndex, int32_t length);
- virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal);
- virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t node);
- virtual int32_t writeDeltaTo(int32_t jumpTarget);
+ virtual int32_t writeElementUnits(int32_t i, int32_t byteIndex, int32_t length) override;
+ virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal) override;
+ virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t node) override;
+ virtual int32_t writeDeltaTo(int32_t jumpTarget) override;
+ static int32_t internalEncodeDelta(int32_t i, char intBytes[]);
CharString *strings; // Pointer not object so we need not #include internal charstr.h.
BytesTrieElement *elements;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h b/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
index 4ed2b74b101..6e57ef5e3ba 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
@@ -145,7 +145,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
// ===================== PRIVATES ==============================
@@ -194,7 +194,7 @@ private:
/**
* See if the decomposition of cp2 is at segment starting at segmentPos
- * (with canonical rearrangment!)
+ * (with canonical rearrangement!)
* If so, take the remainder, and return the equivalents
*/
//Set extract(int comp, String segment, int segmentPos, StringBuffer buffer);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h b/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
index 96dc5db7c9e..4f320b90e2c 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
@@ -114,7 +114,7 @@ public:
* character in the same character-storage object
* @stable ICU 2.0
*/
- virtual UBool operator==(const ForwardCharacterIterator& that) const = 0;
+ virtual bool operator==(const ForwardCharacterIterator& that) const = 0;
/**
* Returns true when the iterators refer to different
@@ -126,7 +126,7 @@ public:
* same text-storage object
* @stable ICU 2.0
*/
- inline UBool operator!=(const ForwardCharacterIterator& that) const;
+ inline bool operator!=(const ForwardCharacterIterator& that) const;
/**
* Generates a hash code for this iterator.
@@ -142,7 +142,7 @@ public:
* @return a UClassID for this ForwardCharacterIterator
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const = 0;
+ virtual UClassID getDynamicClassID(void) const override = 0;
/**
* Gets the current code unit for returning and advances to the next code unit
@@ -692,7 +692,7 @@ protected:
int32_t end;
};
-inline UBool
+inline bool
ForwardCharacterIterator::operator!=(const ForwardCharacterIterator& that) const {
return !operator==(that);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h b/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
index edcb5d4e835..4e29e283cde 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
@@ -15,7 +15,7 @@
* \file
* \brief (Non API- contains Doxygen definitions)
*
- * This file contains documentation for Doxygen and doesnot have
+ * This file contains documentation for Doxygen and does not have
* any significance with respect to C or C++ API
*/
@@ -47,7 +47,7 @@
* <h3>API References for Previous Releases</h3>
* <p>The API References for each release of ICU are also available as
* a zip file from the ICU
- * <a href="http://site.icu-project.org/download">download page</a>.</p>
+ * <a href="https://icu.unicode.org/download">download page</a>.</p>
*
* <hr>
*
@@ -74,7 +74,7 @@
* </tr>
* <tr>
* <td>Strings and Character Iteration</td>
- * <td>ustring.h, utf8.h, utf16.h, UText, UCharIterator</td>
+ * <td>ustring.h, utf8.h, utf16.h, icu::StringPiece, UText, UCharIterator, icu::ByteSink</td>
* <td>icu::UnicodeString, icu::CharacterIterator, icu::Appendable, icu::StringPiece,icu::ByteSink</td>
* </tr>
* <tr>
@@ -128,9 +128,9 @@
* <td>icu::Normalizer2</td>
* </tr>
* <tr>
- * <td>Calendars</td>
+ * <td>Calendars and Time Zones</td>
* <td>ucal.h</td>
- * <td>icu::Calendar</td>
+ * <td>icu::Calendar, icu::TimeZone</td>
* </tr>
* <tr>
* <td>Date and Time Formatting</td>
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h b/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h
index 4f4b6bf7f40..46a94ce3495 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h
@@ -89,7 +89,7 @@ public:
* other classes have different class IDs.
* @stable ICU 4.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
@@ -109,14 +109,14 @@ public:
* @return true if the two DateIntervals are the same
* @stable ICU 4.0
*/
- virtual UBool operator==(const DateInterval& other) const;
+ virtual bool operator==(const DateInterval& other) const;
/**
* Non-equality operator
* @return true if the two DateIntervals are not the same
* @stable ICU 4.0
*/
- inline UBool operator!=(const DateInterval& other) const;
+ inline bool operator!=(const DateInterval& other) const;
/**
@@ -151,7 +151,7 @@ DateInterval::getToDate() const {
}
-inline UBool
+inline bool
DateInterval::operator!=(const DateInterval& other) const {
return ( !operator==(other) );
}
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h b/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
index 52f810da57d..205af360d45 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
@@ -117,14 +117,13 @@
/* === Basic types === */
#ifndef U_HIDE_INTERNAL_API
+struct UPlugData;
/**
* @{
- * Opaque structure passed to/from a plugin.
- * use the APIs to access it.
+ * Typedef for opaque structure passed to/from a plugin.
+ * Use the APIs to access it.
* @internal ICU 4.4 Technology Preview
*/
-
-struct UPlugData;
typedef struct UPlugData UPlugData;
/** @} */
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h b/Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h
index 27a894de101..f708a7ed7c4 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/localebuilder.h
@@ -90,8 +90,7 @@ public:
LocaleBuilder& setLocale(const Locale& locale);
/**
- * Resets the LocaleBuilder to match the provided
- * [Unicode Locale Identifier](http://www.unicode.org/reports/tr35/tr35.html#unicode_locale_id) .
+ * Resets the LocaleBuilder to match the provided IETF BCP 47 language tag.
* Discards the existing state.
* The empty string causes the builder to be reset, like {@link #clear}.
* Legacy language tags (marked as “Type: grandfathered” in BCP 47)
@@ -101,8 +100,7 @@ public:
*
* <p>This method clears the internal UErrorCode.
*
- * @param tag the language tag, defined as
- * [unicode_locale_id](http://www.unicode.org/reports/tr35/tr35.html#unicode_locale_id).
+ * @param tag the language tag, defined as IETF BCP 47 language tag.
* @return This builder.
* @stable ICU 64
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h b/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h
index 63a68b0b7fb..252bb7fdc20 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/localematcher.h
@@ -91,8 +91,6 @@ enum ULocMatchDemotion {
typedef enum ULocMatchDemotion ULocMatchDemotion;
#endif
-#ifndef U_FORCE_HIDE_DRAFT_API
-
/**
* Builder option for whether to include or ignore one-way (fallback) match data.
* The LocaleMatcher uses CLDR languageMatch data which includes fallback (oneway=true) entries.
@@ -108,20 +106,20 @@ typedef enum ULocMatchDemotion ULocMatchDemotion;
* but not if it is merely a fallback.
*
* @see LocaleMatcher::Builder#setDirection(ULocMatchDirection)
- * @draft ICU 67
+ * @stable ICU 67
*/
enum ULocMatchDirection {
/**
* Locale matching includes one-way matches such as Breton→French. (default)
*
- * @draft ICU 67
+ * @stable ICU 67
*/
ULOCMATCH_DIRECTION_WITH_ONE_WAY,
/**
* Locale matching limited to two-way matches including e.g. Danish↔Norwegian
* but ignoring one-way matches.
*
- * @draft ICU 67
+ * @stable ICU 67
*/
ULOCMATCH_DIRECTION_ONLY_TWO_WAY
};
@@ -129,8 +127,6 @@ enum ULocMatchDirection {
typedef enum ULocMatchDirection ULocMatchDirection;
#endif
-#endif // U_FORCE_HIDE_DRAFT_API
-
struct UHashtable;
U_NAMESPACE_BEGIN
@@ -417,17 +413,15 @@ public:
*/
Builder &addSupportedLocale(const Locale &locale);
-#ifndef U_HIDE_DRAFT_API
/**
* Sets no default locale.
* There will be no explicit or implicit default locale.
* If there is no good match, then the matcher will return nullptr for the
* best supported locale.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
Builder &setNoDefaultLocale();
-#endif // U_HIDE_DRAFT_API
/**
* Sets the default locale; if nullptr, or if it is not set explicitly,
@@ -463,14 +457,13 @@ public:
*/
Builder &setDemotionPerDesiredLocale(ULocMatchDemotion demotion);
-#ifndef U_HIDE_DRAFT_API
/**
* Option for whether to include or ignore one-way (fallback) match data.
* By default, they are included.
*
* @param direction the match direction to set.
* @return this Builder object
- * @draft ICU 67
+ * @stable ICU 67
*/
Builder &setDirection(ULocMatchDirection direction) {
if (U_SUCCESS(errorCode_)) {
@@ -478,9 +471,7 @@ public:
}
return *this;
}
-#endif // U_HIDE_DRAFT_API
-#ifndef U_HIDE_DRAFT_API
/**
* Sets the maximum distance for an acceptable match.
* The matcher will return a match for a pair of locales only if
@@ -500,10 +491,9 @@ public:
* @param desired the desired locale for distance comparison.
* @param supported the supported locale for distance comparison.
* @return this Builder object
- * @draft ICU 68
+ * @stable ICU 68
*/
Builder &setMaxDistance(const Locale &desired, const Locale &supported);
-#endif // U_HIDE_DRAFT_API
/**
* Sets the UErrorCode if an error occurred while setting parameters.
@@ -644,7 +634,6 @@ public:
*/
Result getBestMatchResult(Locale::Iterator &desiredLocales, UErrorCode &errorCode) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Returns true if the pair of locales matches acceptably.
* This is influenced by Builder options such as setDirection(), setFavorSubtag(),
@@ -656,10 +645,9 @@ public:
* or else the function returns immediately. Check for U_FAILURE()
* on output or use with function chaining. (See User Guide for details.)
* @return true if the pair of locales matches acceptably.
- * @draft ICU 68
+ * @stable ICU 68
*/
UBool isMatch(const Locale &desired, const Locale &supported, UErrorCode &errorCode) const;
-#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_INTERNAL_API
/**
@@ -704,7 +692,7 @@ private:
LSR *lsrs;
int32_t supportedLocalesLength;
// These are in preference order: 1. Default locale 2. paradigm locales 3. others.
- UHashtable *supportedLsrToIndex; // Map<LSR, Integer> stores index+1 because 0 is "not found"
+ UHashtable *supportedLsrToIndex; // Map<LSR, Integer>
// Array versions of the supportedLsrToIndex keys and values.
// The distance lookup loops over the supportedLSRs and returns the index of the best match.
const LSR **supportedLSRs;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h b/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
index 2a65f2d382d..96c659d10ad 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
@@ -35,7 +35,7 @@
* - Need to be able to orphan/release the pointer and its ownership.
* - Need variants for normal C++ object pointers, C++ arrays, and ICU C service objects.
*
- * For details see http://site.icu-project.org/design/cpp/scoped_ptr
+ * For details see https://icu.unicode.org/design/cpp/scoped_ptr
*/
#include "unicode/utypes.h"
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/locid.h b/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
index ba858d702af..2f2b3998a78 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
@@ -326,20 +326,20 @@ public:
* Checks if two locale keys are the same.
*
* @param other The locale key object to be compared with this.
- * @return True if the two locale keys are the same, false otherwise.
+ * @return true if the two locale keys are the same, false otherwise.
* @stable ICU 2.0
*/
- UBool operator==(const Locale& other) const;
+ bool operator==(const Locale& other) const;
/**
* Checks if two locale keys are not the same.
*
* @param other The locale key object to be compared with this.
- * @return True if the two locale keys are not the same, false
+ * @return true if the two locale keys are not the same, false
* otherwise.
* @stable ICU 2.0
*/
- inline UBool operator!=(const Locale& other) const;
+ inline bool operator!=(const Locale& other) const;
/**
* Clone this object.
@@ -571,15 +571,13 @@ public:
*/
void minimizeSubtags(UErrorCode& status);
-#ifndef U_HIDE_DRAFT_API
/**
* Canonicalize the locale ID of this object according to CLDR.
* @param status the status code
- * @draft ICU 67
+ * @stable ICU 67
* @see createCanonical
*/
void canonicalize(UErrorCode& status);
-#endif // U_HIDE_DRAFT_API
/**
* Gets the list of keywords for the specified locale.
@@ -1007,7 +1005,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* A Locale iterator interface similar to a Java Iterator<Locale>.
@@ -1165,7 +1163,7 @@ private:
friend void U_CALLCONV locale_available_init();
};
-inline UBool
+inline bool
Locale::operator!=(const Locale& other) const
{
return !operator==(other);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h b/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
index 98e7b70b1fc..4c5be13dbc9 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
@@ -526,14 +526,14 @@ public:
* @return true if this object is equivalent to the other one.
* @stable ICU 4.8
*/
- UBool operator==(const MessagePattern &other) const;
+ bool operator==(const MessagePattern &other) const;
/**
* @param other another object to compare with.
* @return false if this object is equivalent to the other one.
* @stable ICU 4.8
*/
- inline UBool operator!=(const MessagePattern &other) const {
+ inline bool operator!=(const MessagePattern &other) const {
return !operator==(other);
}
@@ -797,14 +797,14 @@ public:
* @return true if this object is equivalent to the other one.
* @stable ICU 4.8
*/
- UBool operator==(const Part &other) const;
+ bool operator==(const Part &other) const;
/**
* @param other another object to compare with.
* @return false if this object is equivalent to the other one.
* @stable ICU 4.8
*/
- inline UBool operator!=(const Part &other) const {
+ inline bool operator!=(const Part &other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h b/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
index 5eb1d95cafb..2d355250c29 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
@@ -225,10 +225,8 @@ public:
* Normalizes a UTF-8 string and optionally records how source substrings
* relate to changed and unchanged result substrings.
*
- * Currently implemented completely only for "compose" modes,
- * such as for NFC, NFKC, and NFKC_Casefold
- * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS).
- * Otherwise currently converts to & from UTF-16 and does not support edits.
+ * Implemented completely for all built-in modes except for FCD.
+ * The base class implementation converts to & from UTF-16 and does not support edits.
*
* @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET.
* @param src Source UTF-8 string.
@@ -381,11 +379,9 @@ public:
* resolves to "yes" or "no" to provide a definitive result,
* at the cost of doing more work in those cases.
*
- * This works for all normalization modes,
- * but it is currently optimized for UTF-8 only for "compose" modes,
- * such as for NFC, NFKC, and NFKC_Casefold
- * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS).
- * For other modes it currently converts to UTF-16 and calls isNormalized().
+ * This works for all normalization modes.
+ * It is optimized for UTF-8 for all built-in modes except for FCD.
+ * The base class implementation converts to UTF-16 and calls isNormalized().
*
* @param s UTF-8 input string
* @param errorCode Standard ICU error code. Its input value must
@@ -543,10 +539,8 @@ public:
* Normalizes a UTF-8 string and optionally records how source substrings
* relate to changed and unchanged result substrings.
*
- * Currently implemented completely only for "compose" modes,
- * such as for NFC, NFKC, and NFKC_Casefold
- * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS).
- * Otherwise currently converts to & from UTF-16 and does not support edits.
+ * Implemented completely for most built-in modes except for FCD.
+ * The base class implementation converts to & from UTF-16 and does not support edits.
*
* @param options Options bit set, usually 0. See U_OMIT_UNCHANGED_TEXT and U_EDITS_NO_RESET.
* @param src Source UTF-8 string.
@@ -676,11 +670,9 @@ public:
* resolves to "yes" or "no" to provide a definitive result,
* at the cost of doing more work in those cases.
*
- * This works for all normalization modes,
- * but it is currently optimized for UTF-8 only for "compose" modes,
- * such as for NFC, NFKC, and NFKC_Casefold
- * (UNORM2_COMPOSE and UNORM2_COMPOSE_CONTIGUOUS).
- * For other modes it currently converts to UTF-16 and calls isNormalized().
+ * This works for all normalization modes.
+ * It is optimized for UTF-8 for all built-in modes except for FCD.
+ * The base class implementation converts to UTF-16 and calls isNormalized().
*
* @param s UTF-8 input string
* @param errorCode Standard ICU error code. Its input value must
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h b/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
index 3352983cdcc..93661990fec 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
@@ -584,7 +584,7 @@ public:
* @return comparison result
* @deprecated ICU 56 Use Normalizer2 instead.
*/
- UBool operator==(const Normalizer& that) const;
+ bool operator==(const Normalizer& that) const;
/**
* Returns false when both iterators refer to the same character in the same
@@ -594,7 +594,7 @@ public:
* @return comparison result
* @deprecated ICU 56 Use Normalizer2 instead.
*/
- inline UBool operator!=(const Normalizer& that) const;
+ inline bool operator!=(const Normalizer& that) const;
/**
* Returns a pointer to a new Normalizer that is a clone of this one.
@@ -732,7 +732,7 @@ public:
* @return a UClassID for the actual class.
* @deprecated ICU 56 Use Normalizer2 instead.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
#endif // U_FORCE_HIDE_DEPRECATED_API
private:
@@ -777,7 +777,7 @@ private:
//-------------------------------------------------------------------------
#ifndef U_HIDE_DEPRECATED_API
-inline UBool
+inline bool
Normalizer::operator!= (const Normalizer& other) const
{ return ! operator==(other); }
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h b/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
index 260ed4cbb86..73945f5f97b 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
@@ -100,14 +100,14 @@ public:
* @return true if the two parse positions are equal, false otherwise.
* @stable ICU 2.0
*/
- inline UBool operator==(const ParsePosition& that) const;
+ inline bool operator==(const ParsePosition& that) const;
/**
* Equality operator.
* @return true if the two parse positions are not equal, false otherwise.
* @stable ICU 2.0
*/
- inline UBool operator!=(const ParsePosition& that) const;
+ inline bool operator!=(const ParsePosition& that) const;
/**
* Clone this object.
@@ -166,7 +166,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
/**
@@ -192,7 +192,7 @@ ParsePosition::operator=(const ParsePosition& copy)
return *this;
}
-inline UBool
+inline bool
ParsePosition::operator==(const ParsePosition& copy) const
{
if(index != copy.index || errorIndex != copy.errorIndex)
@@ -201,7 +201,7 @@ ParsePosition::operator==(const ParsePosition& copy) const
return true;
}
-inline UBool
+inline bool
ParsePosition::operator!=(const ParsePosition& copy) const
{
return !operator==(copy);
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/platform.h b/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
index 2bb2f8b318d..b7e514442ce 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
@@ -814,8 +814,8 @@ namespace std {
/* Use the predefined value. */
#elif defined(U_STATIC_IMPLEMENTATION)
# define U_EXPORT
-#elif defined(_MSC_VER) || (UPRV_HAS_DECLSPEC_ATTRIBUTE(dllexport) && \
- UPRV_HAS_DECLSPEC_ATTRIBUTE(dllimport))
+#elif defined(_MSC_VER) || (UPRV_HAS_DECLSPEC_ATTRIBUTE(__dllexport__) && \
+ UPRV_HAS_DECLSPEC_ATTRIBUTE(__dllimport__))
# define U_EXPORT __declspec(dllexport)
#elif defined(__GNUC__)
# define U_EXPORT __attribute__((visibility("default")))
@@ -839,8 +839,8 @@ namespace std {
#ifdef U_IMPORT
/* Use the predefined value. */
-#elif defined(_MSC_VER) || (UPRV_HAS_DECLSPEC_ATTRIBUTE(dllexport) && \
- UPRV_HAS_DECLSPEC_ATTRIBUTE(dllimport))
+#elif defined(_MSC_VER) || (UPRV_HAS_DECLSPEC_ATTRIBUTE(__dllexport__) && \
+ UPRV_HAS_DECLSPEC_ATTRIBUTE(__dllimport__))
/* Windows needs to export/import data. */
# define U_IMPORT __declspec(dllimport)
#else
@@ -880,6 +880,6 @@ namespace std {
#else
# define U_CALLCONV_FPTR
#endif
-/* @} */
+/** @} */
#endif // _PLATFORM_H
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h b/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
index 65117f616cd..0ce93819f54 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
@@ -260,7 +260,7 @@ public:
* same class, have the same behavior, and iterate over the same text.
* @stable ICU 2.0
*/
- virtual UBool operator==(const BreakIterator& that) const;
+ virtual bool operator==(const BreakIterator& that) const override;
/**
* Not-equal operator. If operator== returns true, this returns false,
@@ -269,7 +269,7 @@ public:
* @return true if both BreakIterators are not same.
* @stable ICU 2.0
*/
- inline UBool operator!=(const BreakIterator& that) const;
+ inline bool operator!=(const BreakIterator& that) const;
/**
* Returns a newly-constructed RuleBasedBreakIterator with the same
@@ -281,7 +281,7 @@ public:
* @return a newly-constructed RuleBasedBreakIterator
* @stable ICU 2.0
*/
- virtual RuleBasedBreakIterator* clone() const;
+ virtual RuleBasedBreakIterator* clone() const override;
/**
* Compute a hash code for this BreakIterator
@@ -326,7 +326,7 @@ public:
* @return An iterator over the text being analyzed.
* @stable ICU 2.0
*/
- virtual CharacterIterator& getText(void) const;
+ virtual CharacterIterator& getText(void) const override;
/**
@@ -343,7 +343,7 @@ public:
* UText was provided, it will always be returned.
* @stable ICU 3.4
*/
- virtual UText *getUText(UText *fillIn, UErrorCode &status) const;
+ virtual UText *getUText(UText *fillIn, UErrorCode &status) const override;
/**
* Set the iterator to analyze a new piece of text. This function resets
@@ -352,7 +352,7 @@ public:
* takes ownership of the character iterator. The caller MUST NOT delete it!
* @stable ICU 2.0
*/
- virtual void adoptText(CharacterIterator* newText);
+ virtual void adoptText(CharacterIterator* newText) override;
/**
* Set the iterator to analyze a new piece of text. This function resets
@@ -365,7 +365,7 @@ public:
* @param newText The text to analyze.
* @stable ICU 2.0
*/
- virtual void setText(const UnicodeString& newText);
+ virtual void setText(const UnicodeString& newText) override;
/**
* Reset the break iterator to operate over the text represented by
@@ -380,21 +380,21 @@ public:
* @param status Receives any error codes.
* @stable ICU 3.4
*/
- virtual void setText(UText *text, UErrorCode &status);
+ virtual void setText(UText *text, UErrorCode &status) override;
/**
* Sets the current iteration position to the beginning of the text, position zero.
* @return The offset of the beginning of the text, zero.
* @stable ICU 2.0
*/
- virtual int32_t first(void);
+ virtual int32_t first(void) override;
/**
* Sets the current iteration position to the end of the text.
* @return The text's past-the-end offset.
* @stable ICU 2.0
*/
- virtual int32_t last(void);
+ virtual int32_t last(void) override;
/**
* Advances the iterator either forward or backward the specified number of steps.
@@ -406,21 +406,21 @@ public:
* the current one.
* @stable ICU 2.0
*/
- virtual int32_t next(int32_t n);
+ virtual int32_t next(int32_t n) override;
/**
* Advances the iterator to the next boundary position.
* @return The position of the first boundary after this one.
* @stable ICU 2.0
*/
- virtual int32_t next(void);
+ virtual int32_t next(void) override;
/**
* Moves the iterator backwards, to the last boundary preceding this one.
* @return The position of the last boundary position preceding this one.
* @stable ICU 2.0
*/
- virtual int32_t previous(void);
+ virtual int32_t previous(void) override;
/**
* Sets the iterator to refer to the first boundary position following
@@ -429,7 +429,7 @@ public:
* @return The position of the first break after the current position.
* @stable ICU 2.0
*/
- virtual int32_t following(int32_t offset);
+ virtual int32_t following(int32_t offset) override;
/**
* Sets the iterator to refer to the last boundary position before the
@@ -438,7 +438,7 @@ public:
* @return The position of the last boundary before the starting position.
* @stable ICU 2.0
*/
- virtual int32_t preceding(int32_t offset);
+ virtual int32_t preceding(int32_t offset) override;
/**
* Returns true if the specified position is a boundary position. As a side
@@ -448,7 +448,7 @@ public:
* @return True if "offset" is a boundary position.
* @stable ICU 2.0
*/
- virtual UBool isBoundary(int32_t offset);
+ virtual UBool isBoundary(int32_t offset) override;
/**
* Returns the current iteration position. Note that UBRK_DONE is never
@@ -458,7 +458,7 @@ public:
* @return The current iteration position.
* @stable ICU 2.0
*/
- virtual int32_t current(void) const;
+ virtual int32_t current(void) const override;
/**
@@ -492,7 +492,7 @@ public:
* @see UWordBreak
* @stable ICU 2.2
*/
- virtual int32_t getRuleStatus() const;
+ virtual int32_t getRuleStatus() const override;
/**
* Get the status (tag) values from the break rule(s) that determined the boundary
@@ -517,7 +517,7 @@ public:
* @see getRuleStatus
* @stable ICU 3.0
*/
- virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status);
+ virtual int32_t getRuleStatusVec(int32_t *fillInVec, int32_t capacity, UErrorCode &status) override;
/**
* Returns a unique class ID POLYMORPHICALLY. Pure virtual override.
@@ -530,7 +530,7 @@ public:
* other classes have different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Returns the class ID for this class. This is useful only for
@@ -574,7 +574,7 @@ public:
*/
virtual RuleBasedBreakIterator *createBufferClone(void *stackBuffer,
int32_t &BufferSize,
- UErrorCode &status);
+ UErrorCode &status) override;
#endif // U_FORCE_HIDE_DEPRECATED_API
/**
@@ -621,7 +621,7 @@ public:
*
* @stable ICU 49
*/
- virtual RuleBasedBreakIterator &refreshInputText(UText *input, UErrorCode &status);
+ virtual RuleBasedBreakIterator &refreshInputText(UText *input, UErrorCode &status) override;
private:
@@ -719,7 +719,7 @@ private:
//
//------------------------------------------------------------------------------
-inline UBool RuleBasedBreakIterator::operator!=(const BreakIterator& that) const {
+inline bool RuleBasedBreakIterator::operator!=(const BreakIterator& that) const {
return !operator==(that);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h b/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
index 37738e277b5..7441592a0f2 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
@@ -66,14 +66,14 @@ U_NAMESPACE_BEGIN
/**
* A class representing a collection of resource information pertaining to a given
- * locale. A resource bundle provides a way of accessing locale- specfic information in
+ * locale. A resource bundle provides a way of accessing locale- specific information in
* a data file. You create a resource bundle that manages the resources for a given
* locale and then ask it for individual resources.
* <P>
* Resource bundles in ICU4C are currently defined using text files which conform to the following
- * <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/bnf_rb.txt">BNF definition</a>.
+ * <a href="https://github.com/unicode-org/icu-docs/blob/main/design/bnf_rb.txt">BNF definition</a>.
* More on resource bundle concepts and syntax can be found in the
- * <a href="http://icu-project.org/userguide/ResourceManagement.html">Users Guide</a>.
+ * <a href="https://unicode-org.github.io/icu/userguide/locale/resources">Users Guide</a>.
* <P>
*
* The ResourceBundle class is not suitable for subclassing.
@@ -474,7 +474,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/schriter.h b/Build/source/libs/icu/icu-src/source/common/unicode/schriter.h
index 1ca5b70fca5..9dac0999677 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/schriter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/schriter.h
@@ -124,7 +124,7 @@ public:
* same string and are pointing at the same character.
* @stable ICU 2.0
*/
- virtual UBool operator==(const ForwardCharacterIterator& that) const;
+ virtual bool operator==(const ForwardCharacterIterator& that) const override;
/**
* Returns a new StringCharacterIterator referring to the same
@@ -133,7 +133,7 @@ public:
* @return the newly cloned object.
* @stable ICU 2.0
*/
- virtual StringCharacterIterator* clone() const;
+ virtual StringCharacterIterator* clone() const override;
/**
* Sets the iterator to iterate over the provided string.
@@ -149,14 +149,14 @@ public:
* @param result Receives a copy of the text under iteration.
* @stable ICU 2.0
*/
- virtual void getText(UnicodeString& result);
+ virtual void getText(UnicodeString& result) override;
/**
* Return a class ID for this object (not really public)
* @return a class ID for this object.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return a class ID for this class (not really public)
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h b/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
index df72b4b7e84..1d1b37940a8 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
@@ -149,7 +149,7 @@ public:
* and handles the conversion.
*
* @param status the error code.
- * @param resultLength a ponter to receive the length, can be NULL.
+ * @param resultLength a pointer to receive the length, can be NULL.
* @return a pointer to the string, or NULL.
*
* @stable ICU 2.4
@@ -199,7 +199,7 @@ public:
* @return true if the enumerations are equal. false if not.
* @stable ICU 3.6
*/
- virtual UBool operator==(const StringEnumeration& that)const;
+ virtual bool operator==(const StringEnumeration& that)const;
/**
* Compares this enumeration to other to check if both are not equal
*
@@ -207,7 +207,7 @@ public:
* @return true if the enumerations are equal. false if not.
* @stable ICU 3.6
*/
- virtual UBool operator!=(const StringEnumeration& that)const;
+ virtual bool operator!=(const StringEnumeration& that)const;
protected:
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h b/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h
index 7d7d871e1f7..df7f36089dd 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h
@@ -75,12 +75,11 @@ class U_COMMON_API StringPiece : public UMemory {
* @stable ICU 4.2
*/
StringPiece(const char* str);
-#ifndef U_HIDE_DRAFT_API
#if defined(__cpp_char8_t) || defined(U_IN_DOXYGEN)
/**
* Constructs from a NUL-terminated const char8_t * pointer.
* @param str a NUL-terminated const char8_t * pointer
- * @draft ICU 67
+ * @stable ICU 67
*/
StringPiece(const char8_t* str) : StringPiece(reinterpret_cast<const char*>(str)) {}
#endif
@@ -88,10 +87,9 @@ class U_COMMON_API StringPiece : public UMemory {
* Constructs an empty StringPiece.
* Needed for type disambiguation from multiple other overloads.
* @param p nullptr
- * @draft ICU 67
+ * @stable ICU 67
*/
StringPiece(std::nullptr_t p) : ptr_(p), length_(0) {}
-#endif // U_HIDE_DRAFT_API
/**
* Constructs from a std::string.
@@ -99,17 +97,15 @@ class U_COMMON_API StringPiece : public UMemory {
*/
StringPiece(const std::string& str)
: ptr_(str.data()), length_(static_cast<int32_t>(str.size())) { }
-#ifndef U_HIDE_DRAFT_API
#if defined(__cpp_lib_char8_t) || defined(U_IN_DOXYGEN)
/**
* Constructs from a std::u8string.
- * @draft ICU 67
+ * @stable ICU 67
*/
StringPiece(const std::u8string& str)
: ptr_(reinterpret_cast<const char*>(str.data())),
length_(static_cast<int32_t>(str.size())) { }
#endif
-#endif // U_HIDE_DRAFT_API
/**
* Constructs from some other implementation of a string piece class, from any
@@ -152,18 +148,16 @@ class U_COMMON_API StringPiece : public UMemory {
* @stable ICU 4.2
*/
StringPiece(const char* offset, int32_t len) : ptr_(offset), length_(len) { }
-#ifndef U_HIDE_DRAFT_API
#if defined(__cpp_char8_t) || defined(U_IN_DOXYGEN)
/**
* Constructs from a const char8_t * pointer and a specified length.
* @param str a const char8_t * pointer (need not be terminated)
* @param len the length of the string; must be non-negative
- * @draft ICU 67
+ * @stable ICU 67
*/
StringPiece(const char8_t* str, int32_t len) :
StringPiece(reinterpret_cast<const char*>(str), len) {}
#endif
-#endif // U_HIDE_DRAFT_API
/**
* Substring of another StringPiece.
@@ -233,13 +227,12 @@ class U_COMMON_API StringPiece : public UMemory {
*/
void set(const char* str);
-#ifndef U_HIDE_DRAFT_API
#if defined(__cpp_char8_t) || defined(U_IN_DOXYGEN)
/**
* Resets the stringpiece to refer to new data.
* @param xdata pointer the new string data. Need not be NUL-terminated.
* @param len the length of the new data
- * @draft ICU 67
+ * @stable ICU 67
*/
inline void set(const char8_t* xdata, int32_t len) {
set(reinterpret_cast<const char*>(xdata), len);
@@ -248,13 +241,12 @@ class U_COMMON_API StringPiece : public UMemory {
/**
* Resets the stringpiece to refer to new data.
* @param str a pointer to a NUL-terminated string.
- * @draft ICU 67
+ * @stable ICU 67
*/
inline void set(const char8_t* str) {
set(reinterpret_cast<const char*>(str));
}
#endif
-#endif // U_HIDE_DRAFT_API
/**
* Removes the first n string units.
@@ -286,13 +278,12 @@ class U_COMMON_API StringPiece : public UMemory {
}
}
-#ifndef U_HIDE_DRAFT_API
/**
* Searches the StringPiece for the given search string (needle);
* @param needle The string for which to search.
* @param offset Where to start searching within this string (haystack).
* @return The offset of needle in haystack, or -1 if not found.
- * @draft ICU 67
+ * @stable ICU 67
*/
int32_t find(StringPiece needle, int32_t offset);
@@ -301,10 +292,9 @@ class U_COMMON_API StringPiece : public UMemory {
* similar to std::string::compare().
* @param other The string to compare to.
* @return below zero if this < other; above zero if this > other; 0 if this == other.
- * @draft ICU 67
+ * @stable ICU 67
*/
int32_t compare(StringPiece other);
-#endif // U_HIDE_DRAFT_API
/**
* Maximum integer, used as a default value for substring methods.
@@ -342,7 +332,7 @@ operator==(const StringPiece& x, const StringPiece& y);
* @return true if the string data is not equal
* @stable ICU 4.8
*/
-inline UBool operator!=(const StringPiece& x, const StringPiece& y) {
+inline bool operator!=(const StringPiece& x, const StringPiece& y) {
return !(x == y);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h b/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
index fe471bbbf9c..b7a9b23d22b 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
@@ -204,8 +204,8 @@ protected:
// Handles node==NULL.
static inline int32_t hashCode(const Node *node) { return node==NULL ? 0 : node->hashCode(); }
// Base class operator==() compares the actual class types.
- virtual UBool operator==(const Node &other) const;
- inline UBool operator!=(const Node &other) const { return !operator==(other); }
+ virtual bool operator==(const Node &other) const;
+ inline bool operator!=(const Node &other) const { return !operator==(other); }
/**
* Traverses the Node graph and numbers branch edges, with rightmost edges first.
* This is to avoid writing a duplicate node twice.
@@ -265,8 +265,8 @@ protected:
class FinalValueNode : public Node {
public:
FinalValueNode(int32_t v) : Node(0x111111u*37u+v), value(v) {}
- virtual UBool operator==(const Node &other) const;
- virtual void write(StringTrieBuilder &builder);
+ virtual bool operator==(const Node &other) const override;
+ virtual void write(StringTrieBuilder &builder) override;
protected:
int32_t value;
};
@@ -280,7 +280,7 @@ protected:
class ValueNode : public Node {
public:
ValueNode(int32_t initialHash) : Node(initialHash), hasValue(false), value(0) {}
- virtual UBool operator==(const Node &other) const;
+ virtual bool operator==(const Node &other) const override;
void setValue(int32_t v) {
hasValue=true;
value=v;
@@ -299,9 +299,9 @@ protected:
public:
IntermediateValueNode(int32_t v, Node *nextNode)
: ValueNode(0x222222u*37u+hashCode(nextNode)), next(nextNode) { setValue(v); }
- virtual UBool operator==(const Node &other) const;
- virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
- virtual void write(StringTrieBuilder &builder);
+ virtual bool operator==(const Node &other) const override;
+ virtual int32_t markRightEdgesFirst(int32_t edgeNumber) override;
+ virtual void write(StringTrieBuilder &builder) override;
protected:
Node *next;
};
@@ -317,8 +317,8 @@ protected:
LinearMatchNode(int32_t len, Node *nextNode)
: ValueNode((0x333333u*37u+len)*37u+hashCode(nextNode)),
length(len), next(nextNode) {}
- virtual UBool operator==(const Node &other) const;
- virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
+ virtual bool operator==(const Node &other) const override;
+ virtual int32_t markRightEdgesFirst(int32_t edgeNumber) override;
protected:
int32_t length;
Node *next;
@@ -341,9 +341,9 @@ protected:
class ListBranchNode : public BranchNode {
public:
ListBranchNode() : BranchNode(0x444444), length(0) {}
- virtual UBool operator==(const Node &other) const;
- virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
- virtual void write(StringTrieBuilder &builder);
+ virtual bool operator==(const Node &other) const override;
+ virtual int32_t markRightEdgesFirst(int32_t edgeNumber) override;
+ virtual void write(StringTrieBuilder &builder) override;
// Adds a unit with a final value.
void add(int32_t c, int32_t value) {
units[length]=(char16_t)c;
@@ -376,9 +376,9 @@ protected:
: BranchNode(((0x555555u*37u+middleUnit)*37u+
hashCode(lessThanNode))*37u+hashCode(greaterOrEqualNode)),
unit(middleUnit), lessThan(lessThanNode), greaterOrEqual(greaterOrEqualNode) {}
- virtual UBool operator==(const Node &other) const;
- virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
- virtual void write(StringTrieBuilder &builder);
+ virtual bool operator==(const Node &other) const override;
+ virtual int32_t markRightEdgesFirst(int32_t edgeNumber) override;
+ virtual void write(StringTrieBuilder &builder) override;
protected:
char16_t unit;
Node *lessThan;
@@ -392,9 +392,9 @@ protected:
BranchHeadNode(int32_t len, Node *subNode)
: ValueNode((0x666666u*37u+len)*37u+hashCode(subNode)),
length(len), next(subNode) {}
- virtual UBool operator==(const Node &other) const;
- virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
- virtual void write(StringTrieBuilder &builder);
+ virtual bool operator==(const Node &other) const override;
+ virtual int32_t markRightEdgesFirst(int32_t edgeNumber) override;
+ virtual void write(StringTrieBuilder &builder) override;
protected:
int32_t length;
Node *next; // A branch sub-node.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h b/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h
index 63d0e45cb7f..536f4172bc2 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h
@@ -84,7 +84,7 @@
*
* <pre>
* \code
- *#include "unicode/ubidi.h"
+ *#include <unicode/ubidi.h>
*
*typedef enum {
* styleNormal=0, styleSelected=1,
@@ -136,11 +136,11 @@
* int styleLimit;
*
* for(i=0; i<styleRunCount; ++i) {
- * styleLimit=styleRun[i].limit;
+ * styleLimit=styleRuns[i].limit;
* if(start<styleLimit) {
* if(styleLimit>limit) { styleLimit=limit; }
* renderRun(text, start, styleLimit,
- * direction, styleRun[i].style);
+ * direction, styleRuns[i].style);
* if(styleLimit==limit) { break; }
* start=styleLimit;
* }
@@ -150,14 +150,14 @@
*
* for(i=styleRunCount-1; i>=0; --i) {
* if(i>0) {
- * styleStart=styleRun[i-1].limit;
+ * styleStart=styleRuns[i-1].limit;
* } else {
* styleStart=0;
* }
* if(limit>=styleStart) {
* if(styleStart<start) { styleStart=start; }
* renderRun(text, styleStart, limit,
- * direction, styleRun[i].style);
+ * direction, styleRuns[i].style);
* if(styleStart==start) { break; }
* limit=styleStart;
* }
@@ -168,7 +168,8 @@
* // the line object represents text[start..limit-1]
* void renderLine(UBiDi *line, const UChar *text,
* int32_t start, int32_t limit,
- * const StyleRun *styleRuns, int styleRunCount) {
+ * const StyleRun *styleRuns, int styleRunCount,
+ * UErrorCode *pErrorCode) {
* UBiDiDirection direction=ubidi_getDirection(line);
* if(direction!=UBIDI_MIXED) {
* // unidirectional
@@ -183,14 +184,14 @@
* int32_t count, i, length;
* UBiDiLevel level;
*
- * count=ubidi_countRuns(para, pErrorCode);
+ * count=ubidi_countRuns(line, pErrorCode);
* if(U_SUCCESS(*pErrorCode)) {
* if(styleRunCount<=1) {
* Style style=styleRuns[0].style;
*
* // iterate over directional runs
* for(i=0; i<count; ++i) {
- * direction=ubidi_getVisualRun(para, i, &start, &length);
+ * direction=ubidi_getVisualRun(line, i, &start, &length);
* renderRun(text, start, start+length, direction, style);
* }
* } else {
@@ -244,7 +245,7 @@
* startLine(paraLevel, width);
*
* renderLine(para, text, 0, length,
- * styleRuns, styleRunCount);
+ * styleRuns, styleRunCount, pErrorCode);
* } else {
* UBiDi *line;
*
@@ -268,7 +269,7 @@
*
* renderLine(line, text, start, limit,
* styleRuns+styleRunStart,
- * styleRunLimit-styleRunStart);
+ * styleRunLimit-styleRunStart, pErrorCode);
* }
* if(limit==length) { break; }
* start=limit;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h b/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h
index 37189a85984..c603f7c13f3 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h
@@ -94,7 +94,7 @@
* <p>
* Code snippets illustrating the use of the Break Iterator APIs
* are available in the ICU User Guide,
- * http://icu-project.org/userguide/boundaryAnalysis.html
+ * https://unicode-org.github.io/icu/userguide/boundaryanalysis/
* and in the sample program icu/source/samples/break/break.cpp
*/
@@ -296,6 +296,8 @@ ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength,
const UChar * text, int32_t textLength,
UErrorCode * status);
+#ifndef U_HIDE_DEPRECATED_API
+
/**
* Thread safe cloning operation
* @param bi iterator to be cloned
@@ -312,7 +314,7 @@ ubrk_openBinaryRules(const uint8_t *binaryRules, int32_t rulesLength,
* @param status to indicate whether the operation went on smoothly or there were errors
* An informational status value, U_SAFECLONE_ALLOCATED_ERROR, is used if any allocations were necessary.
* @return pointer to the new clone
- * @stable ICU 2.0
+ * @deprecated ICU 69 Use ubrk_clone() instead.
*/
U_CAPI UBreakIterator * U_EXPORT2
ubrk_safeClone(
@@ -321,6 +323,23 @@ ubrk_safeClone(
int32_t *pBufferSize,
UErrorCode *status);
+#endif /* U_HIDE_DEPRECATED_API */
+
+#ifndef U_HIDE_DRAFT_API
+
+/**
+ * Thread safe cloning operation.
+ * @param bi iterator to be cloned
+ * @param status to indicate whether the operation went on smoothly or there were errors
+ * @return pointer to the new clone
+ * @draft ICU 69
+ */
+U_CAPI UBreakIterator * U_EXPORT2
+ubrk_clone(const UBreakIterator *bi,
+ UErrorCode *status);
+
+#endif // U_HIDE_DRAFT_API
+
#ifndef U_HIDE_DEPRECATED_API
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h b/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
index 1e0f82e706c..253e6db173f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
@@ -60,7 +60,7 @@ U_CDECL_BEGIN
* @see u_getUnicodeVersion
* @stable ICU 2.0
*/
-#define U_UNICODE_VERSION "13.0"
+#define U_UNICODE_VERSION "14.0"
/**
* \file
@@ -77,7 +77,7 @@ U_CDECL_BEGIN
*
* For more information see
* "About the Unicode Character Database" (http://www.unicode.org/ucd/)
- * and the ICU User Guide chapter on Properties (http://icu-project.org/userguide/properties.html).
+ * and the ICU User Guide chapter on Properties (https://unicode-org.github.io/icu/userguide/strings/properties).
*
* Many properties are accessible via generic functions that take a UProperty selector.
* - u_hasBinaryProperty() returns a binary value (true/false) per property and code point.
@@ -483,12 +483,63 @@ typedef enum UProperty {
* @stable ICU 62
*/
UCHAR_EXTENDED_PICTOGRAPHIC=64,
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Binary property of strings Basic_Emoji.
+ * See https://www.unicode.org/reports/tr51/#Emoji_Sets
+ *
+ * @draft ICU 70
+ */
+ UCHAR_BASIC_EMOJI=65,
+ /**
+ * Binary property of strings Emoji_Keycap_Sequence.
+ * See https://www.unicode.org/reports/tr51/#Emoji_Sets
+ *
+ * @draft ICU 70
+ */
+ UCHAR_EMOJI_KEYCAP_SEQUENCE=66,
+ /**
+ * Binary property of strings RGI_Emoji_Modifier_Sequence.
+ * See https://www.unicode.org/reports/tr51/#Emoji_Sets
+ *
+ * @draft ICU 70
+ */
+ UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE=67,
+ /**
+ * Binary property of strings RGI_Emoji_Flag_Sequence.
+ * See https://www.unicode.org/reports/tr51/#Emoji_Sets
+ *
+ * @draft ICU 70
+ */
+ UCHAR_RGI_EMOJI_FLAG_SEQUENCE=68,
+ /**
+ * Binary property of strings RGI_Emoji_Tag_Sequence.
+ * See https://www.unicode.org/reports/tr51/#Emoji_Sets
+ *
+ * @draft ICU 70
+ */
+ UCHAR_RGI_EMOJI_TAG_SEQUENCE=69,
+ /**
+ * Binary property of strings RGI_Emoji_ZWJ_Sequence.
+ * See https://www.unicode.org/reports/tr51/#Emoji_Sets
+ *
+ * @draft ICU 70
+ */
+ UCHAR_RGI_EMOJI_ZWJ_SEQUENCE=70,
+ /**
+ * Binary property of strings RGI_Emoji.
+ * See https://www.unicode.org/reports/tr51/#Emoji_Sets
+ *
+ * @draft ICU 70
+ */
+ UCHAR_RGI_EMOJI=71,
+#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the last constant for binary Unicode properties.
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
- UCHAR_BINARY_LIMIT,
+ UCHAR_BINARY_LIMIT=72,
#endif // U_HIDE_DEPRECATED_API
/** Enumerated property Bidi_Class.
@@ -1807,6 +1858,33 @@ enum UBlockCode {
/** @stable ICU 66 */
UBLOCK_YEZIDI = 308, /*[10E80]*/
+ // New blocks in Unicode 14.0
+
+ /** @stable ICU 70 */
+ UBLOCK_ARABIC_EXTENDED_B = 309, /*[0870]*/
+ /** @stable ICU 70 */
+ UBLOCK_CYPRO_MINOAN = 310, /*[12F90]*/
+ /** @stable ICU 70 */
+ UBLOCK_ETHIOPIC_EXTENDED_B = 311, /*[1E7E0]*/
+ /** @stable ICU 70 */
+ UBLOCK_KANA_EXTENDED_B = 312, /*[1AFF0]*/
+ /** @stable ICU 70 */
+ UBLOCK_LATIN_EXTENDED_F = 313, /*[10780]*/
+ /** @stable ICU 70 */
+ UBLOCK_LATIN_EXTENDED_G = 314, /*[1DF00]*/
+ /** @stable ICU 70 */
+ UBLOCK_OLD_UYGHUR = 315, /*[10F70]*/
+ /** @stable ICU 70 */
+ UBLOCK_TANGSA = 316, /*[16A70]*/
+ /** @stable ICU 70 */
+ UBLOCK_TOTO = 317, /*[1E290]*/
+ /** @stable ICU 70 */
+ UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_A = 318, /*[11AB0]*/
+ /** @stable ICU 70 */
+ UBLOCK_VITHKUQI = 319, /*[10570]*/
+ /** @stable ICU 70 */
+ UBLOCK_ZNAMENNY_MUSICAL_NOTATION = 320, /*[1CF00]*/
+
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest normal UBlockCode value.
@@ -1814,7 +1892,7 @@ enum UBlockCode {
*
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
- UBLOCK_COUNT = 309,
+ UBLOCK_COUNT = 321,
#endif // U_HIDE_DEPRECATED_API
/** @stable ICU 2.0 */
@@ -2106,6 +2184,9 @@ typedef enum UJoiningGroup {
U_JG_HANIFI_ROHINGYA_KINNA_YA, /**< @stable ICU 62 */
U_JG_HANIFI_ROHINGYA_PA, /**< @stable ICU 62 */
+ U_JG_THIN_YEH, /**< @stable ICU 70 */
+ U_JG_VERTICAL_TAIL, /**< @stable ICU 70 */
+
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest normal UJoiningGroup value.
@@ -2585,10 +2666,10 @@ typedef enum UVerticalOrientation {
*
* @param c Code point to test.
* @param which UProperty selector constant, identifies which binary property to check.
- * Must be UCHAR_BINARY_START<=which<UCHAR_BINARY_LIMIT.
+ * Must be UCHAR_BINARY_START&lt;=which&lt;UCHAR_BINARY_LIMIT.
* @return true or false according to the binary Unicode property value for c.
* Also false if 'which' is out of bounds or if the Unicode version
- * does not have data for the property at all, or not for this code point.
+ * does not have data for the property at all.
*
* @see UProperty
* @see u_getBinaryPropertySet
@@ -2599,6 +2680,37 @@ typedef enum UVerticalOrientation {
U_CAPI UBool U_EXPORT2
u_hasBinaryProperty(UChar32 c, UProperty which);
+#ifndef U_HIDE_DRAFT_API
+
+/**
+ * Returns true if the property is true for the string.
+ * Same as u_hasBinaryProperty(single code point, which)
+ * if the string contains exactly one code point.
+ *
+ * Most properties apply only to single code points.
+ * <a href="https://www.unicode.org/reports/tr51/#Emoji_Sets">UTS #51 Unicode Emoji</a>
+ * defines several properties of strings.
+ *
+ * @param s String to test.
+ * @param length Length of the string, or negative if NUL-terminated.
+ * @param which UProperty selector constant, identifies which binary property to check.
+ * Must be UCHAR_BINARY_START&lt;=which&lt;UCHAR_BINARY_LIMIT.
+ * @return true or false according to the binary Unicode property value for the string.
+ * Also false if 'which' is out of bounds or if the Unicode version
+ * does not have data for the property at all.
+ *
+ * @see UProperty
+ * @see u_hasBinaryProperty
+ * @see u_getBinaryPropertySet
+ * @see u_getIntPropertyValue
+ * @see u_getUnicodeVersion
+ * @draft ICU 70
+ */
+U_CAPI UBool U_EXPORT2
+u_stringHasBinaryProperty(const UChar *s, int32_t length, UProperty which);
+
+#endif // U_HIDE_DRAFT_API
+
/**
* Returns a frozen USet for a binary property.
* The library retains ownership over the returned object.
@@ -3834,7 +3946,7 @@ u_isJavaIDPart(UChar32 c);
* Full case mappings are applied by the string case mapping functions,
* see ustring.h and the UnicodeString class.
* See also the User Guide chapter on C/POSIX migration:
- * http://icu-project.org/userguide/posix.html#case_mappings
+ * https://unicode-org.github.io/icu/userguide/icu/posix#case-mappings
*
* @param c the code point to be mapped
* @return the Simple_Lowercase_Mapping of the code point, if any;
@@ -3859,7 +3971,7 @@ u_tolower(UChar32 c);
* Full case mappings are applied by the string case mapping functions,
* see ustring.h and the UnicodeString class.
* See also the User Guide chapter on C/POSIX migration:
- * http://icu-project.org/userguide/posix.html#case_mappings
+ * https://unicode-org.github.io/icu/userguide/icu/posix#case-mappings
*
* @param c the code point to be mapped
* @return the Simple_Uppercase_Mapping of the code point, if any;
@@ -3884,7 +3996,7 @@ u_toupper(UChar32 c);
* Full case mappings are applied by the string case mapping functions,
* see ustring.h and the UnicodeString class.
* See also the User Guide chapter on C/POSIX migration:
- * http://icu-project.org/userguide/posix.html#case_mappings
+ * https://unicode-org.github.io/icu/userguide/icu/posix#case-mappings
*
* @param c the code point to be mapped
* @return the Simple_Titlecase_Mapping of the code point, if any;
@@ -3908,7 +4020,7 @@ u_totitle(UChar32 c);
* Full case mappings are applied by the string case mapping functions,
* see ustring.h and the UnicodeString class.
* See also the User Guide chapter on C/POSIX migration:
- * http://icu-project.org/userguide/posix.html#case_mappings
+ * https://unicode-org.github.io/icu/userguide/icu/posix#case-mappings
*
* @param c the code point to be mapped
* @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h
index 15657702f9d..e0cb0acdc53 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h
@@ -138,41 +138,41 @@ private:
void buildUChars(UStringTrieBuildOption buildOption, UErrorCode &errorCode);
- virtual int32_t getElementStringLength(int32_t i) const;
- virtual char16_t getElementUnit(int32_t i, int32_t unitIndex) const;
- virtual int32_t getElementValue(int32_t i) const;
+ virtual int32_t getElementStringLength(int32_t i) const override;
+ virtual char16_t getElementUnit(int32_t i, int32_t unitIndex) const override;
+ virtual int32_t getElementValue(int32_t i) const override;
- virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t unitIndex) const;
+ virtual int32_t getLimitOfLinearMatch(int32_t first, int32_t last, int32_t unitIndex) const override;
- virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t unitIndex) const;
- virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t unitIndex, int32_t count) const;
- virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, char16_t unit) const;
+ virtual int32_t countElementUnits(int32_t start, int32_t limit, int32_t unitIndex) const override;
+ virtual int32_t skipElementsBySomeUnits(int32_t i, int32_t unitIndex, int32_t count) const override;
+ virtual int32_t indexOfElementWithNextUnit(int32_t i, int32_t unitIndex, char16_t unit) const override;
- virtual UBool matchNodesCanHaveValues() const { return true; }
+ virtual UBool matchNodesCanHaveValues() const override { return true; }
- virtual int32_t getMaxBranchLinearSubNodeLength() const { return UCharsTrie::kMaxBranchLinearSubNodeLength; }
- virtual int32_t getMinLinearMatch() const { return UCharsTrie::kMinLinearMatch; }
- virtual int32_t getMaxLinearMatchLength() const { return UCharsTrie::kMaxLinearMatchLength; }
+ virtual int32_t getMaxBranchLinearSubNodeLength() const override { return UCharsTrie::kMaxBranchLinearSubNodeLength; }
+ virtual int32_t getMinLinearMatch() const override { return UCharsTrie::kMinLinearMatch; }
+ virtual int32_t getMaxLinearMatchLength() const override { return UCharsTrie::kMaxLinearMatchLength; }
class UCTLinearMatchNode : public LinearMatchNode {
public:
UCTLinearMatchNode(const char16_t *units, int32_t len, Node *nextNode);
- virtual UBool operator==(const Node &other) const;
- virtual void write(StringTrieBuilder &builder);
+ virtual bool operator==(const Node &other) const override;
+ virtual void write(StringTrieBuilder &builder) override;
private:
const char16_t *s;
};
virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length,
- Node *nextNode) const;
+ Node *nextNode) const override;
UBool ensureCapacity(int32_t length);
- virtual int32_t write(int32_t unit);
+ virtual int32_t write(int32_t unit) override;
int32_t write(const char16_t *s, int32_t length);
- virtual int32_t writeElementUnits(int32_t i, int32_t unitIndex, int32_t length);
- virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal);
- virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t node);
- virtual int32_t writeDeltaTo(int32_t jumpTarget);
+ virtual int32_t writeElementUnits(int32_t i, int32_t unitIndex, int32_t length) override;
+ virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal) override;
+ virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t node) override;
+ virtual int32_t writeDeltaTo(int32_t jumpTarget) override;
UnicodeString strings;
UCharsTrieElement *elements;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h b/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h
index f5083561a86..9fae5e7de08 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h
@@ -56,7 +56,7 @@ public:
* The starting
* position is specified by "position". If "position" is outside the valid
* iteration range, the behavior of this object is undefined.
- * @param textPtr The char16_t array to be iteratd over
+ * @param textPtr The char16_t array to be iterated over
* @param length The length of the char16_t array
* @param position The starting position of the iteration
* @stable ICU 2.0
@@ -119,14 +119,14 @@ public:
* same string and are pointing at the same character.
* @stable ICU 2.0
*/
- virtual UBool operator==(const ForwardCharacterIterator& that) const;
+ virtual bool operator==(const ForwardCharacterIterator& that) const override;
/**
* Generates a hash code for this iterator.
* @return the hash code.
* @stable ICU 2.0
*/
- virtual int32_t hashCode(void) const;
+ virtual int32_t hashCode(void) const override;
/**
* Returns a new UCharCharacterIterator referring to the same
@@ -135,7 +135,7 @@ public:
* @return the CharacterIterator newly created
* @stable ICU 2.0
*/
- virtual UCharCharacterIterator* clone() const;
+ virtual UCharCharacterIterator* clone() const override;
/**
* Sets the iterator to refer to the first code unit in its
@@ -144,7 +144,7 @@ public:
* @return the first code unit in its iteration range.
* @stable ICU 2.0
*/
- virtual char16_t first(void);
+ virtual char16_t first(void) override;
/**
* Sets the iterator to refer to the first code unit in its
@@ -154,7 +154,7 @@ public:
* @return the first code unit in its iteration range
* @stable ICU 2.0
*/
- virtual char16_t firstPostInc(void);
+ virtual char16_t firstPostInc(void) override;
/**
* Sets the iterator to refer to the first code point in its
@@ -165,7 +165,7 @@ public:
* @return the first code point in its iteration range
* @stable ICU 2.0
*/
- virtual UChar32 first32(void);
+ virtual UChar32 first32(void) override;
/**
* Sets the iterator to refer to the first code point in its
@@ -175,7 +175,7 @@ public:
* @return the first code point in its iteration range.
* @stable ICU 2.0
*/
- virtual UChar32 first32PostInc(void);
+ virtual UChar32 first32PostInc(void) override;
/**
* Sets the iterator to refer to the last code unit in its
@@ -184,7 +184,7 @@ public:
* @return the last code unit in its iteration range.
* @stable ICU 2.0
*/
- virtual char16_t last(void);
+ virtual char16_t last(void) override;
/**
* Sets the iterator to refer to the last code point in its
@@ -193,7 +193,7 @@ public:
* @return the last code point in its iteration range.
* @stable ICU 2.0
*/
- virtual UChar32 last32(void);
+ virtual UChar32 last32(void) override;
/**
* Sets the iterator to refer to the "position"-th code unit
@@ -203,7 +203,7 @@ public:
* @return the code unit
* @stable ICU 2.0
*/
- virtual char16_t setIndex(int32_t position);
+ virtual char16_t setIndex(int32_t position) override;
/**
* Sets the iterator to refer to the beginning of the code point
@@ -216,21 +216,21 @@ public:
* @return the code unit
* @stable ICU 2.0
*/
- virtual UChar32 setIndex32(int32_t position);
+ virtual UChar32 setIndex32(int32_t position) override;
/**
* Returns the code unit the iterator currently refers to.
* @return the code unit the iterator currently refers to.
* @stable ICU 2.0
*/
- virtual char16_t current(void) const;
+ virtual char16_t current(void) const override;
/**
* Returns the code point the iterator currently refers to.
* @return the code point the iterator currently refers to.
* @stable ICU 2.0
*/
- virtual UChar32 current32(void) const;
+ virtual UChar32 current32(void) const override;
/**
* Advances to the next code unit in the iteration range (toward
@@ -239,7 +239,7 @@ public:
* @return the next code unit in the iteration range.
* @stable ICU 2.0
*/
- virtual char16_t next(void);
+ virtual char16_t next(void) override;
/**
* Gets the current code unit for returning and advances to the next code unit
@@ -249,7 +249,7 @@ public:
* @return the current code unit.
* @stable ICU 2.0
*/
- virtual char16_t nextPostInc(void);
+ virtual char16_t nextPostInc(void) override;
/**
* Advances to the next code point in the iteration range (toward
@@ -261,7 +261,7 @@ public:
* @return the next code point in the iteration range.
* @stable ICU 2.0
*/
- virtual UChar32 next32(void);
+ virtual UChar32 next32(void) override;
/**
* Gets the current code point for returning and advances to the next code point
@@ -271,7 +271,7 @@ public:
* @return the current point.
* @stable ICU 2.0
*/
- virtual UChar32 next32PostInc(void);
+ virtual UChar32 next32PostInc(void) override;
/**
* Returns false if there are no more code units or code points
@@ -282,7 +282,7 @@ public:
* at or after the current position in the iteration range.
* @stable ICU 2.0
*/
- virtual UBool hasNext();
+ virtual UBool hasNext() override;
/**
* Advances to the previous code unit in the iteration range (toward
@@ -291,7 +291,7 @@ public:
* @return the previous code unit in the iteration range.
* @stable ICU 2.0
*/
- virtual char16_t previous(void);
+ virtual char16_t previous(void) override;
/**
* Advances to the previous code point in the iteration range (toward
@@ -300,7 +300,7 @@ public:
* @return the previous code point in the iteration range.
* @stable ICU 2.0
*/
- virtual UChar32 previous32(void);
+ virtual UChar32 previous32(void) override;
/**
* Returns false if there are no more code units or code points
@@ -311,7 +311,7 @@ public:
* before the current position in the iteration range.
* @stable ICU 2.0
*/
- virtual UBool hasPrevious();
+ virtual UBool hasPrevious() override;
/**
* Moves the current position relative to the start or end of the
@@ -324,7 +324,7 @@ public:
* @return the new position
* @stable ICU 2.0
*/
- virtual int32_t move(int32_t delta, EOrigin origin);
+ virtual int32_t move(int32_t delta, EOrigin origin) override;
/**
* Moves the current position relative to the start or end of the
@@ -341,7 +341,7 @@ public:
// One of the system headers right now is sometimes defining a conflicting macro we don't use
#undef move32
#endif
- virtual int32_t move32(int32_t delta, EOrigin origin);
+ virtual int32_t move32(int32_t delta, EOrigin origin) override;
/**
* Sets the iterator to iterate over a new range of text
@@ -356,7 +356,7 @@ public:
* @param result Receives a copy of the text under iteration.
* @stable ICU 2.0
*/
- virtual void getText(UnicodeString& result);
+ virtual void getText(UnicodeString& result) override;
/**
* Return a class ID for this class (not really public)
@@ -370,7 +370,7 @@ public:
* @return a class ID for this object.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
protected:
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h
index 58f271cfb5a..2687c984d43 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h
@@ -42,8 +42,7 @@
* many other callback actions that can be used instead of a character substitution.</p>
*
* <p>More information about this API can be found in our
- * <a href="http://icu-project.org/userguide/conversion.html">User's
- * Guide</a>.</p>
+ * <a href="https://unicode-org.github.io/icu/userguide/conversion/">User Guide</a>.</p>
*/
#ifndef UCNV_H
@@ -340,7 +339,7 @@ ucnv_compareNames(const char *name1, const char *name2);
*
* <p>The conversion behavior and names can vary between platforms. ICU may
* convert some characters differently from other platforms. Details on this topic
- * are in the <a href="http://icu-project.org/userguide/conversion.html">User's
+ * are in the <a href="https://unicode-org.github.io/icu/userguide/conversion/">User
* Guide</a>. Aliases starting with a "cp" prefix have no specific meaning
* other than its an alias starting with the letters "cp". Please do not
* associate any meaning to these aliases.</p>
@@ -1007,7 +1006,7 @@ ucnv_getUnicodeSet(const UConverter *cnv,
UErrorCode *pErrorCode);
/**
- * Gets the current calback function used by the converter when an illegal
+ * Gets the current callback function used by the converter when an illegal
* or invalid codepage sequence is found.
* Context pointers are always owned by the caller.
*
@@ -1699,10 +1698,10 @@ ucnv_countAvailable(void);
/**
* Gets the canonical converter name of the specified converter from a list of
- * all available converters contaied in the alias file. All converters
+ * all available converters contained in the alias file. All converters
* in this list can be opened.
*
- * @param n the index to a converter available on the system (in the range <TT>[0..ucnv_countAvaiable()]</TT>)
+ * @param n the index to a converter available on the system (in the range <TT>[0..ucnv_countAvailable()]</TT>)
* @return a pointer a string (library owned), or <TT>NULL</TT> if the index is out of bounds.
* @see ucnv_countAvailable
* @stable ICU 2.0
@@ -1935,7 +1934,7 @@ ucnv_isAmbiguous(const UConverter *cnv);
* reverse fallbacks (to Unicode).
* For details see ".ucm File Format"
* in the Conversion Data chapter of the ICU User Guide:
- * http://www.icu-project.org/userguide/conversion-data.html#ucmformat
+ * https://unicode-org.github.io/icu/userguide/conversion/data.html#ucm-file-format
*
* @param cnv The converter to set the fallback mapping usage on.
* @param usesFallback true if the user wants the converter to take advantage of the fallback
@@ -2032,7 +2031,7 @@ ucnv_toUCountPending(const UConverter* cnv, UErrorCode* status);
* fixed ratio of bytes to Unicode codes <i>units</i> for any particular Unicode encoding form.
* false is returned with the UErrorCode if error occurs or cnv is NULL.
* @param cnv The converter to be tested
- * @param status ICU error code in/out paramter
+ * @param status ICU error code in/out parameter
* @return true if the converter is fixed-width
* @stable ICU 4.8
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h
index 7209ba5f7b8..a13d01db099 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h
@@ -268,7 +268,7 @@ U_CAPI void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP (
/**
* DO NOT CALL THIS FUNCTION DIRECTLY!
* This From Unicode callback skips any ILLEGAL_SEQUENCE, or
- * skips only UNASSINGED_SEQUENCE depending on the context parameter
+ * skips only UNASSIGNED_SEQUENCE depending on the context parameter
* simply ignoring those characters.
*
* @param context The function currently recognizes the callback options:
@@ -330,31 +330,31 @@ U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_SUBSTITUTE (
*
* @param context The function currently recognizes the callback options:
* <ul>
- * <li>UCNV_ESCAPE_ICU: Substitues the ILLEGAL SEQUENCE with the hexadecimal
+ * <li>UCNV_ESCAPE_ICU: Substitutes the ILLEGAL SEQUENCE with the hexadecimal
* representation in the format %UXXXX, e.g. "%uFFFE%u00AC%uC8FE").
* In the Event the converter doesn't support the characters {%,U}[A-F][0-9],
* it will substitute the illegal sequence with the substitution characters.
* Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as
* %UD84D%UDC56</li>
- * <li>UCNV_ESCAPE_JAVA: Substitues the ILLEGAL SEQUENCE with the hexadecimal
+ * <li>UCNV_ESCAPE_JAVA: Substitutes the ILLEGAL SEQUENCE with the hexadecimal
* representation in the format \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE").
* In the Event the converter doesn't support the characters {\,u}[A-F][0-9],
* it will substitute the illegal sequence with the substitution characters.
* Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as
* \\uD84D\\uDC56</li>
- * <li>UCNV_ESCAPE_C: Substitues the ILLEGAL SEQUENCE with the hexadecimal
+ * <li>UCNV_ESCAPE_C: Substitutes the ILLEGAL SEQUENCE with the hexadecimal
* representation in the format \\uXXXX, e.g. "\\uFFFE\\u00AC\\uC8FE").
* In the Event the converter doesn't support the characters {\,u,U}[A-F][0-9],
* it will substitute the illegal sequence with the substitution characters.
* Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as
* \\U00023456</li>
- * <li>UCNV_ESCAPE_XML_DEC: Substitues the ILLEGAL SEQUENCE with the decimal
+ * <li>UCNV_ESCAPE_XML_DEC: Substitutes the ILLEGAL SEQUENCE with the decimal
* representation in the format \htmlonly&amp;#DDDDDDDD;, e.g. "&amp;#65534;&amp;#172;&amp;#51454;")\endhtmlonly.
* In the Event the converter doesn't support the characters {&amp;,#}[0-9],
* it will substitute the illegal sequence with the substitution characters.
* Note that codeUnit(32bit int eg: unit of a surrogate pair) is represented as
* &amp;#144470; and Zero padding is ignored.</li>
- * <li>UCNV_ESCAPE_XML_HEX:Substitues the ILLEGAL SEQUENCE with the decimal
+ * <li>UCNV_ESCAPE_XML_HEX:Substitutes the ILLEGAL SEQUENCE with the decimal
* representation in the format \htmlonly&amp;#xXXXX; e.g. "&amp;#xFFFE;&amp;#x00AC;&amp;#xC8FE;")\endhtmlonly.
* In the Event the converter doesn't support the characters {&,#,x}[0-9],
* it will substitute the illegal sequence with the substitution characters.
@@ -383,7 +383,7 @@ U_CAPI void U_EXPORT2 UCNV_FROM_U_CALLBACK_ESCAPE (
/**
* DO NOT CALL THIS FUNCTION DIRECTLY!
* This To Unicode callback skips any ILLEGAL_SEQUENCE, or
- * skips only UNASSINGED_SEQUENCE depending on the context parameter
+ * skips only UNASSIGNED_SEQUENCE depending on the context parameter
* simply ignoring those characters.
*
* @param context The function currently recognizes the callback options:
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h
index 5e0a71cf351..3d7d3327f7d 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h
@@ -45,11 +45,11 @@
* from the serialized form.
*/
+struct UConverterSelector;
/**
* @{
- * The selector data structure
+ * Typedef for selector data structure.
*/
-struct UConverterSelector;
typedef struct UConverterSelector UConverterSelector;
/** @} */
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h
index b95491b183e..e2547ae2eea 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucptrie.h
@@ -43,7 +43,7 @@ typedef union UCPTrieData {
/**
* Immutable Unicode code point trie structure.
* Fast, reasonably compact, map from Unicode code points (U+0000..U+10FFFF) to integer values.
- * For details see http://site.icu-project.org/design/struct/utrie
+ * For details see https://icu.unicode.org/design/struct/utrie
*
* Do not access UCPTrie fields directly; use public functions and macros.
* Functions are easy to use: They support all trie types and value widths.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h b/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h
index 35c2a393897..5589e799904 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h
@@ -115,14 +115,13 @@ typedef enum UCurrNameStyle {
*/
UCURR_NARROW_SYMBOL_NAME,
-#ifndef U_HIDE_DRAFT_API
/**
* Selector for getName() indicating the formal currency symbol.
* The formal currency symbol is similar to the regular currency
* symbol, but it always takes the form used in formal settings
* such as banking; for example, "NT$" instead of "$" for TWD in zh-TW.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
UCURR_FORMAL_SYMBOL_NAME,
@@ -131,10 +130,9 @@ typedef enum UCurrNameStyle {
* The variant symbol for a currency is an alternative symbol
* that is not necessarily as widely used as the regular symbol.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
UCURR_VARIANT_SYMBOL_NAME
-#endif // U_HIDE_DRAFT_API
} UCurrNameStyle;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/udata.h b/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
index 6caa849c42f..c5b1adc359c 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
@@ -231,7 +231,7 @@ udata_open(const char *path, const char *type, const char *name,
* logically prepended to the ICU data directory string.</p>
*
* <p>For details about ICU data loading see the User Guide
- * Data Management chapter. (http://icu-project.org/userguide/icudata.html)</p>
+ * Data Management chapter. (https://unicode-org.github.io/icu/userguide/icu_data/)</p>
*
* @param path Specifies an absolute path and/or a basename for the
* finding of the data in the file system.
@@ -362,7 +362,7 @@ udata_setCommonData(const void *data, UErrorCode *err);
*
*
* Warning: setAppData will set a U_USING_DEFAULT_WARNING code if
- * data with the specifed path that has already been opened, or
+ * data with the specified path that has already been opened, or
* if setAppData with the same path has already been called.
* Any such calls to setAppData will have no effect.
*
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h b/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h
index 3addb847e7f..b0bdbe1b87f 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h
@@ -841,7 +841,7 @@ typedef enum ULocAvailableType {
* @internal
*/
ULOC_AVAILABLE_COUNT
-#endif
+#endif /* U_HIDE_INTERNAL_API */
} ULocAvailableType;
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h b/Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h
index 5325d58147a..3b950055da7 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/umutablecptrie.h
@@ -31,7 +31,7 @@ U_CDECL_BEGIN
/**
* Mutable Unicode code point trie.
* Fast map from Unicode code points (U+0000..U+10FFFF) to 32-bit integer values.
- * For details see http://site.icu-project.org/design/struct/utrie
+ * For details see https://icu.unicode.org/design/struct/utrie
*
* Setting values (especially ranges) and lookup is fast.
* The mutable trie is only somewhat space-efficient.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/unifilt.h b/Build/source/libs/icu/icu-src/source/common/unicode/unifilt.h
index 420e1a19056..0fcaf4b789c 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/unifilt.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/unifilt.h
@@ -40,8 +40,8 @@ U_NAMESPACE_BEGIN
*
* <code>UnicodeFilter</code> defines a protocol for selecting a
* subset of the full range (U+0000 to U+10FFFF) of Unicode characters.
- * Currently, filters are used in conjunction with classes like {@link
- * Transliterator} to only process selected characters through a
+ * Currently, filters are used in conjunction with classes like
+ * {@link Transliterator} to only process selected characters through a
* transformation.
*
* <p>Note: UnicodeFilter currently stubs out two pure virtual methods
@@ -77,7 +77,7 @@ public:
* @return clone, or nullptr if an error occurred
* @stable ICU 2.4
*/
- virtual UnicodeFilter* clone() const = 0;
+ virtual UnicodeFilter* clone() const override = 0;
/**
* Returns <tt>true</tt> for characters that are in the selected
@@ -93,7 +93,7 @@ public:
* and return the pointer.
* @stable ICU 2.4
*/
- virtual UnicodeMatcher* toMatcher() const;
+ virtual UnicodeMatcher* toMatcher() const override;
/**
* Implement UnicodeMatcher API.
@@ -102,13 +102,13 @@ public:
virtual UMatchDegree matches(const Replaceable& text,
int32_t& offset,
int32_t limit,
- UBool incremental);
+ UBool incremental) override;
/**
* UnicodeFunctor API. Nothing to do.
* @stable ICU 2.4
*/
- virtual void setData(const TransliterationRuleData*);
+ virtual void setData(const TransliterationRuleData*) override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/unifunct.h b/Build/source/libs/icu/icu-src/source/common/unicode/unifunct.h
index 7d31af7dafb..8751302494b 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/unifunct.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/unifunct.h
@@ -93,14 +93,14 @@ public:
*
* <p>Concrete subclasses of UnicodeFunctor should use the macro
* UOBJECT_DEFINE_RTTI_IMPLEMENTATION from uobject.h to
- * provide definitios getStaticClassID and getDynamicClassID.
+ * provide definitions getStaticClassID and getDynamicClassID.
*
* @return The class ID for this object. All objects of a given
* class have the same class ID. Objects of other classes have
* different class IDs.
* @stable ICU 2.4
*/
- virtual UClassID getDynamicClassID(void) const = 0;
+ virtual UClassID getDynamicClassID(void) const override = 0;
/**
* Set the data object associated with this functor. The data
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h b/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
index 50b6360f3a7..730337a3535 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
@@ -124,8 +124,8 @@ class RuleCharacterIterator;
* "[:Lu:]" and the Perl-like syntax "\\p{Lu}" are recognized. For a
* complete list of supported property patterns, see the User's Guide
* for UnicodeSet at
- * <a href="http://icu-project.org/userguide/unicodeSet.html">
- * http://icu-project.org/userguide/unicodeSet.html</a>.
+ * <a href="https://unicode-org.github.io/icu/userguide/strings/unicodeset">
+ * https://unicode-org.github.io/icu/userguide/strings/unicodeset</a>.
* Actual determination of property data is defined by the underlying
* Unicode database as implemented by UCharacter.
*
@@ -136,6 +136,13 @@ class RuleCharacterIterator;
* their delimiters; "[:^foo]" and "\\P{foo}". In any other location,
* '^' has no special meaning.
*
+ * <p>Since ICU 70, "[^...]", "[:^foo]", "\\P{foo}", and "[:binaryProperty=No:]"
+ * perform a “code point complement” (all code points minus the original set),
+ * removing all multicharacter strings,
+ * equivalent to <code>.complement().removeAllStrings()</code>.
+ * The complement() API function continues to perform a
+ * symmetric difference with all code points and thus retains all multicharacter strings.
+ *
* <p>Ranges are indicated by placing two a '-' between two
* characters, as in "a-z". This specifies the range of all
* characters from the left to the right, in Unicode order. If the
@@ -178,8 +185,6 @@ class RuleCharacterIterator;
* Unicode property
* </table>
*
- * <p><b>Warning</b>: you cannot add an empty string ("") to a UnicodeSet.</p>
- *
* <p><b>Formal syntax</b></p>
*
* \htmlonly<blockquote>\endhtmlonly
@@ -219,9 +224,8 @@ class RuleCharacterIterator;
* </tr>
* <tr align="top">
* <td nowrap valign="top" align="right"><code>hex :=&nbsp; </code></td>
- * <td valign="top"><em>any character for which
- * </em><code>Character.digit(c, 16)</code><em>
- * returns a non-negative result</em></td>
+ * <td valign="top"><code>'0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' |<br>
+ * &nbsp;&nbsp;&nbsp;&nbsp;'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f'</code></td>
* </tr>
* <tr>
* <td nowrap valign="top" align="right"><code>property :=&nbsp; </code></td>
@@ -487,14 +491,14 @@ public:
* @return <tt>true</tt> if the specified set is equal to this set.
* @stable ICU 2.0
*/
- virtual UBool operator==(const UnicodeSet& o) const;
+ virtual bool operator==(const UnicodeSet& o) const;
/**
* Compares the specified object with this set for equality. Returns
* <tt>true</tt> if the specified set is not equal to this set.
* @stable ICU 2.0
*/
- inline UBool operator!=(const UnicodeSet& o) const;
+ inline bool operator!=(const UnicodeSet& o) const;
/**
* Returns a copy of this object. All UnicodeFunctor objects have
@@ -505,7 +509,7 @@ public:
* @see cloneAsThawed
* @stable ICU 2.0
*/
- virtual UnicodeSet* clone() const;
+ virtual UnicodeSet* clone() const override;
/**
* Returns the hash code value for this set.
@@ -601,7 +605,7 @@ public:
/**
* Make this object represent the range `start - end`.
- * If `end > start` then this object is set to an empty range.
+ * If `start > end` then this object is set to an empty range.
* A frozen set will not be modified.
*
* @param start first character in the set, inclusive
@@ -707,7 +711,7 @@ public:
* @stable ICU 2.0
*/
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool escapeUnprintable = false) const;
+ UBool escapeUnprintable = false) const override;
/**
* Modifies this set to contain those code points which have the given value
@@ -773,8 +777,12 @@ public:
* Note than the elements of a set may include both individual
* codepoints and strings.
*
+ * This is slower than getRangeCount() because
+ * it counts the code points of all ranges.
+ *
* @return the number of elements in this set (its cardinality).
* @stable ICU 2.0
+ * @see getRangeCount
*/
virtual int32_t size(void) const;
@@ -786,6 +794,14 @@ public:
*/
virtual UBool isEmpty(void) const;
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * @return true if this set contains multi-character strings or the empty string.
+ * @draft ICU 70
+ */
+ UBool hasStrings() const;
+#endif // U_HIDE_DRAFT_API
+
/**
* Returns true if this set contains the given character.
* This function works faster with a frozen set.
@@ -793,7 +809,7 @@ public:
* @return true if the test condition is met
* @stable ICU 2.0
*/
- virtual UBool contains(UChar32 c) const;
+ virtual UBool contains(UChar32 c) const override;
/**
* Returns true if this set contains every character
@@ -1002,7 +1018,7 @@ public:
virtual UMatchDegree matches(const Replaceable& text,
int32_t& offset,
int32_t limit,
- UBool incremental);
+ UBool incremental) override;
private:
/**
@@ -1051,7 +1067,7 @@ public:
* @param toUnionTo the set into which to union the source characters
* @stable ICU 2.4
*/
- virtual void addMatchSetTo(UnicodeSet& toUnionTo) const;
+ virtual void addMatchSetTo(UnicodeSet& toUnionTo) const override;
/**
* Returns the index of the given character within this set, where
@@ -1066,8 +1082,14 @@ public:
/**
* Returns the character at the given index within this set, where
* the set is ordered by ascending code point. If the index is
- * out of range, return (UChar32)-1. The inverse of this method is
- * <code>indexOf()</code>.
+ * out of range for characters, returns (UChar32)-1.
+ * The inverse of this method is <code>indexOf()</code>.
+ *
+ * For iteration, this is slower than UnicodeSetIterator or
+ * getRangeCount()/getRangeStart()/getRangeEnd(),
+ * because for each call it skips linearly over <code>index</code>
+ * characters in the ranges.
+ *
* @param index an index from 0..size()-1
* @return the character at the given index, or (UChar32)-1.
* @stable ICU 2.4
@@ -1077,7 +1099,7 @@ public:
/**
* Adds the specified range to this set if it is not already
* present. If this set already contains the specified range,
- * the call leaves this set unchanged. If <code>end > start</code>
+ * the call leaves this set unchanged. If <code>start > end</code>
* then an empty range is added, leaving the set unchanged.
* This is equivalent to a boolean logic OR, or a set UNION.
* A frozen set will not be modified.
@@ -1095,6 +1117,9 @@ public:
* present. If this set already contains the specified character,
* the call leaves this set unchanged.
* A frozen set will not be modified.
+ *
+ * @param c the character (code point)
+ * @return this object, for chaining
* @stable ICU 2.0
*/
UnicodeSet& add(UChar32 c);
@@ -1104,8 +1129,8 @@ public:
* present. If this set already contains the multicharacter,
* the call leaves this set unchanged.
* Thus "ch" => {"ch"}
- * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
* A frozen set will not be modified.
+ *
* @param s the source string
* @return this object, for chaining
* @stable ICU 2.4
@@ -1124,8 +1149,8 @@ public:
public:
/**
- * Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"}
- * If this set already any particular character, it has no effect on that character.
+ * Adds each of the characters in this string to the set. Note: "ch" => {"c", "h"}
+ * If this set already contains any particular character, it has no effect on that character.
* A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
@@ -1135,7 +1160,6 @@ public:
/**
* Retains EACH of the characters in this string. Note: "ch" == {"c", "h"}
- * If this set already any particular character, it has no effect on that character.
* A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
@@ -1145,7 +1169,6 @@ public:
/**
* Complement EACH of the characters in this string. Note: "ch" == {"c", "h"}
- * If this set already any particular character, it has no effect on that character.
* A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
@@ -1155,7 +1178,6 @@ public:
/**
* Remove EACH of the characters in this string. Note: "ch" == {"c", "h"}
- * If this set already any particular character, it has no effect on that character.
* A frozen set will not be modified.
* @param s the source string
* @return this object, for chaining
@@ -1165,7 +1187,7 @@ public:
/**
* Makes a set from a multicharacter string. Thus "ch" => {"ch"}
- * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ *
* @param s the source string
* @return a newly created set containing the given string.
* The caller owns the return object and is responsible for deleting it.
@@ -1185,15 +1207,13 @@ public:
/**
* Retain only the elements in this set that are contained in the
- * specified range. If <code>end > start</code> then an empty range is
+ * specified range. If <code>start > end</code> then an empty range is
* retained, leaving the set empty. This is equivalent to
* a boolean logic AND, or a set INTERSECTION.
* A frozen set will not be modified.
*
- * @param start first character, inclusive, of range to be retained
- * to this set.
- * @param end last character, inclusive, of range to be retained
- * to this set.
+ * @param start first character, inclusive, of range
+ * @param end last character, inclusive, of range
* @stable ICU 2.0
*/
virtual UnicodeSet& retain(UChar32 start, UChar32 end);
@@ -1202,14 +1222,31 @@ public:
/**
* Retain the specified character from this set if it is present.
* A frozen set will not be modified.
+ *
+ * @param c the character (code point)
+ * @return this object, for chaining
* @stable ICU 2.0
*/
UnicodeSet& retain(UChar32 c);
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Retains only the specified string from this set if it is present.
+ * Upon return this set will be empty if it did not contain s, or
+ * will only contain s if it did contain s.
+ * A frozen set will not be modified.
+ *
+ * @param s the source string
+ * @return this object, for chaining
+ * @draft ICU 69
+ */
+ UnicodeSet& retain(const UnicodeString &s);
+#endif // U_HIDE_DRAFT_API
+
/**
* Removes the specified range from this set if it is present.
* The set will not contain the specified range once the call
- * returns. If <code>end > start</code> then an empty range is
+ * returns. If <code>start > end</code> then an empty range is
* removed, leaving the set unchanged.
* A frozen set will not be modified.
*
@@ -1226,6 +1263,9 @@ public:
* The set will not contain the specified range once the call
* returns.
* A frozen set will not be modified.
+ *
+ * @param c the character (code point)
+ * @return this object, for chaining
* @stable ICU 2.0
*/
UnicodeSet& remove(UChar32 c);
@@ -1242,26 +1282,29 @@ public:
UnicodeSet& remove(const UnicodeString& s);
/**
- * Inverts this set. This operation modifies this set so that
- * its value is its complement. This is equivalent to
+ * This is equivalent to
* <code>complement(MIN_VALUE, MAX_VALUE)</code>.
+ *
+ * <strong>Note:</strong> This performs a symmetric difference with all code points
+ * <em>and thus retains all multicharacter strings</em>.
+ * In order to achieve a “code point complement” (all code points minus this set),
+ * the easiest is to <code>.complement().removeAllStrings()</code>.
+ *
* A frozen set will not be modified.
* @stable ICU 2.0
*/
- virtual UnicodeSet& complement(void);
+ virtual UnicodeSet& complement();
/**
* Complements the specified range in this set. Any character in
* the range will be removed if it is in this set, or will be
- * added if it is not in this set. If <code>end > start</code>
+ * added if it is not in this set. If <code>start > end</code>
* then an empty range is complemented, leaving the set unchanged.
* This is equivalent to a boolean logic XOR.
* A frozen set will not be modified.
*
- * @param start first character, inclusive, of range to be removed
- * from this set.
- * @param end last character, inclusive, of range to be removed
- * from this set.
+ * @param start first character, inclusive, of range
+ * @param end last character, inclusive, of range
* @stable ICU 2.0
*/
virtual UnicodeSet& complement(UChar32 start, UChar32 end);
@@ -1271,16 +1314,18 @@ public:
* will be removed if it is in this set, or will be added if it is
* not in this set.
* A frozen set will not be modified.
+ *
+ * @param c the character (code point)
+ * @return this object, for chaining
* @stable ICU 2.0
*/
UnicodeSet& complement(UChar32 c);
/**
* Complement the specified string in this set.
- * The set will not contain the specified string once the call
- * returns.
- * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ * The string will be removed if it is in this set, or will be added if it is not in this set.
* A frozen set will not be modified.
+ *
* @param s the string to complement
* @return this object, for chaining
* @stable ICU 2.4
@@ -1488,7 +1533,7 @@ public:
* different class IDs.
* @stable ICU 2.4
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
private:
@@ -1509,7 +1554,7 @@ private:
* is the given value. This is used by <tt>RuleBasedTransliterator</tt> for
* indexing.
*/
- virtual UBool matchesIndexValue(uint8_t v) const;
+ virtual UBool matchesIndexValue(uint8_t v) const override;
private:
friend class RBBIRuleScanner;
@@ -1551,7 +1596,6 @@ private:
void swapBuffers(void);
UBool allocateStrings(UErrorCode &status);
- UBool hasStrings() const;
int32_t stringsSize() const;
UBool stringsContains(const UnicodeString &s) const;
@@ -1565,6 +1609,9 @@ private:
static void _appendToPat(UnicodeString& buf, UChar32 c, UBool escapeUnprintable);
+ static void _appendToPat(UnicodeString &result, UChar32 start, UChar32 end,
+ UBool escapeUnprintable);
+
//----------------------------------------------------------------
// Implementation: Fundamental operators
//----------------------------------------------------------------
@@ -1592,7 +1639,7 @@ private:
*
* The original design document is out of date, but still useful.
* Ignore the property and value names:
- * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/unicodeset_properties.html
+ * https://htmlpreview.github.io/?https://github.com/unicode-org/icu-docs/blob/main/design/unicodeset_properties.html
*
* Recognized syntax:
*
@@ -1677,7 +1724,7 @@ private:
-inline UBool UnicodeSet::operator!=(const UnicodeSet& o) const {
+inline bool UnicodeSet::operator!=(const UnicodeSet& o) const {
return !operator==(o);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h b/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
index 456389f265f..b3c99481079 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
@@ -44,9 +44,10 @@ struct UConverter; // unicode/ucnv.h
#ifndef USTRING_H
/**
* \ingroup ustring_ustrlen
+ * @param s Pointer to sequence of UChars.
+ * @return Length of sequence.
*/
-U_CAPI int32_t U_EXPORT2
-u_strlen(const UChar *s);
+U_CAPI int32_t U_EXPORT2 u_strlen(const UChar *s);
#endif
U_NAMESPACE_BEGIN
@@ -324,7 +325,7 @@ public:
* false otherwise.
* @stable ICU 2.0
*/
- inline UBool operator== (const UnicodeString& text) const;
+ inline bool operator== (const UnicodeString& text) const;
/**
* Inequality operator. Performs only bitwise comparison.
@@ -333,7 +334,7 @@ public:
* true otherwise.
* @stable ICU 2.0
*/
- inline UBool operator!= (const UnicodeString& text) const;
+ inline bool operator!= (const UnicodeString& text) const;
/**
* Greater than operator. Performs only bitwise comparison.
@@ -1525,7 +1526,7 @@ public:
*/
virtual void extractBetween(int32_t start,
int32_t limit,
- UnicodeString& target) const;
+ UnicodeString& target) const override;
/**
* Copy the characters in the range
@@ -1544,7 +1545,7 @@ public:
* @param target the target buffer for extraction, can be NULL
* if targetLength is 0
* @param targetCapacity the length of the target buffer
- * @param inv Signature-distinguishing paramater, use US_INV.
+ * @param inv Signature-distinguishing parameter, use US_INV.
* @return the output string length, not including the terminating NUL
* @stable ICU 3.2
*/
@@ -2455,14 +2456,14 @@ public:
*/
virtual void handleReplaceBetween(int32_t start,
int32_t limit,
- const UnicodeString& text);
+ const UnicodeString& text) override;
/**
* Replaceable API
* @return true if it has MetaData
* @stable ICU 2.4
*/
- virtual UBool hasMetaData() const;
+ virtual UBool hasMetaData() const override;
/**
* Copy a substring of this object, retaining attribute (out-of-band)
@@ -2477,7 +2478,7 @@ public:
* dest >= limit`.
* @stable ICU 2.0
*/
- virtual void copy(int32_t start, int32_t limit, int32_t dest);
+ virtual void copy(int32_t start, int32_t limit, int32_t dest) override;
/* Search and replace operations */
@@ -2766,7 +2767,6 @@ public:
* @param options Options bit set, usually 0. See U_TITLECASE_NO_LOWERCASE,
* U_TITLECASE_NO_BREAK_ADJUSTMENT, U_TITLECASE_ADJUST_TO_CASED,
* U_TITLECASE_WHOLE_STRING, U_TITLECASE_SENTENCES.
- * @param options Options bit set, see ucasemap_open().
* @return A reference to this.
* @stable ICU 3.8
*/
@@ -3274,7 +3274,7 @@ public:
* \endcode
* @param src String using only invariant characters.
* @param textLength Length of src, or -1 if NUL-terminated.
- * @param inv Signature-distinguishing paramater, use US_INV.
+ * @param inv Signature-distinguishing parameter, use US_INV.
*
* @see US_INV
* @stable ICU 3.2
@@ -3338,7 +3338,7 @@ public:
* @see getDynamicClassID
* @stable ICU 2.6
*/
- virtual UnicodeString *clone() const;
+ virtual UnicodeString *clone() const override;
/** Destructor.
* @stable ICU 2.0
@@ -3444,7 +3444,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
//========================================
// Implementation methods
@@ -3455,21 +3455,21 @@ protected:
* Implement Replaceable::getLength() (see jitterbug 1027).
* @stable ICU 2.4
*/
- virtual int32_t getLength() const;
+ virtual int32_t getLength() const override;
/**
* The change in Replaceable to use virtual getCharAt() allows
* UnicodeString::charAt() to be inline again (see jitterbug 709).
* @stable ICU 2.4
*/
- virtual char16_t getCharAt(int32_t offset) const;
+ virtual char16_t getCharAt(int32_t offset) const override;
/**
* The change in Replaceable to use virtual getChar32At() allows
* UnicodeString::char32At() to be inline again (see jitterbug 709).
* @stable ICU 2.4
*/
- virtual UChar32 getChar32At(int32_t offset) const;
+ virtual UChar32 getChar32At(int32_t offset) const override;
private:
// For char* constructors. Could be made public.
@@ -3614,7 +3614,7 @@ private:
// turn a bogus string into an empty one
void unBogus();
- // implements assigment operator, copy constructor, and fastCopyFrom()
+ // implements assignment operator, copy constructor, and fastCopyFrom()
UnicodeString &copyFrom(const UnicodeString &src, UBool fastCopy=false);
// Copies just the fields without memory management.
@@ -3946,7 +3946,7 @@ UnicodeString::doCompare(int32_t start,
}
}
-inline UBool
+inline bool
UnicodeString::operator== (const UnicodeString& text) const
{
if(isBogus()) {
@@ -3957,7 +3957,7 @@ UnicodeString::operator== (const UnicodeString& text) const
}
}
-inline UBool
+inline bool
UnicodeString::operator!= (const UnicodeString& text) const
{ return (! operator==(text)); }
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h b/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h
index c3c57582d44..38fb8951557 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h
@@ -115,7 +115,7 @@
* unorm_normalize(UNORM_FCD) may be implemented with UNORM_NFD.
*
* For more details on FCD see the collation design document:
- * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm
+ * https://htmlpreview.github.io/?https://github.com/unicode-org/icu-docs/blob/main/design/collation/ICU_collation_design.htm
*
* ICU collation performs either NFD or FCD normalization automatically if normalization
* is turned on for the collator object.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uobject.h b/Build/source/libs/icu/icu-src/source/common/unicode/uobject.h
index eeb331ce973..25a8330f9ac 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uobject.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uobject.h
@@ -262,8 +262,8 @@ protected:
// UObject &operator=(const UObject &other) { return *this; }
// comparison operators
- virtual inline UBool operator==(const UObject &other) const { return this==&other; }
- inline UBool operator!=(const UObject &other) const { return !operator==(other); }
+ virtual inline bool operator==(const UObject &other) const { return this==&other; }
+ inline bool operator!=(const UObject &other) const { return !operator==(other); }
// clone() commented out from the base class:
// some compilers do not support co-variant return types
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/urename.h b/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
index fe59fdd893d..4605f632ea8 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
@@ -58,6 +58,11 @@
/* C exports renaming data */
+#define CreateLSTMBreakEngine U_ICU_ENTRY_POINT_RENAME(CreateLSTMBreakEngine)
+#define CreateLSTMData U_ICU_ENTRY_POINT_RENAME(CreateLSTMData)
+#define CreateLSTMDataForScript U_ICU_ENTRY_POINT_RENAME(CreateLSTMDataForScript)
+#define DeleteLSTMData U_ICU_ENTRY_POINT_RENAME(DeleteLSTMData)
+#define LSTMDataName U_ICU_ENTRY_POINT_RENAME(LSTMDataName)
#define T_CString_int64ToString U_ICU_ENTRY_POINT_RENAME(T_CString_int64ToString)
#define T_CString_integerToString U_ICU_ENTRY_POINT_RENAME(T_CString_integerToString)
#define T_CString_stringToInteger U_ICU_ENTRY_POINT_RENAME(T_CString_stringToInteger)
@@ -381,6 +386,7 @@
#define u_strcmpFold U_ICU_ENTRY_POINT_RENAME(u_strcmpFold)
#define u_strcpy U_ICU_ENTRY_POINT_RENAME(u_strcpy)
#define u_strcspn U_ICU_ENTRY_POINT_RENAME(u_strcspn)
+#define u_stringHasBinaryProperty U_ICU_ENTRY_POINT_RENAME(u_stringHasBinaryProperty)
#define u_strlen U_ICU_ENTRY_POINT_RENAME(u_strlen)
#define u_strncasecmp U_ICU_ENTRY_POINT_RENAME(u_strncasecmp)
#define u_strncat U_ICU_ENTRY_POINT_RENAME(u_strncat)
@@ -482,6 +488,7 @@
#define ubiditransform_open U_ICU_ENTRY_POINT_RENAME(ubiditransform_open)
#define ubiditransform_transform U_ICU_ENTRY_POINT_RENAME(ubiditransform_transform)
#define ublock_getCode U_ICU_ENTRY_POINT_RENAME(ublock_getCode)
+#define ubrk_clone U_ICU_ENTRY_POINT_RENAME(ubrk_clone)
#define ubrk_close U_ICU_ENTRY_POINT_RENAME(ubrk_close)
#define ubrk_countAvailable U_ICU_ENTRY_POINT_RENAME(ubrk_countAvailable)
#define ubrk_current U_ICU_ENTRY_POINT_RENAME(ubrk_current)
@@ -534,6 +541,7 @@
#define ucal_getTimeZoneDisplayName U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneDisplayName)
#define ucal_getTimeZoneID U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneID)
#define ucal_getTimeZoneIDForWindowsID U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneIDForWindowsID)
+#define ucal_getTimeZoneOffsetFromLocal U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneOffsetFromLocal)
#define ucal_getTimeZoneTransitionDate U_ICU_ENTRY_POINT_RENAME(ucal_getTimeZoneTransitionDate)
#define ucal_getType U_ICU_ENTRY_POINT_RENAME(ucal_getType)
#define ucal_getWeekendTransition U_ICU_ENTRY_POINT_RENAME(ucal_getWeekendTransition)
@@ -962,6 +970,7 @@
#define uhash_compareScriptSet U_ICU_ENTRY_POINT_RENAME(uhash_compareScriptSet)
#define uhash_compareUChars U_ICU_ENTRY_POINT_RENAME(uhash_compareUChars)
#define uhash_compareUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_compareUnicodeString)
+#define uhash_containsKey U_ICU_ENTRY_POINT_RENAME(uhash_containsKey)
#define uhash_count U_ICU_ENTRY_POINT_RENAME(uhash_count)
#define uhash_deleteHashtable U_ICU_ENTRY_POINT_RENAME(uhash_deleteHashtable)
#define uhash_deleteScriptSet U_ICU_ENTRY_POINT_RENAME(uhash_deleteScriptSet)
@@ -970,6 +979,7 @@
#define uhash_find U_ICU_ENTRY_POINT_RENAME(uhash_find)
#define uhash_get U_ICU_ENTRY_POINT_RENAME(uhash_get)
#define uhash_geti U_ICU_ENTRY_POINT_RENAME(uhash_geti)
+#define uhash_getiAndFound U_ICU_ENTRY_POINT_RENAME(uhash_getiAndFound)
#define uhash_hashCaselessUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashCaselessUnicodeString)
#define uhash_hashChars U_ICU_ENTRY_POINT_RENAME(uhash_hashChars)
#define uhash_hashIChars U_ICU_ENTRY_POINT_RENAME(uhash_hashIChars)
@@ -977,12 +987,15 @@
#define uhash_hashScriptSet U_ICU_ENTRY_POINT_RENAME(uhash_hashScriptSet)
#define uhash_hashUChars U_ICU_ENTRY_POINT_RENAME(uhash_hashUChars)
#define uhash_hashUnicodeString U_ICU_ENTRY_POINT_RENAME(uhash_hashUnicodeString)
+#define uhash_icontainsKey U_ICU_ENTRY_POINT_RENAME(uhash_icontainsKey)
#define uhash_iget U_ICU_ENTRY_POINT_RENAME(uhash_iget)
#define uhash_igeti U_ICU_ENTRY_POINT_RENAME(uhash_igeti)
+#define uhash_igetiAndFound U_ICU_ENTRY_POINT_RENAME(uhash_igetiAndFound)
#define uhash_init U_ICU_ENTRY_POINT_RENAME(uhash_init)
#define uhash_initSize U_ICU_ENTRY_POINT_RENAME(uhash_initSize)
#define uhash_iput U_ICU_ENTRY_POINT_RENAME(uhash_iput)
#define uhash_iputi U_ICU_ENTRY_POINT_RENAME(uhash_iputi)
+#define uhash_iputiAllowZero U_ICU_ENTRY_POINT_RENAME(uhash_iputiAllowZero)
#define uhash_iremove U_ICU_ENTRY_POINT_RENAME(uhash_iremove)
#define uhash_iremovei U_ICU_ENTRY_POINT_RENAME(uhash_iremovei)
#define uhash_nextElement U_ICU_ENTRY_POINT_RENAME(uhash_nextElement)
@@ -990,6 +1003,7 @@
#define uhash_openSize U_ICU_ENTRY_POINT_RENAME(uhash_openSize)
#define uhash_put U_ICU_ENTRY_POINT_RENAME(uhash_put)
#define uhash_puti U_ICU_ENTRY_POINT_RENAME(uhash_puti)
+#define uhash_putiAllowZero U_ICU_ENTRY_POINT_RENAME(uhash_putiAllowZero)
#define uhash_remove U_ICU_ENTRY_POINT_RENAME(uhash_remove)
#define uhash_removeAll U_ICU_ENTRY_POINT_RENAME(uhash_removeAll)
#define uhash_removeElement U_ICU_ENTRY_POINT_RENAME(uhash_removeElement)
@@ -1150,6 +1164,8 @@
#define ultag_isUnicodeLocaleKey U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeLocaleKey)
#define ultag_isUnicodeLocaleType U_ICU_ENTRY_POINT_RENAME(ultag_isUnicodeLocaleType)
#define ultag_isVariantSubtags U_ICU_ENTRY_POINT_RENAME(ultag_isVariantSubtags)
+#define umeas_getPrefixBase U_ICU_ENTRY_POINT_RENAME(umeas_getPrefixBase)
+#define umeas_getPrefixPower U_ICU_ENTRY_POINT_RENAME(umeas_getPrefixPower)
#define umsg_applyPattern U_ICU_ENTRY_POINT_RENAME(umsg_applyPattern)
#define umsg_autoQuoteApostrophe U_ICU_ENTRY_POINT_RENAME(umsg_autoQuoteApostrophe)
#define umsg_clone U_ICU_ENTRY_POINT_RENAME(umsg_clone)
@@ -1565,6 +1581,7 @@
#define ures_countArrayItems U_ICU_ENTRY_POINT_RENAME(ures_countArrayItems)
#define ures_findResource U_ICU_ENTRY_POINT_RENAME(ures_findResource)
#define ures_findSubResource U_ICU_ENTRY_POINT_RENAME(ures_findSubResource)
+#define ures_getAllChildrenWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllChildrenWithFallback)
#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback)
#define ures_getBinary U_ICU_ENTRY_POINT_RENAME(ures_getBinary)
#define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex)
@@ -1672,6 +1689,9 @@
#define uset_compact U_ICU_ENTRY_POINT_RENAME(uset_compact)
#define uset_complement U_ICU_ENTRY_POINT_RENAME(uset_complement)
#define uset_complementAll U_ICU_ENTRY_POINT_RENAME(uset_complementAll)
+#define uset_complementAllCodePoints U_ICU_ENTRY_POINT_RENAME(uset_complementAllCodePoints)
+#define uset_complementRange U_ICU_ENTRY_POINT_RENAME(uset_complementRange)
+#define uset_complementString U_ICU_ENTRY_POINT_RENAME(uset_complementString)
#define uset_contains U_ICU_ENTRY_POINT_RENAME(uset_contains)
#define uset_containsAll U_ICU_ENTRY_POINT_RENAME(uset_containsAll)
#define uset_containsAllCodePoints U_ICU_ENTRY_POINT_RENAME(uset_containsAllCodePoints)
@@ -1683,9 +1703,11 @@
#define uset_freeze U_ICU_ENTRY_POINT_RENAME(uset_freeze)
#define uset_getItem U_ICU_ENTRY_POINT_RENAME(uset_getItem)
#define uset_getItemCount U_ICU_ENTRY_POINT_RENAME(uset_getItemCount)
+#define uset_getRangeCount U_ICU_ENTRY_POINT_RENAME(uset_getRangeCount)
#define uset_getSerializedRange U_ICU_ENTRY_POINT_RENAME(uset_getSerializedRange)
#define uset_getSerializedRangeCount U_ICU_ENTRY_POINT_RENAME(uset_getSerializedRangeCount)
#define uset_getSerializedSet U_ICU_ENTRY_POINT_RENAME(uset_getSerializedSet)
+#define uset_hasStrings U_ICU_ENTRY_POINT_RENAME(uset_hasStrings)
#define uset_indexOf U_ICU_ENTRY_POINT_RENAME(uset_indexOf)
#define uset_isEmpty U_ICU_ENTRY_POINT_RENAME(uset_isEmpty)
#define uset_isFrozen U_ICU_ENTRY_POINT_RENAME(uset_isFrozen)
@@ -1695,12 +1717,15 @@
#define uset_openPatternOptions U_ICU_ENTRY_POINT_RENAME(uset_openPatternOptions)
#define uset_remove U_ICU_ENTRY_POINT_RENAME(uset_remove)
#define uset_removeAll U_ICU_ENTRY_POINT_RENAME(uset_removeAll)
+#define uset_removeAllCodePoints U_ICU_ENTRY_POINT_RENAME(uset_removeAllCodePoints)
#define uset_removeAllStrings U_ICU_ENTRY_POINT_RENAME(uset_removeAllStrings)
#define uset_removeRange U_ICU_ENTRY_POINT_RENAME(uset_removeRange)
#define uset_removeString U_ICU_ENTRY_POINT_RENAME(uset_removeString)
#define uset_resemblesPattern U_ICU_ENTRY_POINT_RENAME(uset_resemblesPattern)
#define uset_retain U_ICU_ENTRY_POINT_RENAME(uset_retain)
#define uset_retainAll U_ICU_ENTRY_POINT_RENAME(uset_retainAll)
+#define uset_retainAllCodePoints U_ICU_ENTRY_POINT_RENAME(uset_retainAllCodePoints)
+#define uset_retainString U_ICU_ENTRY_POINT_RENAME(uset_retainString)
#define uset_serialize U_ICU_ENTRY_POINT_RENAME(uset_serialize)
#define uset_serializedContains U_ICU_ENTRY_POINT_RENAME(uset_serializedContains)
#define uset_set U_ICU_ENTRY_POINT_RENAME(uset_set)
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ures.h b/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
index fff84043e84..a6c43f9537a 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
@@ -44,9 +44,9 @@
* locale and then ask it for individual resources.
* <P>
* Resource bundles in ICU4C are currently defined using text files which conform to the following
- * <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/bnf_rb.txt">BNF definition</a>.
+ * <a href="https://github.com/unicode-org/icu-docs/blob/main/design/bnf_rb.txt">BNF definition</a>.
* More on resource bundle concepts and syntax can be found in the
- * <a href="http://icu-project.org/userguide/ResourceManagement.html">Users Guide</a>.
+ * <a href="https://unicode-org.github.io/icu/userguide/locale/resources">Users Guide</a>.
* <P>
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h b/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h
index 8448afda761..6cb15328085 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h
@@ -484,6 +484,17 @@ typedef enum UScriptCode {
/** @stable ICU 66 */
USCRIPT_YEZIDI = 192,/* Yezi */
+ /** @stable ICU 70 */
+ USCRIPT_CYPRO_MINOAN = 193,/* Cpmn */
+ /** @stable ICU 70 */
+ USCRIPT_OLD_UYGHUR = 194,/* Ougr */
+ /** @stable ICU 70 */
+ USCRIPT_TANGSA = 195,/* Tnsa */
+ /** @stable ICU 70 */
+ USCRIPT_TOTO = 196,/* Toto */
+ /** @stable ICU 70 */
+ USCRIPT_VITHKUQI = 197,/* Vith */
+
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest normal UScriptCode value.
@@ -491,7 +502,7 @@ typedef enum UScriptCode {
*
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
- USCRIPT_CODE_LIMIT = 193
+ USCRIPT_CODE_LIMIT = 198
#endif // U_HIDE_DEPRECATED_API
} UScriptCode;
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uset.h b/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
index 502ea8dc147..2ef352ef563 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
@@ -582,8 +582,8 @@ U_CAPI void U_EXPORT2
uset_addString(USet* set, const UChar* str, int32_t strLen);
/**
- * Adds each of the characters in this string to the set. Thus "ch" => {"c", "h"}
- * If this set already any particular character, it has no effect on that character.
+ * Adds each of the characters in this string to the set. Note: "ch" => {"c", "h"}
+ * If this set already contains any particular character, it has no effect on that character.
* A frozen set will not be modified.
* @param set the object to which to add the character
* @param str the source string
@@ -628,6 +628,20 @@ uset_removeRange(USet* set, UChar32 start, UChar32 end);
U_CAPI void U_EXPORT2
uset_removeString(USet* set, const UChar* str, int32_t strLen);
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Removes EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * A frozen set will not be modified.
+ *
+ * @param set the object to be modified
+ * @param str the string
+ * @param length the length of the string, or -1 if NUL-terminated
+ * @draft ICU 69
+ */
+U_CAPI void U_EXPORT2
+uset_removeAllCodePoints(USet *set, const UChar *str, int32_t length);
+#endif // U_HIDE_DRAFT_API
+
/**
* Removes from this set all of its elements that are contained in the
* specified set. This operation effectively modifies this
@@ -650,15 +664,41 @@ uset_removeAll(USet* set, const USet* removeSet);
* A frozen set will not be modified.
*
* @param set the object for which to retain only the specified range
- * @param start first character, inclusive, of range to be retained
- * to this set.
- * @param end last character, inclusive, of range to be retained
- * to this set.
+ * @param start first character, inclusive, of range
+ * @param end last character, inclusive, of range
* @stable ICU 3.2
*/
U_CAPI void U_EXPORT2
uset_retain(USet* set, UChar32 start, UChar32 end);
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Retains only the specified string from this set if it is present.
+ * Upon return this set will be empty if it did not contain s, or
+ * will only contain s if it did contain s.
+ * A frozen set will not be modified.
+ *
+ * @param set the object to be modified
+ * @param str the string
+ * @param length the length of the string, or -1 if NUL-terminated
+ * @draft ICU 69
+ */
+U_CAPI void U_EXPORT2
+uset_retainString(USet *set, const UChar *str, int32_t length);
+
+/**
+ * Retains EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * A frozen set will not be modified.
+ *
+ * @param set the object to be modified
+ * @param str the string
+ * @param length the length of the string, or -1 if NUL-terminated
+ * @draft ICU 69
+ */
+U_CAPI void U_EXPORT2
+uset_retainAllCodePoints(USet *set, const UChar *str, int32_t length);
+#endif // U_HIDE_DRAFT_API
+
/**
* Retains only the elements in this set that are contained in the
* specified set. In other words, removes from this set all of
@@ -679,16 +719,21 @@ uset_retainAll(USet* set, const USet* retain);
* possible space, without changing this object's value.
* A frozen set will not be modified.
*
- * @param set the object on which to perfrom the compact
+ * @param set the object on which to perform the compact
* @stable ICU 3.2
*/
U_CAPI void U_EXPORT2
uset_compact(USet* set);
/**
- * Inverts this set. This operation modifies this set so that
- * its value is its complement. This operation does not affect
- * the multicharacter strings, if any.
+ * This is equivalent to
+ * <code>uset_complementRange(set, 0, 0x10FFFF)</code>.
+ *
+ * <strong>Note:</strong> This performs a symmetric difference with all code points
+ * <em>and thus retains all multicharacter strings</em>.
+ * In order to achieve a “code point complement” (all code points minus this set),
+ * the easiest is to <code>uset_complement(set); uset_removeAllStrings(set);</code>.
+ *
* A frozen set will not be modified.
* @param set the set
* @stable ICU 2.4
@@ -696,6 +741,49 @@ uset_compact(USet* set);
U_CAPI void U_EXPORT2
uset_complement(USet* set);
+#ifndef U_HIDE_DRAFT_API
+/**
+ * Complements the specified range in this set. Any character in
+ * the range will be removed if it is in this set, or will be
+ * added if it is not in this set. If <code>start > end</code>
+ * then an empty range is complemented, leaving the set unchanged.
+ * This is equivalent to a boolean logic XOR.
+ * A frozen set will not be modified.
+ *
+ * @param set the object to be modified
+ * @param start first character, inclusive, of range
+ * @param end last character, inclusive, of range
+ * @draft ICU 69
+ */
+U_CAPI void U_EXPORT2
+uset_complementRange(USet *set, UChar32 start, UChar32 end);
+
+/**
+ * Complements the specified string in this set.
+ * The string will be removed if it is in this set, or will be added if it is not in this set.
+ * A frozen set will not be modified.
+ *
+ * @param set the object to be modified
+ * @param str the string
+ * @param length the length of the string, or -1 if NUL-terminated
+ * @draft ICU 69
+ */
+U_CAPI void U_EXPORT2
+uset_complementString(USet *set, const UChar *str, int32_t length);
+
+/**
+ * Complements EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * A frozen set will not be modified.
+ *
+ * @param set the object to be modified
+ * @param str the string
+ * @param length the length of the string, or -1 if NUL-terminated
+ * @draft ICU 69
+ */
+U_CAPI void U_EXPORT2
+uset_complementAllCodePoints(USet *set, const UChar *str, int32_t length);
+#endif // U_HIDE_DRAFT_API
+
/**
* Complements in this set all elements contained in the specified
* set. Any character in the other set will be removed if it is
@@ -768,6 +856,16 @@ uset_removeAllStrings(USet* set);
U_CAPI UBool U_EXPORT2
uset_isEmpty(const USet* set);
+#ifndef U_HIDE_DRAFT_API
+/**
+ * @param set the set
+ * @return true if this set contains multi-character strings or the empty string.
+ * @draft ICU 70
+ */
+U_CAPI UBool U_EXPORT2
+uset_hasStrings(const USet *set);
+#endif // U_HIDE_DRAFT_API
+
/**
* Returns true if the given USet contains the given character.
* This function works faster with a frozen set.
@@ -818,8 +916,13 @@ uset_indexOf(const USet* set, UChar32 c);
/**
* Returns the character at the given index within this set, where
* the set is ordered by ascending code point. If the index is
- * out of range, return (UChar32)-1. The inverse of this method is
- * <code>indexOf()</code>.
+ * out of range for characters, returns (UChar32)-1.
+ * The inverse of this method is <code>indexOf()</code>.
+ *
+ * For iteration, this is slower than uset_getRangeCount()/uset_getItemCount()
+ * with uset_getItem(), because for each call it skips linearly over <code>index</code>
+ * characters in the ranges.
+ *
* @param set the set
* @param charIndex an index from 0..size()-1 to obtain the char for
* @return the character at the given index, or (UChar32)-1.
@@ -829,16 +932,34 @@ U_CAPI UChar32 U_EXPORT2
uset_charAt(const USet* set, int32_t charIndex);
/**
- * Returns the number of characters and strings contained in the given
- * USet.
+ * Returns the number of characters and strings contained in this set.
+ * The last (uset_getItemCount() - uset_getRangeCount()) items are strings.
+ *
+ * This is slower than uset_getRangeCount() and uset_getItemCount() because
+ * it counts the code points of all ranges.
+ *
* @param set the set
* @return a non-negative integer counting the characters and strings
* contained in set
* @stable ICU 2.4
+ * @see uset_getRangeCount
*/
U_CAPI int32_t U_EXPORT2
uset_size(const USet* set);
+#ifndef U_HIDE_DRAFT_API
+/**
+ * @param set the set
+ * @return the number of ranges in this set.
+ * @draft ICU 70
+ * @see uset_getItemCount
+ * @see uset_getItem
+ * @see uset_size
+ */
+U_CAPI int32_t U_EXPORT2
+uset_getRangeCount(const USet *set);
+#endif // U_HIDE_DRAFT_API
+
/**
* Returns the number of items in this set. An item is either a range
* of characters or a single multicharacter string.
@@ -852,20 +973,30 @@ uset_getItemCount(const USet* set);
/**
* Returns an item of this set. An item is either a range of
- * characters or a single multicharacter string.
+ * characters or a single multicharacter string (which can be the empty string).
+ *
+ * If <code>itemIndex</code> is less than uset_getRangeCount(), then this function returns 0,
+ * and the range is <code>*start</code>..<code>*end</code>.
+ *
+ * If <code>itemIndex</code> is at least uset_getRangeCount() and less than uset_getItemCount(), then
+ * this function copies the string into <code>str[strCapacity]</code> and
+ * returns the length of the string (0 for the empty string).
+ *
+ * If <code>itemIndex</code> is out of range, then this function returns -1.
+ *
+ * Note that 0 is returned for each range as well as for the empty string.
+ *
* @param set the set
- * @param itemIndex a non-negative integer in the range 0..
- * uset_getItemCount(set)-1
- * @param start pointer to variable to receive first character
- * in range, inclusive
- * @param end pointer to variable to receive last character in range,
- * inclusive
+ * @param itemIndex a non-negative integer in the range 0..uset_getItemCount(set)-1
+ * @param start pointer to variable to receive first character in range, inclusive;
+ * can be NULL for a string item
+ * @param end pointer to variable to receive last character in range, inclusive;
+ * can be NULL for a string item
* @param str buffer to receive the string, may be NULL
* @param strCapacity capacity of str, or 0 if str is NULL
- * @param ec error code
- * @return the length of the string (>= 2), or 0 if the item is a
- * range, in which case it is the range *start..*end, or -1 if
- * itemIndex is out of range
+ * @param ec error code; U_INDEX_OUTOFBOUNDS_ERROR if the itemIndex is out of range
+ * @return the length of the string (0 or >= 2), or 0 if the item is a range,
+ * or -1 if the itemIndex is out of range
* @stable ICU 2.4
*/
U_CAPI int32_t U_EXPORT2
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h b/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
index a817ef72b3a..5834c308e41 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
@@ -33,9 +33,7 @@ class UnicodeString;
* code points or ranges have been returned, it returns the
* multicharacter strings of the UnicodeSet, if any.
*
- * This class is not intended to be subclassed. Consider any fields
- * or methods declared as "protected" to be private. The use of
- * protected in this class is an artifact of history.
+ * This class is not intended for public subclassing.
*
* <p>To iterate over code points and strings, use a loop like this:
* <pre>
@@ -60,25 +58,23 @@ class UnicodeString;
* }
* }
* </pre>
+ *
+ * To iterate over only the strings, start with <code>skipToStrings()</code>.
+ *
* @author M. Davis
* @stable ICU 2.4
*/
-class U_COMMON_API UnicodeSetIterator : public UObject {
-
- protected:
-
+class U_COMMON_API UnicodeSetIterator U_FINAL : public UObject {
/**
* Value of <tt>codepoint</tt> if the iterator points to a string.
* If <tt>codepoint == IS_STRING</tt>, then examine
* <tt>string</tt> for the current iteration result.
- * @stable ICU 2.4
*/
enum { IS_STRING = -1 };
/**
* Current code point, or the special value <tt>IS_STRING</tt>, if
* the iterator points to a string.
- * @stable ICU 2.4
*/
UChar32 codepoint;
@@ -89,7 +85,6 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
* iterating over code points using <tt>next()</tt>, or if
* <tt>codepoint == IS_STRING</tt>, then the value of
* <tt>codepointEnd</tt> is undefined.
- * @stable ICU 2.4
*/
UChar32 codepointEnd;
@@ -97,7 +92,6 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
* If <tt>codepoint == IS_STRING</tt>, then <tt>string</tt> points
* to the current string. If <tt>codepoint != IS_STRING</tt>, the
* value of <tt>string</tt> is undefined.
- * @stable ICU 2.4
*/
const UnicodeString* string;
@@ -170,6 +164,25 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
*/
const UnicodeString& getString();
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Skips over the remaining code points/ranges, if any.
+ * A following call to next() or nextRange() will yield a string, if there is one.
+ * No-op if next() would return false, or if it would yield a string anyway.
+ *
+ * @return *this
+ * @draft ICU 70
+ * @see UnicodeSet#strings()
+ */
+ inline UnicodeSetIterator &skipToStrings() {
+ // Finish code point/range iteration.
+ range = endRange;
+ endElement = -1;
+ nextElement = 0;
+ return *this;
+ }
+#endif // U_HIDE_DRAFT_API
+
/**
* Advances the iteration position to the next element in the set,
* which can be either a single code point or a string.
@@ -242,71 +255,58 @@ class U_COMMON_API UnicodeSetIterator : public UObject {
*
* @stable ICU 2.4
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
// ======================= PRIVATES ===========================
- protected:
+private:
// endElement and nextElements are really UChar32's, but we keep
// them as signed int32_t's so we can do comparisons with
// endElement set to -1. Leave them as int32_t's.
/** The set
- * @stable ICU 2.4
*/
const UnicodeSet* set;
/** End range
- * @stable ICU 2.4
*/
int32_t endRange;
/** Range
- * @stable ICU 2.4
*/
int32_t range;
/** End element
- * @stable ICU 2.4
*/
int32_t endElement;
/** Next element
- * @stable ICU 2.4
*/
int32_t nextElement;
- //UBool abbreviated;
/** Next string
- * @stable ICU 2.4
*/
int32_t nextString;
/** String count
- * @stable ICU 2.4
*/
int32_t stringCount;
/**
* Points to the string to use when the caller asks for a
* string and the current iteration item is a code point, not a string.
- * @internal
*/
UnicodeString *cpString;
/** Copy constructor. Disallowed.
- * @stable ICU 2.4
*/
- UnicodeSetIterator(const UnicodeSetIterator&); // disallow
+ UnicodeSetIterator(const UnicodeSetIterator&) = delete;
/** Assignment operator. Disallowed.
- * @stable ICU 2.4
*/
- UnicodeSetIterator& operator=(const UnicodeSetIterator&); // disallow
+ UnicodeSetIterator& operator=(const UnicodeSetIterator&) = delete;
/** Load range
- * @stable ICU 2.4
*/
- virtual void loadRange(int32_t range);
-
+ void loadRange(int32_t range);
};
inline UBool UnicodeSetIterator::isString() const {
- return codepoint == (UChar32)IS_STRING;
+ return codepoint < 0;
}
inline UChar32 UnicodeSetIterator::getCodepoint() const {
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h b/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h
index fed4869abdb..14371edc8f9 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h
@@ -323,7 +323,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength,
#define U_SHAPE_PRESERVE_PRESENTATION 0x8000
/** Presentation form option:
* Replace Arabic Presentation Forms-A and Arabic Presentationo Forms-B with
- * their unshaped correspondants in range 0+06xx, before shaping.
+ * their unshaped correspondents in range 0+06xx, before shaping.
* @stable ICU 3.6
*/
#define U_SHAPE_PRESERVE_PRESENTATION_NOOP 0
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h b/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
index 10ea45ead1d..5452fbe09a8 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
@@ -72,7 +72,7 @@
* their occurrence is rare. Almost all characters in modern use require only
* a single UChar code unit (i.e., their code point values are <=0xffff).
*
- * For more details see the User Guide Strings chapter (http://icu-project.org/userguide/strings.html).
+ * For more details see the User Guide Strings chapter (https://unicode-org.github.io/icu/userguide/strings/).
* For a discussion of the handling of unpaired surrogates see also
* Jitterbug 2145 and its icu mailing list proposal on 2002-sep-18.
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h b/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h
index 28c313c582f..677486f4733 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h
@@ -173,24 +173,23 @@ typedef enum UTraceFunctionNumber {
UTRACE_RES_DATA_LIMIT,
#endif // U_HIDE_INTERNAL_API
-#ifndef U_HIDE_DRAFT_API
/**
* The lowest break iterator location.
- * @draft ICU 67
+ * @stable ICU 67
*/
UTRACE_UBRK_START=0x4000,
/**
* Indicates that a character instance of break iterator was created.
*
- * @draft ICU 67
+ * @stable ICU 67
*/
UTRACE_UBRK_CREATE_CHARACTER = UTRACE_UBRK_START,
/**
* Indicates that a word instance of break iterator was created.
*
- * @draft ICU 67
+ * @stable ICU 67
*/
UTRACE_UBRK_CREATE_WORD,
@@ -200,21 +199,21 @@ typedef enum UTraceFunctionNumber {
* Provides one C-style string to UTraceData: the lb value ("",
* "loose", "strict", or "normal").
*
- * @draft ICU 67
+ * @stable ICU 67
*/
UTRACE_UBRK_CREATE_LINE,
/**
* Indicates that a sentence instance of break iterator was created.
*
- * @draft ICU 67
+ * @stable ICU 67
*/
UTRACE_UBRK_CREATE_SENTENCE,
/**
* Indicates that a title instance of break iterator was created.
*
- * @draft ICU 67
+ * @stable ICU 67
*/
UTRACE_UBRK_CREATE_TITLE,
@@ -224,12 +223,10 @@ typedef enum UTraceFunctionNumber {
* Provides one C-style string to UTraceData: the script code of what
* the break engine cover ("Hani", "Khmr", "Laoo", "Mymr", or "Thai").
*
- * @draft ICU 67
+ * @stable ICU 67
*/
UTRACE_UBRK_CREATE_BREAK_ENGINE,
-#endif // U_HIDE_DRAFT_API
-
#ifndef U_HIDE_INTERNAL_API
/**
* One more than the highest normal break iterator trace location.
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h b/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h
index 7c4ea7ac28d..f890d5d1dbb 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h
@@ -400,7 +400,7 @@ typedef double UDate;
* suitable subclass.
*
* For more information, see:
- * http://icu-project.org/userguide/conventions
+ * https://unicode-org.github.io/icu/userguide/dev/codingguidelines#details-about-icu-error-codes
*
* Note: By convention, ICU functions that take a reference (C++) or a pointer
* (C) to a UErrorCode first test:
@@ -479,16 +479,14 @@ typedef enum UErrorCode {
U_COLLATOR_VERSION_MISMATCH = 28, /**< Collator version is not compatible with the base version */
U_USELESS_COLLATOR_ERROR = 29, /**< Collator is options only and no base is specified */
U_NO_WRITE_PERMISSION = 30, /**< Attempt to modify read-only or constant data. */
-#ifndef U_HIDE_DRAFT_API
/**
* The input is impractically long for an operation.
* It is rejected because it may lead to problems such as excessive
* processing time, stack depth, or heap memory requirements.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
U_INPUT_TOO_LONG_ERROR = 31,
-#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_DEPRECATED_API
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h b/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
index a46481a3fe6..42e8865d7e3 100644
--- a/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
+++ b/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
@@ -60,13 +60,13 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.4
*/
-#define U_ICU_VERSION_MAJOR_NUM 68
+#define U_ICU_VERSION_MAJOR_NUM 70
/** The current ICU minor version as an integer.
* This value will change in the subsequent releases of ICU
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_MINOR_NUM 2
+#define U_ICU_VERSION_MINOR_NUM 1
/** The current ICU patchlevel version as an integer.
* This value will change in the subsequent releases of ICU
@@ -86,7 +86,7 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_SUFFIX _68
+#define U_ICU_VERSION_SUFFIX _70
/**
* \def U_DEF2_ICU_ENTRY_POINT_RENAME
@@ -139,7 +139,7 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.4
*/
-#define U_ICU_VERSION "68.2"
+#define U_ICU_VERSION "70.1"
/**
* The current ICU library major version number as a string, for library name suffixes.
@@ -152,13 +152,13 @@
*
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_SHORT "68"
+#define U_ICU_VERSION_SHORT "70"
#ifndef U_HIDE_INTERNAL_API
/** Data version in ICU4C.
* @internal ICU 4.4 Internal Use Only
**/
-#define U_ICU_DATA_VERSION "68.2"
+#define U_ICU_DATA_VERSION "70.1"
#endif /* U_HIDE_INTERNAL_API */
/*===========================================================================
diff --git a/Build/source/libs/icu/icu-src/source/common/unifiedcache.h b/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
index a31998db206..07a734b8bd5 100644
--- a/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
+++ b/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
@@ -54,11 +54,6 @@ class U_COMMON_API CacheKeyBase : public UObject {
virtual CacheKeyBase *clone() const = 0;
/**
- * Equality operator.
- */
- virtual UBool operator == (const CacheKeyBase &other) const = 0;
-
- /**
* Create a new object for this key. Called by cache on cache miss.
* createObject must add a reference to the object it returns. Note
* that getting an object from the cache and returning it without calling
@@ -80,12 +75,19 @@ class U_COMMON_API CacheKeyBase : public UObject {
*/
virtual char *writeDescription(char *buffer, int32_t bufSize) const = 0;
- /**
- * Inequality operator.
- */
- UBool operator != (const CacheKeyBase &other) const {
- return !(*this == other);
+ friend inline bool operator==(const CacheKeyBase& lhs,
+ const CacheKeyBase& rhs) {
+ return lhs.equals(rhs);
}
+
+ friend inline bool operator!=(const CacheKeyBase& lhs,
+ const CacheKeyBase& rhs) {
+ return !lhs.equals(rhs);
+ }
+
+ protected:
+ virtual bool equals(const CacheKeyBase& other) const = 0;
+
private:
mutable UErrorCode fCreationStatus;
mutable UBool fIsPrimary;
@@ -105,7 +107,7 @@ class CacheKey : public CacheKeyBase {
/**
* The template parameter, T, determines the hash code returned.
*/
- virtual int32_t hashCode() const {
+ virtual int32_t hashCode() const override {
const char *s = typeid(T).name();
return ustr_hashCharsN(s, static_cast<int32_t>(uprv_strlen(s)));
}
@@ -113,18 +115,19 @@ class CacheKey : public CacheKeyBase {
/**
* Use the value type, T, as the description.
*/
- virtual char *writeDescription(char *buffer, int32_t bufLen) const {
+ virtual char *writeDescription(char *buffer, int32_t bufLen) const override {
const char *s = typeid(T).name();
uprv_strncpy(buffer, s, bufLen);
buffer[bufLen - 1] = 0;
return buffer;
}
+ protected:
/**
* Two objects are equal if they are of the same type.
*/
- virtual UBool operator == (const CacheKeyBase &other) const {
- return typeid(*this) == typeid(other);
+ virtual bool equals(const CacheKeyBase &other) const override {
+ return this == &other || typeid(*this) == typeid(other);
}
};
@@ -136,37 +139,34 @@ template<typename T>
class LocaleCacheKey : public CacheKey<T> {
protected:
Locale fLoc;
+ virtual bool equals(const CacheKeyBase &other) const override {
+ if (!CacheKey<T>::equals(other)) {
+ return false;
+ }
+ // We know this and other are of same class because equals() on
+ // CacheKey returned true.
+ return operator==(static_cast<const LocaleCacheKey<T> &>(other));
+ }
public:
LocaleCacheKey(const Locale &loc) : fLoc(loc) {}
LocaleCacheKey(const LocaleCacheKey<T> &other)
: CacheKey<T>(other), fLoc(other.fLoc) { }
virtual ~LocaleCacheKey() { }
- virtual int32_t hashCode() const {
+ virtual int32_t hashCode() const override {
return (int32_t)(37u * (uint32_t)CacheKey<T>::hashCode() + (uint32_t)fLoc.hashCode());
}
- virtual UBool operator == (const CacheKeyBase &other) const {
- // reflexive
- if (this == &other) {
- return true;
- }
- if (!CacheKey<T>::operator == (other)) {
- return false;
- }
- // We know this and other are of same class because operator== on
- // CacheKey returned true.
- const LocaleCacheKey<T> *fOther =
- static_cast<const LocaleCacheKey<T> *>(&other);
- return fLoc == fOther->fLoc;
+ inline bool operator == (const LocaleCacheKey<T> &other) const {
+ return fLoc == other.fLoc;
}
- virtual CacheKeyBase *clone() const {
+ virtual CacheKeyBase *clone() const override {
return new LocaleCacheKey<T>(*this);
}
virtual const T *createObject(
- const void *creationContext, UErrorCode &status) const;
+ const void *creationContext, UErrorCode &status) const override;
/**
* Use the locale id as the description.
*/
- virtual char *writeDescription(char *buffer, int32_t bufLen) const {
+ virtual char *writeDescription(char *buffer, int32_t bufLen) const override {
const char *s = fLoc.getName();
uprv_strncpy(buffer, s, bufLen);
buffer[bufLen - 1] = 0;
@@ -293,8 +293,8 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase {
void flush() const;
/**
- * Configures at what point evcition of unused entries will begin.
- * Eviction is triggered whenever the number of evictable keys exeeds
+ * Configures at what point eviction of unused entries will begin.
+ * Eviction is triggered whenever the number of evictable keys exceeds
* BOTH count AND (number of in-use items) * (percentageOfInUseItems / 100).
* Once the number of unused entries drops below one of these,
* eviction ceases. Because eviction happens incrementally,
@@ -315,7 +315,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase {
* settings.
*
* If a client already holds references to many different unique values
- * in the cache such that the number of those unique values far exeeds
+ * in the cache such that the number of those unique values far exceeds
* "count" then the cache may not be able to maintain this maximum.
* However, if this happens, the cache still guarantees that the number of
* unused entries will remain only a small percentage of the total cache
@@ -341,7 +341,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase {
*/
int32_t unusedCount() const;
- virtual void handleUnreferencedObject() const;
+ virtual void handleUnreferencedObject() const override;
virtual ~UnifiedCache();
private:
@@ -465,7 +465,7 @@ class U_COMMON_API UnifiedCache : public UnifiedCacheBase {
/**
* Register a primary cache entry. A primary key is the first key to create
* a given SharedObject value. Subsequent keys whose create function
- * produce referneces to an already existing SharedObject are not primary -
+ * produce references to an already existing SharedObject are not primary -
* they can be evicted and subsequently recreated.
*
* On entry, gCacheMutex must be held.
diff --git a/Build/source/libs/icu/icu-src/source/common/uniset.cpp b/Build/source/libs/icu/icu-src/source/common/uniset.cpp
index b73d612f246..92a81a1a02d 100644
--- a/Build/source/libs/icu/icu-src/source/common/uniset.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uniset.cpp
@@ -30,24 +30,6 @@
#include "bmpset.h"
#include "unisetspan.h"
-// Define UChar constants using hex for EBCDIC compatibility
-// Used #define to reduce private static exports and memory access time.
-#define SET_OPEN ((UChar)0x005B) /*[*/
-#define SET_CLOSE ((UChar)0x005D) /*]*/
-#define HYPHEN ((UChar)0x002D) /*-*/
-#define COMPLEMENT ((UChar)0x005E) /*^*/
-#define COLON ((UChar)0x003A) /*:*/
-#define BACKSLASH ((UChar)0x005C) /*\*/
-#define INTERSECTION ((UChar)0x0026) /*&*/
-#define UPPER_U ((UChar)0x0055) /*U*/
-#define LOWER_U ((UChar)0x0075) /*u*/
-#define OPEN_BRACE ((UChar)123) /*{*/
-#define CLOSE_BRACE ((UChar)125) /*}*/
-#define UPPER_P ((UChar)0x0050) /*P*/
-#define LOWER_P ((UChar)0x0070) /*p*/
-#define UPPER_N ((UChar)78) /*N*/
-#define EQUALS ((UChar)0x003D) /*=*/
-
// HIGH_VALUE > all valid values. 110000 for codepoints
#define UNICODESET_HIGH 0x0110000
@@ -129,7 +111,7 @@ static void U_CALLCONV cloneUnicodeString(UElement *dst, UElement *src) {
dst->pointer = new UnicodeString(*(UnicodeString*)src->pointer);
}
-static int8_t U_CALLCONV compareUnicodeString(UElement t1, UElement t2) {
+static int32_t U_CALLCONV compareUnicodeString(UElement t1, UElement t2) {
const UnicodeString &a = *(const UnicodeString*)t1.pointer;
const UnicodeString &b = *(const UnicodeString*)t2.pointer;
return a.compare(b);
@@ -296,14 +278,14 @@ UnicodeSet *UnicodeSet::cloneAsThawed() const {
* @param o set to be compared for equality with this set.
* @return <tt>true</tt> if the specified set is equal to this set.
*/
-UBool UnicodeSet::operator==(const UnicodeSet& o) const {
- if (len != o.len) return FALSE;
+bool UnicodeSet::operator==(const UnicodeSet& o) const {
+ if (len != o.len) return false;
for (int32_t i = 0; i < len; ++i) {
- if (list[i] != o.list[i]) return FALSE;
+ if (list[i] != o.list[i]) return false;
}
- if (hasStrings() != o.hasStrings()) { return FALSE; }
- if (hasStrings() && *strings != *o.strings) return FALSE;
- return TRUE;
+ if (hasStrings() != o.hasStrings()) { return false; }
+ if (hasStrings() && *strings != *o.strings) return false;
+ return true;
}
/**
@@ -444,7 +426,6 @@ UBool UnicodeSet::contains(UChar32 start, UChar32 end) const {
* @return <tt>true</tt> if this set contains the specified string
*/
UBool UnicodeSet::contains(const UnicodeString& s) const {
- if (s.length() == 0) return FALSE;
int32_t cp = getSingleCP(s);
if (cp < 0) {
return stringsContains(s);
@@ -559,11 +540,9 @@ UBool UnicodeSet::matchesIndexValue(uint8_t v) const {
if (hasStrings()) {
for (i=0; i<strings->size(); ++i) {
const UnicodeString& s = *(const UnicodeString*)strings->elementAt(i);
- //if (s.length() == 0) {
- // // Empty strings match everything
- // return TRUE;
- //}
- // assert(s.length() != 0); // We enforce this elsewhere
+ if (s.isEmpty()) {
+ continue; // skip the empty string
+ }
UChar32 c = s.char32At(0);
if ((c & 0xFF) == v) {
return TRUE;
@@ -582,9 +561,6 @@ UMatchDegree UnicodeSet::matches(const Replaceable& text,
int32_t limit,
UBool incremental) {
if (offset == limit) {
- // Strings, if any, have length != 0, so we don't worry
- // about them here. If we ever allow zero-length strings
- // we much check for them here.
if (contains(U_ETHER)) {
return incremental ? U_PARTIAL_MATCH : U_MATCH;
} else {
@@ -614,11 +590,9 @@ UMatchDegree UnicodeSet::matches(const Replaceable& text,
for (i=0; i<strings->size(); ++i) {
const UnicodeString& trial = *(const UnicodeString*)strings->elementAt(i);
-
- //if (trial.length() == 0) {
- // return U_MATCH; // null-string always matches
- //}
- // assert(trial.length() != 0); // We ensure this elsewhere
+ if (trial.isEmpty()) {
+ continue; // skip the empty string
+ }
UChar c = trial.charAt(forward ? 0 : trial.length() - 1);
@@ -971,12 +945,12 @@ UnicodeSet& UnicodeSet::add(UChar32 c) {
* present. If this set already contains the multicharacter,
* the call leaves this set unchanged.
* Thus "ch" => {"ch"}
- * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ *
* @param s the source string
* @return the modified set, for chaining
*/
UnicodeSet& UnicodeSet::add(const UnicodeString& s) {
- if (s.length() == 0 || isFrozen() || isBogus()) return *this;
+ if (isFrozen() || isBogus()) return *this;
int32_t cp = getSingleCP(s);
if (cp < 0) {
if (!stringsContains(s)) {
@@ -991,8 +965,7 @@ UnicodeSet& UnicodeSet::add(const UnicodeString& s) {
/**
* Adds the given string, in order, to 'strings'. The given string
- * must have been checked by the caller to not be empty and to not
- * already be in 'strings'.
+ * must have been checked by the caller to not already be in 'strings'.
*/
void UnicodeSet::_add(const UnicodeString& s) {
if (isFrozen() || isBogus()) {
@@ -1011,7 +984,6 @@ void UnicodeSet::_add(const UnicodeString& s) {
strings->sortedInsert(t, compareUnicodeString, ec);
if (U_FAILURE(ec)) {
setToBogus();
- delete t;
}
}
@@ -1021,16 +993,13 @@ void UnicodeSet::_add(const UnicodeString& s) {
* @param string to test
*/
int32_t UnicodeSet::getSingleCP(const UnicodeString& s) {
- //if (s.length() < 1) {
- // throw new IllegalArgumentException("Can't use zero-length strings in UnicodeSet");
- //}
- if (s.length() > 2) return -1;
- if (s.length() == 1) return s.charAt(0);
-
- // at this point, len = 2
- UChar32 cp = s.char32At(0);
- if (cp > 0xFFFF) { // is surrogate pair
- return cp;
+ int32_t sLength = s.length();
+ if (sLength == 1) return s.charAt(0);
+ if (sLength == 2) {
+ UChar32 cp = s.char32At(0);
+ if (cp > 0xFFFF) { // is surrogate pair
+ return cp;
+ }
}
return -1;
}
@@ -1150,6 +1119,26 @@ UnicodeSet& UnicodeSet::retain(UChar32 c) {
return retain(c, c);
}
+UnicodeSet& UnicodeSet::retain(const UnicodeString &s) {
+ if (isFrozen() || isBogus()) { return *this; }
+ UChar32 cp = getSingleCP(s);
+ if (cp < 0) {
+ bool isIn = stringsContains(s);
+ // Check for getRangeCount() first to avoid somewhat-expensive size()
+ // when there are single code points.
+ if (isIn && getRangeCount() == 0 && size() == 1) {
+ return *this;
+ }
+ clear();
+ if (isIn) {
+ _add(s);
+ }
+ } else {
+ retain(cp, cp);
+ }
+ return *this;
+}
+
/**
* Removes the specified range from this set if it is present.
* The set will not contain the specified range once the call
@@ -1186,7 +1175,7 @@ UnicodeSet& UnicodeSet::remove(UChar32 c) {
* @return the modified set, for chaining
*/
UnicodeSet& UnicodeSet::remove(const UnicodeString& s) {
- if (s.length() == 0 || isFrozen() || isBogus()) return *this;
+ if (isFrozen() || isBogus()) return *this;
int32_t cp = getSingleCP(s);
if (cp < 0) {
if (strings != nullptr && strings->removeElement((void*) &s)) {
@@ -1252,12 +1241,12 @@ UnicodeSet& UnicodeSet::complement(void) {
* Complement the specified string in this set.
* The set will not contain the specified string once the call
* returns.
- * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ *
* @param s the string to complement
* @return this object, for chaining
*/
UnicodeSet& UnicodeSet::complement(const UnicodeString& s) {
- if (s.length() == 0 || isFrozen() || isBogus()) return *this;
+ if (isFrozen() || isBogus()) return *this;
int32_t cp = getSingleCP(s);
if (cp < 0) {
if (stringsContains(s)) {
@@ -1978,8 +1967,7 @@ void UnicodeSet::retain(const UChar32* other, int32_t otherLen, int8_t polarity)
* Append the <code>toPattern()</code> representation of a
* string to the given <code>StringBuffer</code>.
*/
-void UnicodeSet::_appendToPat(UnicodeString& buf, const UnicodeString& s, UBool
-escapeUnprintable) {
+void UnicodeSet::_appendToPat(UnicodeString& buf, const UnicodeString& s, UBool escapeUnprintable) {
UChar32 cp;
for (int32_t i = 0; i < s.length(); i += U16_LENGTH(cp)) {
_appendToPat(buf, cp = s.char32At(i), escapeUnprintable);
@@ -1990,39 +1978,50 @@ escapeUnprintable) {
* Append the <code>toPattern()</code> representation of a
* character to the given <code>StringBuffer</code>.
*/
-void UnicodeSet::_appendToPat(UnicodeString& buf, UChar32 c, UBool
-escapeUnprintable) {
- if (escapeUnprintable && ICU_Utility::isUnprintable(c)) {
+void UnicodeSet::_appendToPat(UnicodeString& buf, UChar32 c, UBool escapeUnprintable) {
+ if (escapeUnprintable ? ICU_Utility::isUnprintable(c) : ICU_Utility::shouldAlwaysBeEscaped(c)) {
// Use hex escape notation (\uxxxx or \Uxxxxxxxx) for anything
// unprintable
- if (ICU_Utility::escapeUnprintable(buf, c)) {
- return;
- }
+ ICU_Utility::escape(buf, c);
+ return;
}
// Okay to let ':' pass through
switch (c) {
- case SET_OPEN:
- case SET_CLOSE:
- case HYPHEN:
- case COMPLEMENT:
- case INTERSECTION:
- case BACKSLASH:
- case OPEN_BRACE:
- case CLOSE_BRACE:
- case COLON:
+ case u'[':
+ case u']':
+ case u'-':
+ case u'^':
+ case u'&':
+ case u'\\':
+ case u'{':
+ case u'}':
+ case u':':
case SymbolTable::SYMBOL_REF:
- buf.append(BACKSLASH);
+ buf.append(u'\\');
break;
default:
// Escape whitespace
if (PatternProps::isWhiteSpace(c)) {
- buf.append(BACKSLASH);
+ buf.append(u'\\');
}
break;
}
buf.append(c);
}
+void UnicodeSet::_appendToPat(UnicodeString &result, UChar32 start, UChar32 end,
+ UBool escapeUnprintable) {
+ _appendToPat(result, start, escapeUnprintable);
+ if (start != end) {
+ if ((start+1) != end ||
+ // Avoid writing what looks like a lead+trail surrogate pair.
+ start == 0xdbff) {
+ result.append(u'-');
+ }
+ _appendToPat(result, end, escapeUnprintable);
+ }
+}
+
/**
* Append a string representation of this set to result. This will be
* a cleaned version of the string passed to applyPattern(), if there
@@ -2037,7 +2036,8 @@ UnicodeString& UnicodeSet::_toPattern(UnicodeString& result,
for (i=0; i<patLen; ) {
UChar32 c;
U16_NEXT(pat, i, patLen, c);
- if (escapeUnprintable && ICU_Utility::isUnprintable(c)) {
+ if (escapeUnprintable ?
+ ICU_Utility::isUnprintable(c) : ICU_Utility::shouldAlwaysBeEscaped(c)) {
// If the unprintable character is preceded by an odd
// number of backslashes, then it has been escaped.
// Before unescaping it, we delete the final
@@ -2045,11 +2045,11 @@ UnicodeString& UnicodeSet::_toPattern(UnicodeString& result,
if ((backslashCount % 2) == 1) {
result.truncate(result.length() - 1);
}
- ICU_Utility::escapeUnprintable(result, c);
+ ICU_Utility::escape(result, c);
backslashCount = 0;
} else {
result.append(c);
- if (c == BACKSLASH) {
+ if (c == u'\\') {
++backslashCount;
} else {
backslashCount = 0;
@@ -2082,68 +2082,67 @@ UnicodeString& UnicodeSet::toPattern(UnicodeString& result,
UnicodeString& UnicodeSet::_generatePattern(UnicodeString& result,
UBool escapeUnprintable) const
{
- result.append(SET_OPEN);
-
-// // Check against the predefined categories. We implicitly build
-// // up ALL category sets the first time toPattern() is called.
-// for (int8_t cat=0; cat<Unicode::GENERAL_TYPES_COUNT; ++cat) {
-// if (*this == getCategorySet(cat)) {
-// result.append(COLON);
-// result.append(CATEGORY_NAMES, cat*2, 2);
-// return result.append(CATEGORY_CLOSE);
-// }
-// }
+ result.append(u'[');
- int32_t count = getRangeCount();
+ int32_t i = 0;
+ int32_t limit = len & ~1; // = 2 * getRangeCount()
// If the set contains at least 2 intervals and includes both
// MIN_VALUE and MAX_VALUE, then the inverse representation will
// be more economical.
- if (count > 1 &&
- getRangeStart(0) == MIN_VALUE &&
- getRangeEnd(count-1) == MAX_VALUE) {
-
+ // if (getRangeCount() >= 2 &&
+ // getRangeStart(0) == MIN_VALUE &&
+ // getRangeEnd(last) == MAX_VALUE)
+ // Invariant: list[len-1] == HIGH == MAX_VALUE + 1
+ // If limit == len then len is even and the last range ends with MAX_VALUE.
+ //
+ // *But* do not write the inverse (complement) if there are strings.
+ // Since ICU 70, the '^' performs a code point complement which removes all strings.
+ if (len >= 4 && list[0] == 0 && limit == len && !hasStrings()) {
// Emit the inverse
- result.append(COMPLEMENT);
-
- for (int32_t i = 1; i < count; ++i) {
- UChar32 start = getRangeEnd(i-1)+1;
- UChar32 end = getRangeStart(i)-1;
- _appendToPat(result, start, escapeUnprintable);
- if (start != end) {
- if ((start+1) != end) {
- result.append(HYPHEN);
- }
- _appendToPat(result, end, escapeUnprintable);
+ result.append(u'^');
+ // Offsetting the inversion list index by one lets us
+ // iterate over the ranges of the set complement.
+ i = 1;
+ --limit;
+ }
+
+ // Emit the ranges as pairs.
+ while (i < limit) {
+ UChar32 start = list[i]; // getRangeStart()
+ UChar32 end = list[i + 1] - 1; // getRangeEnd() = range limit minus one
+ if (!(0xd800 <= end && end <= 0xdbff)) {
+ _appendToPat(result, start, end, escapeUnprintable);
+ i += 2;
+ } else {
+ // The range ends with a lead surrogate.
+ // Avoid writing what looks like a lead+trail surrogate pair.
+ // 1. Postpone ranges that start with a lead surrogate code point.
+ int32_t firstLead = i;
+ while ((i += 2) < limit && list[i] <= 0xdbff) {}
+ int32_t firstAfterLead = i;
+ // 2. Write following ranges that start with a trail surrogate code point.
+ while (i < limit && (start = list[i]) <= 0xdfff) {
+ _appendToPat(result, start, list[i + 1] - 1, escapeUnprintable);
+ i += 2;
}
- }
- }
-
- // Default; emit the ranges as pairs
- else {
- for (int32_t i = 0; i < count; ++i) {
- UChar32 start = getRangeStart(i);
- UChar32 end = getRangeEnd(i);
- _appendToPat(result, start, escapeUnprintable);
- if (start != end) {
- if ((start+1) != end) {
- result.append(HYPHEN);
- }
- _appendToPat(result, end, escapeUnprintable);
+ // 3. Now write the postponed ranges.
+ for (int j = firstLead; j < firstAfterLead; j += 2) {
+ _appendToPat(result, list[j], list[j + 1] - 1, escapeUnprintable);
}
}
}
if (strings != nullptr) {
for (int32_t i = 0; i<strings->size(); ++i) {
- result.append(OPEN_BRACE);
+ result.append(u'{');
_appendToPat(result,
*(const UnicodeString*) strings->elementAt(i),
escapeUnprintable);
- result.append(CLOSE_BRACE);
+ result.append(u'}');
}
}
- return result.append(SET_CLOSE);
+ return result.append(u']');
}
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/uniset_props.cpp b/Build/source/libs/icu/icu-src/source/common/uniset_props.cpp
index 37277fcb751..49d6caabc75 100644
--- a/Build/source/libs/icu/icu-src/source/common/uniset_props.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uniset_props.cpp
@@ -47,31 +47,6 @@
U_NAMESPACE_USE
-// Define UChar constants using hex for EBCDIC compatibility
-// Used #define to reduce private static exports and memory access time.
-#define SET_OPEN ((UChar)0x005B) /*[*/
-#define SET_CLOSE ((UChar)0x005D) /*]*/
-#define HYPHEN ((UChar)0x002D) /*-*/
-#define COMPLEMENT ((UChar)0x005E) /*^*/
-#define COLON ((UChar)0x003A) /*:*/
-#define BACKSLASH ((UChar)0x005C) /*\*/
-#define INTERSECTION ((UChar)0x0026) /*&*/
-#define UPPER_U ((UChar)0x0055) /*U*/
-#define LOWER_U ((UChar)0x0075) /*u*/
-#define OPEN_BRACE ((UChar)123) /*{*/
-#define CLOSE_BRACE ((UChar)125) /*}*/
-#define UPPER_P ((UChar)0x0050) /*P*/
-#define LOWER_P ((UChar)0x0070) /*p*/
-#define UPPER_N ((UChar)78) /*N*/
-#define EQUALS ((UChar)0x003D) /*=*/
-
-//static const UChar POSIX_OPEN[] = { SET_OPEN,COLON,0 }; // "[:"
-static const UChar POSIX_CLOSE[] = { COLON,SET_CLOSE,0 }; // ":]"
-//static const UChar PERL_OPEN[] = { BACKSLASH,LOWER_P,0 }; // "\\p"
-//static const UChar PERL_CLOSE[] = { CLOSE_BRACE,0 }; // "}"
-//static const UChar NAME_OPEN[] = { BACKSLASH,UPPER_N,0 }; // "\\N"
-static const UChar HYPHEN_RIGHT_BRACE[] = {HYPHEN,SET_CLOSE,0}; /*-]*/
-
// Special property set IDs
static const char ANY[] = "ANY"; // [\u0000-\U0010FFFF]
static const char ASCII[] = "ASCII"; // [\u0000-\u007F]
@@ -81,12 +56,6 @@ static const char ASSIGNED[] = "Assigned"; // [:^Cn:]
#define NAME_PROP "na"
#define NAME_PROP_LENGTH 2
-/**
- * Delimiter string used in patterns to close a category reference:
- * ":]". Example: "[:Lu:]".
- */
-//static const UChar CATEGORY_CLOSE[] = {COLON, SET_CLOSE, 0x0000}; /* ":]" */
-
// Cached sets ------------------------------------------------------------- ***
U_CDECL_BEGIN
@@ -140,27 +109,27 @@ uniset_getUnicode32Instance(UErrorCode &errorCode) {
static inline UBool
isPerlOpen(const UnicodeString &pattern, int32_t pos) {
UChar c;
- return pattern.charAt(pos)==BACKSLASH && ((c=pattern.charAt(pos+1))==LOWER_P || c==UPPER_P);
+ return pattern.charAt(pos)==u'\\' && ((c=pattern.charAt(pos+1))==u'p' || c==u'P');
}
/*static inline UBool
isPerlClose(const UnicodeString &pattern, int32_t pos) {
- return pattern.charAt(pos)==CLOSE_BRACE;
+ return pattern.charAt(pos)==u'}';
}*/
static inline UBool
isNameOpen(const UnicodeString &pattern, int32_t pos) {
- return pattern.charAt(pos)==BACKSLASH && pattern.charAt(pos+1)==UPPER_N;
+ return pattern.charAt(pos)==u'\\' && pattern.charAt(pos+1)==u'N';
}
static inline UBool
isPOSIXOpen(const UnicodeString &pattern, int32_t pos) {
- return pattern.charAt(pos)==SET_OPEN && pattern.charAt(pos+1)==COLON;
+ return pattern.charAt(pos)==u'[' && pattern.charAt(pos+1)==u':';
}
/*static inline UBool
isPOSIXClose(const UnicodeString &pattern, int32_t pos) {
- return pattern.charAt(pos)==COLON && pattern.charAt(pos+1)==SET_CLOSE;
+ return pattern.charAt(pos)==u':' && pattern.charAt(pos+1)==u']';
}*/
// TODO memory debugging provided inside uniset.cpp
@@ -326,9 +295,8 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
while (mode != 2 && !chars.atEnd()) {
U_ASSERT((lastItem == 0 && op == 0) ||
- (lastItem == 1 && (op == 0 || op == HYPHEN /*'-'*/)) ||
- (lastItem == 2 && (op == 0 || op == HYPHEN /*'-'*/ ||
- op == INTERSECTION /*'&'*/)));
+ (lastItem == 1 && (op == 0 || op == u'-')) ||
+ (lastItem == 2 && (op == 0 || op == u'-' || op == u'&')));
UChar32 c = 0;
UBool literal = FALSE;
@@ -356,27 +324,27 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
c = chars.next(opts, literal, ec);
if (U_FAILURE(ec)) return;
- if (c == 0x5B /*'['*/ && !literal) {
+ if (c == u'[' && !literal) {
if (mode == 1) {
chars.setPos(backup); // backup
setMode = 1;
} else {
// Handle opening '[' delimiter
mode = 1;
- patLocal.append((UChar) 0x5B /*'['*/);
+ patLocal.append(u'[');
chars.getPos(backup); // prepare to backup
c = chars.next(opts, literal, ec);
if (U_FAILURE(ec)) return;
- if (c == 0x5E /*'^'*/ && !literal) {
+ if (c == u'^' && !literal) {
invert = TRUE;
- patLocal.append((UChar) 0x5E /*'^'*/);
+ patLocal.append(u'^');
chars.getPos(backup); // prepare to backup
c = chars.next(opts, literal, ec);
if (U_FAILURE(ec)) return;
}
// Fall through to handle special leading '-';
// otherwise restart loop for nested [], \p{}, etc.
- if (c == HYPHEN /*'-'*/) {
+ if (c == u'-') {
literal = TRUE;
// Fall through to handle literal '-' below
} else {
@@ -418,7 +386,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
op = 0;
}
- if (op == HYPHEN /*'-'*/ || op == INTERSECTION /*'&'*/) {
+ if (op == u'-' || op == u'&') {
patLocal.append(op);
}
@@ -454,10 +422,10 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
}
switch (op) {
- case HYPHEN: /*'-'*/
+ case u'-':
removeAll(*nested);
break;
- case INTERSECTION: /*'&'*/
+ case u'&':
retainAll(*nested);
break;
case 0:
@@ -483,24 +451,24 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
if (!literal) {
switch (c) {
- case 0x5D /*']'*/:
+ case u']':
if (lastItem == 1) {
add(lastChar, lastChar);
_appendToPat(patLocal, lastChar, FALSE);
}
// Treat final trailing '-' as a literal
- if (op == HYPHEN /*'-'*/) {
+ if (op == u'-') {
add(op, op);
patLocal.append(op);
- } else if (op == INTERSECTION /*'&'*/) {
+ } else if (op == u'&') {
// syntaxError(chars, "Trailing '&'");
ec = U_MALFORMED_SET;
return;
}
- patLocal.append((UChar) 0x5D /*']'*/);
+ patLocal.append(u']');
mode = 2;
continue;
- case HYPHEN /*'-'*/:
+ case u'-':
if (op == 0) {
if (lastItem != 0) {
op = (UChar) c;
@@ -510,8 +478,8 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
add(c, c);
c = chars.next(opts, literal, ec);
if (U_FAILURE(ec)) return;
- if (c == 0x5D /*']'*/ && !literal) {
- patLocal.append(HYPHEN_RIGHT_BRACE, 2);
+ if (c == u']' && !literal) {
+ patLocal.append(u"-]", 2);
mode = 2;
continue;
}
@@ -520,7 +488,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
// syntaxError(chars, "'-' not after char or set");
ec = U_MALFORMED_SET;
return;
- case INTERSECTION /*'&'*/:
+ case u'&':
if (lastItem == 2 && op == 0) {
op = (UChar) c;
continue;
@@ -528,11 +496,11 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
// syntaxError(chars, "'&' not after set");
ec = U_MALFORMED_SET;
return;
- case 0x5E /*'^'*/:
+ case u'^':
// syntaxError(chars, "'^' not after '['");
ec = U_MALFORMED_SET;
return;
- case 0x7B /*'{'*/:
+ case u'{':
if (op != 0) {
// syntaxError(chars, "Missing operand after operator");
ec = U_MALFORMED_SET;
@@ -549,13 +517,13 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
while (!chars.atEnd()) {
c = chars.next(opts, literal, ec);
if (U_FAILURE(ec)) return;
- if (c == 0x7D /*'}'*/ && !literal) {
+ if (c == u'}' && !literal) {
ok = TRUE;
break;
}
buf.append(c);
}
- if (buf.length() < 1 || !ok) {
+ if (!ok) {
// syntaxError(chars, "Invalid multicharacter string");
ec = U_MALFORMED_SET;
return;
@@ -565,9 +533,9 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
// we don't need to drop through to the further
// processing
add(buf);
- patLocal.append((UChar) 0x7B /*'{'*/);
+ patLocal.append(u'{');
_appendToPat(patLocal, buf, FALSE);
- patLocal.append((UChar) 0x7D /*'}'*/);
+ patLocal.append(u'}');
continue;
case SymbolTable::SYMBOL_REF:
// symbols nosymbols
@@ -580,7 +548,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
chars.getPos(backup);
c = chars.next(opts, literal, ec);
if (U_FAILURE(ec)) return;
- UBool anchor = (c == 0x5D /*']'*/ && !literal);
+ UBool anchor = (c == u']' && !literal);
if (symbols == 0 && !anchor) {
c = SymbolTable::SYMBOL_REF;
chars.setPos(backup);
@@ -594,7 +562,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
add(U_ETHER);
usePat = TRUE;
patLocal.append((UChar) SymbolTable::SYMBOL_REF);
- patLocal.append((UChar) 0x5D /*']'*/);
+ patLocal.append(u']');
mode = 2;
continue;
}
@@ -617,7 +585,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
lastChar = c;
break;
case 1:
- if (op == HYPHEN /*'-'*/) {
+ if (op == u'-') {
if (lastChar >= c) {
// Don't allow redundant (a-a) or empty (b-a) ranges;
// these are most likely typos.
@@ -670,7 +638,7 @@ void UnicodeSet::applyPattern(RuleCharacterIterator& chars,
(this->*caseClosure)(USET_ADD_CASE_MAPPINGS);
}
if (invert) {
- complement();
+ complement().removeAllStrings(); // code point complement
}
// Use the rebuilt pattern (patLocal) only if necessary. Prefer the
@@ -823,7 +791,7 @@ UnicodeSet::applyIntPropertyValue(UProperty prop, int32_t value, UErrorCode& ec)
if (U_FAILURE(ec)) { return *this; }
copyFrom(*UnicodeSet::fromUSet(set), TRUE);
if (value == 0) {
- complement();
+ complement().removeAllStrings(); // code point complement
}
} else {
clear();
@@ -990,7 +958,7 @@ UnicodeSet::applyPropertyAlias(const UnicodeString& prop,
applyIntPropertyValue(p, v, ec);
if(invert) {
- complement();
+ complement().removeAllStrings(); // code point complement
}
if (isBogus() && U_SUCCESS(ec)) {
@@ -1036,11 +1004,11 @@ UBool UnicodeSet::resemblesPropertyPattern(RuleCharacterIterator& chars,
RuleCharacterIterator::Pos pos;
chars.getPos(pos);
UChar32 c = chars.next(iterOpts, literal, ec);
- if (c == 0x5B /*'['*/ || c == 0x5C /*'\\'*/) {
+ if (c == u'[' || c == u'\\') {
UChar32 d = chars.next(iterOpts & ~RuleCharacterIterator::SKIP_WHITESPACE,
literal, ec);
- result = (c == 0x5B /*'['*/) ? (d == 0x3A /*':'*/) :
- (d == 0x4E /*'N'*/ || d == 0x70 /*'p'*/ || d == 0x50 /*'P'*/);
+ result = (c == u'[') ? (d == u':') :
+ (d == u'N' || d == u'p' || d == u'P');
}
chars.setPos(pos);
return result && U_SUCCESS(ec);
@@ -1071,17 +1039,17 @@ UnicodeSet& UnicodeSet::applyPropertyPattern(const UnicodeString& pattern,
posix = TRUE;
pos += 2;
pos = ICU_Utility::skipWhitespace(pattern, pos);
- if (pos < pattern.length() && pattern.charAt(pos) == COMPLEMENT) {
+ if (pos < pattern.length() && pattern.charAt(pos) == u'^') {
++pos;
invert = TRUE;
}
} else if (isPerlOpen(pattern, pos) || isNameOpen(pattern, pos)) {
UChar c = pattern.charAt(pos+1);
- invert = (c == UPPER_P);
- isName = (c == UPPER_N);
+ invert = (c == u'P');
+ isName = (c == u'N');
pos += 2;
pos = ICU_Utility::skipWhitespace(pattern, pos);
- if (pos == pattern.length() || pattern.charAt(pos++) != OPEN_BRACE) {
+ if (pos == pattern.length() || pattern.charAt(pos++) != u'{') {
// Syntax error; "\p" or "\P" not followed by "{"
FAIL(ec);
}
@@ -1093,9 +1061,9 @@ UnicodeSet& UnicodeSet::applyPropertyPattern(const UnicodeString& pattern,
// Look for the matching close delimiter, either :] or }
int32_t close;
if (posix) {
- close = pattern.indexOf(POSIX_CLOSE, 2, pos);
+ close = pattern.indexOf(u":]", 2, pos);
} else {
- close = pattern.indexOf(CLOSE_BRACE, pos);
+ close = pattern.indexOf(u'}', pos);
}
if (close < 0) {
// Syntax error; close delimiter missing
@@ -1105,7 +1073,7 @@ UnicodeSet& UnicodeSet::applyPropertyPattern(const UnicodeString& pattern,
// Look for an '=' sign. If this is present, we will parse a
// medium \p{gc=Cf} or long \p{GeneralCategory=Format}
// pattern.
- int32_t equals = pattern.indexOf(EQUALS, pos);
+ int32_t equals = pattern.indexOf(u'=', pos);
UnicodeString propName, valueName;
if (equals >= 0 && equals < close && !isName) {
// Equals seen; parse medium/long pattern
@@ -1133,9 +1101,9 @@ UnicodeSet& UnicodeSet::applyPropertyPattern(const UnicodeString& pattern,
if (U_SUCCESS(ec)) {
if (invert) {
- complement();
+ complement().removeAllStrings(); // code point complement
}
-
+
// Move to the limit position after the close delimiter if the
// parse succeeded.
ppos.setIndex(close + (posix ? 2 : 1));
diff --git a/Build/source/libs/icu/icu-src/source/common/unisetspan.cpp b/Build/source/libs/icu/icu-src/source/common/unisetspan.cpp
index 68e44d91ee7..fe0d74f5b28 100644
--- a/Build/source/libs/icu/icu-src/source/common/unisetspan.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/unisetspan.cpp
@@ -231,6 +231,9 @@ UnicodeSetStringSpan::UnicodeSetStringSpan(const UnicodeSet &set,
const UnicodeString &string=*(const UnicodeString *)strings.elementAt(i);
const UChar *s16=string.getBuffer();
int32_t length16=string.length();
+ if (length16==0) {
+ continue; // skip the empty string
+ }
UBool thisRelevant;
spanLength=spanSet.span(s16, length16, USET_SPAN_CONTAINED);
if(spanLength<length16) { // Relevant string.
@@ -312,7 +315,7 @@ UnicodeSetStringSpan::UnicodeSetStringSpan(const UnicodeSet &set,
const UChar *s16=string.getBuffer();
int32_t length16=string.length();
spanLength=spanSet.span(s16, length16, USET_SPAN_CONTAINED);
- if(spanLength<length16) { // Relevant string.
+ if(spanLength<length16 && length16>0) { // Relevant string.
if(which&UTF16) {
if(which&CONTAINED) {
if(which&FWD) {
@@ -362,7 +365,7 @@ UnicodeSetStringSpan::UnicodeSetStringSpan(const UnicodeSet &set,
addToSpanNotSet(c);
}
}
- } else { // Irrelevant string.
+ } else { // Irrelevant string. (Also the empty string.)
if(which&UTF8) {
if(which&CONTAINED) { // Only necessary for LONGEST_MATCH.
uint8_t *s8=utf8+utf8Count;
@@ -653,11 +656,12 @@ int32_t UnicodeSetStringSpan::span(const UChar *s, int32_t length, USetSpanCondi
for(i=0; i<stringsLength; ++i) {
int32_t overlap=spanLengths[i];
if(overlap==ALL_CP_CONTAINED) {
- continue; // Irrelevant string.
+ continue; // Irrelevant string. (Also the empty string.)
}
const UnicodeString &string=*(const UnicodeString *)strings.elementAt(i);
const UChar *s16=string.getBuffer();
int32_t length16=string.length();
+ U_ASSERT(length>0);
// Try to match this string at pos-overlap..pos.
if(overlap>=LONG_SPAN) {
@@ -697,6 +701,9 @@ int32_t UnicodeSetStringSpan::span(const UChar *s, int32_t length, USetSpanCondi
const UnicodeString &string=*(const UnicodeString *)strings.elementAt(i);
const UChar *s16=string.getBuffer();
int32_t length16=string.length();
+ if (length16==0) {
+ continue; // skip the empty string
+ }
// Try to match this string at pos-overlap..pos.
if(overlap>=LONG_SPAN) {
@@ -817,11 +824,12 @@ int32_t UnicodeSetStringSpan::spanBack(const UChar *s, int32_t length, USetSpanC
for(i=0; i<stringsLength; ++i) {
int32_t overlap=spanBackLengths[i];
if(overlap==ALL_CP_CONTAINED) {
- continue; // Irrelevant string.
+ continue; // Irrelevant string. (Also the empty string.)
}
const UnicodeString &string=*(const UnicodeString *)strings.elementAt(i);
const UChar *s16=string.getBuffer();
int32_t length16=string.length();
+ U_ASSERT(length>0);
// Try to match this string at pos-(length16-overlap)..pos-length16.
if(overlap>=LONG_SPAN) {
@@ -863,6 +871,9 @@ int32_t UnicodeSetStringSpan::spanBack(const UChar *s, int32_t length, USetSpanC
const UnicodeString &string=*(const UnicodeString *)strings.elementAt(i);
const UChar *s16=string.getBuffer();
int32_t length16=string.length();
+ if (length16==0) {
+ continue; // skip the empty string
+ }
// Try to match this string at pos-(length16-overlap)..pos-length16.
if(overlap>=LONG_SPAN) {
@@ -1358,11 +1369,12 @@ int32_t UnicodeSetStringSpan::spanNot(const UChar *s, int32_t length) const {
// Try to match the strings at pos.
for(i=0; i<stringsLength; ++i) {
if(spanLengths[i]==ALL_CP_CONTAINED) {
- continue; // Irrelevant string.
+ continue; // Irrelevant string. (Also the empty string.)
}
const UnicodeString &string=*(const UnicodeString *)strings.elementAt(i);
const UChar *s16=string.getBuffer();
int32_t length16=string.length();
+ U_ASSERT(length>0);
if(length16<=rest && matches16CPB(s, pos, length, s16, length16)) {
return pos; // There is a set element at pos.
}
@@ -1401,11 +1413,12 @@ int32_t UnicodeSetStringSpan::spanNotBack(const UChar *s, int32_t length) const
// it is easier and we only need to know whether the string is irrelevant
// which is the same in either array.
if(spanLengths[i]==ALL_CP_CONTAINED) {
- continue; // Irrelevant string.
+ continue; // Irrelevant string. (Also the empty string.)
}
const UnicodeString &string=*(const UnicodeString *)strings.elementAt(i);
const UChar *s16=string.getBuffer();
int32_t length16=string.length();
+ U_ASSERT(length>0);
if(length16<=pos && matches16CPB(s, pos-length16, length, s16, length16)) {
return pos; // There is a set element at pos.
}
diff --git a/Build/source/libs/icu/icu-src/source/common/uprops.cpp b/Build/source/libs/icu/icu-src/source/common/uprops.cpp
index 1604ad9a179..5186a0c75ca 100644
--- a/Build/source/libs/icu/icu-src/source/common/uprops.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uprops.cpp
@@ -30,7 +30,9 @@
#include "unicode/unorm2.h"
#include "unicode/uscript.h"
#include "unicode/ustring.h"
+#include "unicode/utf16.h"
#include "cstring.h"
+#include "emojiprops.h"
#include "mutex.h"
#include "normalizer2impl.h"
#include "umutex.h"
@@ -322,6 +324,10 @@ static UBool isRegionalIndicator(const BinaryProperty &/*prop*/, UChar32 c, UPro
return 0x1F1E6<=c && c<=0x1F1FF;
}
+static UBool hasEmojiProperty(const BinaryProperty &/*prop*/, UChar32 c, UProperty which) {
+ return EmojiProps::hasBinaryProperty(c, which);
+}
+
static const BinaryProperty binProps[UCHAR_BINARY_LIMIT]={
/*
* column and mask values for binary properties from u_getUnicodeProperties().
@@ -388,14 +394,21 @@ static const BinaryProperty binProps[UCHAR_BINARY_LIMIT]={
{ UPROPS_SRC_CASE_AND_NORM, 0, changesWhenCasefolded },
{ UPROPS_SRC_CASE, 0, caseBinaryPropertyContains }, // UCHAR_CHANGES_WHEN_CASEMAPPED
{ UPROPS_SRC_NFKC_CF, 0, changesWhenNFKC_Casefolded },
- { 2, U_MASK(UPROPS_2_EMOJI), defaultContains },
- { 2, U_MASK(UPROPS_2_EMOJI_PRESENTATION), defaultContains },
- { 2, U_MASK(UPROPS_2_EMOJI_MODIFIER), defaultContains },
- { 2, U_MASK(UPROPS_2_EMOJI_MODIFIER_BASE), defaultContains },
- { 2, U_MASK(UPROPS_2_EMOJI_COMPONENT), defaultContains },
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_EMOJI
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_EMOJI_PRESENTATION
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_EMOJI_MODIFIER
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_EMOJI_MODIFIER_BASE
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_EMOJI_COMPONENT
{ 2, 0, isRegionalIndicator },
{ 1, U_MASK(UPROPS_PREPENDED_CONCATENATION_MARK), defaultContains },
- { 2, U_MASK(UPROPS_2_EXTENDED_PICTOGRAPHIC), defaultContains },
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_EXTENDED_PICTOGRAPHIC
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_BASIC_EMOJI
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_EMOJI_KEYCAP_SEQUENCE
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_RGI_EMOJI_FLAG_SEQUENCE
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_RGI_EMOJI_TAG_SEQUENCE
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_RGI_EMOJI_ZWJ_SEQUENCE
+ { UPROPS_SRC_EMOJI, 0, hasEmojiProperty }, // UCHAR_RGI_EMOJI
};
U_CAPI UBool U_EXPORT2
@@ -410,6 +423,26 @@ u_hasBinaryProperty(UChar32 c, UProperty which) {
}
}
+U_CAPI UBool U_EXPORT2
+u_stringHasBinaryProperty(const UChar *s, int32_t length, UProperty which) {
+ if (s == nullptr && length != 0) { return false; }
+ if (length == 1) {
+ return u_hasBinaryProperty(s[0], which); // single code point
+ } else if (length == 2 || (length < 0 && *s != 0)) { // not empty string
+ // first code point
+ int32_t i = 0;
+ UChar32 c;
+ U16_NEXT(s, i, length, c);
+ if (length > 0 ? i == length : s[i] == 0) {
+ return u_hasBinaryProperty(c, which); // single code point
+ }
+ }
+ // Only call into EmojiProps for a relevant property,
+ // so that we not unnecessarily try to load its data file.
+ return UCHAR_BASIC_EMOJI <= which && which <= UCHAR_RGI_EMOJI &&
+ EmojiProps::hasBinaryProperty(s, length, which);
+}
+
struct IntProperty;
typedef int32_t IntPropertyGetValue(const IntProperty &prop, UChar32 c, UProperty which);
diff --git a/Build/source/libs/icu/icu-src/source/common/uprops.h b/Build/source/libs/icu/icu-src/source/common/uprops.h
index 8bf929919f2..2004394db64 100644
--- a/Build/source/libs/icu/icu-src/source/common/uprops.h
+++ b/Build/source/libs/icu/icu-src/source/common/uprops.h
@@ -224,7 +224,8 @@ enum {
/*
* Properties in vector word 2
* Bits
- * 31..26 http://www.unicode.org/reports/tr51/#Emoji_Properties
+ * 31..26 unused since ICU 70 added uemoji.icu;
+ * in ICU 57..69 stored emoji properties
* 25..20 Line Break
* 19..15 Sentence Break
* 14..10 Word Break
@@ -232,12 +233,12 @@ enum {
* 4.. 0 Decomposition Type
*/
enum {
- UPROPS_2_EXTENDED_PICTOGRAPHIC=26,
- UPROPS_2_EMOJI_COMPONENT,
- UPROPS_2_EMOJI,
- UPROPS_2_EMOJI_PRESENTATION,
- UPROPS_2_EMOJI_MODIFIER,
- UPROPS_2_EMOJI_MODIFIER_BASE
+ UPROPS_2_UNUSED_WAS_EXTENDED_PICTOGRAPHIC=26, // ICU 62..69
+ UPROPS_2_UNUSED_WAS_EMOJI_COMPONENT, // ICU 60..69
+ UPROPS_2_UNUSED_WAS_EMOJI, // ICU 57..69
+ UPROPS_2_UNUSED_WAS_EMOJI_PRESENTATION, // ICU 57..69
+ UPROPS_2_UNUSED_WAS_EMOJI_MODIFIER, // ICU 57..69
+ UPROPS_2_UNUSED_WAS_EMOJI_MODIFIER_BASE // ICU 57..69
};
#define UPROPS_LB_MASK 0x03f00000
@@ -310,55 +311,12 @@ u_isgraphPOSIX(UChar32 c);
U_CFUNC UBool
u_isprintPOSIX(UChar32 c);
-/** Turn a bit index into a bit flag. @internal */
-#define FLAG(n) ((uint32_t)1<<(n))
-
-/** Flags for general categories in the order of UCharCategory. @internal */
-#define _Cn FLAG(U_GENERAL_OTHER_TYPES)
-#define _Lu FLAG(U_UPPERCASE_LETTER)
-#define _Ll FLAG(U_LOWERCASE_LETTER)
-#define _Lt FLAG(U_TITLECASE_LETTER)
-#define _Lm FLAG(U_MODIFIER_LETTER)
-/* #define _Lo FLAG(U_OTHER_LETTER) -- conflicts with MS Visual Studio 9.0 xiosbase */
-#define _Mn FLAG(U_NON_SPACING_MARK)
-#define _Me FLAG(U_ENCLOSING_MARK)
-#define _Mc FLAG(U_COMBINING_SPACING_MARK)
-#define _Nd FLAG(U_DECIMAL_DIGIT_NUMBER)
-#define _Nl FLAG(U_LETTER_NUMBER)
-#define _No FLAG(U_OTHER_NUMBER)
-#define _Zs FLAG(U_SPACE_SEPARATOR)
-#define _Zl FLAG(U_LINE_SEPARATOR)
-#define _Zp FLAG(U_PARAGRAPH_SEPARATOR)
-#define _Cc FLAG(U_CONTROL_CHAR)
-#define _Cf FLAG(U_FORMAT_CHAR)
-#define _Co FLAG(U_PRIVATE_USE_CHAR)
-#define _Cs FLAG(U_SURROGATE)
-#define _Pd FLAG(U_DASH_PUNCTUATION)
-#define _Ps FLAG(U_START_PUNCTUATION)
-/* #define _Pe FLAG(U_END_PUNCTUATION) -- conflicts with MS Visual Studio 9.0 xlocnum */
-/* #define _Pc FLAG(U_CONNECTOR_PUNCTUATION) -- conflicts with MS Visual Studio 9.0 streambuf */
-#define _Po FLAG(U_OTHER_PUNCTUATION)
-#define _Sm FLAG(U_MATH_SYMBOL)
-#define _Sc FLAG(U_CURRENCY_SYMBOL)
-#define _Sk FLAG(U_MODIFIER_SYMBOL)
-#define _So FLAG(U_OTHER_SYMBOL)
-#define _Pi FLAG(U_INITIAL_PUNCTUATION)
-/* #define _Pf FLAG(U_FINAL_PUNCTUATION) -- conflicts with MS Visual Studio 9.0 streambuf */
-
/** Some code points. @internal */
enum {
TAB =0x0009,
LF =0x000a,
FF =0x000c,
CR =0x000d,
- U_A =0x0041,
- U_F =0x0046,
- U_Z =0x005a,
- U_a =0x0061,
- U_f =0x0066,
- U_z =0x007a,
- DEL =0x007f,
- NL =0x0085,
NBSP =0x00a0,
CGJ =0x034f,
FIGURESP=0x2007,
@@ -367,15 +325,6 @@ enum {
ZWJ =0x200d,
RLM =0x200f,
NNBSP =0x202f,
- WJ =0x2060,
- INHSWAP =0x206a,
- NOMDIG =0x206f,
- U_FW_A =0xff21,
- U_FW_F =0xff26,
- U_FW_Z =0xff3a,
- U_FW_a =0xff41,
- U_FW_f =0xff46,
- U_FW_z =0xff5a,
ZWNBSP =0xfeff
};
@@ -429,6 +378,7 @@ enum UPropertySource {
UPROPS_SRC_INPC,
UPROPS_SRC_INSC,
UPROPS_SRC_VO,
+ UPROPS_SRC_EMOJI,
/** One more than the highest UPropertySource (UPROPS_SRC_) constant. */
UPROPS_SRC_COUNT
};
diff --git a/Build/source/libs/icu/icu-src/source/common/uresbund.cpp b/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
index 2ece87897d7..a9c6459418c 100644
--- a/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
@@ -92,6 +92,15 @@ static UBool chopLocale(char *name) {
}
/**
+ * Called to check whether a name without '_' needs to be checked for a parent.
+ * Some code had assumed that locale IDs with '_' could not have a non-root parent.
+ * We may want a better way of doing this.
+ */
+static UBool mayHaveParent(char *name) {
+ return (name[0] != 0 && uprv_strstr("nb nn",name) != nullptr);
+}
+
+/**
* Internal function
*/
static void entryIncrease(UResourceDataEntry *entry) {
@@ -104,47 +113,49 @@ static void entryIncrease(UResourceDataEntry *entry) {
}
/**
- * Internal function. Tries to find a resource in given Resource
+ * Internal function. Tries to find a resource in given Resource
* Bundle, as well as in its parents
*/
-static const ResourceData *getFallbackData(const UResourceBundle* resBundle, const char* * resTag, UResourceDataEntry* *realData, Resource *res, UErrorCode *status) {
- UResourceDataEntry *resB = resBundle->fData;
+static UResourceDataEntry *getFallbackData(
+ const UResourceBundle *resBundle,
+ const char **resTag, Resource *res, UErrorCode *status) {
+ UResourceDataEntry *dataEntry = resBundle->fData;
int32_t indexR = -1;
int32_t i = 0;
*res = RES_BOGUS;
- if(resB != NULL) {
- if(resB->fBogus == U_ZERO_ERROR) { /* if this resource is real, */
- *res = res_getTableItemByKey(&(resB->fData), resB->fData.rootRes, &indexR, resTag); /* try to get data from there */
- i++;
- }
- if(resBundle->fHasFallback == TRUE) {
- while(*res == RES_BOGUS && resB->fParent != NULL) { /* Otherwise, we'll look in parents */
- resB = resB->fParent;
- if(resB->fBogus == U_ZERO_ERROR) {
- i++;
- *res = res_getTableItemByKey(&(resB->fData), resB->fData.rootRes, &indexR, resTag);
- }
+ if(dataEntry == nullptr) {
+ *status = U_MISSING_RESOURCE_ERROR;
+ return nullptr;
+ }
+ if(dataEntry->fBogus == U_ZERO_ERROR) { /* if this resource is real, */
+ *res = res_getTableItemByKey(&(dataEntry->fData), dataEntry->fData.rootRes, &indexR, resTag); /* try to get data from there */
+ i++;
+ }
+ if(resBundle->fHasFallback) {
+ // Otherwise, we'll look in parents.
+ while(*res == RES_BOGUS && dataEntry->fParent != nullptr) {
+ dataEntry = dataEntry->fParent;
+ if(dataEntry->fBogus == U_ZERO_ERROR) {
+ i++;
+ *res = res_getTableItemByKey(&(dataEntry->fData), dataEntry->fData.rootRes, &indexR, resTag);
}
}
+ }
- if(*res != RES_BOGUS) { /* If the resource is found in parents, we need to adjust the error */
- if(i>1) {
- if(uprv_strcmp(resB->fName, uloc_getDefault())==0 || uprv_strcmp(resB->fName, kRootLocaleName)==0) {
- *status = U_USING_DEFAULT_WARNING;
- } else {
- *status = U_USING_FALLBACK_WARNING;
- }
- }
- *realData = resB;
- return (&(resB->fData));
- } else { /* If resource is not found, we need to give an error */
- *status = U_MISSING_RESOURCE_ERROR;
- return NULL;
+ if(*res == RES_BOGUS) {
+ // If the resource is not found, we need to give an error.
+ *status = U_MISSING_RESOURCE_ERROR;
+ return nullptr;
+ }
+ // If the resource is found in parents, we need to adjust the error.
+ if(i>1) {
+ if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
+ *status = U_USING_DEFAULT_WARNING;
+ } else {
+ *status = U_USING_FALLBACK_WARNING;
}
- } else {
- *status = U_MISSING_RESOURCE_ERROR;
- return NULL;
}
+ return dataEntry;
}
static void
@@ -452,11 +463,10 @@ getPoolEntry(const char *path, UErrorCode *status) {
/* INTERNAL: */
/* CAUTION: resbMutex must be locked when calling this function! */
static UResourceDataEntry *
-findFirstExisting(const char* path, char* name,
+findFirstExisting(const char* path, char* name, const char* defaultLocale,
UBool *isRoot, UBool *hasChopped, UBool *isDefault, UErrorCode* status) {
UResourceDataEntry *r = NULL;
UBool hasRealData = FALSE;
- const char *defaultLoc = uloc_getDefault();
*hasChopped = TRUE; /* we're starting with a fresh name */
while(*hasChopped && !hasRealData) {
@@ -465,7 +475,7 @@ findFirstExisting(const char* path, char* name,
if (U_FAILURE(*status)) {
return NULL;
}
- *isDefault = (UBool)(uprv_strncmp(name, defaultLoc, uprv_strlen(name)) == 0);
+ *isDefault = (UBool)(uprv_strncmp(name, defaultLocale, uprv_strlen(name)) == 0);
hasRealData = (UBool)(r->fBogus == U_ZERO_ERROR);
if(!hasRealData) {
/* this entry is not real. We will discard it. */
@@ -529,8 +539,8 @@ loadParentsExceptRoot(UResourceDataEntry *&t1,
char name[], int32_t nameCapacity,
UBool usingUSRData, char usrDataPath[], UErrorCode *status) {
if (U_FAILURE(*status)) { return FALSE; }
- UBool hasChopped = TRUE;
- while (hasChopped && t1->fParent == NULL && !t1->fData.noFallback &&
+ UBool checkParent = TRUE;
+ while (checkParent && t1->fParent == NULL && !t1->fData.noFallback &&
res_getResource(&t1->fData,"%%ParentIsRoot") == RES_BOGUS) {
Resource parentRes = res_getResource(&t1->fData, "%%Parent");
if (parentRes != RES_BOGUS) { // An explicit parent was found.
@@ -573,7 +583,7 @@ loadParentsExceptRoot(UResourceDataEntry *&t1,
}
}
t1 = t2;
- hasChopped = chopLocale(name);
+ checkParent = chopLocale(name) || mayHaveParent(name);
}
return TRUE;
}
@@ -660,10 +670,13 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID,
}
}
+ // Note: We need to query the default locale *before* locking resbMutex.
+ const char *defaultLocale = uloc_getDefault();
+
Mutex lock(&resbMutex); // Lock resbMutex until the end of this function.
/* We're going to skip all the locales that do not have any data */
- r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
+ r = findFirstExisting(path, name, defaultLocale, &isRoot, &hasChopped, &isDefault, &intStatus);
// If we failed due to out-of-memory, report the failure and exit early.
if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
@@ -692,7 +705,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID,
}
}
}
- if (hasChopped && !isRoot) {
+ if ((hasChopped || mayHaveParent(name)) && !isRoot) {
if (!loadParentsExceptRoot(t1, name, UPRV_LENGTHOF(name), usingUSRData, usrDataPath, status)) {
goto finish;
}
@@ -703,8 +716,8 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID,
/* if that is the case, we need to chain in the default locale */
if(r==NULL && openType == URES_OPEN_LOCALE_DEFAULT_ROOT && !isDefault && !isRoot) {
/* insert default locale */
- uprv_strcpy(name, uloc_getDefault());
- r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
+ uprv_strcpy(name, defaultLocale);
+ r = findFirstExisting(path, name, defaultLocale, &isRoot, &hasChopped, &isDefault, &intStatus);
// If we failed due to out-of-memory, report the failure and exit early.
if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
*status = intStatus;
@@ -716,7 +729,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID,
hasRealData = TRUE;
isDefault = TRUE;
// TODO: Why not if (usingUSRData) { ... } like in the non-default-locale code path?
- if (hasChopped && !isRoot) {
+ if ((hasChopped || mayHaveParent(name)) && !isRoot) {
if (!loadParentsExceptRoot(t1, name, UPRV_LENGTHOF(name), usingUSRData, usrDataPath, status)) {
goto finish;
}
@@ -728,7 +741,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID,
/* present */
if(r == NULL) {
uprv_strcpy(name, kRootLocaleName);
- r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
+ r = findFirstExisting(path, name, defaultLocale, &isRoot, &hasChopped, &isDefault, &intStatus);
// If we failed due to out-of-memory, report the failure and exit early.
if (intStatus == U_MEMORY_ALLOCATION_ERROR) {
*status = intStatus;
@@ -782,7 +795,17 @@ entryOpenDirect(const char* path, const char* localeID, UErrorCode* status) {
return NULL;
}
+ // Note: We need to query the default locale *before* locking resbMutex.
+ // If the localeID is NULL, then we want to use the default locale.
+ if (localeID == NULL) {
+ localeID = uloc_getDefault();
+ } else if (*localeID == 0) {
+ // If the localeID is "", then we want to use the root locale.
+ localeID = kRootLocaleName;
+ }
+
Mutex lock(&resbMutex);
+
// findFirstExisting() without fallbacks.
UResourceDataEntry *r = init_entry(localeID, path, status);
if(U_SUCCESS(*status)) {
@@ -951,238 +974,265 @@ ures_close(UResourceBundle* resB)
ures_closeBundle(resB, TRUE);
}
-static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r,
- const char *key, int32_t idx, UResourceDataEntry *realData,
- const UResourceBundle *parent, int32_t noAlias,
- UResourceBundle *resB, UErrorCode *status)
-{
- if(status == NULL || U_FAILURE(*status)) {
- return resB;
- }
- if (parent == NULL) {
+namespace {
+
+UResourceBundle *init_resb_result(
+ UResourceDataEntry *dataEntry, Resource r, const char *key, int32_t idx,
+ UResourceDataEntry *validLocaleDataEntry, const char *containerResPath,
+ int32_t recursionDepth,
+ UResourceBundle *resB, UErrorCode *status);
+
+// TODO: Try to refactor further, so that we output a dataEntry + Resource + (optionally) resPath,
+// rather than a UResourceBundle.
+// May need to entryIncrease() the resulting dataEntry.
+UResourceBundle *getAliasTargetAsResourceBundle(
+ const ResourceData &resData, Resource r, const char *key, int32_t idx,
+ UResourceDataEntry *validLocaleDataEntry, const char *containerResPath,
+ int32_t recursionDepth,
+ UResourceBundle *resB, UErrorCode *status) {
+ // TODO: When an error occurs: Should we return nullptr vs. resB?
+ if (U_FAILURE(*status)) { return resB; }
+ U_ASSERT(RES_GET_TYPE(r) == URES_ALIAS);
+ int32_t len = 0;
+ const UChar *alias = res_getAlias(&resData, r, &len);
+ if(len <= 0) {
+ // bad alias
*status = U_ILLEGAL_ARGUMENT_ERROR;
- return NULL;
+ return resB;
}
- if(RES_GET_TYPE(r) == URES_ALIAS) { /* This is an alias, need to exchange with real data */
- if(noAlias < URES_MAX_ALIAS_LEVEL) {
- int32_t len = 0;
- const UChar *alias = res_getAlias(rdata, r, &len);
- if(len > 0) {
- /* we have an alias, now let's cut it up */
- char stackAlias[200];
- char *chAlias = NULL, *path = NULL, *locale = NULL, *keyPath = NULL;
- int32_t capacity;
-
- /*
- * Allocate enough space for both the char * version
- * of the alias and parent->fResPath.
- *
- * We do this so that res_findResource() can modify the path,
- * which allows us to remove redundant _res_findResource() variants
- * in uresdata.c.
- * res_findResource() now NUL-terminates each segment so that table keys
- * can always be compared with strcmp() instead of strncmp().
- * Saves code there and simplifies testing and code coverage.
- *
- * markus 2003oct17
- */
- ++len; /* count the terminating NUL */
- if(parent->fResPath != NULL) {
- capacity = (int32_t)uprv_strlen(parent->fResPath) + 1;
- } else {
- capacity = 0;
- }
- if(capacity < len) {
- capacity = len;
+
+ // Copy the UTF-16 alias string into an invariant-character string.
+ //
+ // We do this so that res_findResource() can modify the path,
+ // which allows us to remove redundant _res_findResource() variants
+ // in uresdata.c.
+ // res_findResource() now NUL-terminates each segment so that table keys
+ // can always be compared with strcmp() instead of strncmp().
+ // Saves code there and simplifies testing and code coverage.
+ //
+ // markus 2003oct17
+ CharString chAlias;
+ chAlias.appendInvariantChars(alias, len, *status);
+ if (U_FAILURE(*status)) {
+ return nullptr;
+ }
+
+ // We have an alias, now let's cut it up.
+ const char *path = nullptr, *locale = nullptr, *keyPath = nullptr;
+ if(chAlias[0] == RES_PATH_SEPARATOR) {
+ // There is a path included.
+ char *chAliasData = chAlias.data();
+ char *sep = chAliasData + 1;
+ path = sep;
+ sep = uprv_strchr(sep, RES_PATH_SEPARATOR);
+ if(sep != nullptr) {
+ *sep++ = 0;
+ }
+ if(uprv_strcmp(path, "LOCALE") == 0) {
+ // This is an XPath alias, starting with "/LOCALE/".
+ // It contains the path to a resource which should be looked up
+ // starting in the valid locale.
+ // TODO: Can/should we forbid a /LOCALE alias without key path?
+ // It seems weird to alias to the same path, just starting from the valid locale.
+ // That will often yield an infinite loop.
+ keyPath = sep;
+ // Read from the valid locale which we already have.
+ path = locale = nullptr;
+ } else {
+ if(uprv_strcmp(path, "ICUDATA") == 0) { /* want ICU data */
+ path = nullptr;
+ }
+ if (sep == nullptr) {
+ // TODO: This ends up using the root bundle. Can/should we forbid this?
+ locale = "";
+ } else {
+ locale = sep;
+ sep = uprv_strchr(sep, RES_PATH_SEPARATOR);
+ if(sep != nullptr) {
+ *sep++ = 0;
}
- if(capacity <= (int32_t)sizeof(stackAlias)) {
- capacity = (int32_t)sizeof(stackAlias);
- chAlias = stackAlias;
- } else {
- chAlias = (char *)uprv_malloc(capacity);
- /* test for NULL */
- if(chAlias == NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
- }
+ keyPath = sep;
+ }
+ }
+ } else {
+ // No path, start with a locale.
+ char *sep = chAlias.data();
+ locale = sep;
+ sep = uprv_strchr(sep, RES_PATH_SEPARATOR);
+ if(sep != nullptr) {
+ *sep++ = 0;
+ }
+ keyPath = sep;
+ path = validLocaleDataEntry->fPath;
+ }
+
+ // Got almost everything, let's try to open.
+ // First, open the bundle with real data.
+ LocalUResourceBundlePointer mainRes;
+ UResourceDataEntry *dataEntry;
+ if (locale == nullptr) {
+ // alias = /LOCALE/keyPath
+ // Read from the valid locale which we already have.
+ dataEntry = validLocaleDataEntry;
+ } else {
+ UErrorCode intStatus = U_ZERO_ERROR;
+ // TODO: Shouldn't we use ures_open() for locale data bundles (!noFallback)?
+ mainRes.adoptInstead(ures_openDirect(path, locale, &intStatus));
+ if(U_FAILURE(intStatus)) {
+ // We failed to open the resource bundle we're aliasing to.
+ *status = intStatus;
+ return resB;
+ }
+ dataEntry = mainRes->fData;
+ }
+
+ const char* temp = nullptr;
+ if(keyPath == nullptr) {
+ // No key path. This means that we are going to to use the corresponding resource from
+ // another bundle.
+ // TODO: Why the special code path?
+ // Why not put together a key path from containerResPath + key or idx,
+ // as a comment below suggests, and go into the regular code branch?
+ // First, we are going to get a corresponding container
+ // resource to the one we are searching.
+ r = dataEntry->fData.rootRes;
+ if(containerResPath) {
+ chAlias.clear().append(containerResPath, *status);
+ if (U_FAILURE(*status)) {
+ return nullptr;
+ }
+ char *aKey = chAlias.data();
+ // TODO: should res_findResource() return a new dataEntry, too?
+ r = res_findResource(&dataEntry->fData, r, &aKey, &temp);
+ }
+ if(key) {
+ // We need to make keyPath from the containerResPath and
+ // current key, if there is a key associated.
+ chAlias.clear().append(key, *status);
+ if (U_FAILURE(*status)) {
+ return nullptr;
+ }
+ char *aKey = chAlias.data();
+ r = res_findResource(&dataEntry->fData, r, &aKey, &temp);
+ } else if(idx != -1) {
+ // If there is no key, but there is an index, try to get by the index.
+ // Here we have either a table or an array, so get the element.
+ int32_t type = RES_GET_TYPE(r);
+ if(URES_IS_TABLE(type)) {
+ const char *aKey;
+ r = res_getTableItemByIndex(&dataEntry->fData, r, idx, &aKey);
+ } else { /* array */
+ r = res_getArrayItem(&dataEntry->fData, r, idx);
+ }
+ }
+ if(r != RES_BOGUS) {
+ resB = init_resb_result(
+ dataEntry, r, temp, -1, validLocaleDataEntry, nullptr, recursionDepth+1,
+ resB, status);
+ } else {
+ *status = U_MISSING_RESOURCE_ERROR;
+ }
+ } else {
+ // This one is a bit trickier.
+ // We start finding keys, but after we resolve one alias, the path might continue.
+ // Consider:
+ // aliastest:alias { "testtypes/anotheralias/Sequence" }
+ // anotheralias:alias { "/ICUDATA/sh/CollationElements" }
+ // aliastest resource should finally have the sequence, not collation elements.
+ CharString pathBuf(keyPath, *status);
+ if (U_FAILURE(*status)) {
+ return nullptr;
+ }
+ char *myPath = pathBuf.data();
+ containerResPath = nullptr;
+ // Now we have fallback following here.
+ for(;;) {
+ r = dataEntry->fData.rootRes;
+ // TODO: Move containerResPath = nullptr to here,
+ // consistent with restarting from the rootRes of another bundle?!
+
+ // This loop handles 'found' resources over several levels.
+ while(*myPath && U_SUCCESS(*status)) {
+ r = res_findResource(&(dataEntry->fData), r, &myPath, &temp);
+ if(r == RES_BOGUS) {
+ // No resource found, we don't really want to look anymore on this level.
+ break;
}
- u_UCharsToChars(alias, chAlias, len);
-
- if(*chAlias == RES_PATH_SEPARATOR) {
- /* there is a path included */
- locale = uprv_strchr(chAlias+1, RES_PATH_SEPARATOR);
- if(locale == NULL) {
- locale = uprv_strchr(chAlias, 0); /* avoid locale == NULL to make code below work */
- } else {
- *locale = 0;
- locale++;
- }
- path = chAlias+1;
- if(uprv_strcmp(path, "LOCALE") == 0) {
- /* this is an XPath alias, starting with "/LOCALE/" */
- /* it contains the path to a resource which should be looked up */
- /* starting in the requested locale */
- keyPath = locale;
- locale = parent->fTopLevelData->fName; /* this is the requested locale's name */
- path = realData->fPath; /* we will be looking in the same package */
- } else {
- if(uprv_strcmp(path, "ICUDATA") == 0) { /* want ICU data */
- path = NULL;
- }
- keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR);
- if(keyPath) {
- *keyPath = 0;
- keyPath++;
- }
- }
- } else {
- /* no path, start with a locale */
- locale = chAlias;
- keyPath = uprv_strchr(locale, RES_PATH_SEPARATOR);
- if(keyPath) {
- *keyPath = 0;
- keyPath++;
- }
- path = realData->fPath;
+ // Found a resource, but it might be an indirection.
+ resB = init_resb_result(
+ dataEntry, r, temp, -1,
+ validLocaleDataEntry, containerResPath, recursionDepth+1,
+ resB, status);
+ if (U_FAILURE(*status)) {
+ break;
}
-
-
- {
- /* got almost everything, let's try to open */
- /* first, open the bundle with real data */
- UResourceBundle *result = resB;
- const char* temp = NULL;
- UErrorCode intStatus = U_ZERO_ERROR;
- UResourceBundle *mainRes = ures_openDirect(path, locale, &intStatus);
- if(U_SUCCESS(intStatus)) {
- if(keyPath == NULL) {
- /* no key path. This means that we are going to
- * to use the corresponding resource from
- * another bundle
- */
- /* first, we are going to get a corresponding parent
- * resource to the one we are searching.
- */
- char *aKey = parent->fResPath;
- if(aKey) {
- uprv_strcpy(chAlias, aKey); /* allocated large enough above */
- aKey = chAlias;
- r = res_findResource(&(mainRes->fResData), mainRes->fRes, &aKey, &temp);
- } else {
- r = mainRes->fRes;
- }
- if(key) {
- /* we need to make keyPath from parent's fResPath and
- * current key, if there is a key associated
- */
- len = (int32_t)(uprv_strlen(key) + 1);
- if(len > capacity) {
- capacity = len;
- if(chAlias == stackAlias) {
- chAlias = (char *)uprv_malloc(capacity);
- } else {
- chAlias = (char *)uprv_realloc(chAlias, capacity);
- }
- if(chAlias == NULL) {
- ures_close(mainRes);
- *status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
- }
- }
- uprv_memcpy(chAlias, key, len);
- aKey = chAlias;
- r = res_findResource(&(mainRes->fResData), r, &aKey, &temp);
- } else if(idx != -1) {
- /* if there is no key, but there is an index, try to get by the index */
- /* here we have either a table or an array, so get the element */
- int32_t type = RES_GET_TYPE(r);
- if(URES_IS_TABLE(type)) {
- r = res_getTableItemByIndex(&(mainRes->fResData), r, idx, (const char **)&aKey);
- } else { /* array */
- r = res_getArrayItem(&(mainRes->fResData), r, idx);
- }
- }
- if(r != RES_BOGUS) {
- result = init_resb_result(&(mainRes->fResData), r, temp, -1, mainRes->fData, mainRes, noAlias+1, resB, status);
- } else {
- *status = U_MISSING_RESOURCE_ERROR;
- result = resB;
- }
- } else {
- /* this one is a bit trickier.
- * we start finding keys, but after we resolve one alias, the path might continue.
- * Consider:
- * aliastest:alias { "testtypes/anotheralias/Sequence" }
- * anotheralias:alias { "/ICUDATA/sh/CollationElements" }
- * aliastest resource should finally have the sequence, not collation elements.
- */
- UResourceDataEntry *dataEntry = mainRes->fData;
- char stackPath[URES_MAX_BUFFER_SIZE];
- char *pathBuf = stackPath, *myPath = pathBuf;
- if(uprv_strlen(keyPath) >= UPRV_LENGTHOF(stackPath)) {
- pathBuf = (char *)uprv_malloc((uprv_strlen(keyPath)+1)*sizeof(char));
- if(pathBuf == NULL) {
- *status = U_MEMORY_ALLOCATION_ERROR;
- ures_close(mainRes);
- return NULL;
- }
- }
- uprv_strcpy(pathBuf, keyPath);
- result = mainRes;
- /* now we have fallback following here */
- do {
- r = dataEntry->fData.rootRes;
- /* this loop handles 'found' resources over several levels */
- while(*myPath && U_SUCCESS(*status)) {
- r = res_findResource(&(dataEntry->fData), r, &myPath, &temp);
- if(r != RES_BOGUS) { /* found a resource, but it might be an indirection */
- resB = init_resb_result(&(dataEntry->fData), r, temp, -1, dataEntry, result, noAlias+1, resB, status);
- result = resB;
- if(result) {
- r = result->fRes; /* switch to a new resource, possibly a new tree */
- dataEntry = result->fData;
- }
- } else { /* no resource found, we don't really want to look anymore on this level */
- break;
- }
- }
- dataEntry = dataEntry->fParent;
- uprv_strcpy(pathBuf, keyPath);
- myPath = pathBuf;
- } while(r == RES_BOGUS && dataEntry != NULL);
- if(r == RES_BOGUS) {
- *status = U_MISSING_RESOURCE_ERROR;
- result = resB;
- }
- if(pathBuf != stackPath) {
- uprv_free(pathBuf);
- }
- }
- } else { /* we failed to open the resource we're aliasing to */
- *status = intStatus;
- }
- if(chAlias != stackAlias) {
- uprv_free(chAlias);
+ if (temp == nullptr || uprv_strcmp(keyPath, temp) != 0) {
+ // The call to init_resb_result() above will set resB->fKeyPath to be
+ // the same as resB->fKey,
+ // throwing away any additional path elements if we had them --
+ // if the key path wasn't just a single resource ID, clear out
+ // the bundle's key path and re-set it to be equal to keyPath.
+ ures_freeResPath(resB);
+ ures_appendResPath(resB, keyPath, (int32_t)uprv_strlen(keyPath), status);
+ if(resB->fResPath[resB->fResPathLen-1] != RES_PATH_SEPARATOR) {
+ ures_appendResPath(resB, RES_PATH_SEPARATOR_S, 1, status);
}
- if(mainRes != result) {
- ures_close(mainRes);
+ if (U_FAILURE(*status)) {
+ break;
}
- ResourceTracer(resB).maybeTrace("getalias");
- return result;
}
- } else {
- /* bad alias, should be an error */
- *status = U_ILLEGAL_ARGUMENT_ERROR;
- return resB;
+ r = resB->fRes; /* switch to a new resource, possibly a new tree */
+ dataEntry = resB->fData;
+ containerResPath = resB->fResPath;
}
- } else {
+ if (U_FAILURE(*status) || r != RES_BOGUS) {
+ break;
+ }
+ // Fall back to the parent bundle, if there is one.
+ dataEntry = dataEntry->fParent;
+ if (dataEntry == nullptr) {
+ *status = U_MISSING_RESOURCE_ERROR;
+ break;
+ }
+ // Copy the same keyPath again.
+ myPath = pathBuf.data();
+ uprv_strcpy(myPath, keyPath);
+ }
+ }
+ if(mainRes.getAlias() == resB) {
+ mainRes.orphan();
+ }
+ ResourceTracer(resB).maybeTrace("getalias");
+ return resB;
+}
+
+// Recursive function, should be called only by itself, by its simpler wrapper,
+// or by getAliasTargetAsResourceBundle().
+UResourceBundle *init_resb_result(
+ UResourceDataEntry *dataEntry, Resource r, const char *key, int32_t idx,
+ UResourceDataEntry *validLocaleDataEntry, const char *containerResPath,
+ int32_t recursionDepth,
+ UResourceBundle *resB, UErrorCode *status) {
+ // TODO: When an error occurs: Should we return nullptr vs. resB?
+ if(status == NULL || U_FAILURE(*status)) {
+ return resB;
+ }
+ if (validLocaleDataEntry == nullptr) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return NULL;
+ }
+ if(RES_GET_TYPE(r) == URES_ALIAS) {
+ // This is an alias, need to exchange with real data.
+ if(recursionDepth >= URES_MAX_ALIAS_LEVEL) {
*status = U_TOO_MANY_ALIASES_ERROR;
return resB;
}
+ return getAliasTargetAsResourceBundle(
+ dataEntry->fData, r, key, idx,
+ validLocaleDataEntry, containerResPath, recursionDepth, resB, status);
}
if(resB == NULL) {
resB = (UResourceBundle *)uprv_malloc(sizeof(UResourceBundle));
- /* test for NULL */
if (resB == NULL) {
*status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
@@ -1208,20 +1258,20 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r,
ures_initStackObject(resB);
}
*/
- if(parent != resB) {
+ if(containerResPath != resB->fResPath) {
ures_freeResPath(resB);
}
}
- resB->fData = realData;
+ resB->fData = dataEntry;
entryIncrease(resB->fData);
resB->fHasFallback = FALSE;
resB->fIsTopLevel = FALSE;
resB->fIndex = -1;
resB->fKey = key;
- /*resB->fParentRes = parent;*/
- resB->fTopLevelData = parent->fTopLevelData;
- if(parent->fResPath && parent != resB) {
- ures_appendResPath(resB, parent->fResPath, parent->fResPathLen, status);
+ resB->fValidLocaleDataEntry = validLocaleDataEntry;
+ if(containerResPath != resB->fResPath) {
+ ures_appendResPath(
+ resB, containerResPath, static_cast<int32_t>(uprv_strlen(containerResPath)), status);
}
if(key != NULL) {
ures_appendResPath(resB, key, (int32_t)uprv_strlen(key), status);
@@ -1244,13 +1294,23 @@ static UResourceBundle *init_resb_result(const ResourceData *rdata, Resource r,
resB->fVersion = NULL;
resB->fRes = r;
- /*resB->fParent = parent->fRes;*/
- uprv_memmove(&resB->fResData, rdata, sizeof(ResourceData));
- resB->fSize = res_countArrayItems(&(resB->fResData), resB->fRes);
+ resB->fSize = res_countArrayItems(&resB->getResData(), resB->fRes);
ResourceTracer(resB).trace("get");
return resB;
}
+UResourceBundle *init_resb_result(
+ UResourceDataEntry *dataEntry, Resource r, const char *key, int32_t idx,
+ // validLocaleDataEntry + containerResPath
+ const UResourceBundle *container,
+ UResourceBundle *resB, UErrorCode *status) {
+ return init_resb_result(
+ dataEntry, r, key, idx,
+ container->fValidLocaleDataEntry, container->fResPath, 0, resB, status);
+}
+
+} // namespace
+
UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle *original, UErrorCode *status) {
UBool isStackObject;
if(U_FAILURE(*status) || r == original) {
@@ -1296,7 +1356,7 @@ U_CAPI const UChar* U_EXPORT2 ures_getString(const UResourceBundle* resB, int32_
*status = U_ILLEGAL_ARGUMENT_ERROR;
return NULL;
}
- s = res_getString({resB}, &(resB->fResData), resB->fRes, len);
+ s = res_getString({resB}, &resB->getResData(), resB->fRes, len);
if (s == NULL) {
*status = U_RESOURCE_TYPE_MISMATCH;
}
@@ -1385,7 +1445,7 @@ U_CAPI const uint8_t* U_EXPORT2 ures_getBinary(const UResourceBundle* resB, int3
*status = U_ILLEGAL_ARGUMENT_ERROR;
return NULL;
}
- p = res_getBinary({resB}, &(resB->fResData), resB->fRes, len);
+ p = res_getBinary({resB}, &resB->getResData(), resB->fRes, len);
if (p == NULL) {
*status = U_RESOURCE_TYPE_MISMATCH;
}
@@ -1402,7 +1462,7 @@ U_CAPI const int32_t* U_EXPORT2 ures_getIntVector(const UResourceBundle* resB, i
*status = U_ILLEGAL_ARGUMENT_ERROR;
return NULL;
}
- p = res_getIntVector({resB}, &(resB->fResData), resB->fRes, len);
+ p = res_getIntVector({resB}, &resB->getResData(), resB->fRes, len);
if (p == NULL) {
*status = U_RESOURCE_TYPE_MISMATCH;
}
@@ -1480,7 +1540,7 @@ static const UChar* ures_getStringWithAlias(const UResourceBundle *resB, Resourc
ures_close(tempRes);
return result;
} else {
- return res_getString({resB, sIndex}, &(resB->fResData), r, len);
+ return res_getString({resB, sIndex}, &resB->getResData(), r, len);
}
}
@@ -1516,18 +1576,18 @@ U_CAPI const UChar* U_EXPORT2 ures_getNextString(UResourceBundle *resB, int32_t*
switch(RES_GET_TYPE(resB->fRes)) {
case URES_STRING:
case URES_STRING_V2:
- return res_getString({resB}, &(resB->fResData), resB->fRes, len);
+ return res_getString({resB}, &resB->getResData(), resB->fRes, len);
case URES_TABLE:
case URES_TABLE16:
case URES_TABLE32:
- r = res_getTableItemByIndex(&(resB->fResData), resB->fRes, resB->fIndex, key);
+ r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, resB->fIndex, key);
if(r == RES_BOGUS && resB->fHasFallback) {
/* TODO: do the fallback */
}
return ures_getStringWithAlias(resB, r, resB->fIndex, len, status);
case URES_ARRAY:
case URES_ARRAY16:
- r = res_getArrayItem(&(resB->fResData), resB->fRes, resB->fIndex);
+ r = res_getArrayItem(&resB->getResData(), resB->fRes, resB->fIndex);
if(r == RES_BOGUS && resB->fHasFallback) {
/* TODO: do the fallback */
}
@@ -1576,18 +1636,18 @@ U_CAPI UResourceBundle* U_EXPORT2 ures_getNextResource(UResourceBundle *resB, UR
case URES_TABLE:
case URES_TABLE16:
case URES_TABLE32:
- r = res_getTableItemByIndex(&(resB->fResData), resB->fRes, resB->fIndex, &key);
+ r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, resB->fIndex, &key);
if(r == RES_BOGUS && resB->fHasFallback) {
/* TODO: do the fallback */
}
- return init_resb_result(&(resB->fResData), r, key, resB->fIndex, resB->fData, resB, 0, fillIn, status);
+ return init_resb_result(resB->fData, r, key, resB->fIndex, resB, fillIn, status);
case URES_ARRAY:
case URES_ARRAY16:
- r = res_getArrayItem(&(resB->fResData), resB->fRes, resB->fIndex);
+ r = res_getArrayItem(&resB->getResData(), resB->fRes, resB->fIndex);
if(r == RES_BOGUS && resB->fHasFallback) {
/* TODO: do the fallback */
}
- return init_resb_result(&(resB->fResData), r, key, resB->fIndex, resB->fData, resB, 0, fillIn, status);
+ return init_resb_result(resB->fData, r, key, resB->fIndex, resB, fillIn, status);
default:
/*return NULL;*/
return fillIn;
@@ -1622,18 +1682,18 @@ U_CAPI UResourceBundle* U_EXPORT2 ures_getByIndex(const UResourceBundle *resB, i
case URES_TABLE:
case URES_TABLE16:
case URES_TABLE32:
- r = res_getTableItemByIndex(&(resB->fResData), resB->fRes, indexR, &key);
+ r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, indexR, &key);
if(r == RES_BOGUS && resB->fHasFallback) {
/* TODO: do the fallback */
}
- return init_resb_result(&(resB->fResData), r, key, indexR, resB->fData, resB, 0, fillIn, status);
+ return init_resb_result(resB->fData, r, key, indexR, resB, fillIn, status);
case URES_ARRAY:
case URES_ARRAY16:
- r = res_getArrayItem(&(resB->fResData), resB->fRes, indexR);
+ r = res_getArrayItem(&resB->getResData(), resB->fRes, indexR);
if(r == RES_BOGUS && resB->fHasFallback) {
/* TODO: do the fallback */
}
- return init_resb_result(&(resB->fResData), r, key, indexR, resB->fData, resB, 0, fillIn, status);
+ return init_resb_result(resB->fData, r, key, indexR, resB, fillIn, status);
default:
/*return NULL;*/
return fillIn;
@@ -1661,18 +1721,18 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByIndex(const UResourceBundle *resB,
switch(RES_GET_TYPE(resB->fRes)) {
case URES_STRING:
case URES_STRING_V2:
- return res_getString({resB}, &(resB->fResData), resB->fRes, len);
+ return res_getString({resB}, &resB->getResData(), resB->fRes, len);
case URES_TABLE:
case URES_TABLE16:
case URES_TABLE32:
- r = res_getTableItemByIndex(&(resB->fResData), resB->fRes, indexS, &key);
+ r = res_getTableItemByIndex(&resB->getResData(), resB->fRes, indexS, &key);
if(r == RES_BOGUS && resB->fHasFallback) {
/* TODO: do the fallback */
}
return ures_getStringWithAlias(resB, r, indexS, len, status);
case URES_ARRAY:
case URES_ARRAY16:
- r = res_getArrayItem(&(resB->fResData), resB->fRes, indexS);
+ r = res_getArrayItem(&resB->getResData(), resB->fRes, indexS);
if(r == RES_BOGUS && resB->fHasFallback) {
/* TODO: do the fallback */
}
@@ -1780,9 +1840,9 @@ ures_findSubResource(const UResourceBundle *resB, char* path, UResourceBundle *f
/* this loop is here because aliasing is resolved on this level, not on res level */
/* so, when we encounter an alias, it is not an aggregate resource, so we return */
do {
- res = res_findResource(&(resB->fResData), resB->fRes, &path, &key);
+ res = res_findResource(&resB->getResData(), resB->fRes, &path, &key);
if(res != RES_BOGUS) {
- result = init_resb_result(&(resB->fResData), res, key, -1, resB->fData, resB, 0, fillIn, status);
+ result = init_resb_result(resB->fData, res, key, -1, resB, fillIn, status);
resB = result;
} else {
*status = U_MISSING_RESOURCE_ERROR;
@@ -1850,13 +1910,85 @@ static Resource getTableItemByKeyPath(const ResourceData *pResData, Resource tab
return resource;
}
-U_CAPI UResourceBundle* U_EXPORT2
-ures_getByKeyWithFallback(const UResourceBundle *resB,
- const char* inKey,
- UResourceBundle *fillIn,
+static void createPath(const char* origResPath,
+ int32_t origResPathLen,
+ const char* resPath,
+ int32_t resPathLen,
+ const char* inKey,
+ CharString& path,
+ UErrorCode* status) {
+ // This is a utility function used by ures_getByKeyWithFallback() below. This function builds a path from
+ // resPath and inKey, returning the result in `path`. Originally, this function just cleared `path` and
+ // appended resPath and inKey to it, but that caused problems for horizontal inheritance.
+ //
+ // In normal cases, resPath is the same as origResPath, but if ures_getByKeyWithFallback() has followed an
+ // alias, resPath may be different from origResPath. Not only may the existing path elements be different,
+ // but resPath may also have MORE path elements than origResPath did. If it does, those additional path
+ // elements SUPERSEDE the corresponding elements of inKey. So this code counts the number of elements in
+ // resPath and origResPath and, for each path element in resPath that doesn't have a counterpart in origResPath,
+ // deletes a path element from the beginning of inKey. The remainder of inKey is then appended to
+ // resPath to form the result. (We're not using uprv_strchr() here because resPath and origResPath may
+ // not be zero-terminated.)
+ path.clear();
+ const char* key = inKey;
+ if (resPathLen > 0) {
+ path.append(resPath, resPathLen, *status);
+ if (U_SUCCESS(*status)) {
+ const char* resPathLimit = resPath + resPathLen;
+ const char* origResPathLimit = origResPath + origResPathLen;
+ const char* resPathPtr = resPath;
+ const char* origResPathPtr = origResPath;
+
+ // Remove from the beginning of resPath the number of segments that are contained in origResPath.
+ // If origResPath has MORE segments than resPath, this will leave resPath as the empty string.
+ while (origResPathPtr < origResPathLimit && resPathPtr < resPathLimit) {
+ while (origResPathPtr < origResPathLimit && *origResPathPtr != RES_PATH_SEPARATOR) {
+ ++origResPathPtr;
+ }
+ if (origResPathPtr < origResPathLimit && *origResPathPtr == RES_PATH_SEPARATOR) {
+ ++origResPathPtr;
+ }
+ while (resPathPtr < resPathLimit && *resPathPtr != RES_PATH_SEPARATOR) {
+ ++resPathPtr;
+ }
+ if (resPathPtr < resPathLimit && *resPathPtr == RES_PATH_SEPARATOR) {
+ ++resPathPtr;
+ }
+ }
+
+ // New remove from the beginning of `key` the number of segments remaining in resPath.
+ // If resPath has more segments than `key` does, `key` will end up empty.
+ while (resPathPtr < resPathLimit && *key != '\0') {
+ while (resPathPtr < resPathLimit && *resPathPtr != RES_PATH_SEPARATOR) {
+ ++resPathPtr;
+ }
+ if (resPathPtr < resPathLimit && *resPathPtr == RES_PATH_SEPARATOR) {
+ ++resPathPtr;
+ }
+ while (*key != '\0' && *key != RES_PATH_SEPARATOR) {
+ ++key;
+ }
+ if (*key == RES_PATH_SEPARATOR) {
+ ++key;
+ }
+ }
+ }
+ // Finally, append what's left of `key` to `path`. What you end up with here is `resPath`, plus
+ // any pieces of `key` that aren't superseded by `resPath`.
+ // Or, to put it another way, calculate <#-segments-in-key> - (<#-segments-in-resPath> - <#-segments-in-origResPath>),
+ // and append that many segments from the end of `key` to `resPath` to produce the result.
+ path.append(key, *status);
+ } else {
+ path.append(inKey, *status);
+ }
+}
+
+U_CAPI UResourceBundle* U_EXPORT2
+ures_getByKeyWithFallback(const UResourceBundle *resB,
+ const char* inKey,
+ UResourceBundle *fillIn,
UErrorCode *status) {
Resource res = RES_BOGUS, rootRes = RES_BOGUS;
- /*UResourceDataEntry *realData = NULL;*/
UResourceBundle *helper = NULL;
if (status==NULL || U_FAILURE(*status)) {
@@ -1869,24 +2001,32 @@ ures_getByKeyWithFallback(const UResourceBundle *resB,
int32_t type = RES_GET_TYPE(resB->fRes);
if(URES_IS_TABLE(type)) {
- res = getTableItemByKeyPath(&(resB->fResData), resB->fRes, inKey);
+ const char* origResPath = resB->fResPath;
+ int32_t origResPathLen = resB->fResPathLen;
+ res = getTableItemByKeyPath(&resB->getResData(), resB->fRes, inKey);
const char* key = inKey;
+ bool didRootOnce = false;
if(res == RES_BOGUS) {
UResourceDataEntry *dataEntry = resB->fData;
CharString path;
char *myPath = NULL;
const char* resPath = resB->fResPath;
int32_t len = resB->fResPathLen;
- while(res == RES_BOGUS && dataEntry->fParent != NULL) { /* Otherwise, we'll look in parents */
- dataEntry = dataEntry->fParent;
+ while(res == RES_BOGUS && (dataEntry->fParent != NULL || !didRootOnce)) { /* Otherwise, we'll look in parents */
+ if (dataEntry->fParent != NULL) {
+ dataEntry = dataEntry->fParent;
+ } else {
+ // We can't just stop when we get to a bundle whose fParent is NULL. That'll work most of the time,
+ // but if the bundle that the caller passed to us was "root" (which happens in getAllItemsWithFallback(),
+ // this function will drop right out without doing anything if "root" doesn't contain the exact key path
+ // specified. In that case, we need one extra time through this loop to make sure we follow any
+ // applicable aliases at the root level.
+ didRootOnce = true;
+ }
rootRes = dataEntry->fData.rootRes;
if(dataEntry->fBogus == U_ZERO_ERROR) {
- path.clear();
- if (len > 0) {
- path.append(resPath, len, *status);
- }
- path.append(inKey, *status);
+ createPath(origResPath, origResPathLen, resPath, len, inKey, path, status);
if (U_FAILURE(*status)) {
ures_close(helper);
return fillIn;
@@ -1897,8 +2037,8 @@ ures_getByKeyWithFallback(const UResourceBundle *resB,
res = res_findResource(&(dataEntry->fData), rootRes, &myPath, &key);
if (RES_GET_TYPE(res) == URES_ALIAS && *myPath) {
/* We hit an alias, but we didn't finish following the path. */
- helper = init_resb_result(&(dataEntry->fData), res, NULL, -1, dataEntry, resB, 0, helper, status);
- /*helper = init_resb_result(&(dataEntry->fData), res, inKey, -1, dataEntry, resB, 0, helper, status);*/
+ helper = init_resb_result(dataEntry, res, NULL, -1, resB, helper, status);
+ /*helper = init_resb_result(dataEntry, res, inKey, -1, resB, helper, status);*/
if(helper) {
dataEntry = helper->fData;
rootRes = helper->fRes;
@@ -1908,11 +2048,13 @@ ures_getByKeyWithFallback(const UResourceBundle *resB,
} else {
break;
}
+ } else if (res == RES_BOGUS) {
+ break;
}
} while(*myPath); /* Continue until the whole path is consumed */
}
}
- /*const ResourceData *rd = getFallbackData(resB, &key, &realData, &res, status);*/
+ /*dataEntry = getFallbackData(resB, &key, &res, status);*/
if(res != RES_BOGUS) {
/* check if resB->fResPath gives the right name here */
if(uprv_strcmp(dataEntry->fName, uloc_getDefault())==0 || uprv_strcmp(dataEntry->fName, kRootLocaleName)==0) {
@@ -1921,12 +2063,31 @@ ures_getByKeyWithFallback(const UResourceBundle *resB,
*status = U_USING_FALLBACK_WARNING;
}
- fillIn = init_resb_result(&(dataEntry->fData), res, inKey, -1, dataEntry, resB, 0, fillIn, status);
+ fillIn = init_resb_result(dataEntry, res, key, -1, resB, fillIn, status);
+ if (resPath != nullptr) {
+ createPath(origResPath, origResPathLen, resPath, len, inKey, path, status);
+ } else {
+ const char* separator = nullptr;
+ if (fillIn->fResPath != nullptr) {
+ separator = uprv_strchr(fillIn->fResPath, RES_PATH_SEPARATOR);
+ }
+ if (separator != nullptr && separator[1] != '\0') {
+ createPath(origResPath, origResPathLen, fillIn->fResPath,
+ static_cast<int32_t>(uprv_strlen(fillIn->fResPath)), inKey, path, status);
+ } else {
+ createPath(origResPath, origResPathLen, "", 0, inKey, path, status);
+ }
+ }
+ ures_freeResPath(fillIn);
+ ures_appendResPath(fillIn, path.data(), path.length(), status);
+ if(fillIn->fResPath[fillIn->fResPathLen-1] != RES_PATH_SEPARATOR) {
+ ures_appendResPath(fillIn, RES_PATH_SEPARATOR_S, 1, status);
+ }
} else {
*status = U_MISSING_RESOURCE_ERROR;
}
} else {
- fillIn = init_resb_result(&(resB->fResData), res, key, -1, resB->fData, resB, 0, fillIn, status);
+ fillIn = init_resb_result(resB->fData, res, key, -1, resB, fillIn, status);
}
}
else {
@@ -1940,8 +2101,7 @@ namespace {
void getAllItemsWithFallback(
const UResourceBundle *bundle, ResourceDataValue &value,
- ResourceSink &sink,
- UErrorCode &errorCode) {
+ ResourceSink &sink, UErrorCode &errorCode) {
if (U_FAILURE(errorCode)) { return; }
// We recursively enumerate child-first,
// only storing parent items in the absence of child items.
@@ -1953,7 +2113,8 @@ void getAllItemsWithFallback(
// When the sink sees the no-fallback/no-inheritance marker,
// then it would remove the parent's item.
// We would deserialize parent values even though they are overridden in a child bundle.
- value.setData(&bundle->fResData);
+ value.setData(bundle->getResData());
+ value.setValidLocaleDataEntry(bundle->fValidLocaleDataEntry);
UResourceDataEntry *parentEntry = bundle->fData->fParent;
UBool hasParent = parentEntry != NULL && U_SUCCESS(parentEntry->fBogus);
value.setResource(bundle->fRes, ResourceTracer(bundle));
@@ -1967,38 +2128,76 @@ void getAllItemsWithFallback(
// TODO: See if we can refactor ures_getByKeyWithFallback()
// and pull out an inner function that takes and returns a UResourceDataEntry
// so that we need not create UResourceBundle objects.
- UResourceBundle parentBundle;
- ures_initStackObject(&parentBundle);
- parentBundle.fTopLevelData = parentBundle.fData = parentEntry;
- // TODO: What is the difference between bundle fData and fTopLevelData?
- uprv_memcpy(&parentBundle.fResData, &parentEntry->fData, sizeof(ResourceData));
- // TODO: Try to replace bundle.fResData with just using bundle.fData->fData.
- parentBundle.fHasFallback = !parentBundle.fResData.noFallback;
- parentBundle.fIsTopLevel = TRUE;
- parentBundle.fRes = parentBundle.fResData.rootRes;
- parentBundle.fSize = res_countArrayItems(&(parentBundle.fResData), parentBundle.fRes);
- parentBundle.fIndex = -1;
+ StackUResourceBundle parentBundle;
+ UResourceBundle &parentRef = parentBundle.ref();
+ parentRef.fData = parentEntry;
+ parentRef.fValidLocaleDataEntry = bundle->fValidLocaleDataEntry;
+ parentRef.fHasFallback = !parentRef.getResData().noFallback;
+ parentRef.fIsTopLevel = TRUE;
+ parentRef.fRes = parentRef.getResData().rootRes;
+ parentRef.fSize = res_countArrayItems(&parentRef.getResData(), parentRef.fRes);
+ parentRef.fIndex = -1;
entryIncrease(parentEntry);
// Look up the container item in the parent bundle.
- UResourceBundle containerBundle;
- ures_initStackObject(&containerBundle);
+ StackUResourceBundle containerBundle;
const UResourceBundle *rb;
UErrorCode pathErrorCode = U_ZERO_ERROR; // Ignore if parents up to root do not have this path.
if (bundle->fResPath == NULL || *bundle->fResPath == 0) {
- rb = &parentBundle;
+ rb = parentBundle.getAlias();
} else {
- rb = ures_getByKeyWithFallback(&parentBundle, bundle->fResPath,
- &containerBundle, &pathErrorCode);
+ rb = ures_getByKeyWithFallback(parentBundle.getAlias(), bundle->fResPath,
+ containerBundle.getAlias(), &pathErrorCode);
}
if (U_SUCCESS(pathErrorCode)) {
getAllItemsWithFallback(rb, value, sink, errorCode);
}
- ures_close(&containerBundle);
- ures_close(&parentBundle);
}
}
+struct GetAllChildrenSink : public ResourceSink {
+ // Destination sink
+ ResourceSink& dest;
+
+ GetAllChildrenSink(ResourceSink& dest)
+ : dest(dest) {}
+ virtual ~GetAllChildrenSink() override;
+ virtual void put(const char *key, ResourceValue &value, UBool isRoot,
+ UErrorCode &errorCode) override {
+ ResourceTable itemsTable = value.getTable(errorCode);
+ if (U_FAILURE(errorCode)) { return; }
+ for (int32_t i = 0; itemsTable.getKeyAndValue(i, key, value); ++i) {
+ if (value.getType() == URES_ALIAS) {
+ ResourceDataValue& rdv = static_cast<ResourceDataValue&>(value);
+ StackUResourceBundle stackTempBundle;
+ UResourceBundle* aliasRB = getAliasTargetAsResourceBundle(rdv.getData(), rdv.getResource(), nullptr, -1,
+ rdv.getValidLocaleDataEntry(), nullptr, 0,
+ stackTempBundle.getAlias(), &errorCode);
+ if (U_SUCCESS(errorCode)) {
+ ResourceDataValue aliasedValue;
+ aliasedValue.setData(aliasRB->getResData());
+ aliasedValue.setValidLocaleDataEntry(aliasRB->fValidLocaleDataEntry);
+ aliasedValue.setResource(aliasRB->fRes, ResourceTracer(aliasRB));
+ dest.put(key, aliasedValue, isRoot, errorCode);
+ }
+ } else {
+ dest.put(key, value, isRoot, errorCode);
+ }
+ if (U_FAILURE(errorCode)) { return; }
+ }
+ }
+};
+
+// Virtual destructors must be defined out of line.
+GetAllChildrenSink::~GetAllChildrenSink() {}
+
+U_CAPI void U_EXPORT2
+ures_getAllChildrenWithFallback(const UResourceBundle *bundle, const char *path,
+ icu::ResourceSink &sink, UErrorCode &errorCode) {
+ GetAllChildrenSink allChildrenSink(sink);
+ ures_getAllItemsWithFallback(bundle, path, allChildrenSink, errorCode);
+}
+
} // namespace
// Requires a ResourceDataValue fill-in, so that we need not cast from a ResourceValue.
@@ -2029,7 +2228,8 @@ ures_getValueWithFallback(const UResourceBundle *bundle, const char *path,
return;
}
}
- value.setData(&rb->fResData);
+ value.setData(rb->getResData());
+ value.setValidLocaleDataEntry(rb->fValidLocaleDataEntry);
value.setResource(rb->fRes, ResourceTracer(rb));
}
@@ -2059,7 +2259,7 @@ ures_getAllItemsWithFallback(const UResourceBundle *bundle, const char *path,
U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, const char* inKey, UResourceBundle *fillIn, UErrorCode *status) {
Resource res = RES_BOGUS;
- UResourceDataEntry *realData = NULL;
+ UResourceDataEntry *dataEntry = NULL;
const char *key = inKey;
if (status==NULL || U_FAILURE(*status)) {
@@ -2073,14 +2273,14 @@ U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, con
int32_t type = RES_GET_TYPE(resB->fRes);
if(URES_IS_TABLE(type)) {
int32_t t;
- res = res_getTableItemByKey(&(resB->fResData), resB->fRes, &t, &key);
+ res = res_getTableItemByKey(&resB->getResData(), resB->fRes, &t, &key);
if(res == RES_BOGUS) {
key = inKey;
if(resB->fHasFallback == TRUE) {
- const ResourceData *rd = getFallbackData(resB, &key, &realData, &res, status);
+ dataEntry = getFallbackData(resB, &key, &res, status);
if(U_SUCCESS(*status)) {
- /* check if resB->fResPath gives the right name here */
- return init_resb_result(rd, res, key, -1, realData, resB, 0, fillIn, status);
+ /* check if resB->fResPath gives the right name here */
+ return init_resb_result(dataEntry, res, key, -1, resB, fillIn, status);
} else {
*status = U_MISSING_RESOURCE_ERROR;
}
@@ -2088,7 +2288,7 @@ U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, con
*status = U_MISSING_RESOURCE_ERROR;
}
} else {
- return init_resb_result(&(resB->fResData), res, key, -1, resB->fData, resB, 0, fillIn, status);
+ return init_resb_result(resB->fData, res, key, -1, resB, fillIn, status);
}
}
#if 0
@@ -2096,9 +2296,9 @@ U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, con
/* not currently */
else if(RES_GET_TYPE(resB->fRes) == URES_ARRAY && resB->fHasFallback == TRUE) {
/* here should go a first attempt to locate the key using index table */
- const ResourceData *rd = getFallbackData(resB, &key, &realData, &res, status);
+ dataEntry = getFallbackData(resB, &key, &res, status);
if(U_SUCCESS(*status)) {
- return init_resb_result(rd, res, key, realData, resB, fillIn, status);
+ return init_resb_result(dataEntry, res, key, resB, fillIn, status);
} else {
*status = U_MISSING_RESOURCE_ERROR;
}
@@ -2112,7 +2312,7 @@ U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, con
U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, const char* inKey, int32_t* len, UErrorCode *status) {
Resource res = RES_BOGUS;
- UResourceDataEntry *realData = NULL;
+ UResourceDataEntry *dataEntry = NULL;
const char* key = inKey;
if (status==NULL || U_FAILURE(*status)) {
@@ -2127,17 +2327,17 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, c
if(URES_IS_TABLE(type)) {
int32_t t=0;
- res = res_getTableItemByKey(&(resB->fResData), resB->fRes, &t, &key);
+ res = res_getTableItemByKey(&resB->getResData(), resB->fRes, &t, &key);
if(res == RES_BOGUS) {
key = inKey;
if(resB->fHasFallback == TRUE) {
- const ResourceData *rd = getFallbackData(resB, &key, &realData, &res, status);
+ dataEntry = getFallbackData(resB, &key, &res, status);
if(U_SUCCESS(*status)) {
switch (RES_GET_TYPE(res)) {
case URES_STRING:
case URES_STRING_V2:
- return res_getString({resB, key}, rd, res, len);
+ return res_getString({resB, key}, &dataEntry->fData, res, len);
case URES_ALIAS:
{
const UChar* result = 0;
@@ -2159,7 +2359,7 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, c
switch (RES_GET_TYPE(res)) {
case URES_STRING:
case URES_STRING_V2:
- return res_getString({resB, key}, &(resB->fResData), res, len);
+ return res_getString({resB, key}, &resB->getResData(), res, len);
case URES_ALIAS:
{
const UChar* result = 0;
@@ -2178,7 +2378,7 @@ U_CAPI const UChar* U_EXPORT2 ures_getStringByKey(const UResourceBundle *resB, c
/* not currently */
else if(RES_GET_TYPE(resB->fRes) == URES_ARRAY && resB->fHasFallback == TRUE) {
/* here should go a first attempt to locate the key using index table */
- const ResourceData *rd = getFallbackData(resB, &key, &realData, &res, status);
+ dataEntry = getFallbackData(resB, &key, &res, status);
if(U_SUCCESS(*status)) {
// TODO: Tracing
return res_getString(rd, res, len);
@@ -2247,7 +2447,7 @@ ures_getLocaleByType(const UResourceBundle* resourceBundle,
case ULOC_ACTUAL_LOCALE:
return resourceBundle->fData->fName;
case ULOC_VALID_LOCALE:
- return resourceBundle->fTopLevelData->fName;
+ return resourceBundle->fValidLocaleDataEntry->fName;
case ULOC_REQUESTED_LOCALE:
default:
*status = U_ILLEGAL_ARGUMENT_ERROR;
@@ -2318,12 +2518,11 @@ ures_openWithType(UResourceBundle *r, const char* path, const char* localeID,
uprv_memset(r, 0, sizeof(UResourceBundle));
ures_setIsStackObject(r, isStackObject);
- r->fTopLevelData = r->fData = entry;
- uprv_memcpy(&r->fResData, &entry->fData, sizeof(ResourceData));
- r->fHasFallback = openType != URES_OPEN_DIRECT && !r->fResData.noFallback;
+ r->fValidLocaleDataEntry = r->fData = entry;
+ r->fHasFallback = openType != URES_OPEN_DIRECT && !r->getResData().noFallback;
r->fIsTopLevel = TRUE;
- r->fRes = r->fResData.rootRes;
- r->fSize = res_countArrayItems(&(r->fResData), r->fRes);
+ r->fRes = r->getResData().rootRes;
+ r->fSize = res_countArrayItems(&r->getResData(), r->fRes);
r->fIndex = -1;
ResourceTracer(r).traceOpen();
@@ -2399,8 +2598,8 @@ ures_countArrayItems(const UResourceBundle* resourceBundle,
}
ures_getByKey(resourceBundle, resourceKey, &resData, status);
- if(resData.fResData.data != NULL) {
- int32_t result = res_countArrayItems(&resData.fResData, resData.fRes);
+ if(resData.getResData().data != NULL) {
+ int32_t result = res_countArrayItems(&resData.getResData(), resData.fRes);
ures_close(&resData);
return result;
} else {
@@ -2943,7 +3142,7 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status)
UResourceBundle *bund = NULL;
UResourceBundle *subPtr = NULL;
UErrorCode subStatus = U_ZERO_ERROR; /* don't fail if a bundle is unopenable */
- bund = ures_openDirect(path, locale, &subStatus);
+ bund = ures_open(path, locale, &subStatus);
#if defined(URES_TREE_DEBUG)
if(!bund || U_FAILURE(subStatus)) {
@@ -3019,7 +3218,7 @@ ures_getKeywordValues(const char *path, const char *keyword, UErrorCode *status)
U_CAPI UBool U_EXPORT2
ures_equal(const UResourceBundle* res1, const UResourceBundle* res2){
if(res1==NULL || res2==NULL){
- return res1==res2; /* pointer comparision */
+ return res1==res2; /* pointer comparison */
}
if(res1->fKey==NULL|| res2->fKey==NULL){
return (res1->fKey==res2->fKey);
diff --git a/Build/source/libs/icu/icu-src/source/common/uresdata.cpp b/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
index ae731e45442..9af081be408 100644
--- a/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
@@ -960,14 +960,6 @@ res_findResource(const ResourceData *pResData, Resource r, char** path, const ch
if(URES_IS_TABLE(type)) {
*key = pathP;
t2 = res_getTableItemByKey(pResData, t1, &indexR, key);
- if(t2 == RES_BOGUS) {
- /* if we fail to get the resource by key, maybe we got an index */
- indexR = uprv_strtol(pathP, &closeIndex, 10);
- if(indexR >= 0 && *closeIndex == 0 && (*pathP != '0' || closeIndex - pathP == 1)) {
- /* if we indeed have an index, try to get the item by index */
- t2 = res_getTableItemByIndex(pResData, t1, indexR, key);
- } // else t2 is already RES_BOGUS
- }
} else if(URES_IS_ARRAY(type)) {
indexR = uprv_strtol(pathP, &closeIndex, 10);
if(indexR >= 0 && *closeIndex == 0) {
diff --git a/Build/source/libs/icu/icu-src/source/common/uresdata.h b/Build/source/libs/icu/icu-src/source/common/uresdata.h
index 7c2152e57b5..b8a3adba634 100644
--- a/Build/source/libs/icu/icu-src/source/common/uresdata.h
+++ b/Build/source/libs/icu/icu-src/source/common/uresdata.h
@@ -399,6 +399,8 @@ typedef struct ResourceData {
UBool useNativeStrcmp;
} ResourceData;
+struct UResourceDataEntry; // forward declared for ResoureDataValue below; actually defined in uresimp.h
+
/*
* Read a resource bundle from memory.
*/
@@ -511,12 +513,18 @@ inline uint32_t res_getUInt(const ResourceTracer& traceInfo, Resource res) {
class ResourceDataValue : public ResourceValue {
public:
ResourceDataValue() :
+ pResData(nullptr),
+ validLocaleDataEntry(nullptr),
res(static_cast<Resource>(URES_NONE)),
fTraceInfo() {}
virtual ~ResourceDataValue();
- void setData(const ResourceData *data) {
- resData = *data;
+ void setData(const ResourceData &data) {
+ pResData = &data;
+ }
+
+ void setValidLocaleDataEntry(UResourceDataEntry *entry) {
+ validLocaleDataEntry = entry;
}
void setResource(Resource r, ResourceTracer&& traceInfo) {
@@ -524,27 +532,28 @@ public:
fTraceInfo = traceInfo;
}
- const ResourceData &getData() const { return resData; }
- virtual UResType getType() const;
- virtual const UChar *getString(int32_t &length, UErrorCode &errorCode) const;
- virtual const UChar *getAliasString(int32_t &length, UErrorCode &errorCode) const;
- virtual int32_t getInt(UErrorCode &errorCode) const;
- virtual uint32_t getUInt(UErrorCode &errorCode) const;
- virtual const int32_t *getIntVector(int32_t &length, UErrorCode &errorCode) const;
- virtual const uint8_t *getBinary(int32_t &length, UErrorCode &errorCode) const;
- virtual ResourceArray getArray(UErrorCode &errorCode) const;
- virtual ResourceTable getTable(UErrorCode &errorCode) const;
- virtual UBool isNoInheritanceMarker() const;
+ const ResourceData &getData() const { return *pResData; }
+ UResourceDataEntry *getValidLocaleDataEntry() const { return validLocaleDataEntry; }
+ Resource getResource() const { return res; }
+ virtual UResType getType() const override;
+ virtual const UChar *getString(int32_t &length, UErrorCode &errorCode) const override;
+ virtual const UChar *getAliasString(int32_t &length, UErrorCode &errorCode) const override;
+ virtual int32_t getInt(UErrorCode &errorCode) const override;
+ virtual uint32_t getUInt(UErrorCode &errorCode) const override;
+ virtual const int32_t *getIntVector(int32_t &length, UErrorCode &errorCode) const override;
+ virtual const uint8_t *getBinary(int32_t &length, UErrorCode &errorCode) const override;
+ virtual ResourceArray getArray(UErrorCode &errorCode) const override;
+ virtual ResourceTable getTable(UErrorCode &errorCode) const override;
+ virtual UBool isNoInheritanceMarker() const override;
virtual int32_t getStringArray(UnicodeString *dest, int32_t capacity,
- UErrorCode &errorCode) const;
+ UErrorCode &errorCode) const override;
virtual int32_t getStringArrayOrStringAsArray(UnicodeString *dest, int32_t capacity,
- UErrorCode &errorCode) const;
- virtual UnicodeString getStringOrFirstOfArray(UErrorCode &errorCode) const;
+ UErrorCode &errorCode) const override;
+ virtual UnicodeString getStringOrFirstOfArray(UErrorCode &errorCode) const override;
private:
- // TODO(ICU-20769): If UResourceBundle.fResData becomes a pointer,
- // then remove this value field again and just store a pResData pointer.
- ResourceData resData;
+ const ResourceData *pResData;
+ UResourceDataEntry *validLocaleDataEntry;
Resource res;
ResourceTracer fTraceInfo;
};
diff --git a/Build/source/libs/icu/icu-src/source/common/uresimp.h b/Build/source/libs/icu/icu-src/source/common/uresimp.h
index 69d82566fe0..4ac09bd8c4d 100644
--- a/Build/source/libs/icu/icu-src/source/common/uresimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/uresimp.h
@@ -31,7 +31,6 @@
#define MAGIC2 19641227
#define URES_MAX_ALIAS_LEVEL 256
-#define URES_MAX_BUFFER_SIZE 256
#define EMPTY_SET 0x2205
@@ -61,16 +60,27 @@ struct UResourceDataEntry {
#define RES_PATH_SEPARATOR '/'
#define RES_PATH_SEPARATOR_S "/"
+U_CAPI void U_EXPORT2 ures_initStackObject(UResourceBundle* resB);
+
+#ifdef __cplusplus
+
struct UResourceBundle {
const char *fKey; /*tag*/
+ /**
+ * The dataEntry for the actual locale in which this item lives.
+ * Used for accessing the item's data.
+ * Non-const pointer for reference counting via entryIncrease().
+ */
UResourceDataEntry *fData; /*for low-level access*/
char *fVersion;
- UResourceDataEntry *fTopLevelData; /* for getting the valid locale */
+ /**
+ * The dataEntry for the valid locale.
+ * Used for /LOCALE/path alias resolution that starts back from the valid locale,
+ * rather than from the actual locale of this item which might live in
+ * an ancestor bundle.
+ */
+ UResourceDataEntry *fValidLocaleDataEntry;
char *fResPath; /* full path to the resource: "zh_TW/CollationElements/Sequence" */
- // TODO(ICU-20769): Try to change the by-value fResData into a pointer,
- // with the struct in only one place for each bundle.
- // Also replace class ResourceDataValue.resData with a pResData pointer again.
- ResourceData fResData;
char fResBuf[RES_BUFSIZE];
int32_t fResPathLen;
Resource fRes;
@@ -81,13 +91,9 @@ struct UResourceBundle {
int32_t fIndex;
int32_t fSize;
- /*const UResourceBundle *fParentRes;*/ /* needed to get the actual locale for a child resource */
+ inline const ResourceData &getResData() const { return fData->fData; }
};
-U_CAPI void U_EXPORT2 ures_initStackObject(UResourceBundle* resB);
-
-#ifdef __cplusplus
-
U_NAMESPACE_BEGIN
/**
@@ -161,9 +167,6 @@ U_CFUNC const char* ures_getPath(const UResourceBundle* resB);
*/
U_CAPI UBool U_EXPORT2 ures_dumpCacheContents(void);
#endif
-/*U_CFUNC void ures_appendResPath(UResourceBundle *resB, const char* toAdd, int32_t lenToAdd);*/
-/*U_CFUNC void ures_setResPath(UResourceBundle *resB, const char* toAdd);*/
-/*U_CFUNC void ures_freeResPath(UResourceBundle *resB);*/
/* Candidates for export */
U_CFUNC UResourceBundle *ures_copyResb(UResourceBundle *r, const UResourceBundle *original, UErrorCode *status);
@@ -261,7 +264,6 @@ ures_getByKeyWithFallback(const UResourceBundle *resB,
UResourceBundle *fillIn,
UErrorCode *status);
-
/**
* Get a String with multi-level fallback. Normally only the top level resources will
* fallback to its parent. This performs fallback on subresources. For example, when a table
@@ -270,11 +272,13 @@ ures_getByKeyWithFallback(const UResourceBundle *resB,
* function can perform fallback on the sub-resources of the table.
* @param resB a resource
* @param inKey a key associated with the requested resource
+ * @param len if not NULL, used to return the length of the string
* @param status: fills in the outgoing error code
* could be <TT>U_MISSING_RESOURCE_ERROR</TT> if the key is not found
* could be a non-failing error
* e.g.: <TT>U_USING_FALLBACK_WARNING</TT>,<TT>U_USING_DEFAULT_WARNING </TT>
- * @return a pointer to a UResourceBundle struct. If fill in param was NULL, caller must delete it
+ * @return returns a pointer to a zero-terminated UChar array which lives in a
+ * memory mapped/DLL file.
*/
U_CAPI const UChar* U_EXPORT2
ures_getStringByKeyWithFallback(const UResourceBundle *resB,
@@ -289,10 +293,39 @@ ures_getValueWithFallback(const UResourceBundle *bundle, const char *path,
UResourceBundle *tempFillIn,
icu::ResourceDataValue &value, UErrorCode &errorCode);
+/**
+ * Locates the resource specified by `path` in the resource bundle specified by `bundle` (performing any
+ * necessary fallback and following any aliases) and calls the specified `sink`'s `put()` method with that
+ * resource. Then walks the bundle's parent chain, calling `put()` on the sink for each item in the
+ * parent chain.
+ * @param bundle The bundle to search
+ * @param path The path of the desired resource
+ * @param sink A `ResourceSink` that gets called for each resource in the parent chain
+ * @param errorCode The error code
+ */
U_CAPI void U_EXPORT2
ures_getAllItemsWithFallback(const UResourceBundle *bundle, const char *path,
icu::ResourceSink &sink, UErrorCode &errorCode);
+/**
+ * Locates the resource specified by `path` in the resource bundle specified by `bundle` (performing any
+ * necessary fallback and following any aliases) and, if the resource is a table resource, iterates over its
+ * immediate child resources (again, following any aliases to get the individual resource values), and calls the specified
+ * `sink`'s `put()` method for each child resource (passing it that resource's key and either its actual value or,
+ * if that value is an alias, the value you get by following the alias). Then walks back over the bundle's
+ * parent chain, similarly iterating over each parent table resource's child resources.
+ * Does not descend beyond one level of table children.
+ * @param bundle The bundle to search
+ * @param path The path of the desired resource
+ * @param sink A `ResourceSink` that gets called for each child resource of the specified resource (and each child
+ * of the resources in its parent chain).
+ * @param errorCode The error code. This will be U_RESOURCE_TYPE_MISMATCH if the resource the caller
+ * is asking for isn't a table resource.
+ */
+U_CAPI void U_EXPORT2
+ures_getAllChildrenWithFallback(const UResourceBundle *bundle, const char *path,
+ icu::ResourceSink &sink, UErrorCode &errorCode);
+
#endif /* __cplusplus */
/**
@@ -326,7 +359,7 @@ ures_getVersionNumberInternal(const UResourceBundle *resourceBundle);
* you to query for the real locale of the resource. For example, if you requested
* "en_US_CALIFORNIA" and only "en_US" bundle exists, "en_US" will be returned.
* For subresources, the locale where this resource comes from will be returned.
- * If fallback has occured, getLocale will reflect this.
+ * If fallback has occurred, getLocale will reflect this.
*
* This internal version avoids deprecated-warnings in ICU code.
*
diff --git a/Build/source/libs/icu/icu-src/source/common/usc_impl.h b/Build/source/libs/icu/icu-src/source/common/usc_impl.h
index 44899649d4c..cd76990501a 100644
--- a/Build/source/libs/icu/icu-src/source/common/usc_impl.h
+++ b/Build/source/libs/icu/icu-src/source/common/usc_impl.h
@@ -33,7 +33,7 @@
*
* Scripts are chosen based on the <code>UScriptCode</code> enumeration.
* No attempt is made to combine related scripts into a single run. In
- * particular, Hiragana, Katakana, and Han characters will appear in seperate
+ * particular, Hiragana, Katakana, and Han characters will appear in separate
* runs.
* Here is an example of how to iterate over script runs:
diff --git a/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp b/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
index 25d287b57a3..07bae251ea3 100644
--- a/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
@@ -237,6 +237,11 @@ const int32_t SCRIPT_PROPS[] = {
0x1190C | EXCLUSION, // Diak
0x18C65 | EXCLUSION | LB_LETTERS, // Kits
0x10E88 | EXCLUSION | RTL, // Yezi
+ 0x12FE5 | EXCLUSION, // Cpmn
+ 0x10F7C | EXCLUSION | RTL, // Ougr
+ 0x16ABC | EXCLUSION, // Tnsa
+ 0x1E290 | EXCLUSION, // Toto
+ 0x10582 | EXCLUSION | CASED, // Vith
// End copy-paste from parsescriptmetadata.py
};
diff --git a/Build/source/libs/icu/icu-src/source/common/uset.cpp b/Build/source/libs/icu/icu-src/source/common/uset.cpp
index eae7981d52f..871a5d8986f 100644
--- a/Build/source/libs/icu/icu-src/source/common/uset.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uset.cpp
@@ -117,6 +117,12 @@ uset_removeString(USet* set, const UChar* str, int32_t strLen) {
}
U_CAPI void U_EXPORT2
+uset_removeAllCodePoints(USet *set, const UChar *str, int32_t length) {
+ UnicodeString s(length==-1, str, length);
+ ((UnicodeSet*) set)->UnicodeSet::removeAll(s);
+}
+
+U_CAPI void U_EXPORT2
uset_removeAll(USet* set, const USet* remove) {
((UnicodeSet*) set)->UnicodeSet::removeAll(*(const UnicodeSet*)remove);
}
@@ -127,6 +133,18 @@ uset_retain(USet* set, UChar32 start, UChar32 end) {
}
U_CAPI void U_EXPORT2
+uset_retainString(USet *set, const UChar *str, int32_t length) {
+ UnicodeString s(length==-1, str, length);
+ ((UnicodeSet*) set)->UnicodeSet::retain(s);
+}
+
+U_CAPI void U_EXPORT2
+uset_retainAllCodePoints(USet *set, const UChar *str, int32_t length) {
+ UnicodeString s(length==-1, str, length);
+ ((UnicodeSet*) set)->UnicodeSet::retainAll(s);
+}
+
+U_CAPI void U_EXPORT2
uset_retainAll(USet* set, const USet* retain) {
((UnicodeSet*) set)->UnicodeSet::retainAll(*(const UnicodeSet*)retain);
}
@@ -142,6 +160,23 @@ uset_complement(USet* set) {
}
U_CAPI void U_EXPORT2
+uset_complementRange(USet *set, UChar32 start, UChar32 end) {
+ ((UnicodeSet*) set)->UnicodeSet::complement(start, end);
+}
+
+U_CAPI void U_EXPORT2
+uset_complementString(USet *set, const UChar *str, int32_t length) {
+ UnicodeString s(length==-1, str, length);
+ ((UnicodeSet*) set)->UnicodeSet::complement(s);
+}
+
+U_CAPI void U_EXPORT2
+uset_complementAllCodePoints(USet *set, const UChar *str, int32_t length) {
+ UnicodeString s(length==-1, str, length);
+ ((UnicodeSet*) set)->UnicodeSet::complementAll(s);
+}
+
+U_CAPI void U_EXPORT2
uset_complementAll(USet* set, const USet* complement) {
((UnicodeSet*) set)->UnicodeSet::complementAll(*(const UnicodeSet*)complement);
}
@@ -162,6 +197,11 @@ uset_isEmpty(const USet* set) {
}
U_CAPI UBool U_EXPORT2
+uset_hasStrings(const USet* set) {
+ return ((const UnicodeSet*) set)->UnicodeSet::hasStrings();
+}
+
+U_CAPI UBool U_EXPORT2
uset_contains(const USet* set, UChar32 c) {
return ((const UnicodeSet*) set)->UnicodeSet::contains(c);
}
@@ -262,6 +302,11 @@ private:
U_NAMESPACE_END
U_CAPI int32_t U_EXPORT2
+uset_getRangeCount(const USet *set) {
+ return ((const UnicodeSet *)set)->UnicodeSet::getRangeCount();
+}
+
+U_CAPI int32_t U_EXPORT2
uset_getItemCount(const USet* uset) {
const UnicodeSet& set = *(const UnicodeSet*)uset;
return set.getRangeCount() + USetAccess::getStringCount(set);
@@ -295,11 +340,6 @@ uset_getItem(const USet* uset, int32_t itemIndex,
}
}
-//U_CAPI int32_t U_EXPORT2
-//uset_getRangeCount(const USet* set) {
-// return ((const UnicodeSet*) set)->getRangeCount();
-//}
-//
//U_CAPI UBool U_EXPORT2
//uset_getRange(const USet* set, int32_t rangeIndex,
// UChar32* pStart, UChar32* pEnd) {
@@ -320,7 +360,7 @@ uset_getItem(const USet* uset, int32_t itemIndex,
* therefore all BMP code points precede all supplementary code points.
*
* Store each supplementary code point in 2 16-bit units,
- * simply with higher-then-lower 16-bit halfs.
+ * simply with higher-then-lower 16-bit halves.
*
* Precede the entire list with the length.
* If there are supplementary code points, then set bit 15 in the length
diff --git a/Build/source/libs/icu/icu-src/source/common/usprep.cpp b/Build/source/libs/icu/icu-src/source/common/usprep.cpp
index 8351a773706..41a1f56c773 100644
--- a/Build/source/libs/icu/icu-src/source/common/usprep.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/usprep.cpp
@@ -282,8 +282,8 @@ loadData(UStringPrepProfile* profile,
udata_close(dataMemory);
return FALSE;
}
- if( normUniVer < sprepUniVer && /* the Unicode version of SPREP file must be less than the Unicode Vesion of the normalization data */
- normUniVer < normCorrVer && /* the Unicode version of the NormalizationCorrections.txt file should be less than the Unicode Vesion of the normalization data */
+ if( normUniVer < sprepUniVer && /* the Unicode version of SPREP file must be less than the Unicode Version of the normalization data */
+ normUniVer < normCorrVer && /* the Unicode version of the NormalizationCorrections.txt file should be less than the Unicode Version of the normalization data */
((profile->indexes[_SPREP_OPTIONS] & _SPREP_NORMALIZATION_ON) > 0) /* normalization turned on*/
){
*errorCode = U_INVALID_FORMAT_ERROR;
@@ -575,7 +575,7 @@ usprep_map( const UStringPrepProfile* profile,
}
}else if(type==USPREP_DELETE){
- // just consume the codepoint and contine
+ // just consume the codepoint and continue
continue;
}
//copy the code point into destination
diff --git a/Build/source/libs/icu/icu-src/source/common/ustack.cpp b/Build/source/libs/icu/icu-src/source/common/ustack.cpp
index fb314b0ebe5..8d9e475374d 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustack.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ustack.cpp
@@ -37,10 +37,9 @@ UStack::~UStack() {}
void* UStack::pop(void) {
int32_t n = size() - 1;
- void* result = 0;
+ void* result = nullptr;
if (n >= 0) {
- result = elementAt(n);
- removeElementAt(n);
+ result = orphanElementAt(n);
}
return result;
}
diff --git a/Build/source/libs/icu/icu-src/source/common/ustr_titlecase_brkiter.cpp b/Build/source/libs/icu/icu-src/source/common/ustr_titlecase_brkiter.cpp
index 457905eb60d..3002d64e34f 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustr_titlecase_brkiter.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ustr_titlecase_brkiter.cpp
@@ -44,7 +44,7 @@ class WholeStringBreakIterator : public BreakIterator {
public:
WholeStringBreakIterator() : BreakIterator(), length(0) {}
~WholeStringBreakIterator() U_OVERRIDE;
- UBool operator==(const BreakIterator&) const U_OVERRIDE;
+ bool operator==(const BreakIterator&) const U_OVERRIDE;
WholeStringBreakIterator *clone() const U_OVERRIDE;
static UClassID U_EXPORT2 getStaticClassID();
UClassID getDynamicClassID() const U_OVERRIDE;
@@ -73,11 +73,11 @@ private:
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(WholeStringBreakIterator)
WholeStringBreakIterator::~WholeStringBreakIterator() {}
-UBool WholeStringBreakIterator::operator==(const BreakIterator&) const { return FALSE; }
+bool WholeStringBreakIterator::operator==(const BreakIterator&) const { return false; }
WholeStringBreakIterator *WholeStringBreakIterator::clone() const { return nullptr; }
CharacterIterator &WholeStringBreakIterator::getText() const {
- UPRV_UNREACHABLE; // really should not be called
+ UPRV_UNREACHABLE_EXIT; // really should not be called
}
UText *WholeStringBreakIterator::getUText(UText * /*fillIn*/, UErrorCode &errorCode) const {
if (U_SUCCESS(errorCode)) {
@@ -100,7 +100,7 @@ void WholeStringBreakIterator::setText(UText *text, UErrorCode &errorCode) {
}
}
void WholeStringBreakIterator::adoptText(CharacterIterator*) {
- UPRV_UNREACHABLE; // should not be called
+ UPRV_UNREACHABLE_EXIT; // should not be called
}
int32_t WholeStringBreakIterator::first() { return 0; }
diff --git a/Build/source/libs/icu/icu-src/source/common/ustr_wcs.cpp b/Build/source/libs/icu/icu-src/source/common/ustr_wcs.cpp
index e9f278e9691..1a6ea2375d0 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustr_wcs.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ustr_wcs.cpp
@@ -106,7 +106,7 @@ _strToWCS(wchar_t *dest,
if(*pErrorCode==U_BUFFER_OVERFLOW_ERROR){
tempBuf = saveBuf;
- /* we dont have enough room on the stack grow the buffer */
+ /* we don't have enough room on the stack grow the buffer */
int32_t newCapacity = 2 * srcLength;
if(newCapacity <= tempBufCapacity) {
newCapacity = _BUFFER_CAPACITY_MULTIPLIER * tempBufCapacity;
@@ -132,7 +132,7 @@ _strToWCS(wchar_t *dest,
/* done with conversion null terminate the char buffer */
if(count>=tempBufCapacity){
tempBuf = saveBuf;
- /* we dont have enough room on the stack grow the buffer */
+ /* we don't have enough room on the stack grow the buffer */
if(!u_growAnyBufferFromStatic(stackBuffer,(void**) &tempBuf, &tempBufCapacity,
count+1, count, 1)) {
goto cleanup;
@@ -334,7 +334,7 @@ _strFromWCS( UChar *dest,
}else{
/* here the source is not null terminated
- * so it may have nulls embeded and we need to
+ * so it may have nulls embedded and we need to
* do some extra processing
*/
int32_t remaining =cStackCap;
@@ -364,7 +364,7 @@ _strFromWCS( UChar *dest,
}
/* we have found a null so convert the
- * chunk from begining of non-null char to null
+ * chunk from beginning of non-null char to null
*/
retVal = uprv_wcstombs(pCSrc,pSrc,remaining);
@@ -387,7 +387,7 @@ _strFromWCS( UChar *dest,
* null terminate it and convert wchar_ts to chars
*/
if(nulLen >= _STACK_BUFFER_CAPACITY){
- /* Should rarely occcur */
+ /* Should rarely occur */
/* allocate new buffer buffer */
pWStack =(wchar_t*) uprv_malloc(sizeof(wchar_t) * (nulLen + 1));
if(pWStack==NULL){
diff --git a/Build/source/libs/icu/icu-src/source/common/ustrcase.cpp b/Build/source/libs/icu/icu-src/source/common/ustrcase.cpp
index 618e847c65d..36b19e75f2d 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustrcase.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ustrcase.cpp
@@ -544,7 +544,7 @@ U_NAMESPACE_BEGIN
namespace GreekUpper {
// Data generated by prototype code, see
-// http://site.icu-project.org/design/case/greek-upper
+// https://icu.unicode.org/design/case/greek-upper
// TODO: Move this data into ucase.icu.
static const uint16_t data0370[] = {
// U+0370..03FF
diff --git a/Build/source/libs/icu/icu-src/source/common/ustrenum.cpp b/Build/source/libs/icu/icu-src/source/common/ustrenum.cpp
index ed23eaa232e..08a1bf29c3a 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustrenum.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ustrenum.cpp
@@ -120,12 +120,12 @@ StringEnumeration::setChars(const char *s, int32_t length, UErrorCode &status) {
return NULL;
}
-UBool
+bool
StringEnumeration::operator==(const StringEnumeration& that)const {
return typeid(*this) == typeid(that);
}
-UBool
+bool
StringEnumeration::operator!=(const StringEnumeration& that)const {
return !operator==(that);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/ustrenum.h b/Build/source/libs/icu/icu-src/source/common/ustrenum.h
index a82162e2bde..3703dedb97d 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustrenum.h
+++ b/Build/source/libs/icu/icu-src/source/common/ustrenum.h
@@ -47,9 +47,9 @@ public:
* @param status the error code.
* @return number of elements in the iterator.
*/
- virtual int32_t count(UErrorCode& status) const;
+ virtual int32_t count(UErrorCode& status) const override;
- virtual const char* next(int32_t *resultLength, UErrorCode& status);
+ virtual const char* next(int32_t *resultLength, UErrorCode& status) override;
/**
* Returns the next element a UnicodeString*. If there are no
@@ -57,18 +57,18 @@ public:
* @param status the error code.
* @return a pointer to the string, or NULL.
*/
- virtual const UnicodeString* snext(UErrorCode& status);
+ virtual const UnicodeString* snext(UErrorCode& status) override;
/**
* Resets the iterator.
* @param status the error code.
*/
- virtual void reset(UErrorCode& status);
+ virtual void reset(UErrorCode& status) override;
/**
* ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU4C "poor man's RTTI", returns a UClassID for this ICU class.
diff --git a/Build/source/libs/icu/icu-src/source/common/ustring.cpp b/Build/source/libs/icu/icu-src/source/common/ustring.cpp
index bba2d45c4e8..84772563891 100644
--- a/Build/source/libs/icu/icu-src/source/common/ustring.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/ustring.cpp
@@ -755,7 +755,7 @@ uprv_strCompare(const UChar *s1, int32_t length1,
length2=u_strlen(s2);
}
- /* limit1=start1+min(lenght1, length2) */
+ /* limit1=start1+min(length1, length2) */
if(length1<length2) {
lengthResult=-1;
limit1=start1+length1;
@@ -1185,23 +1185,23 @@ static const UChar UNESCAPE_MAP[] = {
enum { UNESCAPE_MAP_LENGTH = UPRV_LENGTHOF(UNESCAPE_MAP) };
/* Convert one octal digit to a numeric value 0..7, or -1 on failure */
-static int8_t _digit8(UChar c) {
- if (c >= 0x0030 && c <= 0x0037) {
- return (int8_t)(c - 0x0030);
+static int32_t _digit8(UChar c) {
+ if (c >= u'0' && c <= u'7') {
+ return c - u'0';
}
return -1;
}
/* Convert one hex digit to a numeric value 0..F, or -1 on failure */
-static int8_t _digit16(UChar c) {
- if (c >= 0x0030 && c <= 0x0039) {
- return (int8_t)(c - 0x0030);
+static int32_t _digit16(UChar c) {
+ if (c >= u'0' && c <= u'9') {
+ return c - u'0';
}
- if (c >= 0x0041 && c <= 0x0046) {
- return (int8_t)(c - (0x0041 - 10));
+ if (c >= u'A' && c <= u'F') {
+ return c - (u'A' - 10);
}
- if (c >= 0x0061 && c <= 0x0066) {
- return (int8_t)(c - (0x0061 - 10));
+ if (c >= u'a' && c <= u'f') {
+ return c - (u'a' - 10);
}
return -1;
}
@@ -1216,14 +1216,13 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
void *context) {
int32_t start = *offset;
- UChar c;
+ UChar32 c;
UChar32 result = 0;
int8_t n = 0;
int8_t minDig = 0;
int8_t maxDig = 0;
int8_t bitsPerDigit = 4;
- int8_t dig;
- int32_t i;
+ int32_t dig;
UBool braces = FALSE;
/* Check that offset is in range */
@@ -1236,15 +1235,15 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
/* Convert hexadecimal and octal escapes */
switch (c) {
- case 0x0075 /*'u'*/:
+ case u'u':
minDig = maxDig = 4;
break;
- case 0x0055 /*'U'*/:
+ case u'U':
minDig = maxDig = 8;
break;
- case 0x0078 /*'x'*/:
+ case u'x':
minDig = 1;
- if (*offset < length && charAt(*offset, context) == 0x7B /*{*/) {
+ if (*offset < length && charAt(*offset, context) == u'{') {
++(*offset);
braces = TRUE;
maxDig = 8;
@@ -1266,7 +1265,7 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
if (minDig != 0) {
while (*offset < length && n < maxDig) {
c = charAt(*offset, context);
- dig = (int8_t)((bitsPerDigit == 3) ? _digit8(c) : _digit16(c));
+ dig = (bitsPerDigit == 3) ? _digit8(c) : _digit16(c);
if (dig < 0) {
break;
}
@@ -1278,7 +1277,7 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
goto err;
}
if (braces) {
- if (c != 0x7D /*}*/) {
+ if (c != u'}') {
goto err;
}
++(*offset);
@@ -1293,16 +1292,15 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
if (*offset < length && U16_IS_LEAD(result)) {
int32_t ahead = *offset + 1;
c = charAt(*offset, context);
- if (c == 0x5C /*'\\'*/ && ahead < length) {
- // Calling u_unescapeAt recursively may cause a stack overflow if
- // we have repeated surrogate lead after that. Limit the
- // length to 5 ('u' and 4 hex) after ahead.
- int32_t tailLimit = ahead + 5;
+ if (c == u'\\' && ahead < length) {
+ // Calling ourselves recursively may cause a stack overflow if
+ // we have repeated escaped lead surrogates.
+ // Limit the length to 11 ("x{0000DFFF}") after ahead.
+ int32_t tailLimit = ahead + 11;
if (tailLimit > length) {
tailLimit = length;
}
- c = (UChar) u_unescapeAt(charAt, &ahead, tailLimit,
- context);
+ c = u_unescapeAt(charAt, &ahead, tailLimit, context);
}
if (U16_IS_TRAIL(c)) {
*offset = ahead;
@@ -1313,7 +1311,7 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
}
/* Convert C-style escapes in table */
- for (i=0; i<UNESCAPE_MAP_LENGTH; i+=2) {
+ for (int32_t i=0; i<UNESCAPE_MAP_LENGTH; i+=2) {
if (c == UNESCAPE_MAP[i]) {
return UNESCAPE_MAP[i+1];
} else if (c < UNESCAPE_MAP[i]) {
@@ -1322,13 +1320,13 @@ u_unescapeAt(UNESCAPE_CHAR_AT charAt,
}
/* Map \cX to control-X: X & 0x1F */
- if (c == 0x0063 /*'c'*/ && *offset < length) {
+ if (c == u'c' && *offset < length) {
c = charAt((*offset)++, context);
if (U16_IS_LEAD(c) && *offset < length) {
UChar c2 = charAt(*offset, context);
if (U16_IS_TRAIL(c2)) {
++(*offset);
- c = (UChar) U16_GET_SUPPLEMENTARY(c, c2); /* [sic] */
+ c = U16_GET_SUPPLEMENTARY(c, c2);
}
}
return 0x1F & c;
diff --git a/Build/source/libs/icu/icu-src/source/common/utext.cpp b/Build/source/libs/icu/icu-src/source/common/utext.cpp
index e95632dfade..ec79700ca81 100644
--- a/Build/source/libs/icu/icu-src/source/common/utext.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/utext.cpp
@@ -382,7 +382,7 @@ utext_previous32From(UText *ut, int64_t index) {
//
UChar32 cPrev; // The character preceding cCurr, which is what we will return.
- // Address the chunk containg the position preceding the incoming index
+ // Address the chunk containing the position preceding the incoming index
// A tricky edge case:
// We try to test the requested native index against the chunkNativeStart to determine
// whether the character preceding the one at the index is in the current chunk.
@@ -569,7 +569,7 @@ enum {
struct ExtendedUText {
UText ut;
- max_align_t extension;
+ std::max_align_t extension;
};
static const UText emptyText = UTEXT_INITIALIZER;
@@ -584,7 +584,7 @@ utext_setup(UText *ut, int32_t extraSpace, UErrorCode *status) {
// We need to heap-allocate storage for the new UText
int32_t spaceRequired = sizeof(UText);
if (extraSpace > 0) {
- spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(max_align_t);
+ spaceRequired = sizeof(ExtendedUText) + extraSpace - sizeof(std::max_align_t);
}
ut = (UText *)uprv_malloc(spaceRequired);
if (ut == NULL) {
@@ -689,7 +689,7 @@ utext_close(UText *ut) {
}
// Zero out function table of the closed UText. This is a defensive move,
- // inteded to cause applications that inadvertantly use a closed
+ // intended to cause applications that inadvertently use a closed
// utext to crash with null pointer errors.
ut->pFuncs = NULL;
@@ -894,7 +894,7 @@ struct UTF8Buf {
// one for a supplementary starting in the last normal position,
// and one for an entry for the buffer limit position.
uint8_t mapToUChars[UTF8_TEXT_CHUNK_SIZE*3+6]; // Map native offset from bufNativeStart to
- // correspoding offset in filled part of buf.
+ // corresponding offset in filled part of buf.
int32_t align;
};
@@ -1046,7 +1046,7 @@ utf8TextAccess(UText *ut, int64_t index, UBool forward) {
//
// Dispatch to the appropriate action for a
- // Backwards Diretion iteration request.
+ // Backwards Direction iteration request.
//
if (ix==ut->chunkNativeStart) {
// Check for normal sequential iteration cases first.
@@ -1359,7 +1359,7 @@ fillReverse:
int32_t sIx = srcIx; // ix of last byte of multi-byte u8 char
// Get the full character from the UTF8 string.
- // use code derived from tbe macros in utf8.h
+ // use code derived from the macros in utf8.h
// Leaves srcIx pointing at the first byte of the UTF-8 char.
//
c=utf8_prevCharSafeBody(s8, 0, &srcIx, c, -3);
@@ -1545,7 +1545,7 @@ utf8TextMapOffsetToNative(const UText *ut) {
}
//
-// Map a native index to the corrsponding chunk offset
+// Map a native index to the corresponding chunk offset
//
static int32_t U_CALLCONV
utf8TextMapIndexToUTF16(const UText *ut, int64_t index64) {
@@ -1570,7 +1570,7 @@ utf8TextClone(UText *dest, const UText *src, UBool deep, UErrorCode *status)
// For deep clones, make a copy of the string.
// The copied storage is owned by the newly created clone.
//
- // TODO: There is an isssue with using utext_nativeLength().
+ // TODO: There is an issue with using utext_nativeLength().
// That function is non-const in cases where the input was NUL terminated
// and the length has not yet been determined.
// This function (clone()) is const.
@@ -2394,9 +2394,9 @@ ucstrTextClose(UText *ut) {
static int64_t U_CALLCONV
ucstrTextLength(UText *ut) {
if (ut->a < 0) {
- // null terminated, we don't yet know the length. Scan for it.
+ // null terminated, we don't yet know the length. Scan for it.
// Access is not convenient for doing this
- // because the current interation postion can't be changed.
+ // because the current iteration position can't be changed.
const UChar *str = (const UChar *)ut->context;
for (;;) {
if (str[ut->chunkNativeLimit] == 0) {
diff --git a/Build/source/libs/icu/icu-src/source/common/util.cpp b/Build/source/libs/icu/icu-src/source/common/util.cpp
index 86e5c791bad..f3421722599 100644
--- a/Build/source/libs/icu/icu-src/source/common/util.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/util.cpp
@@ -65,38 +65,52 @@ UnicodeString& ICU_Utility::appendNumber(UnicodeString& result, int32_t n,
return result;
}
-/**
- * Return true if the character is NOT printable ASCII.
- */
UBool ICU_Utility::isUnprintable(UChar32 c) {
return !(c >= 0x20 && c <= 0x7E);
}
-/**
- * Escape unprintable characters using \uxxxx notation for U+0000 to
- * U+FFFF and \Uxxxxxxxx for U+10000 and above. If the character is
- * printable ASCII, then do nothing and return FALSE. Otherwise,
- * append the escaped notation and return TRUE.
- */
+UBool ICU_Utility::shouldAlwaysBeEscaped(UChar32 c) {
+ if (c < 0x20) {
+ return true; // C0 control codes
+ } else if (c <= 0x7e) {
+ return false; // printable ASCII
+ } else if (c <= 0x9f) {
+ return true; // C1 control codes
+ } else if (c < 0xd800) {
+ return false; // most of the BMP
+ } else if (c <= 0xdfff || (0xfdd0 <= c && c <= 0xfdef) || (c & 0xfffe) == 0xfffe) {
+ return true; // surrogate or noncharacter code points
+ } else if (c <= 0x10ffff) {
+ return false; // all else
+ } else {
+ return true; // not a code point
+ }
+}
+
UBool ICU_Utility::escapeUnprintable(UnicodeString& result, UChar32 c) {
if (isUnprintable(c)) {
- result.append(BACKSLASH);
- if (c & ~0xFFFF) {
- result.append(UPPER_U);
- result.append(DIGITS[0xF&(c>>28)]);
- result.append(DIGITS[0xF&(c>>24)]);
- result.append(DIGITS[0xF&(c>>20)]);
- result.append(DIGITS[0xF&(c>>16)]);
- } else {
- result.append(LOWER_U);
- }
- result.append(DIGITS[0xF&(c>>12)]);
- result.append(DIGITS[0xF&(c>>8)]);
- result.append(DIGITS[0xF&(c>>4)]);
- result.append(DIGITS[0xF&c]);
- return TRUE;
+ escape(result, c);
+ return true;
+ }
+ return false;
+}
+
+UnicodeString &ICU_Utility::escape(UnicodeString& result, UChar32 c) {
+ result.append(BACKSLASH);
+ if (c & ~0xFFFF) {
+ result.append(UPPER_U);
+ result.append(DIGITS[0xF&(c>>28)]);
+ result.append(DIGITS[0xF&(c>>24)]);
+ result.append(DIGITS[0xF&(c>>20)]);
+ result.append(DIGITS[0xF&(c>>16)]);
+ } else {
+ result.append(LOWER_U);
}
- return FALSE;
+ result.append(DIGITS[0xF&(c>>12)]);
+ result.append(DIGITS[0xF&(c>>8)]);
+ result.append(DIGITS[0xF&(c>>4)]);
+ result.append(DIGITS[0xF&c]);
+ return result;
}
/**
diff --git a/Build/source/libs/icu/icu-src/source/common/util.h b/Build/source/libs/icu/icu-src/source/common/util.h
index 9c3b76d9ed5..7e6d356899f 100644
--- a/Build/source/libs/icu/icu-src/source/common/util.h
+++ b/Build/source/libs/icu/icu-src/source/common/util.h
@@ -13,10 +13,10 @@
#ifndef ICU_UTIL_H
#define ICU_UTIL_H
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
+#include "charstr.h"
#include "unicode/unistr.h"
-
+#include "unicode/uobject.h"
+#include "unicode/utypes.h"
//--------------------------------------------------------------------
// class ICU_Utility
// i18n utility functions, scoped into the class ICU_Utility.
@@ -55,14 +55,17 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s
/**
* Return true if the character is NOT printable ASCII.
- *
- * This method should really be in UnicodeString (or similar). For
- * now, we implement it here and share it with friend classes.
+ * The tab, newline and linefeed characters are considered unprintable.
*/
static UBool isUnprintable(UChar32 c);
/**
- * Escape unprintable characters using \uxxxx notation for U+0000 to
+ * @return true for control codes and for surrogate and noncharacter code points
+ */
+ static UBool shouldAlwaysBeEscaped(UChar32 c);
+
+ /**
+ * Escapes one unprintable code point using \uxxxx notation for U+0000 to
* U+FFFF and \Uxxxxxxxx for U+10000 and above. If the character is
* printable ASCII, then do nothing and return false. Otherwise,
* append the escaped notation and return true.
@@ -70,6 +73,13 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s
static UBool escapeUnprintable(UnicodeString& result, UChar32 c);
/**
+ * Escapes one code point using \uxxxx notation
+ * for U+0000 to U+FFFF and \Uxxxxxxxx for U+10000 and above.
+ * @return result
+ */
+ static UnicodeString &escape(UnicodeString& result, UChar32 c);
+
+ /**
* Returns the index of a character, ignoring quoted text.
* For example, in the string "abc'hide'h", the 'h' in "hide" will not be
* found by a search for 'h'.
@@ -199,7 +209,7 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s
* position. Return the identifier, or an empty string if there
* is no identifier.
* @param str the string to parse
- * @param pos INPUT-OUPUT parameter. On INPUT, pos is the
+ * @param pos INPUT-OUTPUT parameter. On INPUT, pos is the
* first character to examine. It must be less than str.length(),
* and it must not point to a whitespace character. That is, must
* have pos < str.length() and
diff --git a/Build/source/libs/icu/icu-src/source/common/util_props.cpp b/Build/source/libs/icu/icu-src/source/common/util_props.cpp
index 95a112bc912..d6ae052214c 100644
--- a/Build/source/libs/icu/icu-src/source/common/util_props.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/util_props.cpp
@@ -135,7 +135,7 @@ int32_t ICU_Utility::parsePattern(const UnicodeString& rule, int32_t pos, int32_
* position. Return the identifier, or an empty string if there
* is no identifier.
* @param str the string to parse
- * @param pos INPUT-OUPUT parameter. On INPUT, pos is the
+ * @param pos INPUT-OUTPUT parameter. On INPUT, pos is the
* first character to examine. It must be less than str.length(),
* and it must not point to a whitespace character. That is, must
* have pos < str.length(). On
diff --git a/Build/source/libs/icu/icu-src/source/common/utrace.cpp b/Build/source/libs/icu/icu-src/source/common/utrace.cpp
index c9815465947..dfd2062f31b 100644
--- a/Build/source/libs/icu/icu-src/source/common/utrace.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/utrace.cpp
@@ -67,7 +67,7 @@ utrace_exit(int32_t fnNumber, int32_t returnType, ...) {
fmt = gExitFmtPtrStatus;
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
va_start(args, returnType);
@@ -93,7 +93,7 @@ static void outputChar(char c, char *outBuf, int32_t *outIx, int32_t capacity, i
int32_t i;
/* Check whether a start of line indenting is needed. Three cases:
* 1. At the start of the first line (output index == 0).
- * 2. At the start of subsequent lines (preceeding char in buffer == '\n')
+ * 2. At the start of subsequent lines (preceding char in buffer == '\n')
* 3. When preflighting buffer len (buffer capacity is exceeded), when
* a \n is output. Ideally we wouldn't do the indent until the following char
* is received, but that won't work because there's no place to remember that
@@ -369,13 +369,13 @@ utrace_vformat(char *outBuf, int32_t capacity, int32_t indent, const char *fmt,
default:
/* %. in format string, where . is some character not in the set
* of recognized format chars. Just output it as if % wasn't there.
- * (Covers "%%" outputing a single '%')
+ * (Covers "%%" outputting a single '%')
*/
outputChar(fmtC, outBuf, &outIx, capacity, indent);
}
}
- outputChar(0, outBuf, &outIx, capacity, indent); /* Make sure that output is null terminated */
- return outIx + 1; /* outIx + 1 because outIx does not increment when outputing final null. */
+ outputChar(0, outBuf, &outIx, capacity, indent); /* Make sure that output is null terminated */
+ return outIx + 1; /* outIx + 1 because outIx does not increment when outputting final null. */
}
diff --git a/Build/source/libs/icu/icu-src/source/common/utracimp.h b/Build/source/libs/icu/icu-src/source/common/utracimp.h
index f32fe1db394..945540d25af 100644
--- a/Build/source/libs/icu/icu-src/source/common/utracimp.h
+++ b/Build/source/libs/icu/icu-src/source/common/utracimp.h
@@ -193,7 +193,7 @@ UPRV_BLOCK_MACRO_BEGIN { \
* Trace statement for each exit point of a function that has a UTRACE_ENTRY()
* statement, and that returns a value.
*
- * @param val The function's return value, int32_t or comatible type.
+ * @param val The function's return value, int32_t or compatible type.
*
* @internal
*/
diff --git a/Build/source/libs/icu/icu-src/source/common/uts46.cpp b/Build/source/libs/icu/icu-src/source/common/uts46.cpp
index f25b4e12f12..6f930703390 100644
--- a/Build/source/libs/icu/icu-src/source/common/uts46.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uts46.cpp
@@ -118,35 +118,35 @@ public:
virtual UnicodeString &
labelToASCII(const UnicodeString &label, UnicodeString &dest,
- IDNAInfo &info, UErrorCode &errorCode) const;
+ IDNAInfo &info, UErrorCode &errorCode) const override;
virtual UnicodeString &
labelToUnicode(const UnicodeString &label, UnicodeString &dest,
- IDNAInfo &info, UErrorCode &errorCode) const;
+ IDNAInfo &info, UErrorCode &errorCode) const override;
virtual UnicodeString &
nameToASCII(const UnicodeString &name, UnicodeString &dest,
- IDNAInfo &info, UErrorCode &errorCode) const;
+ IDNAInfo &info, UErrorCode &errorCode) const override;
virtual UnicodeString &
nameToUnicode(const UnicodeString &name, UnicodeString &dest,
- IDNAInfo &info, UErrorCode &errorCode) const;
+ IDNAInfo &info, UErrorCode &errorCode) const override;
virtual void
labelToASCII_UTF8(StringPiece label, ByteSink &dest,
- IDNAInfo &info, UErrorCode &errorCode) const;
+ IDNAInfo &info, UErrorCode &errorCode) const override;
virtual void
labelToUnicodeUTF8(StringPiece label, ByteSink &dest,
- IDNAInfo &info, UErrorCode &errorCode) const;
+ IDNAInfo &info, UErrorCode &errorCode) const override;
virtual void
nameToASCII_UTF8(StringPiece name, ByteSink &dest,
- IDNAInfo &info, UErrorCode &errorCode) const;
+ IDNAInfo &info, UErrorCode &errorCode) const override;
virtual void
nameToUnicodeUTF8(StringPiece name, ByteSink &dest,
- IDNAInfo &info, UErrorCode &errorCode) const;
+ IDNAInfo &info, UErrorCode &errorCode) const override;
private:
UnicodeString &
diff --git a/Build/source/libs/icu/icu-src/source/common/uvector.cpp b/Build/source/libs/icu/icu-src/source/common/uvector.cpp
index cf19edf646f..4da8b864e1b 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvector.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uvector.cpp
@@ -17,59 +17,34 @@
U_NAMESPACE_BEGIN
-#define DEFAULT_CAPACITY 8
+constexpr int32_t DEFAULT_CAPACITY = 8;
/*
* Constants for hinting whether a key is an integer
* or a pointer. If a hint bit is zero, then the associated
* token is assumed to be an integer. This is needed for iSeries
*/
-#define HINT_KEY_POINTER (1)
-#define HINT_KEY_INTEGER (0)
+constexpr int8_t HINT_KEY_POINTER = 1;
+constexpr int8_t HINT_KEY_INTEGER = 0;
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(UVector)
UVector::UVector(UErrorCode &status) :
- count(0),
- capacity(0),
- elements(0),
- deleter(0),
- comparer(0)
-{
- _init(DEFAULT_CAPACITY, status);
+ UVector(nullptr, nullptr, DEFAULT_CAPACITY, status) {
}
UVector::UVector(int32_t initialCapacity, UErrorCode &status) :
- count(0),
- capacity(0),
- elements(0),
- deleter(0),
- comparer(0)
-{
- _init(initialCapacity, status);
+ UVector(nullptr, nullptr, initialCapacity, status) {
}
UVector::UVector(UObjectDeleter *d, UElementsAreEqual *c, UErrorCode &status) :
- count(0),
- capacity(0),
- elements(0),
- deleter(d),
- comparer(c)
-{
- _init(DEFAULT_CAPACITY, status);
+ UVector(d, c, DEFAULT_CAPACITY, status) {
}
UVector::UVector(UObjectDeleter *d, UElementsAreEqual *c, int32_t initialCapacity, UErrorCode &status) :
- count(0),
- capacity(0),
- elements(0),
deleter(d),
comparer(c)
{
- _init(initialCapacity, status);
-}
-
-void UVector::_init(int32_t initialCapacity, UErrorCode &status) {
if (U_FAILURE(status)) {
return;
}
@@ -78,7 +53,7 @@ void UVector::_init(int32_t initialCapacity, UErrorCode &status) {
initialCapacity = DEFAULT_CAPACITY;
}
elements = (UElement *)uprv_malloc(sizeof(UElement)*initialCapacity);
- if (elements == 0) {
+ if (elements == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
} else {
capacity = initialCapacity;
@@ -88,7 +63,7 @@ void UVector::_init(int32_t initialCapacity, UErrorCode &status) {
UVector::~UVector() {
removeAllElements();
uprv_free(elements);
- elements = 0;
+ elements = nullptr;
}
/**
@@ -100,7 +75,7 @@ void UVector::assign(const UVector& other, UElementAssigner *assign, UErrorCode
setSize(other.count, ec);
if (U_SUCCESS(ec)) {
for (int32_t i=0; i<other.count; ++i) {
- if (elements[i].pointer != 0 && deleter != 0) {
+ if (elements[i].pointer != nullptr && deleter != nullptr) {
(*deleter)(elements[i].pointer);
}
(*assign)(&elements[i], &other.elements[i]);
@@ -110,29 +85,47 @@ void UVector::assign(const UVector& other, UElementAssigner *assign, UErrorCode
}
// This only does something sensible if this object has a non-null comparer
-UBool UVector::operator==(const UVector& other) {
- int32_t i;
- if (count != other.count) return FALSE;
- if (comparer != NULL) {
+bool UVector::operator==(const UVector& other) const {
+ U_ASSERT(comparer != nullptr);
+ if (count != other.count) return false;
+ if (comparer != nullptr) {
// Compare using this object's comparer
- for (i=0; i<count; ++i) {
+ for (int32_t i=0; i<count; ++i) {
if (!(*comparer)(elements[i], other.elements[i])) {
- return FALSE;
+ return false;
}
}
}
- return TRUE;
+ return true;
+}
+
+// TODO: delete this function once all call sites have been migrated to the
+// new addElement().
+void UVector::addElementX(void* obj, UErrorCode &status) {
+ if (ensureCapacityX(count + 1, status)) {
+ elements[count++].pointer = obj;
+ }
}
void UVector::addElement(void* obj, UErrorCode &status) {
+ U_ASSERT(deleter == nullptr);
if (ensureCapacity(count + 1, status)) {
elements[count++].pointer = obj;
}
}
+void UVector::adoptElement(void* obj, UErrorCode &status) {
+ U_ASSERT(deleter != nullptr);
+ if (ensureCapacity(count + 1, status)) {
+ elements[count++].pointer = obj;
+ } else {
+ (*deleter)(obj);
+ }
+}
void UVector::addElement(int32_t elem, UErrorCode &status) {
+ U_ASSERT(deleter == nullptr); // Usage error. Mixing up ints and pointers.
if (ensureCapacity(count + 1, status)) {
- elements[count].pointer = NULL; // Pointers may be bigger than ints.
+ elements[count].pointer = nullptr; // Pointers may be bigger than ints.
elements[count].integer = elem;
count++;
}
@@ -140,49 +133,61 @@ void UVector::addElement(int32_t elem, UErrorCode &status) {
void UVector::setElementAt(void* obj, int32_t index) {
if (0 <= index && index < count) {
- if (elements[index].pointer != 0 && deleter != 0) {
+ if (elements[index].pointer != nullptr && deleter != nullptr) {
(*deleter)(elements[index].pointer);
}
elements[index].pointer = obj;
+ } else {
+ /* index out of range */
+ if (deleter != nullptr) {
+ (*deleter)(obj);
+ }
}
- /* else index out of range */
}
void UVector::setElementAt(int32_t elem, int32_t index) {
+ U_ASSERT(deleter == nullptr); // Usage error. Mixing up ints and pointers.
if (0 <= index && index < count) {
- if (elements[index].pointer != 0 && deleter != 0) {
- // TODO: this should be an error. mixing up ints and pointers.
- (*deleter)(elements[index].pointer);
- }
- elements[index].pointer = NULL;
+ elements[index].pointer = nullptr;
elements[index].integer = elem;
}
/* else index out of range */
}
void UVector::insertElementAt(void* obj, int32_t index, UErrorCode &status) {
- // must have 0 <= index <= count
- if (0 <= index && index <= count && ensureCapacity(count + 1, status)) {
- for (int32_t i=count; i>index; --i) {
- elements[i] = elements[i-1];
+ if (ensureCapacity(count + 1, status)) {
+ if (0 <= index && index <= count) {
+ for (int32_t i=count; i>index; --i) {
+ elements[i] = elements[i-1];
+ }
+ elements[index].pointer = obj;
+ ++count;
+ } else {
+ /* index out of range */
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
- elements[index].pointer = obj;
- ++count;
}
- /* else index out of range */
+ if (U_FAILURE(status) && deleter != nullptr) {
+ (*deleter)(obj);
+ }
}
void UVector::insertElementAt(int32_t elem, int32_t index, UErrorCode &status) {
+ U_ASSERT(deleter == nullptr); // Usage error. Mixing up ints and pointers.
// must have 0 <= index <= count
- if (0 <= index && index <= count && ensureCapacity(count + 1, status)) {
- for (int32_t i=count; i>index; --i) {
- elements[i] = elements[i-1];
+ if (ensureCapacity(count + 1, status)) {
+ if (0 <= index && index <= count) {
+ for (int32_t i=count; i>index; --i) {
+ elements[i] = elements[i-1];
+ }
+ elements[index].pointer = nullptr;
+ elements[index].integer = elem;
+ ++count;
+ } else {
+ /* index out of range */
+ status = U_ILLEGAL_ARGUMENT_ERROR;
}
- elements[index].pointer = NULL;
- elements[index].integer = elem;
- ++count;
}
- /* else index out of range */
}
void* UVector::elementAt(int32_t index) const {
@@ -237,7 +242,7 @@ UBool UVector::retainAll(const UVector& other) {
void UVector::removeElementAt(int32_t index) {
void* e = orphanElementAt(index);
- if (e != 0 && deleter != 0) {
+ if (e != nullptr && deleter != nullptr) {
(*deleter)(e);
}
}
@@ -252,9 +257,9 @@ UBool UVector::removeElement(void* obj) {
}
void UVector::removeAllElements(void) {
- if (deleter != 0) {
+ if (deleter != nullptr) {
for (int32_t i=0; i<count; ++i) {
- if (elements[i].pointer != 0) {
+ if (elements[i].pointer != nullptr) {
(*deleter)(elements[i].pointer);
}
}
@@ -268,7 +273,7 @@ UBool UVector::equals(const UVector &other) const {
if (this->count != other.count) {
return FALSE;
}
- if (comparer == 0) {
+ if (comparer == nullptr) {
for (i=0; i<count; i++) {
if (elements[i].pointer != other.elements[i].pointer) {
return FALSE;
@@ -300,19 +305,17 @@ int32_t UVector::indexOf(int32_t obj, int32_t startIndex) const {
return indexOf(key, startIndex, HINT_KEY_INTEGER);
}
-// This only works if this object has a non-null comparer
int32_t UVector::indexOf(UElement key, int32_t startIndex, int8_t hint) const {
- int32_t i;
- if (comparer != 0) {
- for (i=startIndex; i<count; ++i) {
+ if (comparer != nullptr) {
+ for (int32_t i=startIndex; i<count; ++i) {
if ((*comparer)(key, elements[i])) {
return i;
}
}
} else {
- for (i=startIndex; i<count; ++i) {
+ for (int32_t i=startIndex; i<count; ++i) {
/* Pointers are not always the same size as ints so to perform
- * a valid comparision we need to know whether we are being
+ * a valid comparison we need to know whether we are being
* provided an int or a pointer. */
if (hint & HINT_KEY_POINTER) {
if (key.pointer == elements[i].pointer) {
@@ -328,8 +331,8 @@ int32_t UVector::indexOf(UElement key, int32_t startIndex, int8_t hint) const {
return -1;
}
-UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) {
- if (minimumCapacity < 0) {
+UBool UVector::ensureCapacityX(int32_t minimumCapacity, UErrorCode &status) {
+ if (minimumCapacity < 0) {
status = U_ILLEGAL_ARGUMENT_ERROR;
return FALSE;
}
@@ -348,7 +351,7 @@ UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) {
return FALSE;
}
UElement* newElems = (UElement *)uprv_realloc(elements, sizeof(UElement)*newCap);
- if (newElems == NULL) {
+ if (newElems == nullptr) {
// We keep the original contents on the memory failure on realloc or bad minimumCapacity.
status = U_MEMORY_ALLOCATION_ERROR;
return FALSE;
@@ -359,30 +362,60 @@ UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) {
return TRUE;
}
+
+UBool UVector::ensureCapacity(int32_t minimumCapacity, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ if (minimumCapacity < 0) {
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return false;
+ }
+ if (capacity < minimumCapacity) {
+ if (capacity > (INT32_MAX - 1) / 2) { // integer overflow check
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return false;
+ }
+ int32_t newCap = capacity * 2;
+ if (newCap < minimumCapacity) {
+ newCap = minimumCapacity;
+ }
+ if (newCap > (int32_t)(INT32_MAX / sizeof(UElement))) { // integer overflow check
+ // We keep the original memory contents on bad minimumCapacity.
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ return false;
+ }
+ UElement* newElems = (UElement *)uprv_realloc(elements, sizeof(UElement)*newCap);
+ if (newElems == nullptr) {
+ // We keep the original contents on the memory failure on realloc or bad minimumCapacity.
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return false;
+ }
+ elements = newElems;
+ capacity = newCap;
+ }
+ return true;
+}
/**
* Change the size of this vector as follows: If newSize is smaller,
* then truncate the array, possibly deleting held elements for i >=
* newSize. If newSize is larger, grow the array, filling in new
- * slots with NULL.
+ * slots with nullptr.
*/
void UVector::setSize(int32_t newSize, UErrorCode &status) {
- int32_t i;
- if (newSize < 0) {
+ if (!ensureCapacity(newSize, status)) {
return;
}
if (newSize > count) {
- if (!ensureCapacity(newSize, status)) {
- return;
- }
UElement empty;
- empty.pointer = NULL;
+ empty.pointer = nullptr;
empty.integer = 0;
- for (i=count; i<newSize; ++i) {
+ for (int32_t i=count; i<newSize; ++i) {
elements[i] = empty;
}
} else {
/* Most efficient to count down */
- for (i=count-1; i>=newSize; --i) {
+ for (int32_t i=count-1; i>=newSize; --i) {
removeElementAt(i);
}
}
@@ -422,7 +455,7 @@ UElementsAreEqual *UVector::setComparer(UElementsAreEqual *d) {
* then 0 is returned and the vector is unchanged.
*/
void* UVector::orphanElementAt(int32_t index) {
- void* e = 0;
+ void* e = nullptr;
if (0 <= index && index < count) {
e = elements[index].pointer;
for (int32_t i=index; i<count-1; ++i) {
@@ -451,7 +484,8 @@ void UVector::sortedInsert(void* obj, UElementComparator *compare, UErrorCode& e
* be sorted already.
*/
void UVector::sortedInsert(int32_t obj, UElementComparator *compare, UErrorCode& ec) {
- UElement e;
+ U_ASSERT(deleter == nullptr);
+ UElement e {};
e.integer = obj;
sortedInsert(e, compare, ec);
}
@@ -463,10 +497,16 @@ void UVector::sortedInsert(UElement e, UElementComparator *compare, UErrorCode&
// tok && tok < b, where there is a 'virtual' elements[-1] always
// less than tok and a 'virtual' elements[count] always greater
// than tok.
+ if (!ensureCapacity(count + 1, ec)) {
+ if (deleter != nullptr) {
+ (*deleter)(e.pointer);
+ }
+ return;
+ }
int32_t min = 0, max = count;
while (min != max) {
int32_t probe = (min + max) / 2;
- int8_t c = (*compare)(elements[probe], e);
+ int32_t c = (*compare)(elements[probe], e);
if (c > 0) {
max = probe;
} else {
@@ -474,13 +514,11 @@ void UVector::sortedInsert(UElement e, UElementComparator *compare, UErrorCode&
min = probe + 1;
}
}
- if (ensureCapacity(count + 1, ec)) {
- for (int32_t i=count; i>min; --i) {
- elements[i] = elements[i-1];
- }
- elements[min] = e;
- ++count;
+ for (int32_t i=count; i>min; --i) {
+ elements[i] = elements[i-1];
}
+ elements[min] = e;
+ ++count;
}
/**
@@ -518,7 +556,7 @@ sortiComparator(const void * /*context */, const void *left, const void *right)
}
/**
- * Sort the vector, assuming it constains ints.
+ * Sort the vector, assuming it contains ints.
* (A more general sort would take a comparison function, but it's
* not clear whether UVector's UElementComparator or
* UComparator from uprv_sortAray would be more appropriate.)
@@ -526,7 +564,7 @@ sortiComparator(const void * /*context */, const void *left, const void *right)
void UVector::sorti(UErrorCode &ec) {
if (U_SUCCESS(ec)) {
uprv_sortArray(elements, count, sizeof(UElement),
- sortiComparator, NULL, FALSE, &ec);
+ sortiComparator, nullptr, FALSE, &ec);
}
}
@@ -539,7 +577,7 @@ void UVector::sorti(UErrorCode &ec) {
* required by uprv_sortArray(). This is handled by passing the
* the UVector sort function pointer via the context pointer to a
* sortArray() comparator function, which can then call back to
- * the original user functtion.
+ * the original user function.
*
* An additional twist is that it's not safe to pass a pointer-to-function
* as a (void *) data pointer, so instead we pass a (data) pointer to a
diff --git a/Build/source/libs/icu/icu-src/source/common/uvector.h b/Build/source/libs/icu/icu-src/source/common/uvector.h
index a2bef923aff..f61fcc2be60 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvector.h
+++ b/Build/source/libs/icu/icu-src/source/common/uvector.h
@@ -23,43 +23,44 @@
U_NAMESPACE_BEGIN
/**
- * <p>Ultralightweight C++ implementation of a <tt>void*</tt> vector
+ * Ultralightweight C++ implementation of a `void*` vector
* that is (mostly) compatible with java.util.Vector.
*
- * <p>This is a very simple implementation, written to satisfy an
+ * This is a very simple implementation, written to satisfy an
* immediate porting need. As such, it is not completely fleshed out,
* and it aims for simplicity and conformity. Nonetheless, it serves
* its purpose (porting code from java that uses java.util.Vector)
* well, and it could be easily made into a more robust vector class.
*
- * <p><b>Design notes</b>
+ * *Design notes*
*
- * <p>There is index bounds checking, but little is done about it. If
+ * There is index bounds checking, but little is done about it. If
* indices are out of bounds, either nothing happens, or zero is
- * returned. We <em>do</em> avoid indexing off into the weeds.
+ * returned. We *do* avoid indexing off into the weeds.
*
- * <p>There is detection of out of memory, but the handling is very
- * coarse-grained -- similar to UnicodeString's protocol, but even
- * coarser. The class contains <em>one static flag</em> that is set
- * when any call to <tt>new</tt> returns zero. This allows the caller
- * to use several vectors and make just one check at the end to see if
- * a memory failure occurred. This is more efficient than making a
- * check after each call on each vector when doing many operations on
- * multiple vectors. The single static flag works best when memory
- * failures are infrequent, and when recovery options are limited or
- * nonexistent.
- *
- * <p>Since we don't have garbage collection, UVector was given the
- * option to <em>own</em>its contents. To employ this, set a deleter
- * function. The deleter is called on a void* pointer when that
+ * Since we don't have garbage collection, UVector was given the
+ * option to *own* its contents. To employ this, set a deleter
+ * function. The deleter is called on a `void *` pointer when that
* pointer is released by the vector, either when the vector itself is
- * destructed, or when a call to setElementAt() overwrites an element,
- * or when a call to remove() or one of its variants explicitly
+ * destructed, or when a call to `setElementAt()` overwrites an element,
+ * or when a call to remove()` or one of its variants explicitly
* removes an element. If no deleter is set, or the deleter is set to
* zero, then it is assumed that the caller will delete elements as
* needed.
*
- * <p>In order to implement methods such as contains() and indexOf(),
+ * *Error Handling* Functions that can fail, from out of memory conditions
+ * for example, include a UErrorCode parameter. Any function called
+ * with an error code already indicating a failure will not modify the
+ * vector in any way.
+ *
+ * For vectors that have a deleter function, any failure in inserting
+ * an element into the vector will instead delete the element that
+ * could not be adopted. This simplifies object ownership
+ * management around calls to `addElement()` and `insertElementAt()`;
+ * error or no, the function always takes ownership of an incoming object
+ * from the caller.
+ *
+ * In order to implement methods such as `contains()` and `indexOf()`,
* UVector needs a way to compare objects for equality. To do so, it
* uses a comparison function, or "comparer." If the comparer is not
* set, or is set to zero, then all such methods will act as if the
@@ -73,23 +74,21 @@ U_NAMESPACE_BEGIN
* @author Alan Liu
*/
class U_COMMON_API UVector : public UObject {
- // NOTE: UVector uses the UHashKey (union of void* and int32_t) as
+ // NOTE: UVector uses the UElement (union of void* and int32_t) as
// its basic storage type. It uses UElementsAreEqual as its
// comparison function. It uses UObjectDeleter as its deleter
- // function. These are named for hashtables, but used here as-is
- // rather than duplicating the type. This allows sharing of
- // support functions.
+ // function. This allows sharing of support functions with UHashtable.
private:
- int32_t count;
+ int32_t count = 0;
- int32_t capacity;
+ int32_t capacity = 0;
- UElement* elements;
+ UElement* elements = nullptr;
- UObjectDeleter *deleter;
+ UObjectDeleter *deleter = nullptr;
- UElementsAreEqual *comparer;
+ UElementsAreEqual *comparer = nullptr;
public:
UVector(UErrorCode &status);
@@ -113,18 +112,44 @@ public:
* equal if they are of the same size and all elements are equal,
* as compared using this object's comparer.
*/
- UBool operator==(const UVector& other);
+ bool operator==(const UVector& other) const;
/**
* Equivalent to !operator==()
*/
- inline UBool operator!=(const UVector& other);
+ inline bool operator!=(const UVector& other) const {return !operator==(other);}
//------------------------------------------------------------
// java.util.Vector API
//------------------------------------------------------------
- void addElement(void* obj, UErrorCode &status);
+ /*
+ * Old version of addElement, with non-standard error handling.
+ * Will be removed once all uses have been switched to the new addElement().
+ */
+ void addElementX(void* obj, UErrorCode &status);
+
+ /**
+ * Add an element at the end of the vector.
+ * For use only with vectors that do not adopt their elements, which is to say,
+ * have not set an element deleter function. See `adoptElement()`.
+ */
+ void addElement(void *obj, UErrorCode &status);
+
+ /**
+ * Add an element at the end of the vector.
+ * For use only with vectors that adopt their elements, which is to say,
+ * have set an element deleter function. See `addElement()`.
+ *
+ * If the element cannot be successfully added, it will be deleted. This is
+ * normal ICU _adopt_ behavior - one way or another ownership of the incoming
+ * object is transferred from the caller.
+ *
+ * `addElement()` and `adoptElement()` are separate functions to make it easier
+ * to see what the function is doing at call sites. Having a single combined function,
+ * as in earlier versions of UVector, had proved to be error-prone.
+ */
+ void adoptElement(void *obj, UErrorCode &status);
void addElement(int32_t elem, UErrorCode &status);
@@ -142,19 +167,19 @@ public:
UBool equals(const UVector &other) const;
- inline void* firstElement(void) const;
+ inline void* firstElement(void) const {return elementAt(0);}
- inline void* lastElement(void) const;
+ inline void* lastElement(void) const {return elementAt(count-1);}
- inline int32_t lastElementi(void) const;
+ inline int32_t lastElementi(void) const {return elementAti(count-1);}
int32_t indexOf(void* obj, int32_t startIndex = 0) const;
int32_t indexOf(int32_t obj, int32_t startIndex = 0) const;
- inline UBool contains(void* obj) const;
+ inline UBool contains(void* obj) const {return indexOf(obj) >= 0;}
- inline UBool contains(int32_t obj) const;
+ inline UBool contains(int32_t obj) const {return indexOf(obj) >= 0;}
UBool containsAll(const UVector& other) const;
@@ -168,9 +193,15 @@ public:
void removeAllElements();
- inline int32_t size(void) const;
+ inline int32_t size(void) const {return count;}
- inline UBool isEmpty(void) const;
+ inline UBool isEmpty(void) const {return count == 0;}
+
+ /*
+ * Old version of ensureCapacity, with non-standard error handling.
+ * Will be removed once all uses have been switched to the new ensureCapacity().
+ */
+ UBool ensureCapacityX(int32_t minimumCapacity, UErrorCode &status);
UBool ensureCapacity(int32_t minimumCapacity, UErrorCode &status);
@@ -192,10 +223,11 @@ public:
//------------------------------------------------------------
UObjectDeleter *setDeleter(UObjectDeleter *d);
+ bool hasDeleter() {return deleter != nullptr;}
UElementsAreEqual *setComparer(UElementsAreEqual *c);
- inline void* operator[](int32_t index) const;
+ inline void* operator[](int32_t index) const {return elementAt(index);}
/**
* Removes the element at the given index from this vector and
@@ -260,36 +292,35 @@ public:
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
- void _init(int32_t initialCapacity, UErrorCode &status);
-
int32_t indexOf(UElement key, int32_t startIndex = 0, int8_t hint = 0) const;
void sortedInsert(UElement e, UElementComparator *compare, UErrorCode& ec);
+public:
// Disallow
- UVector(const UVector&);
+ UVector(const UVector&) = delete;
// Disallow
- UVector& operator=(const UVector&);
+ UVector& operator=(const UVector&) = delete;
};
/**
- * <p>Ultralightweight C++ implementation of a <tt>void*</tt> stack
+ * Ultralightweight C++ implementation of a `void*` stack
* that is (mostly) compatible with java.util.Stack. As in java, this
* is merely a paper thin layer around UVector. See the UVector
* documentation for further information.
*
- * <p><b>Design notes</b>
+ * *Design notes*
*
- * <p>The element at index <tt>n-1</tt> is (of course) the top of the
+ * The element at index `n-1` is (of course) the top of the
* stack.
*
- * <p>The poorly named <tt>empty()</tt> method doesn't empty the
+ * The poorly named `empty()` method doesn't empty the
* stack; it determines if the stack is empty.
*
* @author Alan Liu
@@ -309,19 +340,35 @@ public:
// It's okay not to have a virtual destructor (in UVector)
// because UStack has no special cleanup to do.
- inline UBool empty(void) const;
+ inline UBool empty(void) const {return isEmpty();}
- inline void* peek(void) const;
+ inline void* peek(void) const {return lastElement();}
- inline int32_t peeki(void) const;
+ inline int32_t peeki(void) const {return lastElementi();}
+ /**
+ * Pop and return an element from the stack.
+ * For stacks with a deleter function, the caller takes ownership
+ * of the popped element.
+ */
void* pop(void);
int32_t popi(void);
- inline void* push(void* obj, UErrorCode &status);
-
- inline int32_t push(int32_t i, UErrorCode &status);
+ inline void* push(void* obj, UErrorCode &status) {
+ if (hasDeleter()) {
+ adoptElement(obj, status);
+ return (U_SUCCESS(status)) ? obj : nullptr;
+ } else {
+ addElement(obj, status);
+ return obj;
+ }
+ }
+
+ inline int32_t push(int32_t i, UErrorCode &status) {
+ addElement(i, status);
+ return i;
+ }
/*
If the object o occurs as an item in this stack,
@@ -337,79 +384,15 @@ public:
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
-private:
// Disallow
- UStack(const UStack&);
+ UStack(const UStack&) = delete;
// Disallow
- UStack& operator=(const UStack&);
+ UStack& operator=(const UStack&) = delete;
};
-
-// UVector inlines
-
-inline int32_t UVector::size(void) const {
- return count;
-}
-
-inline UBool UVector::isEmpty(void) const {
- return count == 0;
-}
-
-inline UBool UVector::contains(void* obj) const {
- return indexOf(obj) >= 0;
-}
-
-inline UBool UVector::contains(int32_t obj) const {
- return indexOf(obj) >= 0;
-}
-
-inline void* UVector::firstElement(void) const {
- return elementAt(0);
-}
-
-inline void* UVector::lastElement(void) const {
- return elementAt(count-1);
-}
-
-inline int32_t UVector::lastElementi(void) const {
- return elementAti(count-1);
-}
-
-inline void* UVector::operator[](int32_t index) const {
- return elementAt(index);
-}
-
-inline UBool UVector::operator!=(const UVector& other) {
- return !operator==(other);
-}
-
-// UStack inlines
-
-inline UBool UStack::empty(void) const {
- return isEmpty();
-}
-
-inline void* UStack::peek(void) const {
- return lastElement();
-}
-
-inline int32_t UStack::peeki(void) const {
- return lastElementi();
-}
-
-inline void* UStack::push(void* obj, UErrorCode &status) {
- addElement(obj, status);
- return obj;
-}
-
-inline int32_t UStack::push(int32_t i, UErrorCode &status) {
- addElement(i, status);
- return i;
-}
-
U_NAMESPACE_END
#endif
diff --git a/Build/source/libs/icu/icu-src/source/common/uvectr32.cpp b/Build/source/libs/icu/icu-src/source/common/uvectr32.cpp
index d1ae6599585..a77ecb689fd 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvectr32.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uvectr32.cpp
@@ -83,15 +83,15 @@ void UVector32::assign(const UVector32& other, UErrorCode &ec) {
}
-UBool UVector32::operator==(const UVector32& other) {
+bool UVector32::operator==(const UVector32& other) {
int32_t i;
- if (count != other.count) return FALSE;
+ if (count != other.count) return false;
for (i=0; i<count; ++i) {
if (elements[i] != other.elements[i]) {
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
diff --git a/Build/source/libs/icu/icu-src/source/common/uvectr32.h b/Build/source/libs/icu/icu-src/source/common/uvectr32.h
index 0d81dfb5c1c..f08c2ade765 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvectr32.h
+++ b/Build/source/libs/icu/icu-src/source/common/uvectr32.h
@@ -86,12 +86,12 @@ public:
* equal if they are of the same size and all elements are equal,
* as compared using this object's comparer.
*/
- UBool operator==(const UVector32& other);
+ bool operator==(const UVector32& other);
/**
* Equivalent to !operator==()
*/
- inline UBool operator!=(const UVector32& other);
+ inline bool operator!=(const UVector32& other);
//------------------------------------------------------------
// java.util.Vector API
@@ -181,7 +181,7 @@ public:
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
void _init(int32_t initialCapacity, UErrorCode &status);
@@ -268,7 +268,7 @@ inline int32_t UVector32::lastElementi(void) const {
return elementAti(count-1);
}
-inline UBool UVector32::operator!=(const UVector32& other) {
+inline bool UVector32::operator!=(const UVector32& other) {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/uvectr64.cpp b/Build/source/libs/icu/icu-src/source/common/uvectr64.cpp
index 081565959cf..57315c00ff5 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvectr64.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/uvectr64.cpp
@@ -80,15 +80,15 @@ void UVector64::assign(const UVector64& other, UErrorCode &ec) {
}
-UBool UVector64::operator==(const UVector64& other) {
+bool UVector64::operator==(const UVector64& other) {
int32_t i;
- if (count != other.count) return FALSE;
+ if (count != other.count) return false;
for (i=0; i<count; ++i) {
if (elements[i] != other.elements[i]) {
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
diff --git a/Build/source/libs/icu/icu-src/source/common/uvectr64.h b/Build/source/libs/icu/icu-src/source/common/uvectr64.h
index 15c9b3f830c..ba3eca268df 100644
--- a/Build/source/libs/icu/icu-src/source/common/uvectr64.h
+++ b/Build/source/libs/icu/icu-src/source/common/uvectr64.h
@@ -85,12 +85,12 @@ public:
* equal if they are of the same size and all elements are equal,
* as compared using this object's comparer.
*/
- UBool operator==(const UVector64& other);
+ bool operator==(const UVector64& other);
/**
* Equivalent to !operator==()
*/
- inline UBool operator!=(const UVector64& other);
+ inline bool operator!=(const UVector64& other);
//------------------------------------------------------------
// subset of java.util.Vector API
@@ -170,7 +170,7 @@ public:
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
void _init(int32_t initialCapacity, UErrorCode &status);
@@ -249,7 +249,7 @@ inline int64_t UVector64::lastElementi(void) const {
return elementAti(count-1);
}
-inline UBool UVector64::operator!=(const UVector64& other) {
+inline bool UVector64::operator!=(const UVector64& other) {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/common/wintz.cpp b/Build/source/libs/icu/icu-src/source/common/wintz.cpp
index 580cedadb67..84a29b8d36a 100644
--- a/Build/source/libs/icu/icu-src/source/common/wintz.cpp
+++ b/Build/source/libs/icu/icu-src/source/common/wintz.cpp
@@ -36,7 +36,7 @@
U_NAMESPACE_BEGIN
-// Note these constants and the struct are only used when dealing with the fallback path for RDP sesssions.
+// Note these constants and the struct are only used when dealing with the fallback path for RDP sessions.
// This is the location of the time zones in the registry on Vista+ systems.
// See: https://docs.microsoft.com/windows/win32/api/timezoneapi/ns-timezoneapi-dynamic_time_zone_information
@@ -124,10 +124,26 @@ uprv_detectWindowsTimeZone()
// No way to support when DST is turned off and the offset in minutes is not a multiple of 60.
if (utcOffsetMins % 60 == 0) {
char gmtOffsetTz[11] = {}; // "Etc/GMT+dd" is 11-char long with a terminal null.
- // Note '-' before 'utcOffsetMin'. The timezone ID's sign convention
- // is that a timezone ahead of UTC is Etc/GMT-<offset> and a timezone
- // behind UTC is Etc/GMT+<offset>.
- int ret = snprintf(gmtOffsetTz, UPRV_LENGTHOF(gmtOffsetTz), "Etc/GMT%+ld", -utcOffsetMins / 60);
+ // Important note on the sign convention for zones:
+ //
+ // From https://en.wikipedia.org/wiki/Tz_database#Area
+ // "In order to conform with the POSIX style, those zone names beginning with "Etc/GMT" have their sign reversed
+ // from the standard ISO 8601 convention. In the "Etc" area, zones west of GMT have a positive sign and those
+ // east have a negative sign in their name (e.g "Etc/GMT-14" is 14 hours ahead of GMT)."
+ //
+ // Regarding the POSIX style, from https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
+ // "The offset specifies the time value you must add to the local time to get a Coordinated Universal Time value."
+ //
+ // However, the Bias value in DYNAMIC_TIME_ZONE_INFORMATION *already* follows the POSIX convention.
+ //
+ // From https://docs.microsoft.com/en-us/windows/win32/api/timezoneapi/ns-timezoneapi-dynamic_time_zone_information
+ // "The bias is the difference, in minutes, between Coordinated Universal Time (UTC) and
+ // local time. All translations between UTC and local time are based on the following formula:
+ // UTC = local time + bias"
+ //
+ // For example, a time zone that is 3 hours ahead of UTC (UTC+03:00) would have a Bias value of -180, and the
+ // corresponding time zone ID would be "Etc/GMT-3". (So there is no need to negate utcOffsetMins below.)
+ int ret = snprintf(gmtOffsetTz, UPRV_LENGTHOF(gmtOffsetTz), "Etc/GMT%+ld", utcOffsetMins / 60);
if (ret > 0 && ret < UPRV_LENGTHOF(gmtOffsetTz)) {
return uprv_strdup(gmtOffsetTz);
}
diff --git a/Build/source/libs/icu/icu-src/source/config/dist-data.sh b/Build/source/libs/icu/icu-src/source/config/dist-data.sh
index 442267108ba..9406ebb3a63 100755
--- a/Build/source/libs/icu/icu-src/source/config/dist-data.sh
+++ b/Build/source/libs/icu/icu-src/source/config/dist-data.sh
@@ -27,8 +27,12 @@ then
exit 1
fi
+# Short (major) version, i.e. 70
VERS=$(echo ${DATFILE} | tr -d a-z/.)
+# Version number, i.e. 70.1
VERSION=${VERSION-unknown}
+# Version number for files, i.e. 70_1
+VERSION_FILE=$(echo ${VERSION} | tr . _)
if [[ "${VERSION}" = "unknown" ]];
then
@@ -57,7 +61,7 @@ mkdir -p ${DISTY_DIR}/tmp
for endian in $ENDIANS;
do
- base=icu4c-${VERSION}-data-bin-${endian}.zip
+ base=icu4c-${VERSION_FILE}-data-bin-${endian}.zip
filename=icudt${VERS}${endian}.dat
if [ -f ${DISTY_DIR}/${base} ];
then
@@ -67,7 +71,7 @@ do
rm -f ${DISTY_DIR}/tmp/${filename}
echo ./bin/icupkg -t${endian} ${DATFILE} ${DISTY_DIR}/tmp/${filename}
./bin/icupkg -t${endian} ${DATFILE} ${DISTY_DIR}/tmp/${filename}
- README=icu4c-${VERSION}-data-bin-${endian}-README.md
+ README=icu4c-${VERSION_FILE}-data-bin-${endian}-README.md
cat >> ${DISTY_DIR}/tmp/${README} <<EOF
# ICU Data Zip for ${VERSION}
diff --git a/Build/source/libs/icu/icu-src/source/config/dist.mk b/Build/source/libs/icu/icu-src/source/config/dist.mk
index f45133eddb5..d82863221b2 100644
--- a/Build/source/libs/icu/icu-src/source/config/dist.mk
+++ b/Build/source/libs/icu/icu-src/source/config/dist.mk
@@ -38,7 +38,7 @@ DISTY_DAT:=$(firstword $(wildcard data/out/tmp/icudt$(SO_TARGET_VERSION_MAJOR)*.
DISTY_FILES_SRC=$(DISTY_FILE_TGZ) $(DISTY_FILE_ZIP)
DISTY_FILES=$(DISTY_FILES_SRC) $(DISTY_DOC_ZIP)
-# colon-equals because we watn to run this once!
+# colon-equals because we want to run this once!
EXCLUDES_FILE:=$(shell mktemp)
$(DISTY_FILE_DIR):
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-aix-gcc b/Build/source/libs/icu/icu-src/source/config/mh-aix-gcc
index 62692bb74a3..232f1be90d0 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-aix-gcc
+++ b/Build/source/libs/icu/icu-src/source/config/mh-aix-gcc
@@ -28,8 +28,8 @@ LINK.cc= $(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS)
LD_SOOPTIONS= -Wl,-bsymbolic
## Commands to make a shared library
-SHLIB.c= $(AIX_PREDELETE) $(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,-bexpall $(LD_SOOPTIONS)
-SHLIB.cc= $(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared -Wl,-bexpall $(LD_SOOPTIONS)
+SHLIB.c= $(AIX_PREDELETE) $(CC) $(CFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS)
+SHLIB.cc= $(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS)
## Compiler switch to embed a runtime search path
LD_RPATH= -I
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-cygwin-msvc b/Build/source/libs/icu/icu-src/source/config/mh-cygwin-msvc
index 31ac458d308..21d72350c78 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-cygwin-msvc
+++ b/Build/source/libs/icu/icu-src/source/config/mh-cygwin-msvc
@@ -154,10 +154,10 @@ endif
## Dependency rules
-## This is a start to how depdendencies could work
+## This is a start to how dependencies could work
# The commented out rules may not properly delete the file when ^C is pressed
# or the compiler fails.
-# make currently doesn't like rules with C:\\PROGRA~1\\.. in the depedency.
+# make currently doesn't like rules with C:\\PROGRA~1\\.. in the dependency.
# So system headers are ignored by ignoring \\
%.d : $(srcdir)/%.c
@echo "generating dependency information for $<"
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-mingw b/Build/source/libs/icu/icu-src/source/config/mh-mingw
index a53c8797b41..2088b75acc5 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-mingw
+++ b/Build/source/libs/icu/icu-src/source/config/mh-mingw
@@ -57,7 +57,7 @@ LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS)
#LINK.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS)
## Shared library options
-LD_SOOPTIONS= -Wl,-Bsymbolic
+LD_SOOPTIONS=
## Commands to make a shared library
SHLIB.c= $(CC) $(CFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS) -Wl,--enable-auto-import -Wl,--out-implib=$(dir $@)lib$(notdir $(@:$(SO_TARGET_VERSION_MAJOR).$(SO)=))$(IMPORT_LIB_EXT)#M#
@@ -83,11 +83,14 @@ IMPORT_LIB_EXT = .dll.a
#SH#ICULIBS_COMMON_LIB_NAME="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}.${SO}"
#SH#ICULIBS_COMMON_LIB_NAME_A="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}.${A}"
-#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_LX="-l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(LAYOUTEX_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_CTESTFW="-l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(CTESTFW_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_TOOLUTIL="-l$(ICUPREFIX)tu$(ICULIBSUFFIX)"
#SH#
#SH## ICULIBS is the set of libraries your application should link
#SH## with usually. Many applications will want to add ${ICULIBS_I18N} as well.
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-mingw64 b/Build/source/libs/icu/icu-src/source/config/mh-mingw64
index afe2c0e80cd..fb64c562604 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-mingw64
+++ b/Build/source/libs/icu/icu-src/source/config/mh-mingw64
@@ -57,7 +57,7 @@ LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS)
#LINK.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS)
## Shared library options
-LD_SOOPTIONS= -Wl,-Bsymbolic
+LD_SOOPTIONS=
## Commands to make a shared library
SHLIB.c= $(CC) $(CFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS) -Wl,--enable-auto-import -Wl,--out-implib=$(dir $@)lib$(notdir $(@:$(SO_TARGET_VERSION_MAJOR).$(SO)=))$(IMPORT_LIB_EXT)#M#
@@ -101,11 +101,14 @@ LIBICU = $(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)
#SH#ICULIBS_COMMON_LIB_NAME="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}.${SO}"
#SH#ICULIBS_COMMON_LIB_NAME_A="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}.${A}"
-#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
-ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
+#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_LX="-l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(LAYOUTEX_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_CTESTFW="-l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(CTESTFW_STUBNAME)$(ICULIBSUFFIX)"
+ICULIBS_TOOLUTIL="-l$(ICUPREFIX)tu$(ICULIBSUFFIX)"
#SH#
#SH## ICULIBS is the set of libraries your application should link
#SH## with usually. Many applications will want to add ${ICULIBS_I18N} as well.
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-mpras b/Build/source/libs/icu/icu-src/source/config/mh-mpras
index b1b8bf6d83b..12927abe588 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-mpras
+++ b/Build/source/libs/icu/icu-src/source/config/mh-mpras
@@ -5,7 +5,7 @@
## Copyright (c) 2003-2004, International Business Machines Corporation and
## others. All Rights Reserved.
##
-## Original contributer: Jason Gordon from NCR
+## Original contributor: Jason Gordon from NCR
## Flags for position independent code
SHAREDLIBCFLAGS = -K PIC
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-msys-msvc b/Build/source/libs/icu/icu-src/source/config/mh-msys-msvc
index 17f710ef3c9..6f50798ebf1 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-msys-msvc
+++ b/Build/source/libs/icu/icu-src/source/config/mh-msys-msvc
@@ -143,10 +143,10 @@ LDFLAGSICUTOOLUTIL=# Unused for now.
## Dependency rules
-## This is a start to how depdendencies could work
+## This is a start to how dependencies could work
# The commented out rules may not properly delete the file when ^C is pressed
# or the compiler fails.
-# make currently doesn't like rules with C:\\PROGRA~1\\.. in the depedency.
+# make currently doesn't like rules with C:\\PROGRA~1\\.. in the dependency.
# So system headers are ignored by ignoring \\
%.d : $(srcdir)/%.c
@echo "generating dependency information for $<"
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-os390 b/Build/source/libs/icu/icu-src/source/config/mh-os390
index 9bd3f9bf4c9..56edbeb7080 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-os390
+++ b/Build/source/libs/icu/icu-src/source/config/mh-os390
@@ -80,7 +80,7 @@ ARFLAGS = -cr
ifeq (${OS390_XPLINK}, 1)
#SH# if [ "x$OS390_XPLINK" = "x1" ]; then
# These lines must be the last options specified.
-# GOFF is is the strategic object module format for S/390. It is required for XPLINK.
+# GOFF is the strategic object module format for S/390. It is required for XPLINK.
# NOTEMPINC could be used if ICU starts using templates.
ICU_XPLINK_C = -Wc,'xplink(backchain,storeargs),goff'
ICU_XPLINK_CXX = -Wc,'xplink(backchain,storeargs),goff' -Wc,'NOTEMPINC'
diff --git a/Build/source/libs/icu/icu-src/source/config/mh-solaris b/Build/source/libs/icu/icu-src/source/config/mh-solaris
index 5e2abcfeb59..a26b468d878 100644
--- a/Build/source/libs/icu/icu-src/source/config/mh-solaris
+++ b/Build/source/libs/icu/icu-src/source/config/mh-solaris
@@ -15,8 +15,8 @@ SHAREDLIBCXXFLAGS = -KPIC
SHAREDLIBCPPFLAGS = -DPIC
## Commands to generate dependency files
-GEN_DEPS.c= $(CC) -xM $(DEFS) $(CPPFLAGS)
-GEN_DEPS.cc= $(CXX) -xM $(DEFS) $(CPPFLAGS)
+GEN_DEPS.c= $(CC) -xM $(DEFS) $(CPPFLAGS) $(CFLAGS)
+GEN_DEPS.cc= $(CXX) -xM $(DEFS) $(CPPFLAGS) $(CXXFLAGS)
ifeq ($(UCLN_NO_AUTO_CLEANUP),0)
# set up init point.
diff --git a/Build/source/libs/icu/icu-src/source/configure b/Build/source/libs/icu/icu-src/source/configure
index 7df8e6270d6..b7709d56556 100755
--- a/Build/source/libs/icu/icu-src/source/configure
+++ b/Build/source/libs/icu/icu-src/source/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ICU 68.2.
+# Generated by GNU Autoconf 2.69 for ICU 70.1.
#
# Report bugs to <http://icu-project.org/bugs>.
#
@@ -582,8 +582,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='ICU'
PACKAGE_TARNAME='International Components for Unicode'
-PACKAGE_VERSION='68.2'
-PACKAGE_STRING='ICU 68.2'
+PACKAGE_VERSION='70.1'
+PACKAGE_STRING='ICU 70.1'
PACKAGE_BUGREPORT='http://icu-project.org/bugs'
PACKAGE_URL='http://icu-project.org'
@@ -757,6 +757,7 @@ infodir
docdir
oldincludedir
includedir
+runstatedir
localstatedir
sharedstatedir
sysconfdir
@@ -862,6 +863,7 @@ datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1114,6 +1116,15 @@ do
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1251,7 +1262,7 @@ fi
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
+ libdir localedir mandir runstatedir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
@@ -1364,7 +1375,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures ICU 68.2 to adapt to many kinds of systems.
+\`configure' configures ICU 70.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1404,6 +1415,7 @@ Fine tuning of the installation directories:
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
@@ -1430,7 +1442,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ICU 68.2:";;
+ short | recursive ) echo "Configuration of ICU 70.1:";;
esac
cat <<\_ACEOF
@@ -1455,7 +1467,7 @@ Optional Features:
--enable-weak-threads weakly reference the threading library default=no
--enable-extras build ICU extras default=yes
--enable-icuio build ICU's icuio library default=yes
- --enable-layoutex build ICU's Paragraph Layout library default=yes.
+ --enable-layoutex build ICU's Paragraph Layout library default=no.
icu-le-hb must be installed via pkg-config. See http://harfbuzz.org
--enable-tools build ICU's tools default=yes
@@ -1568,7 +1580,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-ICU configure 68.2
+ICU configure 70.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2314,7 +2326,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by ICU $as_me 68.2, which was
+It was created by ICU $as_me 70.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -6046,7 +6058,7 @@ done
fi
fi
-# Check for miscellanous functions.
+# Check for miscellaneous functions.
# So, use for putil / tools only.
# Note that this will generate HAVE_GETTIMEOFDAY, not U_HAVE_GETTIMEOFDAY
for ac_func in gettimeofday
@@ -6168,7 +6180,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
OLD_LIBS=${LIBS}
# For Compaq Tru64 (OSF1), we must look for pthread_attr_init
-# and must do this before seaching for pthread_mutex_destroy, or
+# and must do this before searching for pthread_mutex_destroy, or
# we will pick up libpthreads.so not libpthread.so
# If this fails, then we must test for HPUX specials, before
# moving on to a more generic test
@@ -7703,7 +7715,7 @@ if test "${enable_layoutex+set}" = set; then :
*) as_fn_error $? "bad value ${enableval} for --enable-layoutex" "$LINENO" 5 ;;
esac
else
- layoutex=$have_icu_le_hb
+ layoutex=false
fi
@@ -7819,7 +7831,7 @@ fi
datapackaging_dir=`eval echo $thedatadir`"/icu/${VERSION}"
-datapackaging_msg="(No explaination for mode $datapackaging.)"
+datapackaging_msg="(No explanation for mode $datapackaging.)"
datapackaging_msg_path="ICU will look in $datapackaging_dir which is the installation location. Call u_setDataDirectory() or use the ICU_DATA environment variable to override."
datapackaging_msg_set="ICU will use the linked data library. If linked with the stub library located in stubdata/, the application can use udata_setCommonData() or set a data path to override."
@@ -7971,6 +7983,56 @@ fi
# Now that we're done using CPPFLAGS etc. for tests, we can change it
# for build.
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+# Silence a Clang warning about ambiguous operators with C++20 rewritten
+# expressions that possibly or maybe even probably is a mistake (ICU-20973).
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -Wambiguous-reversed-operator" >&5
+$as_echo_n "checking whether C++ compiler accepts -Wambiguous-reversed-operator... " >&6; }
+if ${ax_cv_check_cxxflags__Werror__Wambiguous_reversed_operator+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ax_check_save_flags=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS -Werror -Wambiguous-reversed-operator"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ax_cv_check_cxxflags__Werror__Wambiguous_reversed_operator=yes
+else
+ ax_cv_check_cxxflags__Werror__Wambiguous_reversed_operator=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CXXFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags__Werror__Wambiguous_reversed_operator" >&5
+$as_echo "$ax_cv_check_cxxflags__Werror__Wambiguous_reversed_operator" >&6; }
+if test "x$ax_cv_check_cxxflags__Werror__Wambiguous_reversed_operator" = xyes; then :
+ CXXFLAGS+=" -Wno-ambiguous-reversed-operator"
+else
+ :
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
if test "${CC}" = "clang"; then
CLANGCFLAGS="-Qunused-arguments -Wno-parentheses-equality"
else
@@ -8000,7 +8062,7 @@ echo "CXXFLAGS=$CXXFLAGS"
# output the Makefiles
-ac_config_files="$ac_config_files icudefs.mk Makefile data/pkgdataMakefile config/Makefile.inc config/icu.pc config/pkgdataMakefile data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/uconv/pkgdataMakefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/gendict/Makefile tools/gentest/Makefile tools/gennorm2/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icuinfo/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/tzcode/Makefile tools/gencfu/Makefile tools/escapesrc/Makefile test/Makefile test/compat/Makefile test/testdata/Makefile test/testdata/pkgdataMakefile test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/letest/Makefile test/perf/Makefile test/perf/collationperf/Makefile test/perf/collperf/Makefile test/perf/collperf2/Makefile test/perf/dicttrieperf/Makefile test/perf/ubrkperf/Makefile test/perf/charperf/Makefile test/perf/convperf/Makefile test/perf/localecanperf/Makefile test/perf/normperf/Makefile test/perf/DateFmtPerf/Makefile test/perf/howExpensiveIs/Makefile test/perf/strsrchperf/Makefile test/perf/unisetperf/Makefile test/perf/usetperf/Makefile test/perf/ustrperf/Makefile test/perf/utfperf/Makefile test/perf/utrie2perf/Makefile test/perf/leperf/Makefile test/fuzzer/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/layout/Makefile"
+ac_config_files="$ac_config_files icudefs.mk Makefile data/pkgdataMakefile config/Makefile.inc config/icu.pc config/pkgdataMakefile data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/uconv/pkgdataMakefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/gendict/Makefile tools/gentest/Makefile tools/gennorm2/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icuinfo/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/icuexportdata/Makefile tools/tzcode/Makefile tools/gencfu/Makefile tools/escapesrc/Makefile test/Makefile test/compat/Makefile test/testdata/Makefile test/testdata/pkgdataMakefile test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/letest/Makefile test/perf/Makefile test/perf/collationperf/Makefile test/perf/collperf/Makefile test/perf/collperf2/Makefile test/perf/dicttrieperf/Makefile test/perf/ubrkperf/Makefile test/perf/charperf/Makefile test/perf/convperf/Makefile test/perf/localecanperf/Makefile test/perf/normperf/Makefile test/perf/DateFmtPerf/Makefile test/perf/howExpensiveIs/Makefile test/perf/strsrchperf/Makefile test/perf/unisetperf/Makefile test/perf/usetperf/Makefile test/perf/ustrperf/Makefile test/perf/utfperf/Makefile test/perf/utrie2perf/Makefile test/perf/leperf/Makefile test/fuzzer/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/layout/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -8545,7 +8607,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by ICU $as_me 68.2, which was
+This file was extended by ICU $as_me 70.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -8599,7 +8661,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-ICU config.status 68.2
+ICU config.status 70.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -8743,6 +8805,7 @@ do
"tools/icupkg/Makefile") CONFIG_FILES="$CONFIG_FILES tools/icupkg/Makefile" ;;
"tools/icuswap/Makefile") CONFIG_FILES="$CONFIG_FILES tools/icuswap/Makefile" ;;
"tools/pkgdata/Makefile") CONFIG_FILES="$CONFIG_FILES tools/pkgdata/Makefile" ;;
+ "tools/icuexportdata/Makefile") CONFIG_FILES="$CONFIG_FILES tools/icuexportdata/Makefile" ;;
"tools/tzcode/Makefile") CONFIG_FILES="$CONFIG_FILES tools/tzcode/Makefile" ;;
"tools/gencfu/Makefile") CONFIG_FILES="$CONFIG_FILES tools/gencfu/Makefile" ;;
"tools/escapesrc/Makefile") CONFIG_FILES="$CONFIG_FILES tools/escapesrc/Makefile" ;;
diff --git a/Build/source/libs/icu/icu-src/source/configure.ac b/Build/source/libs/icu/icu-src/source/configure.ac
index 1796ca07555..22c11af06a3 100644
--- a/Build/source/libs/icu/icu-src/source/configure.ac
+++ b/Build/source/libs/icu/icu-src/source/configure.ac
@@ -481,7 +481,7 @@ if test "$enable" = "yes"; then
fi
fi
-# Check for miscellanous functions.
+# Check for miscellaneous functions.
# So, use for putil / tools only.
# Note that this will generate HAVE_GETTIMEOFDAY, not U_HAVE_GETTIMEOFDAY
AC_CHECK_FUNCS([gettimeofday])
@@ -541,7 +541,7 @@ AC_LANG_POP([C++])
OLD_LIBS=${LIBS}
# For Compaq Tru64 (OSF1), we must look for pthread_attr_init
-# and must do this before seaching for pthread_mutex_destroy, or
+# and must do this before searching for pthread_mutex_destroy, or
# we will pick up libpthreads.so not libpthread.so
# If this fails, then we must test for HPUX specials, before
# moving on to a more generic test
@@ -1101,14 +1101,14 @@ ICU_CONDITIONAL(ICUIO, test "$icuio" = true)
# Enable/disable layoutex
AC_ARG_ENABLE(layoutex,
- [ --enable-layoutex build ICU's Paragraph Layout library [default=yes].
+ [ --enable-layoutex build ICU's Paragraph Layout library [default=no].
icu-le-hb must be installed via pkg-config. See http://harfbuzz.org],
[case "${enableval}" in
yes) layoutex=$have_icu_le_hb ;;
no) layoutex=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-layoutex) ;;
esac],
- layoutex=$have_icu_le_hb)
+ layoutex=false)
ICU_CONDITIONAL(LAYOUTEX, test "$layoutex" = true)
# Enable/disable layout
@@ -1190,7 +1190,7 @@ fi
datapackaging_dir=`eval echo $thedatadir`"/icu/${VERSION}"
-datapackaging_msg="(No explaination for mode $datapackaging.)"
+datapackaging_msg="(No explanation for mode $datapackaging.)"
datapackaging_msg_path="ICU will look in $datapackaging_dir which is the installation location. Call u_setDataDirectory() or use the ICU_DATA environment variable to override."
datapackaging_msg_set="ICU will use the linked data library. If linked with the stub library located in stubdata/, the application can use udata_setCommonData() or set a data path to override."
@@ -1317,6 +1317,16 @@ fi
# Now that we're done using CPPFLAGS etc. for tests, we can change it
# for build.
+AC_LANG_PUSH([C++])
+# Silence a Clang warning about ambiguous operators with C++20 rewritten
+# expressions that possibly or maybe even probably is a mistake (ICU-20973).
+AX_CHECK_COMPILE_FLAG(
+ [-Wambiguous-reversed-operator],
+ [CXXFLAGS+=" -Wno-ambiguous-reversed-operator"],
+ [],
+ [-Werror])
+AC_LANG_POP([C++])
+
if test "${CC}" = "clang"; then
CLANGCFLAGS="-Qunused-arguments -Wno-parentheses-equality"
else
@@ -1379,6 +1389,7 @@ AC_CONFIG_FILES([icudefs.mk \
tools/icupkg/Makefile \
tools/icuswap/Makefile \
tools/pkgdata/Makefile \
+ tools/icuexportdata/Makefile \
tools/tzcode/Makefile \
tools/gencfu/Makefile \
tools/escapesrc/Makefile \
@@ -1399,6 +1410,7 @@ AC_CONFIG_FILES([icudefs.mk \
test/perf/ubrkperf/Makefile \
test/perf/charperf/Makefile \
test/perf/convperf/Makefile \
+ test/perf/localecanperf/Makefile \
test/perf/normperf/Makefile \
test/perf/DateFmtPerf/Makefile \
test/perf/howExpensiveIs/Makefile \
diff --git a/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py b/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py
index 063de7cd88e..899cba25b48 100644
--- a/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py
+++ b/Build/source/libs/icu/icu-src/source/data/BUILDRULES.py
@@ -22,9 +22,11 @@ def generate(config, io, common_vars):
requests += generate_cnvalias(config, io, common_vars)
requests += generate_ulayout(config, io, common_vars)
+ requests += generate_uemoji(config, io, common_vars)
requests += generate_confusables(config, io, common_vars)
requests += generate_conversion_mappings(config, io, common_vars)
requests += generate_brkitr_brk(config, io, common_vars)
+ requests += generate_brkitr_lstm(config, io, common_vars)
requests += generate_stringprep(config, io, common_vars)
requests += generate_brkitr_dictionaries(config, io, common_vars)
requests += generate_normalization(config, io, common_vars)
@@ -180,7 +182,9 @@ def generate_brkitr_brk(config, io, common_vars):
RepeatedExecutionRequest(
name = "brkitr_brk",
category = "brkitr_rules",
- dep_targets = [DepTarget("cnvalias"), DepTarget("ulayout")],
+ dep_targets =
+ [DepTarget("cnvalias"),
+ DepTarget("ulayout"), DepTarget("uemoji"), DepTarget("lstm_res")],
input_files = input_files,
output_files = output_files,
tool = IcuTool("genbrk"),
@@ -353,6 +357,25 @@ def generate_ulayout(config, io, common_vars):
]
+def generate_uemoji(config, io, common_vars):
+ # Unicode emoji properties
+ basename = "uemoji"
+ input_file = InFile("in/%s.icu" % basename)
+ output_file = OutFile("%s.icu" % basename)
+ return [
+ SingleExecutionRequest(
+ name = basename,
+ category = basename,
+ dep_targets = [],
+ input_files = [input_file],
+ output_files = [output_file],
+ tool = IcuTool("icupkg"),
+ args = "-t{ICUDATA_CHAR} {IN_DIR}/{INPUT_FILES[0]} {OUT_DIR}/{OUTPUT_FILES[0]}",
+ format_with = {}
+ )
+ ]
+
+
def generate_misc(config, io, common_vars):
# Misc Data Res Files
input_files = [InFile(filename) for filename in io.glob("misc/*.txt")]
@@ -457,6 +480,32 @@ def generate_translit(config, io, common_vars):
]
+def generate_brkitr_lstm(config, io, common_vars):
+ input_files = [InFile(filename) for filename in io.glob("brkitr/lstm/*.txt")]
+ input_basenames = [v.filename[12:] for v in input_files]
+ output_files = [
+ OutFile("brkitr/%s.res" % v[:-4])
+ for v in input_basenames
+ ]
+ return [
+ RepeatedOrSingleExecutionRequest(
+ name = "lstm_res",
+ category = "brkitr_lstm",
+ dep_targets = [],
+ input_files = input_files,
+ output_files = output_files,
+ tool = IcuTool("genrb"),
+ args = "-s {IN_DIR}/brkitr/lstm -d {OUT_DIR}/brkitr -i {OUT_DIR} "
+ "-k "
+ "{INPUT_BASENAME}",
+ format_with = {
+ },
+ repeat_with = {
+ "INPUT_BASENAME": utils.SpaceSeparatedList(input_basenames)
+ }
+ )
+ ]
+
def generate_tree(
config,
io,
diff --git a/Build/source/libs/icu/icu-src/source/data/Makefile.in b/Build/source/libs/icu/icu-src/source/data/Makefile.in
index f020bc82a88..454dec8a8c3 100644
--- a/Build/source/libs/icu/icu-src/source/data/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/data/Makefile.in
@@ -143,7 +143,7 @@ check-local:
ICUDATA_SOURCE_ARCHIVE = $(wildcard $(srcdir)/in/$(ICUDATA_PLATFORM_NAME).dat)
ifeq ($(ICUDATA_SOURCE_ARCHIVE),)
ICUDATA_ARCHIVE = $(firstword $(wildcard $(srcdir)/in/$(ICUDATA_BASENAME_VERSION)*.dat))
-# We don't have the data in the current endianess or charset.
+# We don't have the data in the current endianness or charset.
# See if we can find data of any archive type,
# and convert it to the current type.
ifneq ($(ICUDATA_ARCHIVE),)
@@ -159,7 +159,7 @@ endif
else
ifneq ($(ENABLE_STATIC),YES)
ifeq ($(PKGDATA_MODE),common)
-# We have a source data common archive in the native endianess,
+# We have a source data common archive in the native endianness,
# and it's what we want to build. Try to not run any of ICU's tools.
ICUDATA_SOURCE_IS_NATIVE_TARGET=YES
endif
diff --git a/Build/source/libs/icu/icu-src/source/data/build.xml b/Build/source/libs/icu/icu-src/source/data/build.xml
index ffee73d34b8..a7efc0675b1 100644
--- a/Build/source/libs/icu/icu-src/source/data/build.xml
+++ b/Build/source/libs/icu/icu-src/source/data/build.xml
@@ -30,18 +30,18 @@
<fail unless="is.cldr.dir.set" message="Please set the CLDR_DIR environment variable to the top level CLDR source dir (containing 'common')."/>
<available property="cldrtools.dir" value="${env.CLDR_DIR}/cldr-tools" file="${env.CLDR_DIR}/cldr-tools" type="dir"/>
- <available property="cldrtools.dir" value="${env.CLDR_DIR}/tools/java" file="${env.CLDR_DIR}/tools/java" type="dir"/>
+ <available property="cldrtools.dir" value="${env.CLDR_DIR}/tools" file="${env.CLDR_DIR}/tools" type="dir"/>
<fail unless="cldrtools.dir" message="Please make sure that the CLDR tools directory is checked out into CLDR_DIR"/>
- <available property="env.CLDR_CLASSES" value="${cldrtools.dir}/classes" file="${cldrtools.dir}/classes" type="dir"/>
- <available property="cldrtools.jar" value="${cldrtools.dir}/cldr.jar" file="${cldrtools.dir}/cldr.jar" type="file"/>
+ <available property="env.CLDR_CLASSES" value="${cldrtools.dir}/cldr-code/target/classes" file="${cldrtools.dir}/cldr-code/target/classes" type="dir"/>
+ <available property="cldrtools.jar" value="${cldrtools.dir}/cldr-code/target/cldr-code.jar" file="${cldrtools.dir}/cldr-code/target/cldr-code.jar" type="file"/>
<condition property="is.cldr.classes.set">
<or>
<isset property="env.CLDR_CLASSES" />
<isset property="cldrtools.jar" />
</or>
</condition>
- <fail unless="is.cldr.classes.set" message="CLDR classes not found in ${cldrtools.dir}. Please either set the CLDR_CLASSES environment variable or build cldr.jar."/>
+ <fail unless="is.cldr.classes.set" message="CLDR classes not found in ${cldrtools.dir}/cldr-code/target/classes. Please either set the CLDR_CLASSES environment variable or build cldr-code.jar."/>
<property name="env.CLDR_TMP_DIR" location="${env.CLDR_DIR}/../cldr-aux" /> <!-- Hack: see CLDRPaths -->
<property name="cldr.prod.dir" location="${env.CLDR_TMP_DIR}/production/" />
@@ -58,12 +58,13 @@
<target name="setup" depends="init">
<mkdir dir="${env.CLDR_TMP_DIR}"/> <!-- make sure parent dir exists -->
<condition property="cldrprod.exists">
- <available file="${cldr.prod.dir}" type="dir"/>
+ <available file="${cldr.prod.dir}/common" type="dir"/>
</condition>
</target>
<target name="cleanprod" depends="init, setup" if="cldrprod.exists">
- <delete dir="${cldr.prod.dir}" />
+ <delete dir="${cldr.prod.dir}/common" />
+ <delete dir="${cldr.prod.dir}/keyboards" />
</target>
<target name="proddata" depends="init,setup" unless="cldrprod.exists">
<echo message="Rebuilding ${cldr.prod.dir} - takes a while!"/>
diff --git a/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt b/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
index 93b9ef391a7..93ba253d715 100644
--- a/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
+++ b/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
@@ -30,6 +30,9 @@
# plus the xml-apis.jar from the Apache xalan package
# (http://xml.apache.org/xalan-j/downloads.html).
#
+# You will also need to have performed the CLDR Maven setup (non-Eclipse version)
+# per http://cldr.unicode.org/development/maven
+#
# Note: Enough things can (and will) fail in this process that it is best to
# run the commands separately from an interactive shell. They should all
# copy and paste without problems.
@@ -195,9 +198,19 @@ ant copy-cldr-testdata
# 4d. Copy from CLDR common/testData/localeIdentifiers/localeCanonicalization.txt
# into icu4c/source/test/testdata/localeCanonicalization.txt
# and icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode/localeCanonicalization.txt
-# and add the following line to the begginning of these two files
+# and add the following line to the beginning of these two files
# # File copied from cldr common/testData/localeIdentifiers/localeCanonicalization.txt
+# 4e. For the time being, manually re-add the lstm entries in data/brkitr/root.txt
+
+open $ICU4C_DIR/source/data/brkitr/root.txt
+
+# paste the following block at the end, after the dictionaries block>
+ lstm{
+ Thai{"Thai_graphclust_model4_heavy.res"}
+ Mymr{"Burmese_graphclust_model5_heavy.res"}
+ }
+
# 5. Check which data files have modifications, which have been added or removed
# (if there are no changes, you may not need to proceed further). Make sure the
# list seems reasonable.
diff --git a/Build/source/libs/icu/icu-src/source/data/dtd/cldr-40/common/dtd/ldml.dtd b/Build/source/libs/icu/icu-src/source/data/dtd/cldr-40/common/dtd/ldml.dtd
new file mode 100644
index 00000000000..9d3ad4b5ce1
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/data/dtd/cldr-40/common/dtd/ldml.dtd
@@ -0,0 +1,3212 @@
+<!--
+Copyright © 2003-2019 Unicode, Inc. and others. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software, (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.
+$Revision$
+-->
+
+<!ELEMENT ldml ( identity, ( alias | ( fallback*, localeDisplayNames?, layout?, contextTransforms?, characters?, delimiters?, measurement?, dates?, numbers?, units?, listPatterns?, collations?, posix?, characterLabels?, segmentations?, rbnf?, typographicNames?, annotations?, metadata?, references?, special* ) ) ) >
+<!ATTLIST ldml version CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST ldml draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT identity ( alias | ( version, generation?, language, script?, territory?, variant?, special* ) ) >
+<!ATTLIST identity draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!-- ######################################################### -->
+<!-- # These elements are common to almost all elements defined -->
+
+<!ELEMENT alias ( special* ) >
+<!ATTLIST alias source NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/locale-->
+ <!--@VALUE-->
+<!ATTLIST alias path CDATA #IMPLIED >
+ <!--@MATCH:regex/\.\..*-->
+ <!--@VALUE-->
+<!ATTLIST alias alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST alias draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT special ANY >
+
+<!ELEMENT version EMPTY >
+<!ATTLIST version number CDATA #REQUIRED >
+ <!--@MATCH:regex/\$Revision.*\$-->
+ <!--@METADATA-->
+<!ATTLIST version cldrVersion CDATA #FIXED "40" >
+ <!--@MATCH:any-->
+ <!--@VALUE-->
+<!ATTLIST version draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT generation EMPTY >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST generation date CDATA #REQUIRED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST generation draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT language ( #PCDATA ) >
+<!ATTLIST language type NMTOKEN #REQUIRED >
+ <!--@MATCH:validity/locale-->
+<!ATTLIST language alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/long, secondary, short, variant, menu-->
+<!ATTLIST language draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST language references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT script ( #PCDATA ) >
+<!ATTLIST script type NMTOKEN #REQUIRED >
+ <!--@MATCH:validity/script-->
+<!ATTLIST script alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/secondary, short, stand-alone, variant-->
+<!ATTLIST script draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST script references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT territory ( #PCDATA ) >
+<!ATTLIST territory type NMTOKEN #REQUIRED >
+ <!--@MATCH:validity/region-->
+<!ATTLIST territory alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/short, variant-->
+<!ATTLIST territory draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST territory references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT variant ( #PCDATA ) >
+<!ATTLIST variant type NMTOKEN #REQUIRED >
+ <!--@MATCH:validity/variant-->
+<!ATTLIST variant alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/secondary, variant-->
+<!ATTLIST variant draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST variant references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT fallback ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST fallback alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST fallback draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST fallback references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT localeDisplayNames ( alias | ( localeDisplayPattern?, languages?, scripts?, territories?, subdivisions?, variants?, keys?, types?, transformNames?, measurementSystemNames?, codePatterns?, special* ) ) >
+<!ATTLIST localeDisplayNames draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT localeDisplayPattern ( alias | ( localePattern*, localeSeparator*, localeKeyTypePattern*, special* ) ) >
+<!ATTLIST localeDisplayPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST localeDisplayPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST localeDisplayPattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT localePattern ( #PCDATA ) >
+<!ATTLIST localePattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST localePattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST localePattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT localeSeparator ( #PCDATA ) >
+<!ATTLIST localeSeparator alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST localeSeparator draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST localeSeparator references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT localeKeyTypePattern ( #PCDATA ) >
+<!ATTLIST localeKeyTypePattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST localeKeyTypePattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST localeKeyTypePattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!-- # Either 1 alias OR any specials, any order, zero or more language -->
+
+<!ELEMENT languages ( alias | ( language | special )* ) >
+<!ATTLIST languages draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST languages standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST languages references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST languages validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!-- # Either 1 alias OR any specials, any order, zero or more script -->
+
+<!ELEMENT scripts ( alias | ( script | special )* ) >
+<!ATTLIST scripts draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST scripts standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST scripts references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST scripts validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!-- # Either 1 alias OR any specials, any order, zero or more territory -->
+
+<!ELEMENT territories ( alias | ( territory | special )* ) >
+<!ATTLIST territories draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST territories standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST territories references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST territories validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT subdivisions ( alias | ( subdivision | special )* ) >
+<!ATTLIST subdivisions draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST subdivisions references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT subdivision ( #PCDATA ) >
+<!ATTLIST subdivision type NMTOKEN #REQUIRED >
+ <!--@MATCH:or/validity/subdivision||literal/AS, AW, AX, BL, CP, CW, GF, GP, GU, HK, IC, MF, MO, MP, MQ, NC, PF, PM, PR, RE, SX, TA, TF, TW, UM, VI, WF, YT, itsd, no50-->
+<!ATTLIST subdivision alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST subdivision draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!-- # Either 1 alias OR any specials, any order, zero or more variant -->
+
+<!ELEMENT variants ( alias | ( variant | special )* ) >
+<!ATTLIST variants draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST variants standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST variants references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST variants validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!-- # Either 1 alias OR any specials, any order, zero or more key -->
+
+<!ELEMENT keys ( alias | ( key | special )* ) >
+<!ATTLIST keys draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST keys standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST keys references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST keys validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT key ( #PCDATA ) >
+<!ATTLIST key type NMTOKEN #REQUIRED >
+ <!--@MATCH:or/bcp47/anykey||literal/t-->
+<!ATTLIST key alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST key draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST key references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!-- # Either 1 alias OR any specials, any order, zero or more type -->
+
+<!ELEMENT types ( alias | ( type | special )* ) >
+<!ATTLIST types draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST types standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST types references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST types validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT type ( #PCDATA ) >
+<!ATTLIST type key NMTOKEN #REQUIRED >
+ <!--@MATCH:bcp47/anykey-->
+<!ATTLIST type type NMTOKEN #REQUIRED >
+ <!--@MATCH:bcp47/anyvalue-->
+<!ATTLIST type alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/short, variant-->
+<!ATTLIST type draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST type references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT transformNames ( alias | ( transformName | special )* ) >
+ <!--@DEPRECATED-->
+<!ATTLIST transformNames draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST transformNames references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT transformName ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST transformName type NMTOKEN #REQUIRED >
+ <!--@DEPRECATED-->
+<!ATTLIST transformName alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST transformName draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST transformName references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!-- # Either 1 alias OR any specials, any order, zero or more measurementSystemName -->
+
+<!ELEMENT measurementSystemNames ( alias | ( measurementSystemName | special )* ) >
+<!ATTLIST measurementSystemNames draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurementSystemNames references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST measurementSystemNames validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT measurementSystemName ( #PCDATA ) >
+<!ATTLIST measurementSystemName type (US | metric | UK) #REQUIRED >
+<!ATTLIST measurementSystemName alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST measurementSystemName draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST measurementSystemName references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT codePatterns ( alias | ( codePattern | special )* ) >
+
+<!ELEMENT codePattern ( #PCDATA ) >
+<!ATTLIST codePattern type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/language, script, territory-->
+<!ATTLIST codePattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST codePattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST codePattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!-- ######################################################### -->
+<!-- # layout and orientation are script specific, so validSublocales attribute is not required -->
+
+<!ELEMENT layout ( alias | ( orientation*, inList*, inText*, special* ) ) >
+<!ATTLIST layout draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST layout references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT orientation ( alias | ( characterOrder*, lineOrder*, special* ) ) >
+<!ATTLIST orientation characters (left-to-right | right-to-left | top-to-bottom | bottom-to-top) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST orientation lines (left-to-right | right-to-left | top-to-bottom | bottom-to-top) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST orientation alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST orientation draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST orientation standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST orientation references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT characterOrder ( #PCDATA ) >
+<!ATTLIST characterOrder alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST characterOrder draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT lineOrder ( #PCDATA ) >
+<!ATTLIST lineOrder alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST lineOrder draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT inList ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST inList casing (titlecase-words | titlecase-firstword | lowercase-words | mixed) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST inList alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST inList draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST inList references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT inText ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST inText type (languages | scripts | territories | variants | keys | types | measurementSystemNames | monthWidth | dayWidth | quarterWidth | long | fields | currency) #IMPLIED >
+ <!--@DEPRECATED-->
+<!ATTLIST inText alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST inText draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST inText references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT contextTransforms ( alias | ( contextTransformUsage*, special* ) ) >
+<!ATTLIST contextTransforms alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST contextTransforms draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST contextTransforms references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST contextTransforms validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT contextTransformUsage ( alias | ( contextTransform*, special* ) ) >
+<!ATTLIST contextTransformUsage type CDATA #REQUIRED >
+ <!--@MATCH:literal/calendar-field, currencyName, day-format-except-narrow, day-standalone-except-narrow, era-abbr, era-name, keyValue, languages, month-format-except-narrow, month-standalone-except-narrow, number-spellout, relative, script, typographicNames-->
+<!ATTLIST contextTransformUsage alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST contextTransformUsage draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST contextTransformUsage references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST contextTransformUsage validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT contextTransform ( #PCDATA ) >
+<!ATTLIST contextTransform type (uiListOrMenu | stand-alone) #REQUIRED >
+<!ATTLIST contextTransform alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST contextTransform draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST contextTransform references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT characters ( alias | ( exemplarCharacters*, ellipsis*, moreInformation*, stopwords*, indexLabels*, mapping*, parseLenients*, special* ) ) >
+<!ATTLIST characters draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT exemplarCharacters ( #PCDATA | cp )* >
+<!ATTLIST exemplarCharacters type (auxiliary | standard | punctuation | currencySymbol | index | numbers) #IMPLIED >
+ <!--@DEPRECATED:currencySymbol-->
+<!ATTLIST exemplarCharacters alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST exemplarCharacters draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST exemplarCharacters standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST exemplarCharacters references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST exemplarCharacters validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!-- # This element can occur anywhere there may be localizable data -->
+
+<!ELEMENT cp ( special* ) >
+ <!--@DEPRECATED-->
+<!ATTLIST cp hex NMTOKEN #REQUIRED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT ellipsis ( #PCDATA ) >
+<!ATTLIST ellipsis type (initial | medial | final | word-initial | word-medial | word-final) #REQUIRED >
+<!ATTLIST ellipsis alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST ellipsis draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST ellipsis references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT moreInformation ( #PCDATA ) >
+<!ATTLIST moreInformation alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST moreInformation draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST moreInformation references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT stopwords ( stopwordList* ) >
+ <!--@DEPRECATED-->
+
+<!ELEMENT stopwordList ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST stopwordList type NMTOKEN #REQUIRED >
+ <!--@DEPRECATED-->
+<!ATTLIST stopwordList alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST stopwordList draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST stopwordList references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT indexLabels ( indexSeparator*, compressedIndexSeparator*, indexRangePattern*, indexLabelBefore*, indexLabelAfter*, indexLabel* ) >
+ <!--@DEPRECATED-->
+
+<!ELEMENT indexSeparator ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST indexSeparator alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexSeparator draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexSeparator references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT compressedIndexSeparator ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST compressedIndexSeparator alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST compressedIndexSeparator draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST compressedIndexSeparator references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT indexRangePattern ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST indexRangePattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexRangePattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexRangePattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT indexLabelBefore ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabelBefore alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabelBefore draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabelBefore references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT indexLabelAfter ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabelAfter alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabelAfter draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabelAfter references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT indexLabel ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabel indexSource CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabel priority (1 | 2 | 3) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabel alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabel draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST indexLabel references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT mapping ( special* ) >
+ <!--@DEPRECATED-->
+<!ATTLIST mapping registry NMTOKEN #REQUIRED >
+ <!--@DEPRECATED-->
+<!ATTLIST mapping type NMTOKEN #IMPLIED >
+ <!-- use choice instead -->
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST mapping choice NMTOKEN #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST mapping alt NMTOKENS #IMPLIED >
+ <!--@DEPRECATED-->
+<!ATTLIST mapping draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST mapping standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST mapping references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST mapping validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT parseLenients ( alias | ( parseLenient*, special* ) ) >
+<!ATTLIST parseLenients scope (general | number | date) #REQUIRED >
+<!ATTLIST parseLenients level (lenient | stricter) #REQUIRED >
+
+<!ELEMENT parseLenient ( #PCDATA ) >
+<!ATTLIST parseLenient sample CDATA #REQUIRED >
+ <!--@MATCH:any-->
+<!ATTLIST parseLenient alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST parseLenient draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT delimiters ( alias | ( quotationStart*, quotationEnd*, alternateQuotationStart*, alternateQuotationEnd*, special* ) ) >
+<!ATTLIST delimiters alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST delimiters draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST delimiters standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST delimiters references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST delimiters validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT quotationStart ( #PCDATA | cp )* >
+<!ATTLIST quotationStart alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST quotationStart draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST quotationStart references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT quotationEnd ( #PCDATA | cp )* >
+<!ATTLIST quotationEnd alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST quotationEnd draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST quotationEnd references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT alternateQuotationStart ( #PCDATA | cp )* >
+<!ATTLIST alternateQuotationStart alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST alternateQuotationStart draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST alternateQuotationStart references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT alternateQuotationEnd ( #PCDATA | cp )* >
+<!ATTLIST alternateQuotationEnd alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST alternateQuotationEnd draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST alternateQuotationEnd references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT measurement ( alias | ( measurementSystem*, paperSize*, special* ) ) >
+ <!-- use measurementData in supplemental instead -->
+ <!--@DEPRECATED-->
+<!ATTLIST measurement alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurement draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurement standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurement references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurement validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT measurementSystem ( special* ) >
+ <!-- use measurementSystem in supplemental instead -->
+ <!--@DEPRECATED-->
+<!ATTLIST measurementSystem type (metric | US | UK) #REQUIRED >
+ <!-- use choice instead -->
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurementSystem choice (metric | US | UK) #IMPLIED >
+ <!-- really required, but needs to be optional to support type also -->
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurementSystem alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurementSystem draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurementSystem standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurementSystem references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST measurementSystem validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT paperSize ( alias | ( height*, width*, special* ) ) >
+ <!-- use paperSize in supplemental instead -->
+ <!--@DEPRECATED-->
+<!ATTLIST paperSize alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST paperSize draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST paperSize standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST paperSize references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST paperSize validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT height ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST height alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST height draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST height references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT width ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST width alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST width draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST width references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT dates ( alias | ( localizedPatternChars*, dateRangePattern*, calendars?, fields?, timeZoneNames?, special* ) ) >
+<!ATTLIST dates alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dates draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dates standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dates references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST dates validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT localizedPatternChars ( #PCDATA | cp )* >
+ <!--@DEPRECATED-->
+<!ATTLIST localizedPatternChars alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST localizedPatternChars draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST localizedPatternChars standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST localizedPatternChars references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST localizedPatternChars validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dateRangePattern ( #PCDATA ) >
+ <!-- use intervalFormats. -->
+ <!--@DEPRECATED-->
+<!ATTLIST dateRangePattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateRangePattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateRangePattern standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateRangePattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateRangePattern validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT calendars ( alias | ( default*, calendar*, special* ) ) >
+ <!-- use calendarPreferenceData instead of default element -->
+<!ATTLIST calendars draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST calendars validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT default ( special* ) >
+ <!--@DEPRECATED-->
+<!ATTLIST default type NMTOKEN #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST default choice NMTOKEN #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST default alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST default draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST default references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT calendar ( alias | ( months?, monthNames?, monthAbbr?, monthPatterns?, days?, dayNames?, dayAbbr?, quarters?, week?, am*, pm*, dayPeriods?, eras?, cyclicNameSets?, dateFormats?, timeFormats?, dateTimeFormats?, fields*, special* ) ) >
+ <!-- use of fields is deprecated here -->
+<!ATTLIST calendar type NMTOKEN #REQUIRED >
+ <!--@MATCH:bcp47/ca-->
+<!ATTLIST calendar alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST calendar draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST calendar standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST calendar references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST calendar validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT months ( alias | ( default*, monthContext*, special* ) ) >
+<!ATTLIST months alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST months draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST months standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST months references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST months validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT monthContext ( alias | ( default*, monthWidth*, special* ) ) >
+<!ATTLIST monthContext type (format | stand-alone) #REQUIRED >
+<!ATTLIST monthContext alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST monthContext draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST monthContext standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST monthContext references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST monthContext validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT monthWidth ( alias | ( month*, special* ) ) >
+<!ATTLIST monthWidth type (abbreviated | narrow | wide) #REQUIRED >
+<!ATTLIST monthWidth alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST monthWidth draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST monthWidth standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST monthWidth references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST monthWidth validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT month ( #PCDATA | cp )* >
+<!ATTLIST month type (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13) #REQUIRED >
+<!ATTLIST month yeartype (standard | leap) #IMPLIED >
+<!ATTLIST month alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST month draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST month references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT monthNames ( alias | ( month*, special* ) ) >
+ <!--@DEPRECATED-->
+<!ATTLIST monthNames draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT monthAbbr ( alias | ( month*, special* ) ) >
+ <!--@DEPRECATED-->
+<!ATTLIST monthAbbr draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT monthPatterns ( alias | ( monthPatternContext*, special* ) ) >
+<!ATTLIST monthPatterns alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST monthPatterns draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST monthPatterns references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST monthPatterns validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT monthPatternContext ( alias | ( monthPatternWidth*, special* ) ) >
+<!ATTLIST monthPatternContext type (format | stand-alone | numeric) #REQUIRED >
+<!ATTLIST monthPatternContext alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST monthPatternContext draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST monthPatternContext references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST monthPatternContext validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT monthPatternWidth ( alias | ( monthPattern*, special* ) ) >
+<!ATTLIST monthPatternWidth type (abbreviated | narrow | wide | all) #REQUIRED >
+<!ATTLIST monthPatternWidth alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST monthPatternWidth draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST monthPatternWidth references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST monthPatternWidth validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT monthPattern ( #PCDATA ) >
+<!ATTLIST monthPattern type (leap | standardAfterLeap | combined) #REQUIRED >
+<!ATTLIST monthPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST monthPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST monthPattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT days ( alias | ( default*, dayContext*, special* ) ) >
+<!ATTLIST days alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST days draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST days standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST days references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST days validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dayContext ( alias | ( default*, dayWidth*, special* ) ) >
+<!ATTLIST dayContext type (format | stand-alone) #REQUIRED >
+<!ATTLIST dayContext alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dayContext draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dayContext standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dayContext references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST dayContext validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dayWidth ( alias | ( day*, special* ) ) >
+<!ATTLIST dayWidth type (abbreviated | narrow | short | wide) #REQUIRED >
+<!ATTLIST dayWidth alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dayWidth draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dayWidth standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dayWidth references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST dayWidth validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT day ( #PCDATA ) >
+<!ATTLIST day type (sun | mon | tue | wed | thu | fri | sat) #REQUIRED >
+<!ATTLIST day alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST day draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST day references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT dayNames ( alias | ( day*, special* ) ) >
+ <!--@DEPRECATED-->
+<!ATTLIST dayNames draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dayAbbr ( alias | ( day*, special* ) ) >
+ <!--@DEPRECATED-->
+<!ATTLIST dayAbbr draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT quarters ( alias | ( default*, quarterContext*, special* ) ) >
+<!ATTLIST quarters alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST quarters draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST quarters references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST quarters validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT quarterContext ( alias | ( default*, quarterWidth*, special* ) ) >
+<!ATTLIST quarterContext type (format | stand-alone) #REQUIRED >
+<!ATTLIST quarterContext alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST quarterContext draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST quarterContext references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST quarterContext validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT quarterWidth ( alias | ( quarter*, special* ) ) >
+<!ATTLIST quarterWidth type (abbreviated | narrow | wide) #REQUIRED >
+<!ATTLIST quarterWidth alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST quarterWidth draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST quarterWidth references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST quarterWidth validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT quarter ( #PCDATA ) >
+<!ATTLIST quarter type (1 | 2 | 3 | 4) #REQUIRED >
+<!ATTLIST quarter alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST quarter draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST quarter references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT week ( alias | ( minDays*, firstDay*, weekendStart*, weekendEnd*, special* ) ) >
+ <!-- use supplemental weekData -->
+ <!--@DEPRECATED-->
+<!ATTLIST week alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST week draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST week standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST week references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST week validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT minDays ( special* ) >
+ <!--@DEPRECATED-->
+<!ATTLIST minDays count (1 | 2 | 3 | 4 | 5 | 6 | 7) #REQUIRED >
+ <!--@DEPRECATED-->
+<!ATTLIST minDays alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST minDays draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST minDays references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT firstDay ( special* ) >
+ <!-- use supplemental data -->
+ <!--@DEPRECATED-->
+<!ATTLIST firstDay day (sun | mon | tue | wed | thu | fri | sat) #REQUIRED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST firstDay alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST firstDay draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST firstDay references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT weekendStart ( special* ) >
+ <!-- use supplemental data -->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendStart day (sun | mon | tue | wed | thu | fri | sat) #REQUIRED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendStart time CDATA "00:00" >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendStart alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendStart draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendStart references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT weekendEnd ( special* ) >
+ <!-- use supplemental data -->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendEnd day (sun | mon | tue | wed | thu | fri | sat) #REQUIRED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendEnd time CDATA "24:00" >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendEnd alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendEnd draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST weekendEnd references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT am ( #PCDATA ) >
+ <!-- use dayPeriods -->
+ <!--@DEPRECATED-->
+<!ATTLIST am alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST am draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST am references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST am validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT pm ( #PCDATA ) >
+ <!-- use dayPeriods -->
+ <!--@DEPRECATED-->
+<!ATTLIST pm alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST pm draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST pm references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST pm validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dayPeriods ( alias | ( dayPeriodContext*, special* ) ) >
+<!ATTLIST dayPeriods draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dayPeriods references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT dayPeriodContext ( alias | ( dayPeriodWidth*, special* ) ) >
+<!ATTLIST dayPeriodContext type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/format, stand-alone-->
+<!ATTLIST dayPeriodContext draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dayPeriodContext references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT dayPeriodWidth ( alias | ( dayPeriod*, special* ) ) >
+<!ATTLIST dayPeriodWidth type (abbreviated | narrow | wide) #REQUIRED >
+<!ATTLIST dayPeriodWidth draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dayPeriodWidth references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT dayPeriod ( #PCDATA ) >
+<!ATTLIST dayPeriod type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/afternoon1, afternoon2, am, evening1, evening2, midnight, morning1, morning2, night1, night2, noon, pm-->
+<!ATTLIST dayPeriod alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dayPeriod draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST dayPeriod references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT eras ( alias | ( eraNames?, eraAbbr?, eraNarrow?, special* ) ) >
+<!ATTLIST eras alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST eras draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST eras standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST eras references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST eras validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT eraNames ( alias | ( era*, special* ) ) >
+<!ATTLIST eraNames alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST eraNames draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST eraNames references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST eraNames validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT era ( #PCDATA ) >
+<!ATTLIST era type NMTOKEN #REQUIRED >
+ <!--@MATCH:range/0~237-->
+<!ATTLIST era alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST era draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST era references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT eraAbbr ( alias | ( era*, special* ) ) >
+<!ATTLIST eraAbbr alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST eraAbbr draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST eraAbbr references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST eraAbbr validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT eraNarrow ( alias | ( era*, special* ) ) >
+<!ATTLIST eraNarrow alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST eraNarrow draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST eraNarrow references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST eraNarrow validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT cyclicNameSets ( alias | ( cyclicNameSet*, special* ) ) >
+<!ATTLIST cyclicNameSets alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST cyclicNameSets draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST cyclicNameSets references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST cyclicNameSets validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT cyclicNameSet ( alias | ( cyclicNameContext*, special* ) ) >
+<!ATTLIST cyclicNameSet type (years | months | days | dayParts | zodiacs | solarTerms) #REQUIRED >
+<!ATTLIST cyclicNameSet alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST cyclicNameSet draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST cyclicNameSet references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST cyclicNameSet validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT cyclicNameContext ( alias | ( cyclicNameWidth*, special* ) ) >
+<!ATTLIST cyclicNameContext type (format | stand-alone) #REQUIRED >
+<!ATTLIST cyclicNameContext alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST cyclicNameContext draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST cyclicNameContext references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST cyclicNameContext validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT cyclicNameWidth ( alias | ( cyclicName*, special* ) ) >
+<!ATTLIST cyclicNameWidth type (abbreviated | narrow | wide) #REQUIRED >
+<!ATTLIST cyclicNameWidth alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST cyclicNameWidth draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST cyclicNameWidth references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST cyclicNameWidth validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT cyclicName ( #PCDATA ) >
+<!ATTLIST cyclicName type NMTOKEN #REQUIRED >
+ <!--@MATCH:range/1~60-->
+<!ATTLIST cyclicName alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST cyclicName draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST cyclicName references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT dateFormats ( alias | ( default*, dateFormatLength*, special* ) ) >
+<!ATTLIST dateFormats draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dateFormatLength ( alias | ( default*, dateFormat*, special* ) ) >
+<!ATTLIST dateFormatLength type (full | long | medium | short) #REQUIRED >
+<!ATTLIST dateFormatLength alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dateFormatLength draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateFormatLength standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateFormatLength references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST dateFormatLength validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dateFormat ( alias | ( pattern*, datetimeSkeleton*, displayName*, special* ) ) >
+<!ATTLIST dateFormat type NMTOKEN "standard" >
+ <!--@MATCH:literal/standard-->
+<!ATTLIST dateFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dateFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateFormat standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST dateFormat validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT pattern ( #PCDATA ) >
+<!ATTLIST pattern type NMTOKEN "standard" >
+ <!--@MATCH:literal/1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000, 100000000000000, approximately, atLeast, atMost, range, standard-->
+<!ATTLIST pattern numbers CDATA #IMPLIED >
+ <!-- TODO: generalize this to be any (M=|d=)?<numberSystem> -->
+ <!--@MATCH:literal/M=romanlow, d=hanidays, hanidec, hebr, y=jpanyear-->
+ <!--@VALUE-->
+<!ATTLIST pattern count (0 | 1 | zero | one | two | few | many | other) #IMPLIED >
+ <!-- Only used for decimalFormats type="1000..." -->
+<!ATTLIST pattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST pattern draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST pattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT datetimeSkeleton ( #PCDATA ) >
+<!ATTLIST datetimeSkeleton numbers CDATA #IMPLIED >
+ <!-- TODO: generalize this to be any (M=|d=)?<numberSystem> -->
+ <!--@MATCH:literal/M=romanlow, d=hanidays, hanidec, hebr, y=jpanyear-->
+ <!--@VALUE-->
+<!ATTLIST datetimeSkeleton alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST datetimeSkeleton draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST datetimeSkeleton references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT displayName ( #PCDATA ) >
+<!ATTLIST displayName count (0 | 1 | zero | one | two | few | many | other) #IMPLIED >
+ <!-- only for currencies -->
+<!ATTLIST displayName alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST displayName draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST displayName references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT timeFormats ( alias | ( default*, timeFormatLength*, special* ) ) >
+<!ATTLIST timeFormats draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST timeFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT timeFormatLength ( alias | ( default*, timeFormat*, special* ) ) >
+<!ATTLIST timeFormatLength type (full | long | medium | short) #REQUIRED >
+<!ATTLIST timeFormatLength alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST timeFormatLength draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST timeFormatLength standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST timeFormatLength references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST timeFormatLength validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT timeFormat ( alias | ( pattern*, datetimeSkeleton*, displayName*, special* ) ) >
+<!ATTLIST timeFormat type NMTOKEN "standard" >
+ <!--@MATCH:literal/standard-->
+<!ATTLIST timeFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST timeFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST timeFormat standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST timeFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST timeFormat validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dateTimeFormats ( alias | ( default*, dateTimeFormatLength*, availableFormats*, appendItems*, intervalFormats*, special* ) ) >
+<!ATTLIST dateTimeFormats draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateTimeFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dateTimeFormatLength ( alias | ( default*, dateTimeFormat*, special* ) ) >
+<!ATTLIST dateTimeFormatLength type (full | long | medium | short) #IMPLIED >
+<!ATTLIST dateTimeFormatLength alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dateTimeFormatLength draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateTimeFormatLength standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateTimeFormatLength references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST dateTimeFormatLength validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dateTimeFormat ( alias | ( pattern*, displayName*, special* ) ) >
+<!ATTLIST dateTimeFormat type NMTOKEN "standard" >
+ <!--@MATCH:literal/standard-->
+<!ATTLIST dateTimeFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dateTimeFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateTimeFormat standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST dateTimeFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST dateTimeFormat validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT availableFormats ( alias | ( dateFormatItem*, special* ) ) >
+<!ATTLIST availableFormats alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST availableFormats draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST availableFormats references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST availableFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT dateFormatItem ( #PCDATA ) >
+<!ATTLIST dateFormatItem id CDATA #REQUIRED >
+ <!-- TODO rationalize this list -->
+ <!--@MATCH:literal/Bh, Bhm, Bhms, E, EBhm, EBhms, EEEEd, EHm, EHms, Ed, Ehm, Ehms, Gy, GyM, GyMEEEEd, GyMMM, GyMMMEEEEd, GyMMMEd, GyMMMM, GyMMMMEd, GyMMMMd, GyMMMd, GyMd, H, HHmm, HHmmZ, HHmmss, Hm, HmZ, Hmm, Hms, Hmsv, Hmsvvvv, Hmv, Hmvvvv, M, MEEEEd, MEd, MMM, MMMEEEEd, MMMEd, MMMM, MMMMEEEEd, MMMMEd, MMMMW, MMMMd, MMMMdd, MMMd, MMMdd, MMd, MMdd, Md, Mdd, UM, UMMM, UMMMd, UMd, d, h, hhmm, hhmmss, hm, hms, hmsv, hmsvvvv, hmv, hmvvvv, mmss, ms, y, yM, yMEEEEd, yMEd, yMM, yMMM, yMMMEEEEd, yMMMEd, yMMMM, yMMMMEEEEd, yMMMMEd, yMMMMccccd, yMMMMd, yMMMd, yMMdd, yMd, yQ, yQQQ, yQQQQ, yw, yyyy, yyyyM, yyyyMEEEEd, yyyyMEd, yyyyMM, yyyyMMM, yyyyMMMEEEEd, yyyyMMMEd, yyyyMMMM, yyyyMMMMEd, yyyyMMMMccccd, yyyyMMMMd, yyyyMMMd, yyyyMMdd, yyyyMd, yyyyQQQ, yyyyQQQQ-->
+<!ATTLIST dateFormatItem count (zero | one | two | few | many | other) #IMPLIED >
+<!ATTLIST dateFormatItem alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST dateFormatItem draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST dateFormatItem references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT appendItems ( alias | ( appendItem*, special* ) ) >
+<!ATTLIST appendItems alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST appendItems draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST appendItems references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST appendItems validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT appendItem ( #PCDATA ) >
+<!ATTLIST appendItem request CDATA #REQUIRED >
+ <!--@MATCH:literal/Day, Day-Of-Week, Era, Hour, Minute, Month, Quarter, Second, Timezone, Week, Year-->
+<!ATTLIST appendItem alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST appendItem draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST appendItem references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT intervalFormats ( alias | ( intervalFormatFallback*, intervalFormatItem*, special* ) ) >
+<!ATTLIST intervalFormats alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST intervalFormats draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST intervalFormats references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST intervalFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT intervalFormatFallback ( #PCDATA ) >
+<!ATTLIST intervalFormatFallback alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST intervalFormatFallback draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST intervalFormatFallback references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST intervalFormatFallback validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT intervalFormatItem ( alias | ( greatestDifference*, special* ) ) >
+<!ATTLIST intervalFormatItem id NMTOKEN #REQUIRED >
+ <!-- TODO: check to see if this should be minimized -->
+ <!--@MATCH:literal/Bh, Bhm, Gy, GyM, GyMEd, GyMMM, GyMMMEd, GyMMMd, GyMd, H, Hm, Hmv, Hv, M, MEd, MMM, MMMEEEEd, MMMEd, MMMM, MMMMEd, MMMMd, MMMd, Md, d, h, hm, hmv, hv, y, yM, yMEd, yMMM, yMMMEEEEd, yMMMEd, yMMMM, yMMMMEEEEd, yMMMMEd, yMMMMd, yMMMd, yMd, GGGGGyM, GGGGGyMEd, GGGGGyMd, GyMMMM, GyMMMMEd, GyMMMMd-->
+<!ATTLIST intervalFormatItem alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST intervalFormatItem draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST intervalFormatItem references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST intervalFormatItem validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT greatestDifference ( #PCDATA ) >
+<!ATTLIST greatestDifference id NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/B, G, H, M, a, d, h, m, y-->
+<!ATTLIST greatestDifference alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST greatestDifference draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST greatestDifference references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST greatestDifference validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT fields ( alias | ( field*, special* ) ) >
+<!ATTLIST fields alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST fields draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST fields standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST fields references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST fields validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT field ( alias | ( displayName*, relative*, relativeTime*, relativePeriod*, special* ) ) >
+<!ATTLIST field type (era | era-short | era-narrow | year | year-short | year-narrow | quarter | quarter-short | quarter-narrow | month | month-short | month-narrow | week | week-short | week-narrow | weekOfMonth | weekOfMonth-short | weekOfMonth-narrow | day | day-short | day-narrow | dayOfYear | dayOfYear-short | dayOfYear-narrow | weekday | weekday-short | weekday-narrow | weekdayOfMonth | weekdayOfMonth-short | weekdayOfMonth-narrow | sun | sun-short | sun-narrow | mon | mon-short | mon-narrow | tue | tue-short | tue-narrow | wed | wed-short | wed-narrow | thu | thu-short | thu-narrow | fri | fri-short | fri-narrow | sat | sat-short | sat-narrow | dayperiod | dayperiod-short | dayperiod-narrow | hour | hour-short | hour-narrow | minute | minute-short | minute-narrow | second | second-short | second-narrow | zone | zone-short | zone-narrow) #REQUIRED >
+<!ATTLIST field alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST field draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST field standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST field references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST field validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT relative ( #PCDATA ) >
+<!ATTLIST relative type NMTOKEN #REQUIRED >
+ <!-- TODO: determine whether to allow 3 -->
+ <!--@MATCH:range/-2~3-->
+<!ATTLIST relative alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST relative draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST relative references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST relative validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT relativeTime ( alias | ( relativeTimePattern*, special* ) ) >
+<!ATTLIST relativeTime type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/future, past-->
+<!ATTLIST relativeTime alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST relativeTime draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST relativeTime references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST relativeTime validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT relativeTimePattern ( #PCDATA ) >
+<!ATTLIST relativeTimePattern count (zero | one | two | few | many | other) #REQUIRED >
+<!ATTLIST relativeTimePattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST relativeTimePattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST relativeTimePattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST relativeTimePattern validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT relativePeriod ( #PCDATA ) >
+<!ATTLIST relativePeriod alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST relativePeriod draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT timeZoneNames ( alias | ( hourFormat*, hoursFormat*, gmtFormat*, gmtZeroFormat*, regionFormat*, fallbackFormat*, fallbackRegionFormat*, abbreviationFallback*, preferenceOrdering*, singleCountries*, default*, zone*, metazone*, special* ) ) >
+<!ATTLIST timeZoneNames draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST timeZoneNames validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT hourFormat ( #PCDATA ) >
+<!ATTLIST hourFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST hourFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST hourFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT hoursFormat ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST hoursFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST hoursFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST hoursFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT gmtFormat ( #PCDATA ) >
+<!ATTLIST gmtFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST gmtFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST gmtFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT gmtZeroFormat ( #PCDATA ) >
+<!ATTLIST gmtZeroFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST gmtZeroFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST gmtZeroFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT regionFormat ( #PCDATA ) >
+<!ATTLIST regionFormat type (standard | daylight) #IMPLIED >
+<!ATTLIST regionFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST regionFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST regionFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT fallbackFormat ( #PCDATA ) >
+<!ATTLIST fallbackFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST fallbackFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST fallbackFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT fallbackRegionFormat ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST fallbackRegionFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST fallbackRegionFormat draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST fallbackRegionFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT abbreviationFallback EMPTY >
+ <!--@DEPRECATED-->
+<!ATTLIST abbreviationFallback type (GMT | standard) #IMPLIED >
+ <!-- use choice instead -->
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST abbreviationFallback choice (GMT | standard) #IMPLIED >
+ <!-- really required, but needs to be optional to support type also -->
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST abbreviationFallback alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST abbreviationFallback draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST abbreviationFallback references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT preferenceOrdering EMPTY >
+ <!-- use metazones instead -->
+ <!--@DEPRECATED-->
+<!ATTLIST preferenceOrdering type CDATA #IMPLIED >
+ <!-- use choice instead -->
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST preferenceOrdering choice CDATA #IMPLIED >
+ <!-- really required, but needs to be optional to support type also -->
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST preferenceOrdering alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST preferenceOrdering draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST preferenceOrdering references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT singleCountries EMPTY >
+ <!--@DEPRECATED-->
+<!ATTLIST singleCountries list CDATA #REQUIRED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST singleCountries alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST singleCountries draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST singleCountries references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT zone ( alias | ( long*, short*, commonlyUsed*, exemplarCity*, special* ) ) >
+<!ATTLIST zone type CDATA #REQUIRED >
+ <!--@MATCH:bcp47/tz-->
+<!ATTLIST zone alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST zone draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST zone standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST zone references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST zone validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT long ( alias | ( generic*, standard*, daylight*, special* ) ) >
+<!ATTLIST long alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST long draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST long references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST long validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT generic ( #PCDATA ) >
+<!ATTLIST generic alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST generic draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST generic references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT standard ( #PCDATA ) >
+<!ATTLIST standard alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST standard draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST standard references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT daylight ( #PCDATA ) >
+<!ATTLIST daylight alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST daylight draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST daylight references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT short ( alias | ( generic*, standard*, daylight*, special* ) ) >
+<!ATTLIST short alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST short draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST short references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST short validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT commonlyUsed ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST commonlyUsed used (true | false) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST commonlyUsed alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST commonlyUsed draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST commonlyUsed references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT exemplarCity ( #PCDATA ) >
+<!ATTLIST exemplarCity alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/formal, secondary-->
+<!ATTLIST exemplarCity draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST exemplarCity references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT metazone ( alias | ( long*, short*, commonlyUsed*, special* ) ) >
+<!ATTLIST metazone type CDATA #REQUIRED >
+ <!--@MATCH:metazone-->
+<!ATTLIST metazone alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST metazone draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST metazone standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST metazone references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST metazone validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT numbers ( alias | ( defaultNumberingSystem*, otherNumberingSystems*, minimumGroupingDigits*, symbols*, decimalFormats*, scientificFormats*, percentFormats*, currencyFormats*, currencies?, miscPatterns*, minimalPairs*, special* ) ) >
+<!ATTLIST numbers alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST numbers draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST numbers standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST numbers references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST numbers validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT defaultNumberingSystem ( #PCDATA ) >
+<!ATTLIST defaultNumberingSystem alt NMTOKENS #IMPLIED >
+ <!--@MATCH:bcp47/nu-->
+<!ATTLIST defaultNumberingSystem draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST defaultNumberingSystem references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT otherNumberingSystems ( alias | ( native*, traditional*, finance*, special* ) ) >
+<!ATTLIST otherNumberingSystems alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST otherNumberingSystems draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT native ( #PCDATA ) >
+<!ATTLIST native alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST native draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+
+<!ELEMENT traditional ( #PCDATA ) >
+<!ATTLIST traditional alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST traditional draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+
+<!ELEMENT finance ( #PCDATA ) >
+<!ATTLIST finance alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST finance draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+
+<!ELEMENT minimumGroupingDigits ( #PCDATA ) >
+<!ATTLIST minimumGroupingDigits alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST minimumGroupingDigits draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST minimumGroupingDigits references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT symbols ( alias | ( decimal*, group*, list*, percentSign*, nativeZeroDigit*, patternDigit*, plusSign*, minusSign*, approximatelySign*, exponential*, superscriptingExponent*, perMille*, infinity*, nan*, currencyDecimal*, currencyGroup*, timeSeparator*, special* ) ) >
+<!ATTLIST symbols alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST symbols draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST symbols standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST symbols references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST symbols validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST symbols numberSystem CDATA #IMPLIED >
+ <!--@MATCH:bcp47/nu-->
+
+<!ELEMENT decimal ( #PCDATA ) >
+<!ATTLIST decimal alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST decimal draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST decimal references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST decimal numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT group ( #PCDATA ) >
+<!ATTLIST group alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST group draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST group references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST group numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT list ( #PCDATA ) >
+<!ATTLIST list alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST list draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST list references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST list numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT percentSign ( #PCDATA ) >
+<!ATTLIST percentSign alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST percentSign draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST percentSign references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST percentSign numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT nativeZeroDigit ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST nativeZeroDigit alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST nativeZeroDigit draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST nativeZeroDigit references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST nativeZeroDigit numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT patternDigit ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST patternDigit alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST patternDigit draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST patternDigit references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST patternDigit numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT plusSign ( #PCDATA ) >
+<!ATTLIST plusSign alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST plusSign draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST plusSign references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST plusSign numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT minusSign ( #PCDATA ) >
+<!ATTLIST minusSign alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST minusSign draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST minusSign references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST minusSign numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT approximatelySign ( #PCDATA ) >
+<!ATTLIST approximatelySign alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST approximatelySign draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST approximatelySign references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT exponential ( #PCDATA ) >
+<!ATTLIST exponential alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST exponential draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST exponential references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST exponential numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT superscriptingExponent ( #PCDATA ) >
+<!ATTLIST superscriptingExponent alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST superscriptingExponent draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST superscriptingExponent references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT perMille ( #PCDATA ) >
+<!ATTLIST perMille alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST perMille draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST perMille references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST perMille numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT infinity ( #PCDATA ) >
+<!ATTLIST infinity alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST infinity draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST infinity references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST infinity numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT nan ( #PCDATA ) >
+<!ATTLIST nan alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST nan draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST nan references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST nan numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT currencyDecimal ( #PCDATA ) >
+<!ATTLIST currencyDecimal alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST currencyDecimal draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST currencyDecimal references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST currencyDecimal numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT currencyGroup ( #PCDATA ) >
+<!ATTLIST currencyGroup alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST currencyGroup draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST currencyGroup references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST currencyGroup numberSystem CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+
+<!ELEMENT timeSeparator ( #PCDATA ) >
+<!ATTLIST timeSeparator alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST timeSeparator draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST timeSeparator references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT decimalFormats ( alias | ( default*, decimalFormatLength*, special* ) ) >
+<!ATTLIST decimalFormats draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST decimalFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST decimalFormats numberSystem CDATA #IMPLIED >
+ <!--@MATCH:bcp47/nu-->
+
+<!ELEMENT decimalFormatLength ( alias | ( default*, decimalFormat*, special* ) ) >
+<!ATTLIST decimalFormatLength type (full | long | medium | short) #IMPLIED >
+<!ATTLIST decimalFormatLength alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST decimalFormatLength draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST decimalFormatLength standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST decimalFormatLength references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST decimalFormatLength validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT decimalFormat ( alias | ( pattern*, special* ) ) >
+<!ATTLIST decimalFormat type NMTOKEN "standard" >
+ <!--@MATCH:literal/standard-->
+<!ATTLIST decimalFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST decimalFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST decimalFormat standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST decimalFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST decimalFormat validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT scientificFormats ( alias | ( default*, scientificFormatLength*, special* ) ) >
+<!ATTLIST scientificFormats draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST scientificFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST scientificFormats numberSystem CDATA #IMPLIED >
+ <!--@MATCH:bcp47/nu-->
+
+<!ELEMENT scientificFormatLength ( alias | ( default*, scientificFormat*, special* ) ) >
+<!ATTLIST scientificFormatLength type (full | long | medium | short) #IMPLIED >
+<!ATTLIST scientificFormatLength alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST scientificFormatLength draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST scientificFormatLength standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST scientificFormatLength references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST scientificFormatLength validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT scientificFormat ( alias | ( pattern*, special* ) ) >
+<!ATTLIST scientificFormat type NMTOKEN "standard" >
+ <!--@MATCH:literal/standard-->
+<!ATTLIST scientificFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST scientificFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST scientificFormat standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST scientificFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST scientificFormat validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT percentFormats ( alias | ( default*, percentFormatLength*, special* ) ) >
+<!ATTLIST percentFormats draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST percentFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST percentFormats numberSystem CDATA #IMPLIED >
+ <!--@MATCH:bcp47/nu-->
+
+<!ELEMENT percentFormatLength ( alias | ( default*, percentFormat*, special* ) ) >
+<!ATTLIST percentFormatLength type (full | long | medium | short) #IMPLIED >
+<!ATTLIST percentFormatLength alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST percentFormatLength draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST percentFormatLength standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST percentFormatLength references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST percentFormatLength validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT percentFormat ( alias | ( pattern*, special* ) ) >
+<!ATTLIST percentFormat type NMTOKEN "standard" >
+ <!--@MATCH:literal/standard-->
+<!ATTLIST percentFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST percentFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST percentFormat standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST percentFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST percentFormat validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT currencyFormats ( alias | ( default*, currencySpacing*, currencyFormatLength*, unitPattern*, special* ) ) >
+<!ATTLIST currencyFormats draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST currencyFormats validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST currencyFormats numberSystem CDATA #IMPLIED >
+ <!--@MATCH:bcp47/nu-->
+
+<!ELEMENT currencySpacing ( alias | ( beforeCurrency*, afterCurrency*, special* ) ) >
+
+<!ELEMENT beforeCurrency ( alias | ( currencyMatch*, surroundingMatch*, insertBetween*, special* ) ) >
+
+<!ELEMENT currencyMatch ( #PCDATA ) >
+<!ATTLIST currencyMatch alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST currencyMatch draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST currencyMatch references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT surroundingMatch ( #PCDATA ) >
+<!ATTLIST surroundingMatch alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST surroundingMatch draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST surroundingMatch references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT insertBetween ( #PCDATA ) >
+<!ATTLIST insertBetween alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST insertBetween draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST insertBetween references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT afterCurrency ( alias | ( currencyMatch*, surroundingMatch*, insertBetween*, special* ) ) >
+
+<!ELEMENT currencyFormatLength ( alias | ( default*, currencyFormat*, special* ) ) >
+<!ATTLIST currencyFormatLength type (full | long | medium | short) #IMPLIED >
+<!ATTLIST currencyFormatLength alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST currencyFormatLength draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST currencyFormatLength standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST currencyFormatLength references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST currencyFormatLength validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT currencyFormat ( alias | ( pattern*, special* ) ) >
+<!ATTLIST currencyFormat type NMTOKEN "standard" >
+ <!--@MATCH:literal/accounting, standard-->
+<!ATTLIST currencyFormat alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST currencyFormat draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST currencyFormat standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST currencyFormat references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST currencyFormat validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT unitPattern ( #PCDATA ) >
+<!ATTLIST unitPattern count (0 | 1 | zero | one | two | few | many | other) #REQUIRED >
+<!ATTLIST unitPattern case NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/ablative, accusative, comitative, dative, ergative, genitive, instrumental, locative, locativecopulative, nominative, oblique, prepositional, sociative, vocative, elative, illative, partitive, terminative, translative-->
+<!ATTLIST unitPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST unitPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST unitPattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST unitPattern validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT currencies ( alias | ( default?, currency*, special* ) ) >
+<!ATTLIST currencies draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST currencies validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT currency ( alias | ( ( ( pattern+, displayName*, symbol* ) | ( displayName+, symbol*, pattern* ) | ( symbol+, pattern* ) )?, decimal*, group*, special* ) ) >
+
+<!-- # warning: pattern appears twice in the above. The first is for consistency with all other cases of
+ pattern + displayName; the second is for backwards compatibility -->
+<!ATTLIST currency type NMTOKEN "standard" >
+ <!--@MATCH:validity/currency-->
+<!ATTLIST currency alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST currency draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST currency references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST currency validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT symbol ( #PCDATA ) >
+<!ATTLIST symbol choice (true | false) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST symbol alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/formal, narrow, variant-->
+<!ATTLIST symbol draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST symbol references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT miscPatterns ( alias | ( default*, pattern*, special* ) ) >
+<!ATTLIST miscPatterns draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST miscPatterns numberSystem CDATA #IMPLIED >
+ <!--@MATCH:bcp47/nu-->
+
+<!ELEMENT minimalPairs ( alias | ( pluralMinimalPairs*, ordinalMinimalPairs*, caseMinimalPairs*, genderMinimalPairs*, special* ) ) >
+<!ATTLIST minimalPairs alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST minimalPairs draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT pluralMinimalPairs ( #PCDATA ) >
+<!ATTLIST pluralMinimalPairs count NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/few, many, one, other, two, zero-->
+<!ATTLIST pluralMinimalPairs alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST pluralMinimalPairs draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT ordinalMinimalPairs ( #PCDATA ) >
+<!ATTLIST ordinalMinimalPairs ordinal NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/few, many, one, other, two, zero-->
+<!ATTLIST ordinalMinimalPairs alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST ordinalMinimalPairs draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT caseMinimalPairs ( #PCDATA ) >
+<!ATTLIST caseMinimalPairs case NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/ablative, accusative, comitative, dative, ergative, genitive, instrumental, locative, locativecopulative, nominative, oblique, prepositional, sociative, vocative, elative, illative, partitive, terminative, translative-->
+<!ATTLIST caseMinimalPairs alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST caseMinimalPairs draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT genderMinimalPairs ( #PCDATA ) >
+<!ATTLIST genderMinimalPairs gender NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/animate, common, feminine, inanimate, masculine, neuter, personal-->
+<!ATTLIST genderMinimalPairs alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST genderMinimalPairs draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT units ( alias | ( unit*, unitLength*, durationUnit*, special* ) ) >
+<!ATTLIST units alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST units draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST units references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST units validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT unit ( alias | ( gender*, displayName*, unitPattern*, perUnitPattern*, special* ) ) >
+<!ATTLIST unit type NMTOKEN #REQUIRED >
+ <!--@MATCH:validity/unit-->
+<!ATTLIST unit alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST unit draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST unit references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST unit validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT gender ( #PCDATA ) >
+<!ATTLIST gender alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/animate, common, feminine, inanimate, masculine, neuter, personal-->
+<!ATTLIST gender draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT perUnitPattern ( #PCDATA ) >
+<!ATTLIST perUnitPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST perUnitPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST perUnitPattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT unitLength ( alias | ( compoundUnit*, unit*, coordinateUnit*, special* ) ) >
+<!ATTLIST unitLength type (long | short | narrow) #REQUIRED >
+<!ATTLIST unitLength alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST unitLength draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST unitLength references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST unitLength validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT compoundUnit ( alias | ( compoundUnitPattern1*, compoundUnitPattern*, unitPrefixPattern*, special* ) ) >
+<!ATTLIST compoundUnit type NMTOKEN #REQUIRED >
+ <!--@MATCH:or/regex/10p-?[0-9]{1,2}||regex/1024p[1-8]||literal/per, times, power2, power3-->
+<!ATTLIST compoundUnit alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST compoundUnit draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST compoundUnit references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST compoundUnit validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT compoundUnitPattern1 ( #PCDATA ) >
+<!ATTLIST compoundUnitPattern1 count (0 | 1 | zero | one | two | few | many | other) #IMPLIED >
+<!ATTLIST compoundUnitPattern1 gender NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/animate, common, feminine, inanimate, masculine, neuter, personal-->
+<!ATTLIST compoundUnitPattern1 case NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/ablative, accusative, comitative, dative, ergative, genitive, instrumental, locative, locativecopulative, nominative, oblique, prepositional, sociative, vocative-->
+<!ATTLIST compoundUnitPattern1 alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST compoundUnitPattern1 draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST compoundUnitPattern1 references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT compoundUnitPattern ( #PCDATA ) >
+<!ATTLIST compoundUnitPattern case NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/ablative, accusative, comitative, dative, ergative, genitive, instrumental, locative, locativecopulative, nominative, oblique, prepositional, sociative, vocative-->
+<!ATTLIST compoundUnitPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST compoundUnitPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST compoundUnitPattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST compoundUnitPattern validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT unitPrefixPattern ( #PCDATA ) >
+<!ATTLIST unitPrefixPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST unitPrefixPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST unitPrefixPattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT coordinateUnit ( alias | ( displayName*, coordinateUnitPattern*, special* ) ) >
+<!ATTLIST coordinateUnit alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST coordinateUnit draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT coordinateUnitPattern ( #PCDATA ) >
+<!ATTLIST coordinateUnitPattern type (north | east | south | west) #REQUIRED >
+<!ATTLIST coordinateUnitPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST coordinateUnitPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT durationUnit ( alias | ( durationUnitPattern*, special* ) ) >
+<!ATTLIST durationUnit type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/hm, hms, ms-->
+<!ATTLIST durationUnit alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST durationUnit draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST durationUnit references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT durationUnitPattern ( #PCDATA ) >
+<!ATTLIST durationUnitPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST durationUnitPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST durationUnitPattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST durationUnitPattern validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT listPatterns ( alias | ( listPattern*, special* ) ) >
+<!ATTLIST listPatterns alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST listPatterns draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST listPatterns references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST listPatterns validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT listPattern ( alias | ( listPatternPart*, special* ) ) >
+<!ATTLIST listPattern type NMTOKEN #IMPLIED >
+ <!--@MATCH:literal/or, or-narrow, or-short, standard-narrow, standard-short, unit, unit-narrow, unit-short-->
+<!ATTLIST listPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST listPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST listPattern references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST listPattern validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT listPatternPart ( #PCDATA ) >
+<!ATTLIST listPatternPart type (start | middle | end | 2 | 3) #REQUIRED >
+<!ATTLIST listPatternPart alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST listPatternPart draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST listPatternPart references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST listPatternPart validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT collations ( alias | ( defaultCollation?, default*, collation*, special* ) ) >
+<!ATTLIST collations version NMTOKEN #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST collations draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!-- should be DEPRECATED, but needs some cleanup first -->
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST collations validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT defaultCollation ( #PCDATA ) >
+<!ATTLIST defaultCollation alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST defaultCollation draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT collation ( alias | ( base?, import*, settings?, suppress_contractions?, optimize?, ( cr* | rules? ), special* ) ) >
+<!ATTLIST collation type NMTOKEN "standard" >
+ <!--@MATCH:or/bcp47/co||regex/private-.*||literal/digits-after-->
+<!ATTLIST collation visibility (internal | external) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST collation alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/proposed, short, variant-->
+<!ATTLIST collation draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST collation standard CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST collation references CDATA #IMPLIED >
+ <!--@MATCH:any-->
+ <!--@METADATA-->
+<!ATTLIST collation validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT base ( alias | special ) >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT import EMPTY >
+ <!-- deprecated, see CLDR ticket #8289 -->
+ <!--@DEPRECATED-->
+<!ATTLIST import source CDATA #REQUIRED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST import type CDATA #IMPLIED >
+ <!--@DEPRECATED-->
+<!ATTLIST import draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST import references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT settings ( special* ) >
+ <!-- deprecated, see CLDR ticket #8289 -->
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings strength (primary | secondary | tertiary | quaternary | identical) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings alternate (non-ignorable | shifted) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings backwards (on | off) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings normalization (on | off) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings caseLevel (on | off) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings caseFirst (upper | lower | off) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings hiraganaQuarternary (on | off) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings hiraganaQuaternary (on | off) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings maxVariable (space | punct | symbol | currency) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings numeric (on | off) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings private (true | false) #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings variableTop CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST settings reorder NMTOKENS #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT suppress_contractions ( #PCDATA | cp )* >
+ <!-- deprecated, see CLDR ticket #8289 -->
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT optimize ( #PCDATA | cp )* >
+ <!-- deprecated, see CLDR ticket #8289 -->
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT cr ( #PCDATA ) >
+<!ATTLIST cr alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST cr draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST cr references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!-- # Use the cr element instead, with ICU syntax. -->
+
+<!ELEMENT rules ( alias | ( ( reset | import ), ( reset | import | p | pc | s | sc | t | tc | q | qc | i | ic | x )* ) ) >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT reset ( #PCDATA | cp | first_variable | last_variable | first_tertiary_ignorable | last_tertiary_ignorable | first_secondary_ignorable | last_secondary_ignorable | first_primary_ignorable | last_primary_ignorable | first_non_ignorable | last_non_ignorable | first_trailing | last_trailing )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+<!ATTLIST reset before NMTOKEN #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT first_variable EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT last_variable EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT first_tertiary_ignorable EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT last_tertiary_ignorable EMPTY >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT first_secondary_ignorable EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT last_secondary_ignorable EMPTY >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT first_primary_ignorable EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT last_primary_ignorable EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT first_non_ignorable EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT last_non_ignorable EMPTY >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT first_trailing EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT last_trailing EMPTY >
+ <!--@DEPRECATED-->
+
+<!ELEMENT p ( #PCDATA | cp | last_variable )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT pc ( #PCDATA | cp | last_variable )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT s ( #PCDATA | cp | last_variable )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT sc ( #PCDATA | cp | last_variable )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT t ( #PCDATA | cp | last_variable )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT tc ( #PCDATA | cp | last_variable )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT q ( #PCDATA | cp | last_variable )* >
+ <!--@DEPRECATED-->
+
+<!ELEMENT qc ( #PCDATA | cp | last_variable )* >
+ <!--@DEPRECATED-->
+
+<!ELEMENT i ( #PCDATA | cp | last_variable )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT ic ( #PCDATA | cp | last_variable )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT x ( context?, ( p | pc | s | sc | t | tc | q | qc | i | ic )*, extend? ) >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT context ( #PCDATA | cp )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT extend ( #PCDATA | cp )* >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+
+<!-- ######################################################### -->
+
+<!ELEMENT posix ( alias | ( messages*, special* ) ) >
+<!ATTLIST posix draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST posix references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST posix validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT messages ( alias | ( yesstr*, nostr*, yesexpr*, noexpr*, special* ) ) >
+<!ATTLIST messages alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST messages draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST messages references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST messages validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT yesstr ( #PCDATA ) >
+<!ATTLIST yesstr alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST yesstr draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST yesstr references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT nostr ( #PCDATA ) >
+<!ATTLIST nostr alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST nostr draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST nostr references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT yesexpr ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST yesexpr alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST yesexpr draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST yesexpr references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT noexpr ( #PCDATA ) >
+ <!--@DEPRECATED-->
+<!ATTLIST noexpr alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST noexpr draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST noexpr references CDATA #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT characterLabels ( alias | ( characterLabelPattern*, characterLabel*, special* ) ) >
+
+<!ELEMENT characterLabelPattern ( #PCDATA ) >
+<!ATTLIST characterLabelPattern type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/all, category-list, compatibility, enclosed, extended, historic, miscellaneous, other, scripts, strokes, subscript, superscript-->
+<!ATTLIST characterLabelPattern count (0 | 1 | zero | one | two | few | many | other) #IMPLIED >
+ <!-- count only used for certain patterns" -->
+<!ATTLIST characterLabelPattern alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST characterLabelPattern draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT characterLabel ( #PCDATA ) >
+<!ATTLIST characterLabel type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/activities, african_scripts, american_scripts, animal, animals_nature, arrows, body, box_drawing, braille, building, bullets_stars, consonantal_jamo, currency_symbols, dash_connector, digits, dingbats, divination_symbols, downwards_arrows, downwards_upwards_arrows, east_asian_scripts, emoji, european_scripts, female, flag, flags, food_drink, format, format_whitespace, full_width_form_variant, geometric_shapes, half_width_form_variant, han_characters, han_radicals, hanja, hanzi_simplified, hanzi_traditional, heart, historic_scripts, ideographic_desc_characters, japanese_kana, kanbun, kanji, keycap, leftwards_arrows, leftwards_rightwards_arrows, letterlike_symbols, limited_use, male, math_symbols, middle_eastern_scripts, miscellaneous, modern_scripts, modifier, musical_symbols, nature, nonspacing, numbers, objects, other, paired, person, phonetic_alphabet, pictographs, place, plant, punctuation, rightwards_arrows, sign_standard_symbols, small_form_variant, smiley, smileys_people, south_asian_scripts, southeast_asian_scripts, spacing, sport, symbols, technical_symbols, tone_marks, travel, travel_places, upwards_arrows, variant_forms, vocalic_jamo, weather, western_asian_scripts, whitespace-->
+<!ATTLIST characterLabel alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST characterLabel draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT segmentations ( alias | ( segmentation*, special* ) ) >
+<!ATTLIST segmentations alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST segmentations draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST segmentations references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST segmentations validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT segmentation ( alias | ( variables?, segmentRules?, exceptions?, suppressions? ) | special* ) >
+<!ATTLIST segmentation type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/GraphemeClusterBreak, LineBreak, SentenceBreak, WordBreak-->
+<!ATTLIST segmentation alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST segmentation draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST segmentation references CDATA #IMPLIED >
+ <!--@METADATA-->
+<!ATTLIST segmentation validSubLocales CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT variables ( alias | ( variable*, special* ) ) >
+
+<!ELEMENT variable ( #PCDATA ) >
+ <!--@ORDERED-->
+<!ATTLIST variable id CDATA #REQUIRED >
+ <!--@MATCH:regex/\$[a-zA-Z0-9_]+-->
+<!ATTLIST variable alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST variable draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST variable references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT segmentRules ( alias | ( rule*, special* ) ) >
+
+<!ELEMENT rule ( #PCDATA ) >
+<!ATTLIST rule id NMTOKEN #REQUIRED >
+ <!--@MATCH:range/0.0~9999.0-->
+<!ATTLIST rule alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST rule draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+<!ATTLIST rule references CDATA #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT exceptions ( exception* ) >
+ <!-- use suppressions instead -->
+ <!--@DEPRECATED-->
+
+<!ELEMENT exception ( #PCDATA ) >
+ <!--@ORDERED-->
+ <!--@DEPRECATED-->
+<!ATTLIST exception draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT suppressions ( alias | ( suppression*, special* ) ) >
+<!ATTLIST suppressions type NMTOKEN "standard" >
+ <!--@MATCH:literal/standard-->
+<!ATTLIST suppressions draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT suppression ( #PCDATA ) >
+ <!--@ORDERED-->
+<!ATTLIST suppression alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST suppression draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT rbnf ( alias | ( rulesetGrouping*, special* ) ) >
+
+<!ELEMENT rulesetGrouping ( alias | ( ruleset*, special* ) ) >
+<!ATTLIST rulesetGrouping type NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/NumberingSystemRules, OrdinalRules, SpelloutRules-->
+<!ATTLIST rulesetGrouping draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT ruleset ( alias | ( rbnfrule*, special* ) ) >
+ <!--@ORDERED-->
+<!ATTLIST ruleset type NMTOKEN #REQUIRED >
+ <!--@MATCH:regex/(ord-M-)?[\-0-9a-z]+-->
+<!ATTLIST ruleset access (public | private) #IMPLIED >
+ <!--@VALUE-->
+<!ATTLIST ruleset allowsParsing (true | false) #IMPLIED >
+ <!--@VALUE-->
+<!ATTLIST ruleset draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT rbnfrule ( #PCDATA ) >
+ <!--@ORDERED-->
+<!ATTLIST rbnfrule value CDATA #REQUIRED >
+ <!--@MATCH:or/range/-1.0E20~1.0E20||literal/-x, 0, 0.x, NaN, -Inf, Inf, x,x, x.x-->
+ <!--@VALUE-->
+<!ATTLIST rbnfrule radix CDATA #IMPLIED >
+ <!--@MATCH:literal/1,000, 100, 1000, 100000, 20-->
+ <!--@VALUE-->
+<!ATTLIST rbnfrule decexp CDATA #IMPLIED >
+ <!--@VALUE-->
+<!ATTLIST rbnfrule alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST rbnfrule draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED:true, false-->
+
+<!ELEMENT typographicNames ( alias | ( axisName*, styleName*, featureName*, special* ) ) >
+
+<!ELEMENT axisName ( #PCDATA ) >
+<!ATTLIST axisName type (ital | opsz | slnt | wdth | wght) #REQUIRED >
+<!ATTLIST axisName alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST axisName draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT styleName ( #PCDATA ) >
+<!ATTLIST styleName type (ital | opsz | slnt | wdth | wght) #REQUIRED >
+<!ATTLIST styleName subtype NMTOKEN #REQUIRED >
+ <!--@MATCH:literal/-12, 0, 1, 100, 112.5, 12, 125, 144, 150, 18, 200, 24, 300, 350, 380, 400, 50, 500, 600, 62.5, 700, 72, 75, 8, 800, 87.5, 900, 950-->
+<!ATTLIST styleName alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/compressed, demi, extended, heavy, narrow, short, ultra, ultrablack, ultraheavy, wide-->
+<!ATTLIST styleName draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT featureName ( #PCDATA ) >
+<!ATTLIST featureName type (afrc | cpsp | dlig | frac | lnum | onum | ordn | pnum | smcp | tnum | zero) #REQUIRED >
+<!ATTLIST featureName alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/short, variant-->
+<!ATTLIST featureName draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT annotations ( alias | ( annotation*, special* ) ) >
+
+<!ELEMENT annotation ( #PCDATA ) >
+<!ATTLIST annotation cp CDATA #REQUIRED >
+ <!--@MATCH:any-->
+<!ATTLIST annotation tts CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST annotation type (tts) #IMPLIED >
+<!ATTLIST annotation alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST annotation draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!-- ######################################################### -->
+<!-- # This element contains metadata for Survey Tool internal use (optimization, etc). -->
+
+<!ELEMENT metadata ( alias | ( casingData?, special* ) ) >
+ <!--@METADATA-->
+
+<!ELEMENT casingData ( alias | ( casingItem*, special* ) ) >
+ <!--@METADATA-->
+
+<!ELEMENT casingItem ( #PCDATA ) >
+<!ATTLIST casingItem type CDATA #REQUIRED >
+ <!--@MATCH:any-->
+<!ATTLIST casingItem override (true | false) #IMPLIED >
+ <!--@VALUE-->
+<!ATTLIST casingItem forceError (true | false) #IMPLIED >
+ <!--@VALUE-->
+<!ATTLIST casingItem alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+<!ATTLIST casingItem draft (approved | contributed | provisional | unconfirmed) #IMPLIED >
+ <!--@METADATA-->
+
+<!ELEMENT references ( reference* ) >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+
+<!ELEMENT reference ( #PCDATA ) >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST reference type NMTOKEN #REQUIRED >
+ <!--@DEPRECATED-->
+<!ATTLIST reference uri CDATA #IMPLIED >
+ <!--@VALUE-->
+ <!--@DEPRECATED-->
+<!ATTLIST reference alt NMTOKENS #IMPLIED >
+ <!--@MATCH:literal/variant-->
+ <!--@DEPRECATED-->
+<!ATTLIST reference draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
+<!ATTLIST reference standard (true | false) #IMPLIED >
+ <!--@METADATA-->
+ <!--@DEPRECATED-->
diff --git a/Build/source/libs/icu/icu-src/source/data/dtd/cldr-40/common/dtd/ldmlICU.dtd b/Build/source/libs/icu/icu-src/source/data/dtd/cldr-40/common/dtd/ldmlICU.dtd
new file mode 100644
index 00000000000..d7b7142b255
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/data/dtd/cldr-40/common/dtd/ldmlICU.dtd
@@ -0,0 +1,119 @@
+<!--
+Copyright © 2003-2015 Unicode, Inc. and others. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software, (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.
+-->
+
+<!-- ######################################################### -->
+<!-- The alias, default, special and cp elements are already defined in ldml.dtd. Defining them here as well would break locale conversion. -->
+<!-- ######################################################### -->
+
+<!-- ICU Specific elements -->
+<!-- ######################################################### -->
+<!ATTLIST special xmlns:icu CDATA #IMPLIED>
+<!ATTLIST special icu:version CDATA #IMPLIED>
+
+<!ELEMENT icu:version EMPTY>
+<!ATTLIST icu:version icu:specialVersion CDATA #FIXED "1.7" >
+<!ATTLIST icu:version icu:requiredLDMLVersion CDATA #FIXED "1.7" >
+
+<!-- ICU Scripts -->
+
+<!ELEMENT icu:scripts (alias | icu:script* ) >
+<!ATTLIST icu:scripts draft ( true | false ) #IMPLIED >
+<!ATTLIST icu:scripts standard CDATA #IMPLIED >
+
+<!ELEMENT icu:script ( #PCDATA ) >
+<!ATTLIST icu:script type NMTOKEN #REQUIRED >
+<!ATTLIST icu:script draft ( true | false ) #IMPLIED >
+
+<!-- RBNF data -->
+<!ELEMENT icu:ruleBasedNumberFormats ( alias | (default?, icu:ruleBasedNumberFormat*)) >
+
+<!-- Either bare data or any number of cp -->
+<!ELEMENT icu:ruleBasedNumberFormat (#PCDATA | cp)* >
+<!ATTLIST icu:ruleBasedNumberFormat type NMTOKEN #IMPLIED >
+
+<!-- RBBI data -->
+<!ELEMENT icu:breakIteratorData (alias | (icu:boundaries?, icu:dictionaries?, icu:lstm?)) >
+
+<!ELEMENT icu:boundaries (alias | (icu:grapheme?, icu:word?, icu:line*, icu:sentence?, icu:title?, icu:xgc?)) >
+
+<!ELEMENT icu:dictionaries (alias | (icu:dictionary*)) >
+
+<!ELEMENT icu:lstm (alias | (icu:lstmdata*)) >
+
+<!ELEMENT icu:lstmdata ( #PCDATA ) >
+<!ATTLIST icu:lstmdata icu:dependency NMTOKEN #IMPLIED >
+<!ATTLIST icu:lstmdata type NMTOKEN #REQUIRED >
+
+<!ELEMENT icu:dictionary ( #PCDATA ) >
+<!ATTLIST icu:dictionary icu:dependency NMTOKEN #IMPLIED >
+<!ATTLIST icu:dictionary type NMTOKEN #REQUIRED >
+
+<!ELEMENT icu:grapheme ( #PCDATA ) >
+<!ATTLIST icu:grapheme icu:class NMTOKEN #IMPLIED >
+<!ATTLIST icu:grapheme icu:append NMTOKEN #IMPLIED >
+<!ATTLIST icu:grapheme icu:import NMTOKEN #IMPLIED >
+<!ATTLIST icu:grapheme icu:dependency NMTOKEN #IMPLIED >
+
+<!ELEMENT icu:word ( #PCDATA ) >
+<!ATTLIST icu:word icu:class NMTOKEN #IMPLIED >
+<!ATTLIST icu:word icu:append NMTOKEN #IMPLIED >
+<!ATTLIST icu:word icu:import NMTOKEN #IMPLIED >
+<!ATTLIST icu:word icu:dependency NMTOKEN #IMPLIED >
+
+<!ELEMENT icu:line ( #PCDATA ) >
+<!ATTLIST icu:line icu:class NMTOKEN #IMPLIED >
+<!ATTLIST icu:line icu:append NMTOKEN #IMPLIED >
+<!ATTLIST icu:line icu:import NMTOKEN #IMPLIED >
+<!ATTLIST icu:line icu:dependency NMTOKEN #IMPLIED >
+<!ATTLIST icu:line alt NMTOKENS #IMPLIED >
+
+<!ELEMENT icu:sentence ( #PCDATA ) >
+<!ATTLIST icu:sentence icu:class NMTOKEN #IMPLIED >
+<!ATTLIST icu:sentence icu:append NMTOKEN #IMPLIED >
+<!ATTLIST icu:sentence icu:import NMTOKEN #IMPLIED >
+<!ATTLIST icu:sentence icu:dependency NMTOKEN #IMPLIED >
+
+<!ELEMENT icu:title ( #PCDATA ) >
+<!ATTLIST icu:title icu:class NMTOKEN #IMPLIED >
+<!ATTLIST icu:title icu:append NMTOKEN #IMPLIED >
+<!ATTLIST icu:title icu:import NMTOKEN #IMPLIED >
+<!ATTLIST icu:title icu:dependency NMTOKEN #IMPLIED >
+
+<!ELEMENT icu:xgc ( #PCDATA ) >
+<!ATTLIST icu:xgc icu:class NMTOKEN #IMPLIED >
+<!ATTLIST icu:xgc icu:append NMTOKEN #IMPLIED >
+<!ATTLIST icu:xgc icu:import NMTOKEN #IMPLIED >
+<!ATTLIST icu:xgc icu:dependency NMTOKEN #IMPLIED >
+
+<!--deprecated -->
+<!ELEMENT icu:breakDictionaryData EMPTY >
+<!ATTLIST icu:breakDictionaryData icu:class NMTOKEN #IMPLIED >
+<!ATTLIST icu:breakDictionaryData icu:import NMTOKEN #IMPLIED >
+<!ATTLIST icu:breakDictionaryData icu:importFile CDATA #IMPLIED >
+
+<!-- RBT data -->
+<!ELEMENT icu:transforms ( alias | (default?, icu:transform*)) >
+<!ELEMENT icu:transform ( #PCDATA |cp )* >
+<!ATTLIST icu:transform type NMTOKEN #REQUIRED >
+
+<!-- leap month information, all deprecated -->
+<!ELEMENT icu:isLeapMonth ( alias | (icu:nonLeapSymbol?, icu:leapSymbol? ))> <!-- deprecated -->
+<!ELEMENT icu:nonLeapSymbol ( #PCDATA ) > <!-- deprecated -->
+<!ELEMENT icu:leapSymbol ( #PCDATA ) > <!-- deprecated -->
+
+<!-- UCA Rules -->
+<!ELEMENT icu:UCARules EMPTY >
+<!ATTLIST icu:UCARules icu:uca_rules CDATA #REQUIRED >
+
+<!-- Dependencies Rules -->
+<!ELEMENT icu:depends EMPTY >
+<!ATTLIST icu:depends icu:dependency CDATA #REQUIRED >
+
+<!-- ######################################################### -->
diff --git a/Build/source/libs/icu/icu-src/source/data/icu4j-readme.txt b/Build/source/libs/icu/icu-src/source/data/icu4j-readme.txt
index 6a38bd62c17..8d087c16c7c 100644
--- a/Build/source/libs/icu/icu-src/source/data/icu4j-readme.txt
+++ b/Build/source/libs/icu/icu-src/source/data/icu4j-readme.txt
@@ -30,7 +30,7 @@ In the following,
For more instructions on downloading and building ICU4C,
see the ICU4C readme at:
- https://htmlpreview.github.io/?https://github.com/unicode-org/icu/blob/master/icu4c/readme.html#HowToBuild
+ https://htmlpreview.github.io/?https://github.com/unicode-org/icu/blob/main/icu4c/readme.html#HowToBuild
(Windows: build as 'x86, Release' otherwise you will have to set 'CFG' differently below.)
*NOTE* You should do a full rebuild after any data changes.
diff --git a/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu b/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
index 26ca796d1d8..e83208d39bb 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu b/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
index 53ac32a4bf6..ef114e47337 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/icudt68l.dat b/Build/source/libs/icu/icu-src/source/data/in/icudt70l.dat
index 1b472b51769..b0d5cf5cc98 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/icudt68l.dat
+++ b/Build/source/libs/icu/icu-src/source/data/in/icudt70l.dat
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm b/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
index a1254c0aa75..48c0d564682 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
+++ b/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm b/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
index 2e6e3dda074..e225e484a72 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
+++ b/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm b/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
index a3a40833a91..b69fe869a04 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
+++ b/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/pnames.icu b/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
index 58af6c0157a..f690000d0ef 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu b/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
index bc85f3d3502..7776b14ea97 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/ucase.icu b/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
index 011e6053f79..623cc7b38d9 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/uemoji.icu b/Build/source/libs/icu/icu-src/source/data/in/uemoji.icu
new file mode 100644
index 00000000000..9d40609b875
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/data/in/uemoji.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu b/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu
index 598d347cc1e..9ab69f99e6a 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/ulayout.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/unames.icu b/Build/source/libs/icu/icu-src/source/data/in/unames.icu
index 55a2267fd5b..942667dbbed 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/unames.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/unames.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/uprops.icu b/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
index 245db9a0584..3b1db714783 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
+++ b/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm b/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
index 72b266adf7a..bf6870e13f4 100644
--- a/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
+++ b/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/data/makedata.mak b/Build/source/libs/icu/icu-src/source/data/makedata.mak
index daa66ef6c52..e8a33ff85dd 100644
--- a/Build/source/libs/icu/icu-src/source/data/makedata.mak
+++ b/Build/source/libs/icu/icu-src/source/data/makedata.mak
@@ -12,14 +12,14 @@
##############################################################################
# Keep the following in sync with the version - see common/unicode/uvernum.h
-U_ICUDATA_NAME=icudt68
+U_ICUDATA_NAME=icudt70
##############################################################################
!IF "$(UWP)" == "UWP"
# Optionally change the name of the data file for the UWP version.
-U_ICUDATA_NAME=icudt68
+U_ICUDATA_NAME=icudt70
!ENDIF
U_ICUDATA_ENDIAN_SUFFIX=l
-UNICODE_VERSION=13.0
+UNICODE_VERSION=14.0
ICU_LIB_TARGET=$(DLL_OUTPUT)\$(U_ICUDATA_NAME).dll
# ICUMAKE
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt b/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
index 033788b253f..932ace29e6d 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
@@ -1,6 +1,6 @@
-# CaseFolding-13.0.0.txt
-# Date: 2019-09-08, 23:30:59 GMT
-# © 2019 Unicode®, Inc.
+# CaseFolding-14.0.0.txt
+# Date: 2021-03-08, 19:35:41 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -1050,6 +1050,7 @@
2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C2F; C; 2C5F; # GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR
2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE
@@ -1230,12 +1231,16 @@ A7B8; C; A7B9; # LATIN CAPITAL LETTER U WITH STROKE
A7BA; C; A7BB; # LATIN CAPITAL LETTER GLOTTAL A
A7BC; C; A7BD; # LATIN CAPITAL LETTER GLOTTAL I
A7BE; C; A7BF; # LATIN CAPITAL LETTER GLOTTAL U
+A7C0; C; A7C1; # LATIN CAPITAL LETTER OLD POLISH O
A7C2; C; A7C3; # LATIN CAPITAL LETTER ANGLICANA W
A7C4; C; A794; # LATIN CAPITAL LETTER C WITH PALATAL HOOK
A7C5; C; 0282; # LATIN CAPITAL LETTER S WITH HOOK
A7C6; C; 1D8E; # LATIN CAPITAL LETTER Z WITH PALATAL HOOK
A7C7; C; A7C8; # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
A7C9; C; A7CA; # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7D0; C; A7D1; # LATIN CAPITAL LETTER CLOSED INSULAR G
+A7D6; C; A7D7; # LATIN CAPITAL LETTER MIDDLE SCOTS S
+A7D8; C; A7D9; # LATIN CAPITAL LETTER SIGMOID S
A7F5; C; A7F6; # LATIN CAPITAL LETTER REVERSED HALF H
AB70; C; 13A0; # CHEROKEE SMALL LETTER A
AB71; C; 13A1; # CHEROKEE SMALL LETTER E
@@ -1431,6 +1436,41 @@ FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA
104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA
104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA
+10570; C; 10597; # VITHKUQI CAPITAL LETTER A
+10571; C; 10598; # VITHKUQI CAPITAL LETTER BBE
+10572; C; 10599; # VITHKUQI CAPITAL LETTER BE
+10573; C; 1059A; # VITHKUQI CAPITAL LETTER CE
+10574; C; 1059B; # VITHKUQI CAPITAL LETTER CHE
+10575; C; 1059C; # VITHKUQI CAPITAL LETTER DE
+10576; C; 1059D; # VITHKUQI CAPITAL LETTER DHE
+10577; C; 1059E; # VITHKUQI CAPITAL LETTER EI
+10578; C; 1059F; # VITHKUQI CAPITAL LETTER E
+10579; C; 105A0; # VITHKUQI CAPITAL LETTER FE
+1057A; C; 105A1; # VITHKUQI CAPITAL LETTER GA
+1057C; C; 105A3; # VITHKUQI CAPITAL LETTER HA
+1057D; C; 105A4; # VITHKUQI CAPITAL LETTER HHA
+1057E; C; 105A5; # VITHKUQI CAPITAL LETTER I
+1057F; C; 105A6; # VITHKUQI CAPITAL LETTER IJE
+10580; C; 105A7; # VITHKUQI CAPITAL LETTER JE
+10581; C; 105A8; # VITHKUQI CAPITAL LETTER KA
+10582; C; 105A9; # VITHKUQI CAPITAL LETTER LA
+10583; C; 105AA; # VITHKUQI CAPITAL LETTER LLA
+10584; C; 105AB; # VITHKUQI CAPITAL LETTER ME
+10585; C; 105AC; # VITHKUQI CAPITAL LETTER NE
+10586; C; 105AD; # VITHKUQI CAPITAL LETTER NJE
+10587; C; 105AE; # VITHKUQI CAPITAL LETTER O
+10588; C; 105AF; # VITHKUQI CAPITAL LETTER PE
+10589; C; 105B0; # VITHKUQI CAPITAL LETTER QA
+1058A; C; 105B1; # VITHKUQI CAPITAL LETTER RE
+1058C; C; 105B3; # VITHKUQI CAPITAL LETTER SE
+1058D; C; 105B4; # VITHKUQI CAPITAL LETTER SHE
+1058E; C; 105B5; # VITHKUQI CAPITAL LETTER TE
+1058F; C; 105B6; # VITHKUQI CAPITAL LETTER THE
+10590; C; 105B7; # VITHKUQI CAPITAL LETTER U
+10591; C; 105B8; # VITHKUQI CAPITAL LETTER VE
+10592; C; 105B9; # VITHKUQI CAPITAL LETTER XE
+10594; C; 105BB; # VITHKUQI CAPITAL LETTER Y
+10595; C; 105BC; # VITHKUQI CAPITAL LETTER ZE
10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A
10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA
10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt b/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
index d67ba023380..443d1a5dceb 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
@@ -1,6 +1,6 @@
-# DerivedCoreProperties-13.0.0.txt
-# Date: 2020-01-22, 00:07:19 GMT
-# © 2020 Unicode®, Inc.
+# DerivedCoreProperties-14.0.0.txt
+# Date: 2021-08-12, 23:12:53 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -341,8 +341,10 @@ FFE9..FFEC ; Math
0829..082C ; Alphabetic
0840..0858 ; Alphabetic
0860..086A ; Alphabetic
-08A0..08B4 ; Alphabetic
-08B6..08C7 ; Alphabetic
+0870..0887 ; Alphabetic
+0889..088E ; Alphabetic
+08A0..08C8 ; Alphabetic
+08C9 ; Alphabetic
08D4..08DF ; Alphabetic
08E3..08E9 ; Alphabetic
08F0..0902 ; Alphabetic
@@ -471,6 +473,7 @@ FFE9..FFEC ; Math
0C4A..0C4C ; Alphabetic
0C55..0C56 ; Alphabetic
0C58..0C5A ; Alphabetic
+0C5D ; Alphabetic
0C60..0C61 ; Alphabetic
0C62..0C63 ; Alphabetic
0C80 ; Alphabetic
@@ -490,7 +493,7 @@ FFE9..FFEC ; Math
0CCA..0CCB ; Alphabetic
0CCC ; Alphabetic
0CD5..0CD6 ; Alphabetic
-0CDE ; Alphabetic
+0CDD..0CDE ; Alphabetic
0CE0..0CE1 ; Alphabetic
0CE2..0CE3 ; Alphabetic
0CF1..0CF2 ; Alphabetic
@@ -614,10 +617,9 @@ FFE9..FFEC ; Math
16A0..16EA ; Alphabetic
16EE..16F0 ; Alphabetic
16F1..16F8 ; Alphabetic
-1700..170C ; Alphabetic
-170E..1711 ; Alphabetic
+1700..1711 ; Alphabetic
1712..1713 ; Alphabetic
-1720..1731 ; Alphabetic
+171F..1731 ; Alphabetic
1732..1733 ; Alphabetic
1740..1751 ; Alphabetic
1752..1753 ; Alphabetic
@@ -670,6 +672,7 @@ FFE9..FFEC ; Math
1A73..1A74 ; Alphabetic
1AA7 ; Alphabetic
1ABF..1AC0 ; Alphabetic
+1ACC..1ACE ; Alphabetic
1B00..1B03 ; Alphabetic
1B04 ; Alphabetic
1B05..1B33 ; Alphabetic
@@ -680,7 +683,7 @@ FFE9..FFEC ; Math
1B3D..1B41 ; Alphabetic
1B42 ; Alphabetic
1B43 ; Alphabetic
-1B45..1B4B ; Alphabetic
+1B45..1B4C ; Alphabetic
1B80..1B81 ; Alphabetic
1B82 ; Alphabetic
1B83..1BA0 ; Alphabetic
@@ -760,9 +763,7 @@ FFE9..FFEC ; Math
2183..2184 ; Alphabetic
2185..2188 ; Alphabetic
24B6..24E9 ; Alphabetic
-2C00..2C2E ; Alphabetic
-2C30..2C5E ; Alphabetic
-2C60..2C7B ; Alphabetic
+2C00..2C7B ; Alphabetic
2C7C..2C7D ; Alphabetic
2C7E..2CE4 ; Alphabetic
2CEB..2CEE ; Alphabetic
@@ -802,8 +803,7 @@ FFE9..FFEC ; Math
31A0..31BF ; Alphabetic
31F0..31FF ; Alphabetic
3400..4DBF ; Alphabetic
-4E00..9FFC ; Alphabetic
-A000..A014 ; Alphabetic
+4E00..A014 ; Alphabetic
A015 ; Alphabetic
A016..A48C ; Alphabetic
A4D0..A4F7 ; Alphabetic
@@ -828,8 +828,11 @@ A771..A787 ; Alphabetic
A788 ; Alphabetic
A78B..A78E ; Alphabetic
A78F ; Alphabetic
-A790..A7BF ; Alphabetic
-A7C2..A7CA ; Alphabetic
+A790..A7CA ; Alphabetic
+A7D0..A7D1 ; Alphabetic
+A7D3 ; Alphabetic
+A7D5..A7D9 ; Alphabetic
+A7F2..A7F4 ; Alphabetic
A7F5..A7F6 ; Alphabetic
A7F7 ; Alphabetic
A7F8..A7F9 ; Alphabetic
@@ -985,9 +988,20 @@ FFDA..FFDC ; Alphabetic
104D8..104FB ; Alphabetic
10500..10527 ; Alphabetic
10530..10563 ; Alphabetic
+10570..1057A ; Alphabetic
+1057C..1058A ; Alphabetic
+1058C..10592 ; Alphabetic
+10594..10595 ; Alphabetic
+10597..105A1 ; Alphabetic
+105A3..105B1 ; Alphabetic
+105B3..105B9 ; Alphabetic
+105BB..105BC ; Alphabetic
10600..10736 ; Alphabetic
10740..10755 ; Alphabetic
10760..10767 ; Alphabetic
+10780..10785 ; Alphabetic
+10787..107B0 ; Alphabetic
+107B2..107BA ; Alphabetic
10800..10805 ; Alphabetic
10808 ; Alphabetic
1080A..10835 ; Alphabetic
@@ -1028,6 +1042,7 @@ FFDA..FFDC ; Alphabetic
10F00..10F1C ; Alphabetic
10F27 ; Alphabetic
10F30..10F45 ; Alphabetic
+10F70..10F81 ; Alphabetic
10FB0..10FC4 ; Alphabetic
10FE0..10FF6 ; Alphabetic
11000 ; Alphabetic
@@ -1035,11 +1050,15 @@ FFDA..FFDC ; Alphabetic
11002 ; Alphabetic
11003..11037 ; Alphabetic
11038..11045 ; Alphabetic
+11071..11072 ; Alphabetic
+11073..11074 ; Alphabetic
+11075 ; Alphabetic
11082 ; Alphabetic
11083..110AF ; Alphabetic
110B0..110B2 ; Alphabetic
110B3..110B6 ; Alphabetic
110B7..110B8 ; Alphabetic
+110C2 ; Alphabetic
110D0..110E8 ; Alphabetic
11100..11102 ; Alphabetic
11103..11126 ; Alphabetic
@@ -1144,6 +1163,7 @@ FFDA..FFDC ; Alphabetic
11722..11725 ; Alphabetic
11726 ; Alphabetic
11727..1172A ; Alphabetic
+11740..11746 ; Alphabetic
11800..1182B ; Alphabetic
1182C..1182E ; Alphabetic
1182F..11837 ; Alphabetic
@@ -1185,7 +1205,7 @@ FFDA..FFDC ; Alphabetic
11A8A..11A96 ; Alphabetic
11A97 ; Alphabetic
11A9D ; Alphabetic
-11AC0..11AF8 ; Alphabetic
+11AB0..11AF8 ; Alphabetic
11C00..11C08 ; Alphabetic
11C0A..11C2E ; Alphabetic
11C2F ; Alphabetic
@@ -1227,10 +1247,12 @@ FFDA..FFDC ; Alphabetic
12000..12399 ; Alphabetic
12400..1246E ; Alphabetic
12480..12543 ; Alphabetic
+12F90..12FF0 ; Alphabetic
13000..1342E ; Alphabetic
14400..14646 ; Alphabetic
16800..16A38 ; Alphabetic
16A40..16A5E ; Alphabetic
+16A70..16ABE ; Alphabetic
16AD0..16AED ; Alphabetic
16B00..16B2F ; Alphabetic
16B40..16B43 ; Alphabetic
@@ -1249,7 +1271,10 @@ FFDA..FFDC ; Alphabetic
17000..187F7 ; Alphabetic
18800..18CD5 ; Alphabetic
18D00..18D08 ; Alphabetic
-1B000..1B11E ; Alphabetic
+1AFF0..1AFF3 ; Alphabetic
+1AFF5..1AFFB ; Alphabetic
+1AFFD..1AFFE ; Alphabetic
+1B000..1B122 ; Alphabetic
1B150..1B152 ; Alphabetic
1B164..1B167 ; Alphabetic
1B170..1B2FB ; Alphabetic
@@ -1288,6 +1313,9 @@ FFDA..FFDC ; Alphabetic
1D78A..1D7A8 ; Alphabetic
1D7AA..1D7C2 ; Alphabetic
1D7C4..1D7CB ; Alphabetic
+1DF00..1DF09 ; Alphabetic
+1DF0A ; Alphabetic
+1DF0B..1DF1E ; Alphabetic
1E000..1E006 ; Alphabetic
1E008..1E018 ; Alphabetic
1E01B..1E021 ; Alphabetic
@@ -1296,7 +1324,12 @@ FFDA..FFDC ; Alphabetic
1E100..1E12C ; Alphabetic
1E137..1E13D ; Alphabetic
1E14E ; Alphabetic
+1E290..1E2AD ; Alphabetic
1E2C0..1E2EB ; Alphabetic
+1E7E0..1E7E6 ; Alphabetic
+1E7E8..1E7EB ; Alphabetic
+1E7ED..1E7EE ; Alphabetic
+1E7F0..1E7FE ; Alphabetic
1E800..1E8C4 ; Alphabetic
1E900..1E943 ; Alphabetic
1E947 ; Alphabetic
@@ -1337,15 +1370,15 @@ FFDA..FFDC ; Alphabetic
1F130..1F149 ; Alphabetic
1F150..1F169 ; Alphabetic
1F170..1F189 ; Alphabetic
-20000..2A6DD ; Alphabetic
-2A700..2B734 ; Alphabetic
+20000..2A6DF ; Alphabetic
+2A700..2B738 ; Alphabetic
2B740..2B81D ; Alphabetic
2B820..2CEA1 ; Alphabetic
2CEB0..2EBE0 ; Alphabetic
2F800..2FA1D ; Alphabetic
30000..3134A ; Alphabetic
-# Total code points: 132875
+# Total code points: 133396
# ================================================
@@ -1798,7 +1831,7 @@ FFDA..FFDC ; Alphabetic
2170..217F ; Lowercase
2184 ; Lowercase
24D0..24E9 ; Lowercase
-2C30..2C5E ; Lowercase
+2C30..2C5F ; Lowercase
2C61 ; Lowercase
2C65..2C66 ; Lowercase
2C68 ; Lowercase
@@ -1970,9 +2003,15 @@ A7B9 ; Lowercase
A7BB ; Lowercase
A7BD ; Lowercase
A7BF ; Lowercase
+A7C1 ; Lowercase
A7C3 ; Lowercase
A7C8 ; Lowercase
A7CA ; Lowercase
+A7D1 ; Lowercase
+A7D3 ; Lowercase
+A7D5 ; Lowercase
+A7D7 ; Lowercase
+A7D9 ; Lowercase
A7F6 ; Lowercase
A7F8..A7F9 ; Lowercase
A7FA ; Lowercase
@@ -1985,6 +2024,14 @@ FB13..FB17 ; Lowercase
FF41..FF5A ; Lowercase
10428..1044F ; Lowercase
104D8..104FB ; Lowercase
+10597..105A1 ; Lowercase
+105A3..105B1 ; Lowercase
+105B3..105B9 ; Lowercase
+105BB..105BC ; Lowercase
+10780 ; Lowercase
+10783..10785 ; Lowercase
+10787..107B0 ; Lowercase
+107B2..107BA ; Lowercase
10CC0..10CF2 ; Lowercase
118C0..118DF ; Lowercase
16E60..16E7F ; Lowercase
@@ -2016,9 +2063,11 @@ FF41..FF5A ; Lowercase
1D7AA..1D7C2 ; Lowercase
1D7C4..1D7C9 ; Lowercase
1D7CB ; Lowercase
+1DF00..1DF09 ; Lowercase
+1DF0B..1DF1E ; Lowercase
1E922..1E943 ; Lowercase
-# Total code points: 2344
+# Total code points: 2471
# ================================================
@@ -2458,7 +2507,7 @@ FF41..FF5A ; Lowercase
2160..216F ; Uppercase
2183 ; Uppercase
24B6..24CF ; Uppercase
-2C00..2C2E ; Uppercase
+2C00..2C2F ; Uppercase
2C60 ; Uppercase
2C62..2C64 ; Uppercase
2C67 ; Uppercase
@@ -2623,13 +2672,21 @@ A7B8 ; Uppercase
A7BA ; Uppercase
A7BC ; Uppercase
A7BE ; Uppercase
+A7C0 ; Uppercase
A7C2 ; Uppercase
A7C4..A7C7 ; Uppercase
A7C9 ; Uppercase
+A7D0 ; Uppercase
+A7D6 ; Uppercase
+A7D8 ; Uppercase
A7F5 ; Uppercase
FF21..FF3A ; Uppercase
10400..10427 ; Uppercase
104B0..104D3 ; Uppercase
+10570..1057A ; Uppercase
+1057C..1058A ; Uppercase
+1058C..10592 ; Uppercase
+10594..10595 ; Uppercase
10C80..10CB2 ; Uppercase
118A0..118BF ; Uppercase
16E40..16E5F ; Uppercase
@@ -2669,7 +2726,7 @@ FF21..FF3A ; Uppercase
1F150..1F169 ; Uppercase
1F170..1F189 ; Uppercase
-# Total code points: 1911
+# Total code points: 1951
# ================================================
@@ -2761,9 +2818,7 @@ FF21..FF3A ; Uppercase
2160..217F ; Cased
2183..2184 ; Cased
24B6..24E9 ; Cased
-2C00..2C2E ; Cased
-2C30..2C5E ; Cased
-2C60..2C7B ; Cased
+2C00..2C7B ; Cased
2C7C..2C7D ; Cased
2C7E..2CE4 ; Cased
2CEB..2CEE ; Cased
@@ -2778,8 +2833,10 @@ A722..A76F ; Cased
A770 ; Cased
A771..A787 ; Cased
A78B..A78E ; Cased
-A790..A7BF ; Cased
-A7C2..A7CA ; Cased
+A790..A7CA ; Cased
+A7D0..A7D1 ; Cased
+A7D3 ; Cased
+A7D5..A7D9 ; Cased
A7F5..A7F6 ; Cased
A7F8..A7F9 ; Cased
A7FA ; Cased
@@ -2794,6 +2851,18 @@ FF41..FF5A ; Cased
10400..1044F ; Cased
104B0..104D3 ; Cased
104D8..104FB ; Cased
+10570..1057A ; Cased
+1057C..1058A ; Cased
+1058C..10592 ; Cased
+10594..10595 ; Cased
+10597..105A1 ; Cased
+105A3..105B1 ; Cased
+105B3..105B9 ; Cased
+105BB..105BC ; Cased
+10780 ; Cased
+10783..10785 ; Cased
+10787..107B0 ; Cased
+107B2..107BA ; Cased
10C80..10CB2 ; Cased
10CC0..10CF2 ; Cased
118A0..118DF ; Cased
@@ -2828,12 +2897,14 @@ FF41..FF5A ; Cased
1D78A..1D7A8 ; Cased
1D7AA..1D7C2 ; Cased
1D7C4..1D7CB ; Cased
+1DF00..1DF09 ; Cased
+1DF0B..1DF1E ; Cased
1E900..1E943 ; Cased
1F130..1F149 ; Cased
1F150..1F169 ; Cased
1F170..1F189 ; Cased
-# Total code points: 4286
+# Total code points: 4453
# ================================================
@@ -2908,7 +2979,11 @@ FF41..FF5A ; Cased
0828 ; Case_Ignorable
0829..082D ; Case_Ignorable
0859..085B ; Case_Ignorable
-08D3..08E1 ; Case_Ignorable
+0888 ; Case_Ignorable
+0890..0891 ; Case_Ignorable
+0898..089F ; Case_Ignorable
+08C9 ; Case_Ignorable
+08CA..08E1 ; Case_Ignorable
08E2 ; Case_Ignorable
08E3..0902 ; Case_Ignorable
093A ; Case_Ignorable
@@ -2951,6 +3026,7 @@ FF41..FF5A ; Cased
0BCD ; Case_Ignorable
0C00 ; Case_Ignorable
0C04 ; Case_Ignorable
+0C3C ; Case_Ignorable
0C3E..0C40 ; Case_Ignorable
0C46..0C48 ; Case_Ignorable
0C4A..0C4D ; Case_Ignorable
@@ -3003,7 +3079,7 @@ FF41..FF5A ; Cased
10FC ; Case_Ignorable
135D..135F ; Case_Ignorable
1712..1714 ; Case_Ignorable
-1732..1734 ; Case_Ignorable
+1732..1733 ; Case_Ignorable
1752..1753 ; Case_Ignorable
1772..1773 ; Case_Ignorable
17B4..17B5 ; Case_Ignorable
@@ -3014,6 +3090,7 @@ FF41..FF5A ; Cased
17DD ; Case_Ignorable
180B..180D ; Case_Ignorable
180E ; Case_Ignorable
+180F ; Case_Ignorable
1843 ; Case_Ignorable
1885..1886 ; Case_Ignorable
18A9 ; Case_Ignorable
@@ -3033,7 +3110,7 @@ FF41..FF5A ; Cased
1AA7 ; Case_Ignorable
1AB0..1ABD ; Case_Ignorable
1ABE ; Case_Ignorable
-1ABF..1AC0 ; Case_Ignorable
+1ABF..1ACE ; Case_Ignorable
1B00..1B03 ; Case_Ignorable
1B34 ; Case_Ignorable
1B36..1B3A ; Case_Ignorable
@@ -3060,8 +3137,7 @@ FF41..FF5A ; Cased
1D2C..1D6A ; Case_Ignorable
1D78 ; Case_Ignorable
1D9B..1DBF ; Case_Ignorable
-1DC0..1DF9 ; Case_Ignorable
-1DFB..1DFF ; Case_Ignorable
+1DC0..1DFF ; Case_Ignorable
1FBD ; Case_Ignorable
1FBF..1FC1 ; Case_Ignorable
1FCD..1FCF ; Case_Ignorable
@@ -3114,6 +3190,7 @@ A720..A721 ; Case_Ignorable
A770 ; Case_Ignorable
A788 ; Case_Ignorable
A789..A78A ; Case_Ignorable
+A7F2..A7F4 ; Case_Ignorable
A7F8..A7F9 ; Case_Ignorable
A802 ; Case_Ignorable
A806 ; Case_Ignorable
@@ -3156,7 +3233,7 @@ ABE5 ; Case_Ignorable
ABE8 ; Case_Ignorable
ABED ; Case_Ignorable
FB1E ; Case_Ignorable
-FBB2..FBC1 ; Case_Ignorable
+FBB2..FBC2 ; Case_Ignorable
FE00..FE0F ; Case_Ignorable
FE13 ; Case_Ignorable
FE20..FE2F ; Case_Ignorable
@@ -3175,6 +3252,9 @@ FFF9..FFFB ; Case_Ignorable
101FD ; Case_Ignorable
102E0 ; Case_Ignorable
10376..1037A ; Case_Ignorable
+10780..10785 ; Case_Ignorable
+10787..107B0 ; Case_Ignorable
+107B2..107BA ; Case_Ignorable
10A01..10A03 ; Case_Ignorable
10A05..10A06 ; Case_Ignorable
10A0C..10A0F ; Case_Ignorable
@@ -3184,12 +3264,16 @@ FFF9..FFFB ; Case_Ignorable
10D24..10D27 ; Case_Ignorable
10EAB..10EAC ; Case_Ignorable
10F46..10F50 ; Case_Ignorable
+10F82..10F85 ; Case_Ignorable
11001 ; Case_Ignorable
11038..11046 ; Case_Ignorable
+11070 ; Case_Ignorable
+11073..11074 ; Case_Ignorable
1107F..11081 ; Case_Ignorable
110B3..110B6 ; Case_Ignorable
110B9..110BA ; Case_Ignorable
110BD ; Case_Ignorable
+110C2 ; Case_Ignorable
110CD ; Case_Ignorable
11100..11102 ; Case_Ignorable
11127..1112B ; Case_Ignorable
@@ -3274,8 +3358,13 @@ FFF9..FFFB ; Case_Ignorable
16FE0..16FE1 ; Case_Ignorable
16FE3 ; Case_Ignorable
16FE4 ; Case_Ignorable
+1AFF0..1AFF3 ; Case_Ignorable
+1AFF5..1AFFB ; Case_Ignorable
+1AFFD..1AFFE ; Case_Ignorable
1BC9D..1BC9E ; Case_Ignorable
1BCA0..1BCA3 ; Case_Ignorable
+1CF00..1CF2D ; Case_Ignorable
+1CF30..1CF46 ; Case_Ignorable
1D167..1D169 ; Case_Ignorable
1D173..1D17A ; Case_Ignorable
1D17B..1D182 ; Case_Ignorable
@@ -3295,6 +3384,7 @@ FFF9..FFFB ; Case_Ignorable
1E026..1E02A ; Case_Ignorable
1E130..1E136 ; Case_Ignorable
1E137..1E13D ; Case_Ignorable
+1E2AE ; Case_Ignorable
1E2EC..1E2EF ; Case_Ignorable
1E8D0..1E8D6 ; Case_Ignorable
1E944..1E94A ; Case_Ignorable
@@ -3304,7 +3394,7 @@ E0001 ; Case_Ignorable
E0020..E007F ; Case_Ignorable
E0100..E01EF ; Case_Ignorable
-# Total code points: 2413
+# Total code points: 2602
# ================================================
@@ -3738,7 +3828,7 @@ E0100..E01EF ; Case_Ignorable
2160..216F ; Changes_When_Lowercased
2183 ; Changes_When_Lowercased
24B6..24CF ; Changes_When_Lowercased
-2C00..2C2E ; Changes_When_Lowercased
+2C00..2C2F ; Changes_When_Lowercased
2C60 ; Changes_When_Lowercased
2C62..2C64 ; Changes_When_Lowercased
2C67 ; Changes_When_Lowercased
@@ -3903,19 +3993,27 @@ A7B8 ; Changes_When_Lowercased
A7BA ; Changes_When_Lowercased
A7BC ; Changes_When_Lowercased
A7BE ; Changes_When_Lowercased
+A7C0 ; Changes_When_Lowercased
A7C2 ; Changes_When_Lowercased
A7C4..A7C7 ; Changes_When_Lowercased
A7C9 ; Changes_When_Lowercased
+A7D0 ; Changes_When_Lowercased
+A7D6 ; Changes_When_Lowercased
+A7D8 ; Changes_When_Lowercased
A7F5 ; Changes_When_Lowercased
FF21..FF3A ; Changes_When_Lowercased
10400..10427 ; Changes_When_Lowercased
104B0..104D3 ; Changes_When_Lowercased
+10570..1057A ; Changes_When_Lowercased
+1057C..1058A ; Changes_When_Lowercased
+1058C..10592 ; Changes_When_Lowercased
+10594..10595 ; Changes_When_Lowercased
10C80..10CB2 ; Changes_When_Lowercased
118A0..118BF ; Changes_When_Lowercased
16E40..16E5F ; Changes_When_Lowercased
1E900..1E921 ; Changes_When_Lowercased
-# Total code points: 1393
+# Total code points: 1433
# ================================================
@@ -4363,7 +4461,7 @@ FF21..FF3A ; Changes_When_Lowercased
2170..217F ; Changes_When_Uppercased
2184 ; Changes_When_Uppercased
24D0..24E9 ; Changes_When_Uppercased
-2C30..2C5E ; Changes_When_Uppercased
+2C30..2C5F ; Changes_When_Uppercased
2C61 ; Changes_When_Uppercased
2C65..2C66 ; Changes_When_Uppercased
2C68 ; Changes_When_Uppercased
@@ -4528,9 +4626,13 @@ A7B9 ; Changes_When_Uppercased
A7BB ; Changes_When_Uppercased
A7BD ; Changes_When_Uppercased
A7BF ; Changes_When_Uppercased
+A7C1 ; Changes_When_Uppercased
A7C3 ; Changes_When_Uppercased
A7C8 ; Changes_When_Uppercased
A7CA ; Changes_When_Uppercased
+A7D1 ; Changes_When_Uppercased
+A7D7 ; Changes_When_Uppercased
+A7D9 ; Changes_When_Uppercased
A7F6 ; Changes_When_Uppercased
AB53 ; Changes_When_Uppercased
AB70..ABBF ; Changes_When_Uppercased
@@ -4539,12 +4641,16 @@ FB13..FB17 ; Changes_When_Uppercased
FF41..FF5A ; Changes_When_Uppercased
10428..1044F ; Changes_When_Uppercased
104D8..104FB ; Changes_When_Uppercased
+10597..105A1 ; Changes_When_Uppercased
+105A3..105B1 ; Changes_When_Uppercased
+105B3..105B9 ; Changes_When_Uppercased
+105BB..105BC ; Changes_When_Uppercased
10CC0..10CF2 ; Changes_When_Uppercased
118C0..118DF ; Changes_When_Uppercased
16E60..16E7F ; Changes_When_Uppercased
1E922..1E943 ; Changes_When_Uppercased
-# Total code points: 1485
+# Total code points: 1525
# ================================================
@@ -4991,7 +5097,7 @@ FF41..FF5A ; Changes_When_Uppercased
2170..217F ; Changes_When_Titlecased
2184 ; Changes_When_Titlecased
24D0..24E9 ; Changes_When_Titlecased
-2C30..2C5E ; Changes_When_Titlecased
+2C30..2C5F ; Changes_When_Titlecased
2C61 ; Changes_When_Titlecased
2C65..2C66 ; Changes_When_Titlecased
2C68 ; Changes_When_Titlecased
@@ -5156,9 +5262,13 @@ A7B9 ; Changes_When_Titlecased
A7BB ; Changes_When_Titlecased
A7BD ; Changes_When_Titlecased
A7BF ; Changes_When_Titlecased
+A7C1 ; Changes_When_Titlecased
A7C3 ; Changes_When_Titlecased
A7C8 ; Changes_When_Titlecased
A7CA ; Changes_When_Titlecased
+A7D1 ; Changes_When_Titlecased
+A7D7 ; Changes_When_Titlecased
+A7D9 ; Changes_When_Titlecased
A7F6 ; Changes_When_Titlecased
AB53 ; Changes_When_Titlecased
AB70..ABBF ; Changes_When_Titlecased
@@ -5167,12 +5277,16 @@ FB13..FB17 ; Changes_When_Titlecased
FF41..FF5A ; Changes_When_Titlecased
10428..1044F ; Changes_When_Titlecased
104D8..104FB ; Changes_When_Titlecased
+10597..105A1 ; Changes_When_Titlecased
+105A3..105B1 ; Changes_When_Titlecased
+105B3..105B9 ; Changes_When_Titlecased
+105BB..105BC ; Changes_When_Titlecased
10CC0..10CF2 ; Changes_When_Titlecased
118C0..118DF ; Changes_When_Titlecased
16E60..16E7F ; Changes_When_Titlecased
1E922..1E943 ; Changes_When_Titlecased
-# Total code points: 1412
+# Total code points: 1452
# ================================================
@@ -5616,7 +5730,7 @@ FF41..FF5A ; Changes_When_Titlecased
2160..216F ; Changes_When_Casefolded
2183 ; Changes_When_Casefolded
24B6..24CF ; Changes_When_Casefolded
-2C00..2C2E ; Changes_When_Casefolded
+2C00..2C2F ; Changes_When_Casefolded
2C60 ; Changes_When_Casefolded
2C62..2C64 ; Changes_When_Casefolded
2C67 ; Changes_When_Casefolded
@@ -5781,9 +5895,13 @@ A7B8 ; Changes_When_Casefolded
A7BA ; Changes_When_Casefolded
A7BC ; Changes_When_Casefolded
A7BE ; Changes_When_Casefolded
+A7C0 ; Changes_When_Casefolded
A7C2 ; Changes_When_Casefolded
A7C4..A7C7 ; Changes_When_Casefolded
A7C9 ; Changes_When_Casefolded
+A7D0 ; Changes_When_Casefolded
+A7D6 ; Changes_When_Casefolded
+A7D8 ; Changes_When_Casefolded
A7F5 ; Changes_When_Casefolded
AB70..ABBF ; Changes_When_Casefolded
FB00..FB06 ; Changes_When_Casefolded
@@ -5791,12 +5909,16 @@ FB13..FB17 ; Changes_When_Casefolded
FF21..FF3A ; Changes_When_Casefolded
10400..10427 ; Changes_When_Casefolded
104B0..104D3 ; Changes_When_Casefolded
+10570..1057A ; Changes_When_Casefolded
+1057C..1058A ; Changes_When_Casefolded
+1058C..10592 ; Changes_When_Casefolded
+10594..10595 ; Changes_When_Casefolded
10C80..10CB2 ; Changes_When_Casefolded
118A0..118BF ; Changes_When_Casefolded
16E40..16E5F ; Changes_When_Casefolded
1E900..1E921 ; Changes_When_Casefolded
-# Total code points: 1466
+# Total code points: 1506
# ================================================
@@ -5893,9 +6015,7 @@ FF21..FF3A ; Changes_When_Casefolded
2160..217F ; Changes_When_Casemapped
2183..2184 ; Changes_When_Casemapped
24B6..24E9 ; Changes_When_Casemapped
-2C00..2C2E ; Changes_When_Casemapped
-2C30..2C5E ; Changes_When_Casemapped
-2C60..2C70 ; Changes_When_Casemapped
+2C00..2C70 ; Changes_When_Casemapped
2C72..2C73 ; Changes_When_Casemapped
2C75..2C76 ; Changes_When_Casemapped
2C7E..2CE3 ; Changes_When_Casemapped
@@ -5912,8 +6032,9 @@ A779..A787 ; Changes_When_Casemapped
A78B..A78D ; Changes_When_Casemapped
A790..A794 ; Changes_When_Casemapped
A796..A7AE ; Changes_When_Casemapped
-A7B0..A7BF ; Changes_When_Casemapped
-A7C2..A7CA ; Changes_When_Casemapped
+A7B0..A7CA ; Changes_When_Casemapped
+A7D0..A7D1 ; Changes_When_Casemapped
+A7D6..A7D9 ; Changes_When_Casemapped
A7F5..A7F6 ; Changes_When_Casemapped
AB53 ; Changes_When_Casemapped
AB70..ABBF ; Changes_When_Casemapped
@@ -5924,13 +6045,21 @@ FF41..FF5A ; Changes_When_Casemapped
10400..1044F ; Changes_When_Casemapped
104B0..104D3 ; Changes_When_Casemapped
104D8..104FB ; Changes_When_Casemapped
+10570..1057A ; Changes_When_Casemapped
+1057C..1058A ; Changes_When_Casemapped
+1058C..10592 ; Changes_When_Casemapped
+10594..10595 ; Changes_When_Casemapped
+10597..105A1 ; Changes_When_Casemapped
+105A3..105B1 ; Changes_When_Casemapped
+105B3..105B9 ; Changes_When_Casemapped
+105BB..105BC ; Changes_When_Casemapped
10C80..10CB2 ; Changes_When_Casemapped
10CC0..10CF2 ; Changes_When_Casemapped
118A0..118DF ; Changes_When_Casemapped
16E40..16E7F ; Changes_When_Casemapped
1E900..1E943 ; Changes_When_Casemapped
-# Total code points: 2847
+# Total code points: 2927
# ================================================
@@ -6003,8 +6132,10 @@ FF41..FF5A ; Changes_When_Casemapped
0828 ; ID_Start
0840..0858 ; ID_Start
0860..086A ; ID_Start
-08A0..08B4 ; ID_Start
-08B6..08C7 ; ID_Start
+0870..0887 ; ID_Start
+0889..088E ; ID_Start
+08A0..08C8 ; ID_Start
+08C9 ; ID_Start
0904..0939 ; ID_Start
093D ; ID_Start
0950 ; ID_Start
@@ -6070,6 +6201,7 @@ FF41..FF5A ; Changes_When_Casemapped
0C2A..0C39 ; ID_Start
0C3D ; ID_Start
0C58..0C5A ; ID_Start
+0C5D ; ID_Start
0C60..0C61 ; ID_Start
0C80 ; ID_Start
0C85..0C8C ; ID_Start
@@ -6078,7 +6210,7 @@ FF41..FF5A ; Changes_When_Casemapped
0CAA..0CB3 ; ID_Start
0CB5..0CB9 ; ID_Start
0CBD ; ID_Start
-0CDE ; ID_Start
+0CDD..0CDE ; ID_Start
0CE0..0CE1 ; ID_Start
0CF1..0CF2 ; ID_Start
0D04..0D0C ; ID_Start
@@ -6153,9 +6285,8 @@ FF41..FF5A ; Changes_When_Casemapped
16A0..16EA ; ID_Start
16EE..16F0 ; ID_Start
16F1..16F8 ; ID_Start
-1700..170C ; ID_Start
-170E..1711 ; ID_Start
-1720..1731 ; ID_Start
+1700..1711 ; ID_Start
+171F..1731 ; ID_Start
1740..1751 ; ID_Start
1760..176C ; ID_Start
176E..1770 ; ID_Start
@@ -6179,7 +6310,7 @@ FF41..FF5A ; Changes_When_Casemapped
1A20..1A54 ; ID_Start
1AA7 ; ID_Start
1B05..1B33 ; ID_Start
-1B45..1B4B ; ID_Start
+1B45..1B4C ; ID_Start
1B83..1BA0 ; ID_Start
1BAE..1BAF ; ID_Start
1BBA..1BE5 ; ID_Start
@@ -6242,9 +6373,7 @@ FF41..FF5A ; Changes_When_Casemapped
2160..2182 ; ID_Start
2183..2184 ; ID_Start
2185..2188 ; ID_Start
-2C00..2C2E ; ID_Start
-2C30..2C5E ; ID_Start
-2C60..2C7B ; ID_Start
+2C00..2C7B ; ID_Start
2C7C..2C7D ; ID_Start
2C7E..2CE4 ; ID_Start
2CEB..2CEE ; ID_Start
@@ -6283,8 +6412,7 @@ FF41..FF5A ; Changes_When_Casemapped
31A0..31BF ; ID_Start
31F0..31FF ; ID_Start
3400..4DBF ; ID_Start
-4E00..9FFC ; ID_Start
-A000..A014 ; ID_Start
+4E00..A014 ; ID_Start
A015 ; ID_Start
A016..A48C ; ID_Start
A4D0..A4F7 ; ID_Start
@@ -6307,8 +6435,11 @@ A771..A787 ; ID_Start
A788 ; ID_Start
A78B..A78E ; ID_Start
A78F ; ID_Start
-A790..A7BF ; ID_Start
-A7C2..A7CA ; ID_Start
+A790..A7CA ; ID_Start
+A7D0..A7D1 ; ID_Start
+A7D3 ; ID_Start
+A7D5..A7D9 ; ID_Start
+A7F2..A7F4 ; ID_Start
A7F5..A7F6 ; ID_Start
A7F7 ; ID_Start
A7F8..A7F9 ; ID_Start
@@ -6418,9 +6549,20 @@ FFDA..FFDC ; ID_Start
104D8..104FB ; ID_Start
10500..10527 ; ID_Start
10530..10563 ; ID_Start
+10570..1057A ; ID_Start
+1057C..1058A ; ID_Start
+1058C..10592 ; ID_Start
+10594..10595 ; ID_Start
+10597..105A1 ; ID_Start
+105A3..105B1 ; ID_Start
+105B3..105B9 ; ID_Start
+105BB..105BC ; ID_Start
10600..10736 ; ID_Start
10740..10755 ; ID_Start
10760..10767 ; ID_Start
+10780..10785 ; ID_Start
+10787..107B0 ; ID_Start
+107B2..107BA ; ID_Start
10800..10805 ; ID_Start
10808 ; ID_Start
1080A..10835 ; ID_Start
@@ -6456,9 +6598,12 @@ FFDA..FFDC ; ID_Start
10F00..10F1C ; ID_Start
10F27 ; ID_Start
10F30..10F45 ; ID_Start
+10F70..10F81 ; ID_Start
10FB0..10FC4 ; ID_Start
10FE0..10FF6 ; ID_Start
11003..11037 ; ID_Start
+11071..11072 ; ID_Start
+11075 ; ID_Start
11083..110AF ; ID_Start
110D0..110E8 ; ID_Start
11103..11126 ; ID_Start
@@ -6500,6 +6645,7 @@ FFDA..FFDC ; ID_Start
11680..116AA ; ID_Start
116B8 ; ID_Start
11700..1171A ; ID_Start
+11740..11746 ; ID_Start
11800..1182B ; ID_Start
118A0..118DF ; ID_Start
118FF..11906 ; ID_Start
@@ -6519,7 +6665,7 @@ FFDA..FFDC ; ID_Start
11A50 ; ID_Start
11A5C..11A89 ; ID_Start
11A9D ; ID_Start
-11AC0..11AF8 ; ID_Start
+11AB0..11AF8 ; ID_Start
11C00..11C08 ; ID_Start
11C0A..11C2E ; ID_Start
11C40 ; ID_Start
@@ -6537,10 +6683,12 @@ FFDA..FFDC ; ID_Start
12000..12399 ; ID_Start
12400..1246E ; ID_Start
12480..12543 ; ID_Start
+12F90..12FF0 ; ID_Start
13000..1342E ; ID_Start
14400..14646 ; ID_Start
16800..16A38 ; ID_Start
16A40..16A5E ; ID_Start
+16A70..16ABE ; ID_Start
16AD0..16AED ; ID_Start
16B00..16B2F ; ID_Start
16B40..16B43 ; ID_Start
@@ -6555,7 +6703,10 @@ FFDA..FFDC ; ID_Start
17000..187F7 ; ID_Start
18800..18CD5 ; ID_Start
18D00..18D08 ; ID_Start
-1B000..1B11E ; ID_Start
+1AFF0..1AFF3 ; ID_Start
+1AFF5..1AFFB ; ID_Start
+1AFFD..1AFFE ; ID_Start
+1B000..1B122 ; ID_Start
1B150..1B152 ; ID_Start
1B164..1B167 ; ID_Start
1B170..1B2FB ; ID_Start
@@ -6593,10 +6744,18 @@ FFDA..FFDC ; ID_Start
1D78A..1D7A8 ; ID_Start
1D7AA..1D7C2 ; ID_Start
1D7C4..1D7CB ; ID_Start
+1DF00..1DF09 ; ID_Start
+1DF0A ; ID_Start
+1DF0B..1DF1E ; ID_Start
1E100..1E12C ; ID_Start
1E137..1E13D ; ID_Start
1E14E ; ID_Start
+1E290..1E2AD ; ID_Start
1E2C0..1E2EB ; ID_Start
+1E7E0..1E7E6 ; ID_Start
+1E7E8..1E7EB ; ID_Start
+1E7ED..1E7EE ; ID_Start
+1E7F0..1E7FE ; ID_Start
1E800..1E8C4 ; ID_Start
1E900..1E943 ; ID_Start
1E94B ; ID_Start
@@ -6633,15 +6792,15 @@ FFDA..FFDC ; ID_Start
1EEA1..1EEA3 ; ID_Start
1EEA5..1EEA9 ; ID_Start
1EEAB..1EEBB ; ID_Start
-20000..2A6DD ; ID_Start
-2A700..2B734 ; ID_Start
+20000..2A6DF ; ID_Start
+2A700..2B738 ; ID_Start
2B740..2B81D ; ID_Start
2B820..2CEA1 ; ID_Start
2CEB0..2EBE0 ; ID_Start
2F800..2FA1D ; ID_Start
30000..3134A ; ID_Start
-# Total code points: 131482
+# Total code points: 131997
# ================================================
@@ -6746,9 +6905,12 @@ FFDA..FFDC ; ID_Start
0840..0858 ; ID_Continue
0859..085B ; ID_Continue
0860..086A ; ID_Continue
-08A0..08B4 ; ID_Continue
-08B6..08C7 ; ID_Continue
-08D3..08E1 ; ID_Continue
+0870..0887 ; ID_Continue
+0889..088E ; ID_Continue
+0898..089F ; ID_Continue
+08A0..08C8 ; ID_Continue
+08C9 ; ID_Continue
+08CA..08E1 ; ID_Continue
08E3..0902 ; ID_Continue
0903 ; ID_Continue
0904..0939 ; ID_Continue
@@ -6886,6 +7048,7 @@ FFDA..FFDC ; ID_Start
0C0E..0C10 ; ID_Continue
0C12..0C28 ; ID_Continue
0C2A..0C39 ; ID_Continue
+0C3C ; ID_Continue
0C3D ; ID_Continue
0C3E..0C40 ; ID_Continue
0C41..0C44 ; ID_Continue
@@ -6893,6 +7056,7 @@ FFDA..FFDC ; ID_Start
0C4A..0C4D ; ID_Continue
0C55..0C56 ; ID_Continue
0C58..0C5A ; ID_Continue
+0C5D ; ID_Continue
0C60..0C61 ; ID_Continue
0C62..0C63 ; ID_Continue
0C66..0C6F ; ID_Continue
@@ -6914,7 +7078,7 @@ FFDA..FFDC ; ID_Start
0CCA..0CCB ; ID_Continue
0CCC..0CCD ; ID_Continue
0CD5..0CD6 ; ID_Continue
-0CDE ; ID_Continue
+0CDD..0CDE ; ID_Continue
0CE0..0CE1 ; ID_Continue
0CE2..0CE3 ; ID_Continue
0CE6..0CEF ; ID_Continue
@@ -7058,11 +7222,12 @@ FFDA..FFDC ; ID_Start
16A0..16EA ; ID_Continue
16EE..16F0 ; ID_Continue
16F1..16F8 ; ID_Continue
-1700..170C ; ID_Continue
-170E..1711 ; ID_Continue
+1700..1711 ; ID_Continue
1712..1714 ; ID_Continue
-1720..1731 ; ID_Continue
-1732..1734 ; ID_Continue
+1715 ; ID_Continue
+171F..1731 ; ID_Continue
+1732..1733 ; ID_Continue
+1734 ; ID_Continue
1740..1751 ; ID_Continue
1752..1753 ; ID_Continue
1760..176C ; ID_Continue
@@ -7081,6 +7246,7 @@ FFDA..FFDC ; ID_Start
17DD ; ID_Continue
17E0..17E9 ; ID_Continue
180B..180D ; ID_Continue
+180F ; ID_Continue
1810..1819 ; ID_Continue
1820..1842 ; ID_Continue
1843 ; ID_Continue
@@ -7128,7 +7294,7 @@ FFDA..FFDC ; ID_Start
1A90..1A99 ; ID_Continue
1AA7 ; ID_Continue
1AB0..1ABD ; ID_Continue
-1ABF..1AC0 ; ID_Continue
+1ABF..1ACE ; ID_Continue
1B00..1B03 ; ID_Continue
1B04 ; ID_Continue
1B05..1B33 ; ID_Continue
@@ -7140,7 +7306,7 @@ FFDA..FFDC ; ID_Start
1B3D..1B41 ; ID_Continue
1B42 ; ID_Continue
1B43..1B44 ; ID_Continue
-1B45..1B4B ; ID_Continue
+1B45..1B4C ; ID_Continue
1B50..1B59 ; ID_Continue
1B6B..1B73 ; ID_Continue
1B80..1B81 ; ID_Continue
@@ -7194,8 +7360,7 @@ FFDA..FFDC ; ID_Start
1D78 ; ID_Continue
1D79..1D9A ; ID_Continue
1D9B..1DBF ; ID_Continue
-1DC0..1DF9 ; ID_Continue
-1DFB..1DFF ; ID_Continue
+1DC0..1DFF ; ID_Continue
1E00..1F15 ; ID_Continue
1F18..1F1D ; ID_Continue
1F20..1F45 ; ID_Continue
@@ -7243,9 +7408,7 @@ FFDA..FFDC ; ID_Start
2160..2182 ; ID_Continue
2183..2184 ; ID_Continue
2185..2188 ; ID_Continue
-2C00..2C2E ; ID_Continue
-2C30..2C5E ; ID_Continue
-2C60..2C7B ; ID_Continue
+2C00..2C7B ; ID_Continue
2C7C..2C7D ; ID_Continue
2C7E..2CE4 ; ID_Continue
2CEB..2CEE ; ID_Continue
@@ -7290,8 +7453,7 @@ FFDA..FFDC ; ID_Start
31A0..31BF ; ID_Continue
31F0..31FF ; ID_Continue
3400..4DBF ; ID_Continue
-4E00..9FFC ; ID_Continue
-A000..A014 ; ID_Continue
+4E00..A014 ; ID_Continue
A015 ; ID_Continue
A016..A48C ; ID_Continue
A4D0..A4F7 ; ID_Continue
@@ -7319,8 +7481,11 @@ A771..A787 ; ID_Continue
A788 ; ID_Continue
A78B..A78E ; ID_Continue
A78F ; ID_Continue
-A790..A7BF ; ID_Continue
-A7C2..A7CA ; ID_Continue
+A790..A7CA ; ID_Continue
+A7D0..A7D1 ; ID_Continue
+A7D3 ; ID_Continue
+A7D5..A7D9 ; ID_Continue
+A7F2..A7F4 ; ID_Continue
A7F5..A7F6 ; ID_Continue
A7F7 ; ID_Continue
A7F8..A7F9 ; ID_Continue
@@ -7499,9 +7664,20 @@ FFDA..FFDC ; ID_Continue
104D8..104FB ; ID_Continue
10500..10527 ; ID_Continue
10530..10563 ; ID_Continue
+10570..1057A ; ID_Continue
+1057C..1058A ; ID_Continue
+1058C..10592 ; ID_Continue
+10594..10595 ; ID_Continue
+10597..105A1 ; ID_Continue
+105A3..105B1 ; ID_Continue
+105B3..105B9 ; ID_Continue
+105BB..105BC ; ID_Continue
10600..10736 ; ID_Continue
10740..10755 ; ID_Continue
10760..10767 ; ID_Continue
+10780..10785 ; ID_Continue
+10787..107B0 ; ID_Continue
+107B2..107BA ; ID_Continue
10800..10805 ; ID_Continue
10808 ; ID_Continue
1080A..10835 ; ID_Continue
@@ -7547,6 +7723,8 @@ FFDA..FFDC ; ID_Continue
10F27 ; ID_Continue
10F30..10F45 ; ID_Continue
10F46..10F50 ; ID_Continue
+10F70..10F81 ; ID_Continue
+10F82..10F85 ; ID_Continue
10FB0..10FC4 ; ID_Continue
10FE0..10FF6 ; ID_Continue
11000 ; ID_Continue
@@ -7555,6 +7733,10 @@ FFDA..FFDC ; ID_Continue
11003..11037 ; ID_Continue
11038..11046 ; ID_Continue
11066..1106F ; ID_Continue
+11070 ; ID_Continue
+11071..11072 ; ID_Continue
+11073..11074 ; ID_Continue
+11075 ; ID_Continue
1107F..11081 ; ID_Continue
11082 ; ID_Continue
11083..110AF ; ID_Continue
@@ -7562,6 +7744,7 @@ FFDA..FFDC ; ID_Continue
110B3..110B6 ; ID_Continue
110B7..110B8 ; ID_Continue
110B9..110BA ; ID_Continue
+110C2 ; ID_Continue
110D0..110E8 ; ID_Continue
110F0..110F9 ; ID_Continue
11100..11102 ; ID_Continue
@@ -7687,6 +7870,7 @@ FFDA..FFDC ; ID_Continue
11726 ; ID_Continue
11727..1172B ; ID_Continue
11730..11739 ; ID_Continue
+11740..11746 ; ID_Continue
11800..1182B ; ID_Continue
1182C..1182E ; ID_Continue
1182F..11837 ; ID_Continue
@@ -7737,7 +7921,7 @@ FFDA..FFDC ; ID_Continue
11A97 ; ID_Continue
11A98..11A99 ; ID_Continue
11A9D ; ID_Continue
-11AC0..11AF8 ; ID_Continue
+11AB0..11AF8 ; ID_Continue
11C00..11C08 ; ID_Continue
11C0A..11C2E ; ID_Continue
11C2F ; ID_Continue
@@ -7783,11 +7967,14 @@ FFDA..FFDC ; ID_Continue
12000..12399 ; ID_Continue
12400..1246E ; ID_Continue
12480..12543 ; ID_Continue
+12F90..12FF0 ; ID_Continue
13000..1342E ; ID_Continue
14400..14646 ; ID_Continue
16800..16A38 ; ID_Continue
16A40..16A5E ; ID_Continue
16A60..16A69 ; ID_Continue
+16A70..16ABE ; ID_Continue
+16AC0..16AC9 ; ID_Continue
16AD0..16AED ; ID_Continue
16AF0..16AF4 ; ID_Continue
16B00..16B2F ; ID_Continue
@@ -7810,7 +7997,10 @@ FFDA..FFDC ; ID_Continue
17000..187F7 ; ID_Continue
18800..18CD5 ; ID_Continue
18D00..18D08 ; ID_Continue
-1B000..1B11E ; ID_Continue
+1AFF0..1AFF3 ; ID_Continue
+1AFF5..1AFFB ; ID_Continue
+1AFFD..1AFFE ; ID_Continue
+1B000..1B122 ; ID_Continue
1B150..1B152 ; ID_Continue
1B164..1B167 ; ID_Continue
1B170..1B2FB ; ID_Continue
@@ -7819,6 +8009,8 @@ FFDA..FFDC ; ID_Continue
1BC80..1BC88 ; ID_Continue
1BC90..1BC99 ; ID_Continue
1BC9D..1BC9E ; ID_Continue
+1CF00..1CF2D ; ID_Continue
+1CF30..1CF46 ; ID_Continue
1D165..1D166 ; ID_Continue
1D167..1D169 ; ID_Continue
1D16D..1D172 ; ID_Continue
@@ -7863,6 +8055,9 @@ FFDA..FFDC ; ID_Continue
1DA84 ; ID_Continue
1DA9B..1DA9F ; ID_Continue
1DAA1..1DAAF ; ID_Continue
+1DF00..1DF09 ; ID_Continue
+1DF0A ; ID_Continue
+1DF0B..1DF1E ; ID_Continue
1E000..1E006 ; ID_Continue
1E008..1E018 ; ID_Continue
1E01B..1E021 ; ID_Continue
@@ -7873,9 +8068,15 @@ FFDA..FFDC ; ID_Continue
1E137..1E13D ; ID_Continue
1E140..1E149 ; ID_Continue
1E14E ; ID_Continue
+1E290..1E2AD ; ID_Continue
+1E2AE ; ID_Continue
1E2C0..1E2EB ; ID_Continue
1E2EC..1E2EF ; ID_Continue
1E2F0..1E2F9 ; ID_Continue
+1E7E0..1E7E6 ; ID_Continue
+1E7E8..1E7EB ; ID_Continue
+1E7ED..1E7EE ; ID_Continue
+1E7F0..1E7FE ; ID_Continue
1E800..1E8C4 ; ID_Continue
1E8D0..1E8D6 ; ID_Continue
1E900..1E943 ; ID_Continue
@@ -7916,8 +8117,8 @@ FFDA..FFDC ; ID_Continue
1EEA5..1EEA9 ; ID_Continue
1EEAB..1EEBB ; ID_Continue
1FBF0..1FBF9 ; ID_Continue
-20000..2A6DD ; ID_Continue
-2A700..2B734 ; ID_Continue
+20000..2A6DF ; ID_Continue
+2A700..2B738 ; ID_Continue
2B740..2B81D ; ID_Continue
2B820..2CEA1 ; ID_Continue
2CEB0..2EBE0 ; ID_Continue
@@ -7925,7 +8126,7 @@ FFDA..FFDC ; ID_Continue
30000..3134A ; ID_Continue
E0100..E01EF ; ID_Continue
-# Total code points: 134434
+# Total code points: 135072
# ================================================
@@ -7995,8 +8196,10 @@ E0100..E01EF ; ID_Continue
0828 ; XID_Start
0840..0858 ; XID_Start
0860..086A ; XID_Start
-08A0..08B4 ; XID_Start
-08B6..08C7 ; XID_Start
+0870..0887 ; XID_Start
+0889..088E ; XID_Start
+08A0..08C8 ; XID_Start
+08C9 ; XID_Start
0904..0939 ; XID_Start
093D ; XID_Start
0950 ; XID_Start
@@ -8062,6 +8265,7 @@ E0100..E01EF ; ID_Continue
0C2A..0C39 ; XID_Start
0C3D ; XID_Start
0C58..0C5A ; XID_Start
+0C5D ; XID_Start
0C60..0C61 ; XID_Start
0C80 ; XID_Start
0C85..0C8C ; XID_Start
@@ -8070,7 +8274,7 @@ E0100..E01EF ; ID_Continue
0CAA..0CB3 ; XID_Start
0CB5..0CB9 ; XID_Start
0CBD ; XID_Start
-0CDE ; XID_Start
+0CDD..0CDE ; XID_Start
0CE0..0CE1 ; XID_Start
0CF1..0CF2 ; XID_Start
0D04..0D0C ; XID_Start
@@ -8145,9 +8349,8 @@ E0100..E01EF ; ID_Continue
16A0..16EA ; XID_Start
16EE..16F0 ; XID_Start
16F1..16F8 ; XID_Start
-1700..170C ; XID_Start
-170E..1711 ; XID_Start
-1720..1731 ; XID_Start
+1700..1711 ; XID_Start
+171F..1731 ; XID_Start
1740..1751 ; XID_Start
1760..176C ; XID_Start
176E..1770 ; XID_Start
@@ -8171,7 +8374,7 @@ E0100..E01EF ; ID_Continue
1A20..1A54 ; XID_Start
1AA7 ; XID_Start
1B05..1B33 ; XID_Start
-1B45..1B4B ; XID_Start
+1B45..1B4C ; XID_Start
1B83..1BA0 ; XID_Start
1BAE..1BAF ; XID_Start
1BBA..1BE5 ; XID_Start
@@ -8234,9 +8437,7 @@ E0100..E01EF ; ID_Continue
2160..2182 ; XID_Start
2183..2184 ; XID_Start
2185..2188 ; XID_Start
-2C00..2C2E ; XID_Start
-2C30..2C5E ; XID_Start
-2C60..2C7B ; XID_Start
+2C00..2C7B ; XID_Start
2C7C..2C7D ; XID_Start
2C7E..2CE4 ; XID_Start
2CEB..2CEE ; XID_Start
@@ -8274,8 +8475,7 @@ E0100..E01EF ; ID_Continue
31A0..31BF ; XID_Start
31F0..31FF ; XID_Start
3400..4DBF ; XID_Start
-4E00..9FFC ; XID_Start
-A000..A014 ; XID_Start
+4E00..A014 ; XID_Start
A015 ; XID_Start
A016..A48C ; XID_Start
A4D0..A4F7 ; XID_Start
@@ -8298,8 +8498,11 @@ A771..A787 ; XID_Start
A788 ; XID_Start
A78B..A78E ; XID_Start
A78F ; XID_Start
-A790..A7BF ; XID_Start
-A7C2..A7CA ; XID_Start
+A790..A7CA ; XID_Start
+A7D0..A7D1 ; XID_Start
+A7D3 ; XID_Start
+A7D5..A7D9 ; XID_Start
+A7F2..A7F4 ; XID_Start
A7F5..A7F6 ; XID_Start
A7F7 ; XID_Start
A7F8..A7F9 ; XID_Start
@@ -8414,9 +8617,20 @@ FFDA..FFDC ; XID_Start
104D8..104FB ; XID_Start
10500..10527 ; XID_Start
10530..10563 ; XID_Start
+10570..1057A ; XID_Start
+1057C..1058A ; XID_Start
+1058C..10592 ; XID_Start
+10594..10595 ; XID_Start
+10597..105A1 ; XID_Start
+105A3..105B1 ; XID_Start
+105B3..105B9 ; XID_Start
+105BB..105BC ; XID_Start
10600..10736 ; XID_Start
10740..10755 ; XID_Start
10760..10767 ; XID_Start
+10780..10785 ; XID_Start
+10787..107B0 ; XID_Start
+107B2..107BA ; XID_Start
10800..10805 ; XID_Start
10808 ; XID_Start
1080A..10835 ; XID_Start
@@ -8452,9 +8666,12 @@ FFDA..FFDC ; XID_Start
10F00..10F1C ; XID_Start
10F27 ; XID_Start
10F30..10F45 ; XID_Start
+10F70..10F81 ; XID_Start
10FB0..10FC4 ; XID_Start
10FE0..10FF6 ; XID_Start
11003..11037 ; XID_Start
+11071..11072 ; XID_Start
+11075 ; XID_Start
11083..110AF ; XID_Start
110D0..110E8 ; XID_Start
11103..11126 ; XID_Start
@@ -8496,6 +8713,7 @@ FFDA..FFDC ; XID_Start
11680..116AA ; XID_Start
116B8 ; XID_Start
11700..1171A ; XID_Start
+11740..11746 ; XID_Start
11800..1182B ; XID_Start
118A0..118DF ; XID_Start
118FF..11906 ; XID_Start
@@ -8515,7 +8733,7 @@ FFDA..FFDC ; XID_Start
11A50 ; XID_Start
11A5C..11A89 ; XID_Start
11A9D ; XID_Start
-11AC0..11AF8 ; XID_Start
+11AB0..11AF8 ; XID_Start
11C00..11C08 ; XID_Start
11C0A..11C2E ; XID_Start
11C40 ; XID_Start
@@ -8533,10 +8751,12 @@ FFDA..FFDC ; XID_Start
12000..12399 ; XID_Start
12400..1246E ; XID_Start
12480..12543 ; XID_Start
+12F90..12FF0 ; XID_Start
13000..1342E ; XID_Start
14400..14646 ; XID_Start
16800..16A38 ; XID_Start
16A40..16A5E ; XID_Start
+16A70..16ABE ; XID_Start
16AD0..16AED ; XID_Start
16B00..16B2F ; XID_Start
16B40..16B43 ; XID_Start
@@ -8551,7 +8771,10 @@ FFDA..FFDC ; XID_Start
17000..187F7 ; XID_Start
18800..18CD5 ; XID_Start
18D00..18D08 ; XID_Start
-1B000..1B11E ; XID_Start
+1AFF0..1AFF3 ; XID_Start
+1AFF5..1AFFB ; XID_Start
+1AFFD..1AFFE ; XID_Start
+1B000..1B122 ; XID_Start
1B150..1B152 ; XID_Start
1B164..1B167 ; XID_Start
1B170..1B2FB ; XID_Start
@@ -8589,10 +8812,18 @@ FFDA..FFDC ; XID_Start
1D78A..1D7A8 ; XID_Start
1D7AA..1D7C2 ; XID_Start
1D7C4..1D7CB ; XID_Start
+1DF00..1DF09 ; XID_Start
+1DF0A ; XID_Start
+1DF0B..1DF1E ; XID_Start
1E100..1E12C ; XID_Start
1E137..1E13D ; XID_Start
1E14E ; XID_Start
+1E290..1E2AD ; XID_Start
1E2C0..1E2EB ; XID_Start
+1E7E0..1E7E6 ; XID_Start
+1E7E8..1E7EB ; XID_Start
+1E7ED..1E7EE ; XID_Start
+1E7F0..1E7FE ; XID_Start
1E800..1E8C4 ; XID_Start
1E900..1E943 ; XID_Start
1E94B ; XID_Start
@@ -8629,15 +8860,15 @@ FFDA..FFDC ; XID_Start
1EEA1..1EEA3 ; XID_Start
1EEA5..1EEA9 ; XID_Start
1EEAB..1EEBB ; XID_Start
-20000..2A6DD ; XID_Start
-2A700..2B734 ; XID_Start
+20000..2A6DF ; XID_Start
+2A700..2B738 ; XID_Start
2B740..2B81D ; XID_Start
2B820..2CEA1 ; XID_Start
2CEB0..2EBE0 ; XID_Start
2F800..2FA1D ; XID_Start
30000..3134A ; XID_Start
-# Total code points: 131459
+# Total code points: 131974
# ================================================
@@ -8738,9 +8969,12 @@ FFDA..FFDC ; XID_Start
0840..0858 ; XID_Continue
0859..085B ; XID_Continue
0860..086A ; XID_Continue
-08A0..08B4 ; XID_Continue
-08B6..08C7 ; XID_Continue
-08D3..08E1 ; XID_Continue
+0870..0887 ; XID_Continue
+0889..088E ; XID_Continue
+0898..089F ; XID_Continue
+08A0..08C8 ; XID_Continue
+08C9 ; XID_Continue
+08CA..08E1 ; XID_Continue
08E3..0902 ; XID_Continue
0903 ; XID_Continue
0904..0939 ; XID_Continue
@@ -8878,6 +9112,7 @@ FFDA..FFDC ; XID_Start
0C0E..0C10 ; XID_Continue
0C12..0C28 ; XID_Continue
0C2A..0C39 ; XID_Continue
+0C3C ; XID_Continue
0C3D ; XID_Continue
0C3E..0C40 ; XID_Continue
0C41..0C44 ; XID_Continue
@@ -8885,6 +9120,7 @@ FFDA..FFDC ; XID_Start
0C4A..0C4D ; XID_Continue
0C55..0C56 ; XID_Continue
0C58..0C5A ; XID_Continue
+0C5D ; XID_Continue
0C60..0C61 ; XID_Continue
0C62..0C63 ; XID_Continue
0C66..0C6F ; XID_Continue
@@ -8906,7 +9142,7 @@ FFDA..FFDC ; XID_Start
0CCA..0CCB ; XID_Continue
0CCC..0CCD ; XID_Continue
0CD5..0CD6 ; XID_Continue
-0CDE ; XID_Continue
+0CDD..0CDE ; XID_Continue
0CE0..0CE1 ; XID_Continue
0CE2..0CE3 ; XID_Continue
0CE6..0CEF ; XID_Continue
@@ -9050,11 +9286,12 @@ FFDA..FFDC ; XID_Start
16A0..16EA ; XID_Continue
16EE..16F0 ; XID_Continue
16F1..16F8 ; XID_Continue
-1700..170C ; XID_Continue
-170E..1711 ; XID_Continue
+1700..1711 ; XID_Continue
1712..1714 ; XID_Continue
-1720..1731 ; XID_Continue
-1732..1734 ; XID_Continue
+1715 ; XID_Continue
+171F..1731 ; XID_Continue
+1732..1733 ; XID_Continue
+1734 ; XID_Continue
1740..1751 ; XID_Continue
1752..1753 ; XID_Continue
1760..176C ; XID_Continue
@@ -9073,6 +9310,7 @@ FFDA..FFDC ; XID_Start
17DD ; XID_Continue
17E0..17E9 ; XID_Continue
180B..180D ; XID_Continue
+180F ; XID_Continue
1810..1819 ; XID_Continue
1820..1842 ; XID_Continue
1843 ; XID_Continue
@@ -9120,7 +9358,7 @@ FFDA..FFDC ; XID_Start
1A90..1A99 ; XID_Continue
1AA7 ; XID_Continue
1AB0..1ABD ; XID_Continue
-1ABF..1AC0 ; XID_Continue
+1ABF..1ACE ; XID_Continue
1B00..1B03 ; XID_Continue
1B04 ; XID_Continue
1B05..1B33 ; XID_Continue
@@ -9132,7 +9370,7 @@ FFDA..FFDC ; XID_Start
1B3D..1B41 ; XID_Continue
1B42 ; XID_Continue
1B43..1B44 ; XID_Continue
-1B45..1B4B ; XID_Continue
+1B45..1B4C ; XID_Continue
1B50..1B59 ; XID_Continue
1B6B..1B73 ; XID_Continue
1B80..1B81 ; XID_Continue
@@ -9186,8 +9424,7 @@ FFDA..FFDC ; XID_Start
1D78 ; XID_Continue
1D79..1D9A ; XID_Continue
1D9B..1DBF ; XID_Continue
-1DC0..1DF9 ; XID_Continue
-1DFB..1DFF ; XID_Continue
+1DC0..1DFF ; XID_Continue
1E00..1F15 ; XID_Continue
1F18..1F1D ; XID_Continue
1F20..1F45 ; XID_Continue
@@ -9235,9 +9472,7 @@ FFDA..FFDC ; XID_Start
2160..2182 ; XID_Continue
2183..2184 ; XID_Continue
2185..2188 ; XID_Continue
-2C00..2C2E ; XID_Continue
-2C30..2C5E ; XID_Continue
-2C60..2C7B ; XID_Continue
+2C00..2C7B ; XID_Continue
2C7C..2C7D ; XID_Continue
2C7E..2CE4 ; XID_Continue
2CEB..2CEE ; XID_Continue
@@ -9281,8 +9516,7 @@ FFDA..FFDC ; XID_Start
31A0..31BF ; XID_Continue
31F0..31FF ; XID_Continue
3400..4DBF ; XID_Continue
-4E00..9FFC ; XID_Continue
-A000..A014 ; XID_Continue
+4E00..A014 ; XID_Continue
A015 ; XID_Continue
A016..A48C ; XID_Continue
A4D0..A4F7 ; XID_Continue
@@ -9310,8 +9544,11 @@ A771..A787 ; XID_Continue
A788 ; XID_Continue
A78B..A78E ; XID_Continue
A78F ; XID_Continue
-A790..A7BF ; XID_Continue
-A7C2..A7CA ; XID_Continue
+A790..A7CA ; XID_Continue
+A7D0..A7D1 ; XID_Continue
+A7D3 ; XID_Continue
+A7D5..A7D9 ; XID_Continue
+A7F2..A7F4 ; XID_Continue
A7F5..A7F6 ; XID_Continue
A7F7 ; XID_Continue
A7F8..A7F9 ; XID_Continue
@@ -9496,9 +9733,20 @@ FFDA..FFDC ; XID_Continue
104D8..104FB ; XID_Continue
10500..10527 ; XID_Continue
10530..10563 ; XID_Continue
+10570..1057A ; XID_Continue
+1057C..1058A ; XID_Continue
+1058C..10592 ; XID_Continue
+10594..10595 ; XID_Continue
+10597..105A1 ; XID_Continue
+105A3..105B1 ; XID_Continue
+105B3..105B9 ; XID_Continue
+105BB..105BC ; XID_Continue
10600..10736 ; XID_Continue
10740..10755 ; XID_Continue
10760..10767 ; XID_Continue
+10780..10785 ; XID_Continue
+10787..107B0 ; XID_Continue
+107B2..107BA ; XID_Continue
10800..10805 ; XID_Continue
10808 ; XID_Continue
1080A..10835 ; XID_Continue
@@ -9544,6 +9792,8 @@ FFDA..FFDC ; XID_Continue
10F27 ; XID_Continue
10F30..10F45 ; XID_Continue
10F46..10F50 ; XID_Continue
+10F70..10F81 ; XID_Continue
+10F82..10F85 ; XID_Continue
10FB0..10FC4 ; XID_Continue
10FE0..10FF6 ; XID_Continue
11000 ; XID_Continue
@@ -9552,6 +9802,10 @@ FFDA..FFDC ; XID_Continue
11003..11037 ; XID_Continue
11038..11046 ; XID_Continue
11066..1106F ; XID_Continue
+11070 ; XID_Continue
+11071..11072 ; XID_Continue
+11073..11074 ; XID_Continue
+11075 ; XID_Continue
1107F..11081 ; XID_Continue
11082 ; XID_Continue
11083..110AF ; XID_Continue
@@ -9559,6 +9813,7 @@ FFDA..FFDC ; XID_Continue
110B3..110B6 ; XID_Continue
110B7..110B8 ; XID_Continue
110B9..110BA ; XID_Continue
+110C2 ; XID_Continue
110D0..110E8 ; XID_Continue
110F0..110F9 ; XID_Continue
11100..11102 ; XID_Continue
@@ -9684,6 +9939,7 @@ FFDA..FFDC ; XID_Continue
11726 ; XID_Continue
11727..1172B ; XID_Continue
11730..11739 ; XID_Continue
+11740..11746 ; XID_Continue
11800..1182B ; XID_Continue
1182C..1182E ; XID_Continue
1182F..11837 ; XID_Continue
@@ -9734,7 +9990,7 @@ FFDA..FFDC ; XID_Continue
11A97 ; XID_Continue
11A98..11A99 ; XID_Continue
11A9D ; XID_Continue
-11AC0..11AF8 ; XID_Continue
+11AB0..11AF8 ; XID_Continue
11C00..11C08 ; XID_Continue
11C0A..11C2E ; XID_Continue
11C2F ; XID_Continue
@@ -9780,11 +10036,14 @@ FFDA..FFDC ; XID_Continue
12000..12399 ; XID_Continue
12400..1246E ; XID_Continue
12480..12543 ; XID_Continue
+12F90..12FF0 ; XID_Continue
13000..1342E ; XID_Continue
14400..14646 ; XID_Continue
16800..16A38 ; XID_Continue
16A40..16A5E ; XID_Continue
16A60..16A69 ; XID_Continue
+16A70..16ABE ; XID_Continue
+16AC0..16AC9 ; XID_Continue
16AD0..16AED ; XID_Continue
16AF0..16AF4 ; XID_Continue
16B00..16B2F ; XID_Continue
@@ -9807,7 +10066,10 @@ FFDA..FFDC ; XID_Continue
17000..187F7 ; XID_Continue
18800..18CD5 ; XID_Continue
18D00..18D08 ; XID_Continue
-1B000..1B11E ; XID_Continue
+1AFF0..1AFF3 ; XID_Continue
+1AFF5..1AFFB ; XID_Continue
+1AFFD..1AFFE ; XID_Continue
+1B000..1B122 ; XID_Continue
1B150..1B152 ; XID_Continue
1B164..1B167 ; XID_Continue
1B170..1B2FB ; XID_Continue
@@ -9816,6 +10078,8 @@ FFDA..FFDC ; XID_Continue
1BC80..1BC88 ; XID_Continue
1BC90..1BC99 ; XID_Continue
1BC9D..1BC9E ; XID_Continue
+1CF00..1CF2D ; XID_Continue
+1CF30..1CF46 ; XID_Continue
1D165..1D166 ; XID_Continue
1D167..1D169 ; XID_Continue
1D16D..1D172 ; XID_Continue
@@ -9860,6 +10124,9 @@ FFDA..FFDC ; XID_Continue
1DA84 ; XID_Continue
1DA9B..1DA9F ; XID_Continue
1DAA1..1DAAF ; XID_Continue
+1DF00..1DF09 ; XID_Continue
+1DF0A ; XID_Continue
+1DF0B..1DF1E ; XID_Continue
1E000..1E006 ; XID_Continue
1E008..1E018 ; XID_Continue
1E01B..1E021 ; XID_Continue
@@ -9870,9 +10137,15 @@ FFDA..FFDC ; XID_Continue
1E137..1E13D ; XID_Continue
1E140..1E149 ; XID_Continue
1E14E ; XID_Continue
+1E290..1E2AD ; XID_Continue
+1E2AE ; XID_Continue
1E2C0..1E2EB ; XID_Continue
1E2EC..1E2EF ; XID_Continue
1E2F0..1E2F9 ; XID_Continue
+1E7E0..1E7E6 ; XID_Continue
+1E7E8..1E7EB ; XID_Continue
+1E7ED..1E7EE ; XID_Continue
+1E7F0..1E7FE ; XID_Continue
1E800..1E8C4 ; XID_Continue
1E8D0..1E8D6 ; XID_Continue
1E900..1E943 ; XID_Continue
@@ -9913,8 +10186,8 @@ FFDA..FFDC ; XID_Continue
1EEA5..1EEA9 ; XID_Continue
1EEAB..1EEBB ; XID_Continue
1FBF0..1FBF9 ; XID_Continue
-20000..2A6DD ; XID_Continue
-2A700..2B734 ; XID_Continue
+20000..2A6DF ; XID_Continue
+2A700..2B738 ; XID_Continue
2B740..2B81D ; XID_Continue
2B820..2CEA1 ; XID_Continue
2CEB0..2EBE0 ; XID_Continue
@@ -9922,7 +10195,7 @@ FFDA..FFDC ; XID_Continue
30000..3134A ; XID_Continue
E0100..E01EF ; XID_Continue
-# Total code points: 134415
+# Total code points: 135053
# ================================================
@@ -9943,6 +10216,7 @@ E0100..E01EF ; XID_Continue
17B4..17B5 ; Default_Ignorable_Code_Point
180B..180D ; Default_Ignorable_Code_Point
180E ; Default_Ignorable_Code_Point
+180F ; Default_Ignorable_Code_Point
200B..200F ; Default_Ignorable_Code_Point
202A..202E ; Default_Ignorable_Code_Point
2060..2064 ; Default_Ignorable_Code_Point
@@ -9963,7 +10237,7 @@ E0080..E00FF ; Default_Ignorable_Code_Point
E0100..E01EF ; Default_Ignorable_Code_Point
E01F0..E0FFF ; Default_Ignorable_Code_Point
-# Total code points: 4173
+# Total code points: 4174
# ================================================
@@ -9997,7 +10271,8 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
0825..0827 ; Grapheme_Extend
0829..082D ; Grapheme_Extend
0859..085B ; Grapheme_Extend
-08D3..08E1 ; Grapheme_Extend
+0898..089F ; Grapheme_Extend
+08CA..08E1 ; Grapheme_Extend
08E3..0902 ; Grapheme_Extend
093A ; Grapheme_Extend
093C ; Grapheme_Extend
@@ -10044,6 +10319,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
0BD7 ; Grapheme_Extend
0C00 ; Grapheme_Extend
0C04 ; Grapheme_Extend
+0C3C ; Grapheme_Extend
0C3E..0C40 ; Grapheme_Extend
0C46..0C48 ; Grapheme_Extend
0C4A..0C4D ; Grapheme_Extend
@@ -10099,7 +10375,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
109D ; Grapheme_Extend
135D..135F ; Grapheme_Extend
1712..1714 ; Grapheme_Extend
-1732..1734 ; Grapheme_Extend
+1732..1733 ; Grapheme_Extend
1752..1753 ; Grapheme_Extend
1772..1773 ; Grapheme_Extend
17B4..17B5 ; Grapheme_Extend
@@ -10108,6 +10384,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
17C9..17D3 ; Grapheme_Extend
17DD ; Grapheme_Extend
180B..180D ; Grapheme_Extend
+180F ; Grapheme_Extend
1885..1886 ; Grapheme_Extend
18A9 ; Grapheme_Extend
1920..1922 ; Grapheme_Extend
@@ -10125,7 +10402,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
1A7F ; Grapheme_Extend
1AB0..1ABD ; Grapheme_Extend
1ABE ; Grapheme_Extend
-1ABF..1AC0 ; Grapheme_Extend
+1ABF..1ACE ; Grapheme_Extend
1B00..1B03 ; Grapheme_Extend
1B34 ; Grapheme_Extend
1B35 ; Grapheme_Extend
@@ -10149,8 +10426,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point
1CED ; Grapheme_Extend
1CF4 ; Grapheme_Extend
1CF8..1CF9 ; Grapheme_Extend
-1DC0..1DF9 ; Grapheme_Extend
-1DFB..1DFF ; Grapheme_Extend
+1DC0..1DFF ; Grapheme_Extend
200C ; Grapheme_Extend
20D0..20DC ; Grapheme_Extend
20DD..20E0 ; Grapheme_Extend
@@ -10215,11 +10491,15 @@ FF9E..FF9F ; Grapheme_Extend
10D24..10D27 ; Grapheme_Extend
10EAB..10EAC ; Grapheme_Extend
10F46..10F50 ; Grapheme_Extend
+10F82..10F85 ; Grapheme_Extend
11001 ; Grapheme_Extend
11038..11046 ; Grapheme_Extend
+11070 ; Grapheme_Extend
+11073..11074 ; Grapheme_Extend
1107F..11081 ; Grapheme_Extend
110B3..110B6 ; Grapheme_Extend
110B9..110BA ; Grapheme_Extend
+110C2 ; Grapheme_Extend
11100..11102 ; Grapheme_Extend
11127..1112B ; Grapheme_Extend
1112D..11134 ; Grapheme_Extend
@@ -10305,6 +10585,8 @@ FF9E..FF9F ; Grapheme_Extend
16F8F..16F92 ; Grapheme_Extend
16FE4 ; Grapheme_Extend
1BC9D..1BC9E ; Grapheme_Extend
+1CF00..1CF2D ; Grapheme_Extend
+1CF30..1CF46 ; Grapheme_Extend
1D165 ; Grapheme_Extend
1D167..1D169 ; Grapheme_Extend
1D16E..1D172 ; Grapheme_Extend
@@ -10324,13 +10606,14 @@ FF9E..FF9F ; Grapheme_Extend
1E023..1E024 ; Grapheme_Extend
1E026..1E02A ; Grapheme_Extend
1E130..1E136 ; Grapheme_Extend
+1E2AE ; Grapheme_Extend
1E2EC..1E2EF ; Grapheme_Extend
1E8D0..1E8D6 ; Grapheme_Extend
1E944..1E94A ; Grapheme_Extend
E0020..E007F ; Grapheme_Extend
E0100..E01EF ; Grapheme_Extend
-# Total code points: 1979
+# Total code points: 2090
# ================================================
@@ -10451,7 +10734,7 @@ E0100..E01EF ; Grapheme_Extend
060C..060D ; Grapheme_Base
060E..060F ; Grapheme_Base
061B ; Grapheme_Base
-061E..061F ; Grapheme_Base
+061D..061F ; Grapheme_Base
0620..063F ; Grapheme_Base
0640 ; Grapheme_Base
0641..064A ; Grapheme_Base
@@ -10489,8 +10772,11 @@ E0100..E01EF ; Grapheme_Extend
0840..0858 ; Grapheme_Base
085E ; Grapheme_Base
0860..086A ; Grapheme_Base
-08A0..08B4 ; Grapheme_Base
-08B6..08C7 ; Grapheme_Base
+0870..0887 ; Grapheme_Base
+0888 ; Grapheme_Base
+0889..088E ; Grapheme_Base
+08A0..08C8 ; Grapheme_Base
+08C9 ; Grapheme_Base
0903 ; Grapheme_Base
0904..0939 ; Grapheme_Base
093B ; Grapheme_Base
@@ -10603,6 +10889,7 @@ E0100..E01EF ; Grapheme_Extend
0C3D ; Grapheme_Base
0C41..0C44 ; Grapheme_Base
0C58..0C5A ; Grapheme_Base
+0C5D ; Grapheme_Base
0C60..0C61 ; Grapheme_Base
0C66..0C6F ; Grapheme_Base
0C77 ; Grapheme_Base
@@ -10622,7 +10909,7 @@ E0100..E01EF ; Grapheme_Extend
0CC3..0CC4 ; Grapheme_Base
0CC7..0CC8 ; Grapheme_Base
0CCA..0CCB ; Grapheme_Base
-0CDE ; Grapheme_Base
+0CDD..0CDE ; Grapheme_Base
0CE0..0CE1 ; Grapheme_Base
0CE6..0CEF ; Grapheme_Base
0CF1..0CF2 ; Grapheme_Base
@@ -10768,9 +11055,10 @@ E0100..E01EF ; Grapheme_Extend
16EB..16ED ; Grapheme_Base
16EE..16F0 ; Grapheme_Base
16F1..16F8 ; Grapheme_Base
-1700..170C ; Grapheme_Base
-170E..1711 ; Grapheme_Base
-1720..1731 ; Grapheme_Base
+1700..1711 ; Grapheme_Base
+1715 ; Grapheme_Base
+171F..1731 ; Grapheme_Base
+1734 ; Grapheme_Base
1735..1736 ; Grapheme_Base
1740..1751 ; Grapheme_Base
1760..176C ; Grapheme_Base
@@ -10831,11 +11119,12 @@ E0100..E01EF ; Grapheme_Extend
1B3B ; Grapheme_Base
1B3D..1B41 ; Grapheme_Base
1B43..1B44 ; Grapheme_Base
-1B45..1B4B ; Grapheme_Base
+1B45..1B4C ; Grapheme_Base
1B50..1B59 ; Grapheme_Base
1B5A..1B60 ; Grapheme_Base
1B61..1B6A ; Grapheme_Base
1B74..1B7C ; Grapheme_Base
+1B7D..1B7E ; Grapheme_Base
1B82 ; Grapheme_Base
1B83..1BA0 ; Grapheme_Base
1BA1 ; Grapheme_Base
@@ -10940,7 +11229,7 @@ E0100..E01EF ; Grapheme_Extend
208D ; Grapheme_Base
208E ; Grapheme_Base
2090..209C ; Grapheme_Base
-20A0..20BF ; Grapheme_Base
+20A0..20C0 ; Grapheme_Base
2100..2101 ; Grapheme_Base
2102 ; Grapheme_Base
2103..2106 ; Grapheme_Base
@@ -11099,9 +11388,7 @@ E0100..E01EF ; Grapheme_Extend
2B4D..2B73 ; Grapheme_Base
2B76..2B95 ; Grapheme_Base
2B97..2BFF ; Grapheme_Base
-2C00..2C2E ; Grapheme_Base
-2C30..2C5E ; Grapheme_Base
-2C60..2C7B ; Grapheme_Base
+2C00..2C7B ; Grapheme_Base
2C7C..2C7D ; Grapheme_Base
2C7E..2CE4 ; Grapheme_Base
2CE5..2CEA ; Grapheme_Base
@@ -11164,7 +11451,16 @@ E0100..E01EF ; Grapheme_Extend
2E42 ; Grapheme_Base
2E43..2E4F ; Grapheme_Base
2E50..2E51 ; Grapheme_Base
-2E52 ; Grapheme_Base
+2E52..2E54 ; Grapheme_Base
+2E55 ; Grapheme_Base
+2E56 ; Grapheme_Base
+2E57 ; Grapheme_Base
+2E58 ; Grapheme_Base
+2E59 ; Grapheme_Base
+2E5A ; Grapheme_Base
+2E5B ; Grapheme_Base
+2E5C ; Grapheme_Base
+2E5D ; Grapheme_Base
2E80..2E99 ; Grapheme_Base
2E9B..2EF3 ; Grapheme_Base
2F00..2FD5 ; Grapheme_Base
@@ -11237,8 +11533,7 @@ E0100..E01EF ; Grapheme_Extend
32C0..33FF ; Grapheme_Base
3400..4DBF ; Grapheme_Base
4DC0..4DFF ; Grapheme_Base
-4E00..9FFC ; Grapheme_Base
-A000..A014 ; Grapheme_Base
+4E00..A014 ; Grapheme_Base
A015 ; Grapheme_Base
A016..A48C ; Grapheme_Base
A490..A4C6 ; Grapheme_Base
@@ -11271,8 +11566,11 @@ A788 ; Grapheme_Base
A789..A78A ; Grapheme_Base
A78B..A78E ; Grapheme_Base
A78F ; Grapheme_Base
-A790..A7BF ; Grapheme_Base
-A7C2..A7CA ; Grapheme_Base
+A790..A7CA ; Grapheme_Base
+A7D0..A7D1 ; Grapheme_Base
+A7D3 ; Grapheme_Base
+A7D5..A7D9 ; Grapheme_Base
+A7F2..A7F4 ; Grapheme_Base
A7F5..A7F6 ; Grapheme_Base
A7F7 ; Grapheme_Base
A7F8..A7F9 ; Grapheme_Base
@@ -11387,15 +11685,17 @@ FB3E ; Grapheme_Base
FB40..FB41 ; Grapheme_Base
FB43..FB44 ; Grapheme_Base
FB46..FBB1 ; Grapheme_Base
-FBB2..FBC1 ; Grapheme_Base
+FBB2..FBC2 ; Grapheme_Base
FBD3..FD3D ; Grapheme_Base
FD3E ; Grapheme_Base
FD3F ; Grapheme_Base
+FD40..FD4F ; Grapheme_Base
FD50..FD8F ; Grapheme_Base
FD92..FDC7 ; Grapheme_Base
+FDCF ; Grapheme_Base
FDF0..FDFB ; Grapheme_Base
FDFC ; Grapheme_Base
-FDFD ; Grapheme_Base
+FDFD..FDFF ; Grapheme_Base
FE10..FE16 ; Grapheme_Base
FE17 ; Grapheme_Base
FE18 ; Grapheme_Base
@@ -11533,9 +11833,20 @@ FFFC..FFFD ; Grapheme_Base
10500..10527 ; Grapheme_Base
10530..10563 ; Grapheme_Base
1056F ; Grapheme_Base
+10570..1057A ; Grapheme_Base
+1057C..1058A ; Grapheme_Base
+1058C..10592 ; Grapheme_Base
+10594..10595 ; Grapheme_Base
+10597..105A1 ; Grapheme_Base
+105A3..105B1 ; Grapheme_Base
+105B3..105B9 ; Grapheme_Base
+105BB..105BC ; Grapheme_Base
10600..10736 ; Grapheme_Base
10740..10755 ; Grapheme_Base
10760..10767 ; Grapheme_Base
+10780..10785 ; Grapheme_Base
+10787..107B0 ; Grapheme_Base
+107B2..107BA ; Grapheme_Base
10800..10805 ; Grapheme_Base
10808 ; Grapheme_Base
1080A..10835 ; Grapheme_Base
@@ -11603,6 +11914,8 @@ FFFC..FFFD ; Grapheme_Base
10F30..10F45 ; Grapheme_Base
10F51..10F54 ; Grapheme_Base
10F55..10F59 ; Grapheme_Base
+10F70..10F81 ; Grapheme_Base
+10F86..10F89 ; Grapheme_Base
10FB0..10FC4 ; Grapheme_Base
10FC5..10FCB ; Grapheme_Base
10FE0..10FF6 ; Grapheme_Base
@@ -11612,6 +11925,8 @@ FFFC..FFFD ; Grapheme_Base
11047..1104D ; Grapheme_Base
11052..11065 ; Grapheme_Base
11066..1106F ; Grapheme_Base
+11071..11072 ; Grapheme_Base
+11075 ; Grapheme_Base
11082 ; Grapheme_Base
11083..110AF ; Grapheme_Base
110B0..110B2 ; Grapheme_Base
@@ -11713,6 +12028,7 @@ FFFC..FFFD ; Grapheme_Base
116AE..116AF ; Grapheme_Base
116B6 ; Grapheme_Base
116B8 ; Grapheme_Base
+116B9 ; Grapheme_Base
116C0..116C9 ; Grapheme_Base
11700..1171A ; Grapheme_Base
11720..11721 ; Grapheme_Base
@@ -11721,6 +12037,7 @@ FFFC..FFFD ; Grapheme_Base
1173A..1173B ; Grapheme_Base
1173C..1173E ; Grapheme_Base
1173F ; Grapheme_Base
+11740..11746 ; Grapheme_Base
11800..1182B ; Grapheme_Base
1182C..1182E ; Grapheme_Base
11838 ; Grapheme_Base
@@ -11762,7 +12079,7 @@ FFFC..FFFD ; Grapheme_Base
11A9A..11A9C ; Grapheme_Base
11A9D ; Grapheme_Base
11A9E..11AA2 ; Grapheme_Base
-11AC0..11AF8 ; Grapheme_Base
+11AB0..11AF8 ; Grapheme_Base
11C00..11C08 ; Grapheme_Base
11C0A..11C2E ; Grapheme_Base
11C2F ; Grapheme_Base
@@ -11802,12 +12119,16 @@ FFFC..FFFD ; Grapheme_Base
12400..1246E ; Grapheme_Base
12470..12474 ; Grapheme_Base
12480..12543 ; Grapheme_Base
+12F90..12FF0 ; Grapheme_Base
+12FF1..12FF2 ; Grapheme_Base
13000..1342E ; Grapheme_Base
14400..14646 ; Grapheme_Base
16800..16A38 ; Grapheme_Base
16A40..16A5E ; Grapheme_Base
16A60..16A69 ; Grapheme_Base
16A6E..16A6F ; Grapheme_Base
+16A70..16ABE ; Grapheme_Base
+16AC0..16AC9 ; Grapheme_Base
16AD0..16AED ; Grapheme_Base
16AF5 ; Grapheme_Base
16B00..16B2F ; Grapheme_Base
@@ -11834,7 +12155,10 @@ FFFC..FFFD ; Grapheme_Base
17000..187F7 ; Grapheme_Base
18800..18CD5 ; Grapheme_Base
18D00..18D08 ; Grapheme_Base
-1B000..1B11E ; Grapheme_Base
+1AFF0..1AFF3 ; Grapheme_Base
+1AFF5..1AFFB ; Grapheme_Base
+1AFFD..1AFFE ; Grapheme_Base
+1B000..1B122 ; Grapheme_Base
1B150..1B152 ; Grapheme_Base
1B164..1B167 ; Grapheme_Base
1B170..1B2FB ; Grapheme_Base
@@ -11844,6 +12168,7 @@ FFFC..FFFD ; Grapheme_Base
1BC90..1BC99 ; Grapheme_Base
1BC9C ; Grapheme_Base
1BC9F ; Grapheme_Base
+1CF50..1CFC3 ; Grapheme_Base
1D000..1D0F5 ; Grapheme_Base
1D100..1D126 ; Grapheme_Base
1D129..1D164 ; Grapheme_Base
@@ -11852,7 +12177,7 @@ FFFC..FFFD ; Grapheme_Base
1D16D ; Grapheme_Base
1D183..1D184 ; Grapheme_Base
1D18C..1D1A9 ; Grapheme_Base
-1D1AE..1D1E8 ; Grapheme_Base
+1D1AE..1D1EA ; Grapheme_Base
1D200..1D241 ; Grapheme_Base
1D245 ; Grapheme_Base
1D2E0..1D2F3 ; Grapheme_Base
@@ -11905,14 +12230,22 @@ FFFC..FFFD ; Grapheme_Base
1DA76..1DA83 ; Grapheme_Base
1DA85..1DA86 ; Grapheme_Base
1DA87..1DA8B ; Grapheme_Base
+1DF00..1DF09 ; Grapheme_Base
+1DF0A ; Grapheme_Base
+1DF0B..1DF1E ; Grapheme_Base
1E100..1E12C ; Grapheme_Base
1E137..1E13D ; Grapheme_Base
1E140..1E149 ; Grapheme_Base
1E14E ; Grapheme_Base
1E14F ; Grapheme_Base
+1E290..1E2AD ; Grapheme_Base
1E2C0..1E2EB ; Grapheme_Base
1E2F0..1E2F9 ; Grapheme_Base
1E2FF ; Grapheme_Base
+1E7E0..1E7E6 ; Grapheme_Base
+1E7E8..1E7EB ; Grapheme_Base
+1E7ED..1E7EE ; Grapheme_Base
+1E7F0..1E7FE ; Grapheme_Base
1E800..1E8C4 ; Grapheme_Base
1E8C7..1E8CF ; Grapheme_Base
1E900..1E943 ; Grapheme_Base
@@ -11977,40 +12310,41 @@ FFFC..FFFD ; Grapheme_Base
1F300..1F3FA ; Grapheme_Base
1F3FB..1F3FF ; Grapheme_Base
1F400..1F6D7 ; Grapheme_Base
-1F6E0..1F6EC ; Grapheme_Base
+1F6DD..1F6EC ; Grapheme_Base
1F6F0..1F6FC ; Grapheme_Base
1F700..1F773 ; Grapheme_Base
1F780..1F7D8 ; Grapheme_Base
1F7E0..1F7EB ; Grapheme_Base
+1F7F0 ; Grapheme_Base
1F800..1F80B ; Grapheme_Base
1F810..1F847 ; Grapheme_Base
1F850..1F859 ; Grapheme_Base
1F860..1F887 ; Grapheme_Base
1F890..1F8AD ; Grapheme_Base
1F8B0..1F8B1 ; Grapheme_Base
-1F900..1F978 ; Grapheme_Base
-1F97A..1F9CB ; Grapheme_Base
-1F9CD..1FA53 ; Grapheme_Base
+1F900..1FA53 ; Grapheme_Base
1FA60..1FA6D ; Grapheme_Base
1FA70..1FA74 ; Grapheme_Base
-1FA78..1FA7A ; Grapheme_Base
+1FA78..1FA7C ; Grapheme_Base
1FA80..1FA86 ; Grapheme_Base
-1FA90..1FAA8 ; Grapheme_Base
-1FAB0..1FAB6 ; Grapheme_Base
-1FAC0..1FAC2 ; Grapheme_Base
-1FAD0..1FAD6 ; Grapheme_Base
+1FA90..1FAAC ; Grapheme_Base
+1FAB0..1FABA ; Grapheme_Base
+1FAC0..1FAC5 ; Grapheme_Base
+1FAD0..1FAD9 ; Grapheme_Base
+1FAE0..1FAE7 ; Grapheme_Base
+1FAF0..1FAF6 ; Grapheme_Base
1FB00..1FB92 ; Grapheme_Base
1FB94..1FBCA ; Grapheme_Base
1FBF0..1FBF9 ; Grapheme_Base
-20000..2A6DD ; Grapheme_Base
-2A700..2B734 ; Grapheme_Base
+20000..2A6DF ; Grapheme_Base
+2A700..2B738 ; Grapheme_Base
2B740..2B81D ; Grapheme_Base
2B820..2CEA1 ; Grapheme_Base
2CEB0..2EBE0 ; Grapheme_Base
2F800..2FA1D ; Grapheme_Base
30000..3134A ; Grapheme_Base
-# Total code points: 141814
+# Total code points: 142539
# ================================================
@@ -12034,6 +12368,7 @@ FFFC..FFFD ; Grapheme_Base
0F84 ; Grapheme_Link
1039..103A ; Grapheme_Link
1714 ; Grapheme_Link
+1715 ; Grapheme_Link
1734 ; Grapheme_Link
17D2 ; Grapheme_Link
1A60 ; Grapheme_Link
@@ -12051,6 +12386,7 @@ AAF6 ; Grapheme_Link
ABED ; Grapheme_Link
10A3F ; Grapheme_Link
11046 ; Grapheme_Link
+11070 ; Grapheme_Link
1107F ; Grapheme_Link
110B9 ; Grapheme_Link
11133..11134 ; Grapheme_Link
@@ -12075,6 +12411,6 @@ ABED ; Grapheme_Link
11D44..11D45 ; Grapheme_Link
11D97 ; Grapheme_Link
-# Total code points: 61
+# Total code points: 63
# EOF
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt b/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
index a4bfa99a8cb..f583aba3164 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
@@ -1,6 +1,6 @@
-# DerivedNormalizationProps-13.0.0.txt
-# Date: 2019-09-08, 23:31:08 GMT
-# © 2019 Unicode®, Inc.
+# DerivedNormalizationProps-14.0.0.txt
+# Date: 2021-06-04, 02:19:20 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -132,6 +132,9 @@
33DD ; FC_NFKC; 0077 0062
33DE ; FC_NFKC; 0076 2215 006D
33DF ; FC_NFKC; 0061 2215 006D
+A7F2 ; FC_NFKC; 0063
+A7F3 ; FC_NFKC; 0066
+A7F4 ; FC_NFKC; 0071
A7F8 ; FC_NFKC; 0127
1D400 ; FC_NFKC; 0061
1D401 ; FC_NFKC; 0062
@@ -650,7 +653,7 @@ A7F8 ; FC_NFKC; 0127
1F16C ; FC_NFKC; 006D 0072
1F190 ; FC_NFKC; 0064 006A
-# Total code points: 634
+# Total code points: 637
# ================================================
@@ -1469,6 +1472,7 @@ FB46..FB4E ; NFC_QC; N
32C0..33FF ; NFKD_QC; N
A69C..A69D ; NFKD_QC; N
A770 ; NFKD_QC; N
+A7F2..A7F4 ; NFKD_QC; N
A7F8..A7F9 ; NFKD_QC; N
AB5C..AB5F ; NFKD_QC; N
AB69 ; NFKD_QC; N
@@ -1593,6 +1597,9 @@ FFE5..FFE6 ; NFKD_QC; N
FFE8 ; NFKD_QC; N
FFE9..FFEC ; NFKD_QC; N
FFED..FFEE ; NFKD_QC; N
+10781..10785 ; NFKD_QC; N
+10787..107B0 ; NFKD_QC; N
+107B2..107BA ; NFKD_QC; N
1109A ; NFKD_QC; N
1109C ; NFKD_QC; N
110AB ; NFKD_QC; N
@@ -1690,7 +1697,7 @@ FFED..FFEE ; NFKD_QC; N
1FBF0..1FBF9 ; NFKD_QC; N
2F800..2FA1D ; NFKD_QC; N
-# Total code points: 16908
+# Total code points: 16967
# ================================================
@@ -1883,6 +1890,7 @@ FFED..FFEE ; NFKD_QC; N
32C0..33FF ; NFKC_QC; N
A69C..A69D ; NFKC_QC; N
A770 ; NFKC_QC; N
+A7F2..A7F4 ; NFKC_QC; N
A7F8..A7F9 ; NFKC_QC; N
AB5C..AB5F ; NFKC_QC; N
AB69 ; NFKC_QC; N
@@ -2006,6 +2014,9 @@ FFE5..FFE6 ; NFKC_QC; N
FFE8 ; NFKC_QC; N
FFE9..FFEC ; NFKC_QC; N
FFED..FFEE ; NFKC_QC; N
+10781..10785 ; NFKC_QC; N
+10787..107B0 ; NFKC_QC; N
+107B2..107BA ; NFKC_QC; N
1D15E..1D164 ; NFKC_QC; N
1D1BB..1D1C0 ; NFKC_QC; N
1D400..1D454 ; NFKC_QC; N
@@ -2094,7 +2105,7 @@ FFED..FFEE ; NFKC_QC; N
1FBF0..1FBF9 ; NFKC_QC; N
2F800..2FA1D ; NFKC_QC; N
-# Total code points: 4807
+# Total code points: 4866
# ================================================
@@ -2889,7 +2900,7 @@ FFE3 ; Expands_On_NFKC
# It is constructed by applying NFKC, CaseFolding, and removal of Default_Ignorable_Code_Points.
# The process of applying these transformations is repeated until a stable result is produced.
# WARNING: Application to STRINGS must apply NFC after mapping each character, because characters may interact.
-# For more information, see [http://www.unicode.org/reports/tr44/]
+# For more information, see [https://www.unicode.org/reports/tr44/]
# Omitted code points are unchanged by this mapping.
# @missing: 0000..10FFFF; NFKC_CF; <code point>
@@ -3523,6 +3534,7 @@ FFE3 ; Expands_On_NFKC
17B4..17B5 ; NFKC_CF;
180B..180D ; NFKC_CF;
180E ; NFKC_CF;
+180F ; NFKC_CF;
1C80 ; NFKC_CF; 0432
1C81 ; NFKC_CF; 0434
1C82 ; NFKC_CF; 043E
@@ -4318,6 +4330,7 @@ FFE3 ; Expands_On_NFKC
2C2C ; NFKC_CF; 2C5C
2C2D ; NFKC_CF; 2C5D
2C2E ; NFKC_CF; 2C5E
+2C2F ; NFKC_CF; 2C5F
2C60 ; NFKC_CF; 2C61
2C62 ; NFKC_CF; 026B
2C63 ; NFKC_CF; 1D7D
@@ -5339,12 +5352,19 @@ A7B8 ; NFKC_CF; A7B9
A7BA ; NFKC_CF; A7BB
A7BC ; NFKC_CF; A7BD
A7BE ; NFKC_CF; A7BF
+A7C0 ; NFKC_CF; A7C1
A7C2 ; NFKC_CF; A7C3
A7C4 ; NFKC_CF; A794
A7C5 ; NFKC_CF; 0282
A7C6 ; NFKC_CF; 1D8E
A7C7 ; NFKC_CF; A7C8
A7C9 ; NFKC_CF; A7CA
+A7D0 ; NFKC_CF; A7D1
+A7D6 ; NFKC_CF; A7D7
+A7D8 ; NFKC_CF; A7D9
+A7F2 ; NFKC_CF; 0063
+A7F3 ; NFKC_CF; 0066
+A7F4 ; NFKC_CF; 0071
A7F5 ; NFKC_CF; A7F6
A7F8 ; NFKC_CF; 0127
A7F9 ; NFKC_CF; 0153
@@ -6845,6 +6865,97 @@ FFF0..FFF8 ; NFKC_CF;
104D1 ; NFKC_CF; 104F9
104D2 ; NFKC_CF; 104FA
104D3 ; NFKC_CF; 104FB
+10570 ; NFKC_CF; 10597
+10571 ; NFKC_CF; 10598
+10572 ; NFKC_CF; 10599
+10573 ; NFKC_CF; 1059A
+10574 ; NFKC_CF; 1059B
+10575 ; NFKC_CF; 1059C
+10576 ; NFKC_CF; 1059D
+10577 ; NFKC_CF; 1059E
+10578 ; NFKC_CF; 1059F
+10579 ; NFKC_CF; 105A0
+1057A ; NFKC_CF; 105A1
+1057C ; NFKC_CF; 105A3
+1057D ; NFKC_CF; 105A4
+1057E ; NFKC_CF; 105A5
+1057F ; NFKC_CF; 105A6
+10580 ; NFKC_CF; 105A7
+10581 ; NFKC_CF; 105A8
+10582 ; NFKC_CF; 105A9
+10583 ; NFKC_CF; 105AA
+10584 ; NFKC_CF; 105AB
+10585 ; NFKC_CF; 105AC
+10586 ; NFKC_CF; 105AD
+10587 ; NFKC_CF; 105AE
+10588 ; NFKC_CF; 105AF
+10589 ; NFKC_CF; 105B0
+1058A ; NFKC_CF; 105B1
+1058C ; NFKC_CF; 105B3
+1058D ; NFKC_CF; 105B4
+1058E ; NFKC_CF; 105B5
+1058F ; NFKC_CF; 105B6
+10590 ; NFKC_CF; 105B7
+10591 ; NFKC_CF; 105B8
+10592 ; NFKC_CF; 105B9
+10594 ; NFKC_CF; 105BB
+10595 ; NFKC_CF; 105BC
+10781 ; NFKC_CF; 02D0
+10782 ; NFKC_CF; 02D1
+10783 ; NFKC_CF; 00E6
+10784 ; NFKC_CF; 0299
+10785 ; NFKC_CF; 0253
+10787 ; NFKC_CF; 02A3
+10788 ; NFKC_CF; AB66
+10789 ; NFKC_CF; 02A5
+1078A ; NFKC_CF; 02A4
+1078B ; NFKC_CF; 0256
+1078C ; NFKC_CF; 0257
+1078D ; NFKC_CF; 1D91
+1078E ; NFKC_CF; 0258
+1078F ; NFKC_CF; 025E
+10790 ; NFKC_CF; 02A9
+10791 ; NFKC_CF; 0264
+10792 ; NFKC_CF; 0262
+10793 ; NFKC_CF; 0260
+10794 ; NFKC_CF; 029B
+10795 ; NFKC_CF; 0127
+10796 ; NFKC_CF; 029C
+10797 ; NFKC_CF; 0267
+10798 ; NFKC_CF; 0284
+10799 ; NFKC_CF; 02AA
+1079A ; NFKC_CF; 02AB
+1079B ; NFKC_CF; 026C
+1079C ; NFKC_CF; 1DF04
+1079D ; NFKC_CF; A78E
+1079E ; NFKC_CF; 026E
+1079F ; NFKC_CF; 1DF05
+107A0 ; NFKC_CF; 028E
+107A1 ; NFKC_CF; 1DF06
+107A2 ; NFKC_CF; 00F8
+107A3 ; NFKC_CF; 0276
+107A4 ; NFKC_CF; 0277
+107A5 ; NFKC_CF; 0071
+107A6 ; NFKC_CF; 027A
+107A7 ; NFKC_CF; 1DF08
+107A8 ; NFKC_CF; 027D
+107A9 ; NFKC_CF; 027E
+107AA ; NFKC_CF; 0280
+107AB ; NFKC_CF; 02A8
+107AC ; NFKC_CF; 02A6
+107AD ; NFKC_CF; AB67
+107AE ; NFKC_CF; 02A7
+107AF ; NFKC_CF; 0288
+107B0 ; NFKC_CF; 2C71
+107B2 ; NFKC_CF; 028F
+107B3 ; NFKC_CF; 02A1
+107B4 ; NFKC_CF; 02A2
+107B5 ; NFKC_CF; 0298
+107B6 ; NFKC_CF; 01C0
+107B7 ; NFKC_CF; 01C1
+107B8 ; NFKC_CF; 01C2
+107B9 ; NFKC_CF; 1DF0A
+107BA ; NFKC_CF; 1DF1E
10C80 ; NFKC_CF; 10CC0
10C81 ; NFKC_CF; 10CC1
10C82 ; NFKC_CF; 10CC2
@@ -8826,7 +8937,7 @@ E0080..E00FF ; NFKC_CF;
E0100..E01EF ; NFKC_CF;
E01F0..E0FFF ; NFKC_CF;
-# Total code points: 10329
+# Total code points: 10429
# ================================================
@@ -9164,6 +9275,7 @@ E01F0..E0FFF ; NFKC_CF;
17B4..17B5 ; Changes_When_NFKC_Casefolded
180B..180D ; Changes_When_NFKC_Casefolded
180E ; Changes_When_NFKC_Casefolded
+180F ; Changes_When_NFKC_Casefolded
1C80..1C88 ; Changes_When_NFKC_Casefolded
1C90..1CBA ; Changes_When_NFKC_Casefolded
1CBD..1CBF ; Changes_When_NFKC_Casefolded
@@ -9399,7 +9511,7 @@ E01F0..E0FFF ; NFKC_CF;
2A0C ; Changes_When_NFKC_Casefolded
2A74..2A76 ; Changes_When_NFKC_Casefolded
2ADC ; Changes_When_NFKC_Casefolded
-2C00..2C2E ; Changes_When_NFKC_Casefolded
+2C00..2C2F ; Changes_When_NFKC_Casefolded
2C60 ; Changes_When_NFKC_Casefolded
2C62..2C64 ; Changes_When_NFKC_Casefolded
2C67 ; Changes_When_NFKC_Casefolded
@@ -9590,9 +9702,14 @@ A7B8 ; Changes_When_NFKC_Casefolded
A7BA ; Changes_When_NFKC_Casefolded
A7BC ; Changes_When_NFKC_Casefolded
A7BE ; Changes_When_NFKC_Casefolded
+A7C0 ; Changes_When_NFKC_Casefolded
A7C2 ; Changes_When_NFKC_Casefolded
A7C4..A7C7 ; Changes_When_NFKC_Casefolded
A7C9 ; Changes_When_NFKC_Casefolded
+A7D0 ; Changes_When_NFKC_Casefolded
+A7D6 ; Changes_When_NFKC_Casefolded
+A7D8 ; Changes_When_NFKC_Casefolded
+A7F2..A7F4 ; Changes_When_NFKC_Casefolded
A7F5 ; Changes_When_NFKC_Casefolded
A7F8..A7F9 ; Changes_When_NFKC_Casefolded
AB5C..AB5F ; Changes_When_NFKC_Casefolded
@@ -9723,6 +9840,13 @@ FFED..FFEE ; Changes_When_NFKC_Casefolded
FFF0..FFF8 ; Changes_When_NFKC_Casefolded
10400..10427 ; Changes_When_NFKC_Casefolded
104B0..104D3 ; Changes_When_NFKC_Casefolded
+10570..1057A ; Changes_When_NFKC_Casefolded
+1057C..1058A ; Changes_When_NFKC_Casefolded
+1058C..10592 ; Changes_When_NFKC_Casefolded
+10594..10595 ; Changes_When_NFKC_Casefolded
+10781..10785 ; Changes_When_NFKC_Casefolded
+10787..107B0 ; Changes_When_NFKC_Casefolded
+107B2..107BA ; Changes_When_NFKC_Casefolded
10C80..10CB2 ; Changes_When_NFKC_Casefolded
118A0..118BF ; Changes_When_NFKC_Casefolded
16E40..16E5F ; Changes_When_NFKC_Casefolded
@@ -9824,6 +9948,6 @@ E0080..E00FF ; Changes_When_NFKC_Casefolded
E0100..E01EF ; Changes_When_NFKC_Casefolded
E01F0..E0FFF ; Changes_When_NFKC_Casefolded
-# Total code points: 10329
+# Total code points: 10429
# EOF
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt b/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
index ae41d93a12a..6287e096bc1 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
@@ -1,24 +1,24 @@
# Fractional UCA Table, generated from the UCA DUCET
-# 2020-02-12 [MS]
-# VERSION: UCA=13.0.0, UCD=13.0.0
+# 2021-08-17 [MS]
+# VERSION: UCA=14.0.0, UCD=14.0.0
# © 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# For a description of the format and usage, see
# http://www.unicode.org/reports/tr35/tr35-collation.html
-[UCA version = 13.0.0]
-# Unified_Ideograph: 92856 characters
-[Unified_Ideograph 4E00..9FFC FA0E..FA0F FA11 FA13..FA14 FA1F FA21 FA23..FA24 FA27..FA29 3400..4DBF 20000..2A6DD 2A700..2B734 2B740..2B81D 2B820..2CEA1 2CEB0..2EBE0 30000..3134A]
+[UCA version = 14.0.0]
+# Unified_Ideograph: 92865 characters
+[Unified_Ideograph 4E00..9FFF FA0E..FA0F FA11 FA13..FA14 FA1F FA21 FA23..FA24 FA27..FA29 3400..4DBF 20000..2A6DF 2A700..2B738 2B740..2B81D 2B820..2CEA1 2CEB0..2EBE0 30000..3134A]
[radical 1=⼀一:一𪛙丁-丆𠀀-𠀂𬺰𰀀万-丌亐卄𠀃-𠀆𪛚𪜀𪜁𫝀𬺱-𬺴𰀁-𰀄不-专丗𠀇-𠀌𪜂𫠡𬺵-𬺹𰀅-𰀇且-世丘-丝㐀𠀍-𠀗𫠢𫠣𬺺-𬺾𰀈-𰀊丞-丢㐁㐂𠀘-𠀚𠀜𠀞-𠀠𫝁𫠤𫠥𬺿-𬻉𰀋丣-严丽鿖𠀡-𠀤𠀦-𠀨𠀪𠀫𫝂𫠦-𫠩𬻊-𬻒𰀌並丧𠀬-𠀮𠀰-𠀴𪜃𫠪-𫠭𬻓-𬻘𰀍鿗𠀵𠀶𠀸𠀺𠀻𪜄𫠮𬻙-𬻝𰀎-𰀑𠀽-𠁀𠤢𪜅𫠯-𫠲𬻞-𬻠𰀒-𰀕𠁁-𠁅𪜆𫠳-𫠵𬻡-𬻥𠁆-𠁈𠁊𠁋𫠶𬻦-𬻨𰀖-𰀘𠁌𠁍𫠷-𫠼𬻩-𬻮𰀙𰀚𠁎-𠁒𫝃𫠽𬻯𰀛𰀜䶶𠁓𠁔𫠾𫠿𬻰𰀝𠁕𠁗-𠁛𠁝𤳏𪜇𫡀𠁖𰀞𠁟𫡁𫡂𠁠𰀟𬻱]
[radical 2=⼁丨:丨丩𠁡𠁢个丫㐃㐄𫡃𫡄𰀠中-丰𠁣𪜈𫡅𰀡丱𠁥𰀢𠁦𬻲𬻳𰀣串𠁧𠁨𫡆丳𠁩-𠁬𫡇𰀤临𠁭-𠁯𪜉𬻴𰀥丵𠁰𠁱𫡈𫡉𬻵-𬻷𰀦𰀧𠁳-𠁵𬻸𬻹𠁶𫡊𠁸𫡋𫡌𠁹𰀨𠁺𫡍𠁻𫡎]
[radical 3=⼂丶:丶丷𪜊丸义𠁼𠁽𬻺丹为𠁿主丼𠂀-𠂂𬻻𪜋举𬻼𠂃𰀩𬻽𠂄𬻾𠂅]
-[radical 4=⼃丿:丿-乄㐅𠂆-𠂊𬻿-𬼂𰀪𰀫久-么乊𠂋-𠂎𫝄𫡏𬼃之乌尹𠂏-𠂓𬼄-𬼆乍-乐𠂔-𠂡𫡐𬼇𬼈𰀬乑-乔㐆𠂢-𠂧𠂩-𠂫𠂭𪜌𫡑-𫡓𬼉乕𠂯𫡔𬼊乖𠂲𠂳𠂶𫡕-𫡘𬼋乗𠂴𠂷𪜍𫡙𫡚乘𠂹-𠂾𪜎𪜏𫡛𫡜𬼌-𬼏𠂿-𠃂𫡝𬼐𠃃𠃄𫡞𰀭-𰀯𠃆𠃅𬼑𠃇𫡟𫡠𬼒-𬼕𠃈𫡡]
+[radical 4=⼃丿:丿-乄㐅𠂆-𠂊𬻿-𬼂𰀪𰀫久-么乊𠂋-𠂎𫝄𫡏𬼃𬼄之乌尹𠂏-𠂓𫜵𬼅𬼆乍-乐𠂔-𠂡𫡐𬼇𬼈𰀬乑-乔㐆𠂢-𠂧𠂩-𠂫𠂭𪜌𫡑-𫡓𬼉乕𠂯𫡔𬼊乖𠂲𠂳𠂶𫡕-𫡘𬼋乗𠂴𠂷𪜍𫡙𫡚乘𠂹-𠂾𪜎𪜏𫡛𫡜𬼌-𬼏𠂿-𠃂𫡝𬼐𠃃𠃄𫡞𰀭-𰀯𠃆𠃅𬼑𠃇𫡟𫡠𬼒-𬼕𠃈𫡡]
[radical 5=⼄乙:乙-乛𠃉-𠃎𠃑乜九龴𠃏𠃐乞-习㐇-㐉𠃒-𠃔𬼖𰀰乣-书㐊㐋𠁾𠃕-𠃝𫡢𬼗𬼘𰀱乧㐌-㐏𠃞-𠃣𪜐𫡣𬼙-𬼜𰀲-𰀵乨-买㐐-㐕𠃤-𠃨𪜑𫡤𬼝-𬼢𰀶-𰀼乱乲㐖-㐘𠃩𠃪𠃬𠧝𪜒𪜓𫡥-𫡧𬼣𬼤𰀽-𰁀乳-乸㐙-㐛𠃭-𠃯𪜔𫡨𬼥-𬼧𰁁-𰁃乹-乼㐜-㐠𠂸𠃲-𠃷𪜕𫡩𬼨-𬼫𰁄-𰁈乽𠃸-𠃻𤱡𪜖𪜗𫡪-𫡬𬼬𬼭𰁉-𰁋乾-亀㐡-㐣𠃼-𠄂𪜘𫡭𫡮𬼮-𬼱𰁌亁㐤𥝀𪜙𪜚𬼲-𬼴𰁍亂-亄𠄃𠄄𪜛𫡯𫡰𬼵𠄅-𠄈𢆡𰁎𰁏㐥𰁐𠄉𰁑㐦𠄊𠄋]
[radical 6=⼅亅:亅𠄌了𠄍-𠄐亇𠄑𬼶-𬼸予㐧𠄒-𠄔𰁒争𠀩𠄕𬼹亊𠄖-𠄘𪜜事㐨𠄙𬼺𠄚𰁓𰁔𠄛𪜝𬼻𠄜𠄝𬼼]
[radical 7=⼆二:二𠄞-𠄠亍-亏𬼽云-亖𠄡𰁕亗𰁖亘-亚𠄢-𠄧𫡱𰁗些亜𠀥𠄨-𠄪𫡲亝-亟㐩𠄫-𠄯𫡳𬼾𠄰-𠄳𬼿𬽀𰁘𠄵-𠄸𬽁𠄹𠄺𫡴𠄻𬽂𠄼-𠄾𫡵𫡶𰁙𠄿𪜞𫡷𰁚𠅀𪜟𰁛𫡸𫡹]
[radical 8=⼇亠:亠-亣𠅁𠅂𪜠𪜡𬽃交-产㐪㐫𠅃-𠅇𫝅𬽄𰁜亨-亪㐬𠅈-𠅋𪜢𫡺𬽅-𬽇享京㐭𠅌-𠅒𬽈𬽉亭-亲𠅓-𠅕𬽊-𬽌亳𠅖𠅘-𠅝𫡻𬽍𠅞-𠅧𪜣𬽎-𬽒𰁝亴亵𠅨-𠅯𠅲𪜤𫡼𬽓𬽔𰁞𰁟亶亷㐮𠅳-𠅸𠅺-𠅼𠆀𫡽𫡾𬽕-𬽘𠅾𠅿𫡿𫢀𠆁-𠆉𪜥𬽙𬽚𰁠亸𠆋-𠆒𠆔𠆖-𠆘𬽛𬽜㐯𫢁𫢂𬽝𬽞𠆚𠆝𪜦𫢃亹𠆞𬽟𫢄𬽠𠆟-𠆡]
-[radical 9=⼈人:人亻𠆢亼-亿𠆣-𠆥𫢅什-仓𠆦-𠆨𪜧𫢆-𫢈𬽡𬽢𰁡仔-仭㐰-㐷𠆩-𠆭𠆯𠆰𠆳𫝆𫢉𫢊𬽣-𬽨𰁢𰁣仮-伬佤㐸-㑀𠆴-𠇑𠇓-𠇕𪜨-𪜫𫢋-𫢐𬽩-𬽭𰁤-𰁪伭-佣佥-佨㑁-㑈𠇖-𠈁𪜬-𪜴𫢑-𫢘𬽮-𬽺𰁫-𰁰佩-侭鿇㑉-㑖𠈃-𠈣𠈥-𠈬𪜵-𪜺𫝇𫝈𫢙-𫢝𬽻-𬾄𰁱-𰂄侮-俭㑗-㑢𠈭-𠉢𪜻-𪝂𫢞-𫢩𬾅-𬾙𰂅-𰂎修-倿㑣㑥-㑭𠉣-𠊦𠋟𪝃-𪝊𫝉𫢪-𫢼𬾚-𬾩𰂏-𰂖偀-偿㑤㑮-㑲𠊧-𠋐𠋒-𠋞𠋠-𠋬𪝋-𪝕𫝊𫢽-𫣃𬾪-𬾼𰂗-𰂡傀-傩鿘㑳-㑺𠋭-𠌅𠌇-𠌝𠌠-𠌩𪝖-𪝟𫣄-𫣐𬾽-𬿏𰂢-𰂩傪-働鿙㑻-㒁𠌫-𠍡𠍣𠍤𠍦-𠍬𠎵𪝠-𪝤𫝋𫣑-𫣖𬿐-𬿠𰂪-𰂬僎-僱僳僴僷㒂-㒐𠍥𠍭-𠎗𠎙𠎚𠎝-𠎴𠏐𪝥-𪝪𫣗-𫣢𬿡-𬿮𰂭-𰂲僲僵僶僸-儏㒑-㒘𠎷-𠏏𠏑𠏔-𠏦𪝫-𪝯𫣣-𫣬𬿯-𬿺𰂳-𰂹儐-儞儫鿚㒙-㒜𠏒𠏨-𠐇𪝰-𪝳𫣭-𫣱𬿻-𭀀𰂺-𰂽償-優儬㒝㒞𠐈-𠐛𠐝-𠐢𪝴-𪝶𫣲-𫣸𭀁-𭀅𰂾-𰃁儭-儲㒟㒠𠐣-𠐺𪝷-𪝹𫣹-𫤃𭀆-𭀌𰃂-𰃆儳-儵㒡-㒣𠐻-𠑁𠑃-𠑌𪝺-𪝼𫤄-𫤈𭀍-𭀏𰃇𰃈儶㒤-㒦𠑍-𠑖𠑞𪝽𫤉-𫤋𭀐𭀑儷-儺㒧㒨𠑗-𠑝𠑟-𠑣𪝾𫤌-𫤑儻儼𠑤-𠑩𭀒儽㒩𠑪-𠑯𫤒-𫤔𭀓𭀔𰃉儾𠑰𫤕𭀕𫤖㒪𠑲𠑳𠑵]
+[radical 9=⼈人:人亻𠆢亼-亿𠆣-𠆥𫢅什-仓𠆦-𠆨𪜧𫢆-𫢈𬽡𬽢𰁡仔-仭㐰-㐷𠆩-𠆭𠆯𠆰𠆳𫝆𫢉𫢊𬽣-𬽨𰁢𰁣仮-伬佤㐸-㑀𠆴-𠇑𠇓-𠇕𪜨-𪜫𫢋-𫢐𬽩-𬽭𰁤-𰁪伭-佣佥-佨㑁-㑈𠇖-𠈁𪜬-𪜴𫢑-𫢘𬽮-𬽺𰁫-𰁰佩-侭鿇㑉-㑖𠈃-𠈣𠈥-𠈬𪜵-𪜺𫝇𫝈𫢙-𫢝𬽻-𬾄𰁱-𰂄侮-俭㑗-㑢𠈭-𠉢𪜻-𪝂𫢞-𫢩𬾅-𬾙𰂅-𰂎修-倿㑣㑥-㑭𠉣-𠊦𠋟𪝃-𪝊𫝉𫢪-𫢼𬾚-𬾩𰂏-𰂖偀-偿㑤㑮-㑲𠊧-𠋐𠋒-𠋞𠋠-𠋬𪝋-𪝕𫝊𫢽-𫣃𬾪-𬾼𰂗-𰂡傀-傩鿘㑳-㑺𠋭-𠌅𠌇-𠌝𠌠-𠌩𪝖-𪝟𫣄-𫣐𬾽-𬿏𰂢-𰂩傪-働鿙㑻-㒁𠌫-𠍡𠍣𠍤𠍦-𠍬𠎵𪝠-𪝤𫝋𫣑-𫣖𫣞𬿐-𬿠𰂪-𰂬僎-僱僳僴僷㒂-㒐𠍥𠍭-𠎗𠎙𠎚𠎝-𠎴𠏐𪝥-𪝪𫣗𫣘𫣛-𫣝𫣟-𫣢𬿡-𬿮𰂭-𰂲僲僵僶僸-儏㒑-㒘𠎷-𠏏𠏑𠏔-𠏦𪝫-𪝯𫣣-𫣬𬿯-𬿺𰂳-𰂹儐-儞儫鿚㒙-㒜𠏒𠏨-𠐇𪝰-𪝳𫣭-𫣱𬿻-𭀀𰂺-𰂽償-優儬㒝㒞𠐈-𠐛𠐝-𠐢𪝴-𪝶𫣲-𫣸𭀁-𭀅𰂾-𰃁儭-儲㒟㒠𠐣-𠐺𪝷-𪝹𫣹-𫤃𭀆-𭀌𰃂-𰃆儳-儵㒡-㒣𠐻-𠑁𠑃-𠑌𪝺-𪝼𫤄-𫤈𭀍-𭀏𰃇𰃈儶㒤-㒦𠑍-𠑖𠑞𪝽𫤉-𫤋𭀐𭀑儷-儺㒧㒨𠑗-𠑝𠑟-𠑣𪝾𫤌-𫤑儻儼𠑤-𠑩𭀒儽㒩𠑪-𠑯𫤒-𫤔𭀓𭀔𰃉儾𠑰𫤕𭀕𫤖㒪𠑲𠑳𠑵]
[radical 10=⼉儿:儿-元𠑶𭀖-𭀘兄𠑷𠑸𭀙-𭀝𰃊充-兊㒫𠑹-𠑼𫤗克-兑𠑽-𠒂𭀞-𭀠𰃋兒-兖㒬𠒃-𠒋𪝿𫤘𭀡-𭀤𰃌兗-兙𠒌-𠒏𪞀𫝌𫤙𭀥党兛㒭𠒐-𠒖𪞁𭀦𭀧兜-兞㒮𠒗-𠒝𫤚𫤛𭀨𰃍兟兠𠒞-𠒣𫤜𫤝𭀩-𭀭𰃎兡𠒤-𠒦𪞂𫤞𭀮𭀯𰃏𰃐兢𠒧-𠒯𫤟𫤠𭀰-𭀳𰃑𰃒𠒰-𠒲𠒴-𠒷𪞃-𪞅𭀴兣𠒳𠒸-𠒾𭀵𰃓𰃔𠒿-𠓅𠓇𫤡𫤢𭀶-𭀸㒯𠓆𠓈-𠓊𫤣-𫤦𭀹𭀺𠓋𠓎𪞆𫤧𰃕𠓍𠓏𠓐兤𠓑-𠓔𫤨𠓕-𠓚]
[radical 11=⼊入:入兦𠓛內𠓜-𠓞㒰㒱𠓟𭀻全氽㒲𠇒𠓠-𠓣𰃖㒳㒴𠓤-𠓨𭀼-𭀾兩𠓩𭀿𰃗-𰃙兪𠓪-𠓬𭁀𰃚𰃛𠓭-𠓰𪞇𫤩𠓱𰃜𠌆𠓲𠓳𫤪𠓴-𠓼𭁁𠓽𭁂𠓾𠓿𭁃]
[radical 12=⼋八:八𠔀公-兯𠔁-𠔄兰𠔅𠔆𭁄共-兴龹𠔈𠔉𪞈𫤫𫤬𭁅𭁆𰃝-𰃟兵㒵-㒷𠔊-𠔏𭁇其-典𠔐𠔑𠩖𫤭𭁈-𭁋𰃠兹养㒸𠔒-𠔗𭁌-𭁎𰃡兺兼𠔙-𠔛𫤮𫤯𭁏𭁐𰃢𰃣兽𠔜𠔝𫤰𭁑-𭁓𰃤𠔞-𠔧𪞉𫤱𭁔-𭁖兾兿𠔨-𠔮𪞊𫤲𭁗𭁘𰃥𠔯-𠔱𠭻𪞋𭁙𪞌𭁚-𭁜冀𠔳-𠔵𪞍𠁜冁𠔶𠔷𫤳𠔸-𠔺𫤴𫤵𭁝㒹𭁞𫤶]
@@ -35,13 +35,13 @@
[radical 23=⼖匸:匸-区𠥭𠤲𠥮𠥯𰅪医㔷𠥰-𠥲𰅫匼𠥳匽𠥃𠥴𠥵𭅟𠥶𰅬匾-區㔸𠥷-𠥺]
[radical 24=⼗十:十-千卅-午㔹𠥻𠥼𠥿𭅠𰅭𰅮卉半卌𠆱𠥽𠥾𠦀𠦁𰅯卋卍-卐㔺㔻𠦂-𠦐𰅰𰅱𠦑-𠦗𪟳𫝒𫧞𰅲-𰅴卑-卖龺𠦘-𠦢𣥥𫝓𫧟𫧠𰅵南単𫝔𫧡𫧢𭅡𭅢𰅶𰅷𠦣-𠦩𪟴𭅣𰅸𰅹卙𠦪-𠦯𪟵𭅤𰅺𰅻博𠦰-𠦳𫧣𭅥𭅦㔼𠦴-𠦼𪟶𫧤𫧥𭅧𰅼𠦽-𠦿𪟷𫧦𰅽𰅾𠧀-𠧄𪟸𪟹𫧧𫧨𭅨-𭅪𠧅-𠧈𪟺𫧩-𫧫𰅿𠧉-𠧍𪟻𭅫𭅬𰆀𰆁𠧎𫧬𪟼𭅭卛𠧏𫧭𠧐𭅮𠧑𰆂]
[radical 25=⼘卜:卜𠧒卝卞𪟽卟-卢𠧓𠀝𠧔-𠧘𭅯卣卤𠧙-𠧜𡥋𪟾𭅰卥-卧㔽𠧞-𠧨𫧮𰆃𠧩-𠧲𠭉𫧯𰆄-𰆆𠧳-𠧷𠧹𪟿𫧰卨𠧺-𠧿𭅱𠨀-𠨂𠨄𫧱𫧲𰆇𰆈𠨅𫧳𫧴𠨆𠨇𪠀𫧵𠨈-𠨊𰆉𫧶-𫧸𠨋𠨌]
-[radical 26=⼙卩:卩𰆊卪卫㔾㔿𭅲卬𠨍-𠨐𫧹𭅳𰆋卭-卯𠨑𭅴印危𠨒-𠨗𫧺𭅵𰆌𰆍卲-卵㕀𠨘𰆎卶-卺㕁𪠁𭅶-𭅺𰆏卻-卽𠨙-𠨝𪠂𰆐𠨞𭅻𭅼卾卿𫧻𰆑𰆒𠨟-𠨡𫧼厀厁𠨢-𠨤𫧽𭅽𭅾𠨥𫧾𫧿𭅿𰆓𫨀𰆔𠨦-𠨪𫨁𠨫]
+[radical 26=⼙卩:卩𰆊卪卫㔾㔿𭅲卬𠨍-𠨐𫧹𭅳𰆋卭-卯𠨑𭅴印危𠨒-𠨗𫧺𭅵𰆌𰆍卲-卵㕀𠨘𰆎卶-卺㕁𪠁𭅶-𭅺𰆏卻-卽𠨙-𠨝𪠂𰆐卿𠨞𭅻𭅼卾𫧻𰆑𰆒𠨟-𠨡𫧼厀厁𠨢-𠨤𫧽𭅽𭅾𠨥𫧾𫧿𭅿𰆓𫨀𰆔𠨦-𠨪𫨁𠨫]
[radical 27=⼚厂:厂-历𠨬厇-厉𠨭-𠨳𪠃𫨂𭆀𰆕厊-厍㕂-㕄𠂬𠂮𠨴-𠨿𭆁𰆖𰆗厎-厑㕅-㕇𠂰𠩀-𠩉𪠄𫝕𫨃𫨄𭆂𭆃𰆘厒-厕㕈㕉𠩊-𠩕𪠅𪠆𫨅-𫨈𭆄厖-厛㕊𠩗-𠩦𪠇-𪠊𫨉𫨊𭆅𰆙𰆚厜-原虒㕋-㕍𠩧-𠩷𪠋-𪠎𫝖𫝗𫨋𭆆-𭆈𰆛-𰆟厠-厣厩𠩸-𠩾𠪀-𠪆𪠏𪠐𫨌-𫨐𭆉-𭆋厤-厨㕎𠪇-𠪐𪠑𪠒𫨑-𫨗𭆌-𭆐𰆠-𰆦厪厫㕏𠩿𠪑-𠪘𪠓-𪠕𫨘-𫨛𭆑𭆒𰆧厬-厰㕐㕑𠪙-𠪬𪠖𪠗𫨜𫨝𭆓-𭆕𰆨𰆩厱厲㕒𠪭-𠪸𪠘𪠙𫨞𫨟𭆖𠪺-𠪾𫨠-𫨢𭆗厳㕓𠪿𪠚𫨣𰆪𰆫𠫀-𠫆厴𠫇𪠛𫨤𰆬𠫉-𠫎㕔𠫏𫨥𭆘𠫐厵𠫑𠫒]
[radical 28=⼛厶:厶𠫓-𠫖厷-厹㕕𠫗𠫘𫨦厺-厼𠫙-𠫝𰆭厽厾𠫞-𠫥𭆙𭆚县𠫦-𠫨𫨧叀-参𠫩-𠫭𠫯-𠫲𠫴-𠫸𪠜𫨨𫨩𭆛-𭆝𰆮㕖𠫹-𠫼𪠝𫨪𭆞-𭆢參叄㕗㕘𠫽𠫾𪠞𫨫𭆣叅𠫿-𠬅𦎅𪠟𰆯𠬆-𠬌𪠠𫨬-𫨮𭆤叆𠔲𠬍-𠬐叇㕙𠬑𠬒𪠡𠬓𠬕-𠬗𫨯𫨰𠬔𠬘𠬙𪠢𫨱]
[radical 29=⼜又:又叉𭆥及-収㕚㕛𠬚-𠬠𪠣𪠤𫨲叏-发𠬡-𠬨𭆦𰆰叒㕜𠬩-𠬰𪠥𫨳𭆧𭆨𰆱-𰆶叓㕝𠬱-𠬸𪠦𫨴-𫨸𰆷-𰆺叔-变㕞𠬹-𠬾𪠧𪠨𫨹𭆩-𭆫𰆻-𰆽叙-叝㕟𠫳𠬿-𠭈𪠩𪠪𫨺𫨻𭆬-𭆮𰆾𰆿叞叟𠭊-𠭔𪠫𪠬𫨼-𫨿𭆯𭆰𠭕-𠭤𫩀-𫩃𭆱𭆲𰇀𰇁㕠𠭥-𠭮𪠭𪠮𫩄𫩅𭆳𭆴𰇂𰇃叠﨎𠭯-𠭵𠭷-𠭺𪠯𫩆𫩇𰇄㕡𠭼-𠮂𡪞𪠰𫩈𫩉𭆵𭆶𰇅𠮃-𠮆𫩊𭆷叡𠮇-𠮌𪠱𫩋𫩌𠮍-𠮏𫩍𫩎叢𠮐壡𠮑𠮒𰇆𠮓-𠮘]
-[radical 30=⼝口:口𠮙-𠮞𫩏古-叾㕣-㕥䶷𠙼𠮟-𠮪𪠲𫩐𫩑𭆸𭆹𰇇叿-吗㕦-㕨䶸𠮫-𠯊𪛗𫝘𫩒-𫩗𭆺-𭇂𰇈𰇉吘-呜㕩-㕶𠈂𠯋-𠰇𪠳-𪠵𫩘-𫩞𭇃-𭇍𰇊-𰇍呝-咝㕷-㕿𠰈-𠱏𪠶-𪠹𫩟-𫩪𭇎-𭇝𰇎-𰇓咞-哟㖀-㖎𠀷𠀹𠱐-𠲫𪠺-𪡃𫝙𫩫-𫩼𭇞-𭇴𰇔-𰇣哠-唧㖏-㖞𠲬-𠳤𠳦-𠳪𠳬-𠴥𪡄-𪡎𫩽-𫪑𭇵-𭈋𰇤-𰇰唨-啘啚-啞啠-啪啬-啹㖟-㖵𠳥𠴧-𠶶𪡏-𪡛𫪒-𫪰𭈌-𭈮𰇱-𰇾啙啫啺-喌喎-喾噅㖶-㗑𠶷-𠷡𠷣-𠸵𠸻-𠸾𪡜-𪡩𫪱-𫫂𭈯-𭉙𰇿-𰈐喍喿-嗵㗒-㗡𠷢𠸶-𠸺𠸿-𠹯𠹳-𠻓𪡪-𪡷𫫃-𫫒𭉚-𭉽𰈑-𰈞嗶-嘞嘡-嘧噑噓㗢-㗰𠁷𠻔-𠽠𪡸-𪢄𫝚𫫓-𫫧𭉾-𭊠𰈟-𰈨嘟嘠嘨-噄噆-噐噒噔噖-噝噴㗱-㗺𠆊𠏓𠏧𠹰-𠹲𠽡-𠾦𠾨-𠿆𡀔𡀦𪢅-𪢍𫝛𫫨-𫫵𭊡-𭋁𰈩-𰈮噞-噳噵-噼㗻-㘄𠿇-𡀓𡀕-𡀥𡀧-𡀼𢨐𨗓𪢎-𪢔𫫶-𫬆𭋂-𭋛𰈯-𰈶噽-嚓嚺㘅-㘈𡀽-𡂎𪢕-𪢘𫝜𫬇-𫬑𭋜-𭋯𰈷-𰈽嚔-嚤㘉-㘏𡂏-𡃟𡃰𪢙-𪢞𫝝𫬒-𫬛𭋰-𭌉𰈾-𰉂嚥-嚰㘐-㘒𡃠-𡃯𡃱-𡄈𡄊-𡄐𪢟-𪢡𫬜-𫬫𭌊-𭌡𰉃-𰉅嚱-嚹㘓㘔𡄑-𡄰𪢢-𪢤𫬬-𫬵𭌢-𭌯𰉆-𰉉嚻-囄囍㘕-㘗𡄱-𡅔𡅣𫬶-𫬸𭌰-𭌳𰉊𰉋囅-囋囎㘘𡅗-𡅢𡅤-𡅯𪢥𫝞𫬹𭌴-𭌽𰉌囌囏囐㘙㘚𡅰-𡅸𫬺-𫬼𭌾-𭍅囑-囓𡅹-𡆅𪢦𪢧𫬽-𫬿𭍆-𭍋囔囕㘛𡆆-𡆎𫭀𭍌-𭍏㘜𡆏-𡆘𭍐-𭍒𡆙𡆚𡆞𫭁𭍓𭍔囖𡆛-𡆝𧮥𭍕-𭍘𡆟𭍙]
+[radical 30=⼝口:口𠮙-𠮞𫩏古-叾㕣-㕥䶷𠙼𠮟-𠮪𪠲𫜸𫩐𫩑𭆸𭆹𰇇叿-吗㕦-㕨䶸𠮫-𠯊𪛗𫝘𫩒-𫩗𭆺-𭇂𰇈𰇉吘-呜㕩-㕶𠈂𠯋-𠰇𪠳-𪠵𫩘-𫩞𭇃-𭇍𰇊-𰇍呝-咝㕷-㕿𠰈-𠱏𪠶-𪠹𫩟-𫩪𭇎-𭇝𰇎-𰇓咞-哟㖀-㖎𠀷𠀹𠱐-𠲫𪠺-𪡃𫝙𫩫-𫩼𭇞-𭇴𰇔-𰇣哠-唧㖏-㖞𠲬-𠳤𠳦-𠳪𠳬-𠴥𪡄-𪡎𫩽-𫪑𭇵-𭈋𰇤-𰇰唨-啘啚-啞啠-啪啬-啹㖟-㖵𠳥𠴧-𠶶𪡏-𪡛𫪒-𫪰𭈌-𭈮𰇱-𰇾啙啫啺-喌喎-喾噅㖶-㗑𠶷-𠷡𠷣-𠸵𠸻-𠸾𪡜-𪡩𫪱-𫫂𭈯-𭉙𰇿-𰈐喍喿-嗵鿽㗒-㗡𠷢𠸶-𠸺𠸿-𠹯𠹳-𠻓𪡪-𪡷𫫃-𫫒𭉚-𭉽𰈑-𰈞嗶-嘞嘡-嘧噑噓㗢-㗰𠁷𠻔-𠽠𪡸-𪢄𫝚𫫓-𫫧𭉾-𭊠𰈟-𰈨嘟嘠嘨-噄噆-噐噒噔噖-噝噴㗱-㗺𠆊𠏓𠏧𠹰-𠹲𠽡-𠾦𠾨-𠿆𡀔𡀦𪢅-𪢍𫝛𫫨-𫫵𭊡-𭋁𰈩-𰈮噞-噳噵-噼㗻-㘄𠿇-𡀓𡀕-𡀥𡀧-𡀼𢨐𨗓𪢎-𪢔𫫶-𫬆𭋂-𭋛𰈯-𰈶噽-嚓嚺㘅-㘈𡀽-𡂎𪢕-𪢘𫝜𫬇-𫬑𭋜-𭋯𰈷-𰈽嚔-嚤㘉-㘏𡂏-𡃟𡃰𪢙-𪢞𫝝𫬒-𫬛𭋰-𭌉𰈾-𰉂嚥-嚰㘐-㘒𡃠-𡃯𡃱-𡄈𡄊-𡄐𪢟-𪢡𫬜-𫬫𭌊-𭌡𰉃-𰉅嚱-嚹㘓㘔𡄑-𡄰𪢢-𪢤𫬬-𫬵𭌢-𭌯𰉆-𰉉嚻-囄囍㘕-㘗𡄱-𡅔𡅣𫬶-𫬸𭌰-𭌳𰉊𰉋囅-囋囎㘘𡅗-𡅢𡅤-𡅯𪢥𫝞𫬹𭌴-𭌽𰉌囌囏囐㘙㘚𡅰-𡅸𫬺-𫬼𭌾-𭍅囑-囓𡅹-𡆅𪢦𪢧𫬽-𫬿𭍆-𭍋囔囕㘛𡆆-𡆎𫭀𭍌-𭍏㘜𡆏-𡆘𭍐-𭍒𡆙𡆚𡆞𫭁𭍓𭍔囖𡆛-𡆝𧮥𭍕-𭍘𡆟𭍙]
[radical 31=⼞囗:囗𡆠-𡆢囘-囜龱㘝𠁤𡆣-𡆦𪛘𫭂𭍚囝-団㘟𡆧-𡆳囤-囵𡆴-𡇇𪢨𫭃𫭄𭍛𭍜𰉍𰉎囶-图㘠㘡𠀯𡇈-𡇌𡇎-𡇑𪢩𫭅𫭆𭍝𰉏𰉐囿圀㘢𡇒-𡇟𪢪𫭇𫭈𭍞𭍟圁-圆㘣𡇠-𡇯𪢫𫭉𫭊𭍠-𭍤圇-國圏𡇰-𡇻𡈀𪢬𪢭𫭋𫭌𭍥-𭍨𰉑圌-圎圐𡇼-𡇿𡈁-𡈉𤔗𫭍-𫭏𭍩𭍪圑-圕𡈊-𡈔𪢮𫭐𭍫𰉒圖-圙㘤𡈕-𡈡𪢯𫭑𭍬-𭍰𰉓圚𡈢-𡈤𡈦-𡈩𫭒𭍱-𭍳𰉔圛圜𡈥𡈪-𡈬𪢰𫭓𭍴𡈭-𡈱𫭔𭍵𡈲𭍶𡈳𡈴𭍷㘥𡈵-𡈺𫭕𭍸圝圞𡈻𭍹]
-[radical 32=⼟土:土-圡龶𡈼-𡈾𫭖𰉕圢-圧㘦𡈿-𡉇𪢱𪢲𫭗𫭘𭍺𰉖𰉗在-场𡉈-𡉖𪢳-𪢷𫭙𫭚𭍻-𭍽圻-坠㘧-㘰𡉘-𡊃𪢸-𪣂𫭛-𫭤𭍾-𭎄𰉘-𰉞坡-垊㘱-㘵𡊄-𡊶𪣃-𪣊𫭥-𫭨𭎅-𭎎𰉟-𰉤型-垵城鿍㘶-㘾𡊷-𡋛𡋝-𡋬𪣋-𪣓𫭩-𫭯𭎏-𭎛𰉥-𰉭垶-埍埏-埛﨏㘿-㙆𡋭-𡌥𣑧𪣔-𪣣𫭰-𫭻𭎜-𭎨𰉮-𰉶埜-埩埫-堕㙇-㙍𡌦-𡍣𪣤-𪣱𫭼-𫮅𭎩-𭎵𰉷-𰊀埪堖-堼堾-塂塄-塈㙎-㙘𡍤-𡎭𪣲-𪣽𫝟𫮆-𫮑𭎶-𭏋𰊁-𰊌堽塃塉-塱㙙-㙟𡎮-𡏬𧯧𪣾-𪤍𫮒-𫮚𭏌-𭏜𰊍-𰊘塲-墛㙠-㙦𡏭-𡐝𦥈𪤎-𪤘𫝠𫮛-𫮢𭏝-𭏩𰊙-𰊥墜-墧墩-墹㙧-㙯𠚛𡐞-𡑝𪤙-𪤞𫮣-𫮬𭏪-𭏵𰊦-𰊱墺-壌龳㙰-㙶𡑞-𡑹𡑻-𡒈𪤟-𪤥𫝡𫮭-𫮯𭏶-𭏽𰊲-𰊸壍-壗龼㙷-㙺𡒉-𡒠𡒢-𡒯𪤦-𪤫𫮰-𫮵𭏾-𭐀𰊹𰊺壘壙㙻-㙽𡒰-𡒿𡓁-𡓋𡓍-𡓏𪤬-𪤯𫮶-𫮸𭐁-𭐄𰊻-𰋀壚-壠壢㙾㙿𡓀𡓌𡓐-𡓚𡓜-𡓥𪤰𫮹-𫮼𭐅-𭐉𰋁𰋂壣-壥㚀𡓦-𡓰𪤱𫮽-𫮿𭐊𭐋𰋃𰋄壦𡓱-𡓶𡓸𡓹𡓻-𡔁𫯀𭐌-𭐎𡓺𡔂-𡔉𭐏𰋅壧壨𡔊-𡔎𰋆壩㚁𡔏-𡔕𭐐壪㚂𡔖𭐑𰋇𡔗-𡔚]
+[radical 32=⼟土:土-圡龶𡈼-𡈾𫭖𰉕圢-圧㘦𡈿-𡉇𪢱𪢲𫭗𫭘𭍺𰉖𰉗在-场𡉈-𡉖𪢳-𪢷𫭙𫭚𭍻-𭍽圻-坠㘧-㘰𡉘-𡊃𪢸-𪣂𫭛-𫭤𭍾-𭎄𰉘-𰉞坡-垊㘱-㘵𡊄-𡊶𪣃-𪣊𫭥-𫭨𭎅-𭎎𰉟-𰉤型-垵城鿍㘶-㘾𡊷-𡋛𡋝-𡋬𪣋-𪣓𫭩-𫭯𭎏-𭎛𰉥-𰉭垶-埍埏-埛﨏㘿-㙆𡋭-𡌥𣑧𪣔-𪣣𫭰-𫭻𭎜-𭎨𰉮-𰉶埜-埩埫-堕㙇-㙍𡌦-𡍣𪣤-𪣱𫭼-𫮅𭎩-𭎵𰉷-𰊀埪堖-堼堾-塂塄-塈鿾㙎-㙘𡍤-𡎭𪣲-𪣽𫝟𫮆-𫮑𭎶-𭏋𰊁-𰊌堽塃塉-塱㙙-㙟𡎮-𡏬𧯧𪣾-𪤍𫮒-𫮚𭏌-𭏜𰊍-𰊘塲-墛㙠-㙦𡏭-𡐝𦥈𪤎-𪤘𫝠𫮛-𫮢𭏝-𭏩𰊙-𰊥墜-墧墩-墹㙧-㙯𠚛𡐞-𡑝𪤙-𪤞𫮣-𫮬𭏪-𭏵𰊦-𰊱墺-壌龳㙰-㙶𡑞-𡑹𡑻-𡒈𪤟-𪤥𫝡𫮭-𫮯𭏶-𭏽𰊲-𰊸壍-壗龼㙷-㙺𡒉-𡒠𡒢-𡒯𪤦-𪤫𫮰-𫮵𭏾-𭐀𰊹𰊺壘壙㙻-㙽𡒰-𡒿𡓁-𡓋𡓍-𡓏𪤬-𪤯𫮶-𫮸𭐁-𭐄𰊻-𰋀壚-壠壢㙾㙿𡓀𡓌𡓐-𡓚𡓜-𡓥𪤰𫮹-𫮼𭐅-𭐉𰋁𰋂壣-壥㚀𡓦-𡓰𪤱𫮽-𫮿𭐊𭐋𰋃𰋄壦𡓱-𡓶𡓸𡓹𡓻-𡔁𫯀𭐌-𭐎𡓺𡔂-𡔉𭐏𰋅壧壨𡔊-𡔎𰋆壩㚁𡔏-𡔕𭐐壪㚂𡔖𭐑𰋇𡔗-𡔚]
[radical 33=⼠士:士-壭𡔛壮𡔜壯-壳𡔝𡔞𰋈𡔟𭐒壴壵𡔠-𡔢𫯁𫯂壶𡔣-𡔩𪤲𰋉壷壸𡔪-𡔭壹-壻㚃𡔮𡔯𭐓-𭐕壼𡔰𡔲-𡔵𪤳𭐖𰋊壽壾𡔶𡔸-𡔻𫯃𫯄𭐗𰋋𰋌壿夀㚄𡔼𡔽𫯅𭐘夁𡔾-𡕄𭐙𡕅𡕇-𡕌𭐚𡕍𫯆𫯇𰋍𡅕𡕏-𡕑𪤴𫯈𭐛𫯉𭐜]
[radical 34=⼡夂:夂𡕒夃处𡕓𡕔𭐝夅𡕕𡕖夆𡕗-𡕙备夈㚅𡕚𭐞𰋎𠙚𡕛𡕜𪌛𡕝𫯊𪤵]
[radical 35=⼢夊:夊𭐟𡕞𡕟夋𡕠𡕡夌𡕢-𡕥𭐠𭐡変复㚆㚇𭐢-𭐤夎夏𠀼𡕦𫯋𫯌𭐥𭐦𡕧-𡕬𭐧𠌞𡕭𰋏𠭶𡕮-𡕱𪤶𭐨𭐩夐𡕲-𡕵𭐪𭐫𡕶𡕷𭐬𡕸-𡕺𭐭𭐮𡕻𭐯夑夓𡕼-𡕿𭐰夒𡖀𭐱𡖁夔𭐲𡖂𡖃]
@@ -53,7 +53,7 @@
[radical 41=⼨寸:寸𡬝对㝳寺-导𡬞𪧷𭔩寽-寿㝴𭔪尀㝵𡬟-𡬦𭔫𭔬封専将𡬧-𡬬𫴬𭔭-𭔯尃-尅㝶𡬭𫴭𭔰-𭔲將-尉𡬮-𡬲𪧸𪧹𭔳-𭔵尊-尌㝷𡬳-𡬸𪧺𫴮𫴯𭔶-𭔸𡬹-𡬼𫴰-𫴳𭔹-𭔼對𡬽-𡭂𭔽-𭔿𰍥導𡭃-𡭉𣊒𪧻𪧼𫴴𫴵𭕀𭕁𰍦𡭊-𡭌𪧽𭕂𡭍-𡭏𪧾𡭐𡭑𭕃𡭒𡭓𫴶𫴷]
[radical 42=⼩小:小𡭔𭕄𰍧𰍨尐少𡭕𡭖尒-尕龸𡭗𡭘𰍩尖-尘𡭙-𡭜𭕅𡭝-𡭤𪧿𫴸𫴹𭕆𭕇𰍪尙尚𠈤𡭥-𡭩𪨀𫴺𫴻𭕈𭕉尛-尝𡭪-𡭳𫴼𫴽𭕊𰍫㝸𡭴-𡭼𪨁𪨂𡭽-𡮍𫴾-𫵃尞㝹𡮎-𡮗𫵄𫵅尟尠𠅽𡮘-𡮝𭕋尡㝺𡮞-𡮥𪨃𫵆𫵇㝻𡮦-𡮯𪨄𫵈𫵉𡮰-𡮳𪨅𫵊-𫵌𭕌𡮴-𡮶𢇔𪨆𰍬𡮷-𡮻𤯏𡮼-𡮾𫵍𡮿𡯀]
[radical 43=⼪尢:尢尣𡯁𡯂尤𡯃-𡯊𫵎尥-尧㝼𡯋-𡯎𭕍尨-尬㝽𡯏-𡯙𫵏尭㝾㝿𡯚-𡯡𫵐𭕎𰍭尮尯㞀㞁𡯢-𡯤𡯦𡯧𰍮㞂𡯨-𡯲𰍯㞃-㞆𡯳-𡯸𫵑𭕏𭕐尰就㞇㞈𡯹-𡰂𪨇尲-尴㞉㞊𡰃-𡰊𪨈𭕑𭕒𡰋-𡰏𭕓尵𡰐-𡰕𫵒𡰖-𡰚尶尷𡰛-𡰢]
-[radical 44=⼫尸:尸𡰣尺𪛛𰍰尻尼㞋𡰤-𡰨𡰴𭕔尽㞌㞍𡰩-𡰳𫝲尾-屃㞎𡰵-𡰽𪨉-𪨋𫵓-𫵕𰍱𰍲屄-届㞏-㞑𡰾-𡱋𪨌𫵖-𫵘𭕕-𭕘𰍳𰍴屋-屏㞒-㞖𡱌-𡱡𢇀𪨍𪨎𫵙-𫵝𭕙-𭕝𰍵-𰍷屐-屘㞗𡱢-𡱹𪨏𪨐𫵞𫵟𭕞𭕟𰍸-𰍻屙-屝㞘㞙𡱺-𡲓𪨑𫵠𭕠-𭕣𰍼-𰍾属-屡㞚㞛𡲔-𡲫𪨕-𪨘𭕤𰍿𰎀𡲬-𡳃𪨒-𪨔𫵡𭕥-𭕭𰎁屢屣㞜-㞞𡳄-𡳏𪨙𪨚𫵢-𫵥𭕮𭕯𰎂層-屧㞟㞠𡳐-𡳞𪨛𪨜𭕰-𭕵𰎃-𰎅𡳟-𡳧𪨝𫵦𫵧𰎆屨𡳨𡳩𪨞𫵨𭕶屩屪𡳪𡳫𫵩𭕷𭕸屫㞡𡳬-𡳰𪨟𪨠𫵪𫵫𭕹𭕺𰎇𡳱-𡳴屬𡳵-𡳷𫵬𫵭𭕻𡳸-𡳺𪨡𭕼屭𡳻𭕽𡳼𡳽]
+[radical 44=⼫尸:尸𡰣尺𪛛𰍰尻尼㞋𡰤-𡰨𡰴𭕔尽㞌㞍𡰩-𡰳𫝲尾-屃㞎𡰵-𡰽𪨉-𪨋𫵓-𫵕𰍱𰍲屄-届㞏-㞑𡰾-𡱋𪨌𫵖-𫵘𭕕-𭕘𰍳𰍴屋-屏㞒-㞖𡱌-𡱡𢇀𪨍𪨎𫵙-𫵝𭕙-𭕝𰍵-𰍷屐-屘㞗𡱢-𡱹𪨏𪨐𫵞𫵟𭕞𭕟𰍸-𰍻屙-屝㞘㞙𡱺-𡲓𪨑𫵠𭕠-𭕣𰍼-𰍾属-屡㞚㞛𡲔-𡲫𪨕-𪨘𫵡𭕤𰍿𰎀𡲬-𡳃𪨒-𪨔𭕥-𭕭𰎁屢屣㞜-㞞𡳄-𡳏𪨙𪨚𫵢-𫵥𭕮𭕯𰎂層-屧㞟㞠𡳐-𡳞𪨛𪨜𭕰-𭕵𰎃-𰎅𡳟-𡳧𪨝𫵦𫵧𰎆屨𡳨𡳩𪨞𫵨𭕶屩屪𡳪𡳫𫵩𭕷𭕸屫㞡𡳬-𡳰𪨟𪨠𫵪𫵫𭕹𭕺𰎇𡳱-𡳴屬𡳵-𡳷𫵬𫵭𭕻𡳸-𡳺𪨡𭕼屭𡳻𭕽𡳼𡳽]
[radical 45=⼬屮:屮䶹𡳾屯㞢𡳿𭕾屰𡴀-𡴅𭕿㞣㞷𡴆-𡴚𫵮𡴛-𡴣𰎈𡴤𡴥𫵯𫵰𡴦-𡴬]
[radical 46=⼭山:山乢屲𡴭-𡴯屳-屷㞤-㞧𡴰-𡴽𫵱-𫵴𭖀屸-岃㞨-㞯𡴾-𡵒𪨢-𪨥𫝳𫵵𭖁-𭖄𰎉岄-岌岎-岜㞰-㞶㞸𡵓-𡶂𪨦-𪨨𫵶𫵷𭖅-𭖊𰎊-𰎍岝-峅㞹-㟃𡶃-𡶣𡶥-𡶪𪨩-𪨮𫵸𫵹𭖋-𭖔𰎎-𰎓岍峆-峧㟄-㟆𡶫-𡷔𪨯-𪨴𫝴𫵺𫵻𭖕-𭖞𰎔-𰎞峨-崅㟇-㟖𡷕-𡸐𦊤𪨵-𪨺𫝵𫵼-𫶀𭖟-𭖨𰎟-𰎤崆-崰㟗-㟥𡸑-𡹩𪨻-𪩁𫶁-𫶅𭖩-𭖱𰎥-𰎨崱-嵉嵋-嵝﨑㟦-㟯𡹪-𡺩𪩂-𪩇𫶆-𫶉𭖲-𭖿𰎩-𰎭嵊嵞-嵶㟰-㟸𡺪-𡻗𪩈-𪩋𫶊-𫶐𭗀-𭗆𰎮-𰎰嵷-嶎㟹-㠄𡻘-𡼉𪩌-𪩒𫶑-𫶔𭗇-𭗓𰎱-𰎴嶏-嶥㠅-㠐𡼊-𡼼𪩓-𪩖𫶕𫶖𭗔-𭗞𰎵-𰎸嶦-嶶㠑-㠗𡼽-𡽈𡽊-𡽛𪩗-𪩚𫶗-𫶜𭗟𭗠𰎹𰎺嶷-嶺嶼-嶿㠘-㠜𡽉𡽜-𡾁𡾻𪩛-𪩝𫶝𭗡-𭗤𰎻巀-巂㠝-㠟𡾂-𡾖𡾠𫶞𭗥-𭗫𰎼-𰎾嶻巃-巅㠠-㠣𡾘-𡾟𡾡-𡾭𣦭𪩞𫶟-𫶣𭗬-𭗱𰎿-𰏁巆-巌㠤𡾮-𡾺𭗲-𭗴巍巏巐㠥㠦𡾼-𡿆𪩟𫶤𭗵𭗶巎巑-巕巗㠧𡿇-𡿑𪩠𭗷巖巘-巚𡿒𡿓𭗸𡿔-𡿜𫶥𭗹𡿝-𡿟𫶦𰏂𡿠𡿡𡿣𡿤㠨𡿢𡿥]
[radical 47=⼮巛:巛-川𡿦𡿨𫶧𡿧𭗺州巟㠩𡿩-𡿭𭗻𭗼巠𡿮-𡿰𪩡𭗽𭗾𡿱-𡿶𭗿𡿷-𡿻𪩢𭘀𰏃𰏄𠙗𡿼𡿽𫶨𭘁巢巣𡿾-𢀀𫶩𢀁𢀂𰏅巤𢀃𰏆𢀄-𢀋𫶪𢀌-𢀐]
@@ -68,12 +68,12 @@
[radical 56=⼷弋:弋𢍺𫠠弌𢍻𢍼弍𭚟-𭚡弎-弐𢍽𢍾㢤𢍿-𢎅𰐍㢥𢎆-𢎌𰐎-𰐐𢎍𭚢弑𢎎弒㢦𢎏𢎐𣦏𭚣𭚤𰐑𢎑𢎒𰐒𢎓-𢎖]
[radical 57=⼸弓:弓𢎗𢎘弔-弖㢧𢎙-𢎡𭚥弗弘𢎢-𢎪弙-弜㢨-㢫𢎫-𢎶𪪺𫸥-𫸧𭚦弝-张㢬㢭𢎷-𢏅𫸨-𫸪𭚧𭚨弡-弪㢮-㢱𢏆-𢏓𪪻𫸫-𫸭𭚩-𭚫𰐓𰐔弫-弯㢲-㢷𠄴𠔘𢏔-𢏣𪪼𪪽𫸮-𫸲𭚬-𭚰𰐕𰐖弰-弳㢸㢹𢏤-𢏭𪪾𫸳-𫸶𭚱-𭚵𰐗𰐘弴-弹㢺-㢼𢏮-𢏿𪪿𫸷𫸸𭚶-𭚹𰐙-𰐛强-弾㢽-㢿𢐀-𢐉𪫀𪫁𫸹𫸺𭚺-𭛁𰐜-𰐞弿-彂㣀-㣂𢐊-𢐑𭛂𭛃彃-彅㣃𢐒-𢐝𪫂𫸻𭛄𰐟彆-彉㣄㣅𢐞-𢐤𫸼𫸽𭛅-𭛇𰐠彊彋𢐥-𢐪𫸾𫸿𭛈𭛉彌𢐬-𢐱𪫃𫹀𭛊𭛋彍𢐲-𢐷𫹁𭛌𢐸-𢐾𤯽𢐿-𢑅𫹂𰐡㣆𢑆-𢑉𪫄𫹃𰐢彎𢑊彏𢑋𢑌𪫅𢑍𢑎]
[radical 58=⼹彐:彐-当𢑏-𢑒𪫆𢑓彔录㣇𢑔𢑕𫹄𭛍𭛎彖𢑗-𢑚𭛏𢑛-𢑝彗𢑞-𢑡𭛐𰐣彘𢑢-𢑤𫹅𫹆𭛑𭛒彙彚𢑥-𢑧𰐤𰐥𢑨-𢑮𣼙𫹇𫹈彛彜㣈𢑯𢑱𢑲彝彞𢑳-𢑶𪫇彟𢑷-𢑾彠𢑿]
-[radical 59=⼺彡:彡𢒀-𢒂㣉𢒃-𢒆形-彤㣊𢒇𢒈𰐦㣋-㣍𢒉-𢒍𭛓𰐧彥彦𢒎𫝸𰐨彧彨𢒏-𢒓𣥲𪫈𫹉𰐩𰐪彩彫彬㣎𢒔-𢒝彭㣏㣐𢒞-𢒣𰐫彮𢒤-𢒨𭛔𭛕彯彰㣑𢒩𢒪𭛖-𭛘影㣒𢒫-𢒯𪫉𭛙-𭛛㣓𢒰-𢒴𪫊𫹊𢒵𢒷𢒶彲𢒸-𢒻]
+[radical 59=⼺彡:彡𢒀-𢒂㣉𢒃-𢒆形-彤㣊𢒇𢒈𰐦㣋-㣍𢒉-𢒍𭛓𰐧彥彦𢒎𫝸𰐨彧彨𢒏-𢒓𣥲𪫈𫹉𰐩𰐪彩彫彬㣎𢒔-𢒝彭㣏㣐𢒞-𢒣𰐫彮𢒤-𢒨𭛔𭛕彯彰㣑𢒩𢒪𭛖-𭛘影㣒𢒫-𢒯𪫉𭛙-𭛛㣓𢒰-𢒴𪫊𢒵𫹊𢒷𢒶彲𢒸-𢒻]
[radical 60=⼻彳:彳𢒼𢒽㣔𢒾𢒿𫹋彴彵㣕𢓀-𢓃𫹌𭛜𭛝𰐬彶-彻鿈鿉㣖㣗𢓄-𢓑𪫋𫹍-𫹐𭛞彼-径㣘㣙𢓒-𢓛𪫌𫹑𭛟-𭛦𰐭待-徍徔㣚-㣡𢓜-𢓩𫹒𫹓𭛧-𭛩徎-従徕㣢㣣𢓪-𢔀𪫍𪫎𫹔𫹕𭛪-𭛮𰐮𰐯徖-徙徛-徤㣤-㣩𢔁-𢔞𪫏𪫐𫹖-𫹘𭛯-𭛶𰐰-𰐳徚徥-徫㣪-㣮𢔟-𢔫𢔭-𢔱𪫑-𪫓𫹙-𫹝𭛷-𭛼𰐴𰐵徬-徰㣯𢔲-𢕎𢕧𪫔𪫕𫹞-𫹠𭛽𰐶徱徳徴㣰-㣲𢕏-𢕦𢕨𢕩𪫖-𪫘𫹡𫹢𭛾-𭜀𰐷徲徵-徺㣳㣴𢕪-𢕸𫹣-𫹥𭜁-𭜅徻徼㣵㣶𢕹-𢖄𢖆𢖇𪫙𭜆-𭜈𰐸徽徾㣷𢖈-𢖊𢖌-𢖎𪫚𫹦𢖏-𢖗𪫛𪫜𫹧𫹨𭜉𰐹徿㣸𢖘-𢖚𢖜𭜊忀忁㣹𢖝-𢖠𢖢忂𢖣𢖤𫹩𢖥𢖦𫹪𢖧𢖨]
[radical 61=⼼心:心忄𢖩必忆㣺𢖪𰐺忇-忊㣻𢖫-𢖱𪫝𫹫-𫹭𰐻𰐼忋-応㣼-㤀𢖲-𢗈𪫞𫹮-𫹱𭜋-𭜎𰐽-𰑀忝-怆㤁-㤋𢗉-𢗾𪫟-𪫥𫝹𫹲-𫹹𭜏-𭜘𰑁-𰑉怇-怿㤌-㤙𢗿-𢘳𪫦-𪫬𫹺-𫹿𭜙-𭜧𰑊-𰑓恀-恽㤚-㤭㤺𢘴-𢙰𪫭-𪫴𫺀-𫺋𭜨-𭜵𰑔-𰑛恾-悯㤮-㤹㤻-㤽𢙱-𢚿𪫵-𪫾𫺌-𫺕𭜶-𭝋𰑜-𰑦悰-惯㤾-㥙𢛀-𢜧𪫿-𪬆𫺖-𫺟𭝌-𭝠𰑧-𰑯惰-愦慨㥚-㥫𢜨-𢞌𪬇-𪬒𫺠-𫺭𭝡-𭝶𰑰-𰑻愧-慑㥬-㥻𢞍-𢟟𪬓-𪬞𫺮-𫺷𭝷-𭞌𰑼-𰒄慒-慧慩-慬慮-憈㥼-㦈𠕫𢟠-𢠰𦑑𪬟-𪬧𫺸-𫻂𭞍-𭞥𰒅-𰒊慭憉-憳㦉-㦖𢠱-𢢑𪬨-𪬭𫻃-𫻉𭞦-𭞹𰒋-𰒓憴-憺憼-懔㦗-㦙𢢒-𢣍𦡗𪬮-𪬶𫻊-𫻏𭞺-𭟄𰒔-𰒖憻懕-懨㦚-㦠𢣎-𢣺𪬷-𪬹𫻐-𫻒𭟅-𭟌𰒗-𰒚懩-懴㦡㦢𢣻-𢤥𦻇𪬺-𪬾𫻓-𫻙𭟍-𭟗𰒛-𰒞懵-懸㦣-㦧𢤦-𢥊𪬿𪭀𫻚-𫻜𭟘-𭟞𰒟𰒠懹-懻㦨-㦪𢥋-𢥖𪭁𪭂𫻝-𫻡𭟟-𭟢𰒡-𰒣懼-懿𢥗-𢥤𪭃𪭄𫻢-𫻤𭟣-𭟦戀-戂㦫㦬𢥥-𢥮𪭅𪭆𭟧戃戄𢥯-𢥺𪭇戅戆𢥻-𢦂𭟨-𭟪𪭈𭟫𭟬𢦃𢦄𭟭戇㦭𢦅-𢦇𫻥𢦈-𢦋]
[radical 62=⼽戈:戈-戋𢦌𢦍𪭉𭟮戌-成𢦎-𢦑𪭊𫻦𫻧我-戓㦮㦯𢦒-𢦙𫻨𭟯戔-戗㦰-㦲𢦚-𢦥𫻩𫻪𭟰-𭟲𰒤𰒥战㦳𢦦-𢦶𪭋𪭌𫻫𫻬𭟳𰒦-𰒨戙㦴-㦶𢦷-𢦾𪭍𪭎𫻭-𫻱𰒩戚-戝㦷𢦿-𢧇𪭏𪭐𫻲-𫻶𭟴𭟵𰒪戞戟戦㦸𢧈-𢧓𪭑𫻷-𫻾𭟶𰒫戠-戥㦹𢧔-𢧡𪭒𫻿𫼀𭟷𰒬-𰒮戧-戬㦺𠎶𢧢-𢧧𢧩-𢧱𪭓𫼁𭟸𭟹𰒯戭-戯戱㦻㦼𢧨𢧲-𢨆𫼂𫼃𭟺-𭟼𰒰𰒱戰𢨇-𢨏𢨑𢨒𪭔-𪭖𫼄-𫼈𭟽𰒲𰒳戲戴㦽𢨓-𢨗𭟾戳𢨘-𢨣戵𪭗]
[radical 63=⼾戶:戶-戹𢨤𢨥𭟿𢨦-𢨩戺-戼㦾𢨪-𢨮𭠀戽-所㦿㧀𢨯-𢨵𫼉𭠁𭠂扁-扃㧁㧂𢨶-𢩄𪭘𫼊𭠃-𭠆扄-扇𢩅-𢩌𫼋𫼌扈𢩍-𢩐𪭙𫼍𫼎扉扊𢩑-𢩕𫼏𫼐𭠇-𭠉𰒴𢩖𢩗𤟵𫼑𢩘-𢩞𪭚𭠊𰒵𢩟𭠋𰒶𢩠𢩡𨐳𢩢𪭛𢩣𢩤𭠌𫼒]
-[radical 64=⼿手:手-才龵𭠍扎𢩥-𢩧𫼓扐-扖㧃-㧅𢩨-𢩬𫼔𭠎𰒷-𰒻扏扗-扞扠-扬㧆-㧈𢩭-𢪂𪭜𫼕-𫼗𭠏𭠐𰒼𰒽扟扭-扷批-报㧉-㧑𢪃-𢪳𪭝-𪭣𫼘-𫼛𭠑-𭠖𰒾-𰓋扸抦-择㧒-㧠𢪴-𢫣𪭤-𪭪𫝺𫼜-𫼡𭠗-𭠡𰓌-𰓖拪-挧㧡-㧱𢫤-𢬮𪭫-𪭳𫝻𫼢-𫼰𭠢-𭠲𰓗-𰓪挨-捤㧲-㧸𢬯-𢮀𪭴-𪮀𫼱-𫽀𭠳-𭡈𰓫-𰓹捥-掱掳-掽㧹-㨈𢮁-𢯨𪮁-𪮋𫽁-𫽖𭡉-𭡝𰓺-𰔄掲掾-揄揆-搅摒㨉-㨕㨗㨘𢯩-𢰾𢱀-𢱞𪮌-𪮖𫝼𫽗-𫽨𭡞-𭡱𰔅-𰔑搆-搰搲-摊㨖㨙-㨬𢱟-𢲲𪮗-𪮢𫝽𫽩-𫽶𭡲-𭢆𰔒-𰔞揅摋-摑摓-摕摗-撄撇㨭-㩂𢲳-𢴔𢴖-𢴟𪮣-𪮪𫝾𫽷-𫾁𭢇-𭢖𰔟-𰔥搱摖撅撆撈-撺擆㩃-㩑𢴕𢴠-𢵾𢷅𪮫-𪮴𫾂-𫾉𭢗-𭢢𰔦-𰔩撻-擅擇-擞㩒-㩙𢵿-𢷄𢷆-𢷊𪮵-𪮷𫾊-𫾏𭢣-𭢱𰔪-𰔲擟-擤擦-擱㩚-㩟𢷋-𢷵𪮸-𪮺𫾐-𫾒𭢲-𭢽𰔳-𰔷擥擲-攆㩠-㩫𢷶-𢸢𪮻-𪯀𫝿𫾓-𫾘𭢾-𭣃𰔸𰔹攇-攐攒㩬㩭𢸣-𢹌𪯁𫾙𫾚𭣄-𭣋𰔺攑攓-攚㩮-㩰𢹍-𢹡𢹣-𢹫𪯂𫾛𭣌-𭣐𰔻𰔼攛-攝㩱-㩴𢹢𢹬-𢺁𫾜-𫾞𭣑𭣒𰔽𰔾攞-攤攦攧鿜𢺂-𢺕𪯃𫾟𫾠𰔿攥攨-攫㩵-㩷𢺖-𢺝𪯄𫾡攬攭𢺞-𢺫𫾢攮㩸㩹𢺬-𢺳𭣓𢺴]
+[radical 64=⼿手:手-才龵𭠍扎𢩥-𢩧𫼓扐-扖㧃-㧅𢩨-𢩬𫼔𭠎𰒷-𰒻扏扗-扞扠-扬㧆-㧈𢩭-𢪂𪭜𫼕-𫼗𭠏𭠐𰒼𰒽扟扭-扷批-报㧉-㧑𢪃-𢪳𪭝-𪭣𫼘-𫼛𭠑-𭠖𰒾-𰓋扸抦-择㧒-㧠𢪴-𢫣𪭤-𪭪𫝺𫼜-𫼡𭠗-𭠡𰓌-𰓖拪-挧㧡-㧱𢫤-𢬮𪭫-𪭳𫝻𫼢-𫼰𭠢-𭠲𰓗-𰓪挨-捤㧲-㧸𢬯-𢮀𪭴-𪮀𫼱-𫽀𭠳-𭡈𰓫-𰓹捥-掱掳-掽㧹-㨈𢮁-𢯨𪮁-𪮋𫽁-𫽖𭡉-𭡝𰓺-𰔄掲掾-揄揆-搅摒㨉-㨕㨗㨘𢯩-𢰾𢱀-𢱞𪮌-𪮖𫝼𫽗-𫽨𭡞-𭡱𰔅-𰔑搆-搰搲-摊㨖㨙-㨬𢱟-𢲲𪮗-𪮢𫝽𫽩-𫽶𭡲-𭢆𰔒-𰔞揅摋-摑摓-摕摗-撄撇㨭-㩂𢲳-𢴔𢴖-𢴟𪮣-𪮪𫝾𫽷-𫾁𭢇-𭢖𰔟-𰔥搱摖撅撆撈-撺擆㩃-㩑𢴕𢴠-𢵾𢷅𪮫-𪮴𫾂-𫾉𭢗-𭢢𰔦-𰔩撻-擅擇-擞㩒-㩙𢵿-𢷄𢷆-𢷊𪮵-𪮷𫾊-𫾏𭢣-𭢱𰔪-𰔲擟-擤擦-擱㩚-㩟𢷋-𢷵𪮸-𪮺𫾐-𫾒𭢲-𭢽𰔳-𰔷擥擲-攆㩠-㩫𢷶-𢸢𪮻-𪯀𫝿𫾓-𫾘𭢾-𭣃𰔸𰔹攇-攐攒㩬㩭𢸣-𢹌𪯁𫾙𫾚𭣄-𭣋𰔺攑攓-攚㩮-㩰𢹍-𢹡𢹣-𢹫𪯂𫾛𭣌-𭣐𰔻𰔼攛-攝㩱-㩴𢹢𢹬-𢺁𫾜𫾞𭣑𭣒𰔽𰔾攞-攤攦攧鿜𢺂-𢺕𪯃𫾝𫾟𫾠𰔿攥攨-攫㩵-㩷𢺖-𢺝𪯄𫾡攬攭𢺞-𢺫𫾢攮㩸㩹𢺬-𢺳𭣓𢺴]
[radical 65=⽀支:支𭣔攰𢺵𭣕𢺶𭣖𰕀㩺𢺷-𢺽𪯆攱𢺾-𢻀𭣗𭣘㩻㩼𢻁-𢻇𢻉𰕁㩽𢻊-𢻍𪯅攲㩾𢻎-𢻙𭣙𭣚𰕂𢻚-𢻜𫾣𢻝-𢻟𪯇𭣛攳𢻠-𢻤𫾤𭣜𭣝𢻥-𢻩𭣞𫾥𭣟𢻪𭣠]
[radical 66=⽁攴:攴-攷𫾦𭣡𰕃攸-攼㩿㪀𢻫-𢻲𫾧𭣢𭣣攽-政㪁㪂𢻳-𢼈𪯈𫾨𭣤𰕄-𰕆敀-故㪃-㪆𢼉-𢼚𪯉𪯊𫾩𭣥-𭣩𰕇敆-敌㪇-㪉𢼛-𢼸𣁋𪯋𪯌𫾪-𫾰𭣪-𭣱𰕈啟敍-敛㪊-㪎𢼹-𢽙𢽜𢽷𪯍𪵊𫾱-𫾸𭣲-𭣵𰕉𰕊敜-敪敭㪏-㪚𢽚𢽛𢽝-𢽶𢽸-𢽾𢾣𪯎𪯏𫾹-𫿀𭣶-𭣻𰕋-𰕎敫敬敮-数㪛-㪟𢽿-𢾢𢾤𪯐𫿁-𫿇𭣼-𭤂𰕏𰕐敱-敳㪠-㪣𢾦-𢿅𪯑𪯒𫿈-𫿌𭤃-𭤇𰕑整-敻㪤-㪦𢿇-𢿝𣁛𪯓-𪯖𫿍-𫿐𭤈-𭤋𰕒𰕓敼-敿㪧-㪪𢿞-𢿽𪯗-𪯙𫿑-𫿗𰕔𰕕斀-斂𢿾-𣀃𣀅-𣀏𪯚𫿘-𫿚𭤌𭤍𰕖𰕗斃贁㪫㪬𣀄𣀐-𣀚𪯛𪯜𫿛-𫿝𭤎𭤏斄𣀛-𣀢𩠮𫿞-𫿢𰕘斅斆㪭𣀣-𣀭𩠰𫿣-𫿦𰕙㪮𣀮-𣀲𪯝𪯞𫿧𫿨𭤐𭤑𣀳𣀴𫿩𭤒𣀵-𣀺𪯟𫿪-𫿬𣀻𣀼𭤓𣀽-𣁀]
[radical 67=⽂文:文𣁁𫿭斈㪯𣁂𪯠𭤔斉𣁃-𣁅𪯡𪯢𣁆-𣁉𪯣𫿮𫿯𭤕-𭤙𰕚斊斋㪰𣁊𣁌𣁍𪯤𫿰斌-斏𣁎-𣁓𣁚斐斑𣁔-𣁖𪯥-𪯧𫿱斒㪱𣁗-𣁙𩖰𪯨-𪯪𰕛𣁜-𣁡斓𣁢-𣁤𭤚𭤛𣁥𣁦𰕜斔𣁧𣁨𫿲斕𣁩𣁪斖𣁫]
@@ -81,10 +81,10 @@
[radical 69=⽄斤:斤𣂑斥𭤟𣂒𣂓斦-斩𣂔-𣂘𪯱𭤠𰕝𰕞斪斫㪼㪽𣂙𣂚𭤡𭤢㪾㪿𣂛-𣂝斬断𣂞-𣂠𫿹𫿺斮斯㫀𣂡-𣂪𣂬𣂭𫿻𫿼𰕟新斱𣂮-𣂵𥇴𭤣𭤤𰕠斲㫁𣂶-𣂺𭤥𰕡斳㫂𣂻-𣂿𰕢斴𣃀-𣃆𫿽𰕣𰕤斵斶𣃇-𣃋𭤦斷𣃌-𣃐𰕥𣃑-𣃓𫿾𣃔𣃕𫿿𣃖斸𰕦]
[radical 70=⽅方:方𭤧㫃𣃗𭤨-𭤪𣃘𣃙斺-於㫄𣃚-𣃜𪯲𪯳𬀀𭤫𭤬施-旀㫆𣃝-𣃥𪯴𭤭-𭤴𰕧旁-旆旊㫅㫇-㫉𣃦-𣃲𪯵-𪯷𬀁-𬀆𭤵-𭤹𰕨旇-旉旋-族㫊-㫌𣃳-𣃻𪯸𫞀𬀇𬀈𭤺𰕩-𰕫旐旑㫍𣃼-𣄇𪯹-𪯼𬀉𬀊𭤻-𭤾𰕬𰕭旒-旕𣄈-𣄍𪯽𫞁𬀋-𬀍𭤿𭥀𰕮旖旗𣄎-𣄓𪯾𬀎-𬀐𭥁𰕯㫎㫏𣄔-𣄖𪯿𪰀𬀑𬀒𭥂-𭥄旘旙𣄗-𣄜𪰁𪰂𬀓-𬀖𭥅旚𣄝𬀗𭥆旛𣄞-𣄣𬀘-𬀛𭥇𭥈旜-旞𣄤𪰃𪰄𬀜𬀝𭥉旟𣄥𪰅𬀞-𬀠𣄦𬀡𣄧𣄨𬀢𣄩𬀣𣄪-𣄬𬀤]
[radical 71=⽆无:无旡𣄭𰕰𣄮𣄯既𣄰-𣄳旣𬀥𣄴𣄵旤𣄶-𣄺𭥊]
-[radical 72=⽇日:日-旧𣄻-𣄽𭥋旨-旯㫐㫑𣄾-𣅃𣅅𬀦𭥌-𭥎𰕱𰕲旰-旸㫒-㫗𣅄𣅆-𣅙𪰆𪰇𬀧𬀨𭥏-𭥑𰕳旹-昙㫘-㫚𣅚-𣅶𪰈-𪰎𬀩-𬀫𭥒-𭥠𰕴-𰕷昚-昿㫛-㫤𣅷-𣆈𣆊-𣆑𪰏-𪰘𫞂𫞃𬀬-𬀮𭥡-𭥭𰕸-𰕾晀-晖㫥-㫮𣆒-𣆱𪰙-𪰤𫞄𬀯-𬀴𭥮-𭦃𰕿-𰖆勗晗-晩曽㫯-㫴𣆲-𣇡𪰥-𪰨𬀵-𬀺𭦄-𭦘𰖇-𰖌晪-暃暑㫵-㬀𣇢-𣈣𪰩-𪰮𬀻-𬁁𭦙-𭦧𰖍-𰖕暄-暐暒-暙㬁-㬌𣈤-𣉑𪰯-𪰷𬁂-𬁉𭦨-𭧁𰖖-𰖚暚-暨㬍-㬐𣉒-𣉠𣉢-𣉺𪰸-𪰽𬁊-𬁏𭧂-𭧑𰖛-𰖠暩-暷㬑-㬖𣉻-𣊈𣊊-𣊑𣊓-𣊝𣋇𪰾-𪱅𬁐-𬁒𭧒-𭧡𰖡-𰖪暸-曍龧㬗-㬟𣊉𣊞-𣋆𣋈𪱇-𪱌𬁓-𬁘𭧢-𭧴𰖫-𰖮曎-曗曚㬠-㬢𠁞𣋉-𣋝𪱆𪱍𬁙-𬁛𭧵-𭧾𰖯-𰖲曘曙曛曜㬣-㬨𠆛𣋞-𣋱𥫂𪱎-𪱐𬁜𭧿-𭨉𰖳-𰖵曝-曢㬩㬪𣋲-𣋾𭨊-𭨌𰖶-𰖸曣-曨㬫𣋿-𣌇𬁝𬁞𭨍-𭨐曩𣌈-𣌌𪱑-𪱓𭨑𰖹-𰖻㬬㬭𣌍-𣌕𰖼曪-曬㬮𣌖𭨒𰖽曭曮𣌗-𣌙𣌛𪱔𭨓𭨔曯㬯𣌜𣌝𭨕𭨖𰖾𭨗𣌟𣌠]
+[radical 72=⽇日:日-旧𣄻-𣄽𭥋旨-旯㫐㫑𣄾-𣅃𣅅𬀦𭥌-𭥎𰕱𰕲旰-旸㫒-㫗𣅄𣅆-𣅙𪰆𪰇𬀧𬀨𭥏-𭥑𰕳旹-昙㫘-㫚𣅚-𣅶𪰈-𪰎𬀩-𬀫𭥒-𭥠𰕴-𰕷昚-昿㫛-㫤𣅷-𣆈𣆊-𣆑𪰏-𪰘𫞂𫞃𬀬-𬀮𭥡-𭥭𰕸-𰕾晀-晖㫥-㫮𣆒-𣆱𣈰𪰙-𪰤𫞄𬀯-𬀴𭥮-𭦃𰕿-𰖆勗晗-晩曽㫯-㫴𣆲-𣇡𪰥-𪰨𬀵-𬀺𭦄-𭦘𰖇-𰖌晪-暃暑㫵-㬀𣇢-𣈣𪰩-𪰮𬀻-𬁁𭦙-𭦧𰖍-𰖕暄-暐暒-暙㬁-㬌𣈤-𣈯𣈱-𣉑𪰯-𪰷𬁂-𬁉𭦨-𭧁𰖖-𰖚暚-暨㬍-㬐𣉒-𣉠𣉢-𣉺𪰸-𪰽𬁊-𬁏𭧂-𭧑𰖛-𰖠暩-暷㬑-㬖𣉻-𣊈𣊊-𣊑𣊓-𣊝𣋇𪰾-𪱅𬁐-𬁒𭧒-𭧡𰖡-𰖪暸-曍龧㬗-㬟𣊉𣊞-𣋆𣋈𪱇-𪱌𬁓-𬁘𭧢-𭧴𰖫-𰖮曎-曗曚㬠-㬢𠁞𣋉-𣋝𪱆𪱍𬁙-𬁛𭧵-𭧾𰖯-𰖲曘曙曛曜㬣-㬨𠆛𣋞-𣋱𥫂𪱎-𪱐𬁜𭧿-𭨉𰖳-𰖵曝-曢㬩㬪𣋲-𣋾𭨊-𭨌𰖶-𰖸曣-曨㬫𣋿-𣌇𬁝𬁞𭨍-𭨐曩𣌈-𣌌𪱑-𪱓𭨑𰖹-𰖻㬬㬭𣌍-𣌕𰖼曪-曬㬮𣌖𭨒𰖽曭曮𣌗-𣌙𣌛𪱔𭨓𭨔曯㬯𣌜𣌝𭨕𭨖𰖾𭨗𣌟𣌠]
[radical 73=⽈曰:曰-曳㬰𭨘更曵𣌡𣌢𬁟𬁠曶𣌣-𣌦𬁡曷𣆉𣌧-𣌬𭨙𭨚書曺𣌭-𣌶𬁢𭨛𭨜曹曻曼𣌷-𣌺𬁣𬁤曾替朁朂𣌻-𣌽𬁥-𬁧𭨝𰖿𰗀會𣌾-𣍂朄朅𣍃-𣍅𬁨-𬁪𭨞𰗁𣍆-𣍊𪱕𬁫𭨟-𭨢朆㬱𣍋-𣍎𪱖𪱗㬲𣍏𣍐𬁬𣍑-𣍕𰗂𣍖𣍗𪱘𣍘𣍙𬁭-𬁯朇𭨣𣍚𠑱𰗃𣍛𣍜]
[radical 74=⽉月:月𣍝有𣍞𪱙𬁰𭨤𭨥𣍟-𣍣𪱚𬁱-𬁳𭨦𭨧朊-服㬳䶺䶻𣍤𦙗𪱛𬁴-𬁸𭨨-𭨭𰗄朎-朐𣍥-𣍧𣍩-𣍬𪱜𪱝𬁹𭨮-𭨱𰗅朒-朕㬴㬵𣍭𣍮𪱞𫞅𬁺-𬁼𭨲𭨳𰗆𰗇朖-望㬶㬷𣍱-𣍶𪱠-𪱢𬁽-𬂁𭨴-𭨸朜-期㬸䶼𣍷-𣎃𦜳𪱣𫞆𫞇𬂂-𬂅𭨹-𭨽𰗈𰗉朠䶽𣎄-𣎌𪱤-𪱧𬂆𭨾-𭩀𰗊朢㬺㬻𣎍-𣎑𪱟𪱨-𪱪𬂇-𬂌𭩁-𭩃𰗋膤㬼-㬾𣎒-𣎙𪱫𪱬𬂍𬂎𭩄𭩅𰗌𰗍朣朤㬿𣎚𣎛𣎝-𣎢𪱭𬂏𬂐𭩆-𭩉𰗎㭀𣎜𣎣-𣎨𦡖𬂑-𬂔𭩊-𭩎朦𣎩-𣎭𬂕𬂖𭩏-𭩑𰗏𬂗𬂘𭩒-𭩕朧𣎮𣎯𪱮𪱯𬂙𣎰𣎱𫇃𭩖𣎲𪱰𭩗𬂚]
-[radical 75=⽊木:木朩𣎳𣎴𬂛未-朰𣎵-𣎷𬂜𭩘朱-权㭁𣎸-𣏀𰗐-𰗒杄-杩极㭂-㭆𣏁-𣏓𪱱-𪱵𬂝-𬂟𭩙-𭩛𰗓杪-枀枂-枭㭇-㭐𣏔-𣐇𪱶-𪱹𫞈𬂠-𬂤𭩜-𭩡𰗔-𰗗枮-树㭑-㭗𣐈-𣐴𪱺-𪲂𬂥𬂦𭩢-𭩲𰗘-𰗛栒-桪鿄㭘-㭧𣐵-𣑦𣑨-𣑾𪲃-𪲏𫞉𫞊𬂧-𬂱𭩳-𭪂𰗜-𰗦桫-棂㭨-㭵㭷𣑿-𣓀𪲐-𪲞𬂲-𬂼𭪃-𭪗𰗧-𰗰棃-椮㭶㭸-㮊𣓁-𣔰𪲟-𪲯𬂽-𬃓𭪘-𭪵𰗱-𰗹椯-榉榋榌榔榘﨓㮋-㮠㮢㮣𣔱-𣕣𣕥-𣖩𪲰-𪳇𬃔-𬃮𭪶-𭫎𰗺-𰘆榊榍-榓榕-榗榙-槡槩樮﨔㮤-㮽𣕤𣖪-𣘔𪳈-𪳜𫞋𫞌𬃯-𬄆𭫏-𭫟𰘇-𰘕槢-槨槪-樭樯-樱橥橴㮾-㯏㯑㯒㯠𣘕-𣙑𣙓-𣙺𪳝-𪳬𫞍-𫞏𬄇-𬄘𭫠-𭫺𰘖-𰘤樲-橤橦-橳橵-橼㯐㯓-㯟㯡-㯩𣙒𣙻-𣛯𪳭-𪳼𫞐𬄙-𬄫𭫻-𭬉𰘥-𰘲橽-檪㯪-㯶𣛰-𣜡𣜣-𣝀𪳽-𪴈𫞑𬄬-𬄶𭬊-𭬑𰘳-𰘺檫-櫊㯷-㯽𣝁-𣝘𣝚-𣞎𪴉-𪴏𫞒𬄷-𬅀𭬒-𭬝𰘻-𰘽櫋-櫦櫫櫭㯾-㰈𣝙𣞐-𣟃𣟑𪴐-𪴕𬅁-𬅈𭬞-𭬨𰘾-𰙄櫧-櫪櫬櫮-櫶㰉-㰓㰖𣟄-𣟐𣟒-𣟮𪴖-𪴚𬅉𬅊𭬩-𭬳櫸-欅欌㰔㰕𣟯-𣠁𣠃-𣠘𪴛-𪴞𬅋-𬅏𭬴-𭬷𰙅-𰙈櫷欆-欋欍欎㰗㰘𣠂𣠙-𣠶𪴟-𪴡𬅐-𬅓𭬸-𭬺欏-欒㰙-㰜𣠷-𣡊𪴢𪴣𬅔𭬻-𭭀欓-欕𣡋-𣡝𥤔𪴤𪴥𬅕-𬅘欖-欛𣡞-𣡨𣡮𪴦欜欝𣡩-𣡭𣡯-𣡱𪴨𬅙𬅚𭭁鿝𣡲𣡴𣡵𪴧𬅛欞欟𣡶-𣡸𰙉𣡹𭭂𣡺-𣡼𬅜𭭃𣡽-𣡿]
+[radical 75=⽊木:木朩𣎳𣎴𬂛未-朰𣎵-𣎷𬂜𭩘朱-权㭁𣎸-𣏀𰗐-𰗒杄-杩极㭂-㭆𣏁-𣏓𪱱-𪱵𬂝-𬂟𭩙-𭩛𰗓杪-枀枂-枭㭇-㭐𣏔-𣐇𪱶-𪱹𫞈𬂠-𬂤𭩜-𭩡𰗔-𰗗枮-树㭑-㭗𣐈-𣐴𪱺-𪲂𬂥𬂦𭩢-𭩲𰗘-𰗛栒-桪鿄㭘-㭧𣐵-𣑦𣑨-𣑾𪲃-𪲏𫞉𫞊𬂧-𬂱𭩳-𭪂𰗜-𰗦桫-棂㭨-㭵㭷𣑿-𣓀𪲐-𪲞𬂲-𬂷𬂹-𬂼𭪃-𭪗𰗧-𰗰棃-椮㭶㭸-㮊𣓁-𣔰𪲟-𪲯𬂸𬂽-𬃓𭪘-𭪵𰗱-𰗹椯-榉榋榌榔榘﨓㮋-㮠㮢㮣𣔱-𣕣𣕥-𣖩𪲰-𪳇𫣙𫣚𬃔-𬃮𭪶-𭫎𰗺-𰘆榊榍-榓榕-榗榙-槡槩樮﨔㮤-㮽𣕤𣖪-𣘔𪳈-𪳜𫞋𫞌𬃯-𬄆𭫏-𭫟𰘇-𰘕槢-槨槪-樭樯-樱橥橴㮾-㯏㯑㯒㯠𣘕-𣙑𣙓-𣙺𪳝-𪳬𫞍-𫞏𬄇-𬄘𭫠-𭫺𰘖-𰘤樲-橤橦-橳橵-橼㯐㯓-㯟㯡-㯩𣙒𣙻-𣛯𪳭-𪳼𫞐𬄙-𬄫𭫻-𭬉𰘥-𰘲橽-檪㯪-㯶𣛰-𣜡𣜣-𣝀𪳽-𪴈𫞑𬄬-𬄶𭬊-𭬑𰘳-𰘺檫-櫊㯷-㯽𣝁-𣝘𣝚-𣞎𪴉-𪴏𫞒𬄷-𬅀𭬒-𭬝𰘻-𰘽櫋-櫦櫫櫭㯾-㰈𣝙𣞐-𣟃𣟑𪴐-𪴕𬅁𬅃-𬅈𭬞-𭬨𰘾-𰙄櫧-櫪櫬櫮-櫶㰉-㰓㰖𣟄-𣟐𣟒-𣟮𪴖-𪴚𬅂𬅉𬅊𭬩-𭬳櫸-欅欌㰔㰕𣟯-𣠁𣠃-𣠘𪴛-𪴞𬅋-𬅏𭬴-𭬷𰙅-𰙈櫷欆-欋欍欎㰗㰘𣠂𣠙-𣠶𪴟-𪴡𬅐-𬅓𭬸-𭬺欏-欒㰙-㰜𣠷-𣡊𪴢𪴣𬅔𭬻-𭭀欓-欕𣡋-𣡝𥤔𪴤𪴥𬅕-𬅘欖-欛𣡞-𣡨𣡮𪴦欜欝𣡩-𣡭𣡯-𣡱𪴨𬅙𬅚𭭁鿝𣡲𣡴𣡵𪴧𬅛欞欟𣡶-𣡸𰙉𣡹𭭂𣡺-𣡼𬅜𭭃𣡽-𣡿]
[radical 76=⽋欠:欠-欢𣢀𭭄欤㰝㰞𣢁-𣢈𬅝𬅞欣欥-欧㰟-㰢𣢉-𣢖𪴩𬅟𭭅𭭆𰙊𰙋欨-欪㰣-㰨𣢗-𣢦𪴪𪴫𬅠𬅡𰙌欫-欱㰩-㰭䶾𣢧-𣢹𬅢𬅣𭭇-𭭋欲-欸㰮-㰱𣢺-𣣇𪴬𪴭𬅤-𬅨𭭌𰙍𰙎欹-欿㰲-㰶㰸𣣈-𣣜𪴮𬅩𬅪𭭍-𭭏𰙏-𰙑歀-歈㰹-㰾𣣝-𣣫𣣭-𣣱𪴯𪴰𬅫𬅬𭭐𭭑𰙒-𰙕歉-歍㰿-㱁𣣲-𣤇𪴱𬅭-𬅯𭭒𰙖𰙗歎-歓㱂㱃𣤈-𣤗𪴲𭭓𭭔𰙘歔-歚㱄㱅𣤘-𣤟𬅰𬅱𭭕𭭖歛-歝㱆-㱉𣤠-𣤧𬅲𰙙歞歟𣤨-𣤫𬅳歠㱊𣤬-𣤰㱋𣤱-𣤳𪴳𭭗𣤴𣤵𣤷𣤸𬅴歡㱌𣤶𣤹-𣤼㱍𣤽𬅵𣤾𪴴㱎𣤿-𣥁]
[radical 77=⽌止:止龰𣥂正𣥃𣥄此㱏𣥅𣥆𬅶𬅷𭭘-𭭚𰙚步㱐㱑𣥇𣥈𣥊-𣥌𬅸𰙛𰙜武-歩𣥉𣥍-𣥡𪴵𬅹𭭛-𭭝𰙝-𰙟歪歫㱒-㱔𣥢-𣥤𬅺𬅻𭭞-𭭠𰙠-𰙣歬歭𣥦-𣥱𪴶𬅼𬅽𭭡𰙤-𰙩𣥳-𣥸𪴷𬅾-𬆀𭭢-𭭥𰙪歮歯㱕㱖𣥹-𣦆𪴸𬆁-𬆃𭭦-𭭩𰙫-𰙮歰-歳𣦇-𣦊𣦌-𣦎𤚜𪴹𪴺𫞓𬆄𬆅𭭪𭭫𰙯-𰙳歴㱗𣦐-𣦓𪴻𬆆𬆇𭭬𭭭𰙴𰙵歵歶𣦔-𣦛𪴼𬆈𬆉𭭮-𭭱𰙶𰙷歷𣦜-𣦠𪴽𪴾𬆊𬆋𭭲-𭭴𰙸𰙹𣦡-𣦥𪴿𬆌𬆍𭭵𭭶歸㱘𣦦-𣦫𬆎𭭷𣦬𬆏𬆐𰙺𣦮𭭸-𭭻𰙻𣦯-𣦴𭭼]
[radical 78=⽍歹:歹𣦵𣦶歺𣦷死㱙𣦸-𣦾𭭽-𭭿歼𣦿-𣧈𭮀𭮁𰙼歽-殁㱚-㱝𣧉-𣧜𭮂-𭮅殂-殇㱞-㱠𣧝-𣧱𪵀𪵁𬆑𬆒𭮆-𭮈殈-残㰷㱡𣧲-𣨄𪵂𪵃𬆓-𬆕𭮉-𭮑𰙽𰙾殌-殓㱢㱣𣨅-𣨕𪵄𬆖𬆗𭮒-𭮖𰙿𰚀殔-殚㱤-㱩𣨖-𣨰𪵅𬆘-𬆚𭮗𭮘殛殜㱪-㱮𣨱-𣩃𬆛𭮙-𭮛殝-殡㱯-㱲𣩄-𣩌𪵆𭮜殢-殦㱳㱴𣩍-𣩜𫞔𭮝𭮞𰚁殧-殫㱵-㱷𣩝-𣩧𭮟-𭮣殬-殮㱸𣩨-𣩮𪵇殯𣩯-𣩶𭮤-𭮧殰殱𣩷𣩸𬆜鿞㱹㱺𣩹-𣩻𬆝𰚂殲𣩼-𣩾㱻𣩿-𣪁]
@@ -94,7 +94,7 @@
[radical 82=⽑毛:毛𣬛𪵖㲌𣬜-𣬠毜毝𣬡-𣬨𬆼𰚍毞毟㲍-㲑𣬩-𣬷𪵗𪵘𬆽-𬆿𭯒𰚎-𰚑毠毡㲒𣬸-𣭛𪵙𪵚𬇀𭯓-𭯗𰚒-𰚕毢-毪㲓𣭜-𣭰𪵛𪵜𭯘𰚖𰚗毫-毮㲔-㲚𣭱-𣮇𬇁𭯙𭯚𰚘-𰚝毯-毶㲛-㲞𣮈-𣮧𪵝𪵞𭯛-𭯝𰚞-𰚣毷-毽㲟-㲣𣮨-𣯄𪵟𬇂𭯞𭯟𰚤-𰚦毾㲤-㲩𣯅-𣯢𪵠𬇃𬇄𭯠-𭯢𰚧-𰚮毿-氂𣯣-𣯷𪵡𬇅𰚯-𰚱氃-氇㲪-㲮𣯸-𣰉𬇆𭯣-𭯥𰚲氈-氊𣰊-𣰙𬇇𭯦-𭯩氋㲯㲰𣰚-𣰪𪵢𬇈𭯪𰚳𰚴氌㲱𣰫-𣰰𭯫𰚵𠫈𣰱-𣰵𭯬𣰶-𣰺氍𣰻-𣰾𭯭𰚶𣰿-𣱁𭯮氎㲲𣱂𣱃𭯯𣱄]
[radical 83=⽒氏:氏-民𫞕氒𫞖𰚷𬇉氓𣱅𣱆𬇊𬇋𭯰𣱇-𣱊𬇌𰚸㲳𬇍𰚹𣱋-𣱎𭯱𣱏𣱐𬇎𣱑𣱒𰚺𣱓𣱔]
[radical 84=⽓气:气-氘𣱕𣱖𰚻氙氚𣱗𣱘氛-氝㲴𣱙-𣱛𪵣𬇏𭯲𰚼𰚽氞-氢𣱜-𣱠𪵤𬇐𰚾𰚿氣-氩𣱡𬇑𰛀𰛁氪氫㲵𣱣𪵥𰛂氬-氰𣱢𣱤𣱥𰛃氱𣱦-𣱨𪵦氲氳𣱩𪵧𬇒㲶𣱪𣱫𭯳㲷𭯴鿫𣱬𣱭𬇓𣱮𭯵𣱯𣱰]
-[radical 85=⽔水:水氵氺𣱱𰛄𰛅氶-氹㲸𣱲-𣱴𰛆氻氼氾-汉㲹-㲼𣱵-𣱿𪵨汊-汤㲽-㲿𣲀-𣲍𪵩-𪵬𬇔-𬇗𭯶𭯷𰛇-𰛋汥-沪㳀-㳊𣲎-𣲱𪵭-𪵰𬇘-𬇚𭯸-𭯼𰛌-𰛑沫-泙泛-泴泶-泾㳋-㳕𣲲-𣳣𪵱-𪵶𬇛-𬇟𭯽-𭰋𰛒-𰛝泚泿-洌洎-洕洗-浕㳖-㳣𣳤-𣴝𪵷-𪵽𬇠-𬇦𭰌-𭰖𰛞-𰛪洍洖浖-涘涚-涩㳤-㳳𣴞-𣵶𣷚𪵾-𪶋𫞗𬇧-𬇴𭰗-𭰧𰛫-𰛼涙涪-渂渄-渗渚湴㳴-㴎𣵷-𣷙𣷛-𣷻𣸊𪶌-𪶖𫞘𬇵-𬈄𭰨-𭱂𰛽-𰜋渃渘渙減-湳湵-溌滋滞鿌㴏-㴤𣷼-𣸉𣸋-𣹜𪶗-𪶩𬈅-𬈕𭱃-𭱡𰜌-𰜤溍-滊滍-滙滛-滝滟-滪漓㴥-㴻𣹝-𣻌𦴶𪶪-𪶾𫞙-𫞛𬈖-𬈤𭱢-𭱵𰜥-𰜰滌滚滫-漊漌-漒演-漼漾-潍㴼-㵉𣻍-𣻳𣻵-𣼘𣼚-𣽂𪶿-𪷊𬈥-𬈱𭱶-𭲑𰜱-𰝂漋漽潎-潿澁-澘澚-澝濐鿰㵊-㵜𣻴𣽃-𣾨𣾪-𣾿𣿁-𣿄𪷋-𪷜𫞜𬈲-𬉇𭲒-𭲫𰝃-𰝐澙澞-濏濑-濓濖㵝-㵮𣾩𣿅-𤀡𪷝-𪷧𫞝𬉈-𬉒𭲬-𭲻𰝑-𰝘澀濔濕濗-濲濴-濸㵯-㵼𣿀𤀣-𤁝𤁟𤁠𪷨-𪷲𬉓-𬉚𭲼-𭳏𰝙-𰝡濹-瀔㵽-㶃𤁞𤁡-𤂜𤂞-𤂠𤂢-𤂲𪷳-𪷹𬉛-𬉞𭳐-𭳛𰝢-𰝫濳瀕-瀮㶄-㶋𤂝𤂡𤂳-𤃧𪷺-𪷿𫞞𬉟-𬉤𭳜-𭳫𰝬-𰝯瀯-灁㶌-㶑𤃨-𤄍𪸀-𪸂𬉥-𬉪𭳬-𭳯𰝰𰝱灂-灍灏灐㶒-㶘𢌇𤄎-𤄵𪸃-𪸇𬉫-𬉭𭳰-𭳶𰝲灑-灘㶙㶚𤄶-𤅉𪸈𪸉𬉮𬉯𭳷-𭳹𰝳𰝴灙-灜㶛-㶝𤅊-𤅟𪸊𪸋灝-灡㶞㶟𤅠-𤅨𪸌𬉰𬉱𭳺-𭳽灢灣𤅩-𤅯灎灤-灦㶠𤅰-𤅶灧灨𤅷-𤅿𬉲灩𰝵灪𭳾𤆀𬉳𤆁]
+[radical 85=⽔水:水氵氺𣱱𰛄𰛅氶-氹㲸𣱲-𣱴𰛆氻氼氾-汉㲹-㲼𣱵-𣱿𪵨汊-汤㲽-㲿𣲀-𣲍𪵩-𪵬𬇔-𬇗𭯶𭯷𰛇-𰛋汥-沪㳀-㳊𣲎-𣲱𪵭-𪵰𬇘-𬇚𭯸-𭯼𰛌-𰛑沫-泙泛-泴泶-泾㳋-㳕𣲲-𣳣𪵱-𪵶𬇛-𬇟𭯽-𭰋𰛒-𰛝泚泿-洌洎-洕洗-浕㳖-㳣𣳤-𣴝𪵷-𪵽𬇠-𬇦𭰌-𭰖𰛞-𰛪洍洖浖-涘涚-涩㳤-㳳𣴞-𣵶𣷚𪵾-𪶋𫞗𬇧-𬇴𭰗-𭰧𰛫-𰛼涙涪-渂渄-渗渚湴㳴-㴎𣵷-𣷙𣷛-𣷻𣸊𪶌-𪶖𫞘𬇵-𬈄𭰨-𭱂𰛽-𰜋渃渘渙減-湳湵-溌滋滞鿌鿿㴏-㴤𣷼-𣸉𣸋-𣹜𪶗-𪶩𬈅-𬈕𭱃-𭱡𰜌-𰜤溍-滊滍-滙滛-滝滟-滪漓㴥-㴻𣹝-𣻌𦴶𪶪-𪶾𫞙-𫞛𬈖-𬈤𭱢-𭱵𰜥-𰜰滌滚滫-漊漌-漒演-漼漾-潍㴼-㵉𣻍-𣻳𣻵-𣼘𣼚-𣽂𪶿-𪷊𬈥-𬈱𭱶-𭲑𰜱-𰝂漋漽潎-潿澁-澘澚-澝濐鿰㵊-㵜𣻴𣽃-𣾨𣾪-𣾿𣿁-𣿄𪷋-𪷜𫞜𬈲-𬉇𭲒-𭲫𰝃-𰝐澙澞-濏濑-濓濖㵝-㵮𣾩𣿅-𤀡𪷝-𪷧𫞝𬉈-𬉒𭲬-𭲻𰝑-𰝘澀濔濕濗-濲濴-濸㵯-㵼𣿀𤀣-𤁝𤁟𤁠𪷨-𪷲𬉓-𬉚𭲼-𭳏𰝙-𰝡濹-瀔㵽-㶃𤁞𤁡-𤂜𤂞-𤂠𤂢-𤂲𪷳-𪷹𬉛-𬉞𭳐-𭳛𰝢-𰝫濳瀕-瀮㶄-㶋𤂝𤂡𤂳-𤃧𪷺-𪷿𫞞𬉟-𬉤𭳜-𭳫𰝬-𰝯瀯-灁㶌-㶑𤃨-𤄍𪸀-𪸂𬉥-𬉪𭳬-𭳯𰝰𰝱灂-灍灏灐㶒-㶘𢌇𤄎-𤄵𪸃-𪸇𬉫-𬉭𭳰-𭳶𰝲灑-灘㶙㶚𤄶-𤅉𪸈𪸉𬉮𬉯𭳷-𭳹𰝳𰝴灙-灜㶛-㶝𤅊-𤅟𪸊𪸋灝-灡㶞㶟𤅠-𤅨𪸌𬉰𬉱𭳺-𭳽灢灣𤅩-𤅯灎灤-灦㶠𤅰-𤅶灧灨𤅷-𤅿𬉲灩𰝵灪𭳾𤆀𬉳𤆁]
[radical 86=⽕火:火-灭𤆂𪸍𭳿灮-灳炇㶡㶢𤆃-𤆌𭴀-𭴂𰝶灴-炀㶣-㶥𤆍-𤆜𪸎-𪸐𬉴-𬉺𭴃-𭴇𰝷-𰝼炁-炆炈-炞㶦-㶪𤆝-𤆻𪸑-𪸗𬉻-𬊀𭴈-𭴑𰝽-𰞀炟-烃㶫-㶲𤆼-𤇮𪸘-𪸢𬊁𬊂𭴒-𭴚𰞁-𰞇烄-烮㶳-㶸𤇯-𤈤𪸣-𪸪𫞟𬊃-𬊈𭴛-𭴥𰞈-𰞞烯-焓焕-焘㶹-㷁𤈥-𤉡𪸫-𪸲𫞠𬊉-𬊖𭴦-𭴷𰞟-𰞬焔焙-煀煮㷂-㷍𤉢-𤊱𪸳-𪹃𬊗-𬊨𭴸-𭵈𰞭-𰞹煁-煭煯-煸煺㮡㷎-㷞𤊲-𤋲𤋴-𤌆𤍏𪹄-𪹑𬊩-𬊱𭵉-𭵡𰞺-𰟆煹煻-熙熦蒸㷟-㷪𤌇-𤌱𤌳-𤍎𪹒-𪹠𫞡𬊲-𬊾𭵢-𭵲𰟇-𰟏熚-熥熧-熵黙龦龽㷫-㷲𤌲𤍐-𤍨𤍪-𤍿𤎁𤎃-𤎜𪹡-𪹩𬊿-𬋄𭵳-𭵼𰟐-𰟘熶-燞㷳-㷽𤍩𤎝-𤏟𤏡-𤏴𪹪-𪹳𬋅-𬋌𭵽-𭶋𰟙-𰟢營-燷鿪㷾-㸃𤏵-𤐣𪹴-𪹻𬋍-𬋐𭶌-𭶙𰟣-𰟩燸-爃㸄㸅𤐤-𤑂𤑄-𤑑𦦨𪹼-𪺀𬋑-𬋓𭶚-𭶡𰟪-𰟯爄-爊爌-爎爕㸆㸇㸉𤑒-𤑲𪺁𪺂𬋔-𬋘𭶢𭶣𰟰-𰟳爋爏-爔爖-爘㸈㸊-㸌𤑳-𤒠𤒨𪺃-𪺅𬋙-𬋝𭶤-𭶦𰟴-𰟹爙-爛㸍𤒡-𤒧𤒪-𤒹𰟺爜-爠㸎𤒩𤒺𤒻𤒽-𤓆𪺆𪺇𭶧爡爢㸏㸐𤒼𤓇-𤓎𤓐-𤓖𪺈𬋞爣𤓗-𤓛𪺉𭶨𭶩𰟻爤-爦𤓜-𤓞𤓠-𤓣𪺊𪺋𬋟𬋠㸑𤓤-𤓩𪺌爧𤓪𤓬𬋡𬋢爨𤓫𤓭爩𤓮𬋣]
[radical 87=⽖爪:爪爫𤓯-𤓵𪺍爬爭㸒㸓𤓶-𤓼𬋤𬋥𭶪𰟼爮-爰𤓽-𤔋𪺎𬋦𭶫𰟽爱𤔌-𤔏𬋧𬋨𭶬-𭶯𰟾𰟿㸔𤔐-𤔓𪺏𬋩𬋪𭶰𰠀爲𤔔-𤔖𤔘-𤔛𪺐-𪺓𬋫𬋬𭶱𰠁-𰠄𤔜-𤔡𪺔𪺕𬋭𬋮𭶲𭶳𰠅𰠆爳㸕𤔢-𤔦𬋯𬋰𭶴𭶵噕爴𤔧-𤔭𪺖𪺗𬋱𬋲𭶶𰠇𤔮-𤔱𬋳𬋴𭶷𭶸𰠈𤔲-𤔸𤔼𪺘𪺙𬋵𬋶爵𤔹𤔻𤔽𤔾𭶹𤔺𤔿𤕀𬋷𤕂-𤕇𬋸𬋹𤕈-𤕋𰠉𰠊𤕌𤕍𬋺𪺚]
[radical 88=⽗父:父爷𭶺𤕎𤕏𬋻𭶻爸𤕐𤕑㸖𤕒𰠋爹㸗𤕓𤕔𪺛𰠌㸘𤕕𪺜𭶼𤕖𤕗𰠍爺㸙𤕘-𤕚𬋼𤕛𭶽]
@@ -106,7 +106,7 @@
[radical 93=⽜牛:牛牜𤘔𭷓牝-牟㸨𤘕-𤘗𬌙𭷔𰠦牠-牤㸩㸪𤘘-𤘛𪺩𬌚𰠧𰠨牥-牬㸫-㸯𤘜-𤘷𬌛𬌜𭷕-𭷙𰠩-𰠬牭-牵㸰-㸴𤘸-𤙐𪺪𪺫𫞢𬌝𭷚-𭷝𰠭-𰠳牶-牺㸵-㸸𤙑-𤙚𪺬-𪺮𬌞𬌟𭷞𭷟𰠴牻-牿犁㸹-㹀𤙛-𤙮𬌠𭷠-𭷣𰠵犀犂-犋㹁-㹃𤙯-𤚌𪺯𬌡𬌢𭷤-𭷬𰠶𰠷犌-犑㹅-㹈𤚍-𤚛𤚝-𤚨𤚿𪺰𬌣-𬌥𭷭𰠸犒-犗㹄㹉-㹋𤚩-𤚾𤛀-𤛉𪺱-𪺳𬌦𬌧𭷮𭷯𰠹𰠺犘-犛㹌-㹐𤛊-𤛖𤛘-𤛠𪺴𬌨𭷰-𭷳𰠻犜-犟㹑-㹓𤛡-𤛮𪺵𭷴𭷵𰠼犠㹔-㹖𤛯-𤛸㹗㹘𤛹𤛺犡-犦㹙𤛻-𤜁𭷶犧犨𤜂-𤜆㹚𤜇-𤜋𪺶犩㹛𤜌-𤜓𭷷犪𤜔-𤜘犫𤜙]
[radical 94=⽝犬:犬-犮𡗜𤜚𬌩犯犰𤜛-𤜠𭷸犱-犸𤜡-𤜮𬌪𬌫𭷹𰠽𰠾犹-狈㹜-㹠𤜯-𤝎𤝮𪺷𭷺-𭷾𰠿-𰡁狉-狞㹡-㹪𤝏-𤝭𪺸𪺹𫞣𬌬𬌭𭷿-𭸃𰡂-𰡈狟-狲㹫-㹰𤝯-𤞘𤞣𪺺𪺻𬌮-𬌱𭸄-𭸉𰡉-𰡍狳-猃㹱-㹸𤞙-𤞢𤞤-𤟂𪺼𪺽𬌲-𬌴𭸊-𭸑𰡎-𰡒猄-猡猪猫㹹-㺀𤟃-𤟛𪺾-𪻁𫞤𬌵-𬌷𭸒-𭸖𰡓-𰡝猢-猩猬-猹獁㺁-㺆𤟜-𤟴𤟶-𤠌𪻂-𪻅𬌸-𬌼𭸗-𭸠𰡞-𰡠猺-獀獂獃獅-獊㺇-㺍𤠍-𤠸𪻆𪻇𬌽-𬍀𭸡𰡡獄獌-獕㺎-㺓𤠹-𤡢𪻈𬍁-𬍅𭸢-𭸧𰡢-𰡥獋獖-獤㺔-㺙𤡣-𤢋𪻉𬍆𬍇𭸨-𭸬𰡦𰡧獥-獭㺚-㺜𤢌-𤢥𬍈-𬍊𭸭獮-獴㺝-㺟𤢦-𤢳𪻊𬍋𭸮𭸯獵-獸㺠𤢴-𤣄𪻋𬍌𭸰𭸱𰡨獹-獻㺡㺢𤣅-𤣌𪻌𰡩-𰡫獼獽㺣-㺦𤣍-𤣐𬍍𭸲獾獿𤣑-𤣖𭸳𰡬玀𤣗-𤣚玁-玃𤣛-𤣞㺧𤣟-𤣢𬍎𤣣𤣤𭸴]
[radical 95=⽞玄:玄𤣥玅𤣦玆-玈𤣧𤣨𬍏]
-[radical 96=⽟玉:玉王𤣩玊玌-玑㺨-㺫𤣪-𤣬𪻍𭸵𰡭𰡮玒-玛㺬-㺯𤣭-𤣸𬍐𬍑玜-玱鿱㺰-㺶𤣹-𤤎𪻎-𪻔𫞥𬍒-𬍖𭸶-𭸻𰡯-𰡳玲-珑㺷-㺾𤤏-𤤴𪻕𪻖𬍗-𬍝𭸼-𭹃𰡴-𰡶珒-珲琉㺿-㻈𠴦𤤵-𤥕𪻗-𪻟𫞦𬍞-𬍤𭹄-𭹋𰡷-𰡼珳-珶珸-琈琊-琓㻉-㻐𤥖-𤥺𪻠-𪻥𬍥-𬍩𭹌-𭹔𰡽-𰢀珷琔-琝琟-琼㻑-㻜𤥻-𤦮𪻦-𪻲𫞧𬍪-𬍳𭹕-𭹢𰢁-𰢄琞琽-瑟㻝-㻦𤦯-𤧩𪻳-𪼂𬍴-𬍺𭹣-𭹪𰢅-𰢈瑠-瑸㻧-㻪𤧪-𤨓𪼃-𪼏𫞨𬍻-𬎄𭹫-𭹮𰢉𰢊瑹-璌璎璓㻫-㻴𤨔-𤨿𤩁𪼐-𪼖𫞩𬎅-𬎊𭹯-𭹵𰢋-𰢍璍璏-璒璔-璡璣璤㻵-㻼𤩀𤩂-𤩪𪼗-𪼠𬎋-𬎒𭹶-𭹿𰢎-𰢒璢璥-璴㻽-㼂𤩫-𤪊𪼡-𪼦𬎓-𬎖𭺀-𭺈𰢓𰢔璵-瓂𤪋-𤪨𤪴𪼧𪼨𬎗-𬎙𭺉-𭺌瓃-瓋㼃-㼆𤪩-𤪳𤪵-𤪽𪼩-𪼫𬎚𭺍-𭺐𰢕𰢖瓌-瓒㼇𤪾-𤫈𪼬-𪼯𬎛-𬎝𭺑𰢗𰢘瓓-瓖𤫉-𤫓𪼰𭺒𭺓𰢙瓗-瓙𤫔-𤫘𭺔-𭺖𰢚瓚㼈𤫙-𤫟𪼱瓛𤫠𪼲𬎞𤫣-𤫧𬎟𬎠𤫢𤫨𬎡𤫩]
+[radical 96=⽟玉:玉王𤣩玊玌-玑㺨-㺫𤣪-𤣬𪻍𭸵𰡭𰡮玒-玛㺬-㺯𤣭-𤣸𬍐𬍑玜-玱鿱㺰-㺶𤣹-𤤎𪻎-𪻔𫞥𬍒-𬍖𭸶-𭸻𰡯-𰡳玲-珑㺷-㺾𤤏-𤤴𪻕𪻖𬍗-𬍝𭸼-𭹃𰡴-𰡶珒-珲琉㺿-㻈𠴦𤤵-𤥕𪻗-𪻟𫞦𬍞-𬍤𭹄-𭹋𰡷-𰡼珳-珶珸-琈琊-琓㻉-㻐𤥖-𤥺𪻠-𪻥𬍥-𬍩𭹌-𭹔𰡽-𰢀珷琔-琝琟-琼㻑-㻜𤥻-𤦮𪻦-𪻲𫞧𬍪-𬍳𭹕-𭹢𰢁-𰢄琞琽-瑟㻝-㻦𤦯-𤧩𪻳-𪼂𬍴-𬍺𭹣-𭹪𰢅-𰢈瑠-瑸㻧-㻪𤧪-𤨓𪛞𪼃-𪼏𫞨𬍻-𬎄𭹫-𭹮𰢉𰢊瑹-璌璎璓㻫-㻴𤨔-𤨿𤩁𪼐-𪼖𫞩𬎅-𬎊𭹯-𭹵𰢋-𰢍璍璏-璒璔-璡璣璤㻵-㻼𤩀𤩂-𤩪𪼗-𪼠𬎋-𬎒𭹶-𭹿𰢎-𰢒璢璥-璴㻽-㼂𤩫-𤪊𪼡-𪼦𬎓-𬎖𭺀-𭺈𰢓𰢔璵-瓂𤪋-𤪨𤪴𪼧𪼨𬎗-𬎙𭺉-𭺌瓃-瓋㼃-㼆𤪩-𤪳𤪵-𤪽𪼩-𪼫𬎚𭺍-𭺐𰢕𰢖瓌-瓒㼇𤪾-𤫈𪼬-𪼯𬎛-𬎝𭺑𰢗𰢘瓓-瓖𤫉-𤫓𪼰𭺒𭺓𰢙瓗-瓙𤫔-𤫘𭺔-𭺖𰢚瓚㼈𤫙-𤫟𪼱瓛𤫠𪼲𬎞𤫣-𤫧𬎟𬎠𤫢𤫨𬎡𤫩]
[radical 97=⽠瓜:瓜𰢛瓝𤫪𪼳㼉㼊𤫫-𤫯𪼴𭺗瓞瓟㼋㼌𤫰-𤫴𬎢𬎣𭺘𰢜瓠㼍㼎𤫵-𤫹㼏𤫺-𤬀𰢝瓡𤬁-𤬆𪼵𰢞𰢟㼐-㼒𤬈-𤬌㼓㼔𤬇𤬍𤬐-𤬕瓢𤬎𤬏𤬖𭺙𤬗㼕𤬘-𤬚𭺚𰢠瓣𤬛-𤬝瓤𤬞𤬟𰢡𤬠𤬡瓥𤬢㼖𤬣-𤬥]
[radical 98=⽡瓦:瓦𭺛𭺜瓧㼗𤬦𤬧𬎤瓨瓩㼘㼙𤬨-𤬫𪼶𬎥瓪-瓲㼚㼛𤬬-𤬲𪼷𪼸𬎦𬎧𭺝𰢢瓳-瓵㼜-㼠𤬳-𤬽𪼹瓶-瓸㼡-㼦𤬾-𤭋𬎨-𬎫𭺞-𭺡瓹-瓼㼧-㼪𤭌-𤭚𭺢瓽-甁㼫-㼱𤭛-𤭦𤭲𤮖𪼺𪼻𬎬𬎭𭺣𰢣𰢤甂-甆㼲-㼷𤭧-𤭱𤭳-𤭸𪼼𬎮𰢥𰢦甇-甉㼸-㼺𠪹𤭹-𤮄𪼽𪼾𬎯𭺤甊-甎㼻-㼾𤮅-𤮍甏-甒㼿-㽅𤮎-𤮕𤮗甓-甕㽆㽇𤮘-𤮟𭺥𭺦甖㽈㽉𤮠𤮡𬎰𤮢-𤮥𭺧𭺨甗𤮦-𤮬㽊𤮭-𤮯𪼿𭺩𤮰-𤮵㽋𤮶㽌𤮷-𤮹]
[radical 99=⽢甘:甘𤮺𭺪𭺫甙𤮻-𤯀甚𤯁-𤯄𫞪𰢧𰢨㽍𤯅甛甜𭺬𰢩𤯆𪽀𰢪甝甞㽎𤯇𬎱𭺭㽏𤯈𬎲𭺮𭺯㽐𤯉𤯊𭺰𤯋𤯌㽑𤯍𤯎𤯐-𤯒]
@@ -119,7 +119,7 @@
[radical 106=⽩白:白-癿𤼽𤼾𬐃𰤒皀-皃㿝𤼿-𤽁𭽆的𤽂-𤽇𭽇-𭽊𰤓𰤔皅-皈㿞𤽈-𤽗𪽻𪽼𬐄𬐅𭽋-𭽍畠皉-皍㿟𤽘-𤽤𪽽𫞮𬐆𬐇𭽎-𭽓𰤕皎-皑㿠㿡𤽥-𤽫𬐈𬐉𭽔-𭽗𰤖-𰤘皒-皖𠌟𤽬-𤽸𪽾𪽿𬐊𭽘𰤙皗-皙㿢𤽹-𤾇𪾀𪾁𬐋-𬐎𭽙-𭽜𰤚-𰤜㿣㿤𤾈-𤾓𪾂𪾃𬐏𬐐𭽝𭽞皚-皞㿥𤾔-𤾚𪾄𭽟皟-皡㿦𤾛-𤾟𭽠皢-皥𤾠-𤾦𰤝皦-皨𤾧-𤾪𭽡𭽢皩㿧𤾫-𤾳皪皫𤾴-𤾷皬㿨𤾸-𤾺𪾅𤾻-𤾽皭𤾾𤾿𬐑𤿀-𤿃㿩𤿄𤿅]
[radical 107=⽪皮:皮𤿆𤿇𰤞皯㿪𤿈-𤿍𪾆㿫㿬𤿎-𤿔𪾇𬐒皰皱㿭㿮𤿕-𤿞𬐓𬐔𭽣𭽤𰤟-𰤢皲㿯㿰𤿟-𤿦𭽥-𭽪𰤣-𰤧皳皴㿱𤿧-𤿮𤿰-𤿲𬐕𭽫𰤨-𰤪皵龾㿲㿳𤿯𤿳-𤿿𭽬-𭽮𰤫-𰤮皶-皹㿴㿵𥀀-𥀌𪾈𪾉𬐖𭽯𭽰𰤯皺㿶㿷𥀍-𥀓𭽱-𭽳𰤰𰤱皻㿸𥀔-𥀞𭽴𭽵皼𥀟-𥀡𭽶皽㿹𥀢-𥀪𭽷𥀫-𥀮𭽸𭽹皾㿺𥀯-𥀸𭽺𥀹𥀺𭽻]
[radical 108=⽫皿:皿-盁𥀿𥁀𰤲-𰤴盂㿻𥁁-𥁅𫞯𬐗𰤵盃-盈㿼㿽𥁆-𥁍𪾊𪾋𫞰𬐘𬐙𭽼盉-监㿾-䀀𥁎-𥁝𥁫𪾌𪾍𬐚𬐛𭽽-𭽿𰤶-𰤹盒-盘盛䀁䀂𥁞-𥁪𪾎𬐜-𬐞𭾀𭾁盙盚盜䀃𥁬-𥁶𪾏𪾐𬐟-𬐡𭾂𰤺𰤻盝-盟䀄䀅𥁷-𥂂𪾑𪾒𫞱𬐢-𬐧𭾃-𭾆𰤼盠-監䀆𥂃-𥂆𪾓𪾔𬐨-𬐯𭾇-𭾋𰤽-𰤿盤𥂇-𥂒𪾕𬐰𭾌-𭾏𰥀-𰥂盥-盧䀇䀈𥂓-𥂤𪾖𬐱𭾐𰥃-𰥅盨-盪䀉𥂥-𥂲𥂴-𥂷𪾗𪾘𬐲-𬐵𭾑盫盬𥂸-𥂺𥂼-𥃀𪾙𬐶𬐷𭾒𰥆䀊𥂻𥃁-𥃆𪾚𬐸-𬐼𭾓𭾔𰥇盭𥃇-𥃑𬐽䀋𥃒𦪹𪾛𬐾-𬑀𭾕𰥈䀌𥃓-𥃗𪾜𬑁𬑂𰥉𥃘𥃙𥃞𭾖𥃚-𥃝𪾝𥃟𥃠𬑃𬑄𥃡𰥊䀍𪾞𥃢𥃣]
-[radical 109=⽬目:目𥃤𥃥盯䀎䀏𥃦-𥃱𭾗-𭾙𰥋盰-盵䀐-䀔𥃲-𥄂𪾟𪾠𬑅𭾚-𭾝𰥌-𰥐盶-眍䀕-䀞𥄃-𥄰𪾡-𪾣𬑆𬑇𭾞-𭾥𰥑-𰥔眎-眬眿䀟-䀦𥄱-𥅙𪾤-𪾧𫞲𬑈-𬑏𭾦-𭾪𰥕-𰥜眭-眾睁䀧-䀮𠌪𥅚-𥆉𪾨-𪾪𫞳𬑐-𬑕𭾫-𭾲𰥝-𰥡着睂-睑鿃䀯-䁀𥆊-𥇄𥇆-𥇈𥇫𪾫𪾬𬑖𬑗𭾳-𭾸𰥢-𰥩睒-睠睢-睭䁁-䁉𢰿𢾥𣪭𥇅𥇉-𥇪𥇬-𥇳𥇵-𥈁𪾭-𪾰𬑘-𬑛𭾹-𭿂𰥪-𰥴睡睮-瞆䁊-䁖𥈂-𥈻𪾱-𪾴𬑜𬑝𭿃-𭿏𰥵-𰥷瞇-瞓䁗-䁡𥈼-𥉳𥊇𪾵-𪾸𬑞-𬑣𭿐-𭿔𰥸-𰥽瞔-瞣䁢-䁪𥉴-𥊆𥊈-𥊩𥋖𪾹-𪾻𬑤-𬑧𭿕-𭿜𰥾-𰦁瞤-瞷䁫-䁳𥊪-𥋕𥋗𪾼-𪿀𬑨𬑩𭿝-𭿡𰦂𰦃瞸-矂䁴-䁺𥋘-𥋾𭿢-𭿨𰦄-𰦆矃-矊𥋿-𥌔𥌖-𥌙𪿁𬑪𭿩-𭿭𰦇𰦈矋-矏䁻-䁾𥌚-𥌬𪿂𰦉矐-矓䁿䂀𥌭-𥌹𥍂𪿃𪿄𬑫𭿮-𭿱𰦊䂁𥌺-𥍁𥍃𥍅-𥍇𭿲𰦋矔䂂䂃𥍈-𥍎矕矗𥍏-𥍒𭿳𭿴矘矙䂄𥍓𬑬矖矚𥍔-𥍜𪿅䂅𰦌]
+[radical 109=⽬目:目𥃤𥃥盯䀎䀏𥃦-𥃱𭾗-𭾙𰥋盰-盵䀐-䀔𥃲-𥄂𪾟𪾠𬑅𭾚-𭾝𰥌-𰥐盶-眍䀕-䀞𥄃-𥄰𪛟𪾡-𪾣𬑆𬑇𭾞-𭾥𰥑-𰥔眎-眬眿䀟-䀦𥄱-𥅙𪾤-𪾧𫞲𬑈-𬑏𭾦-𭾪𰥕-𰥜眭-眾睁䀧-䀮𠌪𥅚-𥆉𪾨-𪾪𫞳𬑐-𬑕𭾫-𭾲𰥝-𰥡着睂-睑鿃䀯-䁀𥆊-𥇄𥇆-𥇈𥇫𪾫𪾬𬑖𬑗𭾳-𭾸𰥢-𰥩睒-睠睢-睭䁁-䁉𢰿𢾥𣪭𥇅𥇉-𥇪𥇬-𥇳𥇵-𥈁𪾭-𪾰𬑘-𬑛𭾹-𭿂𰥪-𰥴睡睮-瞆䁊-䁖𥈂-𥈻𪾱-𪾴𬑜𬑝𭿃-𭿏𰥵-𰥷瞇-瞓䁗-䁡𥈼-𥉳𥊇𪾵-𪾸𬑞-𬑣𭿐-𭿔𰥸-𰥽瞔-瞣䁢-䁪𥉴-𥊆𥊈-𥊩𥋕𥋖𪾹-𪾻𬑤-𬑧𭿕-𭿜𰥾-𰦁瞤-瞷䁫-䁳𥊪-𥋔𥋗𪾼-𪿀𬑨𬑩𭿝-𭿡𰦂𰦃瞸-矂䁴-䁺𥋘-𥋾𭿢-𭿨𰦄-𰦆矃-矊𥋿-𥌔𥌖-𥌙𪿁𬑪𭿩-𭿭𰦇𰦈矋-矏䁻-䁾𥌚-𥌬𪿂𰦉矐-矓䁿䂀𥌭-𥌹𥍂𪿃𪿄𬑫𭿮-𭿱𰦊䂁𥌺-𥍁𥍃𥍅-𥍇𭿲𰦋矔䂂䂃𥍈-𥍎矕矗𥍏-𥍒𭿳𭿴矘矙䂄𥍓𬑬矖矚𥍔-𥍜𪿅䂅𰦌]
[radical 110=⽭矛:矛𭿵𥍝𭿶𰦍䂆𥍞𬑭矜䂇𥍟𥍠𪿆𰦎矝𥍡-𥍦𭿷𭿸𰦏䂈𥍧-𥍩𭿹𭿺𰦐矞矟𥍪-𥍱𪿇矠𠍢𥍲-𥍵𬑮𰦑䂉𥍶-𥎁𬑯𥎂-𥎉𭿻𥎊-𥎍𭿼䂊-䂌𥎏-𥎒𥎎𥎓-𥎜䂍𥎞-𥎠𥎝𥎡-𥎣䂎矡𥎤𥎥]
[radical 111=⽮矢:矢𰦒矣𥎦𥎧𭿽𰦓矤知𥎨矦-矨𥎩-𥎯𪿈𪿉𭿾𭿿𰦔𰦕矩䂏䂐𥎰-𥎸𬑰𬑱𮀀𰦖矪矫䂑䂒𥎹-𥏍𪿊𮀁𮀂矬短䂓𠅰𥏎-𥏗𬑲𬑳𰦗矮䂔𥏘-𥏩𪿋𬑴𮀃𮀄𰦘𰦙䂕𥏪-𥏱𪿌𮀅𰦚𥏲-𥏺𪿍𪿎𮀆-𮀈𰦛-𰦝𥏻-𥏿𮀉𰦞-𰦢矯矰𥐀-𥐆𬑵𥐇-𥐋𬑶𰦣矱𥐌-𥐏𬑷矲𪿏𮀊𪿐𬑸𥐑𥐒𥐐𥐓𥐔]
[radical 112=⽯石:石䂖𥐕𥐖矴-矶䂗𥐗-𥐜𬑹矷-码䂘䂙𥐝-𥐨𬑺-𬑼𮀋𮀌𰦤泵砂-砜䂚-䂞𥐩-𥑅𪿑-𪿓𬑽-𬒂𮀍𮀎𰦥-𰦬砝-硁鿬䂟-䂨𥑆-𥑲𪿔-𪿘𬒃-𬒈𮀏-𮀔𰦭-𰦲硂-硛鿎䂩-䂯𥑳-𥒩𪿙-𪿝𬒉-𬒌𮀕-𮀘𰦳-𰦻硜-硷䂰-䂶𥒪-𥓉𪿞-𪿣𬒍-𬒑𮀙-𮀡𰦼-𰧅硸-硽硿-碜碰䂷-䃇𥓊-𥓹𪿤-𪿩𬒒-𬒕𮀢-𮀫𰧆-𰧊硾碝-碯碱-碹磁䃈-䃐𥓺-𥔬𪿪𪿫𬒖-𬒚𮀬-𮀵𰧋-𰧐確-磀磂-磙磜磤䃑-䃗𥔭-𥕋𪿬-𪿮𬒛𮀶-𮀺𰧑-𰧘磚磛磝-磣磥-磮䃘-䃞䃠𥕌-𥕯𪿯-𪿴𬒜-𬒞𮀻-𮁃𰧙-𰧠磯-礅䃟䃡-䃨𥕰-𥖖𪿵-𪿷𬒟-𬒣𮁄-𮁉𰧡-𰧨礆-礖䃩-䃯𣞏𥖗-𥖩𪿸-𪿺𬒤𬒥𮁊-𮁏礗-礡䃰𥖪-𥖺𪿻-𪿽𬒦𬒧𮁐-𮁓𰧩礢-礬䃱-䃳𡕎𥖻-𥗑𬒨𮁔𰧪礭-礴䃴-䃷𥗒-𥗜𪿾𮁕礵䃸䃹𥗝-𥗪𬒩𬒪𰧫𰧬礶礷𥗫-𥗳𪿿𮁖-𮁘礸䃺𥗴𥗵𥗷𥗸𬒫𮁙𮁚礹𥗹䃻𥗺-𥗽𮁛𥗾-𥘄]
@@ -141,9 +141,9 @@
[radical 127=⽾耒:耒𦓤耓𦓥-𦓧𮋣耔䎢𦓨-𦓪耕-耙𦓫𮋤𰭰𰭱耚-耟䎣𦓬-𦓮𫅹𮋥-𮋧耠𦓯-𦓳𫅺𫅻𬚐𮋨𮋩耡耢䎤䎥𦓴-𦓶𫅼𮋪耣-耥䎦-䎪𦓷-𦔁耦耧䎫䎬𦔂-𦔊𫅽耨-耪𦔋-𦔒𫅾耫耬䎭-䎯𦔓-𦔚耭耮䎰𦔛-𦔞𦔠-𦔤𫅿𮋫𦔟𦔥-𦔨𬚑𰭲耯耰䎱𦔩𦔪耱耲𦔫-𦔭]
[radical 128=⽿耳:耳耴䎲𦔮耵𦔯-𦔶𫆀𫟉耶耷𦔷-𦔻𬚒𬚓𮋬𮋭𰭳耸-聂䎳䎴𦔼-𦕏𫆁𮋮𰭴-𰭷聃-聍䎵䎶𦕐-𦕟𬚔-𬚖𮋯𰭸-𰭺聎-联聠䎷𦕠-𦕢𦕤-𦕴𫆂𫆃𬚗-𬚙聕-聘䎸䎹𦕣𦕵-𦖇𦖗𫆄-𫆆𬚚-𬚝𮋰-𮋲聙-聟聡-聣鿢䎺-䎾𦖈-𦖖𦖘-𦖡𫆇𫆈𬚞-𬚠𮋳-𮋵聤-聫鿣䎿䏀𥧢𦖢-𦖻𦗇𫆉𬚡𬚢𮋶-𮋸聬聭䏁-䏃𦖼-𦗆𦗈-𦗏𫆊-𫆍𬚣-𬚥𮋹聯-聳䏄-䏇𦗐-𦗞𫆎𫆏𮋺聮聴-職鿤䏈𦗟-𦗲𫆐𫆑𬚦𬚧𮋻𰭻聸𦗳-𦗽𫆒聹-聼䏉𦗾-𦘄𬚨𮋼𮋽𦘅-𦘉𮋾𮋿聽聾䏊𦘊-𦘏𮌀𦘐𦘑𫆓𬚩]
[radical 129=⾀聿:聿肀𦘒𮌁𰭼𦘓𬚪𮌂𦘔𮌃肁-肃𦘕-𦘗𰭽𦘘-𦘚肄-肆䏋𦘛𦘜𫆔𬚫𮌄肇肈𦘝-𦘟𫆕𦘠-𦘢𬚬𮌅𮌆𦘣𬚭𬚮𦘤-𦘨]
-[radical 130=⾁肉:肉𮌇肊𰭾肋-肏䏌䏍𦘩-𦘳𰭿-𰮂肐-肠䏎䏏𦘴-𦘾𬚯𮌈-𮌊𰮃-𰮆股-胁䏐-䏝𦘿-𦙖𦙘-𦙩𫆖-𫆘𬚰-𬚳𮌋𰮇-𰮑朑胂-胬脉䏞-䏥𡋜𣍨𦙪-𦚜𫆙-𫆜𬚴-𬚶𮌌-𮌏𰮒-𰮜胭-脈脊-脔䏦-䏮𣍯𣍰𦚝-𦛓𫆝𫆞𬚷-𬚺𮌐-𮌓𰮝-𰮤脕-脸䏯-䏻𦛔-𦜅𫆟-𫆡𬚻-𬛁𮌔-𮌙𰮥-𰮪脹-腚㬹䏼-䐌𦜆-𦜲𦜴-𦝙𫆢-𫆥𬛂-𬛇𮌚-𮌠𰮫-𰮴幐朡腛-腾䐍-䐛𦝚-𦞘𦟓𦟔𫆦-𫆨𬛈-𬛋𮌡-𮌥𰮵-𰯀腿-膑䐜-䐪𦞙-𦟒𦟕-𦟗𫆩-𫆮𫟊𬛌-𬛎𮌦-𮌰𰯁-𰯋膒-膣䐫-䐴𦟘-𦠂𫆯-𫆴𬛏-𬛓𮌱-𮌹𰯌-𰯓朥膥-膶䐵-䐽𦠃-𦠽𦡄𦡮𫆵-𫆸𬛔-𬛘𮌺-𮌿𰯔-𰯝膷-臌䐾-䑁𦠾-𦡃𦡅-𦡍𦡏-𦡕𦡘-𦡭𦡯𫆹-𫆻𬛙-𬛛𮍀𮍁𰯞-𰯠臍-臓䑂-䑅𤑃𦡎𦡰-𦢉𫆼𫆽𬛜𬛝𮍂-𮍆𰯡-𰯣臔臕臗臘䑆-䑈𦢊-𦢤𫆾𫆿𮍇-𮍉𰯤-𰯧臖臙-臜䑉䑊𦢥-𦢷𫇀𬛞𮍊𰯨-𰯪臝㔮䑋-䑎𦢸-𦢾𫇁𬛟臞臟䑏𦢿-𦣅𫇂𰯫臠-臢𤓏𦣆-𦣐𬛠𦣑-𦣕𬛡𮍋𦣖𦣗𰯬𦣘-𦣜𰯭𫇄]
+[radical 130=⾁肉:肉𮌇肊𰭾肋-肏䏌䏍𦘩-𦘳𰭿-𰮂肐-肠䏎䏏𦘴-𦘾𬚯𮌈-𮌊𰮃-𰮆股-胁䏐-䏝𦘿-𦙖𦙘-𦙩𫆖-𫆘𬚰-𬚳𮌋𰮇-𰮑朑胂-胬脉䏞-䏥𡋜𣍨𦙪-𦚜𫆙-𫆜𬚴-𬚶𮌌-𮌏𰮒-𰮜胭-脈脊-脔䏦-䏮𣍯𣍰𦚝-𦛓𫆝𫆞𬚷-𬚺𮌐-𮌓𰮝-𰮤脕-脸䏯-䏻𦛔-𦜅𫆟-𫆡𬚻-𬛁𮌔-𮌙𰮥-𰮪脹-腚㬹䏼-䐌𦜆-𦜲𦜴-𦝙𫆢-𫆥𬛂-𬛇𮌚-𮌠𰮫-𰮴幐朡腛-腾䐍-䐛𦝚-𦞘𦟓𦟔𫆦-𫆨𬛈-𬛋𮌡-𮌥𰮵-𰯀腿-膑䐜-䐪𦞙-𦟒𦟕-𦟗𫆩-𫆮𫟊𬛌-𬛎𮌦-𮌰𰯁-𰯋膒-膣䐫-䐴𦟘-𦠂𫆯-𫆴𬛏-𬛓𮌱-𮌹𰯌-𰯓朥膥-膶䐵-䐽𦠃-𦠽𦡄𦡮𫆵-𫆸𫜶𬛔-𬛘𮌺-𮌿𰯔-𰯝膷-臌䐾-䑁𦠾-𦡃𦡅-𦡍𦡏-𦡕𦡘-𦡭𦡯𫆹-𫆻𬛙-𬛛𮍀𮍁𰯞-𰯠臍-臓䑂-䑅𤑃𦡎𦡰-𦢉𫆼𫆽𬛜𬛝𮍂-𮍆𰯡-𰯣臔臕臗臘䑆-䑈𦢊-𦢤𫆾𫆿𮍇-𮍉𰯤-𰯧臖臙-臜䑉䑊𦢥-𦢷𫇀𬛞𮍊𰯨-𰯪臝㔮䑋-䑎𦢸-𦢾𫇁𬛟臞臟䑏𦢿-𦣅𫇂𰯫臠-臢𤓏𦣆-𦣐𬛠𦣑-𦣕𬛡𮍋𦣖𦣗𦣙𰯬𦣘𦣚-𦣜𰯭𫇄]
[radical 131=⾂臣:臣𦣞𮍌𦣝臤臥𮍍𦣟𰯮𦣠-𦣣𫇅𬛢𬛣𰯯䑐𦣤𦣥𬛤𮍎𮍏𰯰臦𦣦-𦣩𫇆𬛥𰯱𫇇𬛦臧𦣫𦣬𦣮𫇈𮍐-𮍒𰯲𰯳𦣭𦣯𬛧𬛨𦣪𮍓臨臩𦣰𦣱𬛩䑑𦣲𦣳𫇉𦣴𦣵𬛪𦣶𬛫𦣷𦣸]
-[radical 132=⾃自:自𦣹臫𦣺-𦤀𰯴臬臭𦤁-𦤋𮍔𮍕𦤌-𦤏𬛬𮍖-𮍘𰯵臮-臰𦤐-𦤓𫇊𮍙𰯶𦤔𮍚𮍛𦤕-𦤗𬛭𮍜臱𦤘-𦤝𫇋臲𦤞-𦤤𬛮𦤥𫇌𦤦-𦤪𬛯𰯷𦤫-𦤮𬛰𮍝𮍞𦤯-𦤱𮍟𦤲𫇍]
+[radical 132=⾃自:自𦣹臫𦣺-𦤀𰯴臬臭𦤁-𦤋𮍔𮍕𦤌-𦤏𬛬𮍖-𮍘𰯵臮-臰𦤐-𦤓𫇊𮍙𰯶𦤔𮍚𮍛𦤕-𦤗𬛭𮍜臱𦤘-𦤝𫇋臲𦤞-𦤤𬛮𦤥𫇌𦤦-𦤪𬛯𰯷𦤫-𦤮𬛰𮍝𮍞𦤯-𦤱𮍟𫇍𦤲]
[radical 133=⾄至:至𦤳-𦤵𬛱致䑒𦤶-𦤺𬛲𮍠𮍡𦤻-𦤾臵-臸𦤿𦥀𬛳𮍢臹䑓𦥁𫇎臺𦥂-𦥄𫇏𫇐𮍣𦥅-𦥇臻𦥉-𦥍𬛴𬛵𦥎-𦥐𫇑𬛶𮍤𬛷]
[radical 134=⾅臼:臼𦥑-𦥔臽臾𦥕𦥖𦥙𮍥臿𦥗𦥘𦥚-𦥜𦥧𬛸𬛹舀舁䑔𦥝-𦥤𮍦𮍧舂䑕𦥥𦥦𦥨-𦥬舃舄𦥭-𦥲𫟋𮍨-𮍬舅𦥳-𦥺𬛺𮍭𮍮與䑖𦥻-𦦄𮍯𰯸𰯹興䑗𦦅-𦦎𬛻𮍰𮍱𰯺舆舉䑘𦦏-𦦓𦦕-𦦗𬛼𦦘-𦦠𬛽舊𦦡-𦦧𫇒𬛾𰯻舋𠤫𦦩-𦦬𦦯𬛿𬜀𦦭𦦮𦦰-𦦹𰯼𦦺𦦻𬜁𤓟𦦼𬜂𦦽-𦦿𮍲𦧀𫇓𬜃𦧁𦧂𮍳𬜄𦧃-𦧅𠔻]
[radical 135=⾆舌:舌𦧆舍-舏𫇔𦧇𮍴𮍵舐䑙䑚𦧈-𦧐舑䑛𦧑-𦧔𬜅𬜆𮍶𮍷𰯽-𰯿舒𦧕-𦧜𰰀𦧝𦧞𫇕𫇖𬜇𮍸𰰁-𰰅舓-舕𦧟-𦧦𬜈𮍹𰰆舖舗䑜𦧧-𦧬𬜉-𬜌𮍺-𮍾𰰇舘𦧭-𦧰𫇗𮍿𦧱-𦧳𬜍𰰈舙𦧴-𦧶𬜎𰰉舚𦧷𫇘𬜏𬜐𦧸-𦧺𫇙𦧻𦧼𮎀𦧽]
@@ -151,9 +151,9 @@
[radical 137=⾈舟:舟𠂨𦨇舠䑠𦨈-𦨍𬜑舡-舤䑡-䑣𦨎-𦨔𫇚𬜒舥-舱䑤䑥𦨕-𦨠𮎃𮎄𰰋舲-舻䑦-䑩𦨡-𦨮𮎅-𮎊𰰌舼-舿䑪-䑮𦨯-𦨲𦨴-𦨼𬜓𮎋𮎌艀-艉䑯䑰𦨳𦨽-𦩉𬜔𮎍-𮎑𰰍艊-艍䑱-䑸𦩊-𦩜𨦞𫇛𬜕𬜖𮎒𮎓𰰎艎-艔䑹-䑻𦩝-𦩳𦩿𫇜𫇝𬜗𰰏-𰰑艕-艙䑼-䑾𦩴-𦩾𦪀-𦪅𬜘-𬜚𰰒艚-艝䑿-䒅𦪆-𦪐𫇞𬜛𮎔艞-艠䒆-䒈𦪑-𦪧𫇟𰰓艡-艥𦪨-𦪰艦-艩䒉𦪱-𦪵𫇠艪𦪶-𦪸𦪺-𦪼𬜜𮎕艫𦪽-𦫂𫇡-𫇣𮎖𮎗艬𦫃𦫄艭𦫅-𦫇𦫉𦫈𦫊]
[radical 138=⾉艮:艮-艰𦫋𰰔𦫌-𦫏𮎘𮎙𦫐艱𦫑𮎚𦫒鿥]
[radical 139=⾊色:色𮎛𮎜𰰕䒊𦫓艳艴䒋𦫔-𦫙𰰖𰰗𦫚𬜝𦫛-𦫝𰰘艵𦫞-𦫣𬜞𰰙𦫤-𦫩𮎝䒌䒍𦫪-𦫮𫇤𰰚䒎䒏𰰛艶𦫯-𦫱𮎞䒐艷𦫲𬜟]
-[radical 140=⾋艸:艸艹䒑艺龷𦫳-𦫵艻-节䒒-䒔𦫶-𦬀𫇥𫇦𬜠𰰜-𰰟芃-芗䒕-䒙𦬁-𦬒𫇧𫇨𬜡𬜢𰰠-𰰢芘-芾苀-苏茾䒚-䒥𦬓-𦬶𫇩-𫇭𬜣-𬜥𮎟-𮎣𰰣-𰰪芿苐-茑茓-茕䒦-䒯𦬷-𦭬𫇮-𫇵𫟌𫟍𬜦𬜧𮎤-𮎦𰰫-𰰱茒茖-茜茞-茢茤-茽茿-荒荔-药鿒䒰-䓁𦭭-𦮵𫇶-𫇾𫟎𬜨-𬜮𮎧-𮎸𰰲-𰰽茝茣荰-莬莮-莽鿊䓂-䓔䓖𦮶-𦯰𦯲-𦰕𦰗-𦰩𫇿-𫈏𫟏-𫟑𬜯-𬜺𮎹-𮏏𰰾-𰱎荓莾-萨著龿䓕䓗-䓭𦯱𦰖𦰪-𦳀𫈐-𫈠𬜻-𬝋𮏐-𮏢𰱏-𰱜莭萩-萫萭-葖葘-蒏鿓䓮-䓻𦳁-𦴵𦴷-𦵆𦵈-𦵠𫈡-𫈵𫟒𫟓𬝌-𬝙𮏣-𮐂𰱝-𰱪蒐-蒷蒹-蓤蓦䓼-䔍𤎀𦵇𦵡-𦷾𫈶-𫉇𫟔𬝚-𬝴𮐃-𮐠𰱫-𰱱蓥蓧-蔼䔎-䔬𦷿-𦸼𦸾-𦺄𫉈-𫉜𫟕𬝵-𬞍𮐡-𮐸𰱲-𰱵蔽-蕵䔭-䕄𦸽𦺆-𦻆𦻈-𦻽𦻿-𦼨𦽭𫉝-𫉤𫟖𬞎-𬞙𮐹-𮑙𰱶-𰱼蕶-薨薪-薬薮龩﨟䕅-䕑𦻾𦼩-𦽬𦽮-𦾩𦿡𦿸𫉥-𫉴𬞚-𬞬𮑚-𮑻𰱽-𰲇薩薭薯-藓蘤䕒-䕝𦾪-𦿓𦿖-𦿜𦿞-𦿠𦿢-𦿷𦿹-𧀟𫉵-𫊄𬞭-𬞾𮑼-𮒖𰲈𰲉藔-藭藯-藵䕞-䕥𦿔𦿕𦿝𧀠-𧁺𧃌𫊅-𫊋𬞿-𬟍𮒗-𮒨𰲊-𰲐藮藶-蘑蘓蘔蘢䕦-䕲𧁻-𧃋𧃎𫊌-𫊏𬟎-𬟕𮒩-𮒷𰲑-𰲓蘒蘕-蘡蘣蘥-蘰䕳-䕷𧃍𧃏-𧄌𫊐-𫊓𬟖-𬟛𮒸-𮓃𰲔𰲕蘲-蘷鿀鿦䕸-䕺𧄍-𧄵𫊔-𫊖𬟜-𬟟𮓄-𮓍𰲖蘱蘸-虁䕻-䕽𧄶-𧅕𫊗𬟠-𬟤𮓎-𮓒虂-虅䕾𧅖-𧅭𫊘-𫊚𬟥𮓓虆-虉䕿䖀𧅮-𧅴𧅶-𧅹𬟦𮓔𮓕䖁𧅺-𧆅𫊛𫊜𮓖𰲗虊䖂-䖄𧆇-𧆎䖅䖆𧅵𧆏-𧆒虋虌𧆔𧆕𦺅𧆖𧆚𧆗䖇𧆙𧆓𧆘]
+[radical 140=⾋艸:艸艹䒑艺龷𦫳-𦫵艻-节䒒-䒔𦫶-𦬀𫇥𫇦𬜠𰰜-𰰟芃-芗䒕-䒙𦬁-𦬒𫇧𫇨𬜡𬜢𰰠-𰰢芘-芾苀-苏茾䒚-䒥𦬓-𦬶𫇩-𫇭𬜣-𬜥𮎟-𮎣𰰣-𰰪芿苐-茑茓-茕䒦-䒯𦬷-𦭬𫇮-𫇵𫟌𫟍𬜦𬜧𮎤-𮎦𰰫-𰰱茒茖-茜茞-茢茤-茽茿-荒荔-药鿒䒰-䓁𦭭-𦮵𫇶-𫇾𫟎𬜨-𬜮𮎧-𮎸𰰲-𰰽茝茣荰-莬莮-莽鿊䓂-䓔䓖𦮶-𦯰𦯲-𦰕𦰗-𦰩𫇿-𫈏𫟏-𫟑𬜯-𬜺𮎹-𮏏𰰾-𰱎荓莾-萨著龿䓕䓗-䓭𦯱𦰖𦰪-𦳀𫈐-𫈠𬜻-𬝋𮏐-𮏢𰱏-𰱜莭萩-萫萭-葖葘-蒏鿓䓮-䓻𦳁-𦴵𦴷-𦵆𦵈-𦵠𫈡-𫈵𫟒𫟓𬝌-𬝙𮏣-𮐂𰱝-𰱪蒐-蒷蒹-蓤蓦䓼-䔍𤎀𦵇𦵡-𦷾𫈶-𫉇𫟔𬝚-𬝳𮐃-𮐠𰱫-𰱱蓥蓧-蔼䔎-䔬𦷿-𦸼𦸾-𦺄𫉈-𫉜𫟕𬝴-𬞍𮐡-𮐸𰱲-𰱵蔽-蕵䔭-䕄𦸽𦺆-𦻆𦻈-𦻽𦻿-𦼧𦽭𫉝-𫉤𫟖𬞎-𬞙𮐹-𮑙𰱶-𰱼蕶-薨薪-薬薮龩﨟䕅-䕑𦻾𦼨-𦽬𦽮-𦾩𦿡𦿸𫉥-𫉴𬞚-𬞬𮑚-𮑻𰱽-𰲇薩薭薯-藓蘤䕒-䕝𦾪-𦿓𦿖-𦿜𦿞-𦿠𦿢-𦿷𦿹-𧀟𫉵-𫊄𬞭-𬞾𬟃𮑼-𮒖𰲈𰲉藔-藭藯-藵䕞-䕥𦿔𦿕𦿝𧀠-𧁺𧃌𫊅-𫊋𬞿-𬟂𬟄-𬟍𮒗-𮒨𰲊-𰲐藮藶-蘑蘓蘔蘢䕦-䕲𧁻-𧃋𧃎𫊌-𫊏𬟎-𬟕𮒩-𮒷𰲑-𰲓蘒蘕-蘡蘣蘥-蘰䕳-䕷𧃍𧃏-𧄌𫊐-𫊓𬟖-𬟛𮒸-𮓃𰲔𰲕蘲-蘷鿀鿦䕸-䕺𧄍-𧄵𫊔-𫊖𬟜-𬟟𮓄-𮓍𰲖蘱蘸-虁䕻-䕽𧄶-𧅕𫊗𬟠-𬟤𮓎-𮓒虂-虅䕾𧅖-𧅭𫊘-𫊚𬟥𮓓虆-虉䕿䖀𧅮-𧅴𧅶-𧅹𬟦𮓔𮓕䖁𧅺-𧆅𫊛𫊜𮓖𰲗虊䖂-䖄𧆇-𧆎䖅䖆𧅵𧆏-𧆒虋虌𧆔𧆕𦺅𧆖𧆚𧆗䖇𧆙𧆓𧆘]
[radical 141=⾌虍:虍𮓗虎虏䖈𧆛𮓘-𮓚彪虐䖉𧆜-𧆞𫊝𫊞𬟧𮓛𮓜虑虓虔䖊-䖍𧆟-𧆢𫊟𬟨𬟩𮓝-𮓠𰲘-𰲚處-虚䖎䖏𧆣-𧆰𮓡𰲛-𰲝虛-虝䖐䖑𧆱-𧆹𫊠𫊡𬟪𮓢-𮓤𰲞𰲟虞號䖒-䖖𧆺-𧇀𬟫-𬟭𮓥𮓦𰲠-𰲣虠虡𧇁-𧇎𫊢𰲤-𰲦虢虣䖗𧇏-𧇛𮓧𮓨𰲧虤-虦䖘𧇜-𧇰𬟮-𬟰𮓩𮓪虧虨䖙𧇱-𧇺𫊣𮓫𮓬虩䖚䖛𧇻-𧈁𧈃𧈄𬟱𮓭䖜𧈂𧈅-𧈊𬟲𮓮𧈋-𧈏𮓯𧈑-𧈗𰲨𧈘-𧈛𬟳虪𧈜]
-[radical 142=⾍虫:虫𮓰虬䖝𧈝𧈞𮓱虭-虲𧈟-𧈧𫊤𮓲𰲩虳-蚃䖞-䖠𡯥𧈨-𧈺𫊥𫊦𬟴𬟵𮓳-𮓷𰲪蚄-蚇蚉-蚪蚬䖡-䖣𧈻-𧉝𫊧-𫊫𬟶-𬟻𮓸-𮓼𰲫-𰲲蚫蚭-蛏﨡䖤-䖬𧉞-𧊎𫊬-𫊲𬟼-𬠁𮓽-𮔀𰲳-𰲷蚈蛐-蛕蛗-蛴䖭-䖵𧊏-𧊪𧊬𧊭𧊯-𧋇𫊳-𫊼𬠂-𬠇𮔁-𮔈𰲸𰲹蛖蛵-蜗蜫蝆䖶-䖾𧊫𧊮𧋈-𧋝𧋟-𧌂𧌞𫊽-𫋁𬠈-𬠍𮔉-𮔖𰲺-𰲾蜘-蜪蜬-蝅蝇-蝋䖿-䗊䗕𧋞𧌃-𧌝𧌟-𧌯𧌱-𧍑𫋂-𫋉𬠎-𬠚𮔗-𮔝𰲿-𰳉蝌-蝸蝺-螀蟡䗋-䗔䗖𧌰𧍒-𧎠𧏇𫋊-𫋎𬠛-𬠞𮔞-𮔧𰳊-𰳍蝹螁-螩蟗䗗-䗞𧎡-𧏆𧏈-𧏷𫋏-𫋕𬠟-𬠤𮔨-𮔲𰳎-𰳕螪-蟒蠁䗟-䗮𢋜𧏸-𧐯𧐱-𧑃𫋖-𫋙𬠥-𬠨𮔳-𮔺𰳖-𰳚蟓-蟖蟘-蟠蟢-蟵蠎䗯-䗳𧑄-𧒍𫋚-𫋞𬠩-𬠮𮔻-𮕁𰳛𰳜蟶-蠀蠂-蠍蠏䗴-䗻𧒎-𧓈𫋟-𫋢𬠯-𬠱𮕂-𮕇𰳝-𰳠蠐-蠙䗼-䘁𧓉-𧓰𫋣-𫋥𫟗𬠲-𬠷𮕈-𮕋𰳡-𰳣蠚-蠤蠴䘂-䘄𧓱-𧔜𫋦𫋧𬠸𮕌-𮕑𰳤蠥-蠬䘅-䘉𧔝-𧕂𫋨𬠹𮕒𰳥蠭-蠳䘊-䘌𧕃-𧕒𧕔-𧕚𬠺𮕓-𮕖蠵-蠺𧕓𧕛-𧕮𮕗𰳦蠻䘍𧕯-𧕼𬠻𮕘𮕙蠼𧕽-𧖃𧖊𮕚蠽蠾𧖄-𧖉𧖋-𧖐蠿䘎𧖑-𧖗𮕛𠑴𧖘-𧖛𫋩𧖜-𧖟𧖡-𧖦]
+[radical 142=⾍虫:虫𮓰虬䖝𧈝𧈞𮓱虭-虲𧈟-𧈧𫊤𮓲𰲩虳-蚃䖞-䖠𡯥𧈨-𧈺𫊥𫊦𬟴𬟵𮓳-𮓷𰲪蚄-蚇蚉-蚪蚬䖡-䖣𧈻-𧉝𫊧-𫊫𬟶-𬟻𮓸-𮓼𰲫-𰲲蚫蚭-蛏﨡䖤-䖬𧉞-𧊎𫊬-𫊲𬟼-𬠁𮓽-𮔀𰲳-𰲷蚈蛐-蛕蛗-蛴䖭-䖵𧊏-𧊪𧊬𧊭𧊯-𧋇𫊳-𫊼𬠂-𬠇𮔁-𮔈𰲸𰲹蛖蛵-蜗蜫蝆䖶-䖾𧊫𧊮𧋈-𧋝𧋟-𧌂𧌞𫊽-𫋁𬠈-𬠍𮔉-𮔖𰲺-𰲾蜘-蜪蜬-蝅蝇-蝋䖿-䗊䗕𧋞𧌃-𧌝𧌟-𧌯𧌱-𧍑𫋂-𫋉𬠎-𬠚𮔗-𮔝𰲿-𰳉蝌-蝸蝺-螀蟡䗋-䗔䗖𧌰𧍒-𧎠𧏇𫋊-𫋎𬠛-𬠞𮔞-𮔧𰳊-𰳍蝹螁-螩蟗䗗-䗞𧎡-𧏆𧏈-𧏷𫋏-𫋕𬠟-𬠤𮔨-𮔲𰳎-𰳕螪-蟒蠁䗟-䗮𢋜𧏸-𧐯𧐱-𧑃𫋖-𫋙𬠥-𬠨𮔳-𮔺𰳖-𰳚蟓-蟖蟘-蟠蟢-蟵蠎䗯-䗳𧑄-𧒍𫋚-𫋞𬠩-𬠮𮔻-𮕁𰳛𰳜蟶-蠀蠂-蠍蠏䗴-䗻𧒎-𧓈𫋟-𫋢𬠯-𬠱𮕂-𮕇𰳝-𰳠蠐-蠙䗼-䘁𧓉-𧓰𫋣-𫋥𫟗𬠲-𬠷𮕈-𮕋𰳡-𰳣蠚-蠤蠴䘂-䘄𧓱-𧔜𫋦𫋧𬠸𮕌-𮕑𰳤蠥-蠬䘅-䘉𧔝-𧕂𫋨𬠹𮕒𰳥蠭-蠳䘊-䘌𧕃-𧕒𧕔-𧕚𮕓-𮕖蠵-蠺𧕓𧕛-𧕮𬠺𮕗𰳦蠻䘍𧕯-𧕼𬠻𮕘𮕙蠼𧕽-𧖃𧖊𮕚蠽蠾𧖄-𧖉𧖋-𧖐蠿䘎𧖑-𧖗𮕛𠑴𧖘-𧖛𫋩𧖜-𧖟𧖡-𧖦]
[radical 143=⾎血:血𮕜𧖧-𧖩𮕝衁衂䘏𧖪衃衄䘐𧖫-𧖯𫋪衅䘑𧖰-𧖲𫋫𮕞𮕟𰳧衆-衉𧖳𧖴𬠼𮕠𰳨䘒𧖵-𧖹䘓𧖺-𧖿𧗄䘔𧗀-𧗃𧗅-𧗍𫋬𰳩𧗎-𧗗衊𧗘𮕡𧗙-𧗛衋𧗜]
[radical 144=⾏行:行𬠽𧗝-𧗠衍衎𧗡-𧗥𮕢衏䘕𧗦-𧗩𬠾𬠿衐-衔𧗪𫋭衕-衘䘖𢔬𧗫-𧗱𫋮𰳪衙𧗲-𧗷𮕣𰳫-𰳭𧗸𧗺𧗻𰳮衚-衝𧗹𧗼𧗽𫋯𫟘𬡀衞-衡䘗䘘𢖅𧗾𢖋𧗿-𧘁𫟙𧘂𧘃𫋰𰳯𧘄䘙𢖡𧘅𬡁𧘆𫋱衢]
[radical 145=⾐衣:衣衤𧘇𮕤补䘚䘛𧘈-𧘌𬡂𮕥-𮕧𰳰衦-衬䘜-䘞𧘍-𧘜𬡃-𬡇𮕨衭-袇䘟-䘡𧘝-𧘼𫋲-𫋴𬡈-𬡊𮕩-𮕯𰳱袈-袮袰䘢-䘧𧘽𧘿-𧙝𫋵-𫋷𬡋-𬡐𮕰-𮕸𰳲-𰳸袯袱-裉䘨-䘮𧘾𧙞-𧙿𫋸-𫋼𬡑-𬡘𮕹-𮖀𰳹𰳺裊-裥䘯-䘲𧚀-𧚣𫋽𫟚𬡙-𬡝𮖁-𮖎𰳻-𰴀裧-褄䘳-䙂𧚤-𧚺𧚼-𧛎𫋾-𫌄𬡞-𬡤𮖏-𮖓𰴁𰴂裦褅-褝䙃-䙍𧚻𧛏-𧛷𫌅𫌆𬡥𬡦𮖔-𮖠褞-褲褴䙎-䙓𧛸-𧜜𧜨𫌇-𫌉𬡧-𬡩𮖡-𮖩𰴃-𰴅褳褵-襅襔䙔-䙝𧜝-𧜧𧜩-𧜬𧜮-𧝁𫌊-𫌏𬡪-𬡭𮖪-𮖮𰴆-𰴈襆-襓襕鿋䙞-䙣𧜭𧝂-𧝰𫌐-𫌒𬡮𬡯𮖯-𮖶襖-襢䙤䙥𧝱-𧞌𫌓𫌔𬡰𬡱𮖷-𮖺襣-襨䙦-䙩𧞍-𧞖𧞘-𧞦𫌕𬡲-𬡴𮖻𮖼襩-襮䙪𧞗𧞧-𧞱𧞳-𧞵𫌖𬡵𬡶𮖽𮖾襯-襲䙫𧞲𧞶-𧟂𬡷𰴉襳襴襽䙬䙭𧟃-𧟇𫌗襵-襷䙮䙯𧟈-𧟋𫌘𫌙襸-襼䙰𧟌-𧟏𰴊𧟐-𧟔䙱𧟕-𧟟]
@@ -167,24 +167,24 @@
[radical 151=⾖豆:豆䜳𰶗𧯚豇豈𧯛-𧯝豉䜴𧯞𧯟𬤶𰶘䜵𧯠-𧯤𮙒𰶙𰶚豊豋䜶𧯥𧯦𧯨𬤷𰶛鿲䜷-䜹𧯩-𧯬𮙓𮙔𰶜豌-豎䜺𧯭-𧯶𫎃𰶝䜻-䜿𧯷-𧯻𮙕豏䝀-䝂𧯼-𧰂𧰈𰶞豐𡕆𧰃-𧰇𫎄𮙖𰶟𧰉-𧰐𬤸𮙗𰶠𰶡豑𧰑-𧰖𬤹𰶢䝃𧰗𧰘𮙘𧰙-𧰜𮙙𧰝-𧰟𬤺𰶣𧰠豒䝄𧰡𧰢豓𧰣𧰤豔𧰥]
[radical 152=⾗豕:豕𧰧𧰨豖𧰦𫎅𧰩𬤻𮙚𰶤𰶥豗䝅𧰪-𧰭豘-豝䝆䝇𧰮-𧰴𫎆𬤼𬤽𮙛豞-象䝈𧰵-𧰾𮙜-𮙞𰶦豢-豦䝉𧰿-𧱌𮙟𮙠豧-豪𧱍-𧱗𫎇𫎈𬤾-𬥀䝊-䝌𧱘-𧱧𬥁-𬥃𰶧-𰶩豫-豮䝍䝎𧱨-𧱱𫎉𮙡-𮙣𰶪-𰶭豯-豳𧱲-𧱺𬥄𬥅𰶮豴豵䝏𧱻-𧲁𮙤豷䝐䝑𧲂-𧲆豶𧲇-𧲋𬥆𰶯䝒𧲌-𧲏𬥇䝓𧲐-𧲓𧲗𧲔-𧲖𧲘𧲙䝔䝕𧲚-𧲞𰶰𧲟]
[radical 153=⾘豸:豸𧲠𧲡𮙥豹-豻𧲢𧲣𫎊豼豽䝖-䝙𧲤-𧲫𮙦𮙧豾-貃䝚䝛𧲬-𧲽𮙨𮙩貄-貊𧲾-𧳉𫎋𬥈貋-貍䝜𧳊-𧳘𮙪貎貏䝝䝞𧳙-𧳥𧳱𬥉貐-貓䝟𧳦-𧳰𧳲-𧳴𫎌𮙫貔-貖䝠𧳵-𧴀𫎍貗-貙䝡䝢𧴁-𧴅𧴇-𧴋𬥊𬥋貚䝣-䝦𧴆𧴌-𧴏𧴑-𧴕𬥌𮙬𧴐𧴖-𧴟𬥍𧴠-𧴢貛貜𧴣]
-[radical 154=⾙貝:貝-負𧴤-𧴩𫎎𬥎𮙭𰶱財-貤𧴪-𧴲𫎏-𫎑𮙮-𮙱𰶲貥-貮䝧䝨𧴳-𧵈𫎒𫎓𬥏-𬥒𮙲-𮙸𰶳-𰶻貯-賁䝩-䝯𧵉-𧵢𫎔𫎕𬥓𮙹-𮚀𰶼-𰶿賂-賎䝰-䝲𣣬𧵣-𧶄𫎖𬥔𬥕𮚁-𮚄𰷀-𰷄賏-賘㕢䝳-䝵𧶅-𧶚𫎗-𫎙𬥖-𬥚𮚅-𮚊𰷅賙-賬䝶-䝿𧶛-𧶰𫎚𫎛𬥛-𬥟𮚋-𮚔𰷆-𰷈賭-賵䞀-䞄𠠋𧶱-𧷄𧷆-𧷋𫎜-𫎞𬥠-𬥢𮚕-𮚙𰷉賶-賽䞅䞆𧷌-𧷝𫎟𫎠𬥣-𬥥𮚚-𮚝𰷊-𰷌賾-贀贂-贅䞇𧷞-𧷻𫎡𬥦𬥧𮚞-𮚠𰷍-𰷐贆-贌䞈𧷼-𧸕𫎢𬥨𮚡-𮚦𰷑-𰷗贍-贏䞉𧸖-𧸥𬥩𮚧𮚨贐-贔𧸦-𧸰𬥪-𬥭𮚩-𮚫𰷘-𰷚贕-贘䞊𧸱-𧸼𧸿𫎣𫎤𬥮-𬥰𮚬𰷛贙贚䞋𧸽𧸾𧹀-𧹇𫎥𬥱𮚭贛𧹈-𧹋贜𧹌𧹍𰷜𰷝𧹎-𧹐𮚮-𮚰𬥲]
+[radical 154=⾙貝:貝-負𧴤-𧴩𫎎𬥎𮙭𰶱財-貤𧴪-𧴲𫎏-𫎑𮙮-𮙱𰶲貥-貮䝧䝨𧴳-𧵈𫎒𫎓𬥏-𬥒𮙲-𮙸𰶳-𰶻貯-賁䝩-䝯𧵉-𧵢𫎔𫎕𬥓𮙹-𮚀𰶼-𰶿賂-賎䝰-䝲𣣬𧵣-𧶄𫎖𬥔𬥕𮚁-𮚄𰷀-𰷄賏-賘㕢䝳-䝵𧶅-𧶚𫎗-𫎙𬥖-𬥚𮚅-𮚊𰷅賙-賬䝶-䝿𧶛-𧶰𫎚𫎛𬥛-𬥟𮚋-𮚔𰷆-𰷈賭-賵䞀-䞄𠠋𧶱-𧷄𧷆-𧷋𫎜-𫎞𬥠-𬥢𮚕-𮚙𰷉賶-賽䞅䞆𧷌-𧷝𫎟𫎠𬥣-𬥥𮚚-𮚝𰷊-𰷌賾-贀贂-贅䞇𧷞-𧷻𫎡𬥦𬥧𮚞-𮚠𰷍-𰷐贆-贌䞈𧷼-𧸕𫎢𬥨𮚡-𮚦𰷑-𰷗贍-贏䞉𧸖-𧸥𬥩𮚧𮚨贐-贔𧸦-𧸰𬥪𬥫𬥭𮚩-𮚫𰷘-𰷚贕-贘䞊𧸱-𧸼𧸿𫎣𫎤𬥮-𬥰𮚬𰷛贙贚䞋𧸽𧸾𧹀-𧹇𫎥𬥬𬥱𮚭贛𧹈-𧹋贜𧹌𧹍𰷜𰷝𧹎-𧹐𮚮-𮚰𬥲]
[radical 154'=⻉贝:贝-财𰷞-𰷠责-贯𧹑𬥳𰷡贰-贻𧹒𫎦𫎧𬥴-𬥶𰷢贼-赆䞌𬥷赇-赊𧹓𫎨𬥸赋-赕䞍䞎𧹔-𧹖𫎩𬥹𰷣-𰷥赖赗䞏䞐𫎪𬥺-𬥽𰷦𰷧赘-赛𬥾𰷨-𰷪赜𧹗赝-赠𫎫𰷫赡赢𰷬𫎬𬥿𰷭𰷮赣𬦀]
[radical 155=⾚赤:赤𧹘-𧹚䞑赥-赧𧹛𧹜𬦁𧹝-𧹟𫎭赨-赪䞒𧹠-𧹢𫎮𬦂𰷯赫䞓䞔𧹣-𧹫𫎯赬-赮𧹬-𧹱𬦃𮚱赯𧹲-𧹷𫎰𧹸-𧹼䞕𧹽-𧺁𬦄𧺂-𧺅𰷰]
[radical 156=⾛走:走赱𧺆𧺇𮚲赲-赵龪𧺈-𧺎赶-赸䞖-䞘𧺏-𧺜𬦅𮚳𰷱赹-赿﨣䞙-䞜𧺝-𧺵𫎱𬦆-𬦈𮚴𮚵𰷲趀-趋䞝-䞤𧺶-𧻏𫎲𬦉-𬦋𮚶𮚷𰷳𰷴趌-趔䞥-䞪𧻐-𧻮𫎳𫎴𬦌𬦍𮚸𮚹𰷵-𰷷趕-趚䞫-䞲𧻯-𧼍𧼝𫎵-𫎷𬦎-𬦑𮚺𮚻趛-趤䞳-䞸𧼎-𧼜𧼞𧼠-𧼧𫎸-𫎺𬦒𬦓𰷸𰷹趥-趧䞹-䞼𧼟𧼨-𧽈𫎻𫎼𬦔-𬦗𮚼𰷺趨䞽-䟀𧽉-𧽝𫎽𬦘-𬦜𮚽𮚾𰷻-𰷽䟁-䟆𧽞-𧽵𫎾𫎿𬦝𬦞𰷾趩-趭䟇𧽶-𧾌𬦟𮚿𰷿趮䟈-䟋𧾍-𧾘𰸀趯趰䟌𧾙-𧾠䟍-䟏𧾡-𧾧𮛀趱䟐𧾨-𧾭䟑𧾮𧾯䟒𧾰-𧾴趲𧾵𧾶]
-[radical 157=⾜足:足𧾷-𧾹𮛁趴䟓䟔𧾺-𧿀𬦠𮛂𰸁趵-趸䟕䟖𧿁-𧿑𫏀𬦡𬦢𮛃-𮛈𰸂-𰸄趹-趻趽-跄䟗-䟞𧿒-𧿱𫏁-𫏃𬦣-𬦧𮛉-𮛎𰸅-𰸇跅-跞践䟟-䟭𧿲-𨀔𫏄-𫏆𬦨-𬦫𮛏-𮛖趼跟-跴跶-跻䟮-䟳𨀕-𨀿𫏇-𫏋𬦬-𬦱𮛗𮛘𰸈-𰸏跼-踎䟴-䟻䟽𨁀-𨁴𫏌-𫏎𬦲-𬦵𮛙-𮛟𰸐-𰸓踏-踪踬-踯踺䟼䟾-䠌𨁵-𨂜𨂟𫏏-𫏓𬦶-𬦻𮛠-𮛮𰸔-𰸙踫踰-踹踻-蹅䠍-䠖𨂝𨂞𨂠-𨃒𫏔-𫏘𬦼-𬧃𮛯-𮛿𰸚-𰸧蹆-蹓䠗-䠝𨃓-𨄂𨄄𫏙-𫏛𬧄-𬧉𮜀-𮜈𰸨𰸩蹔-蹧蹮躀䠞-䠢𨄃𨄅-𨅉𨅚𫏜-𫏟𬧊-𬧐𮜉-𮜓𰸪蹨-蹭蹯-蹿䠣-䠧𨅊-𨅙𨅛-𨆀𫏠-𫏢𫟣𬧑-𬧔𮜔-𮜘𰸫-𰸯躁-躉䠨䠩𨆁-𨆩𫏣-𫏦𬧕-𬧗𮜙-𮜛𰸰-𰸲躊-躏䠪䠫𨆪-𨇀𫏧𫏨𬧘𮜜-𮜠𰸳-𰸵躐-躖䠬𨇁-𨇕𬧙𮜡-𮜥𰸶𰸷躗-躜䠭䠮𨇖-𨇣𫏩𬧚𬧛𮜦-𮜪躝-躠䠯𨇤-𨇭𬧜𮜫𮜬躡-躥䠰𨇮-𨇺𰸸躦躧𨇻-𨈀𮜭躩躪𨈁-𨈃𬧝𰸹躨䠱𨈄-𨈇𬧞𨈈-𨈊𬧟𨈋-𨈎]
+[radical 157=⾜足:足𧾷-𧾹𮛁趴䟓䟔𧾺-𧿀𬦠𮛂𰸁趵-趸䟕䟖𧿁-𧿑𫏀𬦡𬦢𮛃-𮛈𰸂-𰸄趹-趻趽-跄䟗-䟞𧿒-𧿱𫏁-𫏃𬦣-𬦧𮛉-𮛎𰸅-𰸇跅-跞践䟟-䟭𧿲-𨀔𫏄-𫏆𬦨-𬦫𮛏-𮛖趼跟-跴跶-跻䟮-䟳𨀕-𨀿𨃋𫏇-𫏋𬦬-𬦱𮛗𮛘𰸈-𰸏跼-踎䟴-䟻䟽𨁀-𨁴𫏌-𫏎𬦲-𬦵𮛙-𮛟𰸐-𰸓踏-踪踬-踯踺䟼䟾-䠌𨁵-𨂜𨂟𫏏-𫏓𬦶-𬦻𮛠-𮛮𰸔-𰸙踫踰-踹踻-蹅䠍-䠖𨂝𨂞𨂠-𨃊𨃌-𨃒𫏔-𫏘𬦼-𬧃𮛯-𮛿𰸚-𰸧蹆-蹓䠗-䠝𨃓-𨄂𨄄𫏙-𫏛𬧄-𬧉𮜀-𮜈𰸨𰸩蹔-蹧蹮躀䠞-䠢𨄃𨄅-𨅉𨅚𫏜-𫏟𬧊-𬧐𮜉-𮜓𰸪蹨-蹭蹯-蹿䠣-䠧𨅊-𨅙𨅛-𨆀𫏠-𫏢𫟣𬧑-𬧔𮜔-𮜘𰸫-𰸯躁-躉䠨䠩𨆁-𨆩𫏣-𫏦𬧕-𬧗𮜙-𮜛𰸰-𰸲躊-躏䠪䠫𨆪-𨇀𫏧𫏨𬧘𮜜-𮜠𰸳-𰸵躐-躖䠬𨇁-𨇕𬧙𮜡-𮜥𰸶𰸷躗-躜䠭䠮𨇖-𨇣𫏩𬧚𬧛𮜦-𮜪躝-躠䠯𨇤-𨇭𬧜𮜫𮜬躡-躥䠰𨇮-𨇺𰸸躦躧𨇻-𨈀𮜭躩躪𨈁-𨈃𬧝𰸹躨䠱𨈄-𨈇𬧞𨈈-𨈊𬧟𨈋-𨈎]
[radical 158=⾝身:身𨈏-𨈑𬧠𨈒躬𨈓-𨈗𮜮躭-躯𨈘-𨈨𬧡𮜯𰸺躰䠲-䠶𨈩-𨈷𬧢𮜰𰸻-𰸽躱躲䠷-䠺𨈸-𨉇𫏪𫏫𬧣𮜱-𮜵躳-躵𨉈-𨉓𫏬𮜶-𮜹躶-躼䠻𨉔-𨉡𬧤-𬧪𰸾-𰹀躽躾䠼𨉢-𨉥𨉧-𨉭𬧫𰹁-𰹅躿䠽䠾𨉦𨉮-𨉸𫏭𫏮𬧬-𬧮𰹆軀軁𨉹-𨉾𫏯𬧯軂-軅䠿𨉿-𨊌𫏰𬧰𰹇軆䡀𨊍-𨊒𫏱𮜺-𮜼軇𨊓-𨊚䡁𨊛𨊜𮜽軈𨊝𨊞𮜾𨊟軉]
[radical 159=⾞車:車軋𰹈𰹉軌軍䡂-䡄𨊠-𨊦軎-軕䡅𨊧-𨊲𫏲𮜿𰹊𰹋軖-軣䡆-䡎𨊳-𨋍𫏳𬧱𮝀-𮝅𰹌軤-軬軮-軽龫䡏-䡒𨋎-𨋧𫏴𫏵𬧲-𬧴𮝆-𮝌𰹍-𰹐軭軾-輌䡓-䡗𨋨-𨌁𬧵𮝍-𮝑𰹑輍-輕䡘-䡛𨌂-𨌟𫏶-𫏸𮝒𮝓𰹒輖-輬䡜-䡟𨌠-𨍆𫏹𬧶𬧷𮝔-𮝜𰹓-𰹚輭-輼䡠-䡤𨍇-𨍨𫏺𫏻𬧸𬧹𮝝-𮝟𰹛-𰹞輽-轅䡥-䡪𨍩-𨎉𫏼𫏽𬧺𮝠-𮝢𰹟-𰹢轆-轌鿂䡫-䡱𨎊-𨎣𫏾𫏿𬧻-𬧽𮝣-𮝥𰹣轍-轔䡲-䡵𨎤-𨎱𫐀𮝦-𮝨𰹤-𰹧轕-轚䡶𨎲-𨏇𨘼𫐁𬧾𮝩-𮝫𰹨轛-轟䡷-䡹𨏈-𨏐𫐂𮝬-𮝯𰹩轠-轢䡺䡻𨏑-𨏝𬧿𬨀𮝰-𮝲𰹪𰹫轣轤𨏞-𨏨䡼𨏩-𨏴𰹬䡽𨏵-𨏸𨏽𰹭轥䡾𨏹𨏻𨏾𨏺𨏼𨏿-𨐂䡿𨐃𰹮𫐃𨐄]
[radical 159'=⻋车:车轧𰹯轨𰹰𰹱轩-轫䢀𫐄𫐅𰹲-𰹵转-轰䢁𨐅𨐆𫐆𫐇𬨁-𬨃𮝳𰹶-𰹻轱-轻䢂𨐇𫐈-𫐊𫟤𬨄𬨅𮝴𰹼-𰺃轼-较𨐈𫐋𫐌𬨆𬨇𮝵𰺄-𰺆辄-辆𫐍𬨈-𬨋𮝶𰺇𰺈辇-辎𫐎-𫐑𬨌𰺉-𰺑辏-辔𫐒𫐓𬨍-𬨏𮝷𮝸𰺒-𰺕辕-辗𫐔𫟥𬨐𬨑𰺖𰺗辘𫐕𫐖𬨒𬨓𰺘𰺙辙辚𨐉𫐗𰺚-𰺞𫐘𫟦𬨔𮝹𮝺𰺟𰺠𬨕𰺡𫐙𰺢-𰺤𨐊]
[radical 160=⾟辛:辛𨐋𨐌𬨖𨐍𨐎𰺥𨐏-𨐑𰺦辜辝𨐒𨐓𫐚𬨗-𬨙辞-辠𨐔-𨐗𫐛𫐜𰺧辡-辣𨐘-𨐛𬨚𮝻辤䢃𨐜-𨐟𮝼𰺨辥-辪𨐠-𨐧𰺩辫𨐨-𨐯辬𨐰-𨐲𮝽𰺪辭𨐵-𨐹𰺫辮䢄𨐺-𨐼𫐝辯𨐽𰺬𨐾𨐿𬨛𨑀-𨑂]
[radical 161=⾠辰:辰𨑃𨑄𮝾辱農䢅𨑅-𨑇𰺭䢆辳䢇𨑈𨑉𮝿𮞀辴𨑊䢈䢉𨑋𨑌]
[radical 162=⾡辵:辵辶𠔇辷𫐞辸-辽𨑍-𨑐𫟧𬨜𰺮巡达-迉䢊䢋𨑑-𨑡𫐟𮞁-𮞃𰺯-𰺳迊-迟迬﨤䢌-䢏𨑢-𨒁𫐠𫐡𬨝-𬨠𮞄𮞅𰺴𰺵迠-迫迭-迳䢐䢑𨒂-𨒤𫐢-𫐤𬨡-𬨣𮞆-𮞎𰺶迴-逊䢒-䢘𨒥-𨓄𫐥𬨤𬨥𮞏-𮞑𰺷-𰺺逋-逧䢙-䢛𨓅-𨓪𫐦-𫐪𬨦-𬨬𮞒-𮞕𰺻-𰺽逨-逻䢜-䢠𨓫-𨔍𨔏-𨔜𨔠𫐫-𫐲𬨭-𬨲𮞖-𮞨𰺾-𰻅逼-遗䢡𨔎𨔝-𨔟𨔡-𨕜𫐳-𫐹𫟨𫟩𬨳-𬨹𮞩-𮞵𰻆-𰻈遘-遥䢢-䢥𨕝-𨖅𫐺-𫐽𬨺-𬨿𮞶-𮞼𰻉-𰻍遦-遱遳䢦-䢩𨖆-𨖳𫐾-𫑃𬩀-𬩈𮞽-𮟈𰻎-𰻑遲遴-遼邆䢪-䢭𨖴-𨗒𨗔-𨗤𫑄-𫑊𬩉-𬩐𮟉-𮟏𰻒-𰻕遽-邅邉䢮𨗥-𨘆𫑋𫟪𬩑-𬩛𮟐-𮟗𰻖-𰻚邇邈䢯䢰𨘇-𨘠𩄮𫑌-𫑏𬩜-𬩣𮟘-𮟜邊-邌䢱𨘡-𨘶𫑐𫑑𬩤-𬩪𮟝-𮟡邍𨘷-𨘻𨘽-𨙁𬩫-𬩮𮟢𮟣𰻛邎𨙂-𨙑𫑒-𫑕𮟤-𮟦𨙒-𨙘𫑖𬩯-𬩲𮟧𰻜邏邐𨙙-𨙞䢲𨙟-𨙥𮟨𨙦𮟩𨙧𰻝𰻞]
-[radical 163=⾢邑:邑𨙨邒邓䢳𨙩𨙪𬩳𬩴邔-邝䢴𨙫-𨙵𫑗𮟪𮟫𰻟𰻠邞-邬䢵-䢷𨙶-𨚒𫑘𫑙𬩵𬩶𮟬-𮟮𰻡-𰻦邭-邻䢸-䢺𨚓-𨚮𫑚𫑛𫟫𬩷-𬩹𮟯-𮟶𰻧𰻨邼-郑郓䢻-䣂𨚯-𨛊𫑜𬩺-𬩽𮟷-𮟺𰻩郒郔-郧䣃-䣉𨛋-𨛪𫑝-𫑟𬩾-𬪄𮟻𮟼𰻪-𰻬部-郸䣊-䣏𨛫-𨜎𫑠-𫑢𫟬𬪅-𬪊𮟽-𮟿𰻭-𰻱郹-鄊䣐-䣒𨜏-𨜖𨜘-𨜱𫑣𫑤𫟭𬪋-𬪐𮠀-𮠂𰻲𰻳鄋-鄗䣓-䣗𨜗𨜲-𨝊𫑥𫑦𮠃-𮠅𰻴-𰻸鄘-鄥䣘-䣜𨝋-𨝪𨝹𫑧-𫑩𬪑-𬪔𮠆𰻹-𰻻鄦-鄲䣝-䣠𨝫-𨝸𨝺-𨞐𬪕𬪖𮠇-𮠉𰻼鄳-鄷䣡𨞑-𨞦𫑪𫑫𬪗-𬪛𮠊-𮠎𰻽鄸鄹䣢𨞧-𨞹𫑬𬪜𮠏𮠐𰻾鄺-鄾𨞺-𨟌𫑭𬪝-𬪟𮠑𮠒𰻿鄿酀酂𨟍-𨟘𫑮-𫑰𬪠-𬪢𰼀𰼁酁酃𨟙-𨟟𬪣𬪤𮠓酄-酆𨟠-𨟣𫑱𮠔酇酈𨟤-𨟧䣣䣤𨟨-𨟮𬪥𨟯𫑲𰼂]
+[radical 163=⾢邑:邑𨙨邒邓䢳𨙩𨙪𬩳𬩴邔-邝䢴𨙫-𨙵𫑗𮟪𮟫𰻟𰻠邞-邬䢵-䢷𨙶-𨚒𫑘𫑙𬩵𬩶𮟬-𮟮𰻡-𰻦邭-邻䢸-䢺𨚓-𨚮𫑚𫑛𫟫𬩷-𬩹𮟯-𮟶𰻧𰻨邼-郑郓䢻-䣂𨚯-𨛊𫑜𬩺-𬩽𮟷-𮟺𰻩郒郔-郧䣃-䣉𨛋-𨛪𫑝-𫑟𫜷𬩾-𬪄𮟻𮟼𰻪-𰻬部-郸䣊-䣏𨛫-𨜎𫑠-𫑢𫟬𬪅-𬪊𮟽-𮟿𰻭-𰻱郹-鄊䣐-䣒𨜏-𨜖𨜘-𨜱𫑣𫑤𫟭𬪋-𬪐𮠀-𮠂𰻲𰻳鄋-鄗䣓-䣗𨜗𨜲-𨝊𫑥𫑦𮠃-𮠅𰻴-𰻸鄘-鄥䣘-䣜𨝋-𨝪𨝹𫑧-𫑩𬪑-𬪔𮠆𰻹-𰻻鄦-鄲䣝-䣠𨝫-𨝸𨝺-𨞐𬪕𬪖𮠇-𮠉𰻼鄳-鄷䣡𨞑-𨞦𫑪𫑫𬪗-𬪛𮠊-𮠎𰻽鄸鄹䣢𨞧-𨞹𫑬𬪜𮠏𮠐𰻾鄺-鄾𨞺-𨟌𫑭𬪝-𬪟𮠑𮠒𰻿鄿酀酂𨟍-𨟘𫑮-𫑰𬪠-𬪢𰼀𰼁酁酃𨟙-𨟟𬪣𬪤𮠓酄-酆𨟠-𨟣𫑱𮠔酇酈𨟤-𨟧䣣䣤𨟨-𨟮𬪥𨟯𫑲𰼂]
[radical 164=⾣酉:酉𮠕酊酋䣥䣦𮠖𮠗酌-酒䣧䣨𨟰-𨟳𫑳𮠘-𮠚𰼃酓-酞䣩-䣭𨟴-𨠊𬪦𬪧𮠛-𮠠𰼄酟-酥䣮-䣳𨠋-𨠣𬪨𮠡-𮠤𰼅𰼆酦-酱䣴-䣹𨠤-𨠶𫑴𫑵𫟮𬪩𮠥-𮠪酲-酿䣺䣻𨠷-𨡋𫑶-𫑸𬪪-𬪬𮠫-𮠭𰼇-𰼉醀-醌䣼-䣿𨡌-𨡨𫑹𮠮-𮠴𰼊-𰼌醍-醗䤀-䤈𨡩-𨢄𬪭-𬪱𮠵-𮠻𰼍𰼎醘-醤䤉-䤌𨢅-𨢠𫑺𬪲-𬪵𮠼𰼏醥-醬䤍𨢡-𨢼𫑻𬪶𮠽-𮡀𰼐-𰼒醭-醱䤎-䤒𨢽-𨣕𫑼𫑽𮡁-𮡄𰼓𰼔醲-醸𨣖-𨣥𬪷-𬪹𮡅𮡆醹-醻䤓䤔𨣦-𨣭𫑾𮡇-𮡊𰼕䤕䤖𨣮-𨣵𮡋𮡌𰼖醼𨣶-𨣽𫑿醽-釀䤗䤘𨣾-𨤂𮡍釁釂𨤃𨤄釃釄𨤅𨤆釅𨤇-𨤉䤙𨤊-𨤎]
[radical 165=⾤釆:釆采𨤏𬪺𮡎釈𨤐𨤑𮡏𰼗釉释𫒀𬪻𨤒-𨤙𮡐𤳛𨤚-𨤝𮡑釋𨤞-𨤡]
[radical 166=⾥里:里𰼘重𫟯𨤣𨤤野䤚𨤢𨤥𫒁𮡒𰼙量𨤦-𨤩𫒂𬪼𬪽𮡓𨤪𨤫𬪾𮡔-𮡖𨤬𫒃𮡗𮡘𨤭-𨤯𮡙𨤰𨤱𮡚𰼚-𰼝𡣢𨤲𨤳𫒄𬪿𬫀𰼞釐𨤴-𨤷𮡛𫒅𮡜𮡝𥣷𨤸𬫁𮡞-𮡢𨤹𨤺𮡣𨤻𨤼]
[radical 167=⾦金:金-釢䤛𨤽-𨥁釣-釼䤜𨥂-𨥉𫒆-𫒉𮡤-𮡦𰼟𰼠釽-鈬䤝-䤠𨥊-𨥤𫒊-𫒎𬫂-𬫅𮡧-𮡭𰼡-𰼣鈭-鉴銏龯䤡-䤣𨥥-𨦁𫒏-𫒔𬫆-𬫌𮡮-𮡰𰼤-𰼦鉵-鉻鉽-銎銐-銱䤤-䤪𨦂-𨦝𨦟-𨦫𫒕-𫒜𫟰𬫍-𬫓𮡱-𮡷𰼧-𰼬銲-鋶﨧䤫-䤲𨦬-𨧥𫒝-𫒥𬫔-𬫠𮡸-𮢁𰼭-𰼴鉼鋷-錧錩-鍆鍈龬﨨䤳-䤶𨧦-𨨮𫒦-𫒯𬫡-𬫬𮢂-𮢘𰼵-𰼺錨鍇鍉-鎇䤷-䤼𨨯-𨪆𫒰-𫒷𬫭-𬫲𮢙-𮢧𰼻-𰽁鎈-鎨鎪-鎿龲䤽-䥇𨪇-𨫎𫒸-𫒾𫟱𬫳-𬫾𮢨-𮢳𰽂𰽃鎩鏀-鏲鏹䥈-䥓𨫏-𨬌𫒿-𫓃𬫿-𬬄𮢴-𮢽𰽄𰽅鏳鏵-鏸鏺-鐨䥔-䥜𨬍-𨬔𨬖-𨭔𫓄-𫓎𬬅-𬬊𮢾-𮣎𰽆-𰽌鏴鐩-鑁䥝-䥦𨬕𨭕-𨮑𫓏-𫓕𬬋-𬬑𮣏-𮣘𰽍鑂-鑔鑧䥧-䥮𨮒-𨮷𫓖-𫓚𬬒-𬬗𮣙-𮣝𰽎-𰽑鑕-鑦䥯-䥴𨮸-𨯜𫓛𫓜𬬘-𬬛𮣞-𮣤𰽒鑨-鑬䥵-䥷𨯝-𨯹𫓝-𫓟𬬜-𬬞𮣥-𮣩鑭-鑳䥸𨯺-𨰈𨰱𫓠-𫓢𬬟𬬠𮣪𮣫鑴-鑺𨰉-𨰝𫓣𬬡𬬢𮣬𮣭鑻-鑿𨰞-𨰨𫓤𮣮钀-钂𨰩-𨰰𬬣𮣯钃钄䥹𨰲-𨰶𬬤𨰷-𨰹𬬥𰽓𨰺𬬦𨰻𮣰𨰼𨰽𮣱𰽔]
[radical 167'=⻐钅:钅-钌𫓥𫟲𰽕𰽖钍-钗𨰾𨰿𫓦𫟳𬬧-𬬪𮣲𰽗-𰽛钘-钯䥺-䥼𨱀-𨱂𫓧-𫓫𫟴𫟵𬬫-𬬶𮣳𰽜-𰽤钰-铎鿭䥽-䥿𨱃-𨱆𫓬-𫓮𫟶𫟷𬬷-𬭂𰽥-𰽱铏-铷䦀𫓯-𫓴𫟸-𫟻𬭃-𬭉𰽲-𰽽铸-锕鿏䦁𨱇𨱈𫓵-𫓷𫟼𬭊-𬭐𮣴𰽾-𰾋锖-锱𨱉-𨱌𫓸-𫓿𫟽𬭑-𬭝𮣵𰾌-𰾓锲-镅𨱎𫔀-𫔄𫟾𫟿𬭞-𬭥𰾔-𰾦镆-镕鿔䦂𨱍𨱏𫔅-𫔈𫠀𬭦-𬭫𮣶𰾧-𰾯镖-镠𨱐𨱒𫔉𫔊𬭬-𬭲𰾰-𰾲镡-镫䦃-䦅𨱑𨱓𨱔𫔋-𫔏𬭳-𬭹𰾳-𰾽镬-镱𨱕𨱖𫔐𫔑𬭺-𬭽𮣷𰾾-𰿁镲𫔒𫠁𬭾𰿂镳镴𬭿𰿃-𰿅𫔓𬮀𰿆𰿇镵镶𬮁𰿈𫔔𰿉𫔕𬮂𰿊䦆𬮃]
-[radical 168=⾧長:長镸𨱗-𨱙镹䦇𮣸𰿋镺𨱚-𨱥𮣹𮣺𰿌镻䦈䦉𨱦-𨱱𮣻䦊𨱲-𨱿𫔖𬮄𮣼𮣽𰿍𨲀-𨲆𮣾𮣿𰿎-𰿐镼𨲇-𨲒𫔗𮤀𮤁𰿑𡑺𨲓-𨲕𨲗-𨲝𰿒𨲖𨲞-𨲤𮤂𰿓䦋𨲥-𨲬𮤃𮤄𰿔𰿕镽𨲭-𨲷𮤅𮤆镾𨲸-𨳆]
+[radical 168=⾧長:長镸𨱗-𨱙镹䦇𮣸𰿋镺𨱚-𨱥𨱪𮣹𮣺𰿌镻䦈䦉𨱦-𨱩𨱫-𨱱𮣻䦊𨱲-𨱿𫔖𬮄𮣼𮣽𰿍𨲀-𨲆𮣾𮣿𰿎-𰿐镼𨲇-𨲒𫔗𮤀𮤁𰿑𡑺𨲓-𨲕𨲗-𨲝𰿒𨲖𨲞-𨲤𮤂𰿓䦋𨲥-𨲬𮤃𮤄𰿔𰿕镽𨲭-𨲷𮤅𮤆镾𨲸-𨳆]
[radical 168'=⻓长:长𰿖]
[radical 169=⾨門:門𨳇𨳈閁閂𨳉𫔘閃-閅𨳊-𨳏𬮅𰿗閆-閊䦌䦍𨳐-𨳖𫔙𬮆𮤇𰿘-𰿛開-閗䦎-䦑𨳗-𨳲𫔚𫔛𬮇𬮈𮤈𮤉𰿜𰿝閘-閠䦒-䦔𨳳-𨴌𫔜-𫔠𬮉𮤊-𮤍𰿞閡-閪䦕-䦛𨴍-𨴦𮤎𮤏𰿟閫-閴䦜-䦟𨴧-𨵇𫔡-𫔤𬮊-𬮌閵閶閸-闂䦠-䦨𨵈-𨵤𫔥-𫔧𮤐-𮤖𰿠-𰿢閷闃-闏䦩-䦯𨵥-𨵿𫔨𬮍𬮎𮤗-𮤛𰿣闐-闘𨶀-𨶛𬮏-𬮑𮤜-𮤞闙-闝䦰𨶜-𨶫𫔩𬮒𮤟-𮤡闞-闡䦱𨶬-𨷂𬮓𮤢-𮤥闢-闦䦲-䦴𨷃-𨷓𨷕-𨷗𫔪𬮔𬮕𮤦𮤧闧䦵𨷔𨷘-𨷞𬮖𮤨𰿤𨷟-𨷥𬮗𨷦-𨷮𨷶𮤩𨷯-𨷵𨷸𫔫𮤪𨷷𨷹-𨷾]
[radical 169'=⻔门:门闩𰿥闪𬮘𮤫𰿦闫-闯𨷿-𨸁𫔬𬮙-𬮛𮤬𮤭𰿧闰-闷𨸂𨸃𫔭-𫔯𬮜-𬮟𮤮-𮤰𰿨-𰿫闸闹𫔰𫠂𬮠𬮡𮤱𮤲𰿬𰿭闺-阂䦶𨸄𨸅𫔱𬮢-𬮧𮤳𰿮阃-阆䦷𫔲𫔳𬮨-𬮪𰿯𰿰阇-阐𫔴𬮫-𬮰𮤴-𮤶𰿱-𰿳阑-阕䦸𨸆-𨸈𬮱-𬮵𮤷𰿴-𰿶阖-阙𨸉𨸊𫔵𫔶𰿷𰿸阚𫔷𫔸𬮶𬮷𰿹𰿺𨸋𨸌𬮸𬮹𮤸𰿻𰿼阛𰿽𰿾𨸍𫔹𰿿𱀀𨸎]
@@ -194,7 +194,7 @@
[radical 173=⾬雨:雨𮦄𩁶-𩁸𫕝𱁑雩-雫䨋𩁹-𩂁𫕞𬯸𮦅雬-雳䨌䨍𩂂-𩂑𫕟𫕠𬯹𬯺𮦆-𮦉雴-雾䨎𩂒-𩂡𫕡𫕢𬯻𮦊-𮦍𱁒𱁓雿-霁䨏-䨖𩂢-𩂶𫕣𫕤𮦎𮦏霂-霊䨗-䨙𩂷-𩃑𫕥𫕦𬯼𬯽𮦐-𮦓𱁔-𱁚霋-霗䨚-䨝𩃒-𩃴𫕧𫕨𬯾-𬰃𮦔-𮦛𱁛-𱁟霘-霠䨞-䨤𩃵-𩃽𩃿-𩄖𫕩𫕪𬰄-𬰇𮦜-𮦣𱁠-𱁢霡-霥䨥-䨪𩃾𩄗-𩄭𩄯-𩄺𫕫𬰈𮦤-𮦫霦-霭䨫-䨯𩄻-𩅜𫕬𫕭𬰉𬰊𮦬𱁣霮-霴䨰䨱𩅝-𩅻𫕮-𫕱𬰋-𬰍𮦭-𮦲霵-霻𩅼-𩆐𫕲𬰎-𬰐𮦳-𮦶霼-靀䨲-䨴𩆑-𩆣𫕳𫕴𬰑-𬰔𮦷-𮦻𱁤靁䨵䨶𩆤-𩆬𮦼𱁥-𱁨靂-靈䨷𩆭-𩆴𫕵𫕶𮦽𱁩靉䨸𩆵-𩆾𮦾靊𩆿-𩇇𮦿靋-靎鿨䨹𬰕𮧀𮧁𩇈𩇉靏𩇊-𩇎𫕷𬰖𮧂𩇏𱁪𩇐𩇑𱁫䨺𩇒靐𩇓𩇔䨻𱁬]
[radical 174=⾭靑:靑青𩇕𫕸靓靔𩇖𩇗靕靖𩇘-𩇛𫕹𫕺𬰗𬰘𮧃靗-静𩇜靚𱁭𱁮靛靜𩇝𩇞𫕻𩇟靝𩇠𩇡𫕼𩇢𩇣䨼𩇤𩇥]
[radical 175=⾮非:非𩇦-𩇨䨽䨾𩇩-𩇬𬰙靟䨿𩇭-𩇴𮧄𩇵𩇶𬰚𬰛𮧅𮧆𩇷𫕽𮧇靠䩀𩇸-𩇻𬰜𩇼𩇽𬰝靡𬰞䩁𩇾-𩈁𱁯𫕾𬰟𮧈𫕿𩈂]
-[radical 176=⾯面:面靣𠚑𩈃-𩈅𮧉䩂-䩄𩈆-𩈌靤䩅-䩇𩈍-𩈘𫖀𬰠𮧊𮧋靥𤎂𩈙-𩈠𫖁𮧌靦䩈䩉𩈡-𩈪𫖂𮧍䩊𩈫-𩈱𬰡𮧎𩈲-𩈷𫖃𮧏𩈸-𩈺𱁰䩋𩈻-𩉀𬰢𬰣𮧐靧䩌䩍𩉁-𩉉𫖄𮧑𮧒䩎𩉊𩉋靨𩉌-𩉐䩏𩉑-𩉚]
+[radical 176=⾯面:面靣𠚑𩈃-𩈅𮧉䩂-䩄𩈆-𩈌靤䩅-䩇𩈍-𩈘𫖀𬰠𮧊𮧋靥𤎂𩈙-𩈠𫖁𮧌靦䩈䩉𩈡-𩈪𫖂𮧍䩊𩈫-𩈱𬰡𮧎𩈲-𩈷𫖃𮧏𩈸-𩈺𱁰䩋𩈻-𩉀𫖄𬰢𬰣𮧐靧䩌䩍𩉁-𩉉𮧑𮧒䩎𩉊𩉋靨𩉌-𩉐䩏𩉑-𩉚]
[radical 177=⾰革:革𮧓靪𩉛𩉜靫-靱䩐-䩒𩉝-𩉠𱁱靲-靹䩓-䩘𩉡-𩉷𮧔𱁲靺-鞆䩙-䩞𩉸-𩊏𫖅𫖆𮧕-𮧗𱁳鞇-鞒䩟𩊐-𩊨𫖇𫖈𬰤𮧘𮧙𱁴𱁵鞓-鞙䩠-䩧𩊩-𩊾𬰥𮧚-𮧝𱁶鞚-鞡䩨-䩮𩊿-𩋞𬰦𮧞𱁷鞢-鞰䩯-䩵𩋟-𩌂𬰧𮧟-𮧢𱁸-𱁺鞱-鞷䩶-䩻𥌕𩌃-𩌥𮧣-𮧥𱁻𱁼鞸-鞻䩼-䩾𩌦-𩍂𫖉𮧦-𮧩鞼-鞿䩿-䪄𩍃-𩍒𫖊𬰨𬰩𮧪𮧫𱁽韀-韃䪅䪆𩍓-𩍤𫖋𮧬𮧭韄韅䪇䪈𩍥-𩍱韆-韈䪉𩍲-𩍷䪊䪋𩍸-𩍺𩍼-𩍾𱁾韉䪌䪍𩍿-𩎆䪎𩎇-𩎊韊𩎋-𩎑]
[radical 178=⾱韋:韋𮧮-𮧰𫖌韌𩎒𱁿䪏𩎓-𩎗𫖍𬰪𱂀韍韎䪐-䪓𩎘-𩎣𱂁韏-韑𩎤-𩎮𫠄𬰫-𬰭𮧱韒䪔𩎯-𩎷𱂂韓-韕䪕𩎸-𩏄𫖎韖-韚䪖-䪘𩏅-𩏎𬰮𮧲韜-韟䪙䪚𩏏-𩏗韛韠𩏘-𩏟𫖏韡韢䪛𩏠-𩏧𮧳韣䪜𩏨-𩏭䪝𩏮-𩏱𬰯韤韥𩏲𩏳𫖐𩏴𩏵𬰰𩏶-𩏻]
[radical 178'=⻙韦:韦韧𬰱𩏼𫖑𬰲𮧴𱂃韨𩏽𩏾𬰳𬰴𱂄𱂅𫖒𮧵𱂆-𱂉韩𫖓韪韫𩏿𩐀𫠅𬰵𱂊韬𫖔-𫖖𬰶𬰷𱂋𱂌𬰸]
@@ -241,8 +241,8 @@
[radical 209=⿐鼻:鼻𮮰-𮮵𪖐鼼鼽𪖑𪖒𱌑𱌒鼾鼿𪖓𪖔𮮶䶊䶋𪖕-𪖙𫜤𱌓齀齁䶌𪖚-𪖠𱌔䶍䶎𪖡-𪖤𬹯𮮷𱌕𱌖䶏𪖥-𪖬齂𪖭𪖮𬹰齃齄𪖯-𪖲齅齆𪕿𪖳-𪖵齇𪖶-𪖽𮮸齈䶐𪖾-𪗀䶑𪗁𪗂𮮹𪗃齉]
[radical 210=⿑齊:齊𪗄𬹱𮮺-𮮼𪗅齋䶒䶓𪗆齌𠆜𪗇𪗈齍𪗉𪗊𬹲𪗋𪗌齎𪗎𪗍齏𪗏-𪗓]
[radical 210'=⻬齐:齐𬹳𱌗-𱌙齑]
-[radical 211=⿒齒:齒𣦋𮮽齓齔𪗔-𪗗𮮾齕䶔𪗘-𪗚𮮿齖-齘䶕䶖𪗛-𪗤𫠙𮯀𮯁𱌚-𱌜齙-齣䶗-䶙𠎜𪗥-𪗶𬹴𮯂𮯃𱌝齤-齩䶚䶛𪗷-𪘍𫜥𬹵-𬹷𮯄-𮯆齪-齬䶜䶝𪘎-𪘤𫜦𮯇𱌞齭-齱䶞䶟𪘥-𪘸𮯈-𮯊齲-齷䶠-䶢𪘹-𪙈𫠛𮯋-𮯎𱌟-𱌡齸-齻䶣䶤𪙉-𪙙𮯏𮯐𱌢𱌣䶥䶦𪙚-𪙢𮯑-𮯓𱌤䶧𪙣-𪙯𫜧𬹸𮯔-𮯖𱌥齼齽䶨𪙰-𪙵𮯗𱌦䶩䶪𪙶𱌧𪙷-𪚀𬹹𱌨𪚁-𪚄𮯘𪚅-𪚉齾䶫𪚊-𪚎]
-[radical 211'=⻮齿:齿-龁𱌩龂𫜨𬹺-𬹽𱌪龃-龆𫠚𬹾-𬺀𮯙𱌫-𱌯龇龈𪚏𫜩𫜪𬺁-𬺅𱌰-𱌳龉龊𫜫𬺆𬺇𱌴𱌵𪚐𫜬𫜭𫠜𬺈-𬺌𱌶-𱌸龋龌𫜮𬺍𬺎𱌹𫜯𬺏-𬺑𱌺-𱌽𬺒𫜰𬺓-𬺖]
+[radical 211=⿒齒:齒𣦋𮮽齓齔𪗔-𪗗𮮾齕䶔𪗘-𪗚𮮿齖-齘䶕䶖𪗛-𪗤𫠙𮯀𮯁𱌚-𱌜齙-齣䶗-䶙𠎜𪗥-𪗶𫠚𬹴𮯂𮯃𱌝齤-齩䶚䶛𪗷-𪘍𫜥𬹵-𬹷𮯄-𮯆齪-齬䶜䶝𪘎-𪘤𫜦𮯇𱌞齭-齱䶞䶟𪘥-𪘸𮯈-𮯊齲-齷䶠-䶢𪘹-𪙈𫠛𮯋-𮯎𱌟-𱌡齸-齻䶣䶤𪙉-𪙙𮯏𮯐𱌢𱌣䶥䶦𪙚-𪙢𮯑-𮯓𱌤䶧𪙣-𪙯𫜧𬹸𮯔-𮯖𱌥齼齽䶨𪙰-𪙵𮯗𱌦䶩䶪𪙶𱌧𪙷-𪚀𬹹𱌨𪚁-𪚄𮯘𪚅-𪚉齾䶫𪚊-𪚎]
+[radical 211'=⻮齿:齿-龁𱌩龂𫜨𬹺-𬹽𱌪龃-龆𬹾-𬺀𮯙𱌫-𱌯龇龈𪚏𫜩𫜪𬺁-𬺅𱌰-𱌳龉龊𫜫𬺆𬺇𱌴𱌵𪚐𫜬𫜭𫠜𬺈-𬺌𱌶-𱌸龋龌𫜮𬺍𬺎𱌹𫜯𬺏-𬺑𱌺-𱌽𬺒𫜰𬺓-𬺖]
[radical 212=⿓龍:龍-龏𪚑-𪚔𬺗𬺘龑𪚕-𪚘𪚚𪚛龒𪚙𱌾龓-龕䶬𪚜-𪚟𮯚𱌿𪚠𪚡𫜱𬺙𬺚𪚢𱍀𪚣𪚤龖-龘𪚥]
[radical 212'=⻰龙:龙𬺛𱍁䶭䶮𬺜𱍂龚龛𫜲𬺝]
[radical 213=⿔龜:龜𪚦𪛉𮯛-𮯟𪚨䶯𪚩𪚪䶰𪚫-𪚵龝䶱䶲𪚧𪚶-𪛀𪓻𪛁-𪛄龞𪛅𪛆𫠝𪛇𪛈]
@@ -254,7 +254,7 @@
[top_byte 00 TERMINATOR ]
[top_byte 01 LEVEL-SEPARATOR ]
[top_byte 02 FIELD-SEPARATOR ]
-[top_byte 03 SPACE PUNCTUATION ] # 694 primary weights
+[top_byte 03 SPACE PUNCTUATION ] # 715 primary weights
[top_byte 04 SPACE PUNCTUATION ]
[top_byte 05 SPACE PUNCTUATION ]
[top_byte 06 SPACE PUNCTUATION ]
@@ -263,7 +263,7 @@
[top_byte 09 SPACE PUNCTUATION ]
[top_byte 0A SPACE PUNCTUATION ]
[top_byte 0B SPACE PUNCTUATION ]
-[top_byte 0C SYMBOL CURRENCY ] # 6392 primary weights
+[top_byte 0C SYMBOL CURRENCY ] # 6582 primary weights
[top_byte 0D SYMBOL CURRENCY ]
[top_byte 0E DIGIT ] # 507 primary weights
[top_byte 0F DIGIT ]
@@ -292,7 +292,7 @@
[top_byte 26 DIGIT ]
[top_byte 27 REORDER_RESERVED_BEFORE_LATIN ]
[top_byte 28 REORDER_RESERVED_BEFORE_LATIN ]
-[top_byte 29 Latn ] # 398 primary weights
+[top_byte 29 Latn ] # 426 primary weights
[top_byte 2A Latn ]
[top_byte 2B Latn ]
[top_byte 2C Latn ]
@@ -349,12 +349,12 @@
[top_byte 5F REORDER_RESERVED_AFTER_LATIN ]
[top_byte 60 Grek Copt COMPRESS ] # 107 primary weights
[top_byte 61 Cyrl COMPRESS ] # 158 primary weights
-[top_byte 62 Glag Perm COMPRESS ] # 87 primary weights
+[top_byte 62 Glag Perm COMPRESS ] # 88 primary weights
[top_byte 63 Geor COMPRESS ] # 87 primary weights
[top_byte 64 Armn COMPRESS ] # 42 primary weights
[top_byte 65 Hebr Phnx Samr COMPRESS ] # 73 primary weights
-[top_byte 66 Arab COMPRESS ] # 229 primary weights
-[top_byte 67 Syrc Mand Thaa Nkoo Tfng Ethi COMPRESS ] # 661 primary weights
+[top_byte 66 Arab COMPRESS ] # 237 primary weights
+[top_byte 67 Syrc Mand Thaa Nkoo Tfng Ethi COMPRESS ] # 689 primary weights
[top_byte 68 Deva COMPRESS ] # 103 primary weights
[top_byte 69 Beng COMPRESS ] # 67 primary weights
[top_byte 6A Guru COMPRESS ] # 58 primary weights
@@ -364,18 +364,18 @@
[top_byte 6E Telu COMPRESS ] # 75 primary weights
[top_byte 6F Knda COMPRESS ] # 75 primary weights
[top_byte 70 Mlym COMPRESS ] # 75 primary weights
-[top_byte 71 Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks COMPRESS ] # 1505 primary weights
+[top_byte 71 Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks COMPRESS ] # 1519 primary weights
[top_byte 72 Thai COMPRESS ] # 65 primary weights
[top_byte 73 Laoo Tavt COMPRESS ] # 132 primary weights
[top_byte 74 Tibt Zanb Soyo COMPRESS ] # 208 primary weights
-[top_byte 75 Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr COMPRESS ] # 806 primary weights
-[top_byte 76 Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam COMPRESS ] # 1414 primary weights
-[top_byte 77 Runr Hung Orkh COMPRESS ] # 135 primary weights
+[top_byte 75 Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr COMPRESS ] # 809 primary weights
+[top_byte 76 Tale Talu Lana Cham Bali Java Mong Olck Cher Osge COMPRESS ] # 679 primary weights
+[top_byte 77 Cans Ogam Runr Hung Orkh COMPRESS ] # 886 primary weights
[top_byte 78 Vaii Bamu Bass Mend Medf Adlm COMPRESS ] # 1218 primary weights
[top_byte 79 Hang COMPRESS ] # 358 primary weights
-[top_byte 7A Hira Hrkt Kana COMPRESS ] # 336 primary weights
-[top_byte 7B Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth COMPRESS ] # 1868 primary weights
-[top_byte 7C Dsrt Shaw Dupl Osma Elba Aghb Sora Mroo Linb Lina Cprt Sarb Narb Avst Palm Nbat Hatr Armi Prti Phli Phlp Elym Mani Sogo Sogd Yezi Chrs Ugar Xpeo Xsux COMPRESS ] # 2654 primary weights
+[top_byte 7A Hira Hrkt Kana COMPRESS ] # 339 primary weights
+[top_byte 7B Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Toto Wcho Lyci Cari Lydi Ital Goth COMPRESS ] # 1899 primary weights
+[top_byte 7C Dsrt Shaw Dupl Osma Elba Aghb Vith Sora Mroo Tnsa Linb Lina Cprt Cpmn Sarb Narb Avst Palm Nbat Hatr Armi Prti Phli Phlp Elym Mani Sogo Sogd Ougr Yezi Chrs Ugar Xpeo Xsux COMPRESS ] # 2887 primary weights
[top_byte 7D Egyp Merc Mero Hluw Tang Nshu Kits COMPRESS ] # 9467 primary weights
[top_byte 7E Hani Hans Hant ]
[top_byte 7F Hani Hans Hant ]
@@ -653,6 +653,23 @@
0749; [,,]
074A; [,,]
07FA; [,,]
+0890; [,,]
+0891; [,,]
+0898; [,,]
+0899; [,,]
+089A; [,,]
+089B; [,,]
+089C; [,,]
+089D; [,,]
+08CA; [,,]
+08CB; [,,]
+08CC; [,,]
+08CD; [,,]
+08CE; [,,]
+08CF; [,,]
+08D0; [,,]
+08D1; [,,]
+08D2; [,,]
08D3; [,,]
08D4; [,,]
08D5; [,,]
@@ -697,6 +714,7 @@
180C; [,,]
180D; [,,]
180E; [,,]
+180F; [,,]
1A7F; [,,]
1B6B; [,,]
1B6C; [,,]
@@ -812,6 +830,75 @@ A8F1; [,,]
1BCA1; [,,]
1BCA2; [,,]
1BCA3; [,,]
+1CF00; [,,]
+1CF01; [,,]
+1CF02; [,,]
+1CF03; [,,]
+1CF04; [,,]
+1CF05; [,,]
+1CF06; [,,]
+1CF07; [,,]
+1CF08; [,,]
+1CF09; [,,]
+1CF0A; [,,]
+1CF0B; [,,]
+1CF0C; [,,]
+1CF0D; [,,]
+1CF0E; [,,]
+1CF0F; [,,]
+1CF10; [,,]
+1CF11; [,,]
+1CF12; [,,]
+1CF13; [,,]
+1CF14; [,,]
+1CF15; [,,]
+1CF16; [,,]
+1CF17; [,,]
+1CF18; [,,]
+1CF19; [,,]
+1CF1A; [,,]
+1CF1B; [,,]
+1CF1C; [,,]
+1CF1D; [,,]
+1CF1E; [,,]
+1CF1F; [,,]
+1CF20; [,,]
+1CF21; [,,]
+1CF22; [,,]
+1CF23; [,,]
+1CF24; [,,]
+1CF25; [,,]
+1CF26; [,,]
+1CF27; [,,]
+1CF28; [,,]
+1CF29; [,,]
+1CF2A; [,,]
+1CF2B; [,,]
+1CF2C; [,,]
+1CF2D; [,,]
+1CF30; [,,]
+1CF31; [,,]
+1CF32; [,,]
+1CF33; [,,]
+1CF34; [,,]
+1CF35; [,,]
+1CF36; [,,]
+1CF37; [,,]
+1CF38; [,,]
+1CF39; [,,]
+1CF3A; [,,]
+1CF3B; [,,]
+1CF3C; [,,]
+1CF3D; [,,]
+1CF3E; [,,]
+1CF3F; [,,]
+1CF40; [,,]
+1CF41; [,,]
+1CF42; [,,]
+1CF43; [,,]
+1CF44; [,,]
+1CF45; [,,]
+1CF46; [,,]
1D165; [,,]
1D166; [,,]
1D167; [,,]
@@ -1423,6 +1510,14 @@ FFFB; [,,]
1AB4; [, A6, 05]
1ABB; [, A6, 05]
1ABC; [, A6, 05]
+1AC1; [, A6, 05]
+1AC2; [, A6, 05]
+1AC5; [, A6, 05]
+1AC6; [, A6, 05]
+1AC7; [, A6, 05]
+1AC8; [, A6, 05]
+1AC9; [, A6, 05]
+1ACB; [, A6, 05]
1DC0; [, A6, 05]
1DC1; [, A6, 05]
1DC3; [, A6, 05]
@@ -1456,7 +1551,10 @@ A67D; [, A6, 05]
10F49; [, A6, 05]
10F4A; [, A6, 05]
10F4C; [, A6, 05]
+10F82; [, A6, 05]
+10F84; [, A6, 05]
1BC9D; [, A6, 05]
+1E2AE; [, A6, 05]
0316; [, A8, 05]
0317; [, A8, 05]
0318; [, A8, 05]
@@ -1502,10 +1600,14 @@ A67D; [, A6, 05]
1AB9; [, A8, 05]
1ABA; [, A8, 05]
1ABD; [, A8, 05]
+1AC3; [, A8, 05]
+1AC4; [, A8, 05]
+1ACA; [, A8, 05]
1DC2; [, A8, 05]
1DCF; [, A8, 05]
1DD0; [, A8, 05]
1DF9; [, A8, 05]
+1DFA; [, A8, 05]
1DFC; [, A8, 05]
1DFD; [, A8, 05]
1DFF; [, A8, 05]
@@ -1522,6 +1624,8 @@ A67D; [, A6, 05]
10F4E; [, A8, 05]
10F4F; [, A8, 05]
10F50; [, A8, 05]
+10F83; [, A8, 05]
+10F85; [, A8, 05]
FE27; [, A8, 05]
0336; [, AA, 05]
0337; [, AA, 05]
@@ -1660,6 +1764,8 @@ FC63; [, E8 1D, 2E][, EB 3B, 2C]
FE7F; [, E8 3E, 20]
FE7E; [, E8 3E, 2E]
0653; [, E8 5F, 05]
+089E; [, E8 5F, 05]
+089F; [, E8 5F, 05]
0AFC; [, E8 5F, 05]
10EAC; [, E8 5F, 05]
0654; [, E8 80, 05]
@@ -1736,6 +1842,7 @@ A6F1; [, EF 42, 05]
0AFE; [, F0 AF, 05]
0AFF; [, F0 AF, 05]
0B3C; [, F0 AF, 05]
+0C3C; [, F0 AF, 05]
0CBC; [, F0 AF, 05]
1B34; [, F0 AF, 05]
1BE6; [, F0 AF, 05]
@@ -2060,16 +2167,18 @@ FE31; [05 1A, 05, 2E]
2E40; [05 28, 05, 05]
-301C; [05 2A, 05, 05]
+2E5D; [05 2A, 05, 05]
-3030; [05 2C, 05, 05]
+301C; [05 2C, 05, 05]
-30A0; [05 2E, 05, 05]
+3030; [05 2E, 05, 05]
-30FB; [05 30, 05, 05]
-FF65; [05 30, 05, A0]
+30A0; [05 30, 05, 05]
-10EAD; [05 32, 05, 05]
+30FB; [05 32, 05, 05]
+FF65; [05 32, 05, A0]
+
+10EAD; [05 34, 05, 05]
002C; [06, 05, 05]
FF0C; [06, 05, 10]
@@ -2143,7 +2252,7 @@ A6F6; [07 32, 05, 05]
FF1A; [07 36, 05, 10]
FE55; [07 36, 05, 26]
FE13; [07 36, 05, 31]
-2A74; [07 36, 05, 1B][07 36, 05, 1B][0C 83, 05, 18]
+2A74; [07 36, 05, 1B][07 36, 05, 1B][0C 84, 05, 18]
0589; [07 38, 05, 05]
@@ -2226,56 +2335,60 @@ FF01; [07 5A, 05, 10]
FE57; [07 5A, 05, 20]
FE15; [07 5A, 05, 28]
203C; [07 5A, 05, 18][07 5A, 05, 18]
-2049; [07 5A, 05, 18][07 62, 05, 1B]
+2049; [07 5A, 05, 18][07 64, 05, 1B]
00A1; [07 5C, 05, 05]
-055C; [07 5E, 05, 05]
+2E53; [07 5E, 05, 05]
+
+055C; [07 60, 05, 05]
+
+07F9; [07 62 02, 05, 05]
-07F9; [07 60 02, 05, 05]
+1944; [07 62 09, 05, 05]
-1944; [07 60 09, 05, 05]
+1E95E; [07 62 10, 05, 05]
-1E95E; [07 60 10, 05, 05]
+003F; [07 64, 05, 05]
+FF1F; [07 64, 05, 10]
+FE56; [07 64, 05, 26]
+FE16; [07 64, 05, 31]
+2048; [07 64, 05, 1B][07 5A, 05, 18]
+2047; [07 64, 05, 1B][07 64, 05, 1B]
-003F; [07 62, 05, 05]
-FF1F; [07 62, 05, 10]
-FE56; [07 62, 05, 26]
-FE16; [07 62, 05, 31]
-2048; [07 62, 05, 1B][07 5A, 05, 18]
-2047; [07 62, 05, 1B][07 62, 05, 1B]
+00BF; [07 66, 05, 05]
-00BF; [07 64, 05, 05]
+2E2E; [07 68, 05, 05]
-2E2E; [07 66, 05, 05]
+2E54; [07 6A, 05, 05]
-055E; [07 68, 05, 05]
+055E; [07 6C, 05, 05]
-061F; [07 6A, 05, 05]
+061F; [07 6E, 05, 05]
-0709; [07 6C, 05, 05]
+0709; [07 70, 05, 05]
-1367; [07 6E, 05, 05]
+1367; [07 72, 05, 05]
-1945; [07 70 02, 05, 05]
+1945; [07 74 02, 05, 05]
-2CFA; [07 70 09, 05, 05]
+2CFA; [07 74 09, 05, 05]
-2CFB; [07 70 10, 05, 05]
+2CFB; [07 74 10, 05, 05]
-A60F; [07 70 17, 05, 05]
+A60F; [07 74 17, 05, 05]
-A6F7; [07 70 1E, 05, 05]
+A6F7; [07 74 1E, 05, 05]
-AAF1; [07 70 25, 05, 05]
+AAF1; [07 74 25, 05, 05]
-11143; [07 70 2C, 05, 05]
+11143; [07 74 2C, 05, 05]
-1E95F; [07 70 33, 05, 05]
+1E95F; [07 74 33, 05, 05]
-203D; [07 72, 05, 05]
+203D; [07 76, 05, 05]
-2E18; [07 74, 05, 05]
+2E18; [07 78, 05, 05]
002E; [08, 05, 05]
FF0E; [08, 05, 10]
@@ -2445,1193 +2558,1229 @@ ABEB; [09 34 56, 05, 05]
1C7F; [09 35 15, 05, 05]
-0700; [09 35 1C, 05, 05]
+061D; [09 37, 05, 05]
+
+0700; [09 39 02, 05, 05]
+
+07F7; [09 39 09, 05, 05]
+
+10FB; [09 3B, 05, 05]
+
+1360; [09 3D, 05, 05]
+
+1368; [09 3F, 05, 05]
+
+1A1E; [09 41 02, 05, 05]
+
+1A1F; [09 41 09, 05, 05]
+
+1B5A; [09 41 10, 05, 05]
+
+1B5B; [09 41 17, 05, 05]
+
+1B7D; [09 41 1E, 05, 05]
+
+1B7E; [09 41 25, 05, 05]
+
+A9C1; [09 41 2C, 05, 05]
+
+A9C2; [09 41 33, 05, 05]
+
+A9C3; [09 41 3A, 05, 05]
+
+A9C4; [09 41 41, 05, 05]
-07F7; [09 35 23, 05, 05]
+A9C5; [09 41 48, 05, 05]
-10FB; [09 37, 05, 05]
+A9C6; [09 41 4F, 05, 05]
-1360; [09 39, 05, 05]
+A9CA; [09 41 56, 05, 05]
-1368; [09 3B, 05, 05]
+A9CB; [09 41 5D, 05, 05]
-1A1E; [09 3D 02, 05, 05]
+A9CC; [09 41 64, 05, 05]
-1A1F; [09 3D 09, 05, 05]
+A9CD; [09 41 6B, 05, 05]
-1B5A; [09 3D 10, 05, 05]
+A6F2; [09 41 72, 05, 05]
-1B5B; [09 3D 17, 05, 05]
+A95F; [09 41 79, 05, 05]
-A9C1; [09 3D 1E, 05, 05]
+10857; [09 41 80, 05, 05]
-A9C2; [09 3D 25, 05, 05]
+10B3A; [09 41 87, 05, 05]
-A9C3; [09 3D 2C, 05, 05]
+10B3B; [09 41 8E, 05, 05]
-A9C4; [09 3D 33, 05, 05]
+10B3C; [09 41 95, 05, 05]
-A9C5; [09 3D 3A, 05, 05]
+10B3D; [09 41 9C, 05, 05]
-A9C6; [09 3D 41, 05, 05]
+10B3E; [09 41 A3, 05, 05]
-A9CA; [09 3D 48, 05, 05]
+10B3F; [09 41 AA, 05, 05]
-A9CB; [09 3D 4F, 05, 05]
+10F55; [09 41 B1, 05, 05]
-A9CC; [09 3D 56, 05, 05]
+10F56; [09 41 B8, 05, 05]
-A9CD; [09 3D 5D, 05, 05]
+10F57; [09 41 BF, 05, 05]
-A6F2; [09 3D 64, 05, 05]
+10F58; [09 41 C6, 05, 05]
-A95F; [09 3D 6B, 05, 05]
+10F59; [09 41 CD, 05, 05]
-10857; [09 3D 72, 05, 05]
+10F86; [09 41 D4, 05, 05]
-10B3A; [09 3D 79, 05, 05]
+10F87; [09 41 DB, 05, 05]
-10B3B; [09 3D 80, 05, 05]
+10F88; [09 41 E2, 05, 05]
-10B3C; [09 3D 87, 05, 05]
+10F89; [09 41 E9, 05, 05]
-10B3D; [09 3D 8E, 05, 05]
+110BE; [09 41 F0, 05, 05]
-10B3E; [09 3D 95, 05, 05]
+110BF; [09 41 F7, 05, 05]
-10B3F; [09 3D 9C, 05, 05]
+11140; [09 41 FE, 05, 05]
-10F55; [09 3D A3, 05, 05]
+111C8; [09 42 07, 05, 05]
-10F56; [09 3D AA, 05, 05]
+111DE; [09 42 0E, 05, 05]
-10F57; [09 3D B1, 05, 05]
+111DF; [09 42 15, 05, 05]
-10F58; [09 3D B8, 05, 05]
+112A9; [09 42 1C, 05, 05]
-10F59; [09 3D BF, 05, 05]
+1173E; [09 42 23, 05, 05]
-110BE; [09 3D C6, 05, 05]
+11946; [09 42 2A, 05, 05]
-110BF; [09 3D CD, 05, 05]
+11EF7; [09 42 31, 05, 05]
-11140; [09 3D D4, 05, 05]
+11EF8; [09 42 38, 05, 05]
-111C8; [09 3D DB, 05, 05]
+2055; [09 44, 05, 05]
-111DE; [09 3D E2, 05, 05]
+2056; [09 46, 05, 05]
-111DF; [09 3D E9, 05, 05]
+2058; [09 48, 05, 05]
-112A9; [09 3D F0, 05, 05]
+2059; [09 4A, 05, 05]
-1173E; [09 3D F7, 05, 05]
+205A; [09 4C, 05, 05]
-11946; [09 3D FE, 05, 05]
+205B; [09 4E, 05, 05]
-11EF7; [09 3E 07, 05, 05]
+205C; [09 50, 05, 05]
-11EF8; [09 3E 0E, 05, 05]
+205D; [09 52, 05, 05]
-2055; [09 40, 05, 05]
+205E; [09 54, 05, 05]
-2056; [09 42, 05, 05]
+2E2A; [09 56, 05, 05]
-2058; [09 44, 05, 05]
+2E2B; [09 58, 05, 05]
-2059; [09 46, 05, 05]
+2E2C; [09 5A, 05, 05]
-205A; [09 48, 05, 05]
+2E2D; [09 5C, 05, 05]
-205B; [09 4A, 05, 05]
+2E3D; [09 5E, 05, 05]
-205C; [09 4C, 05, 05]
+2CFC; [09 60 02, 05, 05]
-205D; [09 4E, 05, 05]
+2CFF; [09 60 09, 05, 05]
-205E; [09 50, 05, 05]
+2E19; [09 62, 05, 05]
-2E2A; [09 52, 05, 05]
+1093F; [09 64, 05, 05]
-2E2B; [09 54, 05, 05]
+10100; [09 66, 05, 05]
-2E2C; [09 56, 05, 05]
+10101; [09 68, 05, 05]
-2E2D; [09 58, 05, 05]
+10102; [09 6A, 05, 05]
-2E3D; [09 5A, 05, 05]
+1039F; [09 6C 02, 05, 05]
-2CFC; [09 5C 02, 05, 05]
+103D0; [09 6C 09, 05, 05]
-2CFF; [09 5C 09, 05, 05]
+1091F; [09 6C 10, 05, 05]
-2E19; [09 5E, 05, 05]
+12470; [09 6C 17, 05, 05]
-1093F; [09 60, 05, 05]
+12471; [09 6C 1E, 05, 05]
-10100; [09 62, 05, 05]
+12472; [09 6C 25, 05, 05]
-10101; [09 64, 05, 05]
+12473; [09 6C 2C, 05, 05]
-10102; [09 66, 05, 05]
+12474; [09 6C 33, 05, 05]
-1039F; [09 68 02, 05, 05]
+12FF1; [09 6C 3A, 05, 05]
-103D0; [09 68 09, 05, 05]
+12FF2; [09 6C 41, 05, 05]
-1091F; [09 68 10, 05, 05]
+0027; [09 6E, 05, 05]
+FF07; [09 6E, 05, 20]
-12470; [09 68 17, 05, 05]
+2018; [09 70, 05, 05]
-12471; [09 68 1E, 05, 05]
+2019; [09 72, 05, 05]
-12472; [09 68 25, 05, 05]
+201A; [09 74, 05, 05]
-12473; [09 68 2C, 05, 05]
+201B; [09 76, 05, 05]
-12474; [09 68 33, 05, 05]
+2039; [09 78, 05, 05]
-0027; [09 6A, 05, 05]
-FF07; [09 6A, 05, 20]
+203A; [09 7A, 05, 05]
-2018; [09 6C, 05, 05]
+0022; [09 7C, 05, 05]
+FF02; [09 7C, 05, 20]
-2019; [09 6E, 05, 05]
+201C; [09 7E, 05, 05]
-201A; [09 70, 05, 05]
+201D; [09 80, 05, 05]
-201B; [09 72, 05, 05]
+201E; [09 82, 05, 05]
-2039; [09 74, 05, 05]
+201F; [09 84, 05, 05]
-203A; [09 76, 05, 05]
+2E42; [09 86, 05, 05]
-0022; [09 78, 05, 05]
-FF02; [09 78, 05, 20]
+301D; [09 88, 05, 05]
-201C; [09 7A, 05, 05]
+301E; [09 8A, 05, 05]
-201D; [09 7C, 05, 05]
+301F; [09 8C, 05, 05]
-201E; [09 7E, 05, 05]
+00AB; [09 8E, 05, 05]
-201F; [09 80, 05, 05]
+00BB; [09 90, 05, 05]
-2E42; [09 82, 05, 05]
+0028; [09 92, 05, 05]
+FF08; [09 92, 05, 10]
+FE59; [09 92, 05, 1E]
+207D; [09 92, 05, 25]
+208D; [09 92, 05, 2C]
+FE35; [09 92, 05, 33]
+2474; [09 92, 05, 17][15, 05, 15][09 94, 05, 17]
+247D; [09 92, 05, 17][15, 05, 15][13, 05, 15][09 94, 05, 17]
+247E; [09 92, 05, 17][15, 05, 15][15, 05, 15][09 94, 05, 17]
+247F; [09 92, 05, 17][15, 05, 15][17, 05, 15][09 94, 05, 17]
+2480; [09 92, 05, 17][15, 05, 15][19, 05, 15][09 94, 05, 17]
+2481; [09 92, 05, 17][15, 05, 15][1B, 05, 15][09 94, 05, 17]
+2482; [09 92, 05, 17][15, 05, 15][1D, 05, 15][09 94, 05, 17]
+2483; [09 92, 05, 17][15, 05, 15][1F, 05, 15][09 94, 05, 17]
+2484; [09 92, 05, 17][15, 05, 15][21, 05, 15][09 94, 05, 17]
+2485; [09 92, 05, 17][15, 05, 15][23, 05, 15][09 94, 05, 17]
+2486; [09 92, 05, 17][15, 05, 15][25, 05, 16][09 94, 05, 17]
+2475; [09 92, 05, 17][17, 05, 15][09 94, 05, 17]
+2487; [09 92, 05, 17][17, 05, 15][13, 05, 15][09 94, 05, 17]
+2476; [09 92, 05, 17][19, 05, 15][09 94, 05, 17]
+2477; [09 92, 05, 17][1B, 05, 15][09 94, 05, 17]
+2478; [09 92, 05, 17][1D, 05, 15][09 94, 05, 17]
+2479; [09 92, 05, 17][1F, 05, 15][09 94, 05, 17]
+247A; [09 92, 05, 17][21, 05, 15][09 94, 05, 17]
+247B; [09 92, 05, 17][23, 05, 15][09 94, 05, 17]
+247C; [09 92, 05, 17][25, 05, 16][09 94, 05, 17]
+249C; [09 92, 05, 17][2A, 05, 13][09 94, 05, 17]
+1F110; [09 92, 05, 17][2A, 05, A2][09 94, 05, 17]
+249D; [09 92, 05, 17][2C, 05, 13][09 94, 05, 17]
+1F111; [09 92, 05, 17][2C, 05, A2][09 94, 05, 17]
+249E; [09 92, 05, 17][2E, 05, 13][09 94, 05, 17]
+1F112; [09 92, 05, 17][2E, 05, A2][09 94, 05, 17]
+249F; [09 92, 05, 17][30, 05, 13][09 94, 05, 17]
+1F113; [09 92, 05, 17][30, 05, A2][09 94, 05, 17]
+24A0; [09 92, 05, 17][32, 05, 13][09 94, 05, 17]
+1F114; [09 92, 05, 17][32, 05, A2][09 94, 05, 17]
+24A1; [09 92, 05, 17][34, 05, 13][09 94, 05, 17]
+1F115; [09 92, 05, 17][34, 05, A2][09 94, 05, 17]
+24A2; [09 92, 05, 17][36, 05, 13][09 94, 05, 17]
+1F116; [09 92, 05, 17][36, 05, A2][09 94, 05, 17]
+24A3; [09 92, 05, 17][38, 05, 13][09 94, 05, 17]
+1F117; [09 92, 05, 17][38, 05, A2][09 94, 05, 17]
+24A4; [09 92, 05, 17][3A, 05, 13][09 94, 05, 17]
+1F118; [09 92, 05, 17][3A, 05, A2][09 94, 05, 17]
+24A5; [09 92, 05, 17][3C, 05, 13][09 94, 05, 17]
+1F119; [09 92, 05, 17][3C, 05, A2][09 94, 05, 17]
+24A6; [09 92, 05, 17][3E, 05, 13][09 94, 05, 17]
+1F11A; [09 92, 05, 17][3E, 05, A2][09 94, 05, 17]
+24A7; [09 92, 05, 17][40, 05, 13][09 94, 05, 17]
+1F11B; [09 92, 05, 17][40, 05, A2][09 94, 05, 17]
+24A8; [09 92, 05, 17][42, 05, 13][09 94, 05, 17]
+1F11C; [09 92, 05, 17][42, 05, A2][09 94, 05, 17]
+24A9; [09 92, 05, 17][44, 05, 13][09 94, 05, 17]
+1F11D; [09 92, 05, 17][44, 05, A2][09 94, 05, 17]
+24AA; [09 92, 05, 17][46, 05, 13][09 94, 05, 17]
+1F11E; [09 92, 05, 17][46, 05, A2][09 94, 05, 17]
+24AB; [09 92, 05, 17][48, 05, 13][09 94, 05, 17]
+1F11F; [09 92, 05, 17][48, 05, A2][09 94, 05, 17]
+24AC; [09 92, 05, 17][4A, 05, 13][09 94, 05, 17]
+1F120; [09 92, 05, 17][4A, 05, A2][09 94, 05, 17]
+24AD; [09 92, 05, 17][4C, 05, 13][09 94, 05, 17]
+1F121; [09 92, 05, 17][4C, 05, A2][09 94, 05, 17]
+24AE; [09 92, 05, 17][4E, 05, 13][09 94, 05, 17]
+1F122; [09 92, 05, 17][4E, 05, A2][09 94, 05, 17]
+24AF; [09 92, 05, 17][50, 05, 13][09 94, 05, 17]
+1F123; [09 92, 05, 17][50, 05, A2][09 94, 05, 17]
+24B0; [09 92, 05, 17][52, 05, 13][09 94, 05, 17]
+1F124; [09 92, 05, 17][52, 05, A2][09 94, 05, 17]
+24B1; [09 92, 05, 17][54, 05, 13][09 94, 05, 17]
+1F125; [09 92, 05, 17][54, 05, A2][09 94, 05, 17]
+24B2; [09 92, 05, 17][56, 05, 14][09 94, 05, 17]
+1F126; [09 92, 05, 17][56, 05, A8][09 94, 05, 17]
+24B3; [09 92, 05, 17][58, 05, 13][09 94, 05, 17]
+1F127; [09 92, 05, 17][58, 05, A2][09 94, 05, 17]
+24B4; [09 92, 05, 17][5A, 05, 13][09 94, 05, 17]
+1F128; [09 92, 05, 17][5A, 05, A2][09 94, 05, 17]
+24B5; [09 92, 05, 17][5C, 05, 13][09 94, 05, 17]
+1F129; [09 92, 05, 17][5C, 05, A2][09 94, 05, 17]
+3200; [09 92, 05, 17][79 06, 05, 10][09 94, 05, 17]
+320E; [09 92, 05, 17][79 06, 05, 10][79 67, 05, 10][09 94, 05, 17]
+3201; [09 92, 05, 17][79 0A, 05, 10][09 94, 05, 17]
+320F; [09 92, 05, 17][79 0A, 05, 10][79 67, 05, 10][09 94, 05, 17]
+3202; [09 92, 05, 17][79 0C, 05, 10][09 94, 05, 17]
+3210; [09 92, 05, 17][79 0C, 05, 10][79 67, 05, 10][09 94, 05, 17]
+3203; [09 92, 05, 17][79 10, 05, 10][09 94, 05, 17]
+3211; [09 92, 05, 17][79 10, 05, 10][79 67, 05, 10][09 94, 05, 17]
+3204; [09 92, 05, 17][79 12, 05, 10][09 94, 05, 17]
+3212; [09 92, 05, 17][79 12, 05, 10][79 67, 05, 10][09 94, 05, 17]
+3205; [09 92, 05, 17][79 14, 05, 10][09 94, 05, 17]
+3213; [09 92, 05, 17][79 14, 05, 10][79 67, 05, 10][09 94, 05, 17]
+3206; [09 92, 05, 17][79 18, 05, 10][09 94, 05, 17]
+3214; [09 92, 05, 17][79 18, 05, 10][79 67, 05, 10][09 94, 05, 17]
+3207; [09 92, 05, 17][79 1C, 05, 10][09 94, 05, 17]
+3215; [09 92, 05, 17][79 1C, 05, 10][79 67, 05, 10][09 94, 05, 17]
+321D; [09 92, 05, 17][79 1C, 05, 10][79 77, 05, 10][79 1E, 05, 10][79 6F, 05, 20][79 B9, 05, 20][09 94, 05, 17]
+321E; [09 92, 05, 17][79 1C, 05, 10][79 77, 05, 10][79 2A, 05, 10][79 81, 05, 10][09 94, 05, 17]
+3208; [09 92, 05, 17][79 1E, 05, 10][09 94, 05, 17]
+3216; [09 92, 05, 17][79 1E, 05, 10][79 67, 05, 10][09 94, 05, 17]
+321C; [09 92, 05, 17][79 1E, 05, 10][79 81, 05, 10][09 94, 05, 17]
+3209; [09 92, 05, 17][79 22, 05, 10][09 94, 05, 17]
+3217; [09 92, 05, 17][79 22, 05, 10][79 67, 05, 10][09 94, 05, 17]
+320A; [09 92, 05, 17][79 24, 05, 10][09 94, 05, 17]
+3218; [09 92, 05, 17][79 24, 05, 10][79 67, 05, 10][09 94, 05, 17]
+320B; [09 92, 05, 17][79 26, 05, 10][09 94, 05, 17]
+3219; [09 92, 05, 17][79 26, 05, 10][79 67, 05, 10][09 94, 05, 17]
+320C; [09 92, 05, 17][79 28, 05, 10][09 94, 05, 17]
+321A; [09 92, 05, 17][79 28, 05, 10][79 67, 05, 10][09 94, 05, 17]
+320D; [09 92, 05, 17][79 2A, 05, 10][09 94, 05, 17]
+321B; [09 92, 05, 17][79 2A, 05, 10][79 67, 05, 10][09 94, 05, 17]
+3220; [09 92, 05, 17][U+4E00, 10][09 94, 05, 17]
+3226; [09 92, 05, 17][U+4E03, 10][09 94, 05, 17]
+3222; [09 92, 05, 17][U+4E09, 10][09 94, 05, 17]
+3228; [09 92, 05, 17][U+4E5D, 10][09 94, 05, 17]
+3221; [09 92, 05, 17][U+4E8C, 10][09 94, 05, 17]
+3224; [09 92, 05, 17][U+4E94, 10][09 94, 05, 17]
+3239; [09 92, 05, 17][U+4EE3, 10][09 94, 05, 17]
+323D; [09 92, 05, 17][U+4F01, 10][09 94, 05, 17]
+3241; [09 92, 05, 17][U+4F11, 10][09 94, 05, 17]
+3227; [09 92, 05, 17][U+516B, 10][09 94, 05, 17]
+3225; [09 92, 05, 17][U+516D, 10][09 94, 05, 17]
+3238; [09 92, 05, 17][U+52B4, 10][09 94, 05, 17]
+3229; [09 92, 05, 17][U+5341, 10][09 94, 05, 17]
+323F; [09 92, 05, 17][U+5354, 10][09 94, 05, 17]
+3234; [09 92, 05, 17][U+540D, 10][09 94, 05, 17]
+323A; [09 92, 05, 17][U+547C, 10][09 94, 05, 17]
+3223; [09 92, 05, 17][U+56DB, 10][09 94, 05, 17]
+322F; [09 92, 05, 17][U+571F, 10][09 94, 05, 17]
+323B; [09 92, 05, 17][U+5B66, 10][09 94, 05, 17]
+3230; [09 92, 05, 17][U+65E5, 10][09 94, 05, 17]
+322A; [09 92, 05, 17][U+6708, 10][09 94, 05, 17]
+3232; [09 92, 05, 17][U+6709, 10][09 94, 05, 17]
+322D; [09 92, 05, 17][U+6728, 10][09 94, 05, 17]
+3231; [09 92, 05, 17][U+682A, 10][09 94, 05, 17]
+322C; [09 92, 05, 17][U+6C34, 10][09 94, 05, 17]
+322B; [09 92, 05, 17][U+706B, 10][09 94, 05, 17]
+3235; [09 92, 05, 17][U+7279, 10][09 94, 05, 17]
+323C; [09 92, 05, 17][U+76E3, 10][09 94, 05, 17]
+3233; [09 92, 05, 17][U+793E, 10][09 94, 05, 17]
+3237; [09 92, 05, 17][U+795D, 10][09 94, 05, 17]
+3240; [09 92, 05, 17][U+796D, 10][09 94, 05, 17]
+3242; [09 92, 05, 17][U+81EA, 10][09 94, 05, 17]
+3243; [09 92, 05, 17][U+81F3, 10][09 94, 05, 17]
+3236; [09 92, 05, 17][U+8CA1, 10][09 94, 05, 17]
+323E; [09 92, 05, 17][U+8CC7, 10][09 94, 05, 17]
+322E; [09 92, 05, 17][U+91D1, 10][09 94, 05, 17]
+
+0029; [09 94, 05, 05]
+FF09; [09 94, 05, 10]
+FE5A; [09 94, 05, 1E]
+207E; [09 94, 05, 25]
+208E; [09 94, 05, 2C]
+FE36; [09 94, 05, 33]
+
+005B; [09 96, 05, 05]
+FF3B; [09 96, 05, 20]
+FE47; [09 96, 05, 2E]
+
+005D; [09 98, 05, 05]
+FF3D; [09 98, 05, 20]
+FE48; [09 98, 05, 2E]
-301D; [09 84, 05, 05]
+007B; [09 9A, 05, 05]
+FF5B; [09 9A, 05, 10]
+FE5B; [09 9A, 05, 1E]
+FE37; [09 9A, 05, 2C]
-301E; [09 86, 05, 05]
+007D; [09 9C, 05, 05]
+FF5D; [09 9C, 05, 10]
+FE5C; [09 9C, 05, 1E]
+FE38; [09 9C, 05, 2C]
-301F; [09 88, 05, 05]
+0F3A; [09 9E, 05, 05]
-00AB; [09 8A, 05, 05]
+0F3B; [09 A0, 05, 05]
-00BB; [09 8C, 05, 05]
+0F3C; [09 A2, 05, 05]
-0028; [09 8E, 05, 05]
-FF08; [09 8E, 05, 10]
-FE59; [09 8E, 05, 1E]
-207D; [09 8E, 05, 25]
-208D; [09 8E, 05, 2C]
-FE35; [09 8E, 05, 33]
-2474; [09 8E, 05, 17][15, 05, 15][09 90, 05, 17]
-247D; [09 8E, 05, 17][15, 05, 15][13, 05, 15][09 90, 05, 17]
-247E; [09 8E, 05, 17][15, 05, 15][15, 05, 15][09 90, 05, 17]
-247F; [09 8E, 05, 17][15, 05, 15][17, 05, 15][09 90, 05, 17]
-2480; [09 8E, 05, 17][15, 05, 15][19, 05, 15][09 90, 05, 17]
-2481; [09 8E, 05, 17][15, 05, 15][1B, 05, 15][09 90, 05, 17]
-2482; [09 8E, 05, 17][15, 05, 15][1D, 05, 15][09 90, 05, 17]
-2483; [09 8E, 05, 17][15, 05, 15][1F, 05, 15][09 90, 05, 17]
-2484; [09 8E, 05, 17][15, 05, 15][21, 05, 15][09 90, 05, 17]
-2485; [09 8E, 05, 17][15, 05, 15][23, 05, 15][09 90, 05, 17]
-2486; [09 8E, 05, 17][15, 05, 15][25, 05, 16][09 90, 05, 17]
-2475; [09 8E, 05, 17][17, 05, 15][09 90, 05, 17]
-2487; [09 8E, 05, 17][17, 05, 15][13, 05, 15][09 90, 05, 17]
-2476; [09 8E, 05, 17][19, 05, 15][09 90, 05, 17]
-2477; [09 8E, 05, 17][1B, 05, 15][09 90, 05, 17]
-2478; [09 8E, 05, 17][1D, 05, 15][09 90, 05, 17]
-2479; [09 8E, 05, 17][1F, 05, 15][09 90, 05, 17]
-247A; [09 8E, 05, 17][21, 05, 15][09 90, 05, 17]
-247B; [09 8E, 05, 17][23, 05, 15][09 90, 05, 17]
-247C; [09 8E, 05, 17][25, 05, 16][09 90, 05, 17]
-249C; [09 8E, 05, 17][2A, 05, 13][09 90, 05, 17]
-1F110; [09 8E, 05, 17][2A, 05, A2][09 90, 05, 17]
-249D; [09 8E, 05, 17][2C, 05, 13][09 90, 05, 17]
-1F111; [09 8E, 05, 17][2C, 05, A2][09 90, 05, 17]
-249E; [09 8E, 05, 17][2E, 05, 13][09 90, 05, 17]
-1F112; [09 8E, 05, 17][2E, 05, A2][09 90, 05, 17]
-249F; [09 8E, 05, 17][30, 05, 13][09 90, 05, 17]
-1F113; [09 8E, 05, 17][30, 05, A2][09 90, 05, 17]
-24A0; [09 8E, 05, 17][32, 05, 13][09 90, 05, 17]
-1F114; [09 8E, 05, 17][32, 05, A2][09 90, 05, 17]
-24A1; [09 8E, 05, 17][34, 05, 13][09 90, 05, 17]
-1F115; [09 8E, 05, 17][34, 05, A2][09 90, 05, 17]
-24A2; [09 8E, 05, 17][36, 05, 13][09 90, 05, 17]
-1F116; [09 8E, 05, 17][36, 05, A2][09 90, 05, 17]
-24A3; [09 8E, 05, 17][38, 05, 13][09 90, 05, 17]
-1F117; [09 8E, 05, 17][38, 05, A2][09 90, 05, 17]
-24A4; [09 8E, 05, 17][3A, 05, 13][09 90, 05, 17]
-1F118; [09 8E, 05, 17][3A, 05, A2][09 90, 05, 17]
-24A5; [09 8E, 05, 17][3C, 05, 13][09 90, 05, 17]
-1F119; [09 8E, 05, 17][3C, 05, A2][09 90, 05, 17]
-24A6; [09 8E, 05, 17][3E, 05, 13][09 90, 05, 17]
-1F11A; [09 8E, 05, 17][3E, 05, A2][09 90, 05, 17]
-24A7; [09 8E, 05, 17][40, 05, 13][09 90, 05, 17]
-1F11B; [09 8E, 05, 17][40, 05, A2][09 90, 05, 17]
-24A8; [09 8E, 05, 17][42, 05, 13][09 90, 05, 17]
-1F11C; [09 8E, 05, 17][42, 05, A2][09 90, 05, 17]
-24A9; [09 8E, 05, 17][44, 05, 13][09 90, 05, 17]
-1F11D; [09 8E, 05, 17][44, 05, A2][09 90, 05, 17]
-24AA; [09 8E, 05, 17][46, 05, 13][09 90, 05, 17]
-1F11E; [09 8E, 05, 17][46, 05, A2][09 90, 05, 17]
-24AB; [09 8E, 05, 17][48, 05, 13][09 90, 05, 17]
-1F11F; [09 8E, 05, 17][48, 05, A2][09 90, 05, 17]
-24AC; [09 8E, 05, 17][4A, 05, 14][09 90, 05, 17]
-1F120; [09 8E, 05, 17][4A, 05, A8][09 90, 05, 17]
-24AD; [09 8E, 05, 17][4C, 05, 13][09 90, 05, 17]
-1F121; [09 8E, 05, 17][4C, 05, A2][09 90, 05, 17]
-24AE; [09 8E, 05, 17][4E, 05, 13][09 90, 05, 17]
-1F122; [09 8E, 05, 17][4E, 05, A2][09 90, 05, 17]
-24AF; [09 8E, 05, 17][50, 05, 13][09 90, 05, 17]
-1F123; [09 8E, 05, 17][50, 05, A2][09 90, 05, 17]
-24B0; [09 8E, 05, 17][52, 05, 13][09 90, 05, 17]
-1F124; [09 8E, 05, 17][52, 05, A2][09 90, 05, 17]
-24B1; [09 8E, 05, 17][54, 05, 13][09 90, 05, 17]
-1F125; [09 8E, 05, 17][54, 05, A2][09 90, 05, 17]
-24B2; [09 8E, 05, 17][56, 05, 14][09 90, 05, 17]
-1F126; [09 8E, 05, 17][56, 05, A8][09 90, 05, 17]
-24B3; [09 8E, 05, 17][58, 05, 13][09 90, 05, 17]
-1F127; [09 8E, 05, 17][58, 05, A2][09 90, 05, 17]
-24B4; [09 8E, 05, 17][5A, 05, 13][09 90, 05, 17]
-1F128; [09 8E, 05, 17][5A, 05, A2][09 90, 05, 17]
-24B5; [09 8E, 05, 17][5C, 05, 13][09 90, 05, 17]
-1F129; [09 8E, 05, 17][5C, 05, A2][09 90, 05, 17]
-3200; [09 8E, 05, 17][79 06, 05, 10][09 90, 05, 17]
-320E; [09 8E, 05, 17][79 06, 05, 10][79 67, 05, 10][09 90, 05, 17]
-3201; [09 8E, 05, 17][79 0A, 05, 10][09 90, 05, 17]
-320F; [09 8E, 05, 17][79 0A, 05, 10][79 67, 05, 10][09 90, 05, 17]
-3202; [09 8E, 05, 17][79 0C, 05, 10][09 90, 05, 17]
-3210; [09 8E, 05, 17][79 0C, 05, 10][79 67, 05, 10][09 90, 05, 17]
-3203; [09 8E, 05, 17][79 10, 05, 10][09 90, 05, 17]
-3211; [09 8E, 05, 17][79 10, 05, 10][79 67, 05, 10][09 90, 05, 17]
-3204; [09 8E, 05, 17][79 12, 05, 10][09 90, 05, 17]
-3212; [09 8E, 05, 17][79 12, 05, 10][79 67, 05, 10][09 90, 05, 17]
-3205; [09 8E, 05, 17][79 14, 05, 10][09 90, 05, 17]
-3213; [09 8E, 05, 17][79 14, 05, 10][79 67, 05, 10][09 90, 05, 17]
-3206; [09 8E, 05, 17][79 18, 05, 10][09 90, 05, 17]
-3214; [09 8E, 05, 17][79 18, 05, 10][79 67, 05, 10][09 90, 05, 17]
-3207; [09 8E, 05, 17][79 1C, 05, 10][09 90, 05, 17]
-3215; [09 8E, 05, 17][79 1C, 05, 10][79 67, 05, 10][09 90, 05, 17]
-321D; [09 8E, 05, 17][79 1C, 05, 10][79 77, 05, 10][79 1E, 05, 10][79 6F, 05, 20][79 B9, 05, 20][09 90, 05, 17]
-321E; [09 8E, 05, 17][79 1C, 05, 10][79 77, 05, 10][79 2A, 05, 10][79 81, 05, 10][09 90, 05, 17]
-3208; [09 8E, 05, 17][79 1E, 05, 10][09 90, 05, 17]
-3216; [09 8E, 05, 17][79 1E, 05, 10][79 67, 05, 10][09 90, 05, 17]
-321C; [09 8E, 05, 17][79 1E, 05, 10][79 81, 05, 10][09 90, 05, 17]
-3209; [09 8E, 05, 17][79 22, 05, 10][09 90, 05, 17]
-3217; [09 8E, 05, 17][79 22, 05, 10][79 67, 05, 10][09 90, 05, 17]
-320A; [09 8E, 05, 17][79 24, 05, 10][09 90, 05, 17]
-3218; [09 8E, 05, 17][79 24, 05, 10][79 67, 05, 10][09 90, 05, 17]
-320B; [09 8E, 05, 17][79 26, 05, 10][09 90, 05, 17]
-3219; [09 8E, 05, 17][79 26, 05, 10][79 67, 05, 10][09 90, 05, 17]
-320C; [09 8E, 05, 17][79 28, 05, 10][09 90, 05, 17]
-321A; [09 8E, 05, 17][79 28, 05, 10][79 67, 05, 10][09 90, 05, 17]
-320D; [09 8E, 05, 17][79 2A, 05, 10][09 90, 05, 17]
-321B; [09 8E, 05, 17][79 2A, 05, 10][79 67, 05, 10][09 90, 05, 17]
-3220; [09 8E, 05, 17][U+4E00, 10][09 90, 05, 17]
-3226; [09 8E, 05, 17][U+4E03, 10][09 90, 05, 17]
-3222; [09 8E, 05, 17][U+4E09, 10][09 90, 05, 17]
-3228; [09 8E, 05, 17][U+4E5D, 10][09 90, 05, 17]
-3221; [09 8E, 05, 17][U+4E8C, 10][09 90, 05, 17]
-3224; [09 8E, 05, 17][U+4E94, 10][09 90, 05, 17]
-3239; [09 8E, 05, 17][U+4EE3, 10][09 90, 05, 17]
-323D; [09 8E, 05, 17][U+4F01, 10][09 90, 05, 17]
-3241; [09 8E, 05, 17][U+4F11, 10][09 90, 05, 17]
-3227; [09 8E, 05, 17][U+516B, 10][09 90, 05, 17]
-3225; [09 8E, 05, 17][U+516D, 10][09 90, 05, 17]
-3238; [09 8E, 05, 17][U+52B4, 10][09 90, 05, 17]
-3229; [09 8E, 05, 17][U+5341, 10][09 90, 05, 17]
-323F; [09 8E, 05, 17][U+5354, 10][09 90, 05, 17]
-3234; [09 8E, 05, 17][U+540D, 10][09 90, 05, 17]
-323A; [09 8E, 05, 17][U+547C, 10][09 90, 05, 17]
-3223; [09 8E, 05, 17][U+56DB, 10][09 90, 05, 17]
-322F; [09 8E, 05, 17][U+571F, 10][09 90, 05, 17]
-323B; [09 8E, 05, 17][U+5B66, 10][09 90, 05, 17]
-3230; [09 8E, 05, 17][U+65E5, 10][09 90, 05, 17]
-322A; [09 8E, 05, 17][U+6708, 10][09 90, 05, 17]
-3232; [09 8E, 05, 17][U+6709, 10][09 90, 05, 17]
-322D; [09 8E, 05, 17][U+6728, 10][09 90, 05, 17]
-3231; [09 8E, 05, 17][U+682A, 10][09 90, 05, 17]
-322C; [09 8E, 05, 17][U+6C34, 10][09 90, 05, 17]
-322B; [09 8E, 05, 17][U+706B, 10][09 90, 05, 17]
-3235; [09 8E, 05, 17][U+7279, 10][09 90, 05, 17]
-323C; [09 8E, 05, 17][U+76E3, 10][09 90, 05, 17]
-3233; [09 8E, 05, 17][U+793E, 10][09 90, 05, 17]
-3237; [09 8E, 05, 17][U+795D, 10][09 90, 05, 17]
-3240; [09 8E, 05, 17][U+796D, 10][09 90, 05, 17]
-3242; [09 8E, 05, 17][U+81EA, 10][09 90, 05, 17]
-3243; [09 8E, 05, 17][U+81F3, 10][09 90, 05, 17]
-3236; [09 8E, 05, 17][U+8CA1, 10][09 90, 05, 17]
-323E; [09 8E, 05, 17][U+8CC7, 10][09 90, 05, 17]
-322E; [09 8E, 05, 17][U+91D1, 10][09 90, 05, 17]
-
-0029; [09 90, 05, 05]
-FF09; [09 90, 05, 10]
-FE5A; [09 90, 05, 1E]
-207E; [09 90, 05, 25]
-208E; [09 90, 05, 2C]
-FE36; [09 90, 05, 33]
-
-005B; [09 92, 05, 05]
-FF3B; [09 92, 05, 20]
-FE47; [09 92, 05, 2E]
-
-005D; [09 94, 05, 05]
-FF3D; [09 94, 05, 20]
-FE48; [09 94, 05, 2E]
+0F3D; [09 A4, 05, 05]
-007B; [09 96, 05, 05]
-FF5B; [09 96, 05, 10]
-FE5B; [09 96, 05, 1E]
-FE37; [09 96, 05, 2C]
+169B; [09 A6 02, 05, 05]
-007D; [09 98, 05, 05]
-FF5D; [09 98, 05, 10]
-FE5C; [09 98, 05, 1E]
-FE38; [09 98, 05, 2C]
+169C; [09 A6 09, 05, 05]
-0F3A; [09 9A, 05, 05]
+2045; [09 A8, 05, 05]
-0F3B; [09 9C, 05, 05]
+2046; [09 AA, 05, 05]
-0F3C; [09 9E, 05, 05]
+2308; [09 AC, 05, 05]
-0F3D; [09 A0, 05, 05]
+2309; [09 AE, 05, 05]
-169B; [09 A2 02, 05, 05]
+230A; [09 B0, 05, 05]
-169C; [09 A2 09, 05, 05]
+230B; [09 B2, 05, 05]
-2045; [09 A4, 05, 05]
+29FC; [09 B4, 05, 05]
-2046; [09 A6, 05, 05]
+29FD; [09 B6, 05, 05]
-2308; [09 A8, 05, 05]
+2983; [09 B8, 05, 05]
-2309; [09 AA, 05, 05]
+2984; [09 BA, 05, 05]
-230A; [09 AC, 05, 05]
+2985; [09 BC, 05, 05]
+FF5F; [09 BC, 05, 20]
-230B; [09 AE, 05, 05]
+2986; [09 BE, 05, 05]
+FF60; [09 BE, 05, 20]
-29FC; [09 B0, 05, 05]
+2987; [09 C0, 05, 05]
-29FD; [09 B2, 05, 05]
+2988; [09 C2, 05, 05]
-2983; [09 B4, 05, 05]
+2989; [09 C4, 05, 05]
-2984; [09 B6, 05, 05]
+298A; [09 C6, 05, 05]
-2985; [09 B8, 05, 05]
-FF5F; [09 B8, 05, 20]
+298B; [09 C8, 05, 05]
-2986; [09 BA, 05, 05]
-FF60; [09 BA, 05, 20]
+298C; [09 CA, 05, 05]
-2987; [09 BC, 05, 05]
+298D; [09 CC, 05, 05]
-2988; [09 BE, 05, 05]
+298E; [09 CE, 05, 05]
-2989; [09 C0, 05, 05]
+298F; [09 D0, 05, 05]
-298A; [09 C2, 05, 05]
+2990; [09 D2, 05, 05]
-298B; [09 C4, 05, 05]
+2991; [09 D4, 05, 05]
-298C; [09 C6, 05, 05]
+2992; [09 D6, 05, 05]
-298D; [09 C8, 05, 05]
+2993; [09 D8, 05, 05]
-298E; [09 CA, 05, 05]
+2994; [09 DA, 05, 05]
-298F; [09 CC, 05, 05]
+2995; [09 DC, 05, 05]
-2990; [09 CE, 05, 05]
+2996; [09 DE, 05, 05]
-2991; [09 D0, 05, 05]
+2997; [09 E0, 05, 05]
-2992; [09 D2, 05, 05]
+2998; [09 E2, 05, 05]
-2993; [09 D4, 05, 05]
+27C5; [09 E4, 05, 05]
-2994; [09 D6, 05, 05]
+27C6; [09 E6, 05, 05]
-2995; [09 D8, 05, 05]
+27E6; [09 E8, 05, 05]
-2996; [09 DA, 05, 05]
+27E7; [09 EA, 05, 05]
-2997; [09 DC, 05, 05]
+27E8; [09 EC, 05, 05]
-2998; [09 DE, 05, 05]
+27E9; [09 EE, 05, 05]
-27C5; [09 E0, 05, 05]
+27EA; [09 F0, 05, 05]
-27C6; [09 E2, 05, 05]
+27EB; [09 F2, 05, 05]
-27E6; [09 E4, 05, 05]
+27EC; [09 F4, 05, 05]
-27E7; [09 E6, 05, 05]
+27ED; [09 F6, 05, 05]
-27E8; [09 E8, 05, 05]
+27EE; [09 F8, 05, 05]
-27E9; [09 EA, 05, 05]
+27EF; [09 FA, 05, 05]
-27EA; [09 EC, 05, 05]
+2768; [09 FC, 05, 05]
-27EB; [09 EE, 05, 05]
+2769; [09 FE, 05, 05]
-27EC; [09 F0, 05, 05]
+276A; [0A 02, 05, 05]
-27ED; [09 F2, 05, 05]
+276B; [0A 04, 05, 05]
-27EE; [09 F4, 05, 05]
+276C; [0A 06, 05, 05]
-27EF; [09 F6, 05, 05]
+276D; [0A 08, 05, 05]
-2768; [09 F8, 05, 05]
+276E; [0A 0A, 05, 05]
-2769; [09 FA, 05, 05]
+276F; [0A 0C, 05, 05]
-276A; [09 FC, 05, 05]
+2770; [0A 0E, 05, 05]
-276B; [09 FE, 05, 05]
+2771; [0A 10, 05, 05]
-276C; [0A 02, 05, 05]
+2772; [0A 12, 05, 05]
-276D; [0A 04, 05, 05]
+2773; [0A 14, 05, 05]
-276E; [0A 06, 05, 05]
+2774; [0A 16, 05, 05]
-276F; [0A 08, 05, 05]
+2775; [0A 18, 05, 05]
-2770; [0A 0A, 05, 05]
+2E02; [0A 1A, 05, 05]
-2771; [0A 0C, 05, 05]
+2E03; [0A 1C, 05, 05]
-2772; [0A 0E, 05, 05]
+2E04; [0A 1E, 05, 05]
-2773; [0A 10, 05, 05]
+2E05; [0A 20, 05, 05]
-2774; [0A 12, 05, 05]
+2E09; [0A 22, 05, 05]
-2775; [0A 14, 05, 05]
+2E0A; [0A 24, 05, 05]
-2E02; [0A 16, 05, 05]
+2E0C; [0A 26, 05, 05]
-2E03; [0A 18, 05, 05]
+2E0D; [0A 28, 05, 05]
-2E04; [0A 1A, 05, 05]
+2E1C; [0A 2A, 05, 05]
-2E05; [0A 1C, 05, 05]
+2E1D; [0A 2C, 05, 05]
-2E09; [0A 1E, 05, 05]
+2E20; [0A 2E, 05, 05]
-2E0A; [0A 20, 05, 05]
+2E21; [0A 30, 05, 05]
-2E0C; [0A 22, 05, 05]
+2E22; [0A 32, 05, 05]
-2E0D; [0A 24, 05, 05]
+2E23; [0A 34, 05, 05]
-2E1C; [0A 26, 05, 05]
+2E24; [0A 36, 05, 05]
-2E1D; [0A 28, 05, 05]
+2E25; [0A 38, 05, 05]
-2E20; [0A 2A, 05, 05]
+2E26; [0A 3A, 05, 05]
-2E21; [0A 2C, 05, 05]
+2E27; [0A 3C, 05, 05]
-2E22; [0A 2E, 05, 05]
+2E28; [0A 3E, 05, 05]
-2E23; [0A 30, 05, 05]
+2E29; [0A 40, 05, 05]
-2E24; [0A 32, 05, 05]
+2E55; [0A 42, 05, 05]
-2E25; [0A 34, 05, 05]
+2E56; [0A 44, 05, 05]
-2E26; [0A 36, 05, 05]
+2E57; [0A 46, 05, 05]
-2E27; [0A 38, 05, 05]
+2E58; [0A 48, 05, 05]
-2E28; [0A 3A, 05, 05]
+2E59; [0A 4A, 05, 05]
-2E29; [0A 3C, 05, 05]
+2E5A; [0A 4C, 05, 05]
-2329; [0A 3E, 05, 05]
-3008; [0A 3E, 05, 05]
-FE3F; [0A 3E, 05, 20]
+2E5B; [0A 4E, 05, 05]
-232A; [0A 40, 05, 05]
-3009; [0A 40, 05, 05]
-FE40; [0A 40, 05, 20]
+2E5C; [0A 50, 05, 05]
-300A; [0A 42, 05, 05]
-FE3D; [0A 42, 05, 20]
+2329; [0A 52, 05, 05]
+3008; [0A 52, 05, 05]
+FE3F; [0A 52, 05, 20]
-300B; [0A 44, 05, 05]
-FE3E; [0A 44, 05, 20]
+232A; [0A 54, 05, 05]
+3009; [0A 54, 05, 05]
+FE40; [0A 54, 05, 20]
-300C; [0A 46, 05, 05]
-FF62; [0A 46, 05, A0]
-FE41; [0A 46, 05, 2E]
+300A; [0A 56, 05, 05]
+FE3D; [0A 56, 05, 20]
-300D; [0A 48, 05, 05]
-FF63; [0A 48, 05, A0]
-FE42; [0A 48, 05, 2E]
+300B; [0A 58, 05, 05]
+FE3E; [0A 58, 05, 20]
-300E; [0A 4A, 05, 05]
-FE43; [0A 4A, 05, 20]
+300C; [0A 5A, 05, 05]
+FF62; [0A 5A, 05, A0]
+FE41; [0A 5A, 05, 2E]
-300F; [0A 4C, 05, 05]
-FE44; [0A 4C, 05, 20]
+300D; [0A 5C, 05, 05]
+FF63; [0A 5C, 05, A0]
+FE42; [0A 5C, 05, 2E]
-3010; [0A 4E, 05, 05]
-FE3B; [0A 4E, 05, 20]
+300E; [0A 5E, 05, 05]
+FE43; [0A 5E, 05, 20]
-3011; [0A 50, 05, 05]
-FE3C; [0A 50, 05, 20]
+300F; [0A 60, 05, 05]
+FE44; [0A 60, 05, 20]
-3014; [0A 52, 05, 05]
-FE5D; [0A 52, 05, 1E]
-FE39; [0A 52, 05, 2C]
-1F12A; [0A 52, 05, 10][4E, 05, A2][0A 54, 05, 10]
-1F241; [0A 52, 05, 10][U+4E09, 10][0A 54, 05, 10]
-1F242; [0A 52, 05, 10][U+4E8C, 10][0A 54, 05, 10]
-1F247; [0A 52, 05, 10][U+52DD, 10][0A 54, 05, 10]
-1F243; [0A 52, 05, 10][U+5B89, 10][0A 54, 05, 10]
-1F245; [0A 52, 05, 10][U+6253, 10][0A 54, 05, 10]
-1F248; [0A 52, 05, 10][U+6557, 10][0A 54, 05, 10]
-1F240; [0A 52, 05, 10][U+672C, 10][0A 54, 05, 10]
-1F244; [0A 52, 05, 10][U+70B9, 10][0A 54, 05, 10]
-1F246; [0A 52, 05, 10][U+76D7, 10][0A 54, 05, 10]
+3010; [0A 62, 05, 05]
+FE3B; [0A 62, 05, 20]
-3015; [0A 54, 05, 05]
-FE5E; [0A 54, 05, 1E]
-FE3A; [0A 54, 05, 2C]
+3011; [0A 64, 05, 05]
+FE3C; [0A 64, 05, 20]
-3016; [0A 56, 05, 05]
-FE17; [0A 56, 05, 20]
+3014; [0A 66, 05, 05]
+FE5D; [0A 66, 05, 1E]
+FE39; [0A 66, 05, 2C]
+1F12A; [0A 66, 05, 10][4E, 05, A2][0A 68, 05, 10]
+1F241; [0A 66, 05, 10][U+4E09, 10][0A 68, 05, 10]
+1F242; [0A 66, 05, 10][U+4E8C, 10][0A 68, 05, 10]
+1F247; [0A 66, 05, 10][U+52DD, 10][0A 68, 05, 10]
+1F243; [0A 66, 05, 10][U+5B89, 10][0A 68, 05, 10]
+1F245; [0A 66, 05, 10][U+6253, 10][0A 68, 05, 10]
+1F248; [0A 66, 05, 10][U+6557, 10][0A 68, 05, 10]
+1F240; [0A 66, 05, 10][U+672C, 10][0A 68, 05, 10]
+1F244; [0A 66, 05, 10][U+70B9, 10][0A 68, 05, 10]
+1F246; [0A 66, 05, 10][U+76D7, 10][0A 68, 05, 10]
-3017; [0A 58, 05, 05]
-FE18; [0A 58, 05, 20]
+3015; [0A 68, 05, 05]
+FE5E; [0A 68, 05, 1E]
+FE3A; [0A 68, 05, 2C]
-3018; [0A 5A, 05, 05]
+3016; [0A 6A, 05, 05]
+FE17; [0A 6A, 05, 20]
-3019; [0A 5C, 05, 05]
+3017; [0A 6C, 05, 05]
+FE18; [0A 6C, 05, 20]
-301A; [0A 5E, 05, 05]
+3018; [0A 6E, 05, 05]
-301B; [0A 60, 05, 05]
+3019; [0A 70, 05, 05]
-FD3E; [0A 62, 05, 05]
+301A; [0A 72, 05, 05]
-FD3F; [0A 64, 05, 05]
+301B; [0A 74, 05, 05]
-2016; [0A 66, 05, 05]
+FD3E; [0A 76, 05, 05]
-2E3E; [0A 68, 05, 05]
+FD3F; [0A 78, 05, 05]
-29D8; [0A 6A, 05, 05]
+2016; [0A 7A, 05, 05]
-29D9; [0A 6C, 05, 05]
+2E3E; [0A 7C, 05, 05]
-29DA; [0A 6E, 05, 05]
+29D8; [0A 7E, 05, 05]
-29DB; [0A 70, 05, 05]
+29D9; [0A 80, 05, 05]
-00A7; [0A 72, 05, 05]
+29DA; [0A 82, 05, 05]
-2E39; [0A 74, 05, 05]
+29DB; [0A 84, 05, 05]
-00B6; [0A 76, 05, 05]
+00A7; [0A 86, 05, 05]
-204B; [0A 78, 05, 05]
+2E39; [0A 88, 05, 05]
-2E4D; [0A 7A, 05, 05]
+00B6; [0A 8A, 05, 05]
-2E3F; [0A 7C, 05, 05]
+204B; [0A 8C, 05, 05]
-0040; [0A 7E, 05, 05]
-FF20; [0A 7E, 05, 20]
-FE6B; [0A 7E, 05, 2E]
+2E4D; [0A 8E, 05, 05]
-002A; [0A 80, 05, 05]
-FF0A; [0A 80, 05, 20]
-FE61; [0A 80, 05, 2E]
+2E3F; [0A 90, 05, 05]
-204E; [0A 82, 05, 05]
+0040; [0A 92, 05, 05]
+FF20; [0A 92, 05, 20]
+FE6B; [0A 92, 05, 2E]
-2051; [0A 84, 05, 05]
+002A; [0A 94, 05, 05]
+FF0A; [0A 94, 05, 20]
+FE61; [0A 94, 05, 2E]
-066D; [0A 86, 05, 05]
+204E; [0A 96, 05, 05]
-A673; [0A 88, 05, 05]
+2051; [0A 98, 05, 05]
-002F; [0A 8A, 05, 05]
-FF0F; [0A 8A, 05, 20]
+066D; [0A 9A, 05, 05]
-005C; [0A 8C, 05, 05]
-FF3C; [0A 8C, 05, 20]
-FE68; [0A 8C, 05, 2E]
+A673; [0A 9C, 05, 05]
-2E4A; [0A 8E, 05, 05]
+002F; [0A 9E, 05, 05]
+FF0F; [0A 9E, 05, 20]
-0026; [0A 90, 05, 05]
-FF06; [0A 90, 05, 20]
-FE60; [0A 90, 05, 2E]
+005C; [0A A0, 05, 05]
+FF3C; [0A A0, 05, 20]
+FE68; [0A A0, 05, 2E]
-204A; [0A 92, 05, 05]
+2E4A; [0A A2, 05, 05]
-2E52; [0A 94, 05, 05]
+0026; [0A A4, 05, 05]
+FF06; [0A A4, 05, 20]
+FE60; [0A A4, 05, 2E]
-0023; [0A 96, 05, 05]
-FF03; [0A 96, 05, 20]
-FE5F; [0A 96, 05, 2E]
+204A; [0A A6, 05, 05]
-0025; [0A 98, 05, 05]
-FF05; [0A 98, 05, 20]
-FE6A; [0A 98, 05, 2E]
+2E52; [0A A8, 05, 05]
-066A; [0A 9A, 05, 05]
+0023; [0A AA, 05, 05]
+FF03; [0A AA, 05, 20]
+FE5F; [0A AA, 05, 2E]
-2030; [0A 9C, 05, 05]
+0025; [0A AC, 05, 05]
+FF05; [0A AC, 05, 20]
+FE6A; [0A AC, 05, 2E]
-0609; [0A 9E, 05, 05]
+066A; [0A AE, 05, 05]
-2031; [0A A0, 05, 05]
+2030; [0A B0, 05, 05]
-060A; [0A A2, 05, 05]
+0609; [0A B2, 05, 05]
-2020; [0A A4, 05, 05]
+2031; [0A B4, 05, 05]
-2021; [0A A6, 05, 05]
+060A; [0A B6, 05, 05]
-2E36; [0A A8, 05, 05]
+2020; [0A B8, 05, 05]
-2E37; [0A AA, 05, 05]
+2021; [0A BA, 05, 05]
-2E38; [0A AC, 05, 05]
+2E36; [0A BC, 05, 05]
-2E4B; [0A AE, 05, 05]
+2E37; [0A BE, 05, 05]
-2022; [0A B0, 05, 05]
+2E38; [0A C0, 05, 05]
-2023; [0A B2, 05, 05]
+2E4B; [0A C2, 05, 05]
-2027; [0A B4, 05, 05]
+2022; [0A C4, 05, 05]
-2043; [0A B6, 05, 05]
+2023; [0A C6, 05, 05]
-204C; [0A B8, 05, 05]
+2027; [0A C8, 05, 05]
-204D; [0A BA, 05, 05]
+2043; [0A CA, 05, 05]
-2032; [0A BC, 05, 05]
-2033; [0A BC, 05, 20][0A BC, 05, 20]
-2034; [0A BC, 05, 20][0A BC, 05, 20][0A BC, 05, 20]
-2057; [0A BC, 05, 20][0A BC, 05, 20][0A BC, 05, 20][0A BC, 05, 20]
+204C; [0A CC, 05, 05]
-2035; [0A BE, 05, 05]
-2036; [0A BE, 05, 20][0A BE, 05, 20]
-2037; [0A BE, 05, 20][0A BE, 05, 20][0A BE, 05, 20]
+204D; [0A CE, 05, 05]
-3003; [0A C0, 05, 05]
+2032; [0A D0, 05, 05]
+2033; [0A D0, 05, 20][0A D0, 05, 20]
+2034; [0A D0, 05, 20][0A D0, 05, 20][0A D0, 05, 20]
+2057; [0A D0, 05, 20][0A D0, 05, 20][0A D0, 05, 20][0A D0, 05, 20]
-303D; [0A C2, 05, 05]
+2035; [0A D2, 05, 05]
+2036; [0A D2, 05, 20][0A D2, 05, 20]
+2037; [0A D2, 05, 20][0A D2, 05, 20][0A D2, 05, 20]
-2038; [0A C4, 05, 05]
+3003; [0A D4, 05, 05]
-203B; [0A C6, 05, 05]
+303D; [0A D6, 05, 05]
-203F; [0A C8, 05, 05]
+2038; [0A D8, 05, 05]
-2054; [0A CA, 05, 05]
+203B; [0A DA, 05, 05]
-2040; [0A CC, 05, 05]
+203F; [0A DC, 05, 05]
-2050; [0A CE, 05, 05]
+2054; [0A DE, 05, 05]
-2041; [0A D0, 05, 05]
+2040; [0A E0, 05, 05]
-2042; [0A D2, 05, 05]
+2050; [0A E2, 05, 05]
-2E00; [0A D4, 05, 05]
+2041; [0A E4, 05, 05]
-2E01; [0A D6, 05, 05]
+2042; [0A E6, 05, 05]
-2E06; [0A D8, 05, 05]
+2E00; [0A E8, 05, 05]
-2E07; [0A DA, 05, 05]
+2E01; [0A EA, 05, 05]
-2E08; [0A DC, 05, 05]
+2E06; [0A EC, 05, 05]
-2E0B; [0A DE, 05, 05]
+2E07; [0A EE, 05, 05]
-2E0E; [0A E0, 05, 05]
+2E08; [0A F0, 05, 05]
-2E0F; [0A E2, 05, 05]
+2E0B; [0A F2, 05, 05]
-2E10; [0A E4, 05, 05]
+2E0E; [0A F4, 05, 05]
-2E11; [0A E6, 05, 05]
+2E0F; [0A F6, 05, 05]
-2E12; [0A E8, 05, 05]
+2E10; [0A F8, 05, 05]
-2E13; [0A EA, 05, 05]
+2E11; [0A FA, 05, 05]
-2E14; [0A EC, 05, 05]
+2E12; [0A FC, 05, 05]
-2E15; [0A EE, 05, 05]
+2E13; [0A FE, 05, 05]
-2E16; [0A F0, 05, 05]
+2E14; [0B 02, 05, 05]
-2E1A; [0A F2, 05, 05]
+2E15; [0B 04, 05, 05]
-2E1B; [0A F4, 05, 05]
+2E16; [0B 06, 05, 05]
-2E1E; [0A F6, 05, 05]
+2E1A; [0B 08, 05, 05]
-2E1F; [0A F8, 05, 05]
+2E1B; [0B 0A, 05, 05]
-2E44; [0A FA, 05, 05]
+2E1E; [0B 0C, 05, 05]
-2E45; [0A FC, 05, 05]
+2E1F; [0B 0E, 05, 05]
-2E46; [0A FE, 05, 05]
+2E44; [0B 10, 05, 05]
-2E47; [0B 02, 05, 05]
+2E45; [0B 12, 05, 05]
-2E48; [0B 04, 05, 05]
+2E46; [0B 14, 05, 05]
-A67E; [0B 06, 05, 05]
+2E47; [0B 16, 05, 05]
-055A; [0B 08, 05, 05]
+2E48; [0B 18, 05, 05]
-055B; [0B 0A, 05, 05]
+A67E; [0B 1A, 05, 05]
-055F; [0B 0C, 05, 05]
+055A; [0B 1C, 05, 05]
-05BE; [0B 0E, 05, 05]
+055B; [0B 1E, 05, 05]
-05C0; [0B 10, 05, 05]
+055F; [0B 20, 05, 05]
-05C3; [0B 12, 05, 05]
+05BE; [0B 22, 05, 05]
-05C6; [0B 14, 05, 05]
+05C0; [0B 24, 05, 05]
-05F3; [0B 16, 05, 05]
+05C3; [0B 26, 05, 05]
-05F4; [0B 18, 05, 05]
+05C6; [0B 28, 05, 05]
-070A; [0B 1A 02, 05, 05]
+05F3; [0B 2A, 05, 05]
-070B; [0B 1A 09, 05, 05]
+05F4; [0B 2C, 05, 05]
-070C; [0B 1A 10, 05, 05]
+070A; [0B 2E 02, 05, 05]
-070D; [0B 1A 17, 05, 05]
+070B; [0B 2E 09, 05, 05]
-085E; [0B 1A 1E, 05, 05]
+070C; [0B 2E 10, 05, 05]
-1800; [0B 1A 25, 05, 05]
+070D; [0B 2E 17, 05, 05]
-11660; [0B 1A 2C, 05, 05]
+085E; [0B 2E 1E, 05, 05]
-11661; [0B 1A 33, 05, 05]
+1800; [0B 2E 25, 05, 05]
-11662; [0B 1A 3A, 05, 05]
+11660; [0B 2E 2C, 05, 05]
-11663; [0B 1A 41, 05, 05]
+11661; [0B 2E 33, 05, 05]
-11664; [0B 1A 48, 05, 05]
+11662; [0B 2E 3A, 05, 05]
-11665; [0B 1A 4F, 05, 05]
+11663; [0B 2E 41, 05, 05]
-11666; [0B 1A 56, 05, 05]
+11664; [0B 2E 48, 05, 05]
-11667; [0B 1A 5D, 05, 05]
+11665; [0B 2E 4F, 05, 05]
-11668; [0B 1A 64, 05, 05]
+11666; [0B 2E 56, 05, 05]
-11669; [0B 1A 6B, 05, 05]
+11667; [0B 2E 5D, 05, 05]
-1166A; [0B 1A 72, 05, 05]
+11668; [0B 2E 64, 05, 05]
-1166B; [0B 1A 79, 05, 05]
+11669; [0B 2E 6B, 05, 05]
-1166C; [0B 1A 80, 05, 05]
+1166A; [0B 2E 72, 05, 05]
-0970; [0B 1C, 05, 05]
+1166B; [0B 2E 79, 05, 05]
-A8F8; [0B 1E, 05, 05]
+1166C; [0B 2E 80, 05, 05]
-A8F9; [0B 20, 05, 05]
+0970; [0B 30, 05, 05]
-A8FA; [0B 22, 05, 05]
+A8F8; [0B 32, 05, 05]
-A8FC; [0B 24, 05, 05]
+A8F9; [0B 34, 05, 05]
-09FD; [0B 26, 05, 05]
+A8FA; [0B 36, 05, 05]
-0A76; [0B 28, 05, 05]
+A8FC; [0B 38, 05, 05]
-0AF0; [0B 2A, 05, 05]
+09FD; [0B 3A, 05, 05]
-0C77; [0B 2C, 05, 05]
+0A76; [0B 3C, 05, 05]
-0C84; [0B 2E, 05, 05]
+0AF0; [0B 3E, 05, 05]
-0DF4; [0B 30, 05, 05]
+0C77; [0B 40, 05, 05]
-0E4F; [0B 32, 05, 05]
+0C84; [0B 42, 05, 05]
-0E5A; [0B 34, 05, 05]
+0DF4; [0B 44, 05, 05]
-0E5B; [0B 36, 05, 05]
+0E4F; [0B 46, 05, 05]
-AADE; [0B 38 02, 05, 05]
+0E5A; [0B 48, 05, 05]
-AADF; [0B 38 09, 05, 05]
+0E5B; [0B 4A, 05, 05]
-0F04; [0B 3A, 05, 05]
+AADE; [0B 4C 02, 05, 05]
-0F05; [0B 3C, 05, 05]
+AADF; [0B 4C 09, 05, 05]
-0F06; [0B 3E, 05, 05]
+0F04; [0B 4E, 05, 05]
-0F07; [0B 40, 05, 05]
+0F05; [0B 50, 05, 05]
-0F08; [0B 42, 05, 05]
+0F06; [0B 52, 05, 05]
-0F09; [0B 44, 05, 05]
+0F07; [0B 54, 05, 05]
-0F0A; [0B 46, 05, 05]
+0F08; [0B 56, 05, 05]
-0FD0; [0B 48, 05, 05]
+0F09; [0B 58, 05, 05]
-0FD1; [0B 4A, 05, 05]
+0F0A; [0B 5A, 05, 05]
-0F0B; [0B 4C, 05, 05]
-0F0C; [0B 4C, 05, 20]
+0FD0; [0B 5C, 05, 05]
-0F0D; [0B 4E, 05, 05]
+0FD1; [0B 5E, 05, 05]
-0F0E; [0B 50, 05, 05]
+0F0B; [0B 60, 05, 05]
+0F0C; [0B 60, 05, 20]
-0F0F; [0B 52, 05, 05]
+0F0D; [0B 62, 05, 05]
-0F10; [0B 54, 05, 05]
+0F0E; [0B 64, 05, 05]
-0F11; [0B 56, 05, 05]
+0F0F; [0B 66, 05, 05]
-0F12; [0B 58, 05, 05]
+0F10; [0B 68, 05, 05]
-0F85; [0B 5A, 05, 05]
+0F11; [0B 6A, 05, 05]
-0FD2; [0B 5C, 05, 05]
+0F12; [0B 6C, 05, 05]
-0FD3; [0B 5E, 05, 05]
+0F85; [0B 6E, 05, 05]
-0FD4; [0B 60, 05, 05]
+0FD2; [0B 70, 05, 05]
-0FD9; [0B 62, 05, 05]
+0FD3; [0B 72, 05, 05]
-0FDA; [0B 64, 05, 05]
+0FD4; [0B 74, 05, 05]
-11A3F; [0B 66 02, 05, 05]
+0FD9; [0B 76, 05, 05]
-11A40; [0B 66 09, 05, 05]
+0FDA; [0B 78, 05, 05]
-11A41; [0B 66 10, 05, 05]
+11A3F; [0B 7A 02, 05, 05]
-11A42; [0B 66 17, 05, 05]
+11A40; [0B 7A 09, 05, 05]
-11A43; [0B 66 1E, 05, 05]
+11A41; [0B 7A 10, 05, 05]
-11A44; [0B 66 25, 05, 05]
+11A42; [0B 7A 17, 05, 05]
-11A45; [0B 66 2C, 05, 05]
+11A43; [0B 7A 1E, 05, 05]
-11A46; [0B 66 33, 05, 05]
+11A44; [0B 7A 25, 05, 05]
-11A9A; [0B 66 3A, 05, 05]
+11A45; [0B 7A 2C, 05, 05]
-11A9B; [0B 66 41, 05, 05]
+11A46; [0B 7A 33, 05, 05]
-11A9C; [0B 66 48, 05, 05]
+11A9A; [0B 7A 3A, 05, 05]
-11A9E; [0B 66 4F, 05, 05]
+11A9B; [0B 7A 41, 05, 05]
-11A9F; [0B 66 56, 05, 05]
+11A9C; [0B 7A 48, 05, 05]
-11AA0; [0B 66 5D, 05, 05]
+11A9E; [0B 7A 4F, 05, 05]
-11AA1; [0B 66 64, 05, 05]
+11A9F; [0B 7A 56, 05, 05]
-11AA2; [0B 66 6B, 05, 05]
+11AA0; [0B 7A 5D, 05, 05]
-11C70; [0B 66 72, 05, 05]
+11AA1; [0B 7A 64, 05, 05]
-11C71; [0B 66 79, 05, 05]
+11AA2; [0B 7A 6B, 05, 05]
-1C3D; [0B 66 80, 05, 05]
+11C70; [0B 7A 72, 05, 05]
-1C3E; [0B 66 87, 05, 05]
+11C71; [0B 7A 79, 05, 05]
-1C3F; [0B 66 8E, 05, 05]
+1C3D; [0B 7A 80, 05, 05]
-104C; [0B 68, 05, 05]
+1C3E; [0B 7A 87, 05, 05]
-104D; [0B 6A, 05, 05]
+1C3F; [0B 7A 8E, 05, 05]
-104E; [0B 6C, 05, 05]
+104C; [0B 7C, 05, 05]
-104F; [0B 6E, 05, 05]
+104D; [0B 7E, 05, 05]
-17D8; [0B 70, 05, 05]
+104E; [0B 80, 05, 05]
-17D9; [0B 72, 05, 05]
+104F; [0B 82, 05, 05]
-17DA; [0B 74, 05, 05]
+17D8; [0B 84, 05, 05]
-1AA0; [0B 76 02, 05, 05]
+17D9; [0B 86, 05, 05]
-1AA1; [0B 76 09, 05, 05]
+17DA; [0B 88, 05, 05]
-1AA2; [0B 76 10, 05, 05]
+1AA0; [0B 8A 02, 05, 05]
-1AA3; [0B 76 17, 05, 05]
+1AA1; [0B 8A 09, 05, 05]
-1AA4; [0B 76 1E, 05, 05]
+1AA2; [0B 8A 10, 05, 05]
-1AA5; [0B 76 25, 05, 05]
+1AA3; [0B 8A 17, 05, 05]
-1AA6; [0B 76 2C, 05, 05]
+1AA4; [0B 8A 1E, 05, 05]
-1AAC; [0B 76 33, 05, 05]
+1AA5; [0B 8A 25, 05, 05]
-1AAD; [0B 76 3A, 05, 05]
+1AA6; [0B 8A 2C, 05, 05]
-1CC0; [0B 76 41, 05, 05]
+1AAC; [0B 8A 33, 05, 05]
-1CC1; [0B 76 48, 05, 05]
+1AAD; [0B 8A 3A, 05, 05]
-1CC2; [0B 76 4F, 05, 05]
+1CC0; [0B 8A 41, 05, 05]
-1CC3; [0B 76 56, 05, 05]
+1CC1; [0B 8A 48, 05, 05]
-1CC4; [0B 76 5D, 05, 05]
+1CC2; [0B 8A 4F, 05, 05]
-1CC5; [0B 76 64, 05, 05]
+1CC3; [0B 8A 56, 05, 05]
-1CC6; [0B 76 6B, 05, 05]
+1CC4; [0B 8A 5D, 05, 05]
-1CC7; [0B 76 72, 05, 05]
+1CC5; [0B 8A 64, 05, 05]
-2D70; [0B 76 79, 05, 05]
+1CC6; [0B 8A 6B, 05, 05]
-A874; [0B 76 80, 05, 05]
+1CC7; [0B 8A 72, 05, 05]
-A875; [0B 76 87, 05, 05]
+2D70; [0B 8A 79, 05, 05]
-1BFC; [0B 76 8E, 05, 05]
+A874; [0B 8A 80, 05, 05]
-1BFD; [0B 76 95, 05, 05]
+A875; [0B 8A 87, 05, 05]
-1BFE; [0B 76 9C, 05, 05]
+1BFC; [0B 8A 8E, 05, 05]
-1BFF; [0B 76 A3, 05, 05]
+1BFD; [0B 8A 95, 05, 05]
-A92E; [0B 78, 05, 05]
+1BFE; [0B 8A 9C, 05, 05]
-A9DE; [0B 7A 02, 05, 05]
+1BFF; [0B 8A A3, 05, 05]
-A9DF; [0B 7A 09, 05, 05]
+A92E; [0B 8C, 05, 05]
-AA5C; [0B 7A 10, 05, 05]
+A9DE; [0B 8E 02, 05, 05]
-1056F; [0B 7A 17, 05, 05]
+A9DF; [0B 8E 09, 05, 05]
-11049; [0B 7A 1E, 05, 05]
+AA5C; [0B 8E 10, 05, 05]
-1104A; [0B 7A 25, 05, 05]
+1056F; [0B 8E 17, 05, 05]
-1104B; [0B 7A 2C, 05, 05]
+11049; [0B 8E 1E, 05, 05]
-1104C; [0B 7A 33, 05, 05]
+1104A; [0B 8E 25, 05, 05]
-1104D; [0B 7A 3A, 05, 05]
+1104B; [0B 8E 2C, 05, 05]
-10A50; [0B 7A 41, 05, 05]
+1104C; [0B 8E 33, 05, 05]
-10A51; [0B 7A 48, 05, 05]
+1104D; [0B 8E 3A, 05, 05]
-10A52; [0B 7A 4F, 05, 05]
+10A50; [0B 8E 41, 05, 05]
-10A53; [0B 7A 56, 05, 05]
+10A51; [0B 8E 48, 05, 05]
-10A54; [0B 7A 5D, 05, 05]
+10A52; [0B 8E 4F, 05, 05]
-10A55; [0B 7A 64, 05, 05]
+10A53; [0B 8E 56, 05, 05]
-10A58; [0B 7A 6B, 05, 05]
+10A54; [0B 8E 5D, 05, 05]
-11C43; [0B 7A 72, 05, 05]
+10A55; [0B 8E 64, 05, 05]
-11C44; [0B 7A 79, 05, 05]
+10A58; [0B 8E 6B, 05, 05]
-11C45; [0B 7A 80, 05, 05]
+11C43; [0B 8E 72, 05, 05]
-10B39; [0B 7A 87, 05, 05]
+11C44; [0B 8E 79, 05, 05]
-10AF0; [0B 7A 8E, 05, 05]
+11C45; [0B 8E 80, 05, 05]
-10AF1; [0B 7A 95, 05, 05]
+10B39; [0B 8E 87, 05, 05]
-10AF2; [0B 7A 9C, 05, 05]
+10AF0; [0B 8E 8E, 05, 05]
-10AF3; [0B 7A A3, 05, 05]
+10AF1; [0B 8E 95, 05, 05]
-10AF4; [0B 7A AA, 05, 05]
+10AF2; [0B 8E 9C, 05, 05]
-10AF5; [0B 7A B1, 05, 05]
+10AF3; [0B 8E A3, 05, 05]
-10AF6; [0B 7A B8, 05, 05]
+10AF4; [0B 8E AA, 05, 05]
-10B99; [0B 7A BF, 05, 05]
+10AF5; [0B 8E B1, 05, 05]
-10B9A; [0B 7A C6, 05, 05]
+10AF6; [0B 8E B8, 05, 05]
-10B9B; [0B 7A CD, 05, 05]
+10B99; [0B 8E BF, 05, 05]
-10B9C; [0B 7A D4, 05, 05]
+10B9A; [0B 8E C6, 05, 05]
-110BB; [0B 7A DB, 05, 05]
+10B9B; [0B 8E CD, 05, 05]
-110BC; [0B 7A E2, 05, 05]
+10B9C; [0B 8E D4, 05, 05]
-11174; [0B 7A E9, 05, 05]
+110BB; [0B 8E DB, 05, 05]
-11175; [0B 7A F0, 05, 05]
+110BC; [0B 8E E2, 05, 05]
-111CD; [0B 7A F7, 05, 05]
+11174; [0B 8E E9, 05, 05]
-111C7; [0B 7A FE, 05, 05]
+11175; [0B 8E F0, 05, 05]
-111DB; [0B 7B 07, 05, 05]
+111CD; [0B 8E F7, 05, 05]
-111DD; [0B 7B 0E, 05, 05]
+111C7; [0B 8E FE, 05, 05]
-1123A; [0B 7B 15, 05, 05]
+111DB; [0B 8F 07, 05, 05]
-1123B; [0B 7B 1C, 05, 05]
+111DD; [0B 8F 0E, 05, 05]
-1123C; [0B 7B 23, 05, 05]
+1123A; [0B 8F 15, 05, 05]
-1123D; [0B 7B 2A, 05, 05]
+1123B; [0B 8F 1C, 05, 05]
-1144D; [0B 7B 31, 05, 05]
+1123C; [0B 8F 23, 05, 05]
-1145A; [0B 7B 38, 05, 05]
+1123D; [0B 8F 2A, 05, 05]
-1144E; [0B 7B 3F, 05, 05]
+1144D; [0B 8F 31, 05, 05]
-1144F; [0B 7B 46, 05, 05]
+1145A; [0B 8F 38, 05, 05]
-1145B; [0B 7B 4D, 05, 05]
+1144E; [0B 8F 3F, 05, 05]
-1145D; [0B 7B 54, 05, 05]
+1144F; [0B 8F 46, 05, 05]
-114C6; [0B 7B 5B, 05, 05]
+1145B; [0B 8F 4D, 05, 05]
-115C1; [0B 7B 62, 05, 05]
+1145D; [0B 8F 54, 05, 05]
-115C4; [0B 7B 69, 05, 05]
+114C6; [0B 8F 5B, 05, 05]
-115C5; [0B 7B 70, 05, 05]
+115C1; [0B 8F 62, 05, 05]
-115C6; [0B 7B 77, 05, 05]
+115C4; [0B 8F 69, 05, 05]
-115C7; [0B 7B 7E, 05, 05]
+115C5; [0B 8F 70, 05, 05]
-115C8; [0B 7B 85, 05, 05]
+115C6; [0B 8F 77, 05, 05]
-115C9; [0B 7B 8C, 05, 05]
+115C7; [0B 8F 7E, 05, 05]
-115CA; [0B 7B 93, 05, 05]
+115C8; [0B 8F 85, 05, 05]
-115CB; [0B 7B 9A, 05, 05]
+115C9; [0B 8F 8C, 05, 05]
-115CC; [0B 7B A1, 05, 05]
+115CA; [0B 8F 93, 05, 05]
-115CD; [0B 7B A8, 05, 05]
+115CB; [0B 8F 9A, 05, 05]
-115CE; [0B 7B AF, 05, 05]
+115CC; [0B 8F A1, 05, 05]
-115CF; [0B 7B B6, 05, 05]
+115CD; [0B 8F A8, 05, 05]
-115D0; [0B 7B BD, 05, 05]
+115CE; [0B 8F AF, 05, 05]
-115D1; [0B 7B C4, 05, 05]
+115CF; [0B 8F B6, 05, 05]
-115D2; [0B 7B CB, 05, 05]
+115D0; [0B 8F BD, 05, 05]
-115D3; [0B 7B D2, 05, 05]
+115D1; [0B 8F C4, 05, 05]
-115D4; [0B 7B D9, 05, 05]
+115D2; [0B 8F CB, 05, 05]
-115D5; [0B 7B E0, 05, 05]
+115D3; [0B 8F D2, 05, 05]
-115D6; [0B 7B E7, 05, 05]
+115D4; [0B 8F D9, 05, 05]
-115D7; [0B 7B EE, 05, 05]
+115D5; [0B 8F E0, 05, 05]
-11643; [0B 7B F5, 05, 05]
+115D6; [0B 8F E7, 05, 05]
-1183B; [0B 7B FC, 05, 05]
+115D7; [0B 8F EE, 05, 05]
-11945; [0B 7C 05, 05, 05]
+11643; [0B 8F F5, 05, 05]
-119E2; [0B 7C 0C, 05, 05]
+116B9; [0B 8F FC, 05, 05]
-11FFF; [0B 7E, 05, 05]
+1183B; [0B 90 05, 05, 05]
-16B37; [0B 80 02, 05, 05]
+11945; [0B 90 0C, 05, 05]
-16B38; [0B 80 09, 05, 05]
+119E2; [0B 90 13, 05, 05]
-16B39; [0B 80 10, 05, 05]
+11FFF; [0B 92, 05, 05]
-16B3A; [0B 80 17, 05, 05]
+16B37; [0B 94 02, 05, 05]
-16B3B; [0B 80 1E, 05, 05]
+16B38; [0B 94 09, 05, 05]
-16B44; [0B 80 25, 05, 05]
+16B39; [0B 94 10, 05, 05]
-16E99; [0B 80 2C, 05, 05]
+16B3A; [0B 94 17, 05, 05]
-16E9A; [0B 80 33, 05, 05]
+16B3B; [0B 94 1E, 05, 05]
-1DA87; [0B 80 3A, 05, 05]
+16B44; [0B 94 25, 05, 05]
-1DA88; [0B 80 41, 05, 05]
+16E99; [0B 94 2C, 05, 05]
-1DA89; [0B 80 48, 05, 05]
+16E9A; [0B 94 33, 05, 05]
-1DA8A; [0B 80 4F, 05, 05]
+1DA87; [0B 94 3A, 05, 05]
-1DA8B; [0B 80 56, 05, 05]
+1DA88; [0B 94 41, 05, 05]
-10A7F; [0B 80 5D, 05, 05]
+1DA89; [0B 94 48, 05, 05]
+
+1DA8A; [0B 94 4F, 05, 05]
+
+1DA8B; [0B 94 56, 05, 05]
+
+10A7F; [0B 94 5D, 05, 05]
FDD1 263A; [0C 02 02, 05, 05] # SYMBOL first primary starts new lead byte
@@ -3889,6 +4038,32 @@ A78A; [0C 51 09, 05, 05]
AB5B; [0C 51 10, 05, 05]
+1AFF0; [0C 51 17, 05, 05]
+
+1AFF1; [0C 51 1E, 05, 05]
+
+1AFF2; [0C 51 25, 05, 05]
+
+1AFF3; [0C 51 2C, 05, 05]
+
+1AFF5; [0C 51 33, 05, 05]
+
+1AFF6; [0C 51 3A, 05, 05]
+
+1AFF7; [0C 51 41, 05, 05]
+
+1AFF8; [0C 51 48, 05, 05]
+
+1AFF9; [0C 51 4F, 05, 05]
+
+1AFFA; [0C 51 56, 05, 05]
+
+1AFFB; [0C 51 5D, 05, 05]
+
+1AFFD; [0C 51 64, 05, 05]
+
+1AFFE; [0C 51 6B, 05, 05]
+
00B0; [0C 53, 05, 05]
2103; [0C 53, 05, 20][2E, 05, A2]
2109; [0C 53, 05, 20][34, 05, A2]
@@ -3913,12643 +4088,12999 @@ AB5B; [0C 51 10, 05, 05]
06E9; [0C 55 41, 05, 05]
-FDFD; [0C 55 48, 05, 05]
+FD40; [0C 55 48, 05, 05]
+
+FD41; [0C 55 4F, 05, 05]
+
+FD42; [0C 55 56, 05, 05]
+
+FD43; [0C 55 5D, 05, 05]
+
+FD44; [0C 55 64, 05, 05]
+
+FD45; [0C 55 6B, 05, 05]
+
+FD46; [0C 55 72, 05, 05]
+
+FD47; [0C 55 79, 05, 05]
+
+FD48; [0C 55 80, 05, 05]
+
+FD49; [0C 55 87, 05, 05]
+
+FD4A; [0C 55 8E, 05, 05]
+
+FD4B; [0C 55 95, 05, 05]
+
+FD4C; [0C 55 9C, 05, 05]
+
+FD4D; [0C 55 A3, 05, 05]
+
+FD4E; [0C 55 AA, 05, 05]
+
+FD4F; [0C 55 B1, 05, 05]
+
+FDCF; [0C 55 B8, 05, 05]
+
+FDFD; [0C 55 BF, 05, 05]
+
+FDFE; [0C 55 C6, 05, 05]
+
+FDFF; [0C 55 CD, 05, 05]
+
+0888; [0C 55 D4, 05, 05]
+
+FBB2; [0C 55 DB, 05, 05]
+
+FBB3; [0C 55 E2, 05, 05]
+
+FBB4; [0C 55 E9, 05, 05]
+
+FBB5; [0C 55 F0, 05, 05]
+
+FBB6; [0C 55 F7, 05, 05]
+
+FBB7; [0C 55 FE, 05, 05]
+
+FBB8; [0C 56 07, 05, 05]
+
+FBB9; [0C 56 0E, 05, 05]
+
+FBBA; [0C 56 15, 05, 05]
+
+FBBB; [0C 56 1C, 05, 05]
+
+FBBC; [0C 56 23, 05, 05]
+
+FBBD; [0C 56 2A, 05, 05]
+
+FBBE; [0C 56 31, 05, 05]
+
+FBBF; [0C 56 38, 05, 05]
+
+FBC0; [0C 56 3F, 05, 05]
+
+FBC1; [0C 56 46, 05, 05]
+
+FBC2; [0C 56 4D, 05, 05]
+
+07F6; [0C 56 54, 05, 05]
+
+09FA; [0C 56 5B, 05, 05]
+
+0B70; [0C 56 62, 05, 05]
+
+0BF3; [0C 56 69, 05, 05]
+
+0BF4; [0C 56 70, 05, 05]
+
+0BF5; [0C 56 77, 05, 05]
+
+0BF6; [0C 56 7E, 05, 05]
+
+0BF7; [0C 56 85, 05, 05]
+
+0BF8; [0C 56 8C, 05, 05]
+
+0BFA; [0C 56 93, 05, 05]
+
+11FD5; [0C 56 9A, 05, 05]
+
+11FD6; [0C 56 A1, 05, 05]
+
+11FD7; [0C 56 A8, 05, 05]
+
+11FD8; [0C 56 AF, 05, 05]
+
+11FD9; [0C 56 B6, 05, 05]
+
+11FDA; [0C 56 BD, 05, 05]
+
+11FDB; [0C 56 C4, 05, 05]
+
+11FDC; [0C 56 CB, 05, 05]
+
+11FE1; [0C 56 D2, 05, 05]
+
+11FE2; [0C 56 D9, 05, 05]
+
+11FE3; [0C 56 E0, 05, 05]
+
+11FE4; [0C 56 E7, 05, 05]
+
+11FE5; [0C 56 EE, 05, 05]
+
+11FE6; [0C 56 F5, 05, 05]
+
+11FE7; [0C 56 FC, 05, 05]
+
+11FE8; [0C 57 05, 05, 05]
+
+11FE9; [0C 57 0C, 05, 05]
+
+11FEA; [0C 57 13, 05, 05]
+
+11FEB; [0C 57 1A, 05, 05]
+
+11FEC; [0C 57 21, 05, 05]
+
+11FED; [0C 57 28, 05, 05]
+
+11FEE; [0C 57 2F, 05, 05]
+
+11FEF; [0C 57 36, 05, 05]
+
+11FF0; [0C 57 3D, 05, 05]
+
+11FF1; [0C 57 44, 05, 05]
+
+0C7F; [0C 57 4B, 05, 05]
+
+0D4F; [0C 57 52, 05, 05]
+
+0D79; [0C 57 59, 05, 05]
+
+A828; [0C 57 60, 05, 05]
+
+A829; [0C 57 67, 05, 05]
+
+A82A; [0C 57 6E, 05, 05]
+
+A82B; [0C 57 75, 05, 05]
+
+A836; [0C 57 7C, 05, 05]
+
+A837; [0C 57 83, 05, 05]
+
+A839; [0C 57 8A, 05, 05]
+
+0F01; [0C 57 91, 05, 05]
+
+0F02; [0C 57 98, 05, 05]
+
+0F03; [0C 57 9F, 05, 05]
+
+0F13; [0C 57 A6, 05, 05]
+
+0F15; [0C 57 AD, 05, 05]
+
+0F16; [0C 57 B4, 05, 05]
+
+0F17; [0C 57 BB, 05, 05]
+
+0F1A; [0C 57 C2, 05, 05]
+
+0F1B; [0C 57 C9, 05, 05]
+
+0F1C; [0C 57 D0, 05, 05]
+
+0F1D; [0C 57 D7, 05, 05]
+
+0F1E; [0C 57 DE, 05, 05]
+
+0F1F; [0C 57 E5, 05, 05]
+
+0F34; [0C 57 EC, 05, 05]
+
+0F36; [0C 57 F3, 05, 05]
+
+0F38; [0C 57 FA, 05, 05]
+
+0FBE; [0C 58 03, 05, 05]
+
+0FBF; [0C 58 0A, 05, 05]
+
+0FC0; [0C 58 11, 05, 05]
+
+0FC1; [0C 58 18, 05, 05]
+
+0FC2; [0C 58 1F, 05, 05]
+
+0FC3; [0C 58 26, 05, 05]
+
+0FC4; [0C 58 2D, 05, 05]
+
+0FC5; [0C 58 34, 05, 05]
+
+0FC7; [0C 58 3B, 05, 05]
+
+0FC8; [0C 58 42, 05, 05]
-FBB2; [0C 55 4F, 05, 05]
+0FC9; [0C 58 49, 05, 05]
-FBB3; [0C 55 56, 05, 05]
+0FCA; [0C 58 50, 05, 05]
-FBB4; [0C 55 5D, 05, 05]
+0FCB; [0C 58 57, 05, 05]
-FBB5; [0C 55 64, 05, 05]
+0FCC; [0C 58 5E, 05, 05]
-FBB6; [0C 55 6B, 05, 05]
+0FCE; [0C 58 65, 05, 05]
-FBB7; [0C 55 72, 05, 05]
+0FCF; [0C 58 6C, 05, 05]
-FBB8; [0C 55 79, 05, 05]
+0FD5; [0C 58 73, 05, 05]
-FBB9; [0C 55 80, 05, 05]
+0FD6; [0C 58 7A, 05, 05]
-FBBA; [0C 55 87, 05, 05]
+0FD7; [0C 58 81, 05, 05]
-FBBB; [0C 55 8E, 05, 05]
+0FD8; [0C 58 88, 05, 05]
-FBBC; [0C 55 95, 05, 05]
+166D; [0C 58 8F, 05, 05]
-FBBD; [0C 55 9C, 05, 05]
+1940; [0C 58 96, 05, 05]
-FBBE; [0C 55 A3, 05, 05]
+109E; [0C 58 9D, 05, 05]
-FBBF; [0C 55 AA, 05, 05]
+109F; [0C 58 A4, 05, 05]
-FBC0; [0C 55 B1, 05, 05]
+AA77; [0C 58 AB, 05, 05]
-FBC1; [0C 55 B8, 05, 05]
+AA78; [0C 58 B2, 05, 05]
-07F6; [0C 55 BF, 05, 05]
+AA79; [0C 58 B9, 05, 05]
-09FA; [0C 55 C6, 05, 05]
+1173F; [0C 58 C0, 05, 05]
-0B70; [0C 55 CD, 05, 05]
+19E0; [0C 58 C7, 05, 05]
-0BF3; [0C 55 D4, 05, 05]
+19E1; [0C 58 CE, 05, 05]
-0BF4; [0C 55 DB, 05, 05]
+19E2; [0C 58 D5, 05, 05]
-0BF5; [0C 55 E2, 05, 05]
+19E3; [0C 58 DC, 05, 05]
-0BF6; [0C 55 E9, 05, 05]
+19E4; [0C 58 E3, 05, 05]
-0BF7; [0C 55 F0, 05, 05]
+19E5; [0C 58 EA, 05, 05]
-0BF8; [0C 55 F7, 05, 05]
+19E6; [0C 58 F1, 05, 05]
-0BFA; [0C 55 FE, 05, 05]
+19E7; [0C 58 F8, 05, 05]
-11FD5; [0C 56 07, 05, 05]
+19E8; [0C 58 FF, 05, 05]
-11FD6; [0C 56 0E, 05, 05]
+19E9; [0C 59 08, 05, 05]
-11FD7; [0C 56 15, 05, 05]
+19EA; [0C 59 0F, 05, 05]
-11FD8; [0C 56 1C, 05, 05]
+19EB; [0C 59 16, 05, 05]
-11FD9; [0C 56 23, 05, 05]
+19EC; [0C 59 1D, 05, 05]
-11FDA; [0C 56 2A, 05, 05]
+19ED; [0C 59 24, 05, 05]
-11FDB; [0C 56 31, 05, 05]
+19EE; [0C 59 2B, 05, 05]
-11FDC; [0C 56 38, 05, 05]
+19EF; [0C 59 32, 05, 05]
-11FE1; [0C 56 3F, 05, 05]
+19F0; [0C 59 39, 05, 05]
-11FE2; [0C 56 46, 05, 05]
+19F1; [0C 59 40, 05, 05]
-11FE3; [0C 56 4D, 05, 05]
+19F2; [0C 59 47, 05, 05]
-11FE4; [0C 56 54, 05, 05]
+19F3; [0C 59 4E, 05, 05]
-11FE5; [0C 56 5B, 05, 05]
+19F4; [0C 59 55, 05, 05]
-11FE6; [0C 56 62, 05, 05]
+19F5; [0C 59 5C, 05, 05]
-11FE7; [0C 56 69, 05, 05]
+19F6; [0C 59 63, 05, 05]
-11FE8; [0C 56 70, 05, 05]
+19F7; [0C 59 6A, 05, 05]
-11FE9; [0C 56 77, 05, 05]
+19F8; [0C 59 71, 05, 05]
-11FEA; [0C 56 7E, 05, 05]
+19F9; [0C 59 78, 05, 05]
-11FEB; [0C 56 85, 05, 05]
+19FA; [0C 59 7F, 05, 05]
-11FEC; [0C 56 8C, 05, 05]
+19FB; [0C 59 86, 05, 05]
-11FED; [0C 56 93, 05, 05]
+19FC; [0C 59 8D, 05, 05]
-11FEE; [0C 56 9A, 05, 05]
+19FD; [0C 59 94, 05, 05]
-11FEF; [0C 56 A1, 05, 05]
+19FE; [0C 59 9B, 05, 05]
-11FF0; [0C 56 A8, 05, 05]
+19FF; [0C 59 A2, 05, 05]
-11FF1; [0C 56 AF, 05, 05]
+1B61; [0C 59 A9, 05, 05]
-0C7F; [0C 56 B6, 05, 05]
+1B62; [0C 59 B0, 05, 05]
-0D4F; [0C 56 BD, 05, 05]
+1B63; [0C 59 B7, 05, 05]
-0D79; [0C 56 C4, 05, 05]
+1B64; [0C 59 BE, 05, 05]
-A828; [0C 56 CB, 05, 05]
+1B65; [0C 59 C5, 05, 05]
-A829; [0C 56 D2, 05, 05]
+1B66; [0C 59 CC, 05, 05]
-A82A; [0C 56 D9, 05, 05]
+1B67; [0C 59 D3, 05, 05]
-A82B; [0C 56 E0, 05, 05]
+1B68; [0C 59 DA, 05, 05]
-A836; [0C 56 E7, 05, 05]
+1B69; [0C 59 E1, 05, 05]
-A837; [0C 56 EE, 05, 05]
+1B6A; [0C 59 E8, 05, 05]
-A839; [0C 56 F5, 05, 05]
+1B74; [0C 59 EF, 05, 05]
-0F01; [0C 56 FC, 05, 05]
+1B75; [0C 59 F6, 05, 05]
-0F02; [0C 57 05, 05, 05]
+1B76; [0C 59 FD, 05, 05]
-0F03; [0C 57 0C, 05, 05]
+1B77; [0C 5A 06, 05, 05]
-0F13; [0C 57 13, 05, 05]
+1B78; [0C 5A 0D, 05, 05]
-0F15; [0C 57 1A, 05, 05]
+1B79; [0C 5A 14, 05, 05]
-0F16; [0C 57 21, 05, 05]
+1B7A; [0C 5A 1B, 05, 05]
-0F17; [0C 57 28, 05, 05]
+1B7B; [0C 5A 22, 05, 05]
-0F1A; [0C 57 2F, 05, 05]
+1B7C; [0C 5A 29, 05, 05]
-0F1B; [0C 57 36, 05, 05]
+00A9; [0C 5C, 05, 05]
-0F1C; [0C 57 3D, 05, 05]
+1F12F; [0C 5E, 05, 05]
-0F1D; [0C 57 44, 05, 05]
+00AE; [0C 60, 05, 05]
-0F1E; [0C 57 4B, 05, 05]
+1F1AD; [0C 62 02, 05, 05]
-0F1F; [0C 57 52, 05, 05]
+2104; [0C 62 09, 05, 05]
-0F34; [0C 57 59, 05, 05]
+2108; [0C 62 10, 05, 05]
-0F36; [0C 57 60, 05, 05]
+2114; [0C 62 17, 05, 05]
-0F38; [0C 57 67, 05, 05]
+2117; [0C 62 1E, 05, 05]
-0FBE; [0C 57 6E, 05, 05]
+2118; [0C 62 25, 05, 05]
-0FBF; [0C 57 75, 05, 05]
+211E; [0C 62 2C, 05, 05]
-0FC0; [0C 57 7C, 05, 05]
+211F; [0C 62 33, 05, 05]
-0FC1; [0C 57 83, 05, 05]
+2123; [0C 62 3A, 05, 05]
-0FC2; [0C 57 8A, 05, 05]
+2125; [0C 62 41, 05, 05]
-0FC3; [0C 57 91, 05, 05]
+2127; [0C 62 48, 05, 05]
-0FC4; [0C 57 98, 05, 05]
+2129; [0C 62 4F, 05, 05]
-0FC5; [0C 57 9F, 05, 05]
+212E; [0C 62 56, 05, 05]
-0FC7; [0C 57 A6, 05, 05]
+213A; [0C 62 5D, 05, 05]
-0FC8; [0C 57 AD, 05, 05]
+2141; [0C 62 64, 05, 05]
-0FC9; [0C 57 B4, 05, 05]
+2142; [0C 62 6B, 05, 05]
-0FCA; [0C 57 BB, 05, 05]
+2143; [0C 62 72, 05, 05]
-0FCB; [0C 57 C2, 05, 05]
+2144; [0C 62 79, 05, 05]
-0FCC; [0C 57 C9, 05, 05]
+214A; [0C 62 80, 05, 05]
-0FCE; [0C 57 D0, 05, 05]
+214C; [0C 62 87, 05, 05]
-0FCF; [0C 57 D7, 05, 05]
+214F; [0C 62 8E, 05, 05]
-0FD5; [0C 57 DE, 05, 05]
+218A; [0C 62 95, 05, 05]
-0FD6; [0C 57 E5, 05, 05]
+218B; [0C 62 9C, 05, 05]
-0FD7; [0C 57 EC, 05, 05]
+2190; [0C 64, 05, 05]
+FFE9; [0C 64, 05, A0]
+219A; [0C 64, 05, 05][, 9E, 05]
-0FD8; [0C 57 F3, 05, 05]
+2192; [0C 66, 05, 05]
+FFEB; [0C 66, 05, A0]
+219B; [0C 66, 05, 05][, 9E, 05]
-166D; [0C 57 FA, 05, 05]
+2191; [0C 68, 05, 05]
+FFEA; [0C 68, 05, A0]
-1940; [0C 58 03, 05, 05]
+2193; [0C 6A, 05, 05]
+FFEC; [0C 6A, 05, A0]
-109E; [0C 58 0A, 05, 05]
+2194; [0C 6C 02, 05, 05]
+21AE; [0C 6C 02, 05, 05][, 9E, 05]
-109F; [0C 58 11, 05, 05]
+2195; [0C 6C 09, 05, 05]
-AA77; [0C 58 18, 05, 05]
+2196; [0C 6C 10, 05, 05]
-AA78; [0C 58 1F, 05, 05]
+2197; [0C 6C 17, 05, 05]
-AA79; [0C 58 26, 05, 05]
+2198; [0C 6C 1E, 05, 05]
-1173F; [0C 58 2D, 05, 05]
+2199; [0C 6C 25, 05, 05]
-19E0; [0C 58 34, 05, 05]
+219C; [0C 6C 2C, 05, 05]
-19E1; [0C 58 3B, 05, 05]
+219D; [0C 6C 33, 05, 05]
-19E2; [0C 58 42, 05, 05]
+219E; [0C 6C 3A, 05, 05]
-19E3; [0C 58 49, 05, 05]
+219F; [0C 6C 41, 05, 05]
-19E4; [0C 58 50, 05, 05]
+21A0; [0C 6C 48, 05, 05]
-19E5; [0C 58 57, 05, 05]
+21A1; [0C 6C 4F, 05, 05]
-19E6; [0C 58 5E, 05, 05]
+21A2; [0C 6C 56, 05, 05]
-19E7; [0C 58 65, 05, 05]
+21A3; [0C 6C 5D, 05, 05]
-19E8; [0C 58 6C, 05, 05]
+21A4; [0C 6C 64, 05, 05]
-19E9; [0C 58 73, 05, 05]
+21A5; [0C 6C 6B, 05, 05]
-19EA; [0C 58 7A, 05, 05]
+21A6; [0C 6C 72, 05, 05]
-19EB; [0C 58 81, 05, 05]
+21A7; [0C 6C 79, 05, 05]
-19EC; [0C 58 88, 05, 05]
+21A8; [0C 6C 80, 05, 05]
-19ED; [0C 58 8F, 05, 05]
+21A9; [0C 6C 87, 05, 05]
-19EE; [0C 58 96, 05, 05]
+21AA; [0C 6C 8E, 05, 05]
-19EF; [0C 58 9D, 05, 05]
+21AB; [0C 6C 95, 05, 05]
-19F0; [0C 58 A4, 05, 05]
+21AC; [0C 6C 9C, 05, 05]
-19F1; [0C 58 AB, 05, 05]
+21AD; [0C 6C A3, 05, 05]
-19F2; [0C 58 B2, 05, 05]
+21AF; [0C 6C AA, 05, 05]
-19F3; [0C 58 B9, 05, 05]
+21B0; [0C 6C B1, 05, 05]
-19F4; [0C 58 C0, 05, 05]
+21B1; [0C 6C B8, 05, 05]
-19F5; [0C 58 C7, 05, 05]
+21B2; [0C 6C BF, 05, 05]
-19F6; [0C 58 CE, 05, 05]
+21B3; [0C 6C C6, 05, 05]
-19F7; [0C 58 D5, 05, 05]
+21B4; [0C 6C CD, 05, 05]
-19F8; [0C 58 DC, 05, 05]
+21B5; [0C 6C D4, 05, 05]
-19F9; [0C 58 E3, 05, 05]
+21B6; [0C 6C DB, 05, 05]
-19FA; [0C 58 EA, 05, 05]
+21B7; [0C 6C E2, 05, 05]
-19FB; [0C 58 F1, 05, 05]
+21B8; [0C 6C E9, 05, 05]
-19FC; [0C 58 F8, 05, 05]
+21B9; [0C 6C F0, 05, 05]
-19FD; [0C 58 FF, 05, 05]
+21BA; [0C 6C F7, 05, 05]
-19FE; [0C 59 08, 05, 05]
+21BB; [0C 6C FE, 05, 05]
-19FF; [0C 59 0F, 05, 05]
+21BC; [0C 6D 07, 05, 05]
-1B61; [0C 59 16, 05, 05]
+21BD; [0C 6D 0E, 05, 05]
-1B62; [0C 59 1D, 05, 05]
+21BE; [0C 6D 15, 05, 05]
-1B63; [0C 59 24, 05, 05]
+21BF; [0C 6D 1C, 05, 05]
-1B64; [0C 59 2B, 05, 05]
+21C0; [0C 6D 23, 05, 05]
-1B65; [0C 59 32, 05, 05]
+21C1; [0C 6D 2A, 05, 05]
-1B66; [0C 59 39, 05, 05]
+21C2; [0C 6D 31, 05, 05]
-1B67; [0C 59 40, 05, 05]
+21C3; [0C 6D 38, 05, 05]
-1B68; [0C 59 47, 05, 05]
+21C4; [0C 6D 3F, 05, 05]
-1B69; [0C 59 4E, 05, 05]
+21C5; [0C 6D 46, 05, 05]
-1B6A; [0C 59 55, 05, 05]
+21C6; [0C 6D 4D, 05, 05]
-1B74; [0C 59 5C, 05, 05]
+21C7; [0C 6D 54, 05, 05]
-1B75; [0C 59 63, 05, 05]
+21C8; [0C 6D 5B, 05, 05]
-1B76; [0C 59 6A, 05, 05]
+21C9; [0C 6D 62, 05, 05]
-1B77; [0C 59 71, 05, 05]
+21CA; [0C 6D 69, 05, 05]
-1B78; [0C 59 78, 05, 05]
+21CB; [0C 6D 70, 05, 05]
-1B79; [0C 59 7F, 05, 05]
+21CC; [0C 6D 77, 05, 05]
-1B7A; [0C 59 86, 05, 05]
+21D0; [0C 6D 7E, 05, 05]
+21CD; [0C 6D 7E, 05, 05][, 9E, 05]
-1B7B; [0C 59 8D, 05, 05]
+21D1; [0C 6D 85, 05, 05]
-1B7C; [0C 59 94, 05, 05]
+21D2; [0C 6D 8C, 05, 05]
+21CF; [0C 6D 8C, 05, 05][, 9E, 05]
-00A9; [0C 5B, 05, 05]
+21D3; [0C 6D 93, 05, 05]
-1F12F; [0C 5D, 05, 05]
+21D4; [0C 6D 9A, 05, 05]
+21CE; [0C 6D 9A, 05, 05][, 9E, 05]
-00AE; [0C 5F, 05, 05]
+21D5; [0C 6D A1, 05, 05]
-1F1AD; [0C 61 02, 05, 05]
+21D6; [0C 6D A8, 05, 05]
-2104; [0C 61 09, 05, 05]
+21D7; [0C 6D AF, 05, 05]
-2108; [0C 61 10, 05, 05]
+21D8; [0C 6D B6, 05, 05]
-2114; [0C 61 17, 05, 05]
+21D9; [0C 6D BD, 05, 05]
-2117; [0C 61 1E, 05, 05]
+21DA; [0C 6D C4, 05, 05]
-2118; [0C 61 25, 05, 05]
+21DB; [0C 6D CB, 05, 05]
-211E; [0C 61 2C, 05, 05]
+21DC; [0C 6D D2, 05, 05]
-211F; [0C 61 33, 05, 05]
+21DD; [0C 6D D9, 05, 05]
-2123; [0C 61 3A, 05, 05]
+21DE; [0C 6D E0, 05, 05]
-2125; [0C 61 41, 05, 05]
+21DF; [0C 6D E7, 05, 05]
-2127; [0C 61 48, 05, 05]
+21E0; [0C 6D EE, 05, 05]
-2129; [0C 61 4F, 05, 05]
+21E1; [0C 6D F5, 05, 05]
-212E; [0C 61 56, 05, 05]
+21E2; [0C 6D FC, 05, 05]
-213A; [0C 61 5D, 05, 05]
+21E3; [0C 6E 05, 05, 05]
-2141; [0C 61 64, 05, 05]
+21E4; [0C 6E 0C, 05, 05]
-2142; [0C 61 6B, 05, 05]
+21E5; [0C 6E 13, 05, 05]
-2143; [0C 61 72, 05, 05]
+21E6; [0C 6E 1A, 05, 05]
-2144; [0C 61 79, 05, 05]
+21E7; [0C 6E 21, 05, 05]
-214A; [0C 61 80, 05, 05]
+21E8; [0C 6E 28, 05, 05]
-214C; [0C 61 87, 05, 05]
+21E9; [0C 6E 2F, 05, 05]
-214F; [0C 61 8E, 05, 05]
+21EA; [0C 6E 36, 05, 05]
-218A; [0C 61 95, 05, 05]
+21EB; [0C 6E 3D, 05, 05]
-218B; [0C 61 9C, 05, 05]
+21EC; [0C 6E 44, 05, 05]
-2190; [0C 63, 05, 05]
-FFE9; [0C 63, 05, A0]
-219A; [0C 63, 05, 05][, 9E, 05]
+21ED; [0C 6E 4B, 05, 05]
-2192; [0C 65, 05, 05]
-FFEB; [0C 65, 05, A0]
-219B; [0C 65, 05, 05][, 9E, 05]
+21EE; [0C 6E 52, 05, 05]
-2191; [0C 67, 05, 05]
-FFEA; [0C 67, 05, A0]
+21EF; [0C 6E 59, 05, 05]
-2193; [0C 69, 05, 05]
-FFEC; [0C 69, 05, A0]
+21F0; [0C 6E 60, 05, 05]
-2194; [0C 6B 02, 05, 05]
-21AE; [0C 6B 02, 05, 05][, 9E, 05]
+21F1; [0C 6E 67, 05, 05]
-2195; [0C 6B 09, 05, 05]
+21F2; [0C 6E 6E, 05, 05]
-2196; [0C 6B 10, 05, 05]
+21F3; [0C 6E 75, 05, 05]
-2197; [0C 6B 17, 05, 05]
+21F4; [0C 6E 7C, 05, 05]
-2198; [0C 6B 1E, 05, 05]
+21F5; [0C 6E 83, 05, 05]
-2199; [0C 6B 25, 05, 05]
+21F6; [0C 6E 8A, 05, 05]
-219C; [0C 6B 2C, 05, 05]
+21F7; [0C 6E 91, 05, 05]
-219D; [0C 6B 33, 05, 05]
+21F8; [0C 6E 98, 05, 05]
-219E; [0C 6B 3A, 05, 05]
+21F9; [0C 6E 9F, 05, 05]
-219F; [0C 6B 41, 05, 05]
+21FA; [0C 6E A6, 05, 05]
-21A0; [0C 6B 48, 05, 05]
+21FB; [0C 6E AD, 05, 05]
-21A1; [0C 6B 4F, 05, 05]
+21FC; [0C 6E B4, 05, 05]
-21A2; [0C 6B 56, 05, 05]
+21FD; [0C 6E BB, 05, 05]
-21A3; [0C 6B 5D, 05, 05]
+21FE; [0C 6E C2, 05, 05]
-21A4; [0C 6B 64, 05, 05]
+21FF; [0C 6E C9, 05, 05]
-21A5; [0C 6B 6B, 05, 05]
+2200; [0C 6E D0, 05, 05]
-21A6; [0C 6B 72, 05, 05]
+2201; [0C 6E D7, 05, 05]
-21A7; [0C 6B 79, 05, 05]
+2202; [0C 70, 05, 05]
+1D6DB; [0C 70, 05, 20]
+1D715; [0C 70, 05, 20]
+1D74F; [0C 70, 05, 20]
+1D789; [0C 70, 05, 20]
+1D7C3; [0C 70, 05, 20]
-21A8; [0C 6B 80, 05, 05]
+2203; [0C 72 02, 05, 05]
+2204; [0C 72 02, 05, 05][, 9E, 05]
-21A9; [0C 6B 87, 05, 05]
+2205; [0C 72 09, 05, 05]
-21AA; [0C 6B 8E, 05, 05]
+2206; [0C 72 10, 05, 05]
-21AB; [0C 6B 95, 05, 05]
+2207; [0C 74, 05, 05]
+1D6C1; [0C 74, 05, 20]
+1D6FB; [0C 74, 05, 20]
+1D735; [0C 74, 05, 20]
+1D76F; [0C 74, 05, 20]
+1D7A9; [0C 74, 05, 20]
-21AC; [0C 6B 9C, 05, 05]
+2208; [0C 76 02, 05, 05]
+2209; [0C 76 02, 05, 05][, 9E, 05]
-21AD; [0C 6B A3, 05, 05]
+220A; [0C 76 09, 05, 05]
-21AF; [0C 6B AA, 05, 05]
+220B; [0C 76 10, 05, 05]
+220C; [0C 76 10, 05, 05][, 9E, 05]
-21B0; [0C 6B B1, 05, 05]
+220D; [0C 76 17, 05, 05]
-21B1; [0C 6B B8, 05, 05]
+03F6; [0C 76 1E, 05, 05]
-21B2; [0C 6B BF, 05, 05]
+220E; [0C 76 25, 05, 05]
-21B3; [0C 6B C6, 05, 05]
+220F; [0C 76 2C, 05, 05]
-21B4; [0C 6B CD, 05, 05]
+2210; [0C 76 33, 05, 05]
-21B5; [0C 6B D4, 05, 05]
+2211; [0C 78, 05, 05]
+2140; [0C 78, 05, 20]
-21B6; [0C 6B DB, 05, 05]
+002B; [0C 7A, 05, 05]
+FF0B; [0C 7A, 05, 10]
+FB29; [0C 7A, 05, 18]
+FE62; [0C 7A, 05, 20]
+207A; [0C 7A, 05, 28]
+208A; [0C 7A, 05, 30]
-21B7; [0C 6B E2, 05, 05]
+00B1; [0C 7C, 05, 05]
-21B8; [0C 6B E9, 05, 05]
+00F7; [0C 7E, 05, 05]
-21B9; [0C 6B F0, 05, 05]
+00D7; [0C 80, 05, 05]
-21BA; [0C 6B F7, 05, 05]
+003C; [0C 82, 05, 05]
+FF1C; [0C 82, 05, 20]
+FE64; [0C 82, 05, 2E]
+226E; [0C 82, 05, 05][, 9E, 05]
-21BB; [0C 6B FE, 05, 05]
+003D; [0C 84, 05, 05]
+FF1D; [0C 84, 05, 10]
+FE66; [0C 84, 05, 20]
+207C; [0C 84, 05, 28]
+208C; [0C 84, 05, 30]
+2260; [0C 84, 05, 05][, 9E, 05]
+2A75; [0C 84, 05, 18][0C 84, 05, 18]
+2A76; [0C 84, 05, 18][0C 84, 05, 18][0C 84, 05, 18]
-21BC; [0C 6C 07, 05, 05]
+003E; [0C 86, 05, 05]
+FF1E; [0C 86, 05, 20]
+FE65; [0C 86, 05, 2E]
+226F; [0C 86, 05, 05][, 9E, 05]
-21BD; [0C 6C 0E, 05, 05]
+00AC; [0C 88, 05, 05]
+FFE2; [0C 88, 05, 20]
-21BE; [0C 6C 15, 05, 05]
+007C; [0C 8A, 05, 05]
+FF5C; [0C 8A, 05, 20]
-21BF; [0C 6C 1C, 05, 05]
+00A6; [0C 8C, 05, 05]
+FFE4; [0C 8C, 05, 20]
-21C0; [0C 6C 23, 05, 05]
+007E; [0C 8E, 05, 05]
+FF5E; [0C 8E, 05, 20]
-21C1; [0C 6C 2A, 05, 05]
+2212; [0C 90, 05, 05]
+207B; [0C 90, 05, 20]
+208B; [0C 90, 05, 2E]
-21C2; [0C 6C 31, 05, 05]
+2052; [0C 92 02, 05, 05]
-21C3; [0C 6C 38, 05, 05]
+2213; [0C 92 09, 05, 05]
-21C4; [0C 6C 3F, 05, 05]
+2214; [0C 92 10, 05, 05]
-21C5; [0C 6C 46, 05, 05]
+2215; [0C 94, 05, 05]
-21C6; [0C 6C 4D, 05, 05]
+2044; [0C 96, 05, 05]
-21C7; [0C 6C 54, 05, 05]
+2216; [0C 98 02, 05, 05]
-21C8; [0C 6C 5B, 05, 05]
+2217; [0C 98 09, 05, 05]
-21C9; [0C 6C 62, 05, 05]
+2218; [0C 98 10, 05, 05]
-21CA; [0C 6C 69, 05, 05]
+2219; [0C 98 17, 05, 05]
-21CB; [0C 6C 70, 05, 05]
+221A; [0C 98 1E, 05, 05]
-21CC; [0C 6C 77, 05, 05]
+221B; [0C 98 25, 05, 05]
-21D0; [0C 6C 7E, 05, 05]
-21CD; [0C 6C 7E, 05, 05][, 9E, 05]
+0606; [0C 98 2C, 05, 05]
-21D1; [0C 6C 85, 05, 05]
+221C; [0C 98 33, 05, 05]
-21D2; [0C 6C 8C, 05, 05]
-21CF; [0C 6C 8C, 05, 05][, 9E, 05]
+0607; [0C 98 3A, 05, 05]
-21D3; [0C 6C 93, 05, 05]
+221D; [0C 98 41, 05, 05]
-21D4; [0C 6C 9A, 05, 05]
-21CE; [0C 6C 9A, 05, 05][, 9E, 05]
+221E; [0C 98 48, 05, 05]
-21D5; [0C 6C A1, 05, 05]
+221F; [0C 98 4F, 05, 05]
-21D6; [0C 6C A8, 05, 05]
+2220; [0C 98 56, 05, 05]
-21D7; [0C 6C AF, 05, 05]
+2221; [0C 98 5D, 05, 05]
-21D8; [0C 6C B6, 05, 05]
+2222; [0C 98 64, 05, 05]
-21D9; [0C 6C BD, 05, 05]
+2223; [0C 98 6B, 05, 05]
+2224; [0C 98 6B, 05, 05][, 9E, 05]
-21DA; [0C 6C C4, 05, 05]
+2225; [0C 98 72, 05, 05]
+2226; [0C 98 72, 05, 05][, 9E, 05]
-21DB; [0C 6C CB, 05, 05]
+2227; [0C 98 79, 05, 05]
-21DC; [0C 6C D2, 05, 05]
+2228; [0C 98 80, 05, 05]
-21DD; [0C 6C D9, 05, 05]
+2229; [0C 98 87, 05, 05]
-21DE; [0C 6C E0, 05, 05]
+222A; [0C 98 8E, 05, 05]
-21DF; [0C 6C E7, 05, 05]
+222B; [0C 9A, 05, 05]
+222C; [0C 9A, 05, 20][0C 9A, 05, 20]
+222D; [0C 9A, 05, 20][0C 9A, 05, 20][0C 9A, 05, 20]
+2A0C; [0C 9A, 05, 20][0C 9A, 05, 20][0C 9A, 05, 20][0C 9A, 05, 20]
-21E0; [0C 6C EE, 05, 05]
+222E; [0C 9C, 05, 05]
+222F; [0C 9C, 05, 20][0C 9C, 05, 20]
+2230; [0C 9C, 05, 20][0C 9C, 05, 20][0C 9C, 05, 20]
-21E1; [0C 6C F5, 05, 05]
+2231; [0C 9E 02, 05, 05]
-21E2; [0C 6C FC, 05, 05]
+2232; [0C 9E 09, 05, 05]
-21E3; [0C 6D 05, 05, 05]
+2233; [0C 9E 10, 05, 05]
-21E4; [0C 6D 0C, 05, 05]
+2234; [0C 9E 17, 05, 05]
-21E5; [0C 6D 13, 05, 05]
+2235; [0C 9E 1E, 05, 05]
-21E6; [0C 6D 1A, 05, 05]
+2236; [0C 9E 25, 05, 05]
-21E7; [0C 6D 21, 05, 05]
+2237; [0C 9E 2C, 05, 05]
-21E8; [0C 6D 28, 05, 05]
+2238; [0C 9E 33, 05, 05]
-21E9; [0C 6D 2F, 05, 05]
+2239; [0C 9E 3A, 05, 05]
-21EA; [0C 6D 36, 05, 05]
+223A; [0C 9E 41, 05, 05]
-21EB; [0C 6D 3D, 05, 05]
+223B; [0C 9E 48, 05, 05]
-21EC; [0C 6D 44, 05, 05]
+223C; [0C 9E 4F, 05, 05]
+2241; [0C 9E 4F, 05, 05][, 9E, 05]
-21ED; [0C 6D 4B, 05, 05]
+223D; [0C 9E 56, 05, 05]
-21EE; [0C 6D 52, 05, 05]
+223E; [0C 9E 5D, 05, 05]
-21EF; [0C 6D 59, 05, 05]
+223F; [0C 9E 64, 05, 05]
-21F0; [0C 6D 60, 05, 05]
+2240; [0C 9E 6B, 05, 05]
-21F1; [0C 6D 67, 05, 05]
+2242; [0C 9E 72, 05, 05]
-21F2; [0C 6D 6E, 05, 05]
+2243; [0C 9E 79, 05, 05]
+2244; [0C 9E 79, 05, 05][, 9E, 05]
-21F3; [0C 6D 75, 05, 05]
+2245; [0C 9E 80, 05, 05]
+2247; [0C 9E 80, 05, 05][, 9E, 05]
-21F4; [0C 6D 7C, 05, 05]
+2246; [0C 9E 87, 05, 05]
-21F5; [0C 6D 83, 05, 05]
+2248; [0C 9E 8E, 05, 05]
+2249; [0C 9E 8E, 05, 05][, 9E, 05]
-21F6; [0C 6D 8A, 05, 05]
+224A; [0C 9E 95, 05, 05]
-21F7; [0C 6D 91, 05, 05]
+224B; [0C 9E 9C, 05, 05]
-21F8; [0C 6D 98, 05, 05]
+224C; [0C 9E A3, 05, 05]
-21F9; [0C 6D 9F, 05, 05]
+224D; [0C 9E AA, 05, 05]
+226D; [0C 9E AA, 05, 05][, 9E, 05]
-21FA; [0C 6D A6, 05, 05]
+224E; [0C 9E B1, 05, 05]
-21FB; [0C 6D AD, 05, 05]
+224F; [0C 9E B8, 05, 05]
-21FC; [0C 6D B4, 05, 05]
+2250; [0C 9E BF, 05, 05]
-21FD; [0C 6D BB, 05, 05]
+2251; [0C 9E C6, 05, 05]
-21FE; [0C 6D C2, 05, 05]
+2252; [0C 9E CD, 05, 05]
-21FF; [0C 6D C9, 05, 05]
+2253; [0C 9E D4, 05, 05]
-2200; [0C 6D D0, 05, 05]
+2254; [0C 9E DB, 05, 05]
-2201; [0C 6D D7, 05, 05]
+2255; [0C 9E E2, 05, 05]
-2202; [0C 6F, 05, 05]
-1D6DB; [0C 6F, 05, 20]
-1D715; [0C 6F, 05, 20]
-1D74F; [0C 6F, 05, 20]
-1D789; [0C 6F, 05, 20]
-1D7C3; [0C 6F, 05, 20]
+2256; [0C 9E E9, 05, 05]
-2203; [0C 71 02, 05, 05]
-2204; [0C 71 02, 05, 05][, 9E, 05]
+2257; [0C 9E F0, 05, 05]
-2205; [0C 71 09, 05, 05]
+2258; [0C 9E F7, 05, 05]
-2206; [0C 71 10, 05, 05]
+2259; [0C 9E FE, 05, 05]
-2207; [0C 73, 05, 05]
-1D6C1; [0C 73, 05, 20]
-1D6FB; [0C 73, 05, 20]
-1D735; [0C 73, 05, 20]
-1D76F; [0C 73, 05, 20]
-1D7A9; [0C 73, 05, 20]
+225A; [0C 9F 07, 05, 05]
-2208; [0C 75 02, 05, 05]
-2209; [0C 75 02, 05, 05][, 9E, 05]
+225B; [0C 9F 0E, 05, 05]
-220A; [0C 75 09, 05, 05]
+225C; [0C 9F 15, 05, 05]
-220B; [0C 75 10, 05, 05]
-220C; [0C 75 10, 05, 05][, 9E, 05]
+225D; [0C 9F 1C, 05, 05]
-220D; [0C 75 17, 05, 05]
+225E; [0C 9F 23, 05, 05]
-03F6; [0C 75 1E, 05, 05]
+225F; [0C 9F 2A, 05, 05]
-220E; [0C 75 25, 05, 05]
+2261; [0C 9F 31, 05, 05]
+2262; [0C 9F 31, 05, 05][, 9E, 05]
-220F; [0C 75 2C, 05, 05]
+2263; [0C 9F 38, 05, 05]
-2210; [0C 75 33, 05, 05]
+2264; [0C 9F 3F, 05, 05]
+2270; [0C 9F 3F, 05, 05][, 9E, 05]
-2211; [0C 77, 05, 05]
-2140; [0C 77, 05, 20]
+2265; [0C 9F 46, 05, 05]
+2271; [0C 9F 46, 05, 05][, 9E, 05]
-002B; [0C 79, 05, 05]
-FF0B; [0C 79, 05, 10]
-FB29; [0C 79, 05, 18]
-FE62; [0C 79, 05, 20]
-207A; [0C 79, 05, 28]
-208A; [0C 79, 05, 30]
+2266; [0C 9F 4D, 05, 05]
-00B1; [0C 7B, 05, 05]
+2267; [0C 9F 54, 05, 05]
-00F7; [0C 7D, 05, 05]
+2268; [0C 9F 5B, 05, 05]
-00D7; [0C 7F, 05, 05]
+2269; [0C 9F 62, 05, 05]
-003C; [0C 81, 05, 05]
-FF1C; [0C 81, 05, 20]
-FE64; [0C 81, 05, 2E]
-226E; [0C 81, 05, 05][, 9E, 05]
+226A; [0C 9F 69, 05, 05]
-003D; [0C 83, 05, 05]
-FF1D; [0C 83, 05, 10]
-FE66; [0C 83, 05, 20]
-207C; [0C 83, 05, 28]
-208C; [0C 83, 05, 30]
-2260; [0C 83, 05, 05][, 9E, 05]
-2A75; [0C 83, 05, 18][0C 83, 05, 18]
-2A76; [0C 83, 05, 18][0C 83, 05, 18][0C 83, 05, 18]
+226B; [0C 9F 70, 05, 05]
-003E; [0C 85, 05, 05]
-FF1E; [0C 85, 05, 20]
-FE65; [0C 85, 05, 2E]
-226F; [0C 85, 05, 05][, 9E, 05]
+226C; [0C 9F 77, 05, 05]
-00AC; [0C 87, 05, 05]
-FFE2; [0C 87, 05, 20]
+2272; [0C 9F 7E, 05, 05]
+2274; [0C 9F 7E, 05, 05][, 9E, 05]
-007C; [0C 89, 05, 05]
-FF5C; [0C 89, 05, 20]
+2273; [0C 9F 85, 05, 05]
+2275; [0C 9F 85, 05, 05][, 9E, 05]
-00A6; [0C 8B, 05, 05]
-FFE4; [0C 8B, 05, 20]
+2276; [0C 9F 8C, 05, 05]
+2278; [0C 9F 8C, 05, 05][, 9E, 05]
-007E; [0C 8D, 05, 05]
-FF5E; [0C 8D, 05, 20]
+2277; [0C 9F 93, 05, 05]
+2279; [0C 9F 93, 05, 05][, 9E, 05]
-2212; [0C 8F, 05, 05]
-207B; [0C 8F, 05, 20]
-208B; [0C 8F, 05, 2E]
+227A; [0C 9F 9A, 05, 05]
+2280; [0C 9F 9A, 05, 05][, 9E, 05]
-2052; [0C 91 02, 05, 05]
+227B; [0C 9F A1, 05, 05]
+2281; [0C 9F A1, 05, 05][, 9E, 05]
-2213; [0C 91 09, 05, 05]
+227C; [0C 9F A8, 05, 05]
+22E0; [0C 9F A8, 05, 05][, 9E, 05]
-2214; [0C 91 10, 05, 05]
+227D; [0C 9F AF, 05, 05]
+22E1; [0C 9F AF, 05, 05][, 9E, 05]
-2215; [0C 93, 05, 05]
+227E; [0C 9F B6, 05, 05]
-2044; [0C 95, 05, 05]
+227F; [0C 9F BD, 05, 05]
-2216; [0C 97 02, 05, 05]
+2282; [0C 9F C4, 05, 05]
+2284; [0C 9F C4, 05, 05][, 9E, 05]
-2217; [0C 97 09, 05, 05]
+2283; [0C 9F CB, 05, 05]
+2285; [0C 9F CB, 05, 05][, 9E, 05]
-2218; [0C 97 10, 05, 05]
+2286; [0C 9F D2, 05, 05]
+2288; [0C 9F D2, 05, 05][, 9E, 05]
-2219; [0C 97 17, 05, 05]
+2287; [0C 9F D9, 05, 05]
+2289; [0C 9F D9, 05, 05][, 9E, 05]
-221A; [0C 97 1E, 05, 05]
+228A; [0C 9F E0, 05, 05]
-221B; [0C 97 25, 05, 05]
+228B; [0C 9F E7, 05, 05]
-0606; [0C 97 2C, 05, 05]
+228C; [0C 9F EE, 05, 05]
-221C; [0C 97 33, 05, 05]
+228D; [0C 9F F5, 05, 05]
-0607; [0C 97 3A, 05, 05]
+228E; [0C 9F FC, 05, 05]
-221D; [0C 97 41, 05, 05]
+228F; [0C A0 05, 05, 05]
-221E; [0C 97 48, 05, 05]
+2290; [0C A0 0C, 05, 05]
-221F; [0C 97 4F, 05, 05]
+2291; [0C A0 13, 05, 05]
+22E2; [0C A0 13, 05, 05][, 9E, 05]
-2220; [0C 97 56, 05, 05]
+2292; [0C A0 1A, 05, 05]
+22E3; [0C A0 1A, 05, 05][, 9E, 05]
-2221; [0C 97 5D, 05, 05]
+2293; [0C A0 21, 05, 05]
-2222; [0C 97 64, 05, 05]
+2294; [0C A0 28, 05, 05]
-2223; [0C 97 6B, 05, 05]
-2224; [0C 97 6B, 05, 05][, 9E, 05]
+2295; [0C A0 2F, 05, 05]
-2225; [0C 97 72, 05, 05]
-2226; [0C 97 72, 05, 05][, 9E, 05]
+2296; [0C A0 36, 05, 05]
-2227; [0C 97 79, 05, 05]
+2297; [0C A0 3D, 05, 05]
-2228; [0C 97 80, 05, 05]
+2298; [0C A0 44, 05, 05]
-2229; [0C 97 87, 05, 05]
+2299; [0C A0 4B, 05, 05]
-222A; [0C 97 8E, 05, 05]
+229A; [0C A0 52, 05, 05]
-222B; [0C 99, 05, 05]
-222C; [0C 99, 05, 20][0C 99, 05, 20]
-222D; [0C 99, 05, 20][0C 99, 05, 20][0C 99, 05, 20]
-2A0C; [0C 99, 05, 20][0C 99, 05, 20][0C 99, 05, 20][0C 99, 05, 20]
+229B; [0C A0 59, 05, 05]
-222E; [0C 9B, 05, 05]
-222F; [0C 9B, 05, 20][0C 9B, 05, 20]
-2230; [0C 9B, 05, 20][0C 9B, 05, 20][0C 9B, 05, 20]
+229C; [0C A0 60, 05, 05]
-2231; [0C 9D 02, 05, 05]
+229D; [0C A0 67, 05, 05]
-2232; [0C 9D 09, 05, 05]
+229E; [0C A0 6E, 05, 05]
-2233; [0C 9D 10, 05, 05]
+229F; [0C A0 75, 05, 05]
-2234; [0C 9D 17, 05, 05]
+22A0; [0C A0 7C, 05, 05]
-2235; [0C 9D 1E, 05, 05]
+22A1; [0C A0 83, 05, 05]
-2236; [0C 9D 25, 05, 05]
+22A2; [0C A0 8A, 05, 05]
+22AC; [0C A0 8A, 05, 05][, 9E, 05]
-2237; [0C 9D 2C, 05, 05]
+22A3; [0C A0 91, 05, 05]
-2238; [0C 9D 33, 05, 05]
+22A4; [0C A0 98, 05, 05]
-2239; [0C 9D 3A, 05, 05]
+22A5; [0C A0 9F, 05, 05]
-223A; [0C 9D 41, 05, 05]
+22A6; [0C A0 A6, 05, 05]
-223B; [0C 9D 48, 05, 05]
+22A7; [0C A0 AD, 05, 05]
-223C; [0C 9D 4F, 05, 05]
-2241; [0C 9D 4F, 05, 05][, 9E, 05]
+22A8; [0C A0 B4, 05, 05]
+22AD; [0C A0 B4, 05, 05][, 9E, 05]
-223D; [0C 9D 56, 05, 05]
+22A9; [0C A0 BB, 05, 05]
+22AE; [0C A0 BB, 05, 05][, 9E, 05]
-223E; [0C 9D 5D, 05, 05]
+22AA; [0C A0 C2, 05, 05]
-223F; [0C 9D 64, 05, 05]
+22AB; [0C A0 C9, 05, 05]
+22AF; [0C A0 C9, 05, 05][, 9E, 05]
-2240; [0C 9D 6B, 05, 05]
+22B0; [0C A0 D0, 05, 05]
-2242; [0C 9D 72, 05, 05]
+22B1; [0C A0 D7, 05, 05]
-2243; [0C 9D 79, 05, 05]
-2244; [0C 9D 79, 05, 05][, 9E, 05]
+22B2; [0C A0 DE, 05, 05]
+22EA; [0C A0 DE, 05, 05][, 9E, 05]
-2245; [0C 9D 80, 05, 05]
-2247; [0C 9D 80, 05, 05][, 9E, 05]
+22B3; [0C A0 E5, 05, 05]
+22EB; [0C A0 E5, 05, 05][, 9E, 05]
-2246; [0C 9D 87, 05, 05]
+22B4; [0C A0 EC, 05, 05]
+22EC; [0C A0 EC, 05, 05][, 9E, 05]
-2248; [0C 9D 8E, 05, 05]
-2249; [0C 9D 8E, 05, 05][, 9E, 05]
+22B5; [0C A0 F3, 05, 05]
+22ED; [0C A0 F3, 05, 05][, 9E, 05]
-224A; [0C 9D 95, 05, 05]
+22B6; [0C A0 FA, 05, 05]
-224B; [0C 9D 9C, 05, 05]
+22B7; [0C A1 03, 05, 05]
-224C; [0C 9D A3, 05, 05]
+22B8; [0C A1 0A, 05, 05]
-224D; [0C 9D AA, 05, 05]
-226D; [0C 9D AA, 05, 05][, 9E, 05]
+22B9; [0C A1 11, 05, 05]
-224E; [0C 9D B1, 05, 05]
+22BA; [0C A1 18, 05, 05]
-224F; [0C 9D B8, 05, 05]
+22BB; [0C A1 1F, 05, 05]
-2250; [0C 9D BF, 05, 05]
+22BC; [0C A1 26, 05, 05]
-2251; [0C 9D C6, 05, 05]
+214B; [0C A1 2D, 05, 05]
-2252; [0C 9D CD, 05, 05]
+22BD; [0C A1 34, 05, 05]
-2253; [0C 9D D4, 05, 05]
+22BE; [0C A1 3B, 05, 05]
-2254; [0C 9D DB, 05, 05]
+22BF; [0C A1 42, 05, 05]
-2255; [0C 9D E2, 05, 05]
+22C0; [0C A1 49, 05, 05]
-2256; [0C 9D E9, 05, 05]
+22C1; [0C A1 50, 05, 05]
-2257; [0C 9D F0, 05, 05]
+22C2; [0C A1 57, 05, 05]
-2258; [0C 9D F7, 05, 05]
+22C3; [0C A1 5E, 05, 05]
-2259; [0C 9D FE, 05, 05]
+22C4; [0C A1 65, 05, 05]
-225A; [0C 9E 07, 05, 05]
+22C5; [0C A1 6C, 05, 05]
-225B; [0C 9E 0E, 05, 05]
+22C6; [0C A1 73, 05, 05]
-225C; [0C 9E 15, 05, 05]
+22C7; [0C A1 7A, 05, 05]
-225D; [0C 9E 1C, 05, 05]
+22C8; [0C A1 81, 05, 05]
-225E; [0C 9E 23, 05, 05]
+22C9; [0C A1 88, 05, 05]
-225F; [0C 9E 2A, 05, 05]
+22CA; [0C A1 8F, 05, 05]
-2261; [0C 9E 31, 05, 05]
-2262; [0C 9E 31, 05, 05][, 9E, 05]
+22CB; [0C A1 96, 05, 05]
-2263; [0C 9E 38, 05, 05]
+22CC; [0C A1 9D, 05, 05]
-2264; [0C 9E 3F, 05, 05]
-2270; [0C 9E 3F, 05, 05][, 9E, 05]
+22CD; [0C A1 A4, 05, 05]
-2265; [0C 9E 46, 05, 05]
-2271; [0C 9E 46, 05, 05][, 9E, 05]
+22CE; [0C A1 AB, 05, 05]
-2266; [0C 9E 4D, 05, 05]
+22CF; [0C A1 B2, 05, 05]
-2267; [0C 9E 54, 05, 05]
+22D0; [0C A1 B9, 05, 05]
-2268; [0C 9E 5B, 05, 05]
+22D1; [0C A1 C0, 05, 05]
-2269; [0C 9E 62, 05, 05]
+22D2; [0C A1 C7, 05, 05]
-226A; [0C 9E 69, 05, 05]
+22D3; [0C A1 CE, 05, 05]
-226B; [0C 9E 70, 05, 05]
+22D4; [0C A1 D5, 05, 05]
-226C; [0C 9E 77, 05, 05]
+22D5; [0C A1 DC, 05, 05]
-2272; [0C 9E 7E, 05, 05]
-2274; [0C 9E 7E, 05, 05][, 9E, 05]
+22D6; [0C A1 E3, 05, 05]
-2273; [0C 9E 85, 05, 05]
-2275; [0C 9E 85, 05, 05][, 9E, 05]
+22D7; [0C A1 EA, 05, 05]
-2276; [0C 9E 8C, 05, 05]
-2278; [0C 9E 8C, 05, 05][, 9E, 05]
+22D8; [0C A1 F1, 05, 05]
-2277; [0C 9E 93, 05, 05]
-2279; [0C 9E 93, 05, 05][, 9E, 05]
+22D9; [0C A1 F8, 05, 05]
-227A; [0C 9E 9A, 05, 05]
-2280; [0C 9E 9A, 05, 05][, 9E, 05]
+22DA; [0C A1 FF, 05, 05]
-227B; [0C 9E A1, 05, 05]
-2281; [0C 9E A1, 05, 05][, 9E, 05]
+22DB; [0C A2 08, 05, 05]
-227C; [0C 9E A8, 05, 05]
-22E0; [0C 9E A8, 05, 05][, 9E, 05]
+22DC; [0C A2 0F, 05, 05]
-227D; [0C 9E AF, 05, 05]
-22E1; [0C 9E AF, 05, 05][, 9E, 05]
+22DD; [0C A2 16, 05, 05]
-227E; [0C 9E B6, 05, 05]
+22DE; [0C A2 1D, 05, 05]
-227F; [0C 9E BD, 05, 05]
+22DF; [0C A2 24, 05, 05]
-2282; [0C 9E C4, 05, 05]
-2284; [0C 9E C4, 05, 05][, 9E, 05]
+22E4; [0C A2 2B, 05, 05]
-2283; [0C 9E CB, 05, 05]
-2285; [0C 9E CB, 05, 05][, 9E, 05]
+22E5; [0C A2 32, 05, 05]
-2286; [0C 9E D2, 05, 05]
-2288; [0C 9E D2, 05, 05][, 9E, 05]
+22E6; [0C A2 39, 05, 05]
-2287; [0C 9E D9, 05, 05]
-2289; [0C 9E D9, 05, 05][, 9E, 05]
+22E7; [0C A2 40, 05, 05]
-228A; [0C 9E E0, 05, 05]
+22E8; [0C A2 47, 05, 05]
-228B; [0C 9E E7, 05, 05]
+22E9; [0C A2 4E, 05, 05]
-228C; [0C 9E EE, 05, 05]
+22EE; [0C A2 55, 05, 05]
-228D; [0C 9E F5, 05, 05]
+22EF; [0C A2 5C, 05, 05]
-228E; [0C 9E FC, 05, 05]
+22F0; [0C A2 63, 05, 05]
-228F; [0C 9F 05, 05, 05]
+22F1; [0C A2 6A, 05, 05]
-2290; [0C 9F 0C, 05, 05]
+22F2; [0C A2 71, 05, 05]
-2291; [0C 9F 13, 05, 05]
-22E2; [0C 9F 13, 05, 05][, 9E, 05]
+22F3; [0C A2 78, 05, 05]
-2292; [0C 9F 1A, 05, 05]
-22E3; [0C 9F 1A, 05, 05][, 9E, 05]
+22F4; [0C A2 7F, 05, 05]
-2293; [0C 9F 21, 05, 05]
+22F5; [0C A2 86, 05, 05]
-2294; [0C 9F 28, 05, 05]
+22F6; [0C A2 8D, 05, 05]
-2295; [0C 9F 2F, 05, 05]
+22F7; [0C A2 94, 05, 05]
-2296; [0C 9F 36, 05, 05]
+22F8; [0C A2 9B, 05, 05]
-2297; [0C 9F 3D, 05, 05]
+22F9; [0C A2 A2, 05, 05]
-2298; [0C 9F 44, 05, 05]
+22FA; [0C A2 A9, 05, 05]
-2299; [0C 9F 4B, 05, 05]
+22FB; [0C A2 B0, 05, 05]
-229A; [0C 9F 52, 05, 05]
+22FC; [0C A2 B7, 05, 05]
-229B; [0C 9F 59, 05, 05]
+22FD; [0C A2 BE, 05, 05]
-229C; [0C 9F 60, 05, 05]
+22FE; [0C A2 C5, 05, 05]
-229D; [0C 9F 67, 05, 05]
+22FF; [0C A2 CC, 05, 05]
-229E; [0C 9F 6E, 05, 05]
+2300; [0C A2 D3, 05, 05]
-229F; [0C 9F 75, 05, 05]
+2301; [0C A2 DA, 05, 05]
-22A0; [0C 9F 7C, 05, 05]
+2302; [0C A2 E1, 05, 05]
-22A1; [0C 9F 83, 05, 05]
+2303; [0C A2 E8, 05, 05]
-22A2; [0C 9F 8A, 05, 05]
-22AC; [0C 9F 8A, 05, 05][, 9E, 05]
+2304; [0C A2 EF, 05, 05]
-22A3; [0C 9F 91, 05, 05]
+2305; [0C A2 F6, 05, 05]
-22A4; [0C 9F 98, 05, 05]
+2306; [0C A2 FD, 05, 05]
-22A5; [0C 9F 9F, 05, 05]
+2307; [0C A3 06, 05, 05]
-22A6; [0C 9F A6, 05, 05]
+230C; [0C A3 0D, 05, 05]
-22A7; [0C 9F AD, 05, 05]
+230D; [0C A3 14, 05, 05]
-22A8; [0C 9F B4, 05, 05]
-22AD; [0C 9F B4, 05, 05][, 9E, 05]
+230E; [0C A3 1B, 05, 05]
-22A9; [0C 9F BB, 05, 05]
-22AE; [0C 9F BB, 05, 05][, 9E, 05]
+230F; [0C A3 22, 05, 05]
-22AA; [0C 9F C2, 05, 05]
+2310; [0C A3 29, 05, 05]
-22AB; [0C 9F C9, 05, 05]
-22AF; [0C 9F C9, 05, 05][, 9E, 05]
+2311; [0C A3 30, 05, 05]
-22B0; [0C 9F D0, 05, 05]
+2312; [0C A3 37, 05, 05]
-22B1; [0C 9F D7, 05, 05]
+2313; [0C A3 3E, 05, 05]
-22B2; [0C 9F DE, 05, 05]
-22EA; [0C 9F DE, 05, 05][, 9E, 05]
+2314; [0C A3 45, 05, 05]
-22B3; [0C 9F E5, 05, 05]
-22EB; [0C 9F E5, 05, 05][, 9E, 05]
+2315; [0C A3 4C, 05, 05]
-22B4; [0C 9F EC, 05, 05]
-22EC; [0C 9F EC, 05, 05][, 9E, 05]
+2316; [0C A3 53, 05, 05]
-22B5; [0C 9F F3, 05, 05]
-22ED; [0C 9F F3, 05, 05][, 9E, 05]
+2317; [0C A3 5A, 05, 05]
-22B6; [0C 9F FA, 05, 05]
+2318; [0C A3 61, 05, 05]
-22B7; [0C A0 03, 05, 05]
+2319; [0C A3 68, 05, 05]
-22B8; [0C A0 0A, 05, 05]
+231A; [0C A3 6F, 05, 05]
-22B9; [0C A0 11, 05, 05]
+231B; [0C A3 76, 05, 05]
-22BA; [0C A0 18, 05, 05]
+231C; [0C A3 7D, 05, 05]
-22BB; [0C A0 1F, 05, 05]
+231D; [0C A3 84, 05, 05]
-22BC; [0C A0 26, 05, 05]
+231E; [0C A3 8B, 05, 05]
-214B; [0C A0 2D, 05, 05]
+231F; [0C A3 92, 05, 05]
-22BD; [0C A0 34, 05, 05]
+2320; [0C A3 99, 05, 05]
-22BE; [0C A0 3B, 05, 05]
+2321; [0C A3 A0, 05, 05]
-22BF; [0C A0 42, 05, 05]
+2322; [0C A3 A7, 05, 05]
-22C0; [0C A0 49, 05, 05]
+2323; [0C A3 AE, 05, 05]
-22C1; [0C A0 50, 05, 05]
+2324; [0C A3 B5, 05, 05]
-22C2; [0C A0 57, 05, 05]
+2325; [0C A3 BC, 05, 05]
-22C3; [0C A0 5E, 05, 05]
+2326; [0C A3 C3, 05, 05]
-22C4; [0C A0 65, 05, 05]
+2327; [0C A3 CA, 05, 05]
-22C5; [0C A0 6C, 05, 05]
+2328; [0C A3 D1, 05, 05]
-22C6; [0C A0 73, 05, 05]
+232B; [0C A3 D8, 05, 05]
-22C7; [0C A0 7A, 05, 05]
+232C; [0C A3 DF, 05, 05]
-22C8; [0C A0 81, 05, 05]
+232D; [0C A3 E6, 05, 05]
-22C9; [0C A0 88, 05, 05]
+232E; [0C A3 ED, 05, 05]
-22CA; [0C A0 8F, 05, 05]
+232F; [0C A3 F4, 05, 05]
-22CB; [0C A0 96, 05, 05]
+2330; [0C A3 FB, 05, 05]
-22CC; [0C A0 9D, 05, 05]
+2331; [0C A4 04, 05, 05]
-22CD; [0C A0 A4, 05, 05]
+2332; [0C A4 0B, 05, 05]
-22CE; [0C A0 AB, 05, 05]
+2333; [0C A4 12, 05, 05]
-22CF; [0C A0 B2, 05, 05]
+2334; [0C A4 19, 05, 05]
-22D0; [0C A0 B9, 05, 05]
+2335; [0C A4 20, 05, 05]
-22D1; [0C A0 C0, 05, 05]
+2336; [0C A4 27, 05, 05]
-22D2; [0C A0 C7, 05, 05]
+2337; [0C A4 2E, 05, 05]
-22D3; [0C A0 CE, 05, 05]
+2338; [0C A4 35, 05, 05]
-22D4; [0C A0 D5, 05, 05]
+2339; [0C A4 3C, 05, 05]
-22D5; [0C A0 DC, 05, 05]
+233A; [0C A4 43, 05, 05]
-22D6; [0C A0 E3, 05, 05]
+233B; [0C A4 4A, 05, 05]
-22D7; [0C A0 EA, 05, 05]
+233C; [0C A4 51, 05, 05]
-22D8; [0C A0 F1, 05, 05]
+233D; [0C A4 58, 05, 05]
-22D9; [0C A0 F8, 05, 05]
+233E; [0C A4 5F, 05, 05]
-22DA; [0C A0 FF, 05, 05]
+233F; [0C A4 66, 05, 05]
-22DB; [0C A1 08, 05, 05]
+2340; [0C A4 6D, 05, 05]
-22DC; [0C A1 0F, 05, 05]
+2341; [0C A4 74, 05, 05]
-22DD; [0C A1 16, 05, 05]
+2342; [0C A4 7B, 05, 05]
-22DE; [0C A1 1D, 05, 05]
+2343; [0C A4 82, 05, 05]
-22DF; [0C A1 24, 05, 05]
+2344; [0C A4 89, 05, 05]
-22E4; [0C A1 2B, 05, 05]
+2345; [0C A4 90, 05, 05]
-22E5; [0C A1 32, 05, 05]
+2346; [0C A4 97, 05, 05]
-22E6; [0C A1 39, 05, 05]
+2347; [0C A4 9E, 05, 05]
-22E7; [0C A1 40, 05, 05]
+2348; [0C A4 A5, 05, 05]
-22E8; [0C A1 47, 05, 05]
+2349; [0C A4 AC, 05, 05]
-22E9; [0C A1 4E, 05, 05]
+234A; [0C A4 B3, 05, 05]
-22EE; [0C A1 55, 05, 05]
+234B; [0C A4 BA, 05, 05]
-22EF; [0C A1 5C, 05, 05]
+234C; [0C A4 C1, 05, 05]
-22F0; [0C A1 63, 05, 05]
+234D; [0C A4 C8, 05, 05]
-22F1; [0C A1 6A, 05, 05]
+234E; [0C A4 CF, 05, 05]
-22F2; [0C A1 71, 05, 05]
+234F; [0C A4 D6, 05, 05]
-22F3; [0C A1 78, 05, 05]
+2350; [0C A4 DD, 05, 05]
-22F4; [0C A1 7F, 05, 05]
+2351; [0C A4 E4, 05, 05]
-22F5; [0C A1 86, 05, 05]
+2352; [0C A4 EB, 05, 05]
-22F6; [0C A1 8D, 05, 05]
+2353; [0C A4 F2, 05, 05]
-22F7; [0C A1 94, 05, 05]
+2354; [0C A4 F9, 05, 05]
-22F8; [0C A1 9B, 05, 05]
+2355; [0C A5 02, 05, 05]
-22F9; [0C A1 A2, 05, 05]
+2356; [0C A5 09, 05, 05]
-22FA; [0C A1 A9, 05, 05]
+2357; [0C A5 10, 05, 05]
-22FB; [0C A1 B0, 05, 05]
+2358; [0C A5 17, 05, 05]
-22FC; [0C A1 B7, 05, 05]
+2359; [0C A5 1E, 05, 05]
-22FD; [0C A1 BE, 05, 05]
+235A; [0C A5 25, 05, 05]
-22FE; [0C A1 C5, 05, 05]
+235B; [0C A5 2C, 05, 05]
-22FF; [0C A1 CC, 05, 05]
+235C; [0C A5 33, 05, 05]
-2300; [0C A1 D3, 05, 05]
+235D; [0C A5 3A, 05, 05]
-2301; [0C A1 DA, 05, 05]
+235E; [0C A5 41, 05, 05]
-2302; [0C A1 E1, 05, 05]
+235F; [0C A5 48, 05, 05]
-2303; [0C A1 E8, 05, 05]
+2360; [0C A5 4F, 05, 05]
-2304; [0C A1 EF, 05, 05]
+2361; [0C A5 56, 05, 05]
-2305; [0C A1 F6, 05, 05]
+2362; [0C A5 5D, 05, 05]
-2306; [0C A1 FD, 05, 05]
+2363; [0C A5 64, 05, 05]
-2307; [0C A2 06, 05, 05]
+2364; [0C A5 6B, 05, 05]
-230C; [0C A2 0D, 05, 05]
+2365; [0C A5 72, 05, 05]
-230D; [0C A2 14, 05, 05]
+2366; [0C A5 79, 05, 05]
-230E; [0C A2 1B, 05, 05]
+2367; [0C A5 80, 05, 05]
-230F; [0C A2 22, 05, 05]
+2368; [0C A5 87, 05, 05]
-2310; [0C A2 29, 05, 05]
+2369; [0C A5 8E, 05, 05]
-2311; [0C A2 30, 05, 05]
+236A; [0C A5 95, 05, 05]
-2312; [0C A2 37, 05, 05]
+236B; [0C A5 9C, 05, 05]
-2313; [0C A2 3E, 05, 05]
+236C; [0C A5 A3, 05, 05]
-2314; [0C A2 45, 05, 05]
+236D; [0C A5 AA, 05, 05]
-2315; [0C A2 4C, 05, 05]
+236E; [0C A5 B1, 05, 05]
-2316; [0C A2 53, 05, 05]
+236F; [0C A5 B8, 05, 05]
-2317; [0C A2 5A, 05, 05]
+2370; [0C A5 BF, 05, 05]
-2318; [0C A2 61, 05, 05]
+2371; [0C A5 C6, 05, 05]
-2319; [0C A2 68, 05, 05]
+2372; [0C A5 CD, 05, 05]
-231A; [0C A2 6F, 05, 05]
+2373; [0C A5 D4, 05, 05]
-231B; [0C A2 76, 05, 05]
+2374; [0C A5 DB, 05, 05]
-231C; [0C A2 7D, 05, 05]
+2375; [0C A5 E2, 05, 05]
-231D; [0C A2 84, 05, 05]
+2376; [0C A5 E9, 05, 05]
-231E; [0C A2 8B, 05, 05]
+2377; [0C A5 F0, 05, 05]
-231F; [0C A2 92, 05, 05]
+2378; [0C A5 F7, 05, 05]
-2320; [0C A2 99, 05, 05]
+2379; [0C A5 FE, 05, 05]
-2321; [0C A2 A0, 05, 05]
+237A; [0C A6 07, 05, 05]
-2322; [0C A2 A7, 05, 05]
+237B; [0C A6 0E, 05, 05]
-2323; [0C A2 AE, 05, 05]
+237C; [0C A6 15, 05, 05]
-2324; [0C A2 B5, 05, 05]
+237D; [0C A6 1C, 05, 05]
-2325; [0C A2 BC, 05, 05]
+237E; [0C A6 23, 05, 05]
-2326; [0C A2 C3, 05, 05]
+237F; [0C A6 2A, 05, 05]
-2327; [0C A2 CA, 05, 05]
+2380; [0C A6 31, 05, 05]
-2328; [0C A2 D1, 05, 05]
+2381; [0C A6 38, 05, 05]
-232B; [0C A2 D8, 05, 05]
+2382; [0C A6 3F, 05, 05]
-232C; [0C A2 DF, 05, 05]
+2383; [0C A6 46, 05, 05]
-232D; [0C A2 E6, 05, 05]
+2384; [0C A6 4D, 05, 05]
-232E; [0C A2 ED, 05, 05]
+2385; [0C A6 54, 05, 05]
-232F; [0C A2 F4, 05, 05]
+2386; [0C A6 5B, 05, 05]
-2330; [0C A2 FB, 05, 05]
+2387; [0C A6 62, 05, 05]
-2331; [0C A3 04, 05, 05]
+2388; [0C A6 69, 05, 05]
-2332; [0C A3 0B, 05, 05]
+2389; [0C A6 70, 05, 05]
-2333; [0C A3 12, 05, 05]
+238A; [0C A6 77, 05, 05]
-2334; [0C A3 19, 05, 05]
+238B; [0C A6 7E, 05, 05]
-2335; [0C A3 20, 05, 05]
+238C; [0C A6 85, 05, 05]
-2336; [0C A3 27, 05, 05]
+238D; [0C A6 8C, 05, 05]
-2337; [0C A3 2E, 05, 05]
+238E; [0C A6 93, 05, 05]
-2338; [0C A3 35, 05, 05]
+238F; [0C A6 9A, 05, 05]
-2339; [0C A3 3C, 05, 05]
+2390; [0C A6 A1, 05, 05]
-233A; [0C A3 43, 05, 05]
+2391; [0C A6 A8, 05, 05]
-233B; [0C A3 4A, 05, 05]
+2392; [0C A6 AF, 05, 05]
-233C; [0C A3 51, 05, 05]
+2393; [0C A6 B6, 05, 05]
-233D; [0C A3 58, 05, 05]
+2394; [0C A6 BD, 05, 05]
-233E; [0C A3 5F, 05, 05]
+2395; [0C A6 C4, 05, 05]
-233F; [0C A3 66, 05, 05]
+2396; [0C A6 CB, 05, 05]
-2340; [0C A3 6D, 05, 05]
+2397; [0C A6 D2, 05, 05]
-2341; [0C A3 74, 05, 05]
+2398; [0C A6 D9, 05, 05]
-2342; [0C A3 7B, 05, 05]
+2399; [0C A6 E0, 05, 05]
-2343; [0C A3 82, 05, 05]
+239A; [0C A6 E7, 05, 05]
-2344; [0C A3 89, 05, 05]
+239B; [0C A6 EE, 05, 05]
-2345; [0C A3 90, 05, 05]
+239C; [0C A6 F5, 05, 05]
-2346; [0C A3 97, 05, 05]
+239D; [0C A6 FC, 05, 05]
-2347; [0C A3 9E, 05, 05]
+239E; [0C A7 05, 05, 05]
-2348; [0C A3 A5, 05, 05]
+239F; [0C A7 0C, 05, 05]
-2349; [0C A3 AC, 05, 05]
+23A0; [0C A7 13, 05, 05]
-234A; [0C A3 B3, 05, 05]
+23A1; [0C A7 1A, 05, 05]
-234B; [0C A3 BA, 05, 05]
+23A2; [0C A7 21, 05, 05]
-234C; [0C A3 C1, 05, 05]
+23A3; [0C A7 28, 05, 05]
-234D; [0C A3 C8, 05, 05]
+23A4; [0C A7 2F, 05, 05]
-234E; [0C A3 CF, 05, 05]
+23A5; [0C A7 36, 05, 05]
-234F; [0C A3 D6, 05, 05]
+23A6; [0C A7 3D, 05, 05]
-2350; [0C A3 DD, 05, 05]
+23A7; [0C A7 44, 05, 05]
-2351; [0C A3 E4, 05, 05]
+23A8; [0C A7 4B, 05, 05]
-2352; [0C A3 EB, 05, 05]
+23A9; [0C A7 52, 05, 05]
-2353; [0C A3 F2, 05, 05]
+23AA; [0C A7 59, 05, 05]
-2354; [0C A3 F9, 05, 05]
+23AB; [0C A7 60, 05, 05]
-2355; [0C A4 02, 05, 05]
+23AC; [0C A7 67, 05, 05]
-2356; [0C A4 09, 05, 05]
+23AD; [0C A7 6E, 05, 05]
-2357; [0C A4 10, 05, 05]
+23AE; [0C A7 75, 05, 05]
-2358; [0C A4 17, 05, 05]
+23AF; [0C A7 7C, 05, 05]
-2359; [0C A4 1E, 05, 05]
+23B0; [0C A7 83, 05, 05]
-235A; [0C A4 25, 05, 05]
+23B1; [0C A7 8A, 05, 05]
-235B; [0C A4 2C, 05, 05]
+23B2; [0C A7 91, 05, 05]
-235C; [0C A4 33, 05, 05]
+23B3; [0C A7 98, 05, 05]
-235D; [0C A4 3A, 05, 05]
+23B4; [0C A7 9F, 05, 05]
-235E; [0C A4 41, 05, 05]
+23B5; [0C A7 A6, 05, 05]
-235F; [0C A4 48, 05, 05]
+23B6; [0C A7 AD, 05, 05]
-2360; [0C A4 4F, 05, 05]
+23B7; [0C A7 B4, 05, 05]
-2361; [0C A4 56, 05, 05]
+23B8; [0C A7 BB, 05, 05]
-2362; [0C A4 5D, 05, 05]
+23B9; [0C A7 C2, 05, 05]
-2363; [0C A4 64, 05, 05]
+23BA; [0C A7 C9, 05, 05]
-2364; [0C A4 6B, 05, 05]
+23BB; [0C A7 D0, 05, 05]
-2365; [0C A4 72, 05, 05]
+23BC; [0C A7 D7, 05, 05]
-2366; [0C A4 79, 05, 05]
+23BD; [0C A7 DE, 05, 05]
-2367; [0C A4 80, 05, 05]
+23BE; [0C A7 E5, 05, 05]
-2368; [0C A4 87, 05, 05]
+23BF; [0C A7 EC, 05, 05]
-2369; [0C A4 8E, 05, 05]
+23C0; [0C A7 F3, 05, 05]
-236A; [0C A4 95, 05, 05]
+23C1; [0C A7 FA, 05, 05]
-236B; [0C A4 9C, 05, 05]
+23C2; [0C A8 03, 05, 05]
-236C; [0C A4 A3, 05, 05]
+23C3; [0C A8 0A, 05, 05]
-236D; [0C A4 AA, 05, 05]
+23C4; [0C A8 11, 05, 05]
-236E; [0C A4 B1, 05, 05]
+23C5; [0C A8 18, 05, 05]
-236F; [0C A4 B8, 05, 05]
+23C6; [0C A8 1F, 05, 05]
-2370; [0C A4 BF, 05, 05]
+23C7; [0C A8 26, 05, 05]
-2371; [0C A4 C6, 05, 05]
+23C8; [0C A8 2D, 05, 05]
-2372; [0C A4 CD, 05, 05]
+23C9; [0C A8 34, 05, 05]
-2373; [0C A4 D4, 05, 05]
+23CA; [0C A8 3B, 05, 05]
-2374; [0C A4 DB, 05, 05]
+23CB; [0C A8 42, 05, 05]
-2375; [0C A4 E2, 05, 05]
+23CC; [0C A8 49, 05, 05]
-2376; [0C A4 E9, 05, 05]
+23CD; [0C A8 50, 05, 05]
-2377; [0C A4 F0, 05, 05]
+23CE; [0C A8 57, 05, 05]
-2378; [0C A4 F7, 05, 05]
+23CF; [0C A8 5E, 05, 05]
-2379; [0C A4 FE, 05, 05]
+23D0; [0C A8 65, 05, 05]
-237A; [0C A5 07, 05, 05]
+23D1; [0C A8 6C, 05, 05]
-237B; [0C A5 0E, 05, 05]
+23D2; [0C A8 73, 05, 05]
-237C; [0C A5 15, 05, 05]
+23D3; [0C A8 7A, 05, 05]
-237D; [0C A5 1C, 05, 05]
+23D4; [0C A8 81, 05, 05]
-237E; [0C A5 23, 05, 05]
+23D5; [0C A8 88, 05, 05]
-237F; [0C A5 2A, 05, 05]
+23D6; [0C A8 8F, 05, 05]
-2380; [0C A5 31, 05, 05]
+23D7; [0C A8 96, 05, 05]
-2381; [0C A5 38, 05, 05]
+23D8; [0C A8 9D, 05, 05]
-2382; [0C A5 3F, 05, 05]
+23D9; [0C A8 A4, 05, 05]
-2383; [0C A5 46, 05, 05]
+23DA; [0C A8 AB, 05, 05]
-2384; [0C A5 4D, 05, 05]
+23DB; [0C A8 B2, 05, 05]
-2385; [0C A5 54, 05, 05]
+23DC; [0C A8 B9, 05, 05]
-2386; [0C A5 5B, 05, 05]
+23DD; [0C A8 C0, 05, 05]
-2387; [0C A5 62, 05, 05]
+23DE; [0C A8 C7, 05, 05]
-2388; [0C A5 69, 05, 05]
+23DF; [0C A8 CE, 05, 05]
-2389; [0C A5 70, 05, 05]
+23E0; [0C A8 D5, 05, 05]
-238A; [0C A5 77, 05, 05]
+23E1; [0C A8 DC, 05, 05]
-238B; [0C A5 7E, 05, 05]
+23E2; [0C A8 E3, 05, 05]
-238C; [0C A5 85, 05, 05]
+23E3; [0C A8 EA, 05, 05]
-238D; [0C A5 8C, 05, 05]
+23E4; [0C A8 F1, 05, 05]
-238E; [0C A5 93, 05, 05]
+23E5; [0C A8 F8, 05, 05]
-238F; [0C A5 9A, 05, 05]
+23E6; [0C A8 FF, 05, 05]
-2390; [0C A5 A1, 05, 05]
+23E7; [0C A9 08, 05, 05]
-2391; [0C A5 A8, 05, 05]
+23E8; [0C A9 0F, 05, 05]
-2392; [0C A5 AF, 05, 05]
+23E9; [0C A9 16, 05, 05]
-2393; [0C A5 B6, 05, 05]
+23EA; [0C A9 1D, 05, 05]
-2394; [0C A5 BD, 05, 05]
+23EB; [0C A9 24, 05, 05]
-2395; [0C A5 C4, 05, 05]
+23EC; [0C A9 2B, 05, 05]
-2396; [0C A5 CB, 05, 05]
+23ED; [0C A9 32, 05, 05]
-2397; [0C A5 D2, 05, 05]
+23EE; [0C A9 39, 05, 05]
-2398; [0C A5 D9, 05, 05]
+23EF; [0C A9 40, 05, 05]
-2399; [0C A5 E0, 05, 05]
+23F0; [0C A9 47, 05, 05]
-239A; [0C A5 E7, 05, 05]
+23F1; [0C A9 4E, 05, 05]
-239B; [0C A5 EE, 05, 05]
+23F2; [0C A9 55, 05, 05]
-239C; [0C A5 F5, 05, 05]
+23F3; [0C A9 5C, 05, 05]
-239D; [0C A5 FC, 05, 05]
+23F4; [0C A9 63, 05, 05]
-239E; [0C A6 05, 05, 05]
+23F5; [0C A9 6A, 05, 05]
-239F; [0C A6 0C, 05, 05]
+23F6; [0C A9 71, 05, 05]
-23A0; [0C A6 13, 05, 05]
+23F7; [0C A9 78, 05, 05]
-23A1; [0C A6 1A, 05, 05]
+23F8; [0C A9 7F, 05, 05]
-23A2; [0C A6 21, 05, 05]
+23F9; [0C A9 86, 05, 05]
-23A3; [0C A6 28, 05, 05]
+23FA; [0C A9 8D, 05, 05]
-23A4; [0C A6 2F, 05, 05]
+23FB; [0C A9 94, 05, 05]
-23A5; [0C A6 36, 05, 05]
+23FC; [0C A9 9B, 05, 05]
-23A6; [0C A6 3D, 05, 05]
+23FD; [0C A9 A2, 05, 05]
-23A7; [0C A6 44, 05, 05]
+23FE; [0C A9 A9, 05, 05]
-23A8; [0C A6 4B, 05, 05]
+23FF; [0C A9 B0, 05, 05]
-23A9; [0C A6 52, 05, 05]
+2400; [0C A9 B7, 05, 05]
-23AA; [0C A6 59, 05, 05]
+2401; [0C A9 BE, 05, 05]
-23AB; [0C A6 60, 05, 05]
+2402; [0C A9 C5, 05, 05]
-23AC; [0C A6 67, 05, 05]
+2403; [0C A9 CC, 05, 05]
-23AD; [0C A6 6E, 05, 05]
+2404; [0C A9 D3, 05, 05]
-23AE; [0C A6 75, 05, 05]
+2405; [0C A9 DA, 05, 05]
-23AF; [0C A6 7C, 05, 05]
+2406; [0C A9 E1, 05, 05]
-23B0; [0C A6 83, 05, 05]
+2407; [0C A9 E8, 05, 05]
-23B1; [0C A6 8A, 05, 05]
+2408; [0C A9 EF, 05, 05]
-23B2; [0C A6 91, 05, 05]
+2409; [0C A9 F6, 05, 05]
-23B3; [0C A6 98, 05, 05]
+240A; [0C A9 FD, 05, 05]
-23B4; [0C A6 9F, 05, 05]
+240B; [0C AA 06, 05, 05]
-23B5; [0C A6 A6, 05, 05]
+240C; [0C AA 0D, 05, 05]
-23B6; [0C A6 AD, 05, 05]
+240D; [0C AA 14, 05, 05]
-23B7; [0C A6 B4, 05, 05]
+240E; [0C AA 1B, 05, 05]
-23B8; [0C A6 BB, 05, 05]
+240F; [0C AA 22, 05, 05]
-23B9; [0C A6 C2, 05, 05]
+2410; [0C AA 29, 05, 05]
-23BA; [0C A6 C9, 05, 05]
+2411; [0C AA 30, 05, 05]
-23BB; [0C A6 D0, 05, 05]
+2412; [0C AA 37, 05, 05]
-23BC; [0C A6 D7, 05, 05]
+2413; [0C AA 3E, 05, 05]
-23BD; [0C A6 DE, 05, 05]
+2414; [0C AA 45, 05, 05]
-23BE; [0C A6 E5, 05, 05]
+2415; [0C AA 4C, 05, 05]
-23BF; [0C A6 EC, 05, 05]
+2416; [0C AA 53, 05, 05]
-23C0; [0C A6 F3, 05, 05]
+2417; [0C AA 5A, 05, 05]
-23C1; [0C A6 FA, 05, 05]
+2418; [0C AA 61, 05, 05]
-23C2; [0C A7 03, 05, 05]
+2419; [0C AA 68, 05, 05]
-23C3; [0C A7 0A, 05, 05]
+241A; [0C AA 6F, 05, 05]
-23C4; [0C A7 11, 05, 05]
+241B; [0C AA 76, 05, 05]
-23C5; [0C A7 18, 05, 05]
+241C; [0C AA 7D, 05, 05]
-23C6; [0C A7 1F, 05, 05]
+241D; [0C AA 84, 05, 05]
-23C7; [0C A7 26, 05, 05]
+241E; [0C AA 8B, 05, 05]
-23C8; [0C A7 2D, 05, 05]
+241F; [0C AA 92, 05, 05]
-23C9; [0C A7 34, 05, 05]
+2420; [0C AA 99, 05, 05]
-23CA; [0C A7 3B, 05, 05]
+2421; [0C AA A0, 05, 05]
-23CB; [0C A7 42, 05, 05]
+2422; [0C AA A7, 05, 05]
-23CC; [0C A7 49, 05, 05]
+2423; [0C AA AE, 05, 05]
-23CD; [0C A7 50, 05, 05]
+2424; [0C AA B5, 05, 05]
-23CE; [0C A7 57, 05, 05]
+2425; [0C AA BC, 05, 05]
-23CF; [0C A7 5E, 05, 05]
+2426; [0C AA C3, 05, 05]
-23D0; [0C A7 65, 05, 05]
+2440; [0C AA CA, 05, 05]
-23D1; [0C A7 6C, 05, 05]
+2441; [0C AA D1, 05, 05]
-23D2; [0C A7 73, 05, 05]
+2442; [0C AA D8, 05, 05]
-23D3; [0C A7 7A, 05, 05]
+2443; [0C AA DF, 05, 05]
-23D4; [0C A7 81, 05, 05]
+2444; [0C AA E6, 05, 05]
-23D5; [0C A7 88, 05, 05]
+2445; [0C AA ED, 05, 05]
-23D6; [0C A7 8F, 05, 05]
+2446; [0C AA F4, 05, 05]
-23D7; [0C A7 96, 05, 05]
+2447; [0C AA FB, 05, 05]
-23D8; [0C A7 9D, 05, 05]
+2448; [0C AB 04, 05, 05]
-23D9; [0C A7 A4, 05, 05]
+2449; [0C AB 0B, 05, 05]
-23DA; [0C A7 AB, 05, 05]
+244A; [0C AB 12, 05, 05]
-23DB; [0C A7 B2, 05, 05]
+2500; [0C AB 19, 05, 05]
-23DC; [0C A7 B9, 05, 05]
+2501; [0C AB 20, 05, 05]
-23DD; [0C A7 C0, 05, 05]
+2502; [0C AD, 05, 05]
+FFE8; [0C AD, 05, A0]
-23DE; [0C A7 C7, 05, 05]
+2503; [0C AF 02, 05, 05]
-23DF; [0C A7 CE, 05, 05]
+2504; [0C AF 09, 05, 05]
-23E0; [0C A7 D5, 05, 05]
+2505; [0C AF 10, 05, 05]
-23E1; [0C A7 DC, 05, 05]
+2506; [0C AF 17, 05, 05]
-23E2; [0C A7 E3, 05, 05]
+2507; [0C AF 1E, 05, 05]
-23E3; [0C A7 EA, 05, 05]
+2508; [0C AF 25, 05, 05]
-23E4; [0C A7 F1, 05, 05]
+2509; [0C AF 2C, 05, 05]
-23E5; [0C A7 F8, 05, 05]
+250A; [0C AF 33, 05, 05]
-23E6; [0C A7 FF, 05, 05]
+250B; [0C AF 3A, 05, 05]
-23E7; [0C A8 08, 05, 05]
+250C; [0C AF 41, 05, 05]
-23E8; [0C A8 0F, 05, 05]
+250D; [0C AF 48, 05, 05]
-23E9; [0C A8 16, 05, 05]
+250E; [0C AF 4F, 05, 05]
-23EA; [0C A8 1D, 05, 05]
+250F; [0C AF 56, 05, 05]
-23EB; [0C A8 24, 05, 05]
+2510; [0C AF 5D, 05, 05]
-23EC; [0C A8 2B, 05, 05]
+2511; [0C AF 64, 05, 05]
-23ED; [0C A8 32, 05, 05]
+2512; [0C AF 6B, 05, 05]
-23EE; [0C A8 39, 05, 05]
+2513; [0C AF 72, 05, 05]
-23EF; [0C A8 40, 05, 05]
+2514; [0C AF 79, 05, 05]
-23F0; [0C A8 47, 05, 05]
+2515; [0C AF 80, 05, 05]
-23F1; [0C A8 4E, 05, 05]
+2516; [0C AF 87, 05, 05]
-23F2; [0C A8 55, 05, 05]
+2517; [0C AF 8E, 05, 05]
-23F3; [0C A8 5C, 05, 05]
+2518; [0C AF 95, 05, 05]
-23F4; [0C A8 63, 05, 05]
+2519; [0C AF 9C, 05, 05]
-23F5; [0C A8 6A, 05, 05]
+251A; [0C AF A3, 05, 05]
-23F6; [0C A8 71, 05, 05]
+251B; [0C AF AA, 05, 05]
-23F7; [0C A8 78, 05, 05]
+251C; [0C AF B1, 05, 05]
-23F8; [0C A8 7F, 05, 05]
+251D; [0C AF B8, 05, 05]
-23F9; [0C A8 86, 05, 05]
+251E; [0C AF BF, 05, 05]
-23FA; [0C A8 8D, 05, 05]
+251F; [0C AF C6, 05, 05]
-23FB; [0C A8 94, 05, 05]
+2520; [0C AF CD, 05, 05]
-23FC; [0C A8 9B, 05, 05]
+2521; [0C AF D4, 05, 05]
-23FD; [0C A8 A2, 05, 05]
+2522; [0C AF DB, 05, 05]
-23FE; [0C A8 A9, 05, 05]
+2523; [0C AF E2, 05, 05]
-23FF; [0C A8 B0, 05, 05]
+2524; [0C AF E9, 05, 05]
-2400; [0C A8 B7, 05, 05]
+2525; [0C AF F0, 05, 05]
-2401; [0C A8 BE, 05, 05]
+2526; [0C AF F7, 05, 05]
-2402; [0C A8 C5, 05, 05]
+2527; [0C AF FE, 05, 05]
-2403; [0C A8 CC, 05, 05]
+2528; [0C B0 07, 05, 05]
-2404; [0C A8 D3, 05, 05]
+2529; [0C B0 0E, 05, 05]
-2405; [0C A8 DA, 05, 05]
+252A; [0C B0 15, 05, 05]
-2406; [0C A8 E1, 05, 05]
+252B; [0C B0 1C, 05, 05]
-2407; [0C A8 E8, 05, 05]
+252C; [0C B0 23, 05, 05]
-2408; [0C A8 EF, 05, 05]
+252D; [0C B0 2A, 05, 05]
-2409; [0C A8 F6, 05, 05]
+252E; [0C B0 31, 05, 05]
-240A; [0C A8 FD, 05, 05]
+252F; [0C B0 38, 05, 05]
-240B; [0C A9 06, 05, 05]
+2530; [0C B0 3F, 05, 05]
-240C; [0C A9 0D, 05, 05]
+2531; [0C B0 46, 05, 05]
-240D; [0C A9 14, 05, 05]
+2532; [0C B0 4D, 05, 05]
-240E; [0C A9 1B, 05, 05]
+2533; [0C B0 54, 05, 05]
-240F; [0C A9 22, 05, 05]
+2534; [0C B0 5B, 05, 05]
-2410; [0C A9 29, 05, 05]
+2535; [0C B0 62, 05, 05]
-2411; [0C A9 30, 05, 05]
+2536; [0C B0 69, 05, 05]
-2412; [0C A9 37, 05, 05]
+2537; [0C B0 70, 05, 05]
-2413; [0C A9 3E, 05, 05]
+2538; [0C B0 77, 05, 05]
-2414; [0C A9 45, 05, 05]
+2539; [0C B0 7E, 05, 05]
-2415; [0C A9 4C, 05, 05]
+253A; [0C B0 85, 05, 05]
-2416; [0C A9 53, 05, 05]
+253B; [0C B0 8C, 05, 05]
-2417; [0C A9 5A, 05, 05]
+253C; [0C B0 93, 05, 05]
-2418; [0C A9 61, 05, 05]
+253D; [0C B0 9A, 05, 05]
-2419; [0C A9 68, 05, 05]
+253E; [0C B0 A1, 05, 05]
-241A; [0C A9 6F, 05, 05]
+253F; [0C B0 A8, 05, 05]
-241B; [0C A9 76, 05, 05]
+2540; [0C B0 AF, 05, 05]
-241C; [0C A9 7D, 05, 05]
+2541; [0C B0 B6, 05, 05]
-241D; [0C A9 84, 05, 05]
+2542; [0C B0 BD, 05, 05]
-241E; [0C A9 8B, 05, 05]
+2543; [0C B0 C4, 05, 05]
-241F; [0C A9 92, 05, 05]
+2544; [0C B0 CB, 05, 05]
-2420; [0C A9 99, 05, 05]
+2545; [0C B0 D2, 05, 05]
-2421; [0C A9 A0, 05, 05]
+2546; [0C B0 D9, 05, 05]
-2422; [0C A9 A7, 05, 05]
+2547; [0C B0 E0, 05, 05]
-2423; [0C A9 AE, 05, 05]
+2548; [0C B0 E7, 05, 05]
-2424; [0C A9 B5, 05, 05]
+2549; [0C B0 EE, 05, 05]
-2425; [0C A9 BC, 05, 05]
+254A; [0C B0 F5, 05, 05]
-2426; [0C A9 C3, 05, 05]
+254B; [0C B0 FC, 05, 05]
-2440; [0C A9 CA, 05, 05]
+254C; [0C B1 05, 05, 05]
-2441; [0C A9 D1, 05, 05]
+254D; [0C B1 0C, 05, 05]
-2442; [0C A9 D8, 05, 05]
+254E; [0C B1 13, 05, 05]
-2443; [0C A9 DF, 05, 05]
+254F; [0C B1 1A, 05, 05]
-2444; [0C A9 E6, 05, 05]
+2550; [0C B1 21, 05, 05]
-2445; [0C A9 ED, 05, 05]
+2551; [0C B1 28, 05, 05]
-2446; [0C A9 F4, 05, 05]
+2552; [0C B1 2F, 05, 05]
-2447; [0C A9 FB, 05, 05]
+2553; [0C B1 36, 05, 05]
-2448; [0C AA 04, 05, 05]
+2554; [0C B1 3D, 05, 05]
-2449; [0C AA 0B, 05, 05]
+2555; [0C B1 44, 05, 05]
-244A; [0C AA 12, 05, 05]
+2556; [0C B1 4B, 05, 05]
-2500; [0C AA 19, 05, 05]
+2557; [0C B1 52, 05, 05]
-2501; [0C AA 20, 05, 05]
+2558; [0C B1 59, 05, 05]
-2502; [0C AC, 05, 05]
-FFE8; [0C AC, 05, A0]
+2559; [0C B1 60, 05, 05]
-2503; [0C AE 02, 05, 05]
+255A; [0C B1 67, 05, 05]
-2504; [0C AE 09, 05, 05]
+255B; [0C B1 6E, 05, 05]
-2505; [0C AE 10, 05, 05]
+255C; [0C B1 75, 05, 05]
-2506; [0C AE 17, 05, 05]
+255D; [0C B1 7C, 05, 05]
-2507; [0C AE 1E, 05, 05]
+255E; [0C B1 83, 05, 05]
-2508; [0C AE 25, 05, 05]
+255F; [0C B1 8A, 05, 05]
-2509; [0C AE 2C, 05, 05]
+2560; [0C B1 91, 05, 05]
-250A; [0C AE 33, 05, 05]
+2561; [0C B1 98, 05, 05]
-250B; [0C AE 3A, 05, 05]
+2562; [0C B1 9F, 05, 05]
-250C; [0C AE 41, 05, 05]
+2563; [0C B1 A6, 05, 05]
-250D; [0C AE 48, 05, 05]
+2564; [0C B1 AD, 05, 05]
-250E; [0C AE 4F, 05, 05]
+2565; [0C B1 B4, 05, 05]
-250F; [0C AE 56, 05, 05]
+2566; [0C B1 BB, 05, 05]
-2510; [0C AE 5D, 05, 05]
+2567; [0C B1 C2, 05, 05]
-2511; [0C AE 64, 05, 05]
+2568; [0C B1 C9, 05, 05]
-2512; [0C AE 6B, 05, 05]
+2569; [0C B1 D0, 05, 05]
-2513; [0C AE 72, 05, 05]
+256A; [0C B1 D7, 05, 05]
-2514; [0C AE 79, 05, 05]
+256B; [0C B1 DE, 05, 05]
-2515; [0C AE 80, 05, 05]
+256C; [0C B1 E5, 05, 05]
-2516; [0C AE 87, 05, 05]
+256D; [0C B1 EC, 05, 05]
-2517; [0C AE 8E, 05, 05]
+256E; [0C B1 F3, 05, 05]
-2518; [0C AE 95, 05, 05]
+256F; [0C B1 FA, 05, 05]
-2519; [0C AE 9C, 05, 05]
+2570; [0C B2 03, 05, 05]
-251A; [0C AE A3, 05, 05]
+2571; [0C B2 0A, 05, 05]
-251B; [0C AE AA, 05, 05]
+2572; [0C B2 11, 05, 05]
-251C; [0C AE B1, 05, 05]
+2573; [0C B2 18, 05, 05]
-251D; [0C AE B8, 05, 05]
+2574; [0C B2 1F, 05, 05]
-251E; [0C AE BF, 05, 05]
+2575; [0C B2 26, 05, 05]
-251F; [0C AE C6, 05, 05]
+2576; [0C B2 2D, 05, 05]
-2520; [0C AE CD, 05, 05]
+2577; [0C B2 34, 05, 05]
-2521; [0C AE D4, 05, 05]
+2578; [0C B2 3B, 05, 05]
-2522; [0C AE DB, 05, 05]
+2579; [0C B2 42, 05, 05]
-2523; [0C AE E2, 05, 05]
+257A; [0C B2 49, 05, 05]
-2524; [0C AE E9, 05, 05]
+257B; [0C B2 50, 05, 05]
-2525; [0C AE F0, 05, 05]
+257C; [0C B2 57, 05, 05]
-2526; [0C AE F7, 05, 05]
+257D; [0C B2 5E, 05, 05]
-2527; [0C AE FE, 05, 05]
+257E; [0C B2 65, 05, 05]
-2528; [0C AF 07, 05, 05]
+257F; [0C B2 6C, 05, 05]
-2529; [0C AF 0E, 05, 05]
+2580; [0C B2 73, 05, 05]
-252A; [0C AF 15, 05, 05]
+2581; [0C B2 7A, 05, 05]
-252B; [0C AF 1C, 05, 05]
+2582; [0C B2 81, 05, 05]
-252C; [0C AF 23, 05, 05]
+2583; [0C B2 88, 05, 05]
-252D; [0C AF 2A, 05, 05]
+2584; [0C B2 8F, 05, 05]
-252E; [0C AF 31, 05, 05]
+2585; [0C B2 96, 05, 05]
-252F; [0C AF 38, 05, 05]
+2586; [0C B2 9D, 05, 05]
-2530; [0C AF 3F, 05, 05]
+2587; [0C B2 A4, 05, 05]
-2531; [0C AF 46, 05, 05]
+2588; [0C B2 AB, 05, 05]
-2532; [0C AF 4D, 05, 05]
+2589; [0C B2 B2, 05, 05]
-2533; [0C AF 54, 05, 05]
+258A; [0C B2 B9, 05, 05]
-2534; [0C AF 5B, 05, 05]
+258B; [0C B2 C0, 05, 05]
-2535; [0C AF 62, 05, 05]
+258C; [0C B2 C7, 05, 05]
-2536; [0C AF 69, 05, 05]
+258D; [0C B2 CE, 05, 05]
-2537; [0C AF 70, 05, 05]
+258E; [0C B2 D5, 05, 05]
-2538; [0C AF 77, 05, 05]
+258F; [0C B2 DC, 05, 05]
-2539; [0C AF 7E, 05, 05]
+2590; [0C B2 E3, 05, 05]
-253A; [0C AF 85, 05, 05]
+2591; [0C B2 EA, 05, 05]
-253B; [0C AF 8C, 05, 05]
+2592; [0C B2 F1, 05, 05]
-253C; [0C AF 93, 05, 05]
+2593; [0C B2 F8, 05, 05]
-253D; [0C AF 9A, 05, 05]
+2594; [0C B2 FF, 05, 05]
-253E; [0C AF A1, 05, 05]
+2595; [0C B3 08, 05, 05]
-253F; [0C AF A8, 05, 05]
+2596; [0C B3 0F, 05, 05]
-2540; [0C AF AF, 05, 05]
+2597; [0C B3 16, 05, 05]
-2541; [0C AF B6, 05, 05]
+2598; [0C B3 1D, 05, 05]
-2542; [0C AF BD, 05, 05]
+2599; [0C B3 24, 05, 05]
-2543; [0C AF C4, 05, 05]
+259A; [0C B3 2B, 05, 05]
-2544; [0C AF CB, 05, 05]
+259B; [0C B3 32, 05, 05]
-2545; [0C AF D2, 05, 05]
+259C; [0C B3 39, 05, 05]
-2546; [0C AF D9, 05, 05]
+259D; [0C B3 40, 05, 05]
-2547; [0C AF E0, 05, 05]
+259E; [0C B3 47, 05, 05]
-2548; [0C AF E7, 05, 05]
+259F; [0C B3 4E, 05, 05]
-2549; [0C AF EE, 05, 05]
+25A0; [0C B5, 05, 05]
+FFED; [0C B5, 05, A0]
-254A; [0C AF F5, 05, 05]
+25A1; [0C B7 02, 05, 05]
-254B; [0C AF FC, 05, 05]
+25A2; [0C B7 09, 05, 05]
-254C; [0C B0 05, 05, 05]
+25A3; [0C B7 10, 05, 05]
-254D; [0C B0 0C, 05, 05]
+25A4; [0C B7 17, 05, 05]
-254E; [0C B0 13, 05, 05]
+25A5; [0C B7 1E, 05, 05]
-254F; [0C B0 1A, 05, 05]
+25A6; [0C B7 25, 05, 05]
-2550; [0C B0 21, 05, 05]
+25A7; [0C B7 2C, 05, 05]
-2551; [0C B0 28, 05, 05]
+25A8; [0C B7 33, 05, 05]
-2552; [0C B0 2F, 05, 05]
+25A9; [0C B7 3A, 05, 05]
-2553; [0C B0 36, 05, 05]
+25AA; [0C B7 41, 05, 05]
-2554; [0C B0 3D, 05, 05]
+25AB; [0C B7 48, 05, 05]
-2555; [0C B0 44, 05, 05]
+25AC; [0C B7 4F, 05, 05]
-2556; [0C B0 4B, 05, 05]
+25AD; [0C B7 56, 05, 05]
-2557; [0C B0 52, 05, 05]
+25AE; [0C B7 5D, 05, 05]
-2558; [0C B0 59, 05, 05]
+25AF; [0C B7 64, 05, 05]
-2559; [0C B0 60, 05, 05]
+25B0; [0C B7 6B, 05, 05]
-255A; [0C B0 67, 05, 05]
+25B1; [0C B7 72, 05, 05]
-255B; [0C B0 6E, 05, 05]
+25B2; [0C B7 79, 05, 05]
-255C; [0C B0 75, 05, 05]
+25B3; [0C B7 80, 05, 05]
-255D; [0C B0 7C, 05, 05]
+25B4; [0C B7 87, 05, 05]
-255E; [0C B0 83, 05, 05]
+25B5; [0C B7 8E, 05, 05]
-255F; [0C B0 8A, 05, 05]
+25B6; [0C B7 95, 05, 05]
-2560; [0C B0 91, 05, 05]
+25B7; [0C B7 9C, 05, 05]
-2561; [0C B0 98, 05, 05]
+25B8; [0C B7 A3, 05, 05]
-2562; [0C B0 9F, 05, 05]
+25B9; [0C B7 AA, 05, 05]
-2563; [0C B0 A6, 05, 05]
+25BA; [0C B7 B1, 05, 05]
-2564; [0C B0 AD, 05, 05]
+25BB; [0C B7 B8, 05, 05]
-2565; [0C B0 B4, 05, 05]
+25BC; [0C B7 BF, 05, 05]
-2566; [0C B0 BB, 05, 05]
+25BD; [0C B7 C6, 05, 05]
-2567; [0C B0 C2, 05, 05]
+25BE; [0C B7 CD, 05, 05]
-2568; [0C B0 C9, 05, 05]
+25BF; [0C B7 D4, 05, 05]
-2569; [0C B0 D0, 05, 05]
+25C0; [0C B7 DB, 05, 05]
-256A; [0C B0 D7, 05, 05]
+25C1; [0C B7 E2, 05, 05]
-256B; [0C B0 DE, 05, 05]
+25C2; [0C B7 E9, 05, 05]
-256C; [0C B0 E5, 05, 05]
+25C3; [0C B7 F0, 05, 05]
-256D; [0C B0 EC, 05, 05]
+25C4; [0C B7 F7, 05, 05]
-256E; [0C B0 F3, 05, 05]
+25C5; [0C B7 FE, 05, 05]
-256F; [0C B0 FA, 05, 05]
+25C6; [0C B8 07, 05, 05]
-2570; [0C B1 03, 05, 05]
+25C7; [0C B8 0E, 05, 05]
-2571; [0C B1 0A, 05, 05]
+25C8; [0C B8 15, 05, 05]
-2572; [0C B1 11, 05, 05]
+25C9; [0C B8 1C, 05, 05]
-2573; [0C B1 18, 05, 05]
+25CA; [0C B8 23, 05, 05]
-2574; [0C B1 1F, 05, 05]
+25CB; [0C BA, 05, 05]
+FFEE; [0C BA, 05, A0]
-2575; [0C B1 26, 05, 05]
+25CC; [0C BC 02, 05, 05]
-2576; [0C B1 2D, 05, 05]
+25CD; [0C BC 09, 05, 05]
-2577; [0C B1 34, 05, 05]
+25CE; [0C BC 10, 05, 05]
-2578; [0C B1 3B, 05, 05]
+25CF; [0C BC 17, 05, 05]
-2579; [0C B1 42, 05, 05]
+25D0; [0C BC 1E, 05, 05]
-257A; [0C B1 49, 05, 05]
+25D1; [0C BC 25, 05, 05]
-257B; [0C B1 50, 05, 05]
+25D2; [0C BC 2C, 05, 05]
-257C; [0C B1 57, 05, 05]
+25D3; [0C BC 33, 05, 05]
-257D; [0C B1 5E, 05, 05]
+25D4; [0C BC 3A, 05, 05]
-257E; [0C B1 65, 05, 05]
+25D5; [0C BC 41, 05, 05]
-257F; [0C B1 6C, 05, 05]
+25D6; [0C BC 48, 05, 05]
-2580; [0C B1 73, 05, 05]
+25D7; [0C BC 4F, 05, 05]
-2581; [0C B1 7A, 05, 05]
+25D8; [0C BC 56, 05, 05]
-2582; [0C B1 81, 05, 05]
+25D9; [0C BC 5D, 05, 05]
-2583; [0C B1 88, 05, 05]
+25DA; [0C BC 64, 05, 05]
-2584; [0C B1 8F, 05, 05]
+25DB; [0C BC 6B, 05, 05]
-2585; [0C B1 96, 05, 05]
+25DC; [0C BC 72, 05, 05]
-2586; [0C B1 9D, 05, 05]
+25DD; [0C BC 79, 05, 05]
-2587; [0C B1 A4, 05, 05]
+25DE; [0C BC 80, 05, 05]
-2588; [0C B1 AB, 05, 05]
+25DF; [0C BC 87, 05, 05]
-2589; [0C B1 B2, 05, 05]
+25E0; [0C BC 8E, 05, 05]
-258A; [0C B1 B9, 05, 05]
+25E1; [0C BC 95, 05, 05]
-258B; [0C B1 C0, 05, 05]
+25E2; [0C BC 9C, 05, 05]
-258C; [0C B1 C7, 05, 05]
+25E3; [0C BC A3, 05, 05]
-258D; [0C B1 CE, 05, 05]
+25E4; [0C BC AA, 05, 05]
-258E; [0C B1 D5, 05, 05]
+25E5; [0C BC B1, 05, 05]
-258F; [0C B1 DC, 05, 05]
+25E6; [0C BC B8, 05, 05]
-2590; [0C B1 E3, 05, 05]
+25E7; [0C BC BF, 05, 05]
-2591; [0C B1 EA, 05, 05]
+25E8; [0C BC C6, 05, 05]
-2592; [0C B1 F1, 05, 05]
+25E9; [0C BC CD, 05, 05]
-2593; [0C B1 F8, 05, 05]
+25EA; [0C BC D4, 05, 05]
-2594; [0C B1 FF, 05, 05]
+25EB; [0C BC DB, 05, 05]
-2595; [0C B2 08, 05, 05]
+25EC; [0C BC E2, 05, 05]
-2596; [0C B2 0F, 05, 05]
+25ED; [0C BC E9, 05, 05]
-2597; [0C B2 16, 05, 05]
+25EE; [0C BC F0, 05, 05]
-2598; [0C B2 1D, 05, 05]
+25EF; [0C BC F7, 05, 05]
-2599; [0C B2 24, 05, 05]
+25F0; [0C BC FE, 05, 05]
-259A; [0C B2 2B, 05, 05]
+25F1; [0C BD 07, 05, 05]
-259B; [0C B2 32, 05, 05]
+25F2; [0C BD 0E, 05, 05]
-259C; [0C B2 39, 05, 05]
+25F3; [0C BD 15, 05, 05]
-259D; [0C B2 40, 05, 05]
+25F4; [0C BD 1C, 05, 05]
-259E; [0C B2 47, 05, 05]
+25F5; [0C BD 23, 05, 05]
-259F; [0C B2 4E, 05, 05]
+25F6; [0C BD 2A, 05, 05]
-25A0; [0C B4, 05, 05]
-FFED; [0C B4, 05, A0]
+25F7; [0C BD 31, 05, 05]
-25A1; [0C B6 02, 05, 05]
+25F8; [0C BD 38, 05, 05]
-25A2; [0C B6 09, 05, 05]
+25F9; [0C BD 3F, 05, 05]
-25A3; [0C B6 10, 05, 05]
+25FA; [0C BD 46, 05, 05]
-25A4; [0C B6 17, 05, 05]
+25FB; [0C BD 4D, 05, 05]
-25A5; [0C B6 1E, 05, 05]
+25FC; [0C BD 54, 05, 05]
-25A6; [0C B6 25, 05, 05]
+25FD; [0C BD 5B, 05, 05]
-25A7; [0C B6 2C, 05, 05]
+25FE; [0C BD 62, 05, 05]
-25A8; [0C B6 33, 05, 05]
+25FF; [0C BD 69, 05, 05]
-25A9; [0C B6 3A, 05, 05]
+1FB00; [0C BD 70, 05, 05]
-25AA; [0C B6 41, 05, 05]
+1FB01; [0C BD 77, 05, 05]
-25AB; [0C B6 48, 05, 05]
+1FB02; [0C BD 7E, 05, 05]
-25AC; [0C B6 4F, 05, 05]
+1FB03; [0C BD 85, 05, 05]
-25AD; [0C B6 56, 05, 05]
+1FB04; [0C BD 8C, 05, 05]
-25AE; [0C B6 5D, 05, 05]
+1FB05; [0C BD 93, 05, 05]
-25AF; [0C B6 64, 05, 05]
+1FB06; [0C BD 9A, 05, 05]
-25B0; [0C B6 6B, 05, 05]
+1FB07; [0C BD A1, 05, 05]
-25B1; [0C B6 72, 05, 05]
+1FB08; [0C BD A8, 05, 05]
-25B2; [0C B6 79, 05, 05]
+1FB09; [0C BD AF, 05, 05]
-25B3; [0C B6 80, 05, 05]
+1FB0A; [0C BD B6, 05, 05]
-25B4; [0C B6 87, 05, 05]
+1FB0B; [0C BD BD, 05, 05]
-25B5; [0C B6 8E, 05, 05]
+1FB0C; [0C BD C4, 05, 05]
-25B6; [0C B6 95, 05, 05]
+1FB0D; [0C BD CB, 05, 05]
-25B7; [0C B6 9C, 05, 05]
+1FB0E; [0C BD D2, 05, 05]
-25B8; [0C B6 A3, 05, 05]
+1FB0F; [0C BD D9, 05, 05]
-25B9; [0C B6 AA, 05, 05]
+1FB10; [0C BD E0, 05, 05]
-25BA; [0C B6 B1, 05, 05]
+1FB11; [0C BD E7, 05, 05]
-25BB; [0C B6 B8, 05, 05]
+1FB12; [0C BD EE, 05, 05]
-25BC; [0C B6 BF, 05, 05]
+1FB13; [0C BD F5, 05, 05]
-25BD; [0C B6 C6, 05, 05]
+1FB14; [0C BD FC, 05, 05]
-25BE; [0C B6 CD, 05, 05]
+1FB15; [0C BE 05, 05, 05]
-25BF; [0C B6 D4, 05, 05]
+1FB16; [0C BE 0C, 05, 05]
-25C0; [0C B6 DB, 05, 05]
+1FB17; [0C BE 13, 05, 05]
-25C1; [0C B6 E2, 05, 05]
+1FB18; [0C BE 1A, 05, 05]
-25C2; [0C B6 E9, 05, 05]
+1FB19; [0C BE 21, 05, 05]
-25C3; [0C B6 F0, 05, 05]
+1FB1A; [0C BE 28, 05, 05]
-25C4; [0C B6 F7, 05, 05]
+1FB1B; [0C BE 2F, 05, 05]
-25C5; [0C B6 FE, 05, 05]
+1FB1C; [0C BE 36, 05, 05]
-25C6; [0C B7 07, 05, 05]
+1FB1D; [0C BE 3D, 05, 05]
-25C7; [0C B7 0E, 05, 05]
+1FB1E; [0C BE 44, 05, 05]
-25C8; [0C B7 15, 05, 05]
+1FB1F; [0C BE 4B, 05, 05]
-25C9; [0C B7 1C, 05, 05]
+1FB20; [0C BE 52, 05, 05]
-25CA; [0C B7 23, 05, 05]
+1FB21; [0C BE 59, 05, 05]
-25CB; [0C B9, 05, 05]
-FFEE; [0C B9, 05, A0]
+1FB22; [0C BE 60, 05, 05]
-25CC; [0C BB 02, 05, 05]
+1FB23; [0C BE 67, 05, 05]
-25CD; [0C BB 09, 05, 05]
+1FB24; [0C BE 6E, 05, 05]
-25CE; [0C BB 10, 05, 05]
+1FB25; [0C BE 75, 05, 05]
-25CF; [0C BB 17, 05, 05]
+1FB26; [0C BE 7C, 05, 05]
-25D0; [0C BB 1E, 05, 05]
+1FB27; [0C BE 83, 05, 05]
-25D1; [0C BB 25, 05, 05]
+1FB28; [0C BE 8A, 05, 05]
-25D2; [0C BB 2C, 05, 05]
+1FB29; [0C BE 91, 05, 05]
-25D3; [0C BB 33, 05, 05]
+1FB2A; [0C BE 98, 05, 05]
-25D4; [0C BB 3A, 05, 05]
+1FB2B; [0C BE 9F, 05, 05]
-25D5; [0C BB 41, 05, 05]
+1FB2C; [0C BE A6, 05, 05]
-25D6; [0C BB 48, 05, 05]
+1FB2D; [0C BE AD, 05, 05]
-25D7; [0C BB 4F, 05, 05]
+1FB2E; [0C BE B4, 05, 05]
-25D8; [0C BB 56, 05, 05]
+1FB2F; [0C BE BB, 05, 05]
-25D9; [0C BB 5D, 05, 05]
+1FB30; [0C BE C2, 05, 05]
-25DA; [0C BB 64, 05, 05]
+1FB31; [0C BE C9, 05, 05]
-25DB; [0C BB 6B, 05, 05]
+1FB32; [0C BE D0, 05, 05]
-25DC; [0C BB 72, 05, 05]
+1FB33; [0C BE D7, 05, 05]
-25DD; [0C BB 79, 05, 05]
+1FB34; [0C BE DE, 05, 05]
-25DE; [0C BB 80, 05, 05]
+1FB35; [0C BE E5, 05, 05]
-25DF; [0C BB 87, 05, 05]
+1FB36; [0C BE EC, 05, 05]
-25E0; [0C BB 8E, 05, 05]
+1FB37; [0C BE F3, 05, 05]
-25E1; [0C BB 95, 05, 05]
+1FB38; [0C BE FA, 05, 05]
-25E2; [0C BB 9C, 05, 05]
+1FB39; [0C BF 03, 05, 05]
-25E3; [0C BB A3, 05, 05]
+1FB3A; [0C BF 0A, 05, 05]
-25E4; [0C BB AA, 05, 05]
+1FB3B; [0C BF 11, 05, 05]
-25E5; [0C BB B1, 05, 05]
+1FB3C; [0C BF 18, 05, 05]
-25E6; [0C BB B8, 05, 05]
+1FB3D; [0C BF 1F, 05, 05]
-25E7; [0C BB BF, 05, 05]
+1FB3E; [0C BF 26, 05, 05]
-25E8; [0C BB C6, 05, 05]
+1FB3F; [0C BF 2D, 05, 05]
-25E9; [0C BB CD, 05, 05]
+1FB40; [0C BF 34, 05, 05]
-25EA; [0C BB D4, 05, 05]
+1FB41; [0C BF 3B, 05, 05]
-25EB; [0C BB DB, 05, 05]
+1FB42; [0C BF 42, 05, 05]
-25EC; [0C BB E2, 05, 05]
+1FB43; [0C BF 49, 05, 05]
-25ED; [0C BB E9, 05, 05]
+1FB44; [0C BF 50, 05, 05]
-25EE; [0C BB F0, 05, 05]
+1FB45; [0C BF 57, 05, 05]
-25EF; [0C BB F7, 05, 05]
+1FB46; [0C BF 5E, 05, 05]
-25F0; [0C BB FE, 05, 05]
+1FB47; [0C BF 65, 05, 05]
-25F1; [0C BC 07, 05, 05]
+1FB48; [0C BF 6C, 05, 05]
-25F2; [0C BC 0E, 05, 05]
+1FB49; [0C BF 73, 05, 05]
-25F3; [0C BC 15, 05, 05]
+1FB4A; [0C BF 7A, 05, 05]
-25F4; [0C BC 1C, 05, 05]
+1FB4B; [0C BF 81, 05, 05]
-25F5; [0C BC 23, 05, 05]
+1FB4C; [0C BF 88, 05, 05]
-25F6; [0C BC 2A, 05, 05]
+1FB4D; [0C BF 8F, 05, 05]
-25F7; [0C BC 31, 05, 05]
+1FB4E; [0C BF 96, 05, 05]
-25F8; [0C BC 38, 05, 05]
+1FB4F; [0C BF 9D, 05, 05]
-25F9; [0C BC 3F, 05, 05]
+1FB50; [0C BF A4, 05, 05]
-25FA; [0C BC 46, 05, 05]
+1FB51; [0C BF AB, 05, 05]
-25FB; [0C BC 4D, 05, 05]
+1FB52; [0C BF B2, 05, 05]
-25FC; [0C BC 54, 05, 05]
+1FB53; [0C BF B9, 05, 05]
-25FD; [0C BC 5B, 05, 05]
+1FB54; [0C BF C0, 05, 05]
-25FE; [0C BC 62, 05, 05]
+1FB55; [0C BF C7, 05, 05]
-25FF; [0C BC 69, 05, 05]
+1FB56; [0C BF CE, 05, 05]
-1FB00; [0C BC 70, 05, 05]
+1FB57; [0C BF D5, 05, 05]
-1FB01; [0C BC 77, 05, 05]
+1FB58; [0C BF DC, 05, 05]
-1FB02; [0C BC 7E, 05, 05]
+1FB59; [0C BF E3, 05, 05]
-1FB03; [0C BC 85, 05, 05]
+1FB5A; [0C BF EA, 05, 05]
-1FB04; [0C BC 8C, 05, 05]
+1FB5B; [0C BF F1, 05, 05]
-1FB05; [0C BC 93, 05, 05]
+1FB5C; [0C BF F8, 05, 05]
-1FB06; [0C BC 9A, 05, 05]
+1FB5D; [0C BF FF, 05, 05]
-1FB07; [0C BC A1, 05, 05]
+1FB5E; [0C C0 08, 05, 05]
-1FB08; [0C BC A8, 05, 05]
+1FB5F; [0C C0 0F, 05, 05]
-1FB09; [0C BC AF, 05, 05]
+1FB60; [0C C0 16, 05, 05]
-1FB0A; [0C BC B6, 05, 05]
+1FB61; [0C C0 1D, 05, 05]
-1FB0B; [0C BC BD, 05, 05]
+1FB62; [0C C0 24, 05, 05]
-1FB0C; [0C BC C4, 05, 05]
+1FB63; [0C C0 2B, 05, 05]
-1FB0D; [0C BC CB, 05, 05]
+1FB64; [0C C0 32, 05, 05]
-1FB0E; [0C BC D2, 05, 05]
+1FB65; [0C C0 39, 05, 05]
-1FB0F; [0C BC D9, 05, 05]
+1FB66; [0C C0 40, 05, 05]
-1FB10; [0C BC E0, 05, 05]
+1FB67; [0C C0 47, 05, 05]
-1FB11; [0C BC E7, 05, 05]
+1FB68; [0C C0 4E, 05, 05]
-1FB12; [0C BC EE, 05, 05]
+1FB69; [0C C0 55, 05, 05]
-1FB13; [0C BC F5, 05, 05]
+1FB6A; [0C C0 5C, 05, 05]
-1FB14; [0C BC FC, 05, 05]
+1FB6B; [0C C0 63, 05, 05]
-1FB15; [0C BD 05, 05, 05]
+1FB6C; [0C C0 6A, 05, 05]
-1FB16; [0C BD 0C, 05, 05]
+1FB6D; [0C C0 71, 05, 05]
-1FB17; [0C BD 13, 05, 05]
+1FB6E; [0C C0 78, 05, 05]
-1FB18; [0C BD 1A, 05, 05]
+1FB6F; [0C C0 7F, 05, 05]
-1FB19; [0C BD 21, 05, 05]
+1FB70; [0C C0 86, 05, 05]
-1FB1A; [0C BD 28, 05, 05]
+1FB71; [0C C0 8D, 05, 05]
-1FB1B; [0C BD 2F, 05, 05]
+1FB72; [0C C0 94, 05, 05]
-1FB1C; [0C BD 36, 05, 05]
+1FB73; [0C C0 9B, 05, 05]
-1FB1D; [0C BD 3D, 05, 05]
+1FB74; [0C C0 A2, 05, 05]
-1FB1E; [0C BD 44, 05, 05]
+1FB75; [0C C0 A9, 05, 05]
-1FB1F; [0C BD 4B, 05, 05]
+1FB76; [0C C0 B0, 05, 05]
-1FB20; [0C BD 52, 05, 05]
+1FB77; [0C C0 B7, 05, 05]
-1FB21; [0C BD 59, 05, 05]
+1FB78; [0C C0 BE, 05, 05]
-1FB22; [0C BD 60, 05, 05]
+1FB79; [0C C0 C5, 05, 05]
-1FB23; [0C BD 67, 05, 05]
+1FB7A; [0C C0 CC, 05, 05]
-1FB24; [0C BD 6E, 05, 05]
+1FB7B; [0C C0 D3, 05, 05]
-1FB25; [0C BD 75, 05, 05]
+1FB7C; [0C C0 DA, 05, 05]
-1FB26; [0C BD 7C, 05, 05]
+1FB7D; [0C C0 E1, 05, 05]
-1FB27; [0C BD 83, 05, 05]
+1FB7E; [0C C0 E8, 05, 05]
-1FB28; [0C BD 8A, 05, 05]
+1FB7F; [0C C0 EF, 05, 05]
-1FB29; [0C BD 91, 05, 05]
+1FB80; [0C C0 F6, 05, 05]
-1FB2A; [0C BD 98, 05, 05]
+1FB81; [0C C0 FD, 05, 05]
-1FB2B; [0C BD 9F, 05, 05]
+1FB82; [0C C1 06, 05, 05]
-1FB2C; [0C BD A6, 05, 05]
+1FB83; [0C C1 0D, 05, 05]
-1FB2D; [0C BD AD, 05, 05]
+1FB84; [0C C1 14, 05, 05]
-1FB2E; [0C BD B4, 05, 05]
+1FB85; [0C C1 1B, 05, 05]
-1FB2F; [0C BD BB, 05, 05]
+1FB86; [0C C1 22, 05, 05]
-1FB30; [0C BD C2, 05, 05]
+1FB87; [0C C1 29, 05, 05]
-1FB31; [0C BD C9, 05, 05]
+1FB88; [0C C1 30, 05, 05]
-1FB32; [0C BD D0, 05, 05]
+1FB89; [0C C1 37, 05, 05]
-1FB33; [0C BD D7, 05, 05]
+1FB8A; [0C C1 3E, 05, 05]
-1FB34; [0C BD DE, 05, 05]
+1FB8B; [0C C1 45, 05, 05]
-1FB35; [0C BD E5, 05, 05]
+1FB8C; [0C C1 4C, 05, 05]
-1FB36; [0C BD EC, 05, 05]
+1FB8D; [0C C1 53, 05, 05]
-1FB37; [0C BD F3, 05, 05]
+1FB8E; [0C C1 5A, 05, 05]
-1FB38; [0C BD FA, 05, 05]
+1FB8F; [0C C1 61, 05, 05]
-1FB39; [0C BE 03, 05, 05]
+1FB90; [0C C1 68, 05, 05]
-1FB3A; [0C BE 0A, 05, 05]
+1FB91; [0C C1 6F, 05, 05]
-1FB3B; [0C BE 11, 05, 05]
+1FB92; [0C C1 76, 05, 05]
-1FB3C; [0C BE 18, 05, 05]
+1FB94; [0C C1 7D, 05, 05]
-1FB3D; [0C BE 1F, 05, 05]
+1FB95; [0C C1 84, 05, 05]
-1FB3E; [0C BE 26, 05, 05]
+1FB96; [0C C1 8B, 05, 05]
-1FB3F; [0C BE 2D, 05, 05]
+1FB97; [0C C1 92, 05, 05]
-1FB40; [0C BE 34, 05, 05]
+1FB98; [0C C1 99, 05, 05]
-1FB41; [0C BE 3B, 05, 05]
+1FB99; [0C C1 A0, 05, 05]
-1FB42; [0C BE 42, 05, 05]
+1FB9A; [0C C1 A7, 05, 05]
-1FB43; [0C BE 49, 05, 05]
+1FB9B; [0C C1 AE, 05, 05]
-1FB44; [0C BE 50, 05, 05]
+1FB9C; [0C C1 B5, 05, 05]
-1FB45; [0C BE 57, 05, 05]
+1FB9D; [0C C1 BC, 05, 05]
-1FB46; [0C BE 5E, 05, 05]
+1FB9E; [0C C1 C3, 05, 05]
-1FB47; [0C BE 65, 05, 05]
+1FB9F; [0C C1 CA, 05, 05]
-1FB48; [0C BE 6C, 05, 05]
+1FBA0; [0C C1 D1, 05, 05]
-1FB49; [0C BE 73, 05, 05]
+1FBA1; [0C C1 D8, 05, 05]
-1FB4A; [0C BE 7A, 05, 05]
+1FBA2; [0C C1 DF, 05, 05]
-1FB4B; [0C BE 81, 05, 05]
+1FBA3; [0C C1 E6, 05, 05]
-1FB4C; [0C BE 88, 05, 05]
+1FBA4; [0C C1 ED, 05, 05]
-1FB4D; [0C BE 8F, 05, 05]
+1FBA5; [0C C1 F4, 05, 05]
-1FB4E; [0C BE 96, 05, 05]
+1FBA6; [0C C1 FB, 05, 05]
-1FB4F; [0C BE 9D, 05, 05]
+1FBA7; [0C C2 04, 05, 05]
-1FB50; [0C BE A4, 05, 05]
+1FBA8; [0C C2 0B, 05, 05]
-1FB51; [0C BE AB, 05, 05]
+1FBA9; [0C C2 12, 05, 05]
-1FB52; [0C BE B2, 05, 05]
+1FBAA; [0C C2 19, 05, 05]
-1FB53; [0C BE B9, 05, 05]
+1FBAB; [0C C2 20, 05, 05]
-1FB54; [0C BE C0, 05, 05]
+1FBAC; [0C C2 27, 05, 05]
-1FB55; [0C BE C7, 05, 05]
+1FBAD; [0C C2 2E, 05, 05]
-1FB56; [0C BE CE, 05, 05]
+1FBAE; [0C C2 35, 05, 05]
-1FB57; [0C BE D5, 05, 05]
+1FBAF; [0C C2 3C, 05, 05]
-1FB58; [0C BE DC, 05, 05]
+1FBB0; [0C C2 43, 05, 05]
-1FB59; [0C BE E3, 05, 05]
+1FBB1; [0C C2 4A, 05, 05]
-1FB5A; [0C BE EA, 05, 05]
+1FBB2; [0C C2 51, 05, 05]
-1FB5B; [0C BE F1, 05, 05]
+1FBB3; [0C C2 58, 05, 05]
-1FB5C; [0C BE F8, 05, 05]
+1FBB4; [0C C2 5F, 05, 05]
-1FB5D; [0C BE FF, 05, 05]
+1FBB5; [0C C2 66, 05, 05]
-1FB5E; [0C BF 08, 05, 05]
+1FBB6; [0C C2 6D, 05, 05]
-1FB5F; [0C BF 0F, 05, 05]
+1FBB7; [0C C2 74, 05, 05]
-1FB60; [0C BF 16, 05, 05]
+1FBB8; [0C C2 7B, 05, 05]
-1FB61; [0C BF 1D, 05, 05]
+1FBB9; [0C C2 82, 05, 05]
-1FB62; [0C BF 24, 05, 05]
+1FBBA; [0C C2 89, 05, 05]
-1FB63; [0C BF 2B, 05, 05]
+1FBBB; [0C C2 90, 05, 05]
-1FB64; [0C BF 32, 05, 05]
+1FBBC; [0C C2 97, 05, 05]
-1FB65; [0C BF 39, 05, 05]
+1FBBD; [0C C2 9E, 05, 05]
-1FB66; [0C BF 40, 05, 05]
+1FBBE; [0C C2 A5, 05, 05]
-1FB67; [0C BF 47, 05, 05]
+1FBBF; [0C C2 AC, 05, 05]
-1FB68; [0C BF 4E, 05, 05]
+1FBC0; [0C C2 B3, 05, 05]
-1FB69; [0C BF 55, 05, 05]
+1FBC1; [0C C2 BA, 05, 05]
-1FB6A; [0C BF 5C, 05, 05]
+1FBC2; [0C C2 C1, 05, 05]
-1FB6B; [0C BF 63, 05, 05]
+1FBC3; [0C C2 C8, 05, 05]
-1FB6C; [0C BF 6A, 05, 05]
+1FBC4; [0C C2 CF, 05, 05]
-1FB6D; [0C BF 71, 05, 05]
+1FBC5; [0C C2 D6, 05, 05]
-1FB6E; [0C BF 78, 05, 05]
+1FBC6; [0C C2 DD, 05, 05]
-1FB6F; [0C BF 7F, 05, 05]
+1FBC7; [0C C2 E4, 05, 05]
-1FB70; [0C BF 86, 05, 05]
+1FBC8; [0C C2 EB, 05, 05]
-1FB71; [0C BF 8D, 05, 05]
+1FBC9; [0C C2 F2, 05, 05]
-1FB72; [0C BF 94, 05, 05]
+1FBCA; [0C C2 F9, 05, 05]
-1FB73; [0C BF 9B, 05, 05]
+2600; [0C C3 02, 05, 05]
-1FB74; [0C BF A2, 05, 05]
+2601; [0C C3 09, 05, 05]
-1FB75; [0C BF A9, 05, 05]
+2602; [0C C3 10, 05, 05]
-1FB76; [0C BF B0, 05, 05]
+2603; [0C C3 17, 05, 05]
-1FB77; [0C BF B7, 05, 05]
+2604; [0C C3 1E, 05, 05]
-1FB78; [0C BF BE, 05, 05]
+2605; [0C C3 25, 05, 05]
-1FB79; [0C BF C5, 05, 05]
+2606; [0C C3 2C, 05, 05]
-1FB7A; [0C BF CC, 05, 05]
+2607; [0C C3 33, 05, 05]
-1FB7B; [0C BF D3, 05, 05]
+2608; [0C C3 3A, 05, 05]
-1FB7C; [0C BF DA, 05, 05]
+2609; [0C C3 41, 05, 05]
-1FB7D; [0C BF E1, 05, 05]
+260A; [0C C3 48, 05, 05]
-1FB7E; [0C BF E8, 05, 05]
+260B; [0C C3 4F, 05, 05]
-1FB7F; [0C BF EF, 05, 05]
+260C; [0C C3 56, 05, 05]
-1FB80; [0C BF F6, 05, 05]
+260D; [0C C3 5D, 05, 05]
-1FB81; [0C BF FD, 05, 05]
+260E; [0C C3 64, 05, 05]
-1FB82; [0C C0 06, 05, 05]
+260F; [0C C3 6B, 05, 05]
-1FB83; [0C C0 0D, 05, 05]
+2610; [0C C3 72, 05, 05]
-1FB84; [0C C0 14, 05, 05]
+2611; [0C C3 79, 05, 05]
-1FB85; [0C C0 1B, 05, 05]
+2612; [0C C3 80, 05, 05]
-1FB86; [0C C0 22, 05, 05]
+2613; [0C C3 87, 05, 05]
-1FB87; [0C C0 29, 05, 05]
+2614; [0C C3 8E, 05, 05]
-1FB88; [0C C0 30, 05, 05]
+2615; [0C C3 95, 05, 05]
-1FB89; [0C C0 37, 05, 05]
+2616; [0C C3 9C, 05, 05]
-1FB8A; [0C C0 3E, 05, 05]
+2617; [0C C3 A3, 05, 05]
-1FB8B; [0C C0 45, 05, 05]
+2618; [0C C3 AA, 05, 05]
-1FB8C; [0C C0 4C, 05, 05]
+2619; [0C C3 B1, 05, 05]
-1FB8D; [0C C0 53, 05, 05]
+261A; [0C C3 B8, 05, 05]
-1FB8E; [0C C0 5A, 05, 05]
+261B; [0C C3 BF, 05, 05]
-1FB8F; [0C C0 61, 05, 05]
+261C; [0C C3 C6, 05, 05]
-1FB90; [0C C0 68, 05, 05]
+261D; [0C C3 CD, 05, 05]
-1FB91; [0C C0 6F, 05, 05]
+261E; [0C C3 D4, 05, 05]
-1FB92; [0C C0 76, 05, 05]
+261F; [0C C3 DB, 05, 05]
-1FB94; [0C C0 7D, 05, 05]
+2620; [0C C3 E2, 05, 05]
-1FB95; [0C C0 84, 05, 05]
+2621; [0C C3 E9, 05, 05]
-1FB96; [0C C0 8B, 05, 05]
+2622; [0C C3 F0, 05, 05]
-1FB97; [0C C0 92, 05, 05]
+2623; [0C C3 F7, 05, 05]
-1FB98; [0C C0 99, 05, 05]
+2624; [0C C3 FE, 05, 05]
-1FB99; [0C C0 A0, 05, 05]
+2625; [0C C4 07, 05, 05]
-1FB9A; [0C C0 A7, 05, 05]
+2626; [0C C4 0E, 05, 05]
-1FB9B; [0C C0 AE, 05, 05]
+2627; [0C C4 15, 05, 05]
-1FB9C; [0C C0 B5, 05, 05]
+2628; [0C C4 1C, 05, 05]
-1FB9D; [0C C0 BC, 05, 05]
+2629; [0C C4 23, 05, 05]
-1FB9E; [0C C0 C3, 05, 05]
+262A; [0C C4 2A, 05, 05]
-1FB9F; [0C C0 CA, 05, 05]
+262B; [0C C4 31, 05, 05]
-1FBA0; [0C C0 D1, 05, 05]
+262C; [0C C4 38, 05, 05]
-1FBA1; [0C C0 D8, 05, 05]
+262D; [0C C4 3F, 05, 05]
-1FBA2; [0C C0 DF, 05, 05]
+262E; [0C C4 46, 05, 05]
-1FBA3; [0C C0 E6, 05, 05]
+262F; [0C C4 4D, 05, 05]
-1FBA4; [0C C0 ED, 05, 05]
+2638; [0C C4 54, 05, 05]
-1FBA5; [0C C0 F4, 05, 05]
+2639; [0C C4 5B, 05, 05]
-1FBA6; [0C C0 FB, 05, 05]
+263A; [0C C4 62, 05, 05]
-1FBA7; [0C C1 04, 05, 05]
+263B; [0C C4 69, 05, 05]
-1FBA8; [0C C1 0B, 05, 05]
+263C; [0C C4 70, 05, 05]
-1FBA9; [0C C1 12, 05, 05]
+263D; [0C C4 77, 05, 05]
-1FBAA; [0C C1 19, 05, 05]
+263E; [0C C4 7E, 05, 05]
-1FBAB; [0C C1 20, 05, 05]
+263F; [0C C4 85, 05, 05]
-1FBAC; [0C C1 27, 05, 05]
+2640; [0C C4 8C, 05, 05]
-1FBAD; [0C C1 2E, 05, 05]
+2641; [0C C4 93, 05, 05]
-1FBAE; [0C C1 35, 05, 05]
+2642; [0C C4 9A, 05, 05]
-1FBAF; [0C C1 3C, 05, 05]
+2643; [0C C4 A1, 05, 05]
-1FBB0; [0C C1 43, 05, 05]
+2644; [0C C4 A8, 05, 05]
-1FBB1; [0C C1 4A, 05, 05]
+2645; [0C C4 AF, 05, 05]
-1FBB2; [0C C1 51, 05, 05]
+2646; [0C C4 B6, 05, 05]
-1FBB3; [0C C1 58, 05, 05]
+2647; [0C C4 BD, 05, 05]
-1FBB4; [0C C1 5F, 05, 05]
+2648; [0C C4 C4, 05, 05]
-1FBB5; [0C C1 66, 05, 05]
+2649; [0C C4 CB, 05, 05]
-1FBB6; [0C C1 6D, 05, 05]
+264A; [0C C4 D2, 05, 05]
-1FBB7; [0C C1 74, 05, 05]
+264B; [0C C4 D9, 05, 05]
-1FBB8; [0C C1 7B, 05, 05]
+264C; [0C C4 E0, 05, 05]
-1FBB9; [0C C1 82, 05, 05]
+264D; [0C C4 E7, 05, 05]
-1FBBA; [0C C1 89, 05, 05]
+264E; [0C C4 EE, 05, 05]
-1FBBB; [0C C1 90, 05, 05]
+264F; [0C C4 F5, 05, 05]
-1FBBC; [0C C1 97, 05, 05]
+2650; [0C C4 FC, 05, 05]
-1FBBD; [0C C1 9E, 05, 05]
+2651; [0C C5 05, 05, 05]
-1FBBE; [0C C1 A5, 05, 05]
+2652; [0C C5 0C, 05, 05]
-1FBBF; [0C C1 AC, 05, 05]
+2653; [0C C5 13, 05, 05]
-1FBC0; [0C C1 B3, 05, 05]
+2654; [0C C5 1A, 05, 05]
-1FBC1; [0C C1 BA, 05, 05]
+2655; [0C C5 21, 05, 05]
-1FBC2; [0C C1 C1, 05, 05]
+2656; [0C C5 28, 05, 05]
-1FBC3; [0C C1 C8, 05, 05]
+2657; [0C C5 2F, 05, 05]
-1FBC4; [0C C1 CF, 05, 05]
+2658; [0C C5 36, 05, 05]
-1FBC5; [0C C1 D6, 05, 05]
+2659; [0C C5 3D, 05, 05]
-1FBC6; [0C C1 DD, 05, 05]
+265A; [0C C5 44, 05, 05]
-1FBC7; [0C C1 E4, 05, 05]
+265B; [0C C5 4B, 05, 05]
-1FBC8; [0C C1 EB, 05, 05]
+265C; [0C C5 52, 05, 05]
-1FBC9; [0C C1 F2, 05, 05]
+265D; [0C C5 59, 05, 05]
-1FBCA; [0C C1 F9, 05, 05]
+265E; [0C C5 60, 05, 05]
-2600; [0C C2 02, 05, 05]
+265F; [0C C5 67, 05, 05]
-2601; [0C C2 09, 05, 05]
+2660; [0C C5 6E, 05, 05]
-2602; [0C C2 10, 05, 05]
+2661; [0C C5 75, 05, 05]
-2603; [0C C2 17, 05, 05]
+2662; [0C C5 7C, 05, 05]
-2604; [0C C2 1E, 05, 05]
+2663; [0C C5 83, 05, 05]
-2605; [0C C2 25, 05, 05]
+2664; [0C C5 8A, 05, 05]
-2606; [0C C2 2C, 05, 05]
+2665; [0C C5 91, 05, 05]
-2607; [0C C2 33, 05, 05]
+2666; [0C C5 98, 05, 05]
-2608; [0C C2 3A, 05, 05]
+2667; [0C C5 9F, 05, 05]
-2609; [0C C2 41, 05, 05]
+2668; [0C C5 A6, 05, 05]
-260A; [0C C2 48, 05, 05]
+2669; [0C C5 AD, 05, 05]
-260B; [0C C2 4F, 05, 05]
+266A; [0C C5 B4, 05, 05]
-260C; [0C C2 56, 05, 05]
+266B; [0C C5 BB, 05, 05]
-260D; [0C C2 5D, 05, 05]
+266C; [0C C5 C2, 05, 05]
-260E; [0C C2 64, 05, 05]
+2670; [0C C5 C9, 05, 05]
-260F; [0C C2 6B, 05, 05]
+2671; [0C C5 D0, 05, 05]
-2610; [0C C2 72, 05, 05]
+2672; [0C C5 D7, 05, 05]
-2611; [0C C2 79, 05, 05]
+2673; [0C C5 DE, 05, 05]
-2612; [0C C2 80, 05, 05]
+2674; [0C C5 E5, 05, 05]
-2613; [0C C2 87, 05, 05]
+2675; [0C C5 EC, 05, 05]
-2614; [0C C2 8E, 05, 05]
+2676; [0C C5 F3, 05, 05]
-2615; [0C C2 95, 05, 05]
+2677; [0C C5 FA, 05, 05]
-2616; [0C C2 9C, 05, 05]
+2678; [0C C6 03, 05, 05]
-2617; [0C C2 A3, 05, 05]
+2679; [0C C6 0A, 05, 05]
-2618; [0C C2 AA, 05, 05]
+267A; [0C C6 11, 05, 05]
-2619; [0C C2 B1, 05, 05]
+267B; [0C C6 18, 05, 05]
-261A; [0C C2 B8, 05, 05]
+267C; [0C C6 1F, 05, 05]
-261B; [0C C2 BF, 05, 05]
+267D; [0C C6 26, 05, 05]
-261C; [0C C2 C6, 05, 05]
+267E; [0C C6 2D, 05, 05]
-261D; [0C C2 CD, 05, 05]
+267F; [0C C6 34, 05, 05]
-261E; [0C C2 D4, 05, 05]
+2680; [0C C6 3B, 05, 05]
-261F; [0C C2 DB, 05, 05]
+2681; [0C C6 42, 05, 05]
-2620; [0C C2 E2, 05, 05]
+2682; [0C C6 49, 05, 05]
-2621; [0C C2 E9, 05, 05]
+2683; [0C C6 50, 05, 05]
-2622; [0C C2 F0, 05, 05]
+2684; [0C C6 57, 05, 05]
-2623; [0C C2 F7, 05, 05]
+2685; [0C C6 5E, 05, 05]
-2624; [0C C2 FE, 05, 05]
+2686; [0C C6 65, 05, 05]
-2625; [0C C3 07, 05, 05]
+2687; [0C C6 6C, 05, 05]
-2626; [0C C3 0E, 05, 05]
+2688; [0C C6 73, 05, 05]
-2627; [0C C3 15, 05, 05]
+2689; [0C C6 7A, 05, 05]
-2628; [0C C3 1C, 05, 05]
+2690; [0C C6 81, 05, 05]
-2629; [0C C3 23, 05, 05]
+2691; [0C C6 88, 05, 05]
-262A; [0C C3 2A, 05, 05]
+2692; [0C C6 8F, 05, 05]
-262B; [0C C3 31, 05, 05]
+2693; [0C C6 96, 05, 05]
-262C; [0C C3 38, 05, 05]
+2694; [0C C6 9D, 05, 05]
-262D; [0C C3 3F, 05, 05]
+2695; [0C C6 A4, 05, 05]
-262E; [0C C3 46, 05, 05]
+2696; [0C C6 AB, 05, 05]
-262F; [0C C3 4D, 05, 05]
+2697; [0C C6 B2, 05, 05]
-2638; [0C C3 54, 05, 05]
+2698; [0C C6 B9, 05, 05]
-2639; [0C C3 5B, 05, 05]
+2699; [0C C6 C0, 05, 05]
-263A; [0C C3 62, 05, 05]
+269A; [0C C6 C7, 05, 05]
-263B; [0C C3 69, 05, 05]
+269B; [0C C6 CE, 05, 05]
-263C; [0C C3 70, 05, 05]
+269C; [0C C6 D5, 05, 05]
-263D; [0C C3 77, 05, 05]
+269D; [0C C6 DC, 05, 05]
-263E; [0C C3 7E, 05, 05]
+269E; [0C C6 E3, 05, 05]
-263F; [0C C3 85, 05, 05]
+269F; [0C C6 EA, 05, 05]
-2640; [0C C3 8C, 05, 05]
+26A0; [0C C6 F1, 05, 05]
-2641; [0C C3 93, 05, 05]
+26A1; [0C C6 F8, 05, 05]
-2642; [0C C3 9A, 05, 05]
+26A2; [0C C6 FF, 05, 05]
-2643; [0C C3 A1, 05, 05]
+26A3; [0C C7 08, 05, 05]
-2644; [0C C3 A8, 05, 05]
+26A4; [0C C7 0F, 05, 05]
-2645; [0C C3 AF, 05, 05]
+26A5; [0C C7 16, 05, 05]
-2646; [0C C3 B6, 05, 05]
+26A6; [0C C7 1D, 05, 05]
-2647; [0C C3 BD, 05, 05]
+26A7; [0C C7 24, 05, 05]
-2648; [0C C3 C4, 05, 05]
+26A8; [0C C7 2B, 05, 05]
-2649; [0C C3 CB, 05, 05]
+26A9; [0C C7 32, 05, 05]
-264A; [0C C3 D2, 05, 05]
+26AA; [0C C7 39, 05, 05]
-264B; [0C C3 D9, 05, 05]
+26AB; [0C C7 40, 05, 05]
-264C; [0C C3 E0, 05, 05]
+26AC; [0C C7 47, 05, 05]
-264D; [0C C3 E7, 05, 05]
+26AD; [0C C7 4E, 05, 05]
-264E; [0C C3 EE, 05, 05]
+26AE; [0C C7 55, 05, 05]
-264F; [0C C3 F5, 05, 05]
+26AF; [0C C7 5C, 05, 05]
-2650; [0C C3 FC, 05, 05]
+26B0; [0C C7 63, 05, 05]
-2651; [0C C4 05, 05, 05]
+26B1; [0C C7 6A, 05, 05]
-2652; [0C C4 0C, 05, 05]
+26B2; [0C C7 71, 05, 05]
-2653; [0C C4 13, 05, 05]
+26B3; [0C C7 78, 05, 05]
-2654; [0C C4 1A, 05, 05]
+26B4; [0C C7 7F, 05, 05]
-2655; [0C C4 21, 05, 05]
+26B5; [0C C7 86, 05, 05]
-2656; [0C C4 28, 05, 05]
+26B6; [0C C7 8D, 05, 05]
-2657; [0C C4 2F, 05, 05]
+26B7; [0C C7 94, 05, 05]
-2658; [0C C4 36, 05, 05]
+26B8; [0C C7 9B, 05, 05]
-2659; [0C C4 3D, 05, 05]
+26B9; [0C C7 A2, 05, 05]
-265A; [0C C4 44, 05, 05]
+26BA; [0C C7 A9, 05, 05]
-265B; [0C C4 4B, 05, 05]
+26BB; [0C C7 B0, 05, 05]
-265C; [0C C4 52, 05, 05]
+26BC; [0C C7 B7, 05, 05]
-265D; [0C C4 59, 05, 05]
+26BD; [0C C7 BE, 05, 05]
-265E; [0C C4 60, 05, 05]
+26BE; [0C C7 C5, 05, 05]
-265F; [0C C4 67, 05, 05]
+26BF; [0C C7 CC, 05, 05]
-2660; [0C C4 6E, 05, 05]
+26C0; [0C C7 D3, 05, 05]
-2661; [0C C4 75, 05, 05]
+26C1; [0C C7 DA, 05, 05]
-2662; [0C C4 7C, 05, 05]
+26C2; [0C C7 E1, 05, 05]
-2663; [0C C4 83, 05, 05]
+26C3; [0C C7 E8, 05, 05]
-2664; [0C C4 8A, 05, 05]
+26C4; [0C C7 EF, 05, 05]
-2665; [0C C4 91, 05, 05]
+26C5; [0C C7 F6, 05, 05]
-2666; [0C C4 98, 05, 05]
+26C6; [0C C7 FD, 05, 05]
-2667; [0C C4 9F, 05, 05]
+26C7; [0C C8 06, 05, 05]
-2668; [0C C4 A6, 05, 05]
+26C8; [0C C8 0D, 05, 05]
-2669; [0C C4 AD, 05, 05]
+26C9; [0C C8 14, 05, 05]
-266A; [0C C4 B4, 05, 05]
+26CA; [0C C8 1B, 05, 05]
-266B; [0C C4 BB, 05, 05]
+26CB; [0C C8 22, 05, 05]
-266C; [0C C4 C2, 05, 05]
+26CC; [0C C8 29, 05, 05]
-2670; [0C C4 C9, 05, 05]
+26CD; [0C C8 30, 05, 05]
-2671; [0C C4 D0, 05, 05]
+26CE; [0C C8 37, 05, 05]
-2672; [0C C4 D7, 05, 05]
+26CF; [0C C8 3E, 05, 05]
-2673; [0C C4 DE, 05, 05]
+26D0; [0C C8 45, 05, 05]
-2674; [0C C4 E5, 05, 05]
+26D1; [0C C8 4C, 05, 05]
-2675; [0C C4 EC, 05, 05]
+26D2; [0C C8 53, 05, 05]
-2676; [0C C4 F3, 05, 05]
+26D3; [0C C8 5A, 05, 05]
-2677; [0C C4 FA, 05, 05]
+26D4; [0C C8 61, 05, 05]
-2678; [0C C5 03, 05, 05]
+26D5; [0C C8 68, 05, 05]
-2679; [0C C5 0A, 05, 05]
+26D6; [0C C8 6F, 05, 05]
-267A; [0C C5 11, 05, 05]
+26D7; [0C C8 76, 05, 05]
-267B; [0C C5 18, 05, 05]
+26D8; [0C C8 7D, 05, 05]
-267C; [0C C5 1F, 05, 05]
+26D9; [0C C8 84, 05, 05]
-267D; [0C C5 26, 05, 05]
+26DA; [0C C8 8B, 05, 05]
-267E; [0C C5 2D, 05, 05]
+26DB; [0C C8 92, 05, 05]
-267F; [0C C5 34, 05, 05]
+26DC; [0C C8 99, 05, 05]
-2680; [0C C5 3B, 05, 05]
+26DD; [0C C8 A0, 05, 05]
-2681; [0C C5 42, 05, 05]
+26DE; [0C C8 A7, 05, 05]
-2682; [0C C5 49, 05, 05]
+26DF; [0C C8 AE, 05, 05]
-2683; [0C C5 50, 05, 05]
+26E0; [0C C8 B5, 05, 05]
-2684; [0C C5 57, 05, 05]
+26E1; [0C C8 BC, 05, 05]
-2685; [0C C5 5E, 05, 05]
+26E2; [0C C8 C3, 05, 05]
-2686; [0C C5 65, 05, 05]
+26E3; [0C C8 CA, 05, 05]
-2687; [0C C5 6C, 05, 05]
+26E4; [0C C8 D1, 05, 05]
-2688; [0C C5 73, 05, 05]
+26E5; [0C C8 D8, 05, 05]
-2689; [0C C5 7A, 05, 05]
+26E6; [0C C8 DF, 05, 05]
-2690; [0C C5 81, 05, 05]
+26E7; [0C C8 E6, 05, 05]
-2691; [0C C5 88, 05, 05]
+26E8; [0C C8 ED, 05, 05]
-2692; [0C C5 8F, 05, 05]
+26E9; [0C C8 F4, 05, 05]
-2693; [0C C5 96, 05, 05]
+26EA; [0C C8 FB, 05, 05]
-2694; [0C C5 9D, 05, 05]
+26EB; [0C C9 04, 05, 05]
-2695; [0C C5 A4, 05, 05]
+26EC; [0C C9 0B, 05, 05]
-2696; [0C C5 AB, 05, 05]
+26ED; [0C C9 12, 05, 05]
-2697; [0C C5 B2, 05, 05]
+26EE; [0C C9 19, 05, 05]
-2698; [0C C5 B9, 05, 05]
+26EF; [0C C9 20, 05, 05]
-2699; [0C C5 C0, 05, 05]
+26F0; [0C C9 27, 05, 05]
-269A; [0C C5 C7, 05, 05]
+26F1; [0C C9 2E, 05, 05]
-269B; [0C C5 CE, 05, 05]
+26F2; [0C C9 35, 05, 05]
-269C; [0C C5 D5, 05, 05]
+26F3; [0C C9 3C, 05, 05]
-269D; [0C C5 DC, 05, 05]
+26F4; [0C C9 43, 05, 05]
-269E; [0C C5 E3, 05, 05]
+26F5; [0C C9 4A, 05, 05]
-269F; [0C C5 EA, 05, 05]
+26F6; [0C C9 51, 05, 05]
-26A0; [0C C5 F1, 05, 05]
+26F7; [0C C9 58, 05, 05]
-26A1; [0C C5 F8, 05, 05]
+26F8; [0C C9 5F, 05, 05]
-26A2; [0C C5 FF, 05, 05]
+26F9; [0C C9 66, 05, 05]
-26A3; [0C C6 08, 05, 05]
+26FA; [0C C9 6D, 05, 05]
-26A4; [0C C6 0F, 05, 05]
+26FB; [0C C9 74, 05, 05]
-26A5; [0C C6 16, 05, 05]
+26FC; [0C C9 7B, 05, 05]
-26A6; [0C C6 1D, 05, 05]
+26FD; [0C C9 82, 05, 05]
-26A7; [0C C6 24, 05, 05]
+26FE; [0C C9 89, 05, 05]
-26A8; [0C C6 2B, 05, 05]
+26FF; [0C C9 90, 05, 05]
-26A9; [0C C6 32, 05, 05]
+1F1E6; [0C C9 97, 05, 05]
-26AA; [0C C6 39, 05, 05]
+1F1E7; [0C C9 9E, 05, 05]
-26AB; [0C C6 40, 05, 05]
+1F1E8; [0C C9 A5, 05, 05]
-26AC; [0C C6 47, 05, 05]
+1F1E9; [0C C9 AC, 05, 05]
-26AD; [0C C6 4E, 05, 05]
+1F1EA; [0C C9 B3, 05, 05]
-26AE; [0C C6 55, 05, 05]
+1F1EB; [0C C9 BA, 05, 05]
-26AF; [0C C6 5C, 05, 05]
+1F1EC; [0C C9 C1, 05, 05]
-26B0; [0C C6 63, 05, 05]
+1F1ED; [0C C9 C8, 05, 05]
-26B1; [0C C6 6A, 05, 05]
+1F1EE; [0C C9 CF, 05, 05]
-26B2; [0C C6 71, 05, 05]
+1F1EF; [0C C9 D6, 05, 05]
-26B3; [0C C6 78, 05, 05]
+1F1F0; [0C C9 DD, 05, 05]
-26B4; [0C C6 7F, 05, 05]
+1F1F1; [0C C9 E4, 05, 05]
-26B5; [0C C6 86, 05, 05]
+1F1F2; [0C C9 EB, 05, 05]
-26B6; [0C C6 8D, 05, 05]
+1F1F3; [0C C9 F2, 05, 05]
-26B7; [0C C6 94, 05, 05]
+1F1F4; [0C C9 F9, 05, 05]
-26B8; [0C C6 9B, 05, 05]
+1F1F5; [0C CA 02, 05, 05]
-26B9; [0C C6 A2, 05, 05]
+1F1F6; [0C CA 09, 05, 05]
-26BA; [0C C6 A9, 05, 05]
+1F1F7; [0C CA 10, 05, 05]
-26BB; [0C C6 B0, 05, 05]
+1F1F8; [0C CA 17, 05, 05]
-26BC; [0C C6 B7, 05, 05]
+1F1F9; [0C CA 1E, 05, 05]
-26BD; [0C C6 BE, 05, 05]
+1F1FA; [0C CA 25, 05, 05]
-26BE; [0C C6 C5, 05, 05]
+1F1FB; [0C CA 2C, 05, 05]
-26BF; [0C C6 CC, 05, 05]
+1F1FC; [0C CA 33, 05, 05]
-26C0; [0C C6 D3, 05, 05]
+1F1FD; [0C CA 3A, 05, 05]
-26C1; [0C C6 DA, 05, 05]
+1F1FE; [0C CA 41, 05, 05]
-26C2; [0C C6 E1, 05, 05]
+1F1FF; [0C CA 48, 05, 05]
-26C3; [0C C6 E8, 05, 05]
+2700; [0C CA 4F, 05, 05]
-26C4; [0C C6 EF, 05, 05]
+2701; [0C CA 56, 05, 05]
-26C5; [0C C6 F6, 05, 05]
+2702; [0C CA 5D, 05, 05]
-26C6; [0C C6 FD, 05, 05]
+2703; [0C CA 64, 05, 05]
-26C7; [0C C7 06, 05, 05]
+2704; [0C CA 6B, 05, 05]
-26C8; [0C C7 0D, 05, 05]
+2705; [0C CA 72, 05, 05]
-26C9; [0C C7 14, 05, 05]
+2706; [0C CA 79, 05, 05]
-26CA; [0C C7 1B, 05, 05]
+2707; [0C CA 80, 05, 05]
-26CB; [0C C7 22, 05, 05]
+2708; [0C CA 87, 05, 05]
-26CC; [0C C7 29, 05, 05]
+2709; [0C CA 8E, 05, 05]
-26CD; [0C C7 30, 05, 05]
+270A; [0C CA 95, 05, 05]
-26CE; [0C C7 37, 05, 05]
+270B; [0C CA 9C, 05, 05]
-26CF; [0C C7 3E, 05, 05]
+270C; [0C CA A3, 05, 05]
-26D0; [0C C7 45, 05, 05]
+270D; [0C CA AA, 05, 05]
-26D1; [0C C7 4C, 05, 05]
+270E; [0C CA B1, 05, 05]
-26D2; [0C C7 53, 05, 05]
+270F; [0C CA B8, 05, 05]
-26D3; [0C C7 5A, 05, 05]
+2710; [0C CA BF, 05, 05]
-26D4; [0C C7 61, 05, 05]
+2711; [0C CA C6, 05, 05]
-26D5; [0C C7 68, 05, 05]
+2712; [0C CA CD, 05, 05]
-26D6; [0C C7 6F, 05, 05]
+2713; [0C CA D4, 05, 05]
-26D7; [0C C7 76, 05, 05]
+2714; [0C CA DB, 05, 05]
-26D8; [0C C7 7D, 05, 05]
+2715; [0C CA E2, 05, 05]
-26D9; [0C C7 84, 05, 05]
+2716; [0C CA E9, 05, 05]
-26DA; [0C C7 8B, 05, 05]
+2717; [0C CA F0, 05, 05]
-26DB; [0C C7 92, 05, 05]
+2718; [0C CA F7, 05, 05]
-26DC; [0C C7 99, 05, 05]
+2719; [0C CA FE, 05, 05]
-26DD; [0C C7 A0, 05, 05]
+271A; [0C CB 07, 05, 05]
-26DE; [0C C7 A7, 05, 05]
+271B; [0C CB 0E, 05, 05]
-26DF; [0C C7 AE, 05, 05]
+271C; [0C CB 15, 05, 05]
-26E0; [0C C7 B5, 05, 05]
+271D; [0C CB 1C, 05, 05]
-26E1; [0C C7 BC, 05, 05]
+271E; [0C CB 23, 05, 05]
-26E2; [0C C7 C3, 05, 05]
+271F; [0C CB 2A, 05, 05]
-26E3; [0C C7 CA, 05, 05]
+2720; [0C CB 31, 05, 05]
-26E4; [0C C7 D1, 05, 05]
+2E50; [0C CB 38, 05, 05]
-26E5; [0C C7 D8, 05, 05]
+2E51; [0C CB 3F, 05, 05]
-26E6; [0C C7 DF, 05, 05]
+2721; [0C CB 46, 05, 05]
-26E7; [0C C7 E6, 05, 05]
+2722; [0C CB 4D, 05, 05]
-26E8; [0C C7 ED, 05, 05]
+2723; [0C CB 54, 05, 05]
-26E9; [0C C7 F4, 05, 05]
+2724; [0C CB 5B, 05, 05]
-26EA; [0C C7 FB, 05, 05]
+2725; [0C CB 62, 05, 05]
-26EB; [0C C8 04, 05, 05]
+2726; [0C CB 69, 05, 05]
-26EC; [0C C8 0B, 05, 05]
+2727; [0C CB 70, 05, 05]
-26ED; [0C C8 12, 05, 05]
+2728; [0C CB 77, 05, 05]
-26EE; [0C C8 19, 05, 05]
+2729; [0C CB 7E, 05, 05]
-26EF; [0C C8 20, 05, 05]
+272A; [0C CB 85, 05, 05]
-26F0; [0C C8 27, 05, 05]
+272B; [0C CB 8C, 05, 05]
-26F1; [0C C8 2E, 05, 05]
+272C; [0C CB 93, 05, 05]
-26F2; [0C C8 35, 05, 05]
+272D; [0C CB 9A, 05, 05]
-26F3; [0C C8 3C, 05, 05]
+272E; [0C CB A1, 05, 05]
-26F4; [0C C8 43, 05, 05]
+272F; [0C CB A8, 05, 05]
-26F5; [0C C8 4A, 05, 05]
+2730; [0C CB AF, 05, 05]
-26F6; [0C C8 51, 05, 05]
+2731; [0C CB B6, 05, 05]
-26F7; [0C C8 58, 05, 05]
+2732; [0C CB BD, 05, 05]
-26F8; [0C C8 5F, 05, 05]
+2733; [0C CB C4, 05, 05]
-26F9; [0C C8 66, 05, 05]
+2734; [0C CB CB, 05, 05]
-26FA; [0C C8 6D, 05, 05]
+2735; [0C CB D2, 05, 05]
-26FB; [0C C8 74, 05, 05]
+2736; [0C CB D9, 05, 05]
-26FC; [0C C8 7B, 05, 05]
+2737; [0C CB E0, 05, 05]
-26FD; [0C C8 82, 05, 05]
+2738; [0C CB E7, 05, 05]
-26FE; [0C C8 89, 05, 05]
+2739; [0C CB EE, 05, 05]
-26FF; [0C C8 90, 05, 05]
+273A; [0C CB F5, 05, 05]
-1F1E6; [0C C8 97, 05, 05]
+273B; [0C CB FC, 05, 05]
-1F1E7; [0C C8 9E, 05, 05]
+273C; [0C CC 05, 05, 05]
-1F1E8; [0C C8 A5, 05, 05]
+273D; [0C CC 0C, 05, 05]
-1F1E9; [0C C8 AC, 05, 05]
+273E; [0C CC 13, 05, 05]
-1F1EA; [0C C8 B3, 05, 05]
+273F; [0C CC 1A, 05, 05]
-1F1EB; [0C C8 BA, 05, 05]
+2740; [0C CC 21, 05, 05]
-1F1EC; [0C C8 C1, 05, 05]
+2741; [0C CC 28, 05, 05]
-1F1ED; [0C C8 C8, 05, 05]
+2742; [0C CC 2F, 05, 05]
-1F1EE; [0C C8 CF, 05, 05]
+2743; [0C CC 36, 05, 05]
-1F1EF; [0C C8 D6, 05, 05]
+2744; [0C CC 3D, 05, 05]
-1F1F0; [0C C8 DD, 05, 05]
+2745; [0C CC 44, 05, 05]
-1F1F1; [0C C8 E4, 05, 05]
+2746; [0C CC 4B, 05, 05]
-1F1F2; [0C C8 EB, 05, 05]
+2747; [0C CC 52, 05, 05]
-1F1F3; [0C C8 F2, 05, 05]
+2748; [0C CC 59, 05, 05]
-1F1F4; [0C C8 F9, 05, 05]
+2749; [0C CC 60, 05, 05]
-1F1F5; [0C C9 02, 05, 05]
+274A; [0C CC 67, 05, 05]
-1F1F6; [0C C9 09, 05, 05]
+274B; [0C CC 6E, 05, 05]
-1F1F7; [0C C9 10, 05, 05]
+274C; [0C CC 75, 05, 05]
-1F1F8; [0C C9 17, 05, 05]
+274D; [0C CC 7C, 05, 05]
-1F1F9; [0C C9 1E, 05, 05]
+274E; [0C CC 83, 05, 05]
-1F1FA; [0C C9 25, 05, 05]
+274F; [0C CC 8A, 05, 05]
-1F1FB; [0C C9 2C, 05, 05]
+2750; [0C CC 91, 05, 05]
-1F1FC; [0C C9 33, 05, 05]
+2751; [0C CC 98, 05, 05]
-1F1FD; [0C C9 3A, 05, 05]
+2752; [0C CC 9F, 05, 05]
-1F1FE; [0C C9 41, 05, 05]
+2753; [0C CC A6, 05, 05]
-1F1FF; [0C C9 48, 05, 05]
+2754; [0C CC AD, 05, 05]
-2700; [0C C9 4F, 05, 05]
+2755; [0C CC B4, 05, 05]
-2701; [0C C9 56, 05, 05]
+2756; [0C CC BB, 05, 05]
-2702; [0C C9 5D, 05, 05]
+2757; [0C CC C2, 05, 05]
-2703; [0C C9 64, 05, 05]
+2758; [0C CC C9, 05, 05]
-2704; [0C C9 6B, 05, 05]
+2759; [0C CC D0, 05, 05]
-2705; [0C C9 72, 05, 05]
+275A; [0C CC D7, 05, 05]
-2706; [0C C9 79, 05, 05]
+275B; [0C CC DE, 05, 05]
-2707; [0C C9 80, 05, 05]
+275C; [0C CC E5, 05, 05]
-2708; [0C C9 87, 05, 05]
+275D; [0C CC EC, 05, 05]
-2709; [0C C9 8E, 05, 05]
+275E; [0C CC F3, 05, 05]
-270A; [0C C9 95, 05, 05]
+275F; [0C CC FA, 05, 05]
-270B; [0C C9 9C, 05, 05]
+2760; [0C CD 03, 05, 05]
-270C; [0C C9 A3, 05, 05]
+2761; [0C CD 0A, 05, 05]
-270D; [0C C9 AA, 05, 05]
+2762; [0C CD 11, 05, 05]
-270E; [0C C9 B1, 05, 05]
+2763; [0C CD 18, 05, 05]
-270F; [0C C9 B8, 05, 05]
+2764; [0C CD 1F, 05, 05]
-2710; [0C C9 BF, 05, 05]
+2765; [0C CD 26, 05, 05]
-2711; [0C C9 C6, 05, 05]
+2766; [0C CD 2D, 05, 05]
-2712; [0C C9 CD, 05, 05]
+2767; [0C CD 34, 05, 05]
-2713; [0C C9 D4, 05, 05]
+2794; [0C CD 3B, 05, 05]
-2714; [0C C9 DB, 05, 05]
+2795; [0C CD 42, 05, 05]
-2715; [0C C9 E2, 05, 05]
+2796; [0C CD 49, 05, 05]
-2716; [0C C9 E9, 05, 05]
+2797; [0C CD 50, 05, 05]
-2717; [0C C9 F0, 05, 05]
+2798; [0C CD 57, 05, 05]
-2718; [0C C9 F7, 05, 05]
+2799; [0C CD 5E, 05, 05]
-2719; [0C C9 FE, 05, 05]
+279A; [0C CD 65, 05, 05]
-271A; [0C CA 07, 05, 05]
+279B; [0C CD 6C, 05, 05]
-271B; [0C CA 0E, 05, 05]
+279C; [0C CD 73, 05, 05]
-271C; [0C CA 15, 05, 05]
+279D; [0C CD 7A, 05, 05]
-271D; [0C CA 1C, 05, 05]
+279E; [0C CD 81, 05, 05]
-271E; [0C CA 23, 05, 05]
+279F; [0C CD 88, 05, 05]
-271F; [0C CA 2A, 05, 05]
+27A0; [0C CD 8F, 05, 05]
-2720; [0C CA 31, 05, 05]
+27A1; [0C CD 96, 05, 05]
-2E50; [0C CA 38, 05, 05]
+27A2; [0C CD 9D, 05, 05]
-2E51; [0C CA 3F, 05, 05]
+27A3; [0C CD A4, 05, 05]
-2721; [0C CA 46, 05, 05]
+27A4; [0C CD AB, 05, 05]
-2722; [0C CA 4D, 05, 05]
+27A5; [0C CD B2, 05, 05]
-2723; [0C CA 54, 05, 05]
+27A6; [0C CD B9, 05, 05]
-2724; [0C CA 5B, 05, 05]
+27A7; [0C CD C0, 05, 05]
-2725; [0C CA 62, 05, 05]
+27A8; [0C CD C7, 05, 05]
-2726; [0C CA 69, 05, 05]
+27A9; [0C CD CE, 05, 05]
-2727; [0C CA 70, 05, 05]
+27AA; [0C CD D5, 05, 05]
-2728; [0C CA 77, 05, 05]
+27AB; [0C CD DC, 05, 05]
-2729; [0C CA 7E, 05, 05]
+27AC; [0C CD E3, 05, 05]
-272A; [0C CA 85, 05, 05]
+27AD; [0C CD EA, 05, 05]
-272B; [0C CA 8C, 05, 05]
+27AE; [0C CD F1, 05, 05]
-272C; [0C CA 93, 05, 05]
+27AF; [0C CD F8, 05, 05]
-272D; [0C CA 9A, 05, 05]
+27B0; [0C CD FF, 05, 05]
-272E; [0C CA A1, 05, 05]
+27B1; [0C CE 08, 05, 05]
-272F; [0C CA A8, 05, 05]
+27B2; [0C CE 0F, 05, 05]
-2730; [0C CA AF, 05, 05]
+27B3; [0C CE 16, 05, 05]
-2731; [0C CA B6, 05, 05]
+27B4; [0C CE 1D, 05, 05]
-2732; [0C CA BD, 05, 05]
+27B5; [0C CE 24, 05, 05]
-2733; [0C CA C4, 05, 05]
+27B6; [0C CE 2B, 05, 05]
-2734; [0C CA CB, 05, 05]
+27B7; [0C CE 32, 05, 05]
-2735; [0C CA D2, 05, 05]
+27B8; [0C CE 39, 05, 05]
-2736; [0C CA D9, 05, 05]
+27B9; [0C CE 40, 05, 05]
-2737; [0C CA E0, 05, 05]
+27BA; [0C CE 47, 05, 05]
-2738; [0C CA E7, 05, 05]
+27BB; [0C CE 4E, 05, 05]
-2739; [0C CA EE, 05, 05]
+27BC; [0C CE 55, 05, 05]
-273A; [0C CA F5, 05, 05]
+27BD; [0C CE 5C, 05, 05]
-273B; [0C CA FC, 05, 05]
+27BE; [0C CE 63, 05, 05]
-273C; [0C CB 05, 05, 05]
+27BF; [0C CE 6A, 05, 05]
-273D; [0C CB 0C, 05, 05]
+27C0; [0C CE 71, 05, 05]
-273E; [0C CB 13, 05, 05]
+27C1; [0C CE 78, 05, 05]
-273F; [0C CB 1A, 05, 05]
+27C2; [0C CE 7F, 05, 05]
-2740; [0C CB 21, 05, 05]
+27C3; [0C CE 86, 05, 05]
-2741; [0C CB 28, 05, 05]
+27C4; [0C CE 8D, 05, 05]
-2742; [0C CB 2F, 05, 05]
+27C7; [0C CE 94, 05, 05]
-2743; [0C CB 36, 05, 05]
+27C8; [0C CE 9B, 05, 05]
-2744; [0C CB 3D, 05, 05]
+27C9; [0C CE A2, 05, 05]
-2745; [0C CB 44, 05, 05]
+27CA; [0C CE A9, 05, 05]
-2746; [0C CB 4B, 05, 05]
+27CB; [0C CE B0, 05, 05]
-2747; [0C CB 52, 05, 05]
+27CC; [0C CE B7, 05, 05]
-2748; [0C CB 59, 05, 05]
+27CD; [0C CE BE, 05, 05]
-2749; [0C CB 60, 05, 05]
+27CE; [0C CE C5, 05, 05]
-274A; [0C CB 67, 05, 05]
+27CF; [0C CE CC, 05, 05]
-274B; [0C CB 6E, 05, 05]
+27D0; [0C CE D3, 05, 05]
-274C; [0C CB 75, 05, 05]
+27D1; [0C CE DA, 05, 05]
-274D; [0C CB 7C, 05, 05]
+27D2; [0C CE E1, 05, 05]
-274E; [0C CB 83, 05, 05]
+27D3; [0C CE E8, 05, 05]
-274F; [0C CB 8A, 05, 05]
+27D4; [0C CE EF, 05, 05]
-2750; [0C CB 91, 05, 05]
+27D5; [0C CE F6, 05, 05]
-2751; [0C CB 98, 05, 05]
+27D6; [0C CE FD, 05, 05]
-2752; [0C CB 9F, 05, 05]
+27D7; [0C CF 06, 05, 05]
-2753; [0C CB A6, 05, 05]
+27D8; [0C CF 0D, 05, 05]
-2754; [0C CB AD, 05, 05]
+27D9; [0C CF 14, 05, 05]
-2755; [0C CB B4, 05, 05]
+27DA; [0C CF 1B, 05, 05]
-2756; [0C CB BB, 05, 05]
+27DB; [0C CF 22, 05, 05]
-2757; [0C CB C2, 05, 05]
+27DC; [0C CF 29, 05, 05]
-2758; [0C CB C9, 05, 05]
+27DD; [0C CF 30, 05, 05]
-2759; [0C CB D0, 05, 05]
+27DE; [0C CF 37, 05, 05]
-275A; [0C CB D7, 05, 05]
+27DF; [0C CF 3E, 05, 05]
-275B; [0C CB DE, 05, 05]
+27E0; [0C CF 45, 05, 05]
-275C; [0C CB E5, 05, 05]
+27E1; [0C CF 4C, 05, 05]
-275D; [0C CB EC, 05, 05]
+27E2; [0C CF 53, 05, 05]
-275E; [0C CB F3, 05, 05]
+27E3; [0C CF 5A, 05, 05]
-275F; [0C CB FA, 05, 05]
+27E4; [0C CF 61, 05, 05]
-2760; [0C CC 03, 05, 05]
+27E5; [0C CF 68, 05, 05]
-2761; [0C CC 0A, 05, 05]
+27F0; [0C CF 6F, 05, 05]
-2762; [0C CC 11, 05, 05]
+27F1; [0C CF 76, 05, 05]
-2763; [0C CC 18, 05, 05]
+27F2; [0C CF 7D, 05, 05]
-2764; [0C CC 1F, 05, 05]
+27F3; [0C CF 84, 05, 05]
-2765; [0C CC 26, 05, 05]
+27F4; [0C CF 8B, 05, 05]
-2766; [0C CC 2D, 05, 05]
+27F5; [0C CF 92, 05, 05]
-2767; [0C CC 34, 05, 05]
+27F6; [0C CF 99, 05, 05]
-2794; [0C CC 3B, 05, 05]
+27F7; [0C CF A0, 05, 05]
-2795; [0C CC 42, 05, 05]
+27F8; [0C CF A7, 05, 05]
-2796; [0C CC 49, 05, 05]
+27F9; [0C CF AE, 05, 05]
-2797; [0C CC 50, 05, 05]
+27FA; [0C CF B5, 05, 05]
-2798; [0C CC 57, 05, 05]
+27FB; [0C CF BC, 05, 05]
-2799; [0C CC 5E, 05, 05]
+27FC; [0C CF C3, 05, 05]
-279A; [0C CC 65, 05, 05]
+27FD; [0C CF CA, 05, 05]
-279B; [0C CC 6C, 05, 05]
+27FE; [0C CF D1, 05, 05]
-279C; [0C CC 73, 05, 05]
+27FF; [0C CF D8, 05, 05]
-279D; [0C CC 7A, 05, 05]
+2900; [0C CF DF, 05, 05]
-279E; [0C CC 81, 05, 05]
+2901; [0C CF E6, 05, 05]
-279F; [0C CC 88, 05, 05]
+2902; [0C CF ED, 05, 05]
-27A0; [0C CC 8F, 05, 05]
+2903; [0C CF F4, 05, 05]
-27A1; [0C CC 96, 05, 05]
+2904; [0C CF FB, 05, 05]
-27A2; [0C CC 9D, 05, 05]
+2905; [0C D0 04, 05, 05]
-27A3; [0C CC A4, 05, 05]
+2906; [0C D0 0B, 05, 05]
-27A4; [0C CC AB, 05, 05]
+2907; [0C D0 12, 05, 05]
-27A5; [0C CC B2, 05, 05]
+2908; [0C D0 19, 05, 05]
-27A6; [0C CC B9, 05, 05]
+2909; [0C D0 20, 05, 05]
-27A7; [0C CC C0, 05, 05]
+290A; [0C D0 27, 05, 05]
-27A8; [0C CC C7, 05, 05]
+290B; [0C D0 2E, 05, 05]
-27A9; [0C CC CE, 05, 05]
+290C; [0C D0 35, 05, 05]
-27AA; [0C CC D5, 05, 05]
+290D; [0C D0 3C, 05, 05]
-27AB; [0C CC DC, 05, 05]
+290E; [0C D0 43, 05, 05]
-27AC; [0C CC E3, 05, 05]
+290F; [0C D0 4A, 05, 05]
-27AD; [0C CC EA, 05, 05]
+2910; [0C D0 51, 05, 05]
-27AE; [0C CC F1, 05, 05]
+2911; [0C D0 58, 05, 05]
-27AF; [0C CC F8, 05, 05]
+2912; [0C D0 5F, 05, 05]
-27B0; [0C CC FF, 05, 05]
+2913; [0C D0 66, 05, 05]
-27B1; [0C CD 08, 05, 05]
+2914; [0C D0 6D, 05, 05]
-27B2; [0C CD 0F, 05, 05]
+2915; [0C D0 74, 05, 05]
-27B3; [0C CD 16, 05, 05]
+2916; [0C D0 7B, 05, 05]
-27B4; [0C CD 1D, 05, 05]
+2917; [0C D0 82, 05, 05]
-27B5; [0C CD 24, 05, 05]
+2918; [0C D0 89, 05, 05]
-27B6; [0C CD 2B, 05, 05]
+2919; [0C D0 90, 05, 05]
-27B7; [0C CD 32, 05, 05]
+291A; [0C D0 97, 05, 05]
-27B8; [0C CD 39, 05, 05]
+291B; [0C D0 9E, 05, 05]
-27B9; [0C CD 40, 05, 05]
+291C; [0C D0 A5, 05, 05]
-27BA; [0C CD 47, 05, 05]
+291D; [0C D0 AC, 05, 05]
-27BB; [0C CD 4E, 05, 05]
+291E; [0C D0 B3, 05, 05]
-27BC; [0C CD 55, 05, 05]
+291F; [0C D0 BA, 05, 05]
-27BD; [0C CD 5C, 05, 05]
+2920; [0C D0 C1, 05, 05]
-27BE; [0C CD 63, 05, 05]
+2921; [0C D0 C8, 05, 05]
-27BF; [0C CD 6A, 05, 05]
+2922; [0C D0 CF, 05, 05]
-27C0; [0C CD 71, 05, 05]
+2923; [0C D0 D6, 05, 05]
-27C1; [0C CD 78, 05, 05]
+2924; [0C D0 DD, 05, 05]
-27C2; [0C CD 7F, 05, 05]
+2925; [0C D0 E4, 05, 05]
-27C3; [0C CD 86, 05, 05]
+2926; [0C D0 EB, 05, 05]
-27C4; [0C CD 8D, 05, 05]
+2927; [0C D0 F2, 05, 05]
-27C7; [0C CD 94, 05, 05]
+2928; [0C D0 F9, 05, 05]
-27C8; [0C CD 9B, 05, 05]
+2929; [0C D1 02, 05, 05]
-27C9; [0C CD A2, 05, 05]
+292A; [0C D1 09, 05, 05]
-27CA; [0C CD A9, 05, 05]
+292B; [0C D1 10, 05, 05]
-27CB; [0C CD B0, 05, 05]
+292C; [0C D1 17, 05, 05]
-27CC; [0C CD B7, 05, 05]
+292D; [0C D1 1E, 05, 05]
-27CD; [0C CD BE, 05, 05]
+292E; [0C D1 25, 05, 05]
-27CE; [0C CD C5, 05, 05]
+292F; [0C D1 2C, 05, 05]
-27CF; [0C CD CC, 05, 05]
+2930; [0C D1 33, 05, 05]
-27D0; [0C CD D3, 05, 05]
+2931; [0C D1 3A, 05, 05]
-27D1; [0C CD DA, 05, 05]
+2932; [0C D1 41, 05, 05]
-27D2; [0C CD E1, 05, 05]
+2933; [0C D1 48, 05, 05]
-27D3; [0C CD E8, 05, 05]
+2934; [0C D1 4F, 05, 05]
-27D4; [0C CD EF, 05, 05]
+2935; [0C D1 56, 05, 05]
-27D5; [0C CD F6, 05, 05]
+2936; [0C D1 5D, 05, 05]
-27D6; [0C CD FD, 05, 05]
+2937; [0C D1 64, 05, 05]
-27D7; [0C CE 06, 05, 05]
+2938; [0C D1 6B, 05, 05]
-27D8; [0C CE 0D, 05, 05]
+2939; [0C D1 72, 05, 05]
-27D9; [0C CE 14, 05, 05]
+293A; [0C D1 79, 05, 05]
-27DA; [0C CE 1B, 05, 05]
+293B; [0C D1 80, 05, 05]
-27DB; [0C CE 22, 05, 05]
+293C; [0C D1 87, 05, 05]
-27DC; [0C CE 29, 05, 05]
+293D; [0C D1 8E, 05, 05]
-27DD; [0C CE 30, 05, 05]
+293E; [0C D1 95, 05, 05]
-27DE; [0C CE 37, 05, 05]
+293F; [0C D1 9C, 05, 05]
-27DF; [0C CE 3E, 05, 05]
+2940; [0C D1 A3, 05, 05]
-27E0; [0C CE 45, 05, 05]
+2941; [0C D1 AA, 05, 05]
-27E1; [0C CE 4C, 05, 05]
+2942; [0C D1 B1, 05, 05]
-27E2; [0C CE 53, 05, 05]
+2943; [0C D1 B8, 05, 05]
-27E3; [0C CE 5A, 05, 05]
+2944; [0C D1 BF, 05, 05]
-27E4; [0C CE 61, 05, 05]
+2945; [0C D1 C6, 05, 05]
-27E5; [0C CE 68, 05, 05]
+2946; [0C D1 CD, 05, 05]
-27F0; [0C CE 6F, 05, 05]
+2947; [0C D1 D4, 05, 05]
-27F1; [0C CE 76, 05, 05]
+2948; [0C D1 DB, 05, 05]
-27F2; [0C CE 7D, 05, 05]
+2949; [0C D1 E2, 05, 05]
-27F3; [0C CE 84, 05, 05]
+294A; [0C D1 E9, 05, 05]
-27F4; [0C CE 8B, 05, 05]
+294B; [0C D1 F0, 05, 05]
-27F5; [0C CE 92, 05, 05]
+294C; [0C D1 F7, 05, 05]
-27F6; [0C CE 99, 05, 05]
+294D; [0C D1 FE, 05, 05]
-27F7; [0C CE A0, 05, 05]
+294E; [0C D2 07, 05, 05]
-27F8; [0C CE A7, 05, 05]
+294F; [0C D2 0E, 05, 05]
-27F9; [0C CE AE, 05, 05]
+2950; [0C D2 15, 05, 05]
-27FA; [0C CE B5, 05, 05]
+2951; [0C D2 1C, 05, 05]
-27FB; [0C CE BC, 05, 05]
+2952; [0C D2 23, 05, 05]
-27FC; [0C CE C3, 05, 05]
+2953; [0C D2 2A, 05, 05]
-27FD; [0C CE CA, 05, 05]
+2954; [0C D2 31, 05, 05]
-27FE; [0C CE D1, 05, 05]
+2955; [0C D2 38, 05, 05]
-27FF; [0C CE D8, 05, 05]
+2956; [0C D2 3F, 05, 05]
-2900; [0C CE DF, 05, 05]
+2957; [0C D2 46, 05, 05]
-2901; [0C CE E6, 05, 05]
+2958; [0C D2 4D, 05, 05]
-2902; [0C CE ED, 05, 05]
+2959; [0C D2 54, 05, 05]
-2903; [0C CE F4, 05, 05]
+295A; [0C D2 5B, 05, 05]
-2904; [0C CE FB, 05, 05]
+295B; [0C D2 62, 05, 05]
-2905; [0C CF 04, 05, 05]
+295C; [0C D2 69, 05, 05]
-2906; [0C CF 0B, 05, 05]
+295D; [0C D2 70, 05, 05]
-2907; [0C CF 12, 05, 05]
+295E; [0C D2 77, 05, 05]
-2908; [0C CF 19, 05, 05]
+295F; [0C D2 7E, 05, 05]
-2909; [0C CF 20, 05, 05]
+2960; [0C D2 85, 05, 05]
-290A; [0C CF 27, 05, 05]
+2961; [0C D2 8C, 05, 05]
-290B; [0C CF 2E, 05, 05]
+2962; [0C D2 93, 05, 05]
-290C; [0C CF 35, 05, 05]
+2963; [0C D2 9A, 05, 05]
-290D; [0C CF 3C, 05, 05]
+2964; [0C D2 A1, 05, 05]
-290E; [0C CF 43, 05, 05]
+2965; [0C D2 A8, 05, 05]
-290F; [0C CF 4A, 05, 05]
+2966; [0C D2 AF, 05, 05]
-2910; [0C CF 51, 05, 05]
+2967; [0C D2 B6, 05, 05]
-2911; [0C CF 58, 05, 05]
+2968; [0C D2 BD, 05, 05]
-2912; [0C CF 5F, 05, 05]
+2969; [0C D2 C4, 05, 05]
-2913; [0C CF 66, 05, 05]
+296A; [0C D2 CB, 05, 05]
-2914; [0C CF 6D, 05, 05]
+296B; [0C D2 D2, 05, 05]
-2915; [0C CF 74, 05, 05]
+296C; [0C D2 D9, 05, 05]
-2916; [0C CF 7B, 05, 05]
+296D; [0C D2 E0, 05, 05]
-2917; [0C CF 82, 05, 05]
+296E; [0C D2 E7, 05, 05]
-2918; [0C CF 89, 05, 05]
+296F; [0C D2 EE, 05, 05]
-2919; [0C CF 90, 05, 05]
+2970; [0C D2 F5, 05, 05]
-291A; [0C CF 97, 05, 05]
+2971; [0C D2 FC, 05, 05]
-291B; [0C CF 9E, 05, 05]
+2972; [0C D3 05, 05, 05]
-291C; [0C CF A5, 05, 05]
+2973; [0C D3 0C, 05, 05]
-291D; [0C CF AC, 05, 05]
+2974; [0C D3 13, 05, 05]
-291E; [0C CF B3, 05, 05]
+2975; [0C D3 1A, 05, 05]
-291F; [0C CF BA, 05, 05]
+2976; [0C D3 21, 05, 05]
-2920; [0C CF C1, 05, 05]
+2977; [0C D3 28, 05, 05]
-2921; [0C CF C8, 05, 05]
+2978; [0C D3 2F, 05, 05]
-2922; [0C CF CF, 05, 05]
+2979; [0C D3 36, 05, 05]
-2923; [0C CF D6, 05, 05]
+297A; [0C D3 3D, 05, 05]
-2924; [0C CF DD, 05, 05]
+297B; [0C D3 44, 05, 05]
-2925; [0C CF E4, 05, 05]
+297C; [0C D3 4B, 05, 05]
-2926; [0C CF EB, 05, 05]
+297D; [0C D3 52, 05, 05]
-2927; [0C CF F2, 05, 05]
+297E; [0C D3 59, 05, 05]
-2928; [0C CF F9, 05, 05]
+297F; [0C D3 60, 05, 05]
-2929; [0C D0 02, 05, 05]
+2980; [0C D3 67, 05, 05]
-292A; [0C D0 09, 05, 05]
+2981; [0C D3 6E, 05, 05]
-292B; [0C D0 10, 05, 05]
+2982; [0C D3 75, 05, 05]
-292C; [0C D0 17, 05, 05]
+2999; [0C D3 7C, 05, 05]
-292D; [0C D0 1E, 05, 05]
+299A; [0C D3 83, 05, 05]
-292E; [0C D0 25, 05, 05]
+299B; [0C D3 8A, 05, 05]
-292F; [0C D0 2C, 05, 05]
+299C; [0C D3 91, 05, 05]
-2930; [0C D0 33, 05, 05]
+299D; [0C D3 98, 05, 05]
-2931; [0C D0 3A, 05, 05]
+299E; [0C D3 9F, 05, 05]
-2932; [0C D0 41, 05, 05]
+299F; [0C D3 A6, 05, 05]
-2933; [0C D0 48, 05, 05]
+29A0; [0C D3 AD, 05, 05]
-2934; [0C D0 4F, 05, 05]
+29A1; [0C D3 B4, 05, 05]
-2935; [0C D0 56, 05, 05]
+29A2; [0C D3 BB, 05, 05]
-2936; [0C D0 5D, 05, 05]
+29A3; [0C D3 C2, 05, 05]
-2937; [0C D0 64, 05, 05]
+29A4; [0C D3 C9, 05, 05]
-2938; [0C D0 6B, 05, 05]
+29A5; [0C D3 D0, 05, 05]
-2939; [0C D0 72, 05, 05]
+29A6; [0C D3 D7, 05, 05]
-293A; [0C D0 79, 05, 05]
+29A7; [0C D3 DE, 05, 05]
-293B; [0C D0 80, 05, 05]
+29A8; [0C D3 E5, 05, 05]
-293C; [0C D0 87, 05, 05]
+29A9; [0C D3 EC, 05, 05]
-293D; [0C D0 8E, 05, 05]
+29AA; [0C D3 F3, 05, 05]
-293E; [0C D0 95, 05, 05]
+29AB; [0C D3 FA, 05, 05]
-293F; [0C D0 9C, 05, 05]
+29AC; [0C D4 03, 05, 05]
-2940; [0C D0 A3, 05, 05]
+29AD; [0C D4 0A, 05, 05]
-2941; [0C D0 AA, 05, 05]
+29AE; [0C D4 11, 05, 05]
-2942; [0C D0 B1, 05, 05]
+29AF; [0C D4 18, 05, 05]
-2943; [0C D0 B8, 05, 05]
+29B0; [0C D4 1F, 05, 05]
-2944; [0C D0 BF, 05, 05]
+29B1; [0C D4 26, 05, 05]
-2945; [0C D0 C6, 05, 05]
+29B2; [0C D4 2D, 05, 05]
-2946; [0C D0 CD, 05, 05]
+29B3; [0C D4 34, 05, 05]
-2947; [0C D0 D4, 05, 05]
+29B4; [0C D4 3B, 05, 05]
-2948; [0C D0 DB, 05, 05]
+29B5; [0C D4 42, 05, 05]
-2949; [0C D0 E2, 05, 05]
+29B6; [0C D4 49, 05, 05]
-294A; [0C D0 E9, 05, 05]
+29B7; [0C D4 50, 05, 05]
-294B; [0C D0 F0, 05, 05]
+29B8; [0C D4 57, 05, 05]
-294C; [0C D0 F7, 05, 05]
+29B9; [0C D4 5E, 05, 05]
-294D; [0C D0 FE, 05, 05]
+29BA; [0C D4 65, 05, 05]
-294E; [0C D1 07, 05, 05]
+29BB; [0C D4 6C, 05, 05]
-294F; [0C D1 0E, 05, 05]
+29BC; [0C D4 73, 05, 05]
-2950; [0C D1 15, 05, 05]
+29BD; [0C D4 7A, 05, 05]
-2951; [0C D1 1C, 05, 05]
+29BE; [0C D4 81, 05, 05]
-2952; [0C D1 23, 05, 05]
+29BF; [0C D4 88, 05, 05]
-2953; [0C D1 2A, 05, 05]
+29C0; [0C D4 8F, 05, 05]
-2954; [0C D1 31, 05, 05]
+29C1; [0C D4 96, 05, 05]
-2955; [0C D1 38, 05, 05]
+29C2; [0C D4 9D, 05, 05]
-2956; [0C D1 3F, 05, 05]
+29C3; [0C D4 A4, 05, 05]
-2957; [0C D1 46, 05, 05]
+29C4; [0C D4 AB, 05, 05]
-2958; [0C D1 4D, 05, 05]
+29C5; [0C D4 B2, 05, 05]
-2959; [0C D1 54, 05, 05]
+29C6; [0C D4 B9, 05, 05]
-295A; [0C D1 5B, 05, 05]
+29C7; [0C D4 C0, 05, 05]
-295B; [0C D1 62, 05, 05]
+29C8; [0C D4 C7, 05, 05]
-295C; [0C D1 69, 05, 05]
+29C9; [0C D4 CE, 05, 05]
-295D; [0C D1 70, 05, 05]
+29CA; [0C D4 D5, 05, 05]
-295E; [0C D1 77, 05, 05]
+29CB; [0C D4 DC, 05, 05]
-295F; [0C D1 7E, 05, 05]
+29CC; [0C D4 E3, 05, 05]
-2960; [0C D1 85, 05, 05]
+29CD; [0C D4 EA, 05, 05]
-2961; [0C D1 8C, 05, 05]
+29CE; [0C D4 F1, 05, 05]
-2962; [0C D1 93, 05, 05]
+29CF; [0C D4 F8, 05, 05]
-2963; [0C D1 9A, 05, 05]
+29D0; [0C D4 FF, 05, 05]
-2964; [0C D1 A1, 05, 05]
+29D1; [0C D5 08, 05, 05]
-2965; [0C D1 A8, 05, 05]
+29D2; [0C D5 0F, 05, 05]
-2966; [0C D1 AF, 05, 05]
+29D3; [0C D5 16, 05, 05]
-2967; [0C D1 B6, 05, 05]
+29D4; [0C D5 1D, 05, 05]
-2968; [0C D1 BD, 05, 05]
+29D5; [0C D5 24, 05, 05]
-2969; [0C D1 C4, 05, 05]
+29D6; [0C D5 2B, 05, 05]
-296A; [0C D1 CB, 05, 05]
+29D7; [0C D5 32, 05, 05]
-296B; [0C D1 D2, 05, 05]
+29DC; [0C D5 39, 05, 05]
-296C; [0C D1 D9, 05, 05]
+29DD; [0C D5 40, 05, 05]
-296D; [0C D1 E0, 05, 05]
+29DE; [0C D5 47, 05, 05]
-296E; [0C D1 E7, 05, 05]
+29DF; [0C D5 4E, 05, 05]
-296F; [0C D1 EE, 05, 05]
+29E0; [0C D5 55, 05, 05]
-2970; [0C D1 F5, 05, 05]
+29E1; [0C D5 5C, 05, 05]
-2971; [0C D1 FC, 05, 05]
+29E2; [0C D5 63, 05, 05]
-2972; [0C D2 05, 05, 05]
+29E3; [0C D5 6A, 05, 05]
-2973; [0C D2 0C, 05, 05]
+29E4; [0C D5 71, 05, 05]
-2974; [0C D2 13, 05, 05]
+29E5; [0C D5 78, 05, 05]
-2975; [0C D2 1A, 05, 05]
+29E6; [0C D5 7F, 05, 05]
-2976; [0C D2 21, 05, 05]
+29E7; [0C D5 86, 05, 05]
-2977; [0C D2 28, 05, 05]
+29E8; [0C D5 8D, 05, 05]
-2978; [0C D2 2F, 05, 05]
+29E9; [0C D5 94, 05, 05]
-2979; [0C D2 36, 05, 05]
+29EA; [0C D5 9B, 05, 05]
-297A; [0C D2 3D, 05, 05]
+29EB; [0C D5 A2, 05, 05]
-297B; [0C D2 44, 05, 05]
+29EC; [0C D5 A9, 05, 05]
-297C; [0C D2 4B, 05, 05]
+29ED; [0C D5 B0, 05, 05]
-297D; [0C D2 52, 05, 05]
+29EE; [0C D5 B7, 05, 05]
-297E; [0C D2 59, 05, 05]
+29EF; [0C D5 BE, 05, 05]
-297F; [0C D2 60, 05, 05]
+29F0; [0C D5 C5, 05, 05]
-2980; [0C D2 67, 05, 05]
+29F1; [0C D5 CC, 05, 05]
-2981; [0C D2 6E, 05, 05]
+29F2; [0C D5 D3, 05, 05]
-2982; [0C D2 75, 05, 05]
+29F3; [0C D5 DA, 05, 05]
-2999; [0C D2 7C, 05, 05]
+29F4; [0C D5 E1, 05, 05]
-299A; [0C D2 83, 05, 05]
+29F5; [0C D5 E8, 05, 05]
-299B; [0C D2 8A, 05, 05]
+29F6; [0C D5 EF, 05, 05]
-299C; [0C D2 91, 05, 05]
+29F7; [0C D5 F6, 05, 05]
-299D; [0C D2 98, 05, 05]
+29F8; [0C D5 FD, 05, 05]
-299E; [0C D2 9F, 05, 05]
+29F9; [0C D6 06, 05, 05]
-299F; [0C D2 A6, 05, 05]
+29FA; [0C D6 0D, 05, 05]
-29A0; [0C D2 AD, 05, 05]
+29FB; [0C D6 14, 05, 05]
-29A1; [0C D2 B4, 05, 05]
+29FE; [0C D6 1B, 05, 05]
-29A2; [0C D2 BB, 05, 05]
+29FF; [0C D6 22, 05, 05]
-29A3; [0C D2 C2, 05, 05]
+2A00; [0C D6 29, 05, 05]
-29A4; [0C D2 C9, 05, 05]
+2A01; [0C D6 30, 05, 05]
-29A5; [0C D2 D0, 05, 05]
+2A02; [0C D6 37, 05, 05]
-29A6; [0C D2 D7, 05, 05]
+2A03; [0C D6 3E, 05, 05]
-29A7; [0C D2 DE, 05, 05]
+2A04; [0C D6 45, 05, 05]
-29A8; [0C D2 E5, 05, 05]
+2A05; [0C D6 4C, 05, 05]
-29A9; [0C D2 EC, 05, 05]
+2A06; [0C D6 53, 05, 05]
-29AA; [0C D2 F3, 05, 05]
+2A07; [0C D6 5A, 05, 05]
-29AB; [0C D2 FA, 05, 05]
+2A08; [0C D6 61, 05, 05]
-29AC; [0C D3 03, 05, 05]
+2A09; [0C D6 68, 05, 05]
-29AD; [0C D3 0A, 05, 05]
+2A0A; [0C D6 6F, 05, 05]
-29AE; [0C D3 11, 05, 05]
+2A0B; [0C D6 76, 05, 05]
-29AF; [0C D3 18, 05, 05]
+2A0D; [0C D6 7D, 05, 05]
-29B0; [0C D3 1F, 05, 05]
+2A0E; [0C D6 84, 05, 05]
-29B1; [0C D3 26, 05, 05]
+2A0F; [0C D6 8B, 05, 05]
-29B2; [0C D3 2D, 05, 05]
+2A10; [0C D6 92, 05, 05]
-29B3; [0C D3 34, 05, 05]
+2A11; [0C D6 99, 05, 05]
-29B4; [0C D3 3B, 05, 05]
+2A12; [0C D6 A0, 05, 05]
-29B5; [0C D3 42, 05, 05]
+2A13; [0C D6 A7, 05, 05]
-29B6; [0C D3 49, 05, 05]
+2A14; [0C D6 AE, 05, 05]
-29B7; [0C D3 50, 05, 05]
+2A15; [0C D6 B5, 05, 05]
-29B8; [0C D3 57, 05, 05]
+2A16; [0C D6 BC, 05, 05]
-29B9; [0C D3 5E, 05, 05]
+2A17; [0C D6 C3, 05, 05]
-29BA; [0C D3 65, 05, 05]
+2A18; [0C D6 CA, 05, 05]
-29BB; [0C D3 6C, 05, 05]
+2A19; [0C D6 D1, 05, 05]
-29BC; [0C D3 73, 05, 05]
+2A1A; [0C D6 D8, 05, 05]
-29BD; [0C D3 7A, 05, 05]
+2A1B; [0C D6 DF, 05, 05]
-29BE; [0C D3 81, 05, 05]
+2A1C; [0C D6 E6, 05, 05]
-29BF; [0C D3 88, 05, 05]
+2A1D; [0C D6 ED, 05, 05]
-29C0; [0C D3 8F, 05, 05]
+2A1E; [0C D6 F4, 05, 05]
-29C1; [0C D3 96, 05, 05]
+2A1F; [0C D6 FB, 05, 05]
-29C2; [0C D3 9D, 05, 05]
+2A20; [0C D7 04, 05, 05]
-29C3; [0C D3 A4, 05, 05]
+2A21; [0C D7 0B, 05, 05]
-29C4; [0C D3 AB, 05, 05]
+2A22; [0C D7 12, 05, 05]
-29C5; [0C D3 B2, 05, 05]
+2A23; [0C D7 19, 05, 05]
-29C6; [0C D3 B9, 05, 05]
+2A24; [0C D7 20, 05, 05]
-29C7; [0C D3 C0, 05, 05]
+2A25; [0C D7 27, 05, 05]
-29C8; [0C D3 C7, 05, 05]
+2A26; [0C D7 2E, 05, 05]
-29C9; [0C D3 CE, 05, 05]
+2A27; [0C D7 35, 05, 05]
-29CA; [0C D3 D5, 05, 05]
+2A28; [0C D7 3C, 05, 05]
-29CB; [0C D3 DC, 05, 05]
+2A29; [0C D7 43, 05, 05]
-29CC; [0C D3 E3, 05, 05]
+2A2A; [0C D7 4A, 05, 05]
-29CD; [0C D3 EA, 05, 05]
+2A2B; [0C D7 51, 05, 05]
-29CE; [0C D3 F1, 05, 05]
+2A2C; [0C D7 58, 05, 05]
-29CF; [0C D3 F8, 05, 05]
+2A2D; [0C D7 5F, 05, 05]
-29D0; [0C D3 FF, 05, 05]
+2A2E; [0C D7 66, 05, 05]
-29D1; [0C D4 08, 05, 05]
+2A2F; [0C D7 6D, 05, 05]
-29D2; [0C D4 0F, 05, 05]
+2A30; [0C D7 74, 05, 05]
-29D3; [0C D4 16, 05, 05]
+2A31; [0C D7 7B, 05, 05]
-29D4; [0C D4 1D, 05, 05]
+2A32; [0C D7 82, 05, 05]
-29D5; [0C D4 24, 05, 05]
+2A33; [0C D7 89, 05, 05]
-29D6; [0C D4 2B, 05, 05]
+2A34; [0C D7 90, 05, 05]
-29D7; [0C D4 32, 05, 05]
+2A35; [0C D7 97, 05, 05]
-29DC; [0C D4 39, 05, 05]
+2A36; [0C D7 9E, 05, 05]
-29DD; [0C D4 40, 05, 05]
+2A37; [0C D7 A5, 05, 05]
-29DE; [0C D4 47, 05, 05]
+2A38; [0C D7 AC, 05, 05]
-29DF; [0C D4 4E, 05, 05]
+2A39; [0C D7 B3, 05, 05]
-29E0; [0C D4 55, 05, 05]
+2A3A; [0C D7 BA, 05, 05]
-29E1; [0C D4 5C, 05, 05]
+2A3B; [0C D7 C1, 05, 05]
-29E2; [0C D4 63, 05, 05]
+2A3C; [0C D7 C8, 05, 05]
-29E3; [0C D4 6A, 05, 05]
+2A3D; [0C D7 CF, 05, 05]
-29E4; [0C D4 71, 05, 05]
+2A3E; [0C D7 D6, 05, 05]
-29E5; [0C D4 78, 05, 05]
+2A3F; [0C D7 DD, 05, 05]
-29E6; [0C D4 7F, 05, 05]
+2A40; [0C D7 E4, 05, 05]
-29E7; [0C D4 86, 05, 05]
+2A41; [0C D7 EB, 05, 05]
-29E8; [0C D4 8D, 05, 05]
+2A42; [0C D7 F2, 05, 05]
-29E9; [0C D4 94, 05, 05]
+2A43; [0C D7 F9, 05, 05]
-29EA; [0C D4 9B, 05, 05]
+2A44; [0C D8 02, 05, 05]
-29EB; [0C D4 A2, 05, 05]
+2A45; [0C D8 09, 05, 05]
-29EC; [0C D4 A9, 05, 05]
+2A46; [0C D8 10, 05, 05]
-29ED; [0C D4 B0, 05, 05]
+2A47; [0C D8 17, 05, 05]
-29EE; [0C D4 B7, 05, 05]
+2A48; [0C D8 1E, 05, 05]
-29EF; [0C D4 BE, 05, 05]
+2A49; [0C D8 25, 05, 05]
-29F0; [0C D4 C5, 05, 05]
+2A4A; [0C D8 2C, 05, 05]
-29F1; [0C D4 CC, 05, 05]
+2A4B; [0C D8 33, 05, 05]
-29F2; [0C D4 D3, 05, 05]
+2A4C; [0C D8 3A, 05, 05]
-29F3; [0C D4 DA, 05, 05]
+2A4D; [0C D8 41, 05, 05]
-29F4; [0C D4 E1, 05, 05]
+2A4E; [0C D8 48, 05, 05]
-29F5; [0C D4 E8, 05, 05]
+2A4F; [0C D8 4F, 05, 05]
-29F6; [0C D4 EF, 05, 05]
+2A50; [0C D8 56, 05, 05]
-29F7; [0C D4 F6, 05, 05]
+2A51; [0C D8 5D, 05, 05]
-29F8; [0C D4 FD, 05, 05]
+2A52; [0C D8 64, 05, 05]
-29F9; [0C D5 06, 05, 05]
+2A53; [0C D8 6B, 05, 05]
-29FA; [0C D5 0D, 05, 05]
+2A54; [0C D8 72, 05, 05]
-29FB; [0C D5 14, 05, 05]
+2A55; [0C D8 79, 05, 05]
-29FE; [0C D5 1B, 05, 05]
+2A56; [0C D8 80, 05, 05]
-29FF; [0C D5 22, 05, 05]
+2A57; [0C D8 87, 05, 05]
-2A00; [0C D5 29, 05, 05]
+2A58; [0C D8 8E, 05, 05]
-2A01; [0C D5 30, 05, 05]
+2A59; [0C D8 95, 05, 05]
-2A02; [0C D5 37, 05, 05]
+2A5A; [0C D8 9C, 05, 05]
-2A03; [0C D5 3E, 05, 05]
+2A5B; [0C D8 A3, 05, 05]
-2A04; [0C D5 45, 05, 05]
+2A5C; [0C D8 AA, 05, 05]
-2A05; [0C D5 4C, 05, 05]
+2A5D; [0C D8 B1, 05, 05]
-2A06; [0C D5 53, 05, 05]
+2A5E; [0C D8 B8, 05, 05]
-2A07; [0C D5 5A, 05, 05]
+2A5F; [0C D8 BF, 05, 05]
-2A08; [0C D5 61, 05, 05]
+2A60; [0C D8 C6, 05, 05]
-2A09; [0C D5 68, 05, 05]
+2A61; [0C D8 CD, 05, 05]
-2A0A; [0C D5 6F, 05, 05]
+2A62; [0C D8 D4, 05, 05]
-2A0B; [0C D5 76, 05, 05]
+2A63; [0C D8 DB, 05, 05]
-2A0D; [0C D5 7D, 05, 05]
+2A64; [0C D8 E2, 05, 05]
-2A0E; [0C D5 84, 05, 05]
+2A65; [0C D8 E9, 05, 05]
-2A0F; [0C D5 8B, 05, 05]
+2A66; [0C D8 F0, 05, 05]
-2A10; [0C D5 92, 05, 05]
+2A67; [0C D8 F7, 05, 05]
-2A11; [0C D5 99, 05, 05]
+2A68; [0C D8 FE, 05, 05]
-2A12; [0C D5 A0, 05, 05]
+2A69; [0C D9 07, 05, 05]
-2A13; [0C D5 A7, 05, 05]
+2A6A; [0C D9 0E, 05, 05]
-2A14; [0C D5 AE, 05, 05]
+2A6B; [0C D9 15, 05, 05]
-2A15; [0C D5 B5, 05, 05]
+2A6C; [0C D9 1C, 05, 05]
-2A16; [0C D5 BC, 05, 05]
+2A6D; [0C D9 23, 05, 05]
-2A17; [0C D5 C3, 05, 05]
+2A6E; [0C D9 2A, 05, 05]
-2A18; [0C D5 CA, 05, 05]
+2A6F; [0C D9 31, 05, 05]
-2A19; [0C D5 D1, 05, 05]
+2A70; [0C D9 38, 05, 05]
-2A1A; [0C D5 D8, 05, 05]
+2A71; [0C D9 3F, 05, 05]
-2A1B; [0C D5 DF, 05, 05]
+2A72; [0C D9 46, 05, 05]
-2A1C; [0C D5 E6, 05, 05]
+2A73; [0C D9 4D, 05, 05]
-2A1D; [0C D5 ED, 05, 05]
+2A77; [0C D9 54, 05, 05]
-2A1E; [0C D5 F4, 05, 05]
+2A78; [0C D9 5B, 05, 05]
-2A1F; [0C D5 FB, 05, 05]
+2A79; [0C D9 62, 05, 05]
-2A20; [0C D6 04, 05, 05]
+2A7A; [0C D9 69, 05, 05]
-2A21; [0C D6 0B, 05, 05]
+2A7B; [0C D9 70, 05, 05]
-2A22; [0C D6 12, 05, 05]
+2A7C; [0C D9 77, 05, 05]
-2A23; [0C D6 19, 05, 05]
+2A7D; [0C D9 7E, 05, 05]
-2A24; [0C D6 20, 05, 05]
+2A7E; [0C D9 85, 05, 05]
-2A25; [0C D6 27, 05, 05]
+2A7F; [0C D9 8C, 05, 05]
-2A26; [0C D6 2E, 05, 05]
+2A80; [0C D9 93, 05, 05]
-2A27; [0C D6 35, 05, 05]
+2A81; [0C D9 9A, 05, 05]
-2A28; [0C D6 3C, 05, 05]
+2A82; [0C D9 A1, 05, 05]
-2A29; [0C D6 43, 05, 05]
+2A83; [0C D9 A8, 05, 05]
-2A2A; [0C D6 4A, 05, 05]
+2A84; [0C D9 AF, 05, 05]
-2A2B; [0C D6 51, 05, 05]
+2A85; [0C D9 B6, 05, 05]
-2A2C; [0C D6 58, 05, 05]
+2A86; [0C D9 BD, 05, 05]
-2A2D; [0C D6 5F, 05, 05]
+2A87; [0C D9 C4, 05, 05]
-2A2E; [0C D6 66, 05, 05]
+2A88; [0C D9 CB, 05, 05]
-2A2F; [0C D6 6D, 05, 05]
+2A89; [0C D9 D2, 05, 05]
-2A30; [0C D6 74, 05, 05]
+2A8A; [0C D9 D9, 05, 05]
-2A31; [0C D6 7B, 05, 05]
+2A8B; [0C D9 E0, 05, 05]
-2A32; [0C D6 82, 05, 05]
+2A8C; [0C D9 E7, 05, 05]
-2A33; [0C D6 89, 05, 05]
+2A8D; [0C D9 EE, 05, 05]
-2A34; [0C D6 90, 05, 05]
+2A8E; [0C D9 F5, 05, 05]
-2A35; [0C D6 97, 05, 05]
+2A8F; [0C D9 FC, 05, 05]
-2A36; [0C D6 9E, 05, 05]
+2A90; [0C DA 05, 05, 05]
-2A37; [0C D6 A5, 05, 05]
+2A91; [0C DA 0C, 05, 05]
-2A38; [0C D6 AC, 05, 05]
+2A92; [0C DA 13, 05, 05]
-2A39; [0C D6 B3, 05, 05]
+2A93; [0C DA 1A, 05, 05]
-2A3A; [0C D6 BA, 05, 05]
+2A94; [0C DA 21, 05, 05]
-2A3B; [0C D6 C1, 05, 05]
+2A95; [0C DA 28, 05, 05]
-2A3C; [0C D6 C8, 05, 05]
+2A96; [0C DA 2F, 05, 05]
-2A3D; [0C D6 CF, 05, 05]
+2A97; [0C DA 36, 05, 05]
-2A3E; [0C D6 D6, 05, 05]
+2A98; [0C DA 3D, 05, 05]
-2A3F; [0C D6 DD, 05, 05]
+2A99; [0C DA 44, 05, 05]
-2A40; [0C D6 E4, 05, 05]
+2A9A; [0C DA 4B, 05, 05]
-2A41; [0C D6 EB, 05, 05]
+2A9B; [0C DA 52, 05, 05]
-2A42; [0C D6 F2, 05, 05]
+2A9C; [0C DA 59, 05, 05]
-2A43; [0C D6 F9, 05, 05]
+2A9D; [0C DA 60, 05, 05]
-2A44; [0C D7 02, 05, 05]
+2A9E; [0C DA 67, 05, 05]
-2A45; [0C D7 09, 05, 05]
+2A9F; [0C DA 6E, 05, 05]
-2A46; [0C D7 10, 05, 05]
+2AA0; [0C DA 75, 05, 05]
-2A47; [0C D7 17, 05, 05]
+2AA1; [0C DA 7C, 05, 05]
-2A48; [0C D7 1E, 05, 05]
+2AA2; [0C DA 83, 05, 05]
-2A49; [0C D7 25, 05, 05]
+2AA3; [0C DA 8A, 05, 05]
-2A4A; [0C D7 2C, 05, 05]
+2AA4; [0C DA 91, 05, 05]
-2A4B; [0C D7 33, 05, 05]
+2AA5; [0C DA 98, 05, 05]
-2A4C; [0C D7 3A, 05, 05]
+2AA6; [0C DA 9F, 05, 05]
-2A4D; [0C D7 41, 05, 05]
+2AA7; [0C DA A6, 05, 05]
-2A4E; [0C D7 48, 05, 05]
+2AA8; [0C DA AD, 05, 05]
-2A4F; [0C D7 4F, 05, 05]
+2AA9; [0C DA B4, 05, 05]
-2A50; [0C D7 56, 05, 05]
+2AAA; [0C DA BB, 05, 05]
-2A51; [0C D7 5D, 05, 05]
+2AAB; [0C DA C2, 05, 05]
-2A52; [0C D7 64, 05, 05]
+2AAC; [0C DA C9, 05, 05]
-2A53; [0C D7 6B, 05, 05]
+2AAD; [0C DA D0, 05, 05]
-2A54; [0C D7 72, 05, 05]
+2AAE; [0C DA D7, 05, 05]
-2A55; [0C D7 79, 05, 05]
+2AAF; [0C DA DE, 05, 05]
-2A56; [0C D7 80, 05, 05]
+2AB0; [0C DA E5, 05, 05]
-2A57; [0C D7 87, 05, 05]
+2AB1; [0C DA EC, 05, 05]
-2A58; [0C D7 8E, 05, 05]
+2AB2; [0C DA F3, 05, 05]
-2A59; [0C D7 95, 05, 05]
+2AB3; [0C DA FA, 05, 05]
-2A5A; [0C D7 9C, 05, 05]
+2AB4; [0C DB 03, 05, 05]
-2A5B; [0C D7 A3, 05, 05]
+2AB5; [0C DB 0A, 05, 05]
-2A5C; [0C D7 AA, 05, 05]
+2AB6; [0C DB 11, 05, 05]
-2A5D; [0C D7 B1, 05, 05]
+2AB7; [0C DB 18, 05, 05]
-2A5E; [0C D7 B8, 05, 05]
+2AB8; [0C DB 1F, 05, 05]
-2A5F; [0C D7 BF, 05, 05]
+2AB9; [0C DB 26, 05, 05]
-2A60; [0C D7 C6, 05, 05]
+2ABA; [0C DB 2D, 05, 05]
-2A61; [0C D7 CD, 05, 05]
+2ABB; [0C DB 34, 05, 05]
-2A62; [0C D7 D4, 05, 05]
+2ABC; [0C DB 3B, 05, 05]
-2A63; [0C D7 DB, 05, 05]
+2ABD; [0C DB 42, 05, 05]
-2A64; [0C D7 E2, 05, 05]
+2ABE; [0C DB 49, 05, 05]
-2A65; [0C D7 E9, 05, 05]
+2ABF; [0C DB 50, 05, 05]
-2A66; [0C D7 F0, 05, 05]
+2AC0; [0C DB 57, 05, 05]
-2A67; [0C D7 F7, 05, 05]
+2AC1; [0C DB 5E, 05, 05]
-2A68; [0C D7 FE, 05, 05]
+2AC2; [0C DB 65, 05, 05]
-2A69; [0C D8 07, 05, 05]
+2AC3; [0C DB 6C, 05, 05]
-2A6A; [0C D8 0E, 05, 05]
+2AC4; [0C DB 73, 05, 05]
-2A6B; [0C D8 15, 05, 05]
+2AC5; [0C DB 7A, 05, 05]
-2A6C; [0C D8 1C, 05, 05]
+2AC6; [0C DB 81, 05, 05]
-2A6D; [0C D8 23, 05, 05]
+2AC7; [0C DB 88, 05, 05]
-2A6E; [0C D8 2A, 05, 05]
+2AC8; [0C DB 8F, 05, 05]
-2A6F; [0C D8 31, 05, 05]
+2AC9; [0C DB 96, 05, 05]
-2A70; [0C D8 38, 05, 05]
+2ACA; [0C DB 9D, 05, 05]
-2A71; [0C D8 3F, 05, 05]
+2ACB; [0C DB A4, 05, 05]
-2A72; [0C D8 46, 05, 05]
+2ACC; [0C DB AB, 05, 05]
-2A73; [0C D8 4D, 05, 05]
+2ACD; [0C DB B2, 05, 05]
-2A77; [0C D8 54, 05, 05]
+2ACE; [0C DB B9, 05, 05]
-2A78; [0C D8 5B, 05, 05]
+2ACF; [0C DB C0, 05, 05]
-2A79; [0C D8 62, 05, 05]
+2AD0; [0C DB C7, 05, 05]
-2A7A; [0C D8 69, 05, 05]
+2AD1; [0C DB CE, 05, 05]
-2A7B; [0C D8 70, 05, 05]
+2AD2; [0C DB D5, 05, 05]
-2A7C; [0C D8 77, 05, 05]
+2AD3; [0C DB DC, 05, 05]
-2A7D; [0C D8 7E, 05, 05]
+2AD4; [0C DB E3, 05, 05]
-2A7E; [0C D8 85, 05, 05]
+2AD5; [0C DB EA, 05, 05]
-2A7F; [0C D8 8C, 05, 05]
+2AD6; [0C DB F1, 05, 05]
-2A80; [0C D8 93, 05, 05]
+2AD7; [0C DB F8, 05, 05]
-2A81; [0C D8 9A, 05, 05]
+2AD8; [0C DB FF, 05, 05]
-2A82; [0C D8 A1, 05, 05]
+2AD9; [0C DC 08, 05, 05]
-2A83; [0C D8 A8, 05, 05]
+2ADA; [0C DC 0F, 05, 05]
-2A84; [0C D8 AF, 05, 05]
+2ADB; [0C DC 16, 05, 05]
-2A85; [0C D8 B6, 05, 05]
+2ADD; [0C DC 1D, 05, 05]
+2ADC; [0C DC 1D, 05, 05][, 9E, 05]
-2A86; [0C D8 BD, 05, 05]
+2ADE; [0C DC 24, 05, 05]
-2A87; [0C D8 C4, 05, 05]
+2ADF; [0C DC 2B, 05, 05]
-2A88; [0C D8 CB, 05, 05]
+2AE0; [0C DC 32, 05, 05]
-2A89; [0C D8 D2, 05, 05]
+2AE1; [0C DC 39, 05, 05]
-2A8A; [0C D8 D9, 05, 05]
+2AE2; [0C DC 40, 05, 05]
-2A8B; [0C D8 E0, 05, 05]
+2AE3; [0C DC 47, 05, 05]
-2A8C; [0C D8 E7, 05, 05]
+2AE4; [0C DC 4E, 05, 05]
-2A8D; [0C D8 EE, 05, 05]
+2AE5; [0C DC 55, 05, 05]
-2A8E; [0C D8 F5, 05, 05]
+2AE6; [0C DC 5C, 05, 05]
-2A8F; [0C D8 FC, 05, 05]
+2AE7; [0C DC 63, 05, 05]
-2A90; [0C D9 05, 05, 05]
+2AE8; [0C DC 6A, 05, 05]
-2A91; [0C D9 0C, 05, 05]
+2AE9; [0C DC 71, 05, 05]
-2A92; [0C D9 13, 05, 05]
+2AEA; [0C DC 78, 05, 05]
-2A93; [0C D9 1A, 05, 05]
+2AEB; [0C DC 7F, 05, 05]
-2A94; [0C D9 21, 05, 05]
+2AEC; [0C DC 86, 05, 05]
-2A95; [0C D9 28, 05, 05]
+2AED; [0C DC 8D, 05, 05]
-2A96; [0C D9 2F, 05, 05]
+2AEE; [0C DC 94, 05, 05]
-2A97; [0C D9 36, 05, 05]
+2AEF; [0C DC 9B, 05, 05]
-2A98; [0C D9 3D, 05, 05]
+2AF0; [0C DC A2, 05, 05]
-2A99; [0C D9 44, 05, 05]
+2AF1; [0C DC A9, 05, 05]
-2A9A; [0C D9 4B, 05, 05]
+2AF2; [0C DC B0, 05, 05]
-2A9B; [0C D9 52, 05, 05]
+2AF3; [0C DC B7, 05, 05]
-2A9C; [0C D9 59, 05, 05]
+2AF4; [0C DC BE, 05, 05]
-2A9D; [0C D9 60, 05, 05]
+2AF5; [0C DC C5, 05, 05]
-2A9E; [0C D9 67, 05, 05]
+2AF6; [0C DC CC, 05, 05]
-2A9F; [0C D9 6E, 05, 05]
+2AF7; [0C DC D3, 05, 05]
-2AA0; [0C D9 75, 05, 05]
+2AF8; [0C DC DA, 05, 05]
-2AA1; [0C D9 7C, 05, 05]
+2AF9; [0C DC E1, 05, 05]
-2AA2; [0C D9 83, 05, 05]
+2AFA; [0C DC E8, 05, 05]
-2AA3; [0C D9 8A, 05, 05]
+2AFB; [0C DC EF, 05, 05]
-2AA4; [0C D9 91, 05, 05]
+2AFC; [0C DC F6, 05, 05]
-2AA5; [0C D9 98, 05, 05]
+2AFD; [0C DC FD, 05, 05]
-2AA6; [0C D9 9F, 05, 05]
+2AFE; [0C DD 06, 05, 05]
-2AA7; [0C D9 A6, 05, 05]
+2AFF; [0C DD 0D, 05, 05]
-2AA8; [0C D9 AD, 05, 05]
+2B00; [0C DD 14, 05, 05]
-2AA9; [0C D9 B4, 05, 05]
+2B01; [0C DD 1B, 05, 05]
-2AAA; [0C D9 BB, 05, 05]
+2B02; [0C DD 22, 05, 05]
-2AAB; [0C D9 C2, 05, 05]
+2B03; [0C DD 29, 05, 05]
-2AAC; [0C D9 C9, 05, 05]
+2B04; [0C DD 30, 05, 05]
-2AAD; [0C D9 D0, 05, 05]
+2B05; [0C DD 37, 05, 05]
-2AAE; [0C D9 D7, 05, 05]
+2B06; [0C DD 3E, 05, 05]
-2AAF; [0C D9 DE, 05, 05]
+2B07; [0C DD 45, 05, 05]
-2AB0; [0C D9 E5, 05, 05]
+2B08; [0C DD 4C, 05, 05]
-2AB1; [0C D9 EC, 05, 05]
+2B09; [0C DD 53, 05, 05]
-2AB2; [0C D9 F3, 05, 05]
+2B0A; [0C DD 5A, 05, 05]
-2AB3; [0C D9 FA, 05, 05]
+2B0B; [0C DD 61, 05, 05]
-2AB4; [0C DA 03, 05, 05]
+2B0C; [0C DD 68, 05, 05]
-2AB5; [0C DA 0A, 05, 05]
+2B0D; [0C DD 6F, 05, 05]
-2AB6; [0C DA 11, 05, 05]
+2B0E; [0C DD 76, 05, 05]
-2AB7; [0C DA 18, 05, 05]
+2B0F; [0C DD 7D, 05, 05]
-2AB8; [0C DA 1F, 05, 05]
+2B10; [0C DD 84, 05, 05]
-2AB9; [0C DA 26, 05, 05]
+2B11; [0C DD 8B, 05, 05]
-2ABA; [0C DA 2D, 05, 05]
+2B12; [0C DD 92, 05, 05]
-2ABB; [0C DA 34, 05, 05]
+2B13; [0C DD 99, 05, 05]
-2ABC; [0C DA 3B, 05, 05]
+2B14; [0C DD A0, 05, 05]
-2ABD; [0C DA 42, 05, 05]
+2B15; [0C DD A7, 05, 05]
-2ABE; [0C DA 49, 05, 05]
+2B16; [0C DD AE, 05, 05]
-2ABF; [0C DA 50, 05, 05]
+2B17; [0C DD B5, 05, 05]
-2AC0; [0C DA 57, 05, 05]
+2B18; [0C DD BC, 05, 05]
-2AC1; [0C DA 5E, 05, 05]
+2B19; [0C DD C3, 05, 05]
-2AC2; [0C DA 65, 05, 05]
+2B1A; [0C DD CA, 05, 05]
-2AC3; [0C DA 6C, 05, 05]
+2B1B; [0C DD D1, 05, 05]
-2AC4; [0C DA 73, 05, 05]
+2B1C; [0C DD D8, 05, 05]
-2AC5; [0C DA 7A, 05, 05]
+2B1D; [0C DD DF, 05, 05]
-2AC6; [0C DA 81, 05, 05]
+2B1E; [0C DD E6, 05, 05]
-2AC7; [0C DA 88, 05, 05]
+2B1F; [0C DD ED, 05, 05]
-2AC8; [0C DA 8F, 05, 05]
+2B20; [0C DD F4, 05, 05]
-2AC9; [0C DA 96, 05, 05]
+2B21; [0C DD FB, 05, 05]
-2ACA; [0C DA 9D, 05, 05]
+2B22; [0C DE 04, 05, 05]
-2ACB; [0C DA A4, 05, 05]
+2B23; [0C DE 0B, 05, 05]
-2ACC; [0C DA AB, 05, 05]
+2B24; [0C DE 12, 05, 05]
-2ACD; [0C DA B2, 05, 05]
+2B25; [0C DE 19, 05, 05]
-2ACE; [0C DA B9, 05, 05]
+2B26; [0C DE 20, 05, 05]
-2ACF; [0C DA C0, 05, 05]
+2B27; [0C DE 27, 05, 05]
-2AD0; [0C DA C7, 05, 05]
+2B28; [0C DE 2E, 05, 05]
-2AD1; [0C DA CE, 05, 05]
+2B29; [0C DE 35, 05, 05]
-2AD2; [0C DA D5, 05, 05]
+2B2A; [0C DE 3C, 05, 05]
-2AD3; [0C DA DC, 05, 05]
+2B2B; [0C DE 43, 05, 05]
-2AD4; [0C DA E3, 05, 05]
+2B2C; [0C DE 4A, 05, 05]
-2AD5; [0C DA EA, 05, 05]
+2B2D; [0C DE 51, 05, 05]
-2AD6; [0C DA F1, 05, 05]
+2B2E; [0C DE 58, 05, 05]
-2AD7; [0C DA F8, 05, 05]
+2B2F; [0C DE 5F, 05, 05]
-2AD8; [0C DA FF, 05, 05]
+2B30; [0C DE 66, 05, 05]
-2AD9; [0C DB 08, 05, 05]
+2B31; [0C DE 6D, 05, 05]
-2ADA; [0C DB 0F, 05, 05]
+2B32; [0C DE 74, 05, 05]
-2ADB; [0C DB 16, 05, 05]
+2B33; [0C DE 7B, 05, 05]
-2ADD; [0C DB 1D, 05, 05]
-2ADC; [0C DB 1D, 05, 05][, 9E, 05]
+2B34; [0C DE 82, 05, 05]
-2ADE; [0C DB 24, 05, 05]
+2B35; [0C DE 89, 05, 05]
-2ADF; [0C DB 2B, 05, 05]
+2B36; [0C DE 90, 05, 05]
-2AE0; [0C DB 32, 05, 05]
+2B37; [0C DE 97, 05, 05]
-2AE1; [0C DB 39, 05, 05]
+2B38; [0C DE 9E, 05, 05]
-2AE2; [0C DB 40, 05, 05]
+2B39; [0C DE A5, 05, 05]
-2AE3; [0C DB 47, 05, 05]
+2B3A; [0C DE AC, 05, 05]
-2AE4; [0C DB 4E, 05, 05]
+2B3B; [0C DE B3, 05, 05]
-2AE5; [0C DB 55, 05, 05]
+2B3C; [0C DE BA, 05, 05]
-2AE6; [0C DB 5C, 05, 05]
+2B3D; [0C DE C1, 05, 05]
-2AE7; [0C DB 63, 05, 05]
+2B3E; [0C DE C8, 05, 05]
-2AE8; [0C DB 6A, 05, 05]
+2B3F; [0C DE CF, 05, 05]
-2AE9; [0C DB 71, 05, 05]
+2B40; [0C DE D6, 05, 05]
-2AEA; [0C DB 78, 05, 05]
+2B41; [0C DE DD, 05, 05]
-2AEB; [0C DB 7F, 05, 05]
+2B42; [0C DE E4, 05, 05]
-2AEC; [0C DB 86, 05, 05]
+2B43; [0C DE EB, 05, 05]
-2AED; [0C DB 8D, 05, 05]
+2B44; [0C DE F2, 05, 05]
-2AEE; [0C DB 94, 05, 05]
+2B45; [0C DE F9, 05, 05]
-2AEF; [0C DB 9B, 05, 05]
+2B46; [0C DF 02, 05, 05]
-2AF0; [0C DB A2, 05, 05]
+2B47; [0C DF 09, 05, 05]
-2AF1; [0C DB A9, 05, 05]
+2B48; [0C DF 10, 05, 05]
-2AF2; [0C DB B0, 05, 05]
+2B49; [0C DF 17, 05, 05]
-2AF3; [0C DB B7, 05, 05]
+2B4A; [0C DF 1E, 05, 05]
-2AF4; [0C DB BE, 05, 05]
+2B4B; [0C DF 25, 05, 05]
-2AF5; [0C DB C5, 05, 05]
+2B4C; [0C DF 2C, 05, 05]
-2AF6; [0C DB CC, 05, 05]
+2B4D; [0C DF 33, 05, 05]
-2AF7; [0C DB D3, 05, 05]
+2B4E; [0C DF 3A, 05, 05]
-2AF8; [0C DB DA, 05, 05]
+2B4F; [0C DF 41, 05, 05]
-2AF9; [0C DB E1, 05, 05]
+2B50; [0C DF 48, 05, 05]
-2AFA; [0C DB E8, 05, 05]
+2B51; [0C DF 4F, 05, 05]
-2AFB; [0C DB EF, 05, 05]
+2B52; [0C DF 56, 05, 05]
-2AFC; [0C DB F6, 05, 05]
+2B53; [0C DF 5D, 05, 05]
-2AFD; [0C DB FD, 05, 05]
+2B54; [0C DF 64, 05, 05]
-2AFE; [0C DC 06, 05, 05]
+2B55; [0C DF 6B, 05, 05]
-2AFF; [0C DC 0D, 05, 05]
+2B56; [0C DF 72, 05, 05]
-2B00; [0C DC 14, 05, 05]
+2B57; [0C DF 79, 05, 05]
-2B01; [0C DC 1B, 05, 05]
+2B58; [0C DF 80, 05, 05]
-2B02; [0C DC 22, 05, 05]
+2B59; [0C DF 87, 05, 05]
-2B03; [0C DC 29, 05, 05]
+2B5A; [0C DF 8E, 05, 05]
-2B04; [0C DC 30, 05, 05]
+2B5B; [0C DF 95, 05, 05]
-2B05; [0C DC 37, 05, 05]
+2B5C; [0C DF 9C, 05, 05]
-2B06; [0C DC 3E, 05, 05]
+2B5D; [0C DF A3, 05, 05]
-2B07; [0C DC 45, 05, 05]
+2B5E; [0C DF AA, 05, 05]
-2B08; [0C DC 4C, 05, 05]
+2B5F; [0C DF B1, 05, 05]
-2B09; [0C DC 53, 05, 05]
+2B60; [0C DF B8, 05, 05]
-2B0A; [0C DC 5A, 05, 05]
+2B61; [0C DF BF, 05, 05]
-2B0B; [0C DC 61, 05, 05]
+2B62; [0C DF C6, 05, 05]
-2B0C; [0C DC 68, 05, 05]
+2B63; [0C DF CD, 05, 05]
-2B0D; [0C DC 6F, 05, 05]
+2B64; [0C DF D4, 05, 05]
-2B0E; [0C DC 76, 05, 05]
+2B65; [0C DF DB, 05, 05]
-2B0F; [0C DC 7D, 05, 05]
+2B66; [0C DF E2, 05, 05]
-2B10; [0C DC 84, 05, 05]
+2B67; [0C DF E9, 05, 05]
-2B11; [0C DC 8B, 05, 05]
+2B68; [0C DF F0, 05, 05]
-2B12; [0C DC 92, 05, 05]
+2B69; [0C DF F7, 05, 05]
-2B13; [0C DC 99, 05, 05]
+2B6A; [0C DF FE, 05, 05]
-2B14; [0C DC A0, 05, 05]
+2B6B; [0C E0 07, 05, 05]
-2B15; [0C DC A7, 05, 05]
+2B6C; [0C E0 0E, 05, 05]
-2B16; [0C DC AE, 05, 05]
+2B6D; [0C E0 15, 05, 05]
-2B17; [0C DC B5, 05, 05]
+2B6E; [0C E0 1C, 05, 05]
-2B18; [0C DC BC, 05, 05]
+2B6F; [0C E0 23, 05, 05]
-2B19; [0C DC C3, 05, 05]
+2B70; [0C E0 2A, 05, 05]
-2B1A; [0C DC CA, 05, 05]
+2B71; [0C E0 31, 05, 05]
-2B1B; [0C DC D1, 05, 05]
+2B72; [0C E0 38, 05, 05]
-2B1C; [0C DC D8, 05, 05]
+2B73; [0C E0 3F, 05, 05]
-2B1D; [0C DC DF, 05, 05]
+2B76; [0C E0 46, 05, 05]
-2B1E; [0C DC E6, 05, 05]
+2B77; [0C E0 4D, 05, 05]
-2B1F; [0C DC ED, 05, 05]
+2B78; [0C E0 54, 05, 05]
-2B20; [0C DC F4, 05, 05]
+2B79; [0C E0 5B, 05, 05]
-2B21; [0C DC FB, 05, 05]
+2B7A; [0C E0 62, 05, 05]
-2B22; [0C DD 04, 05, 05]
+2B7B; [0C E0 69, 05, 05]
-2B23; [0C DD 0B, 05, 05]
+2B7C; [0C E0 70, 05, 05]
-2B24; [0C DD 12, 05, 05]
+2B7D; [0C E0 77, 05, 05]
-2B25; [0C DD 19, 05, 05]
+2B7E; [0C E0 7E, 05, 05]
-2B26; [0C DD 20, 05, 05]
+2B7F; [0C E0 85, 05, 05]
-2B27; [0C DD 27, 05, 05]
+2B80; [0C E0 8C, 05, 05]
-2B28; [0C DD 2E, 05, 05]
+2B81; [0C E0 93, 05, 05]
-2B29; [0C DD 35, 05, 05]
+2B82; [0C E0 9A, 05, 05]
-2B2A; [0C DD 3C, 05, 05]
+2B83; [0C E0 A1, 05, 05]
-2B2B; [0C DD 43, 05, 05]
+2B84; [0C E0 A8, 05, 05]
-2B2C; [0C DD 4A, 05, 05]
+2B85; [0C E0 AF, 05, 05]
-2B2D; [0C DD 51, 05, 05]
+2B86; [0C E0 B6, 05, 05]
-2B2E; [0C DD 58, 05, 05]
+2B87; [0C E0 BD, 05, 05]
-2B2F; [0C DD 5F, 05, 05]
+2B88; [0C E0 C4, 05, 05]
-2B30; [0C DD 66, 05, 05]
+2B89; [0C E0 CB, 05, 05]
-2B31; [0C DD 6D, 05, 05]
+2B8A; [0C E0 D2, 05, 05]
-2B32; [0C DD 74, 05, 05]
+2B8B; [0C E0 D9, 05, 05]
-2B33; [0C DD 7B, 05, 05]
+2B8C; [0C E0 E0, 05, 05]
-2B34; [0C DD 82, 05, 05]
+2B8D; [0C E0 E7, 05, 05]
-2B35; [0C DD 89, 05, 05]
+2B8E; [0C E0 EE, 05, 05]
-2B36; [0C DD 90, 05, 05]
+2B8F; [0C E0 F5, 05, 05]
-2B37; [0C DD 97, 05, 05]
+2B90; [0C E0 FC, 05, 05]
-2B38; [0C DD 9E, 05, 05]
+2B91; [0C E1 05, 05, 05]
-2B39; [0C DD A5, 05, 05]
+2B92; [0C E1 0C, 05, 05]
-2B3A; [0C DD AC, 05, 05]
+2B93; [0C E1 13, 05, 05]
-2B3B; [0C DD B3, 05, 05]
+2B94; [0C E1 1A, 05, 05]
-2B3C; [0C DD BA, 05, 05]
+2B95; [0C E1 21, 05, 05]
-2B3D; [0C DD C1, 05, 05]
+2B97; [0C E1 28, 05, 05]
-2B3E; [0C DD C8, 05, 05]
+2B98; [0C E1 2F, 05, 05]
-2B3F; [0C DD CF, 05, 05]
+2B99; [0C E1 36, 05, 05]
-2B40; [0C DD D6, 05, 05]
+2B9A; [0C E1 3D, 05, 05]
-2B41; [0C DD DD, 05, 05]
+2B9B; [0C E1 44, 05, 05]
-2B42; [0C DD E4, 05, 05]
+2B9C; [0C E1 4B, 05, 05]
-2B43; [0C DD EB, 05, 05]
+2B9D; [0C E1 52, 05, 05]
-2B44; [0C DD F2, 05, 05]
+2B9E; [0C E1 59, 05, 05]
-2B45; [0C DD F9, 05, 05]
+2B9F; [0C E1 60, 05, 05]
-2B46; [0C DE 02, 05, 05]
+2BA0; [0C E1 67, 05, 05]
-2B47; [0C DE 09, 05, 05]
+2BA1; [0C E1 6E, 05, 05]
-2B48; [0C DE 10, 05, 05]
+2BA2; [0C E1 75, 05, 05]
-2B49; [0C DE 17, 05, 05]
+2BA3; [0C E1 7C, 05, 05]
-2B4A; [0C DE 1E, 05, 05]
+2BA4; [0C E1 83, 05, 05]
-2B4B; [0C DE 25, 05, 05]
+2BA5; [0C E1 8A, 05, 05]
-2B4C; [0C DE 2C, 05, 05]
+2BA6; [0C E1 91, 05, 05]
-2B4D; [0C DE 33, 05, 05]
+2BA7; [0C E1 98, 05, 05]
-2B4E; [0C DE 3A, 05, 05]
+2BA8; [0C E1 9F, 05, 05]
-2B4F; [0C DE 41, 05, 05]
+2BA9; [0C E1 A6, 05, 05]
-2B50; [0C DE 48, 05, 05]
+2BAA; [0C E1 AD, 05, 05]
-2B51; [0C DE 4F, 05, 05]
+2BAB; [0C E1 B4, 05, 05]
-2B52; [0C DE 56, 05, 05]
+2BAC; [0C E1 BB, 05, 05]
-2B53; [0C DE 5D, 05, 05]
+2BAD; [0C E1 C2, 05, 05]
-2B54; [0C DE 64, 05, 05]
+2BAE; [0C E1 C9, 05, 05]
-2B55; [0C DE 6B, 05, 05]
+2BAF; [0C E1 D0, 05, 05]
-2B56; [0C DE 72, 05, 05]
+2BB0; [0C E1 D7, 05, 05]
-2B57; [0C DE 79, 05, 05]
+2BB1; [0C E1 DE, 05, 05]
-2B58; [0C DE 80, 05, 05]
+2BB2; [0C E1 E5, 05, 05]
-2B59; [0C DE 87, 05, 05]
+2BB3; [0C E1 EC, 05, 05]
-2B5A; [0C DE 8E, 05, 05]
+2BB4; [0C E1 F3, 05, 05]
-2B5B; [0C DE 95, 05, 05]
+2BB5; [0C E1 FA, 05, 05]
-2B5C; [0C DE 9C, 05, 05]
+2BB6; [0C E2 03, 05, 05]
-2B5D; [0C DE A3, 05, 05]
+2BB7; [0C E2 0A, 05, 05]
-2B5E; [0C DE AA, 05, 05]
+2BB8; [0C E2 11, 05, 05]
-2B5F; [0C DE B1, 05, 05]
+2BB9; [0C E2 18, 05, 05]
-2B60; [0C DE B8, 05, 05]
+2BBA; [0C E2 1F, 05, 05]
-2B61; [0C DE BF, 05, 05]
+2BBB; [0C E2 26, 05, 05]
-2B62; [0C DE C6, 05, 05]
+2BBC; [0C E2 2D, 05, 05]
-2B63; [0C DE CD, 05, 05]
+2BBD; [0C E2 34, 05, 05]
-2B64; [0C DE D4, 05, 05]
+2BBE; [0C E2 3B, 05, 05]
-2B65; [0C DE DB, 05, 05]
+2BBF; [0C E2 42, 05, 05]
-2B66; [0C DE E2, 05, 05]
+2BC0; [0C E2 49, 05, 05]
-2B67; [0C DE E9, 05, 05]
+2BC1; [0C E2 50, 05, 05]
-2B68; [0C DE F0, 05, 05]
+2BC2; [0C E2 57, 05, 05]
-2B69; [0C DE F7, 05, 05]
+2BC3; [0C E2 5E, 05, 05]
-2B6A; [0C DE FE, 05, 05]
+2BC4; [0C E2 65, 05, 05]
-2B6B; [0C DF 07, 05, 05]
+2BC5; [0C E2 6C, 05, 05]
-2B6C; [0C DF 0E, 05, 05]
+2BC6; [0C E2 73, 05, 05]
-2B6D; [0C DF 15, 05, 05]
+2BC7; [0C E2 7A, 05, 05]
-2B6E; [0C DF 1C, 05, 05]
+2BC8; [0C E2 81, 05, 05]
-2B6F; [0C DF 23, 05, 05]
+2BC9; [0C E2 88, 05, 05]
-2B70; [0C DF 2A, 05, 05]
+2BCA; [0C E2 8F, 05, 05]
-2B71; [0C DF 31, 05, 05]
+2BCB; [0C E2 96, 05, 05]
-2B72; [0C DF 38, 05, 05]
+2BCC; [0C E2 9D, 05, 05]
-2B73; [0C DF 3F, 05, 05]
+2BCD; [0C E2 A4, 05, 05]
-2B76; [0C DF 46, 05, 05]
+2BCE; [0C E2 AB, 05, 05]
-2B77; [0C DF 4D, 05, 05]
+2BCF; [0C E2 B2, 05, 05]
-2B78; [0C DF 54, 05, 05]
+2BD0; [0C E2 B9, 05, 05]
-2B79; [0C DF 5B, 05, 05]
+2BD1; [0C E2 C0, 05, 05]
-2B7A; [0C DF 62, 05, 05]
+2BD2; [0C E2 C7, 05, 05]
-2B7B; [0C DF 69, 05, 05]
+2BD3; [0C E2 CE, 05, 05]
-2B7C; [0C DF 70, 05, 05]
+2BD4; [0C E2 D5, 05, 05]
-2B7D; [0C DF 77, 05, 05]
+2BD5; [0C E2 DC, 05, 05]
-2B7E; [0C DF 7E, 05, 05]
+2BD6; [0C E2 E3, 05, 05]
-2B7F; [0C DF 85, 05, 05]
+2BD7; [0C E2 EA, 05, 05]
-2B80; [0C DF 8C, 05, 05]
+2BD8; [0C E2 F1, 05, 05]
-2B81; [0C DF 93, 05, 05]
+2BD9; [0C E2 F8, 05, 05]
-2B82; [0C DF 9A, 05, 05]
+2BDA; [0C E2 FF, 05, 05]
-2B83; [0C DF A1, 05, 05]
+2BDB; [0C E3 08, 05, 05]
-2B84; [0C DF A8, 05, 05]
+2BDC; [0C E3 0F, 05, 05]
-2B85; [0C DF AF, 05, 05]
+2BDD; [0C E3 16, 05, 05]
-2B86; [0C DF B6, 05, 05]
+2BDE; [0C E3 1D, 05, 05]
-2B87; [0C DF BD, 05, 05]
+2BDF; [0C E3 24, 05, 05]
-2B88; [0C DF C4, 05, 05]
+2BE0; [0C E3 2B, 05, 05]
-2B89; [0C DF CB, 05, 05]
+2BE1; [0C E3 32, 05, 05]
-2B8A; [0C DF D2, 05, 05]
+2BE2; [0C E3 39, 05, 05]
-2B8B; [0C DF D9, 05, 05]
+2BE3; [0C E3 40, 05, 05]
-2B8C; [0C DF E0, 05, 05]
+2BE4; [0C E3 47, 05, 05]
-2B8D; [0C DF E7, 05, 05]
+2BE5; [0C E3 4E, 05, 05]
-2B8E; [0C DF EE, 05, 05]
+2BE6; [0C E3 55, 05, 05]
-2B8F; [0C DF F5, 05, 05]
+2BE7; [0C E3 5C, 05, 05]
-2B90; [0C DF FC, 05, 05]
+2BE8; [0C E3 63, 05, 05]
-2B91; [0C E0 05, 05, 05]
+2BE9; [0C E3 6A, 05, 05]
-2B92; [0C E0 0C, 05, 05]
+2BEA; [0C E3 71, 05, 05]
-2B93; [0C E0 13, 05, 05]
+2BEB; [0C E3 78, 05, 05]
-2B94; [0C E0 1A, 05, 05]
+2BEC; [0C E3 7F, 05, 05]
-2B95; [0C E0 21, 05, 05]
+2BED; [0C E3 86, 05, 05]
-2B97; [0C E0 28, 05, 05]
+2BEE; [0C E3 8D, 05, 05]
-2B98; [0C E0 2F, 05, 05]
+2BEF; [0C E3 94, 05, 05]
-2B99; [0C E0 36, 05, 05]
+2BF0; [0C E3 9B, 05, 05]
-2B9A; [0C E0 3D, 05, 05]
+2BF1; [0C E3 A2, 05, 05]
-2B9B; [0C E0 44, 05, 05]
+2BF2; [0C E3 A9, 05, 05]
-2B9C; [0C E0 4B, 05, 05]
+2BF3; [0C E3 B0, 05, 05]
-2B9D; [0C E0 52, 05, 05]
+2BF4; [0C E3 B7, 05, 05]
-2B9E; [0C E0 59, 05, 05]
+2BF5; [0C E3 BE, 05, 05]
-2B9F; [0C E0 60, 05, 05]
+2BF6; [0C E3 C5, 05, 05]
-2BA0; [0C E0 67, 05, 05]
+2BF7; [0C E3 CC, 05, 05]
-2BA1; [0C E0 6E, 05, 05]
+2BF8; [0C E3 D3, 05, 05]
-2BA2; [0C E0 75, 05, 05]
+2BF9; [0C E3 DA, 05, 05]
-2BA3; [0C E0 7C, 05, 05]
+2BFA; [0C E3 E1, 05, 05]
-2BA4; [0C E0 83, 05, 05]
+2BFB; [0C E3 E8, 05, 05]
-2BA5; [0C E0 8A, 05, 05]
+2BFC; [0C E3 EF, 05, 05]
-2BA6; [0C E0 91, 05, 05]
+2BFD; [0C E3 F6, 05, 05]
-2BA7; [0C E0 98, 05, 05]
+2BFE; [0C E3 FD, 05, 05]
-2BA8; [0C E0 9F, 05, 05]
+2BFF; [0C E4 06, 05, 05]
-2BA9; [0C E0 A6, 05, 05]
+2CE5; [0C E4 0D, 05, 05]
-2BAA; [0C E0 AD, 05, 05]
+2CE6; [0C E4 14, 05, 05]
-2BAB; [0C E0 B4, 05, 05]
+2CE7; [0C E4 1B, 05, 05]
-2BAC; [0C E0 BB, 05, 05]
+2CE8; [0C E4 22, 05, 05]
-2BAD; [0C E0 C2, 05, 05]
+2CE9; [0C E4 29, 05, 05]
-2BAE; [0C E0 C9, 05, 05]
+2CEA; [0C E4 30, 05, 05]
-2BAF; [0C E0 D0, 05, 05]
+2800; [0C E4 37, 05, 05]
-2BB0; [0C E0 D7, 05, 05]
+2801; [0C E4 3E, 05, 05]
-2BB1; [0C E0 DE, 05, 05]
+2802; [0C E4 45, 05, 05]
-2BB2; [0C E0 E5, 05, 05]
+2803; [0C E4 4C, 05, 05]
-2BB3; [0C E0 EC, 05, 05]
+2804; [0C E4 53, 05, 05]
-2BB4; [0C E0 F3, 05, 05]
+2805; [0C E4 5A, 05, 05]
-2BB5; [0C E0 FA, 05, 05]
+2806; [0C E4 61, 05, 05]
-2BB6; [0C E1 03, 05, 05]
+2807; [0C E4 68, 05, 05]
-2BB7; [0C E1 0A, 05, 05]
+2808; [0C E4 6F, 05, 05]
-2BB8; [0C E1 11, 05, 05]
+2809; [0C E4 76, 05, 05]
-2BB9; [0C E1 18, 05, 05]
+280A; [0C E4 7D, 05, 05]
-2BBA; [0C E1 1F, 05, 05]
+280B; [0C E4 84, 05, 05]
-2BBB; [0C E1 26, 05, 05]
+280C; [0C E4 8B, 05, 05]
-2BBC; [0C E1 2D, 05, 05]
+280D; [0C E4 92, 05, 05]
-2BBD; [0C E1 34, 05, 05]
+280E; [0C E4 99, 05, 05]
-2BBE; [0C E1 3B, 05, 05]
+280F; [0C E4 A0, 05, 05]
-2BBF; [0C E1 42, 05, 05]
+2810; [0C E4 A7, 05, 05]
-2BC0; [0C E1 49, 05, 05]
+2811; [0C E4 AE, 05, 05]
-2BC1; [0C E1 50, 05, 05]
+2812; [0C E4 B5, 05, 05]
-2BC2; [0C E1 57, 05, 05]
+2813; [0C E4 BC, 05, 05]
-2BC3; [0C E1 5E, 05, 05]
+2814; [0C E4 C3, 05, 05]
-2BC4; [0C E1 65, 05, 05]
+2815; [0C E4 CA, 05, 05]
-2BC5; [0C E1 6C, 05, 05]
+2816; [0C E4 D1, 05, 05]
-2BC6; [0C E1 73, 05, 05]
+2817; [0C E4 D8, 05, 05]
-2BC7; [0C E1 7A, 05, 05]
+2818; [0C E4 DF, 05, 05]
-2BC8; [0C E1 81, 05, 05]
+2819; [0C E4 E6, 05, 05]
-2BC9; [0C E1 88, 05, 05]
+281A; [0C E4 ED, 05, 05]
-2BCA; [0C E1 8F, 05, 05]
+281B; [0C E4 F4, 05, 05]
-2BCB; [0C E1 96, 05, 05]
+281C; [0C E4 FB, 05, 05]
-2BCC; [0C E1 9D, 05, 05]
+281D; [0C E5 04, 05, 05]
-2BCD; [0C E1 A4, 05, 05]
+281E; [0C E5 0B, 05, 05]
-2BCE; [0C E1 AB, 05, 05]
+281F; [0C E5 12, 05, 05]
-2BCF; [0C E1 B2, 05, 05]
+2820; [0C E5 19, 05, 05]
-2BD0; [0C E1 B9, 05, 05]
+2821; [0C E5 20, 05, 05]
-2BD1; [0C E1 C0, 05, 05]
+2822; [0C E5 27, 05, 05]
-2BD2; [0C E1 C7, 05, 05]
+2823; [0C E5 2E, 05, 05]
-2BD3; [0C E1 CE, 05, 05]
+2824; [0C E5 35, 05, 05]
-2BD4; [0C E1 D5, 05, 05]
+2825; [0C E5 3C, 05, 05]
-2BD5; [0C E1 DC, 05, 05]
+2826; [0C E5 43, 05, 05]
-2BD6; [0C E1 E3, 05, 05]
+2827; [0C E5 4A, 05, 05]
-2BD7; [0C E1 EA, 05, 05]
+2828; [0C E5 51, 05, 05]
-2BD8; [0C E1 F1, 05, 05]
+2829; [0C E5 58, 05, 05]
-2BD9; [0C E1 F8, 05, 05]
+282A; [0C E5 5F, 05, 05]
-2BDA; [0C E1 FF, 05, 05]
+282B; [0C E5 66, 05, 05]
-2BDB; [0C E2 08, 05, 05]
+282C; [0C E5 6D, 05, 05]
-2BDC; [0C E2 0F, 05, 05]
+282D; [0C E5 74, 05, 05]
-2BDD; [0C E2 16, 05, 05]
+282E; [0C E5 7B, 05, 05]
-2BDE; [0C E2 1D, 05, 05]
+282F; [0C E5 82, 05, 05]
-2BDF; [0C E2 24, 05, 05]
+2830; [0C E5 89, 05, 05]
-2BE0; [0C E2 2B, 05, 05]
+2831; [0C E5 90, 05, 05]
-2BE1; [0C E2 32, 05, 05]
+2832; [0C E5 97, 05, 05]
-2BE2; [0C E2 39, 05, 05]
+2833; [0C E5 9E, 05, 05]
-2BE3; [0C E2 40, 05, 05]
+2834; [0C E5 A5, 05, 05]
-2BE4; [0C E2 47, 05, 05]
+2835; [0C E5 AC, 05, 05]
-2BE5; [0C E2 4E, 05, 05]
+2836; [0C E5 B3, 05, 05]
-2BE6; [0C E2 55, 05, 05]
+2837; [0C E5 BA, 05, 05]
-2BE7; [0C E2 5C, 05, 05]
+2838; [0C E5 C1, 05, 05]
-2BE8; [0C E2 63, 05, 05]
+2839; [0C E5 C8, 05, 05]
-2BE9; [0C E2 6A, 05, 05]
+283A; [0C E5 CF, 05, 05]
-2BEA; [0C E2 71, 05, 05]
+283B; [0C E5 D6, 05, 05]
-2BEB; [0C E2 78, 05, 05]
+283C; [0C E5 DD, 05, 05]
-2BEC; [0C E2 7F, 05, 05]
+283D; [0C E5 E4, 05, 05]
-2BED; [0C E2 86, 05, 05]
+283E; [0C E5 EB, 05, 05]
-2BEE; [0C E2 8D, 05, 05]
+283F; [0C E5 F2, 05, 05]
-2BEF; [0C E2 94, 05, 05]
+2840; [0C E5 F9, 05, 05]
-2BF0; [0C E2 9B, 05, 05]
+2841; [0C E6 02, 05, 05]
-2BF1; [0C E2 A2, 05, 05]
+2842; [0C E6 09, 05, 05]
-2BF2; [0C E2 A9, 05, 05]
+2843; [0C E6 10, 05, 05]
-2BF3; [0C E2 B0, 05, 05]
+2844; [0C E6 17, 05, 05]
-2BF4; [0C E2 B7, 05, 05]
+2845; [0C E6 1E, 05, 05]
-2BF5; [0C E2 BE, 05, 05]
+2846; [0C E6 25, 05, 05]
-2BF6; [0C E2 C5, 05, 05]
+2847; [0C E6 2C, 05, 05]
-2BF7; [0C E2 CC, 05, 05]
+2848; [0C E6 33, 05, 05]
-2BF8; [0C E2 D3, 05, 05]
+2849; [0C E6 3A, 05, 05]
-2BF9; [0C E2 DA, 05, 05]
+284A; [0C E6 41, 05, 05]
-2BFA; [0C E2 E1, 05, 05]
+284B; [0C E6 48, 05, 05]
-2BFB; [0C E2 E8, 05, 05]
+284C; [0C E6 4F, 05, 05]
-2BFC; [0C E2 EF, 05, 05]
+284D; [0C E6 56, 05, 05]
-2BFD; [0C E2 F6, 05, 05]
+284E; [0C E6 5D, 05, 05]
-2BFE; [0C E2 FD, 05, 05]
+284F; [0C E6 64, 05, 05]
-2BFF; [0C E3 06, 05, 05]
+2850; [0C E6 6B, 05, 05]
-2CE5; [0C E3 0D, 05, 05]
+2851; [0C E6 72, 05, 05]
-2CE6; [0C E3 14, 05, 05]
+2852; [0C E6 79, 05, 05]
-2CE7; [0C E3 1B, 05, 05]
+2853; [0C E6 80, 05, 05]
-2CE8; [0C E3 22, 05, 05]
+2854; [0C E6 87, 05, 05]
-2CE9; [0C E3 29, 05, 05]
+2855; [0C E6 8E, 05, 05]
-2CEA; [0C E3 30, 05, 05]
+2856; [0C E6 95, 05, 05]
-2800; [0C E3 37, 05, 05]
+2857; [0C E6 9C, 05, 05]
-2801; [0C E3 3E, 05, 05]
+2858; [0C E6 A3, 05, 05]
-2802; [0C E3 45, 05, 05]
+2859; [0C E6 AA, 05, 05]
-2803; [0C E3 4C, 05, 05]
+285A; [0C E6 B1, 05, 05]
-2804; [0C E3 53, 05, 05]
+285B; [0C E6 B8, 05, 05]
-2805; [0C E3 5A, 05, 05]
+285C; [0C E6 BF, 05, 05]
-2806; [0C E3 61, 05, 05]
+285D; [0C E6 C6, 05, 05]
-2807; [0C E3 68, 05, 05]
+285E; [0C E6 CD, 05, 05]
-2808; [0C E3 6F, 05, 05]
+285F; [0C E6 D4, 05, 05]
-2809; [0C E3 76, 05, 05]
+2860; [0C E6 DB, 05, 05]
-280A; [0C E3 7D, 05, 05]
+2861; [0C E6 E2, 05, 05]
-280B; [0C E3 84, 05, 05]
+2862; [0C E6 E9, 05, 05]
-280C; [0C E3 8B, 05, 05]
+2863; [0C E6 F0, 05, 05]
-280D; [0C E3 92, 05, 05]
+2864; [0C E6 F7, 05, 05]
-280E; [0C E3 99, 05, 05]
+2865; [0C E6 FE, 05, 05]
-280F; [0C E3 A0, 05, 05]
+2866; [0C E7 07, 05, 05]
-2810; [0C E3 A7, 05, 05]
+2867; [0C E7 0E, 05, 05]
-2811; [0C E3 AE, 05, 05]
+2868; [0C E7 15, 05, 05]
-2812; [0C E3 B5, 05, 05]
+2869; [0C E7 1C, 05, 05]
-2813; [0C E3 BC, 05, 05]
+286A; [0C E7 23, 05, 05]
-2814; [0C E3 C3, 05, 05]
+286B; [0C E7 2A, 05, 05]
-2815; [0C E3 CA, 05, 05]
+286C; [0C E7 31, 05, 05]
-2816; [0C E3 D1, 05, 05]
+286D; [0C E7 38, 05, 05]
-2817; [0C E3 D8, 05, 05]
+286E; [0C E7 3F, 05, 05]
-2818; [0C E3 DF, 05, 05]
+286F; [0C E7 46, 05, 05]
-2819; [0C E3 E6, 05, 05]
+2870; [0C E7 4D, 05, 05]
-281A; [0C E3 ED, 05, 05]
+2871; [0C E7 54, 05, 05]
-281B; [0C E3 F4, 05, 05]
+2872; [0C E7 5B, 05, 05]
-281C; [0C E3 FB, 05, 05]
+2873; [0C E7 62, 05, 05]
-281D; [0C E4 04, 05, 05]
+2874; [0C E7 69, 05, 05]
-281E; [0C E4 0B, 05, 05]
+2875; [0C E7 70, 05, 05]
-281F; [0C E4 12, 05, 05]
+2876; [0C E7 77, 05, 05]
-2820; [0C E4 19, 05, 05]
+2877; [0C E7 7E, 05, 05]
-2821; [0C E4 20, 05, 05]
+2878; [0C E7 85, 05, 05]
-2822; [0C E4 27, 05, 05]
+2879; [0C E7 8C, 05, 05]
-2823; [0C E4 2E, 05, 05]
+287A; [0C E7 93, 05, 05]
-2824; [0C E4 35, 05, 05]
+287B; [0C E7 9A, 05, 05]
-2825; [0C E4 3C, 05, 05]
+287C; [0C E7 A1, 05, 05]
-2826; [0C E4 43, 05, 05]
+287D; [0C E7 A8, 05, 05]
-2827; [0C E4 4A, 05, 05]
+287E; [0C E7 AF, 05, 05]
-2828; [0C E4 51, 05, 05]
+287F; [0C E7 B6, 05, 05]
-2829; [0C E4 58, 05, 05]
+2880; [0C E7 BD, 05, 05]
-282A; [0C E4 5F, 05, 05]
+2881; [0C E7 C4, 05, 05]
-282B; [0C E4 66, 05, 05]
+2882; [0C E7 CB, 05, 05]
-282C; [0C E4 6D, 05, 05]
+2883; [0C E7 D2, 05, 05]
-282D; [0C E4 74, 05, 05]
+2884; [0C E7 D9, 05, 05]
-282E; [0C E4 7B, 05, 05]
+2885; [0C E7 E0, 05, 05]
-282F; [0C E4 82, 05, 05]
+2886; [0C E7 E7, 05, 05]
-2830; [0C E4 89, 05, 05]
+2887; [0C E7 EE, 05, 05]
-2831; [0C E4 90, 05, 05]
+2888; [0C E7 F5, 05, 05]
-2832; [0C E4 97, 05, 05]
+2889; [0C E7 FC, 05, 05]
-2833; [0C E4 9E, 05, 05]
+288A; [0C E8 05, 05, 05]
-2834; [0C E4 A5, 05, 05]
+288B; [0C E8 0C, 05, 05]
-2835; [0C E4 AC, 05, 05]
+288C; [0C E8 13, 05, 05]
-2836; [0C E4 B3, 05, 05]
+288D; [0C E8 1A, 05, 05]
-2837; [0C E4 BA, 05, 05]
+288E; [0C E8 21, 05, 05]
-2838; [0C E4 C1, 05, 05]
+288F; [0C E8 28, 05, 05]
-2839; [0C E4 C8, 05, 05]
+2890; [0C E8 2F, 05, 05]
-283A; [0C E4 CF, 05, 05]
+2891; [0C E8 36, 05, 05]
-283B; [0C E4 D6, 05, 05]
+2892; [0C E8 3D, 05, 05]
-283C; [0C E4 DD, 05, 05]
+2893; [0C E8 44, 05, 05]
-283D; [0C E4 E4, 05, 05]
+2894; [0C E8 4B, 05, 05]
-283E; [0C E4 EB, 05, 05]
+2895; [0C E8 52, 05, 05]
-283F; [0C E4 F2, 05, 05]
+2896; [0C E8 59, 05, 05]
-2840; [0C E4 F9, 05, 05]
+2897; [0C E8 60, 05, 05]
-2841; [0C E5 02, 05, 05]
+2898; [0C E8 67, 05, 05]
-2842; [0C E5 09, 05, 05]
+2899; [0C E8 6E, 05, 05]
-2843; [0C E5 10, 05, 05]
+289A; [0C E8 75, 05, 05]
-2844; [0C E5 17, 05, 05]
+289B; [0C E8 7C, 05, 05]
-2845; [0C E5 1E, 05, 05]
+289C; [0C E8 83, 05, 05]
-2846; [0C E5 25, 05, 05]
+289D; [0C E8 8A, 05, 05]
-2847; [0C E5 2C, 05, 05]
+289E; [0C E8 91, 05, 05]
-2848; [0C E5 33, 05, 05]
+289F; [0C E8 98, 05, 05]
-2849; [0C E5 3A, 05, 05]
+28A0; [0C E8 9F, 05, 05]
-284A; [0C E5 41, 05, 05]
+28A1; [0C E8 A6, 05, 05]
-284B; [0C E5 48, 05, 05]
+28A2; [0C E8 AD, 05, 05]
-284C; [0C E5 4F, 05, 05]
+28A3; [0C E8 B4, 05, 05]
-284D; [0C E5 56, 05, 05]
+28A4; [0C E8 BB, 05, 05]
-284E; [0C E5 5D, 05, 05]
+28A5; [0C E8 C2, 05, 05]
-284F; [0C E5 64, 05, 05]
+28A6; [0C E8 C9, 05, 05]
-2850; [0C E5 6B, 05, 05]
+28A7; [0C E8 D0, 05, 05]
-2851; [0C E5 72, 05, 05]
+28A8; [0C E8 D7, 05, 05]
-2852; [0C E5 79, 05, 05]
+28A9; [0C E8 DE, 05, 05]
-2853; [0C E5 80, 05, 05]
+28AA; [0C E8 E5, 05, 05]
-2854; [0C E5 87, 05, 05]
+28AB; [0C E8 EC, 05, 05]
-2855; [0C E5 8E, 05, 05]
+28AC; [0C E8 F3, 05, 05]
-2856; [0C E5 95, 05, 05]
+28AD; [0C E8 FA, 05, 05]
-2857; [0C E5 9C, 05, 05]
+28AE; [0C E9 03, 05, 05]
-2858; [0C E5 A3, 05, 05]
+28AF; [0C E9 0A, 05, 05]
-2859; [0C E5 AA, 05, 05]
+28B0; [0C E9 11, 05, 05]
-285A; [0C E5 B1, 05, 05]
+28B1; [0C E9 18, 05, 05]
-285B; [0C E5 B8, 05, 05]
+28B2; [0C E9 1F, 05, 05]
-285C; [0C E5 BF, 05, 05]
+28B3; [0C E9 26, 05, 05]
-285D; [0C E5 C6, 05, 05]
+28B4; [0C E9 2D, 05, 05]
-285E; [0C E5 CD, 05, 05]
+28B5; [0C E9 34, 05, 05]
-285F; [0C E5 D4, 05, 05]
+28B6; [0C E9 3B, 05, 05]
-2860; [0C E5 DB, 05, 05]
+28B7; [0C E9 42, 05, 05]
-2861; [0C E5 E2, 05, 05]
+28B8; [0C E9 49, 05, 05]
-2862; [0C E5 E9, 05, 05]
+28B9; [0C E9 50, 05, 05]
-2863; [0C E5 F0, 05, 05]
+28BA; [0C E9 57, 05, 05]
-2864; [0C E5 F7, 05, 05]
+28BB; [0C E9 5E, 05, 05]
-2865; [0C E5 FE, 05, 05]
+28BC; [0C E9 65, 05, 05]
-2866; [0C E6 07, 05, 05]
+28BD; [0C E9 6C, 05, 05]
-2867; [0C E6 0E, 05, 05]
+28BE; [0C E9 73, 05, 05]
-2868; [0C E6 15, 05, 05]
+28BF; [0C E9 7A, 05, 05]
-2869; [0C E6 1C, 05, 05]
+28C0; [0C E9 81, 05, 05]
-286A; [0C E6 23, 05, 05]
+28C1; [0C E9 88, 05, 05]
-286B; [0C E6 2A, 05, 05]
+28C2; [0C E9 8F, 05, 05]
-286C; [0C E6 31, 05, 05]
+28C3; [0C E9 96, 05, 05]
-286D; [0C E6 38, 05, 05]
+28C4; [0C E9 9D, 05, 05]
-286E; [0C E6 3F, 05, 05]
+28C5; [0C E9 A4, 05, 05]
-286F; [0C E6 46, 05, 05]
+28C6; [0C E9 AB, 05, 05]
-2870; [0C E6 4D, 05, 05]
+28C7; [0C E9 B2, 05, 05]
-2871; [0C E6 54, 05, 05]
+28C8; [0C E9 B9, 05, 05]
-2872; [0C E6 5B, 05, 05]
+28C9; [0C E9 C0, 05, 05]
-2873; [0C E6 62, 05, 05]
+28CA; [0C E9 C7, 05, 05]
-2874; [0C E6 69, 05, 05]
+28CB; [0C E9 CE, 05, 05]
-2875; [0C E6 70, 05, 05]
+28CC; [0C E9 D5, 05, 05]
-2876; [0C E6 77, 05, 05]
+28CD; [0C E9 DC, 05, 05]
-2877; [0C E6 7E, 05, 05]
+28CE; [0C E9 E3, 05, 05]
-2878; [0C E6 85, 05, 05]
+28CF; [0C E9 EA, 05, 05]
-2879; [0C E6 8C, 05, 05]
+28D0; [0C E9 F1, 05, 05]
-287A; [0C E6 93, 05, 05]
+28D1; [0C E9 F8, 05, 05]
-287B; [0C E6 9A, 05, 05]
+28D2; [0C E9 FF, 05, 05]
-287C; [0C E6 A1, 05, 05]
+28D3; [0C EA 08, 05, 05]
-287D; [0C E6 A8, 05, 05]
+28D4; [0C EA 0F, 05, 05]
-287E; [0C E6 AF, 05, 05]
+28D5; [0C EA 16, 05, 05]
-287F; [0C E6 B6, 05, 05]
+28D6; [0C EA 1D, 05, 05]
-2880; [0C E6 BD, 05, 05]
+28D7; [0C EA 24, 05, 05]
-2881; [0C E6 C4, 05, 05]
+28D8; [0C EA 2B, 05, 05]
-2882; [0C E6 CB, 05, 05]
+28D9; [0C EA 32, 05, 05]
-2883; [0C E6 D2, 05, 05]
+28DA; [0C EA 39, 05, 05]
-2884; [0C E6 D9, 05, 05]
+28DB; [0C EA 40, 05, 05]
-2885; [0C E6 E0, 05, 05]
+28DC; [0C EA 47, 05, 05]
-2886; [0C E6 E7, 05, 05]
+28DD; [0C EA 4E, 05, 05]
-2887; [0C E6 EE, 05, 05]
+28DE; [0C EA 55, 05, 05]
-2888; [0C E6 F5, 05, 05]
+28DF; [0C EA 5C, 05, 05]
-2889; [0C E6 FC, 05, 05]
+28E0; [0C EA 63, 05, 05]
-288A; [0C E7 05, 05, 05]
+28E1; [0C EA 6A, 05, 05]
-288B; [0C E7 0C, 05, 05]
+28E2; [0C EA 71, 05, 05]
-288C; [0C E7 13, 05, 05]
+28E3; [0C EA 78, 05, 05]
-288D; [0C E7 1A, 05, 05]
+28E4; [0C EA 7F, 05, 05]
-288E; [0C E7 21, 05, 05]
+28E5; [0C EA 86, 05, 05]
-288F; [0C E7 28, 05, 05]
+28E6; [0C EA 8D, 05, 05]
-2890; [0C E7 2F, 05, 05]
+28E7; [0C EA 94, 05, 05]
-2891; [0C E7 36, 05, 05]
+28E8; [0C EA 9B, 05, 05]
-2892; [0C E7 3D, 05, 05]
+28E9; [0C EA A2, 05, 05]
-2893; [0C E7 44, 05, 05]
+28EA; [0C EA A9, 05, 05]
-2894; [0C E7 4B, 05, 05]
+28EB; [0C EA B0, 05, 05]
-2895; [0C E7 52, 05, 05]
+28EC; [0C EA B7, 05, 05]
-2896; [0C E7 59, 05, 05]
+28ED; [0C EA BE, 05, 05]
-2897; [0C E7 60, 05, 05]
+28EE; [0C EA C5, 05, 05]
-2898; [0C E7 67, 05, 05]
+28EF; [0C EA CC, 05, 05]
-2899; [0C E7 6E, 05, 05]
+28F0; [0C EA D3, 05, 05]
-289A; [0C E7 75, 05, 05]
+28F1; [0C EA DA, 05, 05]
-289B; [0C E7 7C, 05, 05]
+28F2; [0C EA E1, 05, 05]
-289C; [0C E7 83, 05, 05]
+28F3; [0C EA E8, 05, 05]
-289D; [0C E7 8A, 05, 05]
+28F4; [0C EA EF, 05, 05]
-289E; [0C E7 91, 05, 05]
+28F5; [0C EA F6, 05, 05]
-289F; [0C E7 98, 05, 05]
+28F6; [0C EA FD, 05, 05]
-28A0; [0C E7 9F, 05, 05]
+28F7; [0C EB 06, 05, 05]
-28A1; [0C E7 A6, 05, 05]
+28F8; [0C EB 0D, 05, 05]
-28A2; [0C E7 AD, 05, 05]
+28F9; [0C EB 14, 05, 05]
-28A3; [0C E7 B4, 05, 05]
+28FA; [0C EB 1B, 05, 05]
-28A4; [0C E7 BB, 05, 05]
+28FB; [0C EB 22, 05, 05]
-28A5; [0C E7 C2, 05, 05]
+28FC; [0C EB 29, 05, 05]
-28A6; [0C E7 C9, 05, 05]
+28FD; [0C EB 30, 05, 05]
-28A7; [0C E7 D0, 05, 05]
+28FE; [0C EB 37, 05, 05]
-28A8; [0C E7 D7, 05, 05]
+28FF; [0C EB 3E, 05, 05]
-28A9; [0C E7 DE, 05, 05]
+268A; [0C EB 45, 05, 05]
-28AA; [0C E7 E5, 05, 05]
+268B; [0C EB 4C, 05, 05]
-28AB; [0C E7 EC, 05, 05]
+268C; [0C EB 53, 05, 05]
-28AC; [0C E7 F3, 05, 05]
+268D; [0C EB 5A, 05, 05]
-28AD; [0C E7 FA, 05, 05]
+268E; [0C EB 61, 05, 05]
-28AE; [0C E8 03, 05, 05]
+268F; [0C EB 68, 05, 05]
-28AF; [0C E8 0A, 05, 05]
+2630; [0C EB 6F, 05, 05]
-28B0; [0C E8 11, 05, 05]
+2631; [0C EB 76, 05, 05]
-28B1; [0C E8 18, 05, 05]
+2632; [0C EB 7D, 05, 05]
-28B2; [0C E8 1F, 05, 05]
+2633; [0C EB 84, 05, 05]
-28B3; [0C E8 26, 05, 05]
+2634; [0C EB 8B, 05, 05]
-28B4; [0C E8 2D, 05, 05]
+2635; [0C EB 92, 05, 05]
-28B5; [0C E8 34, 05, 05]
+2636; [0C EB 99, 05, 05]
-28B6; [0C E8 3B, 05, 05]
+2637; [0C EB A0, 05, 05]
-28B7; [0C E8 42, 05, 05]
+4DC0; [0C EB A7, 05, 05]
-28B8; [0C E8 49, 05, 05]
+4DC1; [0C EB AE, 05, 05]
-28B9; [0C E8 50, 05, 05]
+4DC2; [0C EB B5, 05, 05]
-28BA; [0C E8 57, 05, 05]
+4DC3; [0C EB BC, 05, 05]
-28BB; [0C E8 5E, 05, 05]
+4DC4; [0C EB C3, 05, 05]
-28BC; [0C E8 65, 05, 05]
+4DC5; [0C EB CA, 05, 05]
-28BD; [0C E8 6C, 05, 05]
+4DC6; [0C EB D1, 05, 05]
-28BE; [0C E8 73, 05, 05]
+4DC7; [0C EB D8, 05, 05]
-28BF; [0C E8 7A, 05, 05]
+4DC8; [0C EB DF, 05, 05]
-28C0; [0C E8 81, 05, 05]
+4DC9; [0C EB E6, 05, 05]
-28C1; [0C E8 88, 05, 05]
+4DCA; [0C EB ED, 05, 05]
-28C2; [0C E8 8F, 05, 05]
+4DCB; [0C EB F4, 05, 05]
-28C3; [0C E8 96, 05, 05]
+4DCC; [0C EB FB, 05, 05]
-28C4; [0C E8 9D, 05, 05]
+4DCD; [0C EC 04, 05, 05]
-28C5; [0C E8 A4, 05, 05]
+4DCE; [0C EC 0B, 05, 05]
-28C6; [0C E8 AB, 05, 05]
+4DCF; [0C EC 12, 05, 05]
-28C7; [0C E8 B2, 05, 05]
+4DD0; [0C EC 19, 05, 05]
-28C8; [0C E8 B9, 05, 05]
+4DD1; [0C EC 20, 05, 05]
-28C9; [0C E8 C0, 05, 05]
+4DD2; [0C EC 27, 05, 05]
-28CA; [0C E8 C7, 05, 05]
+4DD3; [0C EC 2E, 05, 05]
-28CB; [0C E8 CE, 05, 05]
+4DD4; [0C EC 35, 05, 05]
-28CC; [0C E8 D5, 05, 05]
+4DD5; [0C EC 3C, 05, 05]
-28CD; [0C E8 DC, 05, 05]
+4DD6; [0C EC 43, 05, 05]
-28CE; [0C E8 E3, 05, 05]
+4DD7; [0C EC 4A, 05, 05]
-28CF; [0C E8 EA, 05, 05]
+4DD8; [0C EC 51, 05, 05]
-28D0; [0C E8 F1, 05, 05]
+4DD9; [0C EC 58, 05, 05]
-28D1; [0C E8 F8, 05, 05]
+4DDA; [0C EC 5F, 05, 05]
-28D2; [0C E8 FF, 05, 05]
+4DDB; [0C EC 66, 05, 05]
-28D3; [0C E9 08, 05, 05]
+4DDC; [0C EC 6D, 05, 05]
-28D4; [0C E9 0F, 05, 05]
+4DDD; [0C EC 74, 05, 05]
-28D5; [0C E9 16, 05, 05]
+4DDE; [0C EC 7B, 05, 05]
-28D6; [0C E9 1D, 05, 05]
+4DDF; [0C EC 82, 05, 05]
-28D7; [0C E9 24, 05, 05]
+4DE0; [0C EC 89, 05, 05]
-28D8; [0C E9 2B, 05, 05]
+4DE1; [0C EC 90, 05, 05]
-28D9; [0C E9 32, 05, 05]
+4DE2; [0C EC 97, 05, 05]
-28DA; [0C E9 39, 05, 05]
+4DE3; [0C EC 9E, 05, 05]
-28DB; [0C E9 40, 05, 05]
+4DE4; [0C EC A5, 05, 05]
-28DC; [0C E9 47, 05, 05]
+4DE5; [0C EC AC, 05, 05]
-28DD; [0C E9 4E, 05, 05]
+4DE6; [0C EC B3, 05, 05]
-28DE; [0C E9 55, 05, 05]
+4DE7; [0C EC BA, 05, 05]
-28DF; [0C E9 5C, 05, 05]
+4DE8; [0C EC C1, 05, 05]
-28E0; [0C E9 63, 05, 05]
+4DE9; [0C EC C8, 05, 05]
-28E1; [0C E9 6A, 05, 05]
+4DEA; [0C EC CF, 05, 05]
-28E2; [0C E9 71, 05, 05]
+4DEB; [0C EC D6, 05, 05]
-28E3; [0C E9 78, 05, 05]
+4DEC; [0C EC DD, 05, 05]
-28E4; [0C E9 7F, 05, 05]
+4DED; [0C EC E4, 05, 05]
-28E5; [0C E9 86, 05, 05]
+4DEE; [0C EC EB, 05, 05]
-28E6; [0C E9 8D, 05, 05]
+4DEF; [0C EC F2, 05, 05]
-28E7; [0C E9 94, 05, 05]
+4DF0; [0C EC F9, 05, 05]
-28E8; [0C E9 9B, 05, 05]
+4DF1; [0C ED 02, 05, 05]
-28E9; [0C E9 A2, 05, 05]
+4DF2; [0C ED 09, 05, 05]
-28EA; [0C E9 A9, 05, 05]
+4DF3; [0C ED 10, 05, 05]
-28EB; [0C E9 B0, 05, 05]
+4DF4; [0C ED 17, 05, 05]
-28EC; [0C E9 B7, 05, 05]
+4DF5; [0C ED 1E, 05, 05]
-28ED; [0C E9 BE, 05, 05]
+4DF6; [0C ED 25, 05, 05]
-28EE; [0C E9 C5, 05, 05]
+4DF7; [0C ED 2C, 05, 05]
-28EF; [0C E9 CC, 05, 05]
+4DF8; [0C ED 33, 05, 05]
-28F0; [0C E9 D3, 05, 05]
+4DF9; [0C ED 3A, 05, 05]
-28F1; [0C E9 DA, 05, 05]
+4DFA; [0C ED 41, 05, 05]
-28F2; [0C E9 E1, 05, 05]
+4DFB; [0C ED 48, 05, 05]
-28F3; [0C E9 E8, 05, 05]
+4DFC; [0C ED 4F, 05, 05]
-28F4; [0C E9 EF, 05, 05]
+4DFD; [0C ED 56, 05, 05]
-28F5; [0C E9 F6, 05, 05]
+4DFE; [0C ED 5D, 05, 05]
-28F6; [0C E9 FD, 05, 05]
+4DFF; [0C ED 64, 05, 05]
-28F7; [0C EA 06, 05, 05]
+1D300; [0C ED 6B, 05, 05]
-28F8; [0C EA 0D, 05, 05]
+1D301; [0C ED 72, 05, 05]
-28F9; [0C EA 14, 05, 05]
+1D302; [0C ED 79, 05, 05]
-28FA; [0C EA 1B, 05, 05]
+1D303; [0C ED 80, 05, 05]
-28FB; [0C EA 22, 05, 05]
+1D304; [0C ED 87, 05, 05]
-28FC; [0C EA 29, 05, 05]
+1D305; [0C ED 8E, 05, 05]
-28FD; [0C EA 30, 05, 05]
+1D306; [0C ED 95, 05, 05]
-28FE; [0C EA 37, 05, 05]
+1D307; [0C ED 9C, 05, 05]
-28FF; [0C EA 3E, 05, 05]
+1D308; [0C ED A3, 05, 05]
-268A; [0C EA 45, 05, 05]
+1D309; [0C ED AA, 05, 05]
-268B; [0C EA 4C, 05, 05]
+1D30A; [0C ED B1, 05, 05]
-268C; [0C EA 53, 05, 05]
+1D30B; [0C ED B8, 05, 05]
-268D; [0C EA 5A, 05, 05]
+1D30C; [0C ED BF, 05, 05]
-268E; [0C EA 61, 05, 05]
+1D30D; [0C ED C6, 05, 05]
-268F; [0C EA 68, 05, 05]
+1D30E; [0C ED CD, 05, 05]
-2630; [0C EA 6F, 05, 05]
+1D30F; [0C ED D4, 05, 05]
-2631; [0C EA 76, 05, 05]
+1D310; [0C ED DB, 05, 05]
-2632; [0C EA 7D, 05, 05]
+1D311; [0C ED E2, 05, 05]
-2633; [0C EA 84, 05, 05]
+1D312; [0C ED E9, 05, 05]
-2634; [0C EA 8B, 05, 05]
+1D313; [0C ED F0, 05, 05]
-2635; [0C EA 92, 05, 05]
+1D314; [0C ED F7, 05, 05]
-2636; [0C EA 99, 05, 05]
+1D315; [0C ED FE, 05, 05]
-2637; [0C EA A0, 05, 05]
+1D316; [0C EE 07, 05, 05]
-4DC0; [0C EA A7, 05, 05]
+1D317; [0C EE 0E, 05, 05]
-4DC1; [0C EA AE, 05, 05]
+1D318; [0C EE 15, 05, 05]
-4DC2; [0C EA B5, 05, 05]
+1D319; [0C EE 1C, 05, 05]
-4DC3; [0C EA BC, 05, 05]
+1D31A; [0C EE 23, 05, 05]
-4DC4; [0C EA C3, 05, 05]
+1D31B; [0C EE 2A, 05, 05]
-4DC5; [0C EA CA, 05, 05]
+1D31C; [0C EE 31, 05, 05]
-4DC6; [0C EA D1, 05, 05]
+1D31D; [0C EE 38, 05, 05]
-4DC7; [0C EA D8, 05, 05]
+1D31E; [0C EE 3F, 05, 05]
-4DC8; [0C EA DF, 05, 05]
+1D31F; [0C EE 46, 05, 05]
-4DC9; [0C EA E6, 05, 05]
+1D320; [0C EE 4D, 05, 05]
-4DCA; [0C EA ED, 05, 05]
+1D321; [0C EE 54, 05, 05]
-4DCB; [0C EA F4, 05, 05]
+1D322; [0C EE 5B, 05, 05]
-4DCC; [0C EA FB, 05, 05]
+1D323; [0C EE 62, 05, 05]
-4DCD; [0C EB 04, 05, 05]
+1D324; [0C EE 69, 05, 05]
-4DCE; [0C EB 0B, 05, 05]
+1D325; [0C EE 70, 05, 05]
-4DCF; [0C EB 12, 05, 05]
+1D326; [0C EE 77, 05, 05]
-4DD0; [0C EB 19, 05, 05]
+1D327; [0C EE 7E, 05, 05]
-4DD1; [0C EB 20, 05, 05]
+1D328; [0C EE 85, 05, 05]
-4DD2; [0C EB 27, 05, 05]
+1D329; [0C EE 8C, 05, 05]
-4DD3; [0C EB 2E, 05, 05]
+1D32A; [0C EE 93, 05, 05]
-4DD4; [0C EB 35, 05, 05]
+1D32B; [0C EE 9A, 05, 05]
-4DD5; [0C EB 3C, 05, 05]
+1D32C; [0C EE A1, 05, 05]
-4DD6; [0C EB 43, 05, 05]
+1D32D; [0C EE A8, 05, 05]
-4DD7; [0C EB 4A, 05, 05]
+1D32E; [0C EE AF, 05, 05]
-4DD8; [0C EB 51, 05, 05]
+1D32F; [0C EE B6, 05, 05]
-4DD9; [0C EB 58, 05, 05]
+1D330; [0C EE BD, 05, 05]
-4DDA; [0C EB 5F, 05, 05]
+1D331; [0C EE C4, 05, 05]
-4DDB; [0C EB 66, 05, 05]
+1D332; [0C EE CB, 05, 05]
-4DDC; [0C EB 6D, 05, 05]
+1D333; [0C EE D2, 05, 05]
-4DDD; [0C EB 74, 05, 05]
+1D334; [0C EE D9, 05, 05]
-4DDE; [0C EB 7B, 05, 05]
+1D335; [0C EE E0, 05, 05]
-4DDF; [0C EB 82, 05, 05]
+1D336; [0C EE E7, 05, 05]
-4DE0; [0C EB 89, 05, 05]
+1D337; [0C EE EE, 05, 05]
-4DE1; [0C EB 90, 05, 05]
+1D338; [0C EE F5, 05, 05]
-4DE2; [0C EB 97, 05, 05]
+1D339; [0C EE FC, 05, 05]
-4DE3; [0C EB 9E, 05, 05]
+1D33A; [0C EF 05, 05, 05]
-4DE4; [0C EB A5, 05, 05]
+1D33B; [0C EF 0C, 05, 05]
-4DE5; [0C EB AC, 05, 05]
+1D33C; [0C EF 13, 05, 05]
-4DE6; [0C EB B3, 05, 05]
+1D33D; [0C EF 1A, 05, 05]
-4DE7; [0C EB BA, 05, 05]
+1D33E; [0C EF 21, 05, 05]
-4DE8; [0C EB C1, 05, 05]
+1D33F; [0C EF 28, 05, 05]
-4DE9; [0C EB C8, 05, 05]
+1D340; [0C EF 2F, 05, 05]
-4DEA; [0C EB CF, 05, 05]
+1D341; [0C EF 36, 05, 05]
-4DEB; [0C EB D6, 05, 05]
+1D342; [0C EF 3D, 05, 05]
-4DEC; [0C EB DD, 05, 05]
+1D343; [0C EF 44, 05, 05]
-4DED; [0C EB E4, 05, 05]
+1D344; [0C EF 4B, 05, 05]
-4DEE; [0C EB EB, 05, 05]
+1D345; [0C EF 52, 05, 05]
-4DEF; [0C EB F2, 05, 05]
+1D346; [0C EF 59, 05, 05]
-4DF0; [0C EB F9, 05, 05]
+1D347; [0C EF 60, 05, 05]
-4DF1; [0C EC 02, 05, 05]
+1D348; [0C EF 67, 05, 05]
-4DF2; [0C EC 09, 05, 05]
+1D349; [0C EF 6E, 05, 05]
-4DF3; [0C EC 10, 05, 05]
+1D34A; [0C EF 75, 05, 05]
-4DF4; [0C EC 17, 05, 05]
+1D34B; [0C EF 7C, 05, 05]
-4DF5; [0C EC 1E, 05, 05]
+1D34C; [0C EF 83, 05, 05]
-4DF6; [0C EC 25, 05, 05]
+1D34D; [0C EF 8A, 05, 05]
-4DF7; [0C EC 2C, 05, 05]
+1D34E; [0C EF 91, 05, 05]
-4DF8; [0C EC 33, 05, 05]
+1D34F; [0C EF 98, 05, 05]
-4DF9; [0C EC 3A, 05, 05]
+1D350; [0C EF 9F, 05, 05]
-4DFA; [0C EC 41, 05, 05]
+1D351; [0C EF A6, 05, 05]
-4DFB; [0C EC 48, 05, 05]
+1D352; [0C EF AD, 05, 05]
-4DFC; [0C EC 4F, 05, 05]
+1D353; [0C EF B4, 05, 05]
-4DFD; [0C EC 56, 05, 05]
+1D354; [0C EF BB, 05, 05]
-4DFE; [0C EC 5D, 05, 05]
+1D355; [0C EF C2, 05, 05]
-4DFF; [0C EC 64, 05, 05]
+1D356; [0C EF C9, 05, 05]
-1D300; [0C EC 6B, 05, 05]
+A490; [0C EF D0, 05, 05]
-1D301; [0C EC 72, 05, 05]
+A491; [0C EF D7, 05, 05]
-1D302; [0C EC 79, 05, 05]
+A492; [0C EF DE, 05, 05]
-1D303; [0C EC 80, 05, 05]
+A493; [0C EF E5, 05, 05]
-1D304; [0C EC 87, 05, 05]
+A494; [0C EF EC, 05, 05]
-1D305; [0C EC 8E, 05, 05]
+A495; [0C EF F3, 05, 05]
-1D306; [0C EC 95, 05, 05]
+A496; [0C EF FA, 05, 05]
-1D307; [0C EC 9C, 05, 05]
+A497; [0C F0 03, 05, 05]
-1D308; [0C EC A3, 05, 05]
+A498; [0C F0 0A, 05, 05]
-1D309; [0C EC AA, 05, 05]
+A499; [0C F0 11, 05, 05]
-1D30A; [0C EC B1, 05, 05]
+A49A; [0C F0 18, 05, 05]
-1D30B; [0C EC B8, 05, 05]
+A49B; [0C F0 1F, 05, 05]
-1D30C; [0C EC BF, 05, 05]
+A49C; [0C F0 26, 05, 05]
-1D30D; [0C EC C6, 05, 05]
+A49D; [0C F0 2D, 05, 05]
-1D30E; [0C EC CD, 05, 05]
+A49E; [0C F0 34, 05, 05]
-1D30F; [0C EC D4, 05, 05]
+A49F; [0C F0 3B, 05, 05]
-1D310; [0C EC DB, 05, 05]
+A4A0; [0C F0 42, 05, 05]
-1D311; [0C EC E2, 05, 05]
+A4A1; [0C F0 49, 05, 05]
-1D312; [0C EC E9, 05, 05]
+A4A2; [0C F0 50, 05, 05]
-1D313; [0C EC F0, 05, 05]
+A4A3; [0C F0 57, 05, 05]
-1D314; [0C EC F7, 05, 05]
+A4A4; [0C F0 5E, 05, 05]
-1D315; [0C EC FE, 05, 05]
+A4A5; [0C F0 65, 05, 05]
-1D316; [0C ED 07, 05, 05]
+A4A6; [0C F0 6C, 05, 05]
-1D317; [0C ED 0E, 05, 05]
+A4A7; [0C F0 73, 05, 05]
-1D318; [0C ED 15, 05, 05]
+A4A8; [0C F0 7A, 05, 05]
-1D319; [0C ED 1C, 05, 05]
+A4A9; [0C F0 81, 05, 05]
-1D31A; [0C ED 23, 05, 05]
+A4AA; [0C F0 88, 05, 05]
-1D31B; [0C ED 2A, 05, 05]
+A4AB; [0C F0 8F, 05, 05]
-1D31C; [0C ED 31, 05, 05]
+A4AC; [0C F0 96, 05, 05]
-1D31D; [0C ED 38, 05, 05]
+A4AD; [0C F0 9D, 05, 05]
-1D31E; [0C ED 3F, 05, 05]
+A4AE; [0C F0 A4, 05, 05]
-1D31F; [0C ED 46, 05, 05]
+A4AF; [0C F0 AB, 05, 05]
-1D320; [0C ED 4D, 05, 05]
+A4B0; [0C F0 B2, 05, 05]
-1D321; [0C ED 54, 05, 05]
+A4B1; [0C F0 B9, 05, 05]
-1D322; [0C ED 5B, 05, 05]
+A4B2; [0C F0 C0, 05, 05]
-1D323; [0C ED 62, 05, 05]
+A4B3; [0C F0 C7, 05, 05]
-1D324; [0C ED 69, 05, 05]
+A4B4; [0C F0 CE, 05, 05]
-1D325; [0C ED 70, 05, 05]
+A4B5; [0C F0 D5, 05, 05]
-1D326; [0C ED 77, 05, 05]
+A4B6; [0C F0 DC, 05, 05]
-1D327; [0C ED 7E, 05, 05]
+A4B7; [0C F0 E3, 05, 05]
-1D328; [0C ED 85, 05, 05]
+A4B8; [0C F0 EA, 05, 05]
-1D329; [0C ED 8C, 05, 05]
+A4B9; [0C F0 F1, 05, 05]
-1D32A; [0C ED 93, 05, 05]
+A4BA; [0C F0 F8, 05, 05]
-1D32B; [0C ED 9A, 05, 05]
+A4BB; [0C F0 FF, 05, 05]
-1D32C; [0C ED A1, 05, 05]
+A4BC; [0C F1 08, 05, 05]
-1D32D; [0C ED A8, 05, 05]
+A4BD; [0C F1 0F, 05, 05]
-1D32E; [0C ED AF, 05, 05]
+A4BE; [0C F1 16, 05, 05]
-1D32F; [0C ED B6, 05, 05]
+A4BF; [0C F1 1D, 05, 05]
-1D330; [0C ED BD, 05, 05]
+A4C0; [0C F1 24, 05, 05]
-1D331; [0C ED C4, 05, 05]
+A4C1; [0C F1 2B, 05, 05]
-1D332; [0C ED CB, 05, 05]
+A4C2; [0C F1 32, 05, 05]
-1D333; [0C ED D2, 05, 05]
+A4C3; [0C F1 39, 05, 05]
-1D334; [0C ED D9, 05, 05]
+A4C4; [0C F1 40, 05, 05]
-1D335; [0C ED E0, 05, 05]
+A4C5; [0C F1 47, 05, 05]
-1D336; [0C ED E7, 05, 05]
+A4C6; [0C F1 4E, 05, 05]
-1D337; [0C ED EE, 05, 05]
+10137; [0C F1 55, 05, 05]
-1D338; [0C ED F5, 05, 05]
+10138; [0C F1 5C, 05, 05]
-1D339; [0C ED FC, 05, 05]
+10139; [0C F1 63, 05, 05]
-1D33A; [0C EE 05, 05, 05]
+1013A; [0C F1 6A, 05, 05]
-1D33B; [0C EE 0C, 05, 05]
+1013B; [0C F1 71, 05, 05]
-1D33C; [0C EE 13, 05, 05]
+1013C; [0C F1 78, 05, 05]
-1D33D; [0C EE 1A, 05, 05]
+1013D; [0C F1 7F, 05, 05]
-1D33E; [0C EE 21, 05, 05]
+1013E; [0C F1 86, 05, 05]
-1D33F; [0C EE 28, 05, 05]
+1013F; [0C F1 8D, 05, 05]
-1D340; [0C EE 2F, 05, 05]
+10179; [0C F1 94, 05, 05]
-1D341; [0C EE 36, 05, 05]
+1017A; [0C F1 9B, 05, 05]
-1D342; [0C EE 3D, 05, 05]
+1017B; [0C F1 A2, 05, 05]
-1D343; [0C EE 44, 05, 05]
+1017C; [0C F1 A9, 05, 05]
-1D344; [0C EE 4B, 05, 05]
+1017D; [0C F1 B0, 05, 05]
-1D345; [0C EE 52, 05, 05]
+1017E; [0C F1 B7, 05, 05]
-1D346; [0C EE 59, 05, 05]
+1017F; [0C F1 BE, 05, 05]
-1D347; [0C EE 60, 05, 05]
+10180; [0C F1 C5, 05, 05]
-1D348; [0C EE 67, 05, 05]
+10181; [0C F1 CC, 05, 05]
-1D349; [0C EE 6E, 05, 05]
+10182; [0C F1 D3, 05, 05]
-1D34A; [0C EE 75, 05, 05]
+10183; [0C F1 DA, 05, 05]
-1D34B; [0C EE 7C, 05, 05]
+10184; [0C F1 E1, 05, 05]
-1D34C; [0C EE 83, 05, 05]
+10185; [0C F1 E8, 05, 05]
-1D34D; [0C EE 8A, 05, 05]
+10186; [0C F1 EF, 05, 05]
-1D34E; [0C EE 91, 05, 05]
+10187; [0C F1 F6, 05, 05]
-1D34F; [0C EE 98, 05, 05]
+10188; [0C F1 FD, 05, 05]
-1D350; [0C EE 9F, 05, 05]
+10189; [0C F2 06, 05, 05]
-1D351; [0C EE A6, 05, 05]
+1018C; [0C F2 0D, 05, 05]
-1D352; [0C EE AD, 05, 05]
+1018D; [0C F2 14, 05, 05]
-1D353; [0C EE B4, 05, 05]
+1018E; [0C F2 1B, 05, 05]
-1D354; [0C EE BB, 05, 05]
+10190; [0C F2 22, 05, 05]
-1D355; [0C EE C2, 05, 05]
+10191; [0C F2 29, 05, 05]
-1D356; [0C EE C9, 05, 05]
+10192; [0C F2 30, 05, 05]
-A490; [0C EE D0, 05, 05]
+10193; [0C F2 37, 05, 05]
-A491; [0C EE D7, 05, 05]
+10194; [0C F2 3E, 05, 05]
-A492; [0C EE DE, 05, 05]
+10195; [0C F2 45, 05, 05]
-A493; [0C EE E5, 05, 05]
+10196; [0C F2 4C, 05, 05]
-A494; [0C EE EC, 05, 05]
+10197; [0C F2 53, 05, 05]
-A495; [0C EE F3, 05, 05]
+10198; [0C F2 5A, 05, 05]
-A496; [0C EE FA, 05, 05]
+10199; [0C F2 61, 05, 05]
-A497; [0C EF 03, 05, 05]
+1019A; [0C F2 68, 05, 05]
-A498; [0C EF 0A, 05, 05]
+1019B; [0C F2 6F, 05, 05]
-A499; [0C EF 11, 05, 05]
+1019C; [0C F2 76, 05, 05]
-A49A; [0C EF 18, 05, 05]
+101A0; [0C F2 7D, 05, 05]
-A49B; [0C EF 1F, 05, 05]
+101D0; [0C F2 84, 05, 05]
-A49C; [0C EF 26, 05, 05]
+101D1; [0C F2 8B, 05, 05]
-A49D; [0C EF 2D, 05, 05]
+101D2; [0C F2 92, 05, 05]
-A49E; [0C EF 34, 05, 05]
+101D3; [0C F2 99, 05, 05]
-A49F; [0C EF 3B, 05, 05]
+101D4; [0C F2 A0, 05, 05]
-A4A0; [0C EF 42, 05, 05]
+101D5; [0C F2 A7, 05, 05]
-A4A1; [0C EF 49, 05, 05]
+101D6; [0C F2 AE, 05, 05]
-A4A2; [0C EF 50, 05, 05]
+101D7; [0C F2 B5, 05, 05]
-A4A3; [0C EF 57, 05, 05]
+101D8; [0C F2 BC, 05, 05]
-A4A4; [0C EF 5E, 05, 05]
+101D9; [0C F2 C3, 05, 05]
-A4A5; [0C EF 65, 05, 05]
+101DA; [0C F2 CA, 05, 05]
-A4A6; [0C EF 6C, 05, 05]
+101DB; [0C F2 D1, 05, 05]
-A4A7; [0C EF 73, 05, 05]
+101DC; [0C F2 D8, 05, 05]
-A4A8; [0C EF 7A, 05, 05]
+101DD; [0C F2 DF, 05, 05]
-A4A9; [0C EF 81, 05, 05]
+101DE; [0C F2 E6, 05, 05]
-A4AA; [0C EF 88, 05, 05]
+101DF; [0C F2 ED, 05, 05]
-A4AB; [0C EF 8F, 05, 05]
+101E0; [0C F2 F4, 05, 05]
-A4AC; [0C EF 96, 05, 05]
+101E1; [0C F2 FB, 05, 05]
-A4AD; [0C EF 9D, 05, 05]
+101E2; [0C F3 04, 05, 05]
-A4AE; [0C EF A4, 05, 05]
+101E3; [0C F3 0B, 05, 05]
-A4AF; [0C EF AB, 05, 05]
+101E4; [0C F3 12, 05, 05]
-A4B0; [0C EF B2, 05, 05]
+101E5; [0C F3 19, 05, 05]
-A4B1; [0C EF B9, 05, 05]
+101E6; [0C F3 20, 05, 05]
-A4B2; [0C EF C0, 05, 05]
+101E7; [0C F3 27, 05, 05]
-A4B3; [0C EF C7, 05, 05]
+101E8; [0C F3 2E, 05, 05]
-A4B4; [0C EF CE, 05, 05]
+101E9; [0C F3 35, 05, 05]
-A4B5; [0C EF D5, 05, 05]
+101EA; [0C F3 3C, 05, 05]
-A4B6; [0C EF DC, 05, 05]
+101EB; [0C F3 43, 05, 05]
-A4B7; [0C EF E3, 05, 05]
+101EC; [0C F3 4A, 05, 05]
-A4B8; [0C EF EA, 05, 05]
+101ED; [0C F3 51, 05, 05]
-A4B9; [0C EF F1, 05, 05]
+101EE; [0C F3 58, 05, 05]
-A4BA; [0C EF F8, 05, 05]
+101EF; [0C F3 5F, 05, 05]
-A4BB; [0C EF FF, 05, 05]
+101F0; [0C F3 66, 05, 05]
-A4BC; [0C F0 08, 05, 05]
+101F1; [0C F3 6D, 05, 05]
-A4BD; [0C F0 0F, 05, 05]
+101F2; [0C F3 74, 05, 05]
-A4BE; [0C F0 16, 05, 05]
+101F3; [0C F3 7B, 05, 05]
-A4BF; [0C F0 1D, 05, 05]
+101F4; [0C F3 82, 05, 05]
-A4C0; [0C F0 24, 05, 05]
+101F5; [0C F3 89, 05, 05]
-A4C1; [0C F0 2B, 05, 05]
+101F6; [0C F3 90, 05, 05]
-A4C2; [0C F0 32, 05, 05]
+101F7; [0C F3 97, 05, 05]
-A4C3; [0C F0 39, 05, 05]
+101F8; [0C F3 9E, 05, 05]
-A4C4; [0C F0 40, 05, 05]
+101F9; [0C F3 A5, 05, 05]
-A4C5; [0C F0 47, 05, 05]
+101FA; [0C F3 AC, 05, 05]
-A4C6; [0C F0 4E, 05, 05]
+101FB; [0C F3 B3, 05, 05]
-10137; [0C F0 55, 05, 05]
+101FC; [0C F3 BA, 05, 05]
-10138; [0C F0 5C, 05, 05]
+10877; [0C F3 C1, 05, 05]
-10139; [0C F0 63, 05, 05]
+10878; [0C F3 C8, 05, 05]
-1013A; [0C F0 6A, 05, 05]
+16B3C; [0C F3 CF, 05, 05]
-1013B; [0C F0 71, 05, 05]
+16B3D; [0C F3 D6, 05, 05]
-1013C; [0C F0 78, 05, 05]
+16B3E; [0C F3 DD, 05, 05]
-1013D; [0C F0 7F, 05, 05]
+16B3F; [0C F3 E4, 05, 05]
-1013E; [0C F0 86, 05, 05]
+16B45; [0C F3 EB, 05, 05]
-1013F; [0C F0 8D, 05, 05]
+1E14F; [0C F3 F2, 05, 05]
-10179; [0C F0 94, 05, 05]
+1CF50; [0C F3 F9, 05, 05]
-1017A; [0C F0 9B, 05, 05]
+1CF51; [0C F4 02, 05, 05]
-1017B; [0C F0 A2, 05, 05]
+1CF52; [0C F4 09, 05, 05]
-1017C; [0C F0 A9, 05, 05]
+1CF53; [0C F4 10, 05, 05]
-1017D; [0C F0 B0, 05, 05]
+1CF54; [0C F4 17, 05, 05]
-1017E; [0C F0 B7, 05, 05]
+1CF55; [0C F4 1E, 05, 05]
-1017F; [0C F0 BE, 05, 05]
+1CF56; [0C F4 25, 05, 05]
-10180; [0C F0 C5, 05, 05]
+1CF57; [0C F4 2C, 05, 05]
-10181; [0C F0 CC, 05, 05]
+1CF58; [0C F4 33, 05, 05]
-10182; [0C F0 D3, 05, 05]
+1CF59; [0C F4 3A, 05, 05]
-10183; [0C F0 DA, 05, 05]
+1CF5A; [0C F4 41, 05, 05]
-10184; [0C F0 E1, 05, 05]
+1CF5B; [0C F4 48, 05, 05]
-10185; [0C F0 E8, 05, 05]
+1CF5C; [0C F4 4F, 05, 05]
-10186; [0C F0 EF, 05, 05]
+1CF5D; [0C F4 56, 05, 05]
-10187; [0C F0 F6, 05, 05]
+1CF5E; [0C F4 5D, 05, 05]
-10188; [0C F0 FD, 05, 05]
+1CF5F; [0C F4 64, 05, 05]
-10189; [0C F1 06, 05, 05]
+1CF60; [0C F4 6B, 05, 05]
-1018C; [0C F1 0D, 05, 05]
+1CF61; [0C F4 72, 05, 05]
-1018D; [0C F1 14, 05, 05]
+1CF62; [0C F4 79, 05, 05]
-1018E; [0C F1 1B, 05, 05]
+1CF63; [0C F4 80, 05, 05]
-10190; [0C F1 22, 05, 05]
+1CF64; [0C F4 87, 05, 05]
-10191; [0C F1 29, 05, 05]
+1CF65; [0C F4 8E, 05, 05]
-10192; [0C F1 30, 05, 05]
+1CF66; [0C F4 95, 05, 05]
-10193; [0C F1 37, 05, 05]
+1CF67; [0C F4 9C, 05, 05]
-10194; [0C F1 3E, 05, 05]
+1CF68; [0C F4 A3, 05, 05]
-10195; [0C F1 45, 05, 05]
+1CF69; [0C F4 AA, 05, 05]
-10196; [0C F1 4C, 05, 05]
+1CF6A; [0C F4 B1, 05, 05]
-10197; [0C F1 53, 05, 05]
+1CF6B; [0C F4 B8, 05, 05]
-10198; [0C F1 5A, 05, 05]
+1CF6C; [0C F4 BF, 05, 05]
-10199; [0C F1 61, 05, 05]
+1CF6D; [0C F4 C6, 05, 05]
-1019A; [0C F1 68, 05, 05]
+1CF6E; [0C F4 CD, 05, 05]
-1019B; [0C F1 6F, 05, 05]
+1CF6F; [0C F4 D4, 05, 05]
-1019C; [0C F1 76, 05, 05]
+1CF70; [0C F4 DB, 05, 05]
-101A0; [0C F1 7D, 05, 05]
+1CF71; [0C F4 E2, 05, 05]
-101D0; [0C F1 84, 05, 05]
+1CF72; [0C F4 E9, 05, 05]
-101D1; [0C F1 8B, 05, 05]
+1CF73; [0C F4 F0, 05, 05]
-101D2; [0C F1 92, 05, 05]
+1CF74; [0C F4 F7, 05, 05]
-101D3; [0C F1 99, 05, 05]
+1CF75; [0C F4 FE, 05, 05]
-101D4; [0C F1 A0, 05, 05]
+1CF76; [0C F5 07, 05, 05]
-101D5; [0C F1 A7, 05, 05]
+1CF77; [0C F5 0E, 05, 05]
-101D6; [0C F1 AE, 05, 05]
+1CF78; [0C F5 15, 05, 05]
-101D7; [0C F1 B5, 05, 05]
+1CF79; [0C F5 1C, 05, 05]
-101D8; [0C F1 BC, 05, 05]
+1CF7A; [0C F5 23, 05, 05]
-101D9; [0C F1 C3, 05, 05]
+1CF7B; [0C F5 2A, 05, 05]
-101DA; [0C F1 CA, 05, 05]
+1CF7C; [0C F5 31, 05, 05]
-101DB; [0C F1 D1, 05, 05]
+1CF7D; [0C F5 38, 05, 05]
-101DC; [0C F1 D8, 05, 05]
+1CF7E; [0C F5 3F, 05, 05]
-101DD; [0C F1 DF, 05, 05]
+1CF7F; [0C F5 46, 05, 05]
-101DE; [0C F1 E6, 05, 05]
+1CF80; [0C F5 4D, 05, 05]
-101DF; [0C F1 ED, 05, 05]
+1CF81; [0C F5 54, 05, 05]
-101E0; [0C F1 F4, 05, 05]
+1CF82; [0C F5 5B, 05, 05]
-101E1; [0C F1 FB, 05, 05]
+1CF83; [0C F5 62, 05, 05]
-101E2; [0C F2 04, 05, 05]
+1CF84; [0C F5 69, 05, 05]
-101E3; [0C F2 0B, 05, 05]
+1CF85; [0C F5 70, 05, 05]
-101E4; [0C F2 12, 05, 05]
+1CF86; [0C F5 77, 05, 05]
-101E5; [0C F2 19, 05, 05]
+1CF87; [0C F5 7E, 05, 05]
-101E6; [0C F2 20, 05, 05]
+1CF88; [0C F5 85, 05, 05]
-101E7; [0C F2 27, 05, 05]
+1CF89; [0C F5 8C, 05, 05]
-101E8; [0C F2 2E, 05, 05]
+1CF8A; [0C F5 93, 05, 05]
-101E9; [0C F2 35, 05, 05]
+1CF8B; [0C F5 9A, 05, 05]
-101EA; [0C F2 3C, 05, 05]
+1CF8C; [0C F5 A1, 05, 05]
-101EB; [0C F2 43, 05, 05]
+1CF8D; [0C F5 A8, 05, 05]
-101EC; [0C F2 4A, 05, 05]
+1CF8E; [0C F5 AF, 05, 05]
-101ED; [0C F2 51, 05, 05]
+1CF8F; [0C F5 B6, 05, 05]
-101EE; [0C F2 58, 05, 05]
+1CF90; [0C F5 BD, 05, 05]
-101EF; [0C F2 5F, 05, 05]
+1CF91; [0C F5 C4, 05, 05]
-101F0; [0C F2 66, 05, 05]
+1CF92; [0C F5 CB, 05, 05]
-101F1; [0C F2 6D, 05, 05]
+1CF93; [0C F5 D2, 05, 05]
-101F2; [0C F2 74, 05, 05]
+1CF94; [0C F5 D9, 05, 05]
-101F3; [0C F2 7B, 05, 05]
+1CF95; [0C F5 E0, 05, 05]
-101F4; [0C F2 82, 05, 05]
+1CF96; [0C F5 E7, 05, 05]
-101F5; [0C F2 89, 05, 05]
+1CF97; [0C F5 EE, 05, 05]
-101F6; [0C F2 90, 05, 05]
+1CF98; [0C F5 F5, 05, 05]
-101F7; [0C F2 97, 05, 05]
+1CF99; [0C F5 FC, 05, 05]
-101F8; [0C F2 9E, 05, 05]
+1CF9A; [0C F6 05, 05, 05]
-101F9; [0C F2 A5, 05, 05]
+1CF9B; [0C F6 0C, 05, 05]
-101FA; [0C F2 AC, 05, 05]
+1CF9C; [0C F6 13, 05, 05]
-101FB; [0C F2 B3, 05, 05]
+1CF9D; [0C F6 1A, 05, 05]
-101FC; [0C F2 BA, 05, 05]
+1CF9E; [0C F6 21, 05, 05]
-10877; [0C F2 C1, 05, 05]
+1CF9F; [0C F6 28, 05, 05]
-10878; [0C F2 C8, 05, 05]
+1CFA0; [0C F6 2F, 05, 05]
-16B3C; [0C F2 CF, 05, 05]
+1CFA1; [0C F6 36, 05, 05]
-16B3D; [0C F2 D6, 05, 05]
+1CFA2; [0C F6 3D, 05, 05]
-16B3E; [0C F2 DD, 05, 05]
+1CFA3; [0C F6 44, 05, 05]
-16B3F; [0C F2 E4, 05, 05]
+1CFA4; [0C F6 4B, 05, 05]
-16B45; [0C F2 EB, 05, 05]
+1CFA5; [0C F6 52, 05, 05]
-1E14F; [0C F2 F2, 05, 05]
+1CFA6; [0C F6 59, 05, 05]
-1D000; [0C F2 F9, 05, 05]
+1CFA7; [0C F6 60, 05, 05]
-1D001; [0C F3 02, 05, 05]
+1CFA8; [0C F6 67, 05, 05]
-1D002; [0C F3 09, 05, 05]
+1CFA9; [0C F6 6E, 05, 05]
-1D003; [0C F3 10, 05, 05]
+1CFAA; [0C F6 75, 05, 05]
-1D004; [0C F3 17, 05, 05]
+1CFAB; [0C F6 7C, 05, 05]
-1D005; [0C F3 1E, 05, 05]
+1CFAC; [0C F6 83, 05, 05]
-1D006; [0C F3 25, 05, 05]
+1CFAD; [0C F6 8A, 05, 05]
-1D007; [0C F3 2C, 05, 05]
+1CFAE; [0C F6 91, 05, 05]
-1D008; [0C F3 33, 05, 05]
+1CFAF; [0C F6 98, 05, 05]
-1D009; [0C F3 3A, 05, 05]
+1CFB0; [0C F6 9F, 05, 05]
-1D00A; [0C F3 41, 05, 05]
+1CFB1; [0C F6 A6, 05, 05]
-1D00B; [0C F3 48, 05, 05]
+1CFB2; [0C F6 AD, 05, 05]
-1D00C; [0C F3 4F, 05, 05]
+1CFB3; [0C F6 B4, 05, 05]
-1D00D; [0C F3 56, 05, 05]
+1CFB4; [0C F6 BB, 05, 05]
-1D00E; [0C F3 5D, 05, 05]
+1CFB5; [0C F6 C2, 05, 05]
-1D00F; [0C F3 64, 05, 05]
+1CFB6; [0C F6 C9, 05, 05]
-1D010; [0C F3 6B, 05, 05]
+1CFB7; [0C F6 D0, 05, 05]
-1D011; [0C F3 72, 05, 05]
+1CFB8; [0C F6 D7, 05, 05]
-1D012; [0C F3 79, 05, 05]
+1CFB9; [0C F6 DE, 05, 05]
-1D013; [0C F3 80, 05, 05]
+1CFBA; [0C F6 E5, 05, 05]
-1D014; [0C F3 87, 05, 05]
+1CFBB; [0C F6 EC, 05, 05]
-1D015; [0C F3 8E, 05, 05]
+1CFBC; [0C F6 F3, 05, 05]
-1D016; [0C F3 95, 05, 05]
+1CFBD; [0C F6 FA, 05, 05]
-1D017; [0C F3 9C, 05, 05]
+1CFBE; [0C F7 03, 05, 05]
-1D018; [0C F3 A3, 05, 05]
+1CFBF; [0C F7 0A, 05, 05]
-1D019; [0C F3 AA, 05, 05]
+1CFC0; [0C F7 11, 05, 05]
-1D01A; [0C F3 B1, 05, 05]
+1CFC1; [0C F7 18, 05, 05]
-1D01B; [0C F3 B8, 05, 05]
+1CFC2; [0C F7 1F, 05, 05]
-1D01C; [0C F3 BF, 05, 05]
+1CFC3; [0C F7 26, 05, 05]
-1D01D; [0C F3 C6, 05, 05]
+1D000; [0C F7 2D, 05, 05]
-1D01E; [0C F3 CD, 05, 05]
+1D001; [0C F7 34, 05, 05]
-1D01F; [0C F3 D4, 05, 05]
+1D002; [0C F7 3B, 05, 05]
-1D020; [0C F3 DB, 05, 05]
+1D003; [0C F7 42, 05, 05]
-1D021; [0C F3 E2, 05, 05]
+1D004; [0C F7 49, 05, 05]
-1D022; [0C F3 E9, 05, 05]
+1D005; [0C F7 50, 05, 05]
-1D023; [0C F3 F0, 05, 05]
+1D006; [0C F7 57, 05, 05]
-1D024; [0C F3 F7, 05, 05]
+1D007; [0C F7 5E, 05, 05]
-1D025; [0C F3 FE, 05, 05]
+1D008; [0C F7 65, 05, 05]
-1D026; [0C F4 07, 05, 05]
+1D009; [0C F7 6C, 05, 05]
-1D027; [0C F4 0E, 05, 05]
+1D00A; [0C F7 73, 05, 05]
-1D028; [0C F4 15, 05, 05]
+1D00B; [0C F7 7A, 05, 05]
-1D029; [0C F4 1C, 05, 05]
+1D00C; [0C F7 81, 05, 05]
-1D02A; [0C F4 23, 05, 05]
+1D00D; [0C F7 88, 05, 05]
-1D02B; [0C F4 2A, 05, 05]
+1D00E; [0C F7 8F, 05, 05]
-1D02C; [0C F4 31, 05, 05]
+1D00F; [0C F7 96, 05, 05]
-1D02D; [0C F4 38, 05, 05]
+1D010; [0C F7 9D, 05, 05]
-1D02E; [0C F4 3F, 05, 05]
+1D011; [0C F7 A4, 05, 05]
-1D02F; [0C F4 46, 05, 05]
+1D012; [0C F7 AB, 05, 05]
-1D030; [0C F4 4D, 05, 05]
+1D013; [0C F7 B2, 05, 05]
-1D031; [0C F4 54, 05, 05]
+1D014; [0C F7 B9, 05, 05]
-1D032; [0C F4 5B, 05, 05]
+1D015; [0C F7 C0, 05, 05]
-1D033; [0C F4 62, 05, 05]
+1D016; [0C F7 C7, 05, 05]
-1D034; [0C F4 69, 05, 05]
+1D017; [0C F7 CE, 05, 05]
-1D035; [0C F4 70, 05, 05]
+1D018; [0C F7 D5, 05, 05]
-1D036; [0C F4 77, 05, 05]
+1D019; [0C F7 DC, 05, 05]
-1D037; [0C F4 7E, 05, 05]
+1D01A; [0C F7 E3, 05, 05]
-1D038; [0C F4 85, 05, 05]
+1D01B; [0C F7 EA, 05, 05]
-1D039; [0C F4 8C, 05, 05]
+1D01C; [0C F7 F1, 05, 05]
-1D03A; [0C F4 93, 05, 05]
+1D01D; [0C F7 F8, 05, 05]
-1D03B; [0C F4 9A, 05, 05]
+1D01E; [0C F7 FF, 05, 05]
-1D03C; [0C F4 A1, 05, 05]
+1D01F; [0C F8 08, 05, 05]
-1D03D; [0C F4 A8, 05, 05]
+1D020; [0C F8 0F, 05, 05]
-1D03E; [0C F4 AF, 05, 05]
+1D021; [0C F8 16, 05, 05]
-1D03F; [0C F4 B6, 05, 05]
+1D022; [0C F8 1D, 05, 05]
-1D040; [0C F4 BD, 05, 05]
+1D023; [0C F8 24, 05, 05]
-1D041; [0C F4 C4, 05, 05]
+1D024; [0C F8 2B, 05, 05]
-1D042; [0C F4 CB, 05, 05]
+1D025; [0C F8 32, 05, 05]
-1D043; [0C F4 D2, 05, 05]
+1D026; [0C F8 39, 05, 05]
-1D044; [0C F4 D9, 05, 05]
+1D027; [0C F8 40, 05, 05]
-1D045; [0C F4 E0, 05, 05]
+1D028; [0C F8 47, 05, 05]
-1D046; [0C F4 E7, 05, 05]
+1D029; [0C F8 4E, 05, 05]
-1D047; [0C F4 EE, 05, 05]
+1D02A; [0C F8 55, 05, 05]
-1D048; [0C F4 F5, 05, 05]
+1D02B; [0C F8 5C, 05, 05]
-1D049; [0C F4 FC, 05, 05]
+1D02C; [0C F8 63, 05, 05]
-1D04A; [0C F5 05, 05, 05]
+1D02D; [0C F8 6A, 05, 05]
-1D04B; [0C F5 0C, 05, 05]
+1D02E; [0C F8 71, 05, 05]
-1D04C; [0C F5 13, 05, 05]
+1D02F; [0C F8 78, 05, 05]
-1D04D; [0C F5 1A, 05, 05]
+1D030; [0C F8 7F, 05, 05]
-1D04E; [0C F5 21, 05, 05]
+1D031; [0C F8 86, 05, 05]
-1D04F; [0C F5 28, 05, 05]
+1D032; [0C F8 8D, 05, 05]
-1D050; [0C F5 2F, 05, 05]
+1D033; [0C F8 94, 05, 05]
-1D051; [0C F5 36, 05, 05]
+1D034; [0C F8 9B, 05, 05]
-1D052; [0C F5 3D, 05, 05]
+1D035; [0C F8 A2, 05, 05]
-1D053; [0C F5 44, 05, 05]
+1D036; [0C F8 A9, 05, 05]
-1D054; [0C F5 4B, 05, 05]
+1D037; [0C F8 B0, 05, 05]
-1D055; [0C F5 52, 05, 05]
+1D038; [0C F8 B7, 05, 05]
-1D056; [0C F5 59, 05, 05]
+1D039; [0C F8 BE, 05, 05]
-1D057; [0C F5 60, 05, 05]
+1D03A; [0C F8 C5, 05, 05]
-1D058; [0C F5 67, 05, 05]
+1D03B; [0C F8 CC, 05, 05]
-1D059; [0C F5 6E, 05, 05]
+1D03C; [0C F8 D3, 05, 05]
-1D05A; [0C F5 75, 05, 05]
+1D03D; [0C F8 DA, 05, 05]
-1D05B; [0C F5 7C, 05, 05]
+1D03E; [0C F8 E1, 05, 05]
-1D05C; [0C F5 83, 05, 05]
+1D03F; [0C F8 E8, 05, 05]
-1D05D; [0C F5 8A, 05, 05]
+1D040; [0C F8 EF, 05, 05]
-1D05E; [0C F5 91, 05, 05]
+1D041; [0C F8 F6, 05, 05]
-1D05F; [0C F5 98, 05, 05]
+1D042; [0C F8 FD, 05, 05]
-1D060; [0C F5 9F, 05, 05]
+1D043; [0C F9 06, 05, 05]
-1D061; [0C F5 A6, 05, 05]
+1D044; [0C F9 0D, 05, 05]
-1D062; [0C F5 AD, 05, 05]
+1D045; [0C F9 14, 05, 05]
-1D063; [0C F5 B4, 05, 05]
+1D046; [0C F9 1B, 05, 05]
-1D064; [0C F5 BB, 05, 05]
+1D047; [0C F9 22, 05, 05]
-1D065; [0C F5 C2, 05, 05]
+1D048; [0C F9 29, 05, 05]
-1D066; [0C F5 C9, 05, 05]
+1D049; [0C F9 30, 05, 05]
-1D067; [0C F5 D0, 05, 05]
+1D04A; [0C F9 37, 05, 05]
-1D068; [0C F5 D7, 05, 05]
+1D04B; [0C F9 3E, 05, 05]
-1D069; [0C F5 DE, 05, 05]
+1D04C; [0C F9 45, 05, 05]
-1D06A; [0C F5 E5, 05, 05]
+1D04D; [0C F9 4C, 05, 05]
-1D06B; [0C F5 EC, 05, 05]
+1D04E; [0C F9 53, 05, 05]
-1D06C; [0C F5 F3, 05, 05]
+1D04F; [0C F9 5A, 05, 05]
-1D06D; [0C F5 FA, 05, 05]
+1D050; [0C F9 61, 05, 05]
-1D06E; [0C F6 03, 05, 05]
+1D051; [0C F9 68, 05, 05]
-1D06F; [0C F6 0A, 05, 05]
+1D052; [0C F9 6F, 05, 05]
-1D070; [0C F6 11, 05, 05]
+1D053; [0C F9 76, 05, 05]
-1D071; [0C F6 18, 05, 05]
+1D054; [0C F9 7D, 05, 05]
-1D072; [0C F6 1F, 05, 05]
+1D055; [0C F9 84, 05, 05]
-1D073; [0C F6 26, 05, 05]
+1D056; [0C F9 8B, 05, 05]
-1D074; [0C F6 2D, 05, 05]
+1D057; [0C F9 92, 05, 05]
-1D075; [0C F6 34, 05, 05]
+1D058; [0C F9 99, 05, 05]
-1D076; [0C F6 3B, 05, 05]
+1D059; [0C F9 A0, 05, 05]
-1D077; [0C F6 42, 05, 05]
+1D05A; [0C F9 A7, 05, 05]
-1D078; [0C F6 49, 05, 05]
+1D05B; [0C F9 AE, 05, 05]
-1D079; [0C F6 50, 05, 05]
+1D05C; [0C F9 B5, 05, 05]
-1D07A; [0C F6 57, 05, 05]
+1D05D; [0C F9 BC, 05, 05]
-1D07B; [0C F6 5E, 05, 05]
+1D05E; [0C F9 C3, 05, 05]
-1D07C; [0C F6 65, 05, 05]
+1D05F; [0C F9 CA, 05, 05]
-1D07D; [0C F6 6C, 05, 05]
+1D060; [0C F9 D1, 05, 05]
-1D07E; [0C F6 73, 05, 05]
+1D061; [0C F9 D8, 05, 05]
-1D07F; [0C F6 7A, 05, 05]
+1D062; [0C F9 DF, 05, 05]
-1D080; [0C F6 81, 05, 05]
+1D063; [0C F9 E6, 05, 05]
-1D081; [0C F6 88, 05, 05]
+1D064; [0C F9 ED, 05, 05]
-1D082; [0C F6 8F, 05, 05]
+1D065; [0C F9 F4, 05, 05]
-1D083; [0C F6 96, 05, 05]
+1D066; [0C F9 FB, 05, 05]
-1D084; [0C F6 9D, 05, 05]
+1D067; [0C FA 04, 05, 05]
-1D085; [0C F6 A4, 05, 05]
+1D068; [0C FA 0B, 05, 05]
-1D086; [0C F6 AB, 05, 05]
+1D069; [0C FA 12, 05, 05]
-1D087; [0C F6 B2, 05, 05]
+1D06A; [0C FA 19, 05, 05]
-1D088; [0C F6 B9, 05, 05]
+1D06B; [0C FA 20, 05, 05]
-1D089; [0C F6 C0, 05, 05]
+1D06C; [0C FA 27, 05, 05]
-1D08A; [0C F6 C7, 05, 05]
+1D06D; [0C FA 2E, 05, 05]
-1D08B; [0C F6 CE, 05, 05]
+1D06E; [0C FA 35, 05, 05]
-1D08C; [0C F6 D5, 05, 05]
+1D06F; [0C FA 3C, 05, 05]
-1D08D; [0C F6 DC, 05, 05]
+1D070; [0C FA 43, 05, 05]
-1D08E; [0C F6 E3, 05, 05]
+1D071; [0C FA 4A, 05, 05]
-1D08F; [0C F6 EA, 05, 05]
+1D072; [0C FA 51, 05, 05]
-1D090; [0C F6 F1, 05, 05]
+1D073; [0C FA 58, 05, 05]
-1D091; [0C F6 F8, 05, 05]
+1D074; [0C FA 5F, 05, 05]
-1D092; [0C F6 FF, 05, 05]
+1D075; [0C FA 66, 05, 05]
-1D093; [0C F7 08, 05, 05]
+1D076; [0C FA 6D, 05, 05]
-1D094; [0C F7 0F, 05, 05]
+1D077; [0C FA 74, 05, 05]
-1D095; [0C F7 16, 05, 05]
+1D078; [0C FA 7B, 05, 05]
-1D096; [0C F7 1D, 05, 05]
+1D079; [0C FA 82, 05, 05]
-1D097; [0C F7 24, 05, 05]
+1D07A; [0C FA 89, 05, 05]
-1D098; [0C F7 2B, 05, 05]
+1D07B; [0C FA 90, 05, 05]
-1D099; [0C F7 32, 05, 05]
+1D07C; [0C FA 97, 05, 05]
-1D09A; [0C F7 39, 05, 05]
+1D07D; [0C FA 9E, 05, 05]
-1D09B; [0C F7 40, 05, 05]
+1D07E; [0C FA A5, 05, 05]
-1D09C; [0C F7 47, 05, 05]
+1D07F; [0C FA AC, 05, 05]
-1D09D; [0C F7 4E, 05, 05]
+1D080; [0C FA B3, 05, 05]
-1D09E; [0C F7 55, 05, 05]
+1D081; [0C FA BA, 05, 05]
-1D09F; [0C F7 5C, 05, 05]
+1D082; [0C FA C1, 05, 05]
-1D0A0; [0C F7 63, 05, 05]
+1D083; [0C FA C8, 05, 05]
-1D0A1; [0C F7 6A, 05, 05]
+1D084; [0C FA CF, 05, 05]
-1D0A2; [0C F7 71, 05, 05]
+1D085; [0C FA D6, 05, 05]
-1D0A3; [0C F7 78, 05, 05]
+1D086; [0C FA DD, 05, 05]
-1D0A4; [0C F7 7F, 05, 05]
+1D087; [0C FA E4, 05, 05]
-1D0A5; [0C F7 86, 05, 05]
+1D088; [0C FA EB, 05, 05]
-1D0A6; [0C F7 8D, 05, 05]
+1D089; [0C FA F2, 05, 05]
-1D0A7; [0C F7 94, 05, 05]
+1D08A; [0C FA F9, 05, 05]
-1D0A8; [0C F7 9B, 05, 05]
+1D08B; [0C FB 02, 05, 05]
-1D0A9; [0C F7 A2, 05, 05]
+1D08C; [0C FB 09, 05, 05]
-1D0AA; [0C F7 A9, 05, 05]
+1D08D; [0C FB 10, 05, 05]
-1D0AB; [0C F7 B0, 05, 05]
+1D08E; [0C FB 17, 05, 05]
-1D0AC; [0C F7 B7, 05, 05]
+1D08F; [0C FB 1E, 05, 05]
-1D0AD; [0C F7 BE, 05, 05]
+1D090; [0C FB 25, 05, 05]
-1D0AE; [0C F7 C5, 05, 05]
+1D091; [0C FB 2C, 05, 05]
-1D0AF; [0C F7 CC, 05, 05]
+1D092; [0C FB 33, 05, 05]
-1D0B0; [0C F7 D3, 05, 05]
+1D093; [0C FB 3A, 05, 05]
-1D0B1; [0C F7 DA, 05, 05]
+1D094; [0C FB 41, 05, 05]
-1D0B2; [0C F7 E1, 05, 05]
+1D095; [0C FB 48, 05, 05]
-1D0B3; [0C F7 E8, 05, 05]
+1D096; [0C FB 4F, 05, 05]
-1D0B4; [0C F7 EF, 05, 05]
+1D097; [0C FB 56, 05, 05]
-1D0B5; [0C F7 F6, 05, 05]
+1D098; [0C FB 5D, 05, 05]
-1D0B6; [0C F7 FD, 05, 05]
+1D099; [0C FB 64, 05, 05]
-1D0B7; [0C F8 06, 05, 05]
+1D09A; [0C FB 6B, 05, 05]
-1D0B8; [0C F8 0D, 05, 05]
+1D09B; [0C FB 72, 05, 05]
-1D0B9; [0C F8 14, 05, 05]
+1D09C; [0C FB 79, 05, 05]
-1D0BA; [0C F8 1B, 05, 05]
+1D09D; [0C FB 80, 05, 05]
-1D0BB; [0C F8 22, 05, 05]
+1D09E; [0C FB 87, 05, 05]
-1D0BC; [0C F8 29, 05, 05]
+1D09F; [0C FB 8E, 05, 05]
-1D0BD; [0C F8 30, 05, 05]
+1D0A0; [0C FB 95, 05, 05]
-1D0BE; [0C F8 37, 05, 05]
+1D0A1; [0C FB 9C, 05, 05]
-1D0BF; [0C F8 3E, 05, 05]
+1D0A2; [0C FB A3, 05, 05]
-1D0C0; [0C F8 45, 05, 05]
+1D0A3; [0C FB AA, 05, 05]
-1D0C1; [0C F8 4C, 05, 05]
+1D0A4; [0C FB B1, 05, 05]
-1D0C2; [0C F8 53, 05, 05]
+1D0A5; [0C FB B8, 05, 05]
-1D0C3; [0C F8 5A, 05, 05]
+1D0A6; [0C FB BF, 05, 05]
-1D0C4; [0C F8 61, 05, 05]
+1D0A7; [0C FB C6, 05, 05]
-1D0C5; [0C F8 68, 05, 05]
+1D0A8; [0C FB CD, 05, 05]
-1D0C6; [0C F8 6F, 05, 05]
+1D0A9; [0C FB D4, 05, 05]
-1D0C7; [0C F8 76, 05, 05]
+1D0AA; [0C FB DB, 05, 05]
-1D0C8; [0C F8 7D, 05, 05]
+1D0AB; [0C FB E2, 05, 05]
-1D0C9; [0C F8 84, 05, 05]
+1D0AC; [0C FB E9, 05, 05]
-1D0CA; [0C F8 8B, 05, 05]
+1D0AD; [0C FB F0, 05, 05]
-1D0CB; [0C F8 92, 05, 05]
+1D0AE; [0C FB F7, 05, 05]
-1D0CC; [0C F8 99, 05, 05]
+1D0AF; [0C FB FE, 05, 05]
-1D0CD; [0C F8 A0, 05, 05]
+1D0B0; [0C FC 07, 05, 05]
-1D0CE; [0C F8 A7, 05, 05]
+1D0B1; [0C FC 0E, 05, 05]
-1D0CF; [0C F8 AE, 05, 05]
+1D0B2; [0C FC 15, 05, 05]
-1D0D0; [0C F8 B5, 05, 05]
+1D0B3; [0C FC 1C, 05, 05]
-1D0D1; [0C F8 BC, 05, 05]
+1D0B4; [0C FC 23, 05, 05]
-1D0D2; [0C F8 C3, 05, 05]
+1D0B5; [0C FC 2A, 05, 05]
-1D0D3; [0C F8 CA, 05, 05]
+1D0B6; [0C FC 31, 05, 05]
-1D0D4; [0C F8 D1, 05, 05]
+1D0B7; [0C FC 38, 05, 05]
-1D0D5; [0C F8 D8, 05, 05]
+1D0B8; [0C FC 3F, 05, 05]
-1D0D6; [0C F8 DF, 05, 05]
+1D0B9; [0C FC 46, 05, 05]
-1D0D7; [0C F8 E6, 05, 05]
+1D0BA; [0C FC 4D, 05, 05]
-1D0D8; [0C F8 ED, 05, 05]
+1D0BB; [0C FC 54, 05, 05]
-1D0D9; [0C F8 F4, 05, 05]
+1D0BC; [0C FC 5B, 05, 05]
-1D0DA; [0C F8 FB, 05, 05]
+1D0BD; [0C FC 62, 05, 05]
-1D0DB; [0C F9 04, 05, 05]
+1D0BE; [0C FC 69, 05, 05]
-1D0DC; [0C F9 0B, 05, 05]
+1D0BF; [0C FC 70, 05, 05]
-1D0DD; [0C F9 12, 05, 05]
+1D0C0; [0C FC 77, 05, 05]
-1D0DE; [0C F9 19, 05, 05]
+1D0C1; [0C FC 7E, 05, 05]
-1D0DF; [0C F9 20, 05, 05]
+1D0C2; [0C FC 85, 05, 05]
-1D0E0; [0C F9 27, 05, 05]
+1D0C3; [0C FC 8C, 05, 05]
-1D0E1; [0C F9 2E, 05, 05]
+1D0C4; [0C FC 93, 05, 05]
-1D0E2; [0C F9 35, 05, 05]
+1D0C5; [0C FC 9A, 05, 05]
-1D0E3; [0C F9 3C, 05, 05]
+1D0C6; [0C FC A1, 05, 05]
-1D0E4; [0C F9 43, 05, 05]
+1D0C7; [0C FC A8, 05, 05]
-1D0E5; [0C F9 4A, 05, 05]
+1D0C8; [0C FC AF, 05, 05]
-1D0E6; [0C F9 51, 05, 05]
+1D0C9; [0C FC B6, 05, 05]
-1D0E7; [0C F9 58, 05, 05]
+1D0CA; [0C FC BD, 05, 05]
-1D0E8; [0C F9 5F, 05, 05]
+1D0CB; [0C FC C4, 05, 05]
-1D0E9; [0C F9 66, 05, 05]
+1D0CC; [0C FC CB, 05, 05]
-1D0EA; [0C F9 6D, 05, 05]
+1D0CD; [0C FC D2, 05, 05]
-1D0EB; [0C F9 74, 05, 05]
+1D0CE; [0C FC D9, 05, 05]
-1D0EC; [0C F9 7B, 05, 05]
+1D0CF; [0C FC E0, 05, 05]
-1D0ED; [0C F9 82, 05, 05]
+1D0D0; [0C FC E7, 05, 05]
-1D0EE; [0C F9 89, 05, 05]
+1D0D1; [0C FC EE, 05, 05]
-1D0EF; [0C F9 90, 05, 05]
+1D0D2; [0C FC F5, 05, 05]
-1D0F0; [0C F9 97, 05, 05]
+1D0D3; [0C FC FC, 05, 05]
-1D0F1; [0C F9 9E, 05, 05]
+1D0D4; [0C FD 05, 05, 05]
-1D0F2; [0C F9 A5, 05, 05]
+1D0D5; [0C FD 0C, 05, 05]
-1D0F3; [0C F9 AC, 05, 05]
+1D0D6; [0C FD 13, 05, 05]
-1D0F4; [0C F9 B3, 05, 05]
+1D0D7; [0C FD 1A, 05, 05]
-1D0F5; [0C F9 BA, 05, 05]
+1D0D8; [0C FD 21, 05, 05]
-1D100; [0C F9 C1, 05, 05]
+1D0D9; [0C FD 28, 05, 05]
-1D101; [0C F9 C8, 05, 05]
+1D0DA; [0C FD 2F, 05, 05]
-1D102; [0C F9 CF, 05, 05]
+1D0DB; [0C FD 36, 05, 05]
-1D103; [0C F9 D6, 05, 05]
+1D0DC; [0C FD 3D, 05, 05]
-1D104; [0C F9 DD, 05, 05]
+1D0DD; [0C FD 44, 05, 05]
-1D105; [0C F9 E4, 05, 05]
+1D0DE; [0C FD 4B, 05, 05]
-1D106; [0C F9 EB, 05, 05]
+1D0DF; [0C FD 52, 05, 05]
-1D107; [0C F9 F2, 05, 05]
+1D0E0; [0C FD 59, 05, 05]
-1D108; [0C F9 F9, 05, 05]
+1D0E1; [0C FD 60, 05, 05]
-1D109; [0C FA 02, 05, 05]
+1D0E2; [0C FD 67, 05, 05]
-1D10A; [0C FA 09, 05, 05]
+1D0E3; [0C FD 6E, 05, 05]
-1D10B; [0C FA 10, 05, 05]
+1D0E4; [0C FD 75, 05, 05]
-1D10C; [0C FA 17, 05, 05]
+1D0E5; [0C FD 7C, 05, 05]
-1D10D; [0C FA 1E, 05, 05]
+1D0E6; [0C FD 83, 05, 05]
-1D10E; [0C FA 25, 05, 05]
+1D0E7; [0C FD 8A, 05, 05]
-1D10F; [0C FA 2C, 05, 05]
+1D0E8; [0C FD 91, 05, 05]
-1D110; [0C FA 33, 05, 05]
+1D0E9; [0C FD 98, 05, 05]
-1D111; [0C FA 3A, 05, 05]
+1D0EA; [0C FD 9F, 05, 05]
-1D112; [0C FA 41, 05, 05]
+1D0EB; [0C FD A6, 05, 05]
-1D113; [0C FA 48, 05, 05]
+1D0EC; [0C FD AD, 05, 05]
-1D114; [0C FA 4F, 05, 05]
+1D0ED; [0C FD B4, 05, 05]
-1D115; [0C FA 56, 05, 05]
+1D0EE; [0C FD BB, 05, 05]
-1D116; [0C FA 5D, 05, 05]
+1D0EF; [0C FD C2, 05, 05]
-1D117; [0C FA 64, 05, 05]
+1D0F0; [0C FD C9, 05, 05]
-1D118; [0C FA 6B, 05, 05]
+1D0F1; [0C FD D0, 05, 05]
-1D119; [0C FA 72, 05, 05]
+1D0F2; [0C FD D7, 05, 05]
-1D11A; [0C FA 79, 05, 05]
+1D0F3; [0C FD DE, 05, 05]
-1D11B; [0C FA 80, 05, 05]
+1D0F4; [0C FD E5, 05, 05]
-1D11C; [0C FA 87, 05, 05]
+1D0F5; [0C FD EC, 05, 05]
-1D11D; [0C FA 8E, 05, 05]
+1D100; [0C FD F3, 05, 05]
-1D11E; [0C FA 95, 05, 05]
+1D101; [0C FD FA, 05, 05]
-1D11F; [0C FA 9C, 05, 05]
+1D102; [0C FE 03, 05, 05]
-1D120; [0C FA A3, 05, 05]
+1D103; [0C FE 0A, 05, 05]
-1D121; [0C FA AA, 05, 05]
+1D104; [0C FE 11, 05, 05]
-1D122; [0C FA B1, 05, 05]
+1D105; [0C FE 18, 05, 05]
-1D123; [0C FA B8, 05, 05]
+1D106; [0C FE 1F, 05, 05]
-1D124; [0C FA BF, 05, 05]
+1D107; [0C FE 26, 05, 05]
-1D125; [0C FA C6, 05, 05]
+1D108; [0C FE 2D, 05, 05]
-1D126; [0C FA CD, 05, 05]
+1D109; [0C FE 34, 05, 05]
-266D; [0C FA D4, 05, 05]
+1D10A; [0C FE 3B, 05, 05]
-266E; [0C FA DB, 05, 05]
+1D10B; [0C FE 42, 05, 05]
-266F; [0C FA E2, 05, 05]
+1D10C; [0C FE 49, 05, 05]
-1D12A; [0C FA E9, 05, 05]
+1D10D; [0C FE 50, 05, 05]
-1D12B; [0C FA F0, 05, 05]
+1D10E; [0C FE 57, 05, 05]
-1D12C; [0C FA F7, 05, 05]
+1D10F; [0C FE 5E, 05, 05]
-1D12D; [0C FA FE, 05, 05]
+1D110; [0C FE 65, 05, 05]
-1D12E; [0C FB 07, 05, 05]
+1D111; [0C FE 6C, 05, 05]
-1D12F; [0C FB 0E, 05, 05]
+1D112; [0C FE 73, 05, 05]
-1D130; [0C FB 15, 05, 05]
+1D113; [0C FE 7A, 05, 05]
-1D131; [0C FB 1C, 05, 05]
+1D114; [0C FE 81, 05, 05]
-1D132; [0C FB 23, 05, 05]
+1D115; [0C FE 88, 05, 05]
-1D133; [0C FB 2A, 05, 05]
+1D116; [0C FE 8F, 05, 05]
-1D134; [0C FB 31, 05, 05]
+1D117; [0C FE 96, 05, 05]
-1D135; [0C FB 38, 05, 05]
+1D118; [0C FE 9D, 05, 05]
-1D136; [0C FB 3F, 05, 05]
+1D119; [0C FE A4, 05, 05]
-1D137; [0C FB 46, 05, 05]
+1D11A; [0C FE AB, 05, 05]
-1D138; [0C FB 4D, 05, 05]
+1D11B; [0C FE B2, 05, 05]
-1D139; [0C FB 54, 05, 05]
+1D11C; [0C FE B9, 05, 05]
-1D129; [0C FB 5B, 05, 05]
+1D11D; [0C FE C0, 05, 05]
-1D13A; [0C FB 62, 05, 05]
+1D11E; [0C FE C7, 05, 05]
-1D13B; [0C FB 69, 05, 05]
+1D11F; [0C FE CE, 05, 05]
-1D13C; [0C FB 70, 05, 05]
+1D120; [0C FE D5, 05, 05]
-1D13D; [0C FB 77, 05, 05]
+1D121; [0C FE DC, 05, 05]
-1D13E; [0C FB 7E, 05, 05]
+1D122; [0C FE E3, 05, 05]
-1D13F; [0C FB 85, 05, 05]
+1D123; [0C FE EA, 05, 05]
-1D140; [0C FB 8C, 05, 05]
+1D124; [0C FE F1, 05, 05]
-1D141; [0C FB 93, 05, 05]
+1D125; [0C FE F8, 05, 05]
-1D142; [0C FB 9A, 05, 05]
+1D126; [0C FE FF, 05, 05]
-1D143; [0C FB A1, 05, 05]
+266D; [0C FF 08, 05, 05]
-1D144; [0C FB A8, 05, 05]
+266E; [0C FF 0F, 05, 05]
-1D145; [0C FB AF, 05, 05]
+266F; [0C FF 16, 05, 05]
-1D146; [0C FB B6, 05, 05]
+1D12A; [0C FF 1D, 05, 05]
-1D147; [0C FB BD, 05, 05]
+1D12B; [0C FF 24, 05, 05]
-1D148; [0C FB C4, 05, 05]
+1D12C; [0C FF 2B, 05, 05]
-1D149; [0C FB CB, 05, 05]
+1D12D; [0C FF 32, 05, 05]
-1D14A; [0C FB D2, 05, 05]
+1D12E; [0C FF 39, 05, 05]
-1D14B; [0C FB D9, 05, 05]
+1D12F; [0C FF 40, 05, 05]
-1D14C; [0C FB E0, 05, 05]
+1D130; [0C FF 47, 05, 05]
-1D14D; [0C FB E7, 05, 05]
+1D131; [0C FF 4E, 05, 05]
-1D14E; [0C FB EE, 05, 05]
+1D132; [0C FF 55, 05, 05]
-1D14F; [0C FB F5, 05, 05]
+1D133; [0C FF 5C, 05, 05]
-1D150; [0C FB FC, 05, 05]
+1D134; [0C FF 63, 05, 05]
-1D151; [0C FC 05, 05, 05]
+1D135; [0C FF 6A, 05, 05]
-1D152; [0C FC 0C, 05, 05]
+1D136; [0C FF 71, 05, 05]
-1D153; [0C FC 13, 05, 05]
+1D137; [0C FF 78, 05, 05]
-1D154; [0C FC 1A, 05, 05]
+1D138; [0C FF 7F, 05, 05]
-1D155; [0C FC 21, 05, 05]
+1D139; [0C FF 86, 05, 05]
-1D156; [0C FC 28, 05, 05]
+1D129; [0C FF 8D, 05, 05]
-1D157; [0C FC 2F, 05, 05]
-1D15E; [0C FC 2F, 05, 05]
+1D13A; [0C FF 94, 05, 05]
-1D158; [0C FC 36, 05, 05]
-1D15F; [0C FC 36, 05, 05]
-1D160; [0C FC 36, 05, 05]
-1D161; [0C FC 36, 05, 05]
-1D162; [0C FC 36, 05, 05]
-1D163; [0C FC 36, 05, 05]
-1D164; [0C FC 36, 05, 05]
+1D13B; [0C FF 9B, 05, 05]
-1D159; [0C FC 3D, 05, 05]
+1D13C; [0C FF A2, 05, 05]
-1D15A; [0C FC 44, 05, 05]
+1D13D; [0C FF A9, 05, 05]
-1D15B; [0C FC 4B, 05, 05]
+1D13E; [0C FF B0, 05, 05]
-1D15C; [0C FC 52, 05, 05]
+1D13F; [0C FF B7, 05, 05]
-1D15D; [0C FC 59, 05, 05]
+1D140; [0C FF BE, 05, 05]
-1D16A; [0C FC 60, 05, 05]
+1D141; [0C FF C5, 05, 05]
-1D16B; [0C FC 67, 05, 05]
+1D142; [0C FF CC, 05, 05]
-1D16C; [0C FC 6E, 05, 05]
+1D143; [0C FF D3, 05, 05]
-1D183; [0C FC 75, 05, 05]
+1D144; [0C FF DA, 05, 05]
-1D184; [0C FC 7C, 05, 05]
+1D145; [0C FF E1, 05, 05]
-1D18C; [0C FC 83, 05, 05]
+1D146; [0C FF E8, 05, 05]
-1D18D; [0C FC 8A, 05, 05]
+1D147; [0C FF EF, 05, 05]
-1D18E; [0C FC 91, 05, 05]
+1D148; [0C FF F6, 05, 05]
-1D18F; [0C FC 98, 05, 05]
+1D149; [0C FF FD, 05, 05]
-1D190; [0C FC 9F, 05, 05]
+1D14A; [0D 02 06, 05, 05]
-1D191; [0C FC A6, 05, 05]
+1D14B; [0D 02 0D, 05, 05]
-1D192; [0C FC AD, 05, 05]
+1D14C; [0D 02 14, 05, 05]
-1D193; [0C FC B4, 05, 05]
+1D14D; [0D 02 1B, 05, 05]
-1D194; [0C FC BB, 05, 05]
+1D14E; [0D 02 22, 05, 05]
-1D195; [0C FC C2, 05, 05]
+1D14F; [0D 02 29, 05, 05]
-1D196; [0C FC C9, 05, 05]
+1D150; [0D 02 30, 05, 05]
-1D197; [0C FC D0, 05, 05]
+1D151; [0D 02 37, 05, 05]
-1D198; [0C FC D7, 05, 05]
+1D152; [0D 02 3E, 05, 05]
-1D199; [0C FC DE, 05, 05]
+1D153; [0D 02 45, 05, 05]
-1D19A; [0C FC E5, 05, 05]
+1D154; [0D 02 4C, 05, 05]
-1D19B; [0C FC EC, 05, 05]
+1D155; [0D 02 53, 05, 05]
-1D19C; [0C FC F3, 05, 05]
+1D156; [0D 02 5A, 05, 05]
-1D19D; [0C FC FA, 05, 05]
+1D157; [0D 02 61, 05, 05]
+1D15E; [0D 02 61, 05, 05]
-1D19E; [0C FD 03, 05, 05]
+1D158; [0D 02 68, 05, 05]
+1D15F; [0D 02 68, 05, 05]
+1D160; [0D 02 68, 05, 05]
+1D161; [0D 02 68, 05, 05]
+1D162; [0D 02 68, 05, 05]
+1D163; [0D 02 68, 05, 05]
+1D164; [0D 02 68, 05, 05]
-1D19F; [0C FD 0A, 05, 05]
+1D159; [0D 02 6F, 05, 05]
-1D1A0; [0C FD 11, 05, 05]
+1D15A; [0D 02 76, 05, 05]
-1D1A1; [0C FD 18, 05, 05]
+1D15B; [0D 02 7D, 05, 05]
-1D1A2; [0C FD 1F, 05, 05]
+1D15C; [0D 02 84, 05, 05]
-1D1A3; [0C FD 26, 05, 05]
+1D15D; [0D 02 8B, 05, 05]
-1D1A4; [0C FD 2D, 05, 05]
+1D16A; [0D 02 92, 05, 05]
-1D1A5; [0C FD 34, 05, 05]
+1D16B; [0D 02 99, 05, 05]
-1D1A6; [0C FD 3B, 05, 05]
+1D16C; [0D 02 A0, 05, 05]
-1D1A7; [0C FD 42, 05, 05]
+1D183; [0D 02 A7, 05, 05]
-1D1A8; [0C FD 49, 05, 05]
+1D184; [0D 02 AE, 05, 05]
-1D1A9; [0C FD 50, 05, 05]
+1D18C; [0D 02 B5, 05, 05]
-1D1AE; [0C FD 57, 05, 05]
+1D18D; [0D 02 BC, 05, 05]
-1D1AF; [0C FD 5E, 05, 05]
+1D18E; [0D 02 C3, 05, 05]
-1D1B0; [0C FD 65, 05, 05]
+1D18F; [0D 02 CA, 05, 05]
-1D1B1; [0C FD 6C, 05, 05]
+1D190; [0D 02 D1, 05, 05]
-1D1B2; [0C FD 73, 05, 05]
+1D191; [0D 02 D8, 05, 05]
-1D1B3; [0C FD 7A, 05, 05]
+1D192; [0D 02 DF, 05, 05]
-1D1B4; [0C FD 81, 05, 05]
+1D193; [0D 02 E6, 05, 05]
-1D1B5; [0C FD 88, 05, 05]
+1D194; [0D 02 ED, 05, 05]
-1D1B6; [0C FD 8F, 05, 05]
+1D195; [0D 02 F4, 05, 05]
-1D1B7; [0C FD 96, 05, 05]
+1D196; [0D 02 FB, 05, 05]
-1D1B8; [0C FD 9D, 05, 05]
+1D197; [0D 03 04, 05, 05]
-1D1B9; [0C FD A4, 05, 05]
-1D1BB; [0C FD A4, 05, 05]
-1D1BD; [0C FD A4, 05, 05]
-1D1BF; [0C FD A4, 05, 05]
+1D198; [0D 03 0B, 05, 05]
-1D1BA; [0C FD AB, 05, 05]
-1D1BC; [0C FD AB, 05, 05]
-1D1BE; [0C FD AB, 05, 05]
-1D1C0; [0C FD AB, 05, 05]
+1D199; [0D 03 12, 05, 05]
-1D1C1; [0C FD B2, 05, 05]
+1D19A; [0D 03 19, 05, 05]
-1D1C2; [0C FD B9, 05, 05]
+1D19B; [0D 03 20, 05, 05]
-1D1C3; [0C FD C0, 05, 05]
+1D19C; [0D 03 27, 05, 05]
-1D1C4; [0C FD C7, 05, 05]
+1D19D; [0D 03 2E, 05, 05]
-1D1C5; [0C FD CE, 05, 05]
+1D19E; [0D 03 35, 05, 05]
-1D1C6; [0C FD D5, 05, 05]
+1D19F; [0D 03 3C, 05, 05]
-1D1C7; [0C FD DC, 05, 05]
+1D1A0; [0D 03 43, 05, 05]
-1D1C8; [0C FD E3, 05, 05]
+1D1A1; [0D 03 4A, 05, 05]
-1D1C9; [0C FD EA, 05, 05]
+1D1A2; [0D 03 51, 05, 05]
-1D1CA; [0C FD F1, 05, 05]
+1D1A3; [0D 03 58, 05, 05]
-1D1CB; [0C FD F8, 05, 05]
+1D1A4; [0D 03 5F, 05, 05]
-1D1CC; [0C FD FF, 05, 05]
+1D1A5; [0D 03 66, 05, 05]
-1D1CD; [0C FE 08, 05, 05]
+1D1A6; [0D 03 6D, 05, 05]
-1D1CE; [0C FE 0F, 05, 05]
+1D1A7; [0D 03 74, 05, 05]
-1D1CF; [0C FE 16, 05, 05]
+1D1A8; [0D 03 7B, 05, 05]
-1D1D0; [0C FE 1D, 05, 05]
+1D1A9; [0D 03 82, 05, 05]
-1D1D1; [0C FE 24, 05, 05]
+1D1AE; [0D 03 89, 05, 05]
-1D1D2; [0C FE 2B, 05, 05]
+1D1AF; [0D 03 90, 05, 05]
-1D1D3; [0C FE 32, 05, 05]
+1D1B0; [0D 03 97, 05, 05]
-1D1D4; [0C FE 39, 05, 05]
+1D1B1; [0D 03 9E, 05, 05]
-1D1D5; [0C FE 40, 05, 05]
+1D1B2; [0D 03 A5, 05, 05]
-1D1D6; [0C FE 47, 05, 05]
+1D1B3; [0D 03 AC, 05, 05]
-1D1D7; [0C FE 4E, 05, 05]
+1D1B4; [0D 03 B3, 05, 05]
-1D1D8; [0C FE 55, 05, 05]
+1D1B5; [0D 03 BA, 05, 05]
-1D1D9; [0C FE 5C, 05, 05]
+1D1B6; [0D 03 C1, 05, 05]
-1D1DA; [0C FE 63, 05, 05]
+1D1B7; [0D 03 C8, 05, 05]
-1D1DB; [0C FE 6A, 05, 05]
+1D1B8; [0D 03 CF, 05, 05]
-1D1DC; [0C FE 71, 05, 05]
+1D1B9; [0D 03 D6, 05, 05]
+1D1BB; [0D 03 D6, 05, 05]
+1D1BD; [0D 03 D6, 05, 05]
+1D1BF; [0D 03 D6, 05, 05]
-1D1DD; [0C FE 78, 05, 05]
+1D1BA; [0D 03 DD, 05, 05]
+1D1BC; [0D 03 DD, 05, 05]
+1D1BE; [0D 03 DD, 05, 05]
+1D1C0; [0D 03 DD, 05, 05]
-1D1DE; [0C FE 7F, 05, 05]
+1D1C1; [0D 03 E4, 05, 05]
-1D1DF; [0C FE 86, 05, 05]
+1D1C2; [0D 03 EB, 05, 05]
-1D1E0; [0C FE 8D, 05, 05]
+1D1C3; [0D 03 F2, 05, 05]
-1D1E1; [0C FE 94, 05, 05]
+1D1C4; [0D 03 F9, 05, 05]
-1D1E2; [0C FE 9B, 05, 05]
+1D1C5; [0D 04 02, 05, 05]
-1D1E3; [0C FE A2, 05, 05]
+1D1C6; [0D 04 09, 05, 05]
-1D1E4; [0C FE A9, 05, 05]
+1D1C7; [0D 04 10, 05, 05]
-1D1E5; [0C FE B0, 05, 05]
+1D1C8; [0D 04 17, 05, 05]
-1D1E6; [0C FE B7, 05, 05]
+1D1C9; [0D 04 1E, 05, 05]
-1D1E7; [0C FE BE, 05, 05]
+1D1CA; [0D 04 25, 05, 05]
-1D1E8; [0C FE C5, 05, 05]
+1D1CB; [0D 04 2C, 05, 05]
-1D200; [0C FE CC, 05, 05]
+1D1CC; [0D 04 33, 05, 05]
-1D201; [0C FE D3, 05, 05]
+1D1CD; [0D 04 3A, 05, 05]
-1D202; [0C FE DA, 05, 05]
+1D1CE; [0D 04 41, 05, 05]
-1D203; [0C FE E1, 05, 05]
+1D1CF; [0D 04 48, 05, 05]
-1D204; [0C FE E8, 05, 05]
+1D1D0; [0D 04 4F, 05, 05]
-1D205; [0C FE EF, 05, 05]
+1D1D1; [0D 04 56, 05, 05]
-1D206; [0C FE F6, 05, 05]
+1D1D2; [0D 04 5D, 05, 05]
-1D207; [0C FE FD, 05, 05]
+1D1D3; [0D 04 64, 05, 05]
-1D208; [0C FF 06, 05, 05]
+1D1D4; [0D 04 6B, 05, 05]
-1D209; [0C FF 0D, 05, 05]
+1D1D5; [0D 04 72, 05, 05]
-1D20A; [0C FF 14, 05, 05]
+1D1D6; [0D 04 79, 05, 05]
-1D20B; [0C FF 1B, 05, 05]
+1D1D7; [0D 04 80, 05, 05]
-1D20C; [0C FF 22, 05, 05]
+1D1D8; [0D 04 87, 05, 05]
-1D20D; [0C FF 29, 05, 05]
+1D1D9; [0D 04 8E, 05, 05]
-1D20E; [0C FF 30, 05, 05]
+1D1DA; [0D 04 95, 05, 05]
-1D20F; [0C FF 37, 05, 05]
+1D1DB; [0D 04 9C, 05, 05]
-1D210; [0C FF 3E, 05, 05]
+1D1DC; [0D 04 A3, 05, 05]
-1D211; [0C FF 45, 05, 05]
+1D1DD; [0D 04 AA, 05, 05]
-1D212; [0C FF 4C, 05, 05]
+1D1DE; [0D 04 B1, 05, 05]
-1D213; [0C FF 53, 05, 05]
+1D1DF; [0D 04 B8, 05, 05]
-1D214; [0C FF 5A, 05, 05]
+1D1E0; [0D 04 BF, 05, 05]
-1D215; [0C FF 61, 05, 05]
+1D1E1; [0D 04 C6, 05, 05]
-1D216; [0C FF 68, 05, 05]
+1D1E2; [0D 04 CD, 05, 05]
-1D217; [0C FF 6F, 05, 05]
+1D1E3; [0D 04 D4, 05, 05]
-1D218; [0C FF 76, 05, 05]
+1D1E4; [0D 04 DB, 05, 05]
-1D219; [0C FF 7D, 05, 05]
+1D1E5; [0D 04 E2, 05, 05]
-1D21A; [0C FF 84, 05, 05]
+1D1E6; [0D 04 E9, 05, 05]
-1D21B; [0C FF 8B, 05, 05]
+1D1E7; [0D 04 F0, 05, 05]
-1D21C; [0C FF 92, 05, 05]
+1D1E8; [0D 04 F7, 05, 05]
-1D21D; [0C FF 99, 05, 05]
+1D1E9; [0D 04 FE, 05, 05]
-1D21E; [0C FF A0, 05, 05]
+1D1EA; [0D 05 07, 05, 05]
-1D21F; [0C FF A7, 05, 05]
+1D200; [0D 05 0E, 05, 05]
-1D220; [0C FF AE, 05, 05]
+1D201; [0D 05 15, 05, 05]
-1D221; [0C FF B5, 05, 05]
+1D202; [0D 05 1C, 05, 05]
-1D222; [0C FF BC, 05, 05]
+1D203; [0D 05 23, 05, 05]
-1D223; [0C FF C3, 05, 05]
+1D204; [0D 05 2A, 05, 05]
-1D224; [0C FF CA, 05, 05]
+1D205; [0D 05 31, 05, 05]
-1D225; [0C FF D1, 05, 05]
+1D206; [0D 05 38, 05, 05]
-1D226; [0C FF D8, 05, 05]
+1D207; [0D 05 3F, 05, 05]
-1D227; [0C FF DF, 05, 05]
+1D208; [0D 05 46, 05, 05]
-1D228; [0C FF E6, 05, 05]
+1D209; [0D 05 4D, 05, 05]
-1D229; [0C FF ED, 05, 05]
+1D20A; [0D 05 54, 05, 05]
-1D22A; [0C FF F4, 05, 05]
+1D20B; [0D 05 5B, 05, 05]
-1D22B; [0C FF FB, 05, 05]
+1D20C; [0D 05 62, 05, 05]
-1D22C; [0D 02 04, 05, 05]
+1D20D; [0D 05 69, 05, 05]
-1D22D; [0D 02 0B, 05, 05]
+1D20E; [0D 05 70, 05, 05]
-1D22E; [0D 02 12, 05, 05]
+1D20F; [0D 05 77, 05, 05]
-1D22F; [0D 02 19, 05, 05]
+1D210; [0D 05 7E, 05, 05]
-1D230; [0D 02 20, 05, 05]
+1D211; [0D 05 85, 05, 05]
-1D231; [0D 02 27, 05, 05]
+1D212; [0D 05 8C, 05, 05]
-1D232; [0D 02 2E, 05, 05]
+1D213; [0D 05 93, 05, 05]
-1D233; [0D 02 35, 05, 05]
+1D214; [0D 05 9A, 05, 05]
-1D234; [0D 02 3C, 05, 05]
+1D215; [0D 05 A1, 05, 05]
-1D235; [0D 02 43, 05, 05]
+1D216; [0D 05 A8, 05, 05]
-1D236; [0D 02 4A, 05, 05]
+1D217; [0D 05 AF, 05, 05]
-1D237; [0D 02 51, 05, 05]
+1D218; [0D 05 B6, 05, 05]
-1D238; [0D 02 58, 05, 05]
+1D219; [0D 05 BD, 05, 05]
-1D239; [0D 02 5F, 05, 05]
+1D21A; [0D 05 C4, 05, 05]
-1D23A; [0D 02 66, 05, 05]
+1D21B; [0D 05 CB, 05, 05]
-1D23B; [0D 02 6D, 05, 05]
+1D21C; [0D 05 D2, 05, 05]
-1D23C; [0D 02 74, 05, 05]
+1D21D; [0D 05 D9, 05, 05]
-1D23D; [0D 02 7B, 05, 05]
+1D21E; [0D 05 E0, 05, 05]
-1D23E; [0D 02 82, 05, 05]
+1D21F; [0D 05 E7, 05, 05]
-1D23F; [0D 02 89, 05, 05]
+1D220; [0D 05 EE, 05, 05]
-1D240; [0D 02 90, 05, 05]
+1D221; [0D 05 F5, 05, 05]
-1D241; [0D 02 97, 05, 05]
+1D222; [0D 05 FC, 05, 05]
-1D245; [0D 02 9E, 05, 05]
+1D223; [0D 06 05, 05, 05]
-1BC9C; [0D 02 A5, 05, 05]
+1D224; [0D 06 0C, 05, 05]
-1ECAC; [0D 02 AC, 05, 05]
+1D225; [0D 06 13, 05, 05]
-1ED2E; [0D 02 B3, 05, 05]
+1D226; [0D 06 1A, 05, 05]
-1F000; [0D 02 BA, 05, 05]
+1D227; [0D 06 21, 05, 05]
-1F001; [0D 02 C1, 05, 05]
+1D228; [0D 06 28, 05, 05]
-1F002; [0D 02 C8, 05, 05]
+1D229; [0D 06 2F, 05, 05]
-1F003; [0D 02 CF, 05, 05]
+1D22A; [0D 06 36, 05, 05]
-1F004; [0D 02 D6, 05, 05]
+1D22B; [0D 06 3D, 05, 05]
-1F005; [0D 02 DD, 05, 05]
+1D22C; [0D 06 44, 05, 05]
-1F006; [0D 02 E4, 05, 05]
+1D22D; [0D 06 4B, 05, 05]
-1F007; [0D 02 EB, 05, 05]
+1D22E; [0D 06 52, 05, 05]
-1F008; [0D 02 F2, 05, 05]
+1D22F; [0D 06 59, 05, 05]
-1F009; [0D 02 F9, 05, 05]
+1D230; [0D 06 60, 05, 05]
-1F00A; [0D 03 02, 05, 05]
+1D231; [0D 06 67, 05, 05]
-1F00B; [0D 03 09, 05, 05]
+1D232; [0D 06 6E, 05, 05]
-1F00C; [0D 03 10, 05, 05]
+1D233; [0D 06 75, 05, 05]
-1F00D; [0D 03 17, 05, 05]
+1D234; [0D 06 7C, 05, 05]
-1F00E; [0D 03 1E, 05, 05]
+1D235; [0D 06 83, 05, 05]
-1F00F; [0D 03 25, 05, 05]
+1D236; [0D 06 8A, 05, 05]
-1F010; [0D 03 2C, 05, 05]
+1D237; [0D 06 91, 05, 05]
-1F011; [0D 03 33, 05, 05]
+1D238; [0D 06 98, 05, 05]
-1F012; [0D 03 3A, 05, 05]
+1D239; [0D 06 9F, 05, 05]
-1F013; [0D 03 41, 05, 05]
+1D23A; [0D 06 A6, 05, 05]
-1F014; [0D 03 48, 05, 05]
+1D23B; [0D 06 AD, 05, 05]
-1F015; [0D 03 4F, 05, 05]
+1D23C; [0D 06 B4, 05, 05]
-1F016; [0D 03 56, 05, 05]
+1D23D; [0D 06 BB, 05, 05]
-1F017; [0D 03 5D, 05, 05]
+1D23E; [0D 06 C2, 05, 05]
-1F018; [0D 03 64, 05, 05]
+1D23F; [0D 06 C9, 05, 05]
-1F019; [0D 03 6B, 05, 05]
+1D240; [0D 06 D0, 05, 05]
-1F01A; [0D 03 72, 05, 05]
+1D241; [0D 06 D7, 05, 05]
-1F01B; [0D 03 79, 05, 05]
+1D245; [0D 06 DE, 05, 05]
-1F01C; [0D 03 80, 05, 05]
+1BC9C; [0D 06 E5, 05, 05]
-1F01D; [0D 03 87, 05, 05]
+1ECAC; [0D 06 EC, 05, 05]
-1F01E; [0D 03 8E, 05, 05]
+1ED2E; [0D 06 F3, 05, 05]
-1F01F; [0D 03 95, 05, 05]
+1F000; [0D 06 FA, 05, 05]
-1F020; [0D 03 9C, 05, 05]
+1F001; [0D 07 03, 05, 05]
-1F021; [0D 03 A3, 05, 05]
+1F002; [0D 07 0A, 05, 05]
-1F022; [0D 03 AA, 05, 05]
+1F003; [0D 07 11, 05, 05]
-1F023; [0D 03 B1, 05, 05]
+1F004; [0D 07 18, 05, 05]
-1F024; [0D 03 B8, 05, 05]
+1F005; [0D 07 1F, 05, 05]
-1F025; [0D 03 BF, 05, 05]
+1F006; [0D 07 26, 05, 05]
-1F026; [0D 03 C6, 05, 05]
+1F007; [0D 07 2D, 05, 05]
-1F027; [0D 03 CD, 05, 05]
+1F008; [0D 07 34, 05, 05]
-1F028; [0D 03 D4, 05, 05]
+1F009; [0D 07 3B, 05, 05]
-1F029; [0D 03 DB, 05, 05]
+1F00A; [0D 07 42, 05, 05]
-1F02A; [0D 03 E2, 05, 05]
+1F00B; [0D 07 49, 05, 05]
-1F02B; [0D 03 E9, 05, 05]
+1F00C; [0D 07 50, 05, 05]
-1F030; [0D 03 F0, 05, 05]
+1F00D; [0D 07 57, 05, 05]
-1F031; [0D 03 F7, 05, 05]
+1F00E; [0D 07 5E, 05, 05]
-1F032; [0D 03 FE, 05, 05]
+1F00F; [0D 07 65, 05, 05]
-1F033; [0D 04 07, 05, 05]
+1F010; [0D 07 6C, 05, 05]
-1F034; [0D 04 0E, 05, 05]
+1F011; [0D 07 73, 05, 05]
-1F035; [0D 04 15, 05, 05]
+1F012; [0D 07 7A, 05, 05]
-1F036; [0D 04 1C, 05, 05]
+1F013; [0D 07 81, 05, 05]
-1F037; [0D 04 23, 05, 05]
+1F014; [0D 07 88, 05, 05]
-1F038; [0D 04 2A, 05, 05]
+1F015; [0D 07 8F, 05, 05]
-1F039; [0D 04 31, 05, 05]
+1F016; [0D 07 96, 05, 05]
-1F03A; [0D 04 38, 05, 05]
+1F017; [0D 07 9D, 05, 05]
-1F03B; [0D 04 3F, 05, 05]
+1F018; [0D 07 A4, 05, 05]
-1F03C; [0D 04 46, 05, 05]
+1F019; [0D 07 AB, 05, 05]
-1F03D; [0D 04 4D, 05, 05]
+1F01A; [0D 07 B2, 05, 05]
-1F03E; [0D 04 54, 05, 05]
+1F01B; [0D 07 B9, 05, 05]
-1F03F; [0D 04 5B, 05, 05]
+1F01C; [0D 07 C0, 05, 05]
-1F040; [0D 04 62, 05, 05]
+1F01D; [0D 07 C7, 05, 05]
-1F041; [0D 04 69, 05, 05]
+1F01E; [0D 07 CE, 05, 05]
-1F042; [0D 04 70, 05, 05]
+1F01F; [0D 07 D5, 05, 05]
-1F043; [0D 04 77, 05, 05]
+1F020; [0D 07 DC, 05, 05]
-1F044; [0D 04 7E, 05, 05]
+1F021; [0D 07 E3, 05, 05]
-1F045; [0D 04 85, 05, 05]
+1F022; [0D 07 EA, 05, 05]
-1F046; [0D 04 8C, 05, 05]
+1F023; [0D 07 F1, 05, 05]
-1F047; [0D 04 93, 05, 05]
+1F024; [0D 07 F8, 05, 05]
-1F048; [0D 04 9A, 05, 05]
+1F025; [0D 07 FF, 05, 05]
-1F049; [0D 04 A1, 05, 05]
+1F026; [0D 08 08, 05, 05]
-1F04A; [0D 04 A8, 05, 05]
+1F027; [0D 08 0F, 05, 05]
-1F04B; [0D 04 AF, 05, 05]
+1F028; [0D 08 16, 05, 05]
-1F04C; [0D 04 B6, 05, 05]
+1F029; [0D 08 1D, 05, 05]
-1F04D; [0D 04 BD, 05, 05]
+1F02A; [0D 08 24, 05, 05]
-1F04E; [0D 04 C4, 05, 05]
+1F02B; [0D 08 2B, 05, 05]
-1F04F; [0D 04 CB, 05, 05]
+1F030; [0D 08 32, 05, 05]
-1F050; [0D 04 D2, 05, 05]
+1F031; [0D 08 39, 05, 05]
-1F051; [0D 04 D9, 05, 05]
+1F032; [0D 08 40, 05, 05]
-1F052; [0D 04 E0, 05, 05]
+1F033; [0D 08 47, 05, 05]
-1F053; [0D 04 E7, 05, 05]
+1F034; [0D 08 4E, 05, 05]
-1F054; [0D 04 EE, 05, 05]
+1F035; [0D 08 55, 05, 05]
-1F055; [0D 04 F5, 05, 05]
+1F036; [0D 08 5C, 05, 05]
-1F056; [0D 04 FC, 05, 05]
+1F037; [0D 08 63, 05, 05]
-1F057; [0D 05 05, 05, 05]
+1F038; [0D 08 6A, 05, 05]
-1F058; [0D 05 0C, 05, 05]
+1F039; [0D 08 71, 05, 05]
-1F059; [0D 05 13, 05, 05]
+1F03A; [0D 08 78, 05, 05]
-1F05A; [0D 05 1A, 05, 05]
+1F03B; [0D 08 7F, 05, 05]
-1F05B; [0D 05 21, 05, 05]
+1F03C; [0D 08 86, 05, 05]
-1F05C; [0D 05 28, 05, 05]
+1F03D; [0D 08 8D, 05, 05]
-1F05D; [0D 05 2F, 05, 05]
+1F03E; [0D 08 94, 05, 05]
-1F05E; [0D 05 36, 05, 05]
+1F03F; [0D 08 9B, 05, 05]
-1F05F; [0D 05 3D, 05, 05]
+1F040; [0D 08 A2, 05, 05]
-1F060; [0D 05 44, 05, 05]
+1F041; [0D 08 A9, 05, 05]
-1F061; [0D 05 4B, 05, 05]
+1F042; [0D 08 B0, 05, 05]
-1F062; [0D 05 52, 05, 05]
+1F043; [0D 08 B7, 05, 05]
-1F063; [0D 05 59, 05, 05]
+1F044; [0D 08 BE, 05, 05]
-1F064; [0D 05 60, 05, 05]
+1F045; [0D 08 C5, 05, 05]
-1F065; [0D 05 67, 05, 05]
+1F046; [0D 08 CC, 05, 05]
-1F066; [0D 05 6E, 05, 05]
+1F047; [0D 08 D3, 05, 05]
-1F067; [0D 05 75, 05, 05]
+1F048; [0D 08 DA, 05, 05]
-1F068; [0D 05 7C, 05, 05]
+1F049; [0D 08 E1, 05, 05]
-1F069; [0D 05 83, 05, 05]
+1F04A; [0D 08 E8, 05, 05]
-1F06A; [0D 05 8A, 05, 05]
+1F04B; [0D 08 EF, 05, 05]
-1F06B; [0D 05 91, 05, 05]
+1F04C; [0D 08 F6, 05, 05]
-1F06C; [0D 05 98, 05, 05]
+1F04D; [0D 08 FD, 05, 05]
-1F06D; [0D 05 9F, 05, 05]
+1F04E; [0D 09 06, 05, 05]
-1F06E; [0D 05 A6, 05, 05]
+1F04F; [0D 09 0D, 05, 05]
-1F06F; [0D 05 AD, 05, 05]
+1F050; [0D 09 14, 05, 05]
-1F070; [0D 05 B4, 05, 05]
+1F051; [0D 09 1B, 05, 05]
-1F071; [0D 05 BB, 05, 05]
+1F052; [0D 09 22, 05, 05]
-1F072; [0D 05 C2, 05, 05]
+1F053; [0D 09 29, 05, 05]
-1F073; [0D 05 C9, 05, 05]
+1F054; [0D 09 30, 05, 05]
-1F074; [0D 05 D0, 05, 05]
+1F055; [0D 09 37, 05, 05]
-1F075; [0D 05 D7, 05, 05]
+1F056; [0D 09 3E, 05, 05]
-1F076; [0D 05 DE, 05, 05]
+1F057; [0D 09 45, 05, 05]
-1F077; [0D 05 E5, 05, 05]
+1F058; [0D 09 4C, 05, 05]
-1F078; [0D 05 EC, 05, 05]
+1F059; [0D 09 53, 05, 05]
-1F079; [0D 05 F3, 05, 05]
+1F05A; [0D 09 5A, 05, 05]
-1F07A; [0D 05 FA, 05, 05]
+1F05B; [0D 09 61, 05, 05]
-1F07B; [0D 06 03, 05, 05]
+1F05C; [0D 09 68, 05, 05]
-1F07C; [0D 06 0A, 05, 05]
+1F05D; [0D 09 6F, 05, 05]
-1F07D; [0D 06 11, 05, 05]
+1F05E; [0D 09 76, 05, 05]
-1F07E; [0D 06 18, 05, 05]
+1F05F; [0D 09 7D, 05, 05]
-1F07F; [0D 06 1F, 05, 05]
+1F060; [0D 09 84, 05, 05]
-1F080; [0D 06 26, 05, 05]
+1F061; [0D 09 8B, 05, 05]
-1F081; [0D 06 2D, 05, 05]
+1F062; [0D 09 92, 05, 05]
-1F082; [0D 06 34, 05, 05]
+1F063; [0D 09 99, 05, 05]
-1F083; [0D 06 3B, 05, 05]
+1F064; [0D 09 A0, 05, 05]
-1F084; [0D 06 42, 05, 05]
+1F065; [0D 09 A7, 05, 05]
-1F085; [0D 06 49, 05, 05]
+1F066; [0D 09 AE, 05, 05]
-1F086; [0D 06 50, 05, 05]
+1F067; [0D 09 B5, 05, 05]
-1F087; [0D 06 57, 05, 05]
+1F068; [0D 09 BC, 05, 05]
-1F088; [0D 06 5E, 05, 05]
+1F069; [0D 09 C3, 05, 05]
-1F089; [0D 06 65, 05, 05]
+1F06A; [0D 09 CA, 05, 05]
-1F08A; [0D 06 6C, 05, 05]
+1F06B; [0D 09 D1, 05, 05]
-1F08B; [0D 06 73, 05, 05]
+1F06C; [0D 09 D8, 05, 05]
-1F08C; [0D 06 7A, 05, 05]
+1F06D; [0D 09 DF, 05, 05]
-1F08D; [0D 06 81, 05, 05]
+1F06E; [0D 09 E6, 05, 05]
-1F08E; [0D 06 88, 05, 05]
+1F06F; [0D 09 ED, 05, 05]
-1F08F; [0D 06 8F, 05, 05]
+1F070; [0D 09 F4, 05, 05]
-1F090; [0D 06 96, 05, 05]
+1F071; [0D 09 FB, 05, 05]
-1F091; [0D 06 9D, 05, 05]
+1F072; [0D 0A 04, 05, 05]
-1F092; [0D 06 A4, 05, 05]
+1F073; [0D 0A 0B, 05, 05]
-1F093; [0D 06 AB, 05, 05]
+1F074; [0D 0A 12, 05, 05]
-1F0A0; [0D 06 B2, 05, 05]
+1F075; [0D 0A 19, 05, 05]
-1F0A1; [0D 06 B9, 05, 05]
+1F076; [0D 0A 20, 05, 05]
-1F0A2; [0D 06 C0, 05, 05]
+1F077; [0D 0A 27, 05, 05]
-1F0A3; [0D 06 C7, 05, 05]
+1F078; [0D 0A 2E, 05, 05]
-1F0A4; [0D 06 CE, 05, 05]
+1F079; [0D 0A 35, 05, 05]
-1F0A5; [0D 06 D5, 05, 05]
+1F07A; [0D 0A 3C, 05, 05]
-1F0A6; [0D 06 DC, 05, 05]
+1F07B; [0D 0A 43, 05, 05]
-1F0A7; [0D 06 E3, 05, 05]
+1F07C; [0D 0A 4A, 05, 05]
-1F0A8; [0D 06 EA, 05, 05]
+1F07D; [0D 0A 51, 05, 05]
-1F0A9; [0D 06 F1, 05, 05]
+1F07E; [0D 0A 58, 05, 05]
-1F0AA; [0D 06 F8, 05, 05]
+1F07F; [0D 0A 5F, 05, 05]
-1F0AB; [0D 06 FF, 05, 05]
+1F080; [0D 0A 66, 05, 05]
-1F0AC; [0D 07 08, 05, 05]
+1F081; [0D 0A 6D, 05, 05]
-1F0AD; [0D 07 0F, 05, 05]
+1F082; [0D 0A 74, 05, 05]
-1F0AE; [0D 07 16, 05, 05]
+1F083; [0D 0A 7B, 05, 05]
-1F0B1; [0D 07 1D, 05, 05]
+1F084; [0D 0A 82, 05, 05]
-1F0B2; [0D 07 24, 05, 05]
+1F085; [0D 0A 89, 05, 05]
-1F0B3; [0D 07 2B, 05, 05]
+1F086; [0D 0A 90, 05, 05]
-1F0B4; [0D 07 32, 05, 05]
+1F087; [0D 0A 97, 05, 05]
-1F0B5; [0D 07 39, 05, 05]
+1F088; [0D 0A 9E, 05, 05]
-1F0B6; [0D 07 40, 05, 05]
+1F089; [0D 0A A5, 05, 05]
-1F0B7; [0D 07 47, 05, 05]
+1F08A; [0D 0A AC, 05, 05]
-1F0B8; [0D 07 4E, 05, 05]
+1F08B; [0D 0A B3, 05, 05]
-1F0B9; [0D 07 55, 05, 05]
+1F08C; [0D 0A BA, 05, 05]
-1F0BA; [0D 07 5C, 05, 05]
+1F08D; [0D 0A C1, 05, 05]
-1F0BB; [0D 07 63, 05, 05]
+1F08E; [0D 0A C8, 05, 05]
-1F0BC; [0D 07 6A, 05, 05]
+1F08F; [0D 0A CF, 05, 05]
-1F0BD; [0D 07 71, 05, 05]
+1F090; [0D 0A D6, 05, 05]
-1F0BE; [0D 07 78, 05, 05]
+1F091; [0D 0A DD, 05, 05]
-1F0BF; [0D 07 7F, 05, 05]
+1F092; [0D 0A E4, 05, 05]
-1F0C1; [0D 07 86, 05, 05]
+1F093; [0D 0A EB, 05, 05]
-1F0C2; [0D 07 8D, 05, 05]
+1F0A0; [0D 0A F2, 05, 05]
-1F0C3; [0D 07 94, 05, 05]
+1F0A1; [0D 0A F9, 05, 05]
-1F0C4; [0D 07 9B, 05, 05]
+1F0A2; [0D 0B 02, 05, 05]
-1F0C5; [0D 07 A2, 05, 05]
+1F0A3; [0D 0B 09, 05, 05]
-1F0C6; [0D 07 A9, 05, 05]
+1F0A4; [0D 0B 10, 05, 05]
-1F0C7; [0D 07 B0, 05, 05]
+1F0A5; [0D 0B 17, 05, 05]
-1F0C8; [0D 07 B7, 05, 05]
+1F0A6; [0D 0B 1E, 05, 05]
-1F0C9; [0D 07 BE, 05, 05]
+1F0A7; [0D 0B 25, 05, 05]
-1F0CA; [0D 07 C5, 05, 05]
+1F0A8; [0D 0B 2C, 05, 05]
-1F0CB; [0D 07 CC, 05, 05]
+1F0A9; [0D 0B 33, 05, 05]
-1F0CC; [0D 07 D3, 05, 05]
+1F0AA; [0D 0B 3A, 05, 05]
-1F0CD; [0D 07 DA, 05, 05]
+1F0AB; [0D 0B 41, 05, 05]
-1F0CE; [0D 07 E1, 05, 05]
+1F0AC; [0D 0B 48, 05, 05]
-1F0CF; [0D 07 E8, 05, 05]
+1F0AD; [0D 0B 4F, 05, 05]
-1F0D1; [0D 07 EF, 05, 05]
+1F0AE; [0D 0B 56, 05, 05]
-1F0D2; [0D 07 F6, 05, 05]
+1F0B1; [0D 0B 5D, 05, 05]
-1F0D3; [0D 07 FD, 05, 05]
+1F0B2; [0D 0B 64, 05, 05]
-1F0D4; [0D 08 06, 05, 05]
+1F0B3; [0D 0B 6B, 05, 05]
-1F0D5; [0D 08 0D, 05, 05]
+1F0B4; [0D 0B 72, 05, 05]
-1F0D6; [0D 08 14, 05, 05]
+1F0B5; [0D 0B 79, 05, 05]
-1F0D7; [0D 08 1B, 05, 05]
+1F0B6; [0D 0B 80, 05, 05]
-1F0D8; [0D 08 22, 05, 05]
+1F0B7; [0D 0B 87, 05, 05]
-1F0D9; [0D 08 29, 05, 05]
+1F0B8; [0D 0B 8E, 05, 05]
-1F0DA; [0D 08 30, 05, 05]
+1F0B9; [0D 0B 95, 05, 05]
-1F0DB; [0D 08 37, 05, 05]
+1F0BA; [0D 0B 9C, 05, 05]
-1F0DC; [0D 08 3E, 05, 05]
+1F0BB; [0D 0B A3, 05, 05]
-1F0DD; [0D 08 45, 05, 05]
+1F0BC; [0D 0B AA, 05, 05]
-1F0DE; [0D 08 4C, 05, 05]
+1F0BD; [0D 0B B1, 05, 05]
-1F0DF; [0D 08 53, 05, 05]
+1F0BE; [0D 0B B8, 05, 05]
-1F0E0; [0D 08 5A, 05, 05]
+1F0BF; [0D 0B BF, 05, 05]
-1F0E1; [0D 08 61, 05, 05]
+1F0C1; [0D 0B C6, 05, 05]
-1F0E2; [0D 08 68, 05, 05]
+1F0C2; [0D 0B CD, 05, 05]
-1F0E3; [0D 08 6F, 05, 05]
+1F0C3; [0D 0B D4, 05, 05]
-1F0E4; [0D 08 76, 05, 05]
+1F0C4; [0D 0B DB, 05, 05]
-1F0E5; [0D 08 7D, 05, 05]
+1F0C5; [0D 0B E2, 05, 05]
-1F0E6; [0D 08 84, 05, 05]
+1F0C6; [0D 0B E9, 05, 05]
-1F0E7; [0D 08 8B, 05, 05]
+1F0C7; [0D 0B F0, 05, 05]
-1F0E8; [0D 08 92, 05, 05]
+1F0C8; [0D 0B F7, 05, 05]
-1F0E9; [0D 08 99, 05, 05]
+1F0C9; [0D 0B FE, 05, 05]
-1F0EA; [0D 08 A0, 05, 05]
+1F0CA; [0D 0C 07, 05, 05]
-1F0EB; [0D 08 A7, 05, 05]
+1F0CB; [0D 0C 0E, 05, 05]
-1F0EC; [0D 08 AE, 05, 05]
+1F0CC; [0D 0C 15, 05, 05]
-1F0ED; [0D 08 B5, 05, 05]
+1F0CD; [0D 0C 1C, 05, 05]
-1F0EE; [0D 08 BC, 05, 05]
+1F0CE; [0D 0C 23, 05, 05]
-1F0EF; [0D 08 C3, 05, 05]
+1F0CF; [0D 0C 2A, 05, 05]
-1F0F0; [0D 08 CA, 05, 05]
+1F0D1; [0D 0C 31, 05, 05]
-1F0F1; [0D 08 D1, 05, 05]
+1F0D2; [0D 0C 38, 05, 05]
-1F0F2; [0D 08 D8, 05, 05]
+1F0D3; [0D 0C 3F, 05, 05]
-1F0F3; [0D 08 DF, 05, 05]
+1F0D4; [0D 0C 46, 05, 05]
-1F0F4; [0D 08 E6, 05, 05]
+1F0D5; [0D 0C 4D, 05, 05]
-1F0F5; [0D 08 ED, 05, 05]
+1F0D6; [0D 0C 54, 05, 05]
-1FA00; [0D 08 F4, 05, 05]
+1F0D7; [0D 0C 5B, 05, 05]
-1FA01; [0D 08 FB, 05, 05]
+1F0D8; [0D 0C 62, 05, 05]
-1FA02; [0D 09 04, 05, 05]
+1F0D9; [0D 0C 69, 05, 05]
-1FA03; [0D 09 0B, 05, 05]
+1F0DA; [0D 0C 70, 05, 05]
-1FA04; [0D 09 12, 05, 05]
+1F0DB; [0D 0C 77, 05, 05]
-1FA05; [0D 09 19, 05, 05]
+1F0DC; [0D 0C 7E, 05, 05]
-1FA06; [0D 09 20, 05, 05]
+1F0DD; [0D 0C 85, 05, 05]
-1FA07; [0D 09 27, 05, 05]
+1F0DE; [0D 0C 8C, 05, 05]
-1FA08; [0D 09 2E, 05, 05]
+1F0DF; [0D 0C 93, 05, 05]
-1FA09; [0D 09 35, 05, 05]
+1F0E0; [0D 0C 9A, 05, 05]
-1FA0A; [0D 09 3C, 05, 05]
+1F0E1; [0D 0C A1, 05, 05]
-1FA0B; [0D 09 43, 05, 05]
+1F0E2; [0D 0C A8, 05, 05]
-1FA0C; [0D 09 4A, 05, 05]
+1F0E3; [0D 0C AF, 05, 05]
-1FA0D; [0D 09 51, 05, 05]
+1F0E4; [0D 0C B6, 05, 05]
-1FA0E; [0D 09 58, 05, 05]
+1F0E5; [0D 0C BD, 05, 05]
-1FA0F; [0D 09 5F, 05, 05]
+1F0E6; [0D 0C C4, 05, 05]
-1FA10; [0D 09 66, 05, 05]
+1F0E7; [0D 0C CB, 05, 05]
-1FA11; [0D 09 6D, 05, 05]
+1F0E8; [0D 0C D2, 05, 05]
-1FA12; [0D 09 74, 05, 05]
+1F0E9; [0D 0C D9, 05, 05]
-1FA13; [0D 09 7B, 05, 05]
+1F0EA; [0D 0C E0, 05, 05]
-1FA14; [0D 09 82, 05, 05]
+1F0EB; [0D 0C E7, 05, 05]
-1FA15; [0D 09 89, 05, 05]
+1F0EC; [0D 0C EE, 05, 05]
-1FA16; [0D 09 90, 05, 05]
+1F0ED; [0D 0C F5, 05, 05]
-1FA17; [0D 09 97, 05, 05]
+1F0EE; [0D 0C FC, 05, 05]
-1FA18; [0D 09 9E, 05, 05]
+1F0EF; [0D 0D 05, 05, 05]
-1FA19; [0D 09 A5, 05, 05]
+1F0F0; [0D 0D 0C, 05, 05]
-1FA1A; [0D 09 AC, 05, 05]
+1F0F1; [0D 0D 13, 05, 05]
-1FA1B; [0D 09 B3, 05, 05]
+1F0F2; [0D 0D 1A, 05, 05]
-1FA1C; [0D 09 BA, 05, 05]
+1F0F3; [0D 0D 21, 05, 05]
-1FA1D; [0D 09 C1, 05, 05]
+1F0F4; [0D 0D 28, 05, 05]
-1FA1E; [0D 09 C8, 05, 05]
+1F0F5; [0D 0D 2F, 05, 05]
-1FA1F; [0D 09 CF, 05, 05]
+1FA00; [0D 0D 36, 05, 05]
-1FA20; [0D 09 D6, 05, 05]
+1FA01; [0D 0D 3D, 05, 05]
-1FA21; [0D 09 DD, 05, 05]
+1FA02; [0D 0D 44, 05, 05]
-1FA22; [0D 09 E4, 05, 05]
+1FA03; [0D 0D 4B, 05, 05]
-1FA23; [0D 09 EB, 05, 05]
+1FA04; [0D 0D 52, 05, 05]
-1FA24; [0D 09 F2, 05, 05]
+1FA05; [0D 0D 59, 05, 05]
-1FA25; [0D 09 F9, 05, 05]
+1FA06; [0D 0D 60, 05, 05]
-1FA26; [0D 0A 02, 05, 05]
+1FA07; [0D 0D 67, 05, 05]
-1FA27; [0D 0A 09, 05, 05]
+1FA08; [0D 0D 6E, 05, 05]
-1FA28; [0D 0A 10, 05, 05]
+1FA09; [0D 0D 75, 05, 05]
-1FA29; [0D 0A 17, 05, 05]
+1FA0A; [0D 0D 7C, 05, 05]
-1FA2A; [0D 0A 1E, 05, 05]
+1FA0B; [0D 0D 83, 05, 05]
-1FA2B; [0D 0A 25, 05, 05]
+1FA0C; [0D 0D 8A, 05, 05]
-1FA2C; [0D 0A 2C, 05, 05]
+1FA0D; [0D 0D 91, 05, 05]
-1FA2D; [0D 0A 33, 05, 05]
+1FA0E; [0D 0D 98, 05, 05]
-1FA2E; [0D 0A 3A, 05, 05]
+1FA0F; [0D 0D 9F, 05, 05]
-1FA2F; [0D 0A 41, 05, 05]
+1FA10; [0D 0D A6, 05, 05]
-1FA30; [0D 0A 48, 05, 05]
+1FA11; [0D 0D AD, 05, 05]
-1FA31; [0D 0A 4F, 05, 05]
+1FA12; [0D 0D B4, 05, 05]
-1FA32; [0D 0A 56, 05, 05]
+1FA13; [0D 0D BB, 05, 05]
-1FA33; [0D 0A 5D, 05, 05]
+1FA14; [0D 0D C2, 05, 05]
-1FA34; [0D 0A 64, 05, 05]
+1FA15; [0D 0D C9, 05, 05]
-1FA35; [0D 0A 6B, 05, 05]
+1FA16; [0D 0D D0, 05, 05]
-1FA36; [0D 0A 72, 05, 05]
+1FA17; [0D 0D D7, 05, 05]
-1FA37; [0D 0A 79, 05, 05]
+1FA18; [0D 0D DE, 05, 05]
-1FA38; [0D 0A 80, 05, 05]
+1FA19; [0D 0D E5, 05, 05]
-1FA39; [0D 0A 87, 05, 05]
+1FA1A; [0D 0D EC, 05, 05]
-1FA3A; [0D 0A 8E, 05, 05]
+1FA1B; [0D 0D F3, 05, 05]
-1FA3B; [0D 0A 95, 05, 05]
+1FA1C; [0D 0D FA, 05, 05]
-1FA3C; [0D 0A 9C, 05, 05]
+1FA1D; [0D 0E 03, 05, 05]
-1FA3D; [0D 0A A3, 05, 05]
+1FA1E; [0D 0E 0A, 05, 05]
-1FA3E; [0D 0A AA, 05, 05]
+1FA1F; [0D 0E 11, 05, 05]
-1FA3F; [0D 0A B1, 05, 05]
+1FA20; [0D 0E 18, 05, 05]
-1FA40; [0D 0A B8, 05, 05]
+1FA21; [0D 0E 1F, 05, 05]
-1FA41; [0D 0A BF, 05, 05]
+1FA22; [0D 0E 26, 05, 05]
-1FA42; [0D 0A C6, 05, 05]
+1FA23; [0D 0E 2D, 05, 05]
-1FA43; [0D 0A CD, 05, 05]
+1FA24; [0D 0E 34, 05, 05]
-1FA44; [0D 0A D4, 05, 05]
+1FA25; [0D 0E 3B, 05, 05]
-1FA45; [0D 0A DB, 05, 05]
+1FA26; [0D 0E 42, 05, 05]
-1FA46; [0D 0A E2, 05, 05]
+1FA27; [0D 0E 49, 05, 05]
-1FA47; [0D 0A E9, 05, 05]
+1FA28; [0D 0E 50, 05, 05]
-1FA48; [0D 0A F0, 05, 05]
+1FA29; [0D 0E 57, 05, 05]
-1FA49; [0D 0A F7, 05, 05]
+1FA2A; [0D 0E 5E, 05, 05]
-1FA4A; [0D 0A FE, 05, 05]
+1FA2B; [0D 0E 65, 05, 05]
-1FA4B; [0D 0B 07, 05, 05]
+1FA2C; [0D 0E 6C, 05, 05]
-1FA4C; [0D 0B 0E, 05, 05]
+1FA2D; [0D 0E 73, 05, 05]
-1FA4D; [0D 0B 15, 05, 05]
+1FA2E; [0D 0E 7A, 05, 05]
-1FA4E; [0D 0B 1C, 05, 05]
+1FA2F; [0D 0E 81, 05, 05]
-1FA4F; [0D 0B 23, 05, 05]
+1FA30; [0D 0E 88, 05, 05]
-1FA50; [0D 0B 2A, 05, 05]
+1FA31; [0D 0E 8F, 05, 05]
-1FA51; [0D 0B 31, 05, 05]
+1FA32; [0D 0E 96, 05, 05]
-1FA52; [0D 0B 38, 05, 05]
+1FA33; [0D 0E 9D, 05, 05]
-1FA53; [0D 0B 3F, 05, 05]
+1FA34; [0D 0E A4, 05, 05]
-1FA60; [0D 0B 46, 05, 05]
+1FA35; [0D 0E AB, 05, 05]
-1FA61; [0D 0B 4D, 05, 05]
+1FA36; [0D 0E B2, 05, 05]
-1FA62; [0D 0B 54, 05, 05]
+1FA37; [0D 0E B9, 05, 05]
-1FA63; [0D 0B 5B, 05, 05]
+1FA38; [0D 0E C0, 05, 05]
-1FA64; [0D 0B 62, 05, 05]
+1FA39; [0D 0E C7, 05, 05]
-1FA65; [0D 0B 69, 05, 05]
+1FA3A; [0D 0E CE, 05, 05]
-1FA66; [0D 0B 70, 05, 05]
+1FA3B; [0D 0E D5, 05, 05]
-1FA67; [0D 0B 77, 05, 05]
+1FA3C; [0D 0E DC, 05, 05]
-1FA68; [0D 0B 7E, 05, 05]
+1FA3D; [0D 0E E3, 05, 05]
-1FA69; [0D 0B 85, 05, 05]
+1FA3E; [0D 0E EA, 05, 05]
-1FA6A; [0D 0B 8C, 05, 05]
+1FA3F; [0D 0E F1, 05, 05]
-1FA6B; [0D 0B 93, 05, 05]
+1FA40; [0D 0E F8, 05, 05]
-1FA6C; [0D 0B 9A, 05, 05]
+1FA41; [0D 0E FF, 05, 05]
-1FA6D; [0D 0B A1, 05, 05]
+1FA42; [0D 0F 08, 05, 05]
-1F10D; [0D 0B A8, 05, 05]
+1FA43; [0D 0F 0F, 05, 05]
-1F10E; [0D 0B AF, 05, 05]
+1FA44; [0D 0F 16, 05, 05]
-1F10F; [0D 0B B6, 05, 05]
+1FA45; [0D 0F 1D, 05, 05]
-1F16D; [0D 0B BD, 05, 05]
+1FA46; [0D 0F 24, 05, 05]
-1F16E; [0D 0B C4, 05, 05]
+1FA47; [0D 0F 2B, 05, 05]
-1F16F; [0D 0B CB, 05, 05]
+1FA48; [0D 0F 32, 05, 05]
-1F260; [0D 0B D2, 05, 05]
+1FA49; [0D 0F 39, 05, 05]
-1F261; [0D 0B D9, 05, 05]
+1FA4A; [0D 0F 40, 05, 05]
-1F262; [0D 0B E0, 05, 05]
+1FA4B; [0D 0F 47, 05, 05]
-1F263; [0D 0B E7, 05, 05]
+1FA4C; [0D 0F 4E, 05, 05]
-1F264; [0D 0B EE, 05, 05]
+1FA4D; [0D 0F 55, 05, 05]
-1F265; [0D 0B F5, 05, 05]
+1FA4E; [0D 0F 5C, 05, 05]
-1F300; [0D 0B FC, 05, 05]
+1FA4F; [0D 0F 63, 05, 05]
-1F301; [0D 0C 05, 05, 05]
+1FA50; [0D 0F 6A, 05, 05]
-1F302; [0D 0C 0C, 05, 05]
+1FA51; [0D 0F 71, 05, 05]
-1F303; [0D 0C 13, 05, 05]
+1FA52; [0D 0F 78, 05, 05]
-1F304; [0D 0C 1A, 05, 05]
+1FA53; [0D 0F 7F, 05, 05]
-1F305; [0D 0C 21, 05, 05]
+1FA60; [0D 0F 86, 05, 05]
-1F306; [0D 0C 28, 05, 05]
+1FA61; [0D 0F 8D, 05, 05]
-1F307; [0D 0C 2F, 05, 05]
+1FA62; [0D 0F 94, 05, 05]
-1F308; [0D 0C 36, 05, 05]
+1FA63; [0D 0F 9B, 05, 05]
-1F309; [0D 0C 3D, 05, 05]
+1FA64; [0D 0F A2, 05, 05]
-1F30A; [0D 0C 44, 05, 05]
+1FA65; [0D 0F A9, 05, 05]
-1F30B; [0D 0C 4B, 05, 05]
+1FA66; [0D 0F B0, 05, 05]
-1F30C; [0D 0C 52, 05, 05]
+1FA67; [0D 0F B7, 05, 05]
-1F30D; [0D 0C 59, 05, 05]
+1FA68; [0D 0F BE, 05, 05]
-1F30E; [0D 0C 60, 05, 05]
+1FA69; [0D 0F C5, 05, 05]
-1F30F; [0D 0C 67, 05, 05]
+1FA6A; [0D 0F CC, 05, 05]
-1F310; [0D 0C 6E, 05, 05]
+1FA6B; [0D 0F D3, 05, 05]
-1F311; [0D 0C 75, 05, 05]
+1FA6C; [0D 0F DA, 05, 05]
-1F312; [0D 0C 7C, 05, 05]
+1FA6D; [0D 0F E1, 05, 05]
-1F313; [0D 0C 83, 05, 05]
+1F10D; [0D 0F E8, 05, 05]
-1F314; [0D 0C 8A, 05, 05]
+1F10E; [0D 0F EF, 05, 05]
-1F315; [0D 0C 91, 05, 05]
+1F10F; [0D 0F F6, 05, 05]
-1F316; [0D 0C 98, 05, 05]
+1F16D; [0D 0F FD, 05, 05]
-1F317; [0D 0C 9F, 05, 05]
+1F16E; [0D 10 06, 05, 05]
-1F318; [0D 0C A6, 05, 05]
+1F16F; [0D 10 0D, 05, 05]
-1F319; [0D 0C AD, 05, 05]
+1F260; [0D 10 14, 05, 05]
-1F31A; [0D 0C B4, 05, 05]
+1F261; [0D 10 1B, 05, 05]
-1F31B; [0D 0C BB, 05, 05]
+1F262; [0D 10 22, 05, 05]
-1F31C; [0D 0C C2, 05, 05]
+1F263; [0D 10 29, 05, 05]
-1F31D; [0D 0C C9, 05, 05]
+1F264; [0D 10 30, 05, 05]
-1F31E; [0D 0C D0, 05, 05]
+1F265; [0D 10 37, 05, 05]
-1F31F; [0D 0C D7, 05, 05]
+1F300; [0D 10 3E, 05, 05]
-1F320; [0D 0C DE, 05, 05]
+1F301; [0D 10 45, 05, 05]
-1F321; [0D 0C E5, 05, 05]
+1F302; [0D 10 4C, 05, 05]
-1F322; [0D 0C EC, 05, 05]
+1F303; [0D 10 53, 05, 05]
-1F323; [0D 0C F3, 05, 05]
+1F304; [0D 10 5A, 05, 05]
-1F324; [0D 0C FA, 05, 05]
+1F305; [0D 10 61, 05, 05]
-1F325; [0D 0D 03, 05, 05]
+1F306; [0D 10 68, 05, 05]
-1F326; [0D 0D 0A, 05, 05]
+1F307; [0D 10 6F, 05, 05]
-1F327; [0D 0D 11, 05, 05]
+1F308; [0D 10 76, 05, 05]
-1F328; [0D 0D 18, 05, 05]
+1F309; [0D 10 7D, 05, 05]
-1F329; [0D 0D 1F, 05, 05]
+1F30A; [0D 10 84, 05, 05]
-1F32A; [0D 0D 26, 05, 05]
+1F30B; [0D 10 8B, 05, 05]
-1F32B; [0D 0D 2D, 05, 05]
+1F30C; [0D 10 92, 05, 05]
-1F32C; [0D 0D 34, 05, 05]
+1F30D; [0D 10 99, 05, 05]
-1F32D; [0D 0D 3B, 05, 05]
+1F30E; [0D 10 A0, 05, 05]
-1F32E; [0D 0D 42, 05, 05]
+1F30F; [0D 10 A7, 05, 05]
-1F32F; [0D 0D 49, 05, 05]
+1F310; [0D 10 AE, 05, 05]
-1F330; [0D 0D 50, 05, 05]
+1F311; [0D 10 B5, 05, 05]
-1F331; [0D 0D 57, 05, 05]
+1F312; [0D 10 BC, 05, 05]
-1F332; [0D 0D 5E, 05, 05]
+1F313; [0D 10 C3, 05, 05]
-1F333; [0D 0D 65, 05, 05]
+1F314; [0D 10 CA, 05, 05]
-1F334; [0D 0D 6C, 05, 05]
+1F315; [0D 10 D1, 05, 05]
-1F335; [0D 0D 73, 05, 05]
+1F316; [0D 10 D8, 05, 05]
-1F336; [0D 0D 7A, 05, 05]
+1F317; [0D 10 DF, 05, 05]
-1F337; [0D 0D 81, 05, 05]
+1F318; [0D 10 E6, 05, 05]
-1F338; [0D 0D 88, 05, 05]
+1F319; [0D 10 ED, 05, 05]
-1F339; [0D 0D 8F, 05, 05]
+1F31A; [0D 10 F4, 05, 05]
-1F33A; [0D 0D 96, 05, 05]
+1F31B; [0D 10 FB, 05, 05]
-1F33B; [0D 0D 9D, 05, 05]
+1F31C; [0D 11 04, 05, 05]
-1F33C; [0D 0D A4, 05, 05]
+1F31D; [0D 11 0B, 05, 05]
-1F33D; [0D 0D AB, 05, 05]
+1F31E; [0D 11 12, 05, 05]
-1F33E; [0D 0D B2, 05, 05]
+1F31F; [0D 11 19, 05, 05]
-1F33F; [0D 0D B9, 05, 05]
+1F320; [0D 11 20, 05, 05]
-1F340; [0D 0D C0, 05, 05]
+1F321; [0D 11 27, 05, 05]
-1F341; [0D 0D C7, 05, 05]
+1F322; [0D 11 2E, 05, 05]
-1F342; [0D 0D CE, 05, 05]
+1F323; [0D 11 35, 05, 05]
-1F343; [0D 0D D5, 05, 05]
+1F324; [0D 11 3C, 05, 05]
-1F344; [0D 0D DC, 05, 05]
+1F325; [0D 11 43, 05, 05]
-1F345; [0D 0D E3, 05, 05]
+1F326; [0D 11 4A, 05, 05]
-1F346; [0D 0D EA, 05, 05]
+1F327; [0D 11 51, 05, 05]
-1F347; [0D 0D F1, 05, 05]
+1F328; [0D 11 58, 05, 05]
-1F348; [0D 0D F8, 05, 05]
+1F329; [0D 11 5F, 05, 05]
-1F349; [0D 0D FF, 05, 05]
+1F32A; [0D 11 66, 05, 05]
-1F34A; [0D 0E 08, 05, 05]
+1F32B; [0D 11 6D, 05, 05]
-1F34B; [0D 0E 0F, 05, 05]
+1F32C; [0D 11 74, 05, 05]
-1F34C; [0D 0E 16, 05, 05]
+1F32D; [0D 11 7B, 05, 05]
-1F34D; [0D 0E 1D, 05, 05]
+1F32E; [0D 11 82, 05, 05]
-1F34E; [0D 0E 24, 05, 05]
+1F32F; [0D 11 89, 05, 05]
-1F34F; [0D 0E 2B, 05, 05]
+1F330; [0D 11 90, 05, 05]
-1F350; [0D 0E 32, 05, 05]
+1F331; [0D 11 97, 05, 05]
-1F351; [0D 0E 39, 05, 05]
+1F332; [0D 11 9E, 05, 05]
-1F352; [0D 0E 40, 05, 05]
+1F333; [0D 11 A5, 05, 05]
-1F353; [0D 0E 47, 05, 05]
+1F334; [0D 11 AC, 05, 05]
-1F354; [0D 0E 4E, 05, 05]
+1F335; [0D 11 B3, 05, 05]
-1F355; [0D 0E 55, 05, 05]
+1F336; [0D 11 BA, 05, 05]
-1F356; [0D 0E 5C, 05, 05]
+1F337; [0D 11 C1, 05, 05]
-1F357; [0D 0E 63, 05, 05]
+1F338; [0D 11 C8, 05, 05]
-1F358; [0D 0E 6A, 05, 05]
+1F339; [0D 11 CF, 05, 05]
-1F359; [0D 0E 71, 05, 05]
+1F33A; [0D 11 D6, 05, 05]
-1F35A; [0D 0E 78, 05, 05]
+1F33B; [0D 11 DD, 05, 05]
-1F35B; [0D 0E 7F, 05, 05]
+1F33C; [0D 11 E4, 05, 05]
-1F35C; [0D 0E 86, 05, 05]
+1F33D; [0D 11 EB, 05, 05]
-1F35D; [0D 0E 8D, 05, 05]
+1F33E; [0D 11 F2, 05, 05]
-1F35E; [0D 0E 94, 05, 05]
+1F33F; [0D 11 F9, 05, 05]
-1F35F; [0D 0E 9B, 05, 05]
+1F340; [0D 12 02, 05, 05]
-1F360; [0D 0E A2, 05, 05]
+1F341; [0D 12 09, 05, 05]
-1F361; [0D 0E A9, 05, 05]
+1F342; [0D 12 10, 05, 05]
-1F362; [0D 0E B0, 05, 05]
+1F343; [0D 12 17, 05, 05]
-1F363; [0D 0E B7, 05, 05]
+1F344; [0D 12 1E, 05, 05]
-1F364; [0D 0E BE, 05, 05]
+1F345; [0D 12 25, 05, 05]
-1F365; [0D 0E C5, 05, 05]
+1F346; [0D 12 2C, 05, 05]
-1F366; [0D 0E CC, 05, 05]
+1F347; [0D 12 33, 05, 05]
-1F367; [0D 0E D3, 05, 05]
+1F348; [0D 12 3A, 05, 05]
-1F368; [0D 0E DA, 05, 05]
+1F349; [0D 12 41, 05, 05]
-1F369; [0D 0E E1, 05, 05]
+1F34A; [0D 12 48, 05, 05]
-1F36A; [0D 0E E8, 05, 05]
+1F34B; [0D 12 4F, 05, 05]
-1F36B; [0D 0E EF, 05, 05]
+1F34C; [0D 12 56, 05, 05]
-1F36C; [0D 0E F6, 05, 05]
+1F34D; [0D 12 5D, 05, 05]
-1F36D; [0D 0E FD, 05, 05]
+1F34E; [0D 12 64, 05, 05]
-1F36E; [0D 0F 06, 05, 05]
+1F34F; [0D 12 6B, 05, 05]
-1F36F; [0D 0F 0D, 05, 05]
+1F350; [0D 12 72, 05, 05]
-1F370; [0D 0F 14, 05, 05]
+1F351; [0D 12 79, 05, 05]
-1F371; [0D 0F 1B, 05, 05]
+1F352; [0D 12 80, 05, 05]
-1F372; [0D 0F 22, 05, 05]
+1F353; [0D 12 87, 05, 05]
-1F373; [0D 0F 29, 05, 05]
+1F354; [0D 12 8E, 05, 05]
-1F374; [0D 0F 30, 05, 05]
+1F355; [0D 12 95, 05, 05]
-1F375; [0D 0F 37, 05, 05]
+1F356; [0D 12 9C, 05, 05]
-1F376; [0D 0F 3E, 05, 05]
+1F357; [0D 12 A3, 05, 05]
-1F377; [0D 0F 45, 05, 05]
+1F358; [0D 12 AA, 05, 05]
-1F378; [0D 0F 4C, 05, 05]
+1F359; [0D 12 B1, 05, 05]
-1F379; [0D 0F 53, 05, 05]
+1F35A; [0D 12 B8, 05, 05]
-1F37A; [0D 0F 5A, 05, 05]
+1F35B; [0D 12 BF, 05, 05]
-1F37B; [0D 0F 61, 05, 05]
+1F35C; [0D 12 C6, 05, 05]
-1F37C; [0D 0F 68, 05, 05]
+1F35D; [0D 12 CD, 05, 05]
-1F37D; [0D 0F 6F, 05, 05]
+1F35E; [0D 12 D4, 05, 05]
-1F37E; [0D 0F 76, 05, 05]
+1F35F; [0D 12 DB, 05, 05]
-1F37F; [0D 0F 7D, 05, 05]
+1F360; [0D 12 E2, 05, 05]
-1F380; [0D 0F 84, 05, 05]
+1F361; [0D 12 E9, 05, 05]
-1F381; [0D 0F 8B, 05, 05]
+1F362; [0D 12 F0, 05, 05]
-1F382; [0D 0F 92, 05, 05]
+1F363; [0D 12 F7, 05, 05]
-1F383; [0D 0F 99, 05, 05]
+1F364; [0D 12 FE, 05, 05]
-1F384; [0D 0F A0, 05, 05]
+1F365; [0D 13 07, 05, 05]
-1F385; [0D 0F A7, 05, 05]
+1F366; [0D 13 0E, 05, 05]
-1F386; [0D 0F AE, 05, 05]
+1F367; [0D 13 15, 05, 05]
-1F387; [0D 0F B5, 05, 05]
+1F368; [0D 13 1C, 05, 05]
-1F388; [0D 0F BC, 05, 05]
+1F369; [0D 13 23, 05, 05]
-1F389; [0D 0F C3, 05, 05]
+1F36A; [0D 13 2A, 05, 05]
-1F38A; [0D 0F CA, 05, 05]
+1F36B; [0D 13 31, 05, 05]
-1F38B; [0D 0F D1, 05, 05]
+1F36C; [0D 13 38, 05, 05]
-1F38C; [0D 0F D8, 05, 05]
+1F36D; [0D 13 3F, 05, 05]
-1F38D; [0D 0F DF, 05, 05]
+1F36E; [0D 13 46, 05, 05]
-1F38E; [0D 0F E6, 05, 05]
+1F36F; [0D 13 4D, 05, 05]
-1F38F; [0D 0F ED, 05, 05]
+1F370; [0D 13 54, 05, 05]
-1F390; [0D 0F F4, 05, 05]
+1F371; [0D 13 5B, 05, 05]
-1F391; [0D 0F FB, 05, 05]
+1F372; [0D 13 62, 05, 05]
-1F392; [0D 10 04, 05, 05]
+1F373; [0D 13 69, 05, 05]
-1F393; [0D 10 0B, 05, 05]
+1F374; [0D 13 70, 05, 05]
-1F394; [0D 10 12, 05, 05]
+1F375; [0D 13 77, 05, 05]
-1F395; [0D 10 19, 05, 05]
+1F376; [0D 13 7E, 05, 05]
-1F396; [0D 10 20, 05, 05]
+1F377; [0D 13 85, 05, 05]
-1F397; [0D 10 27, 05, 05]
+1F378; [0D 13 8C, 05, 05]
-1F398; [0D 10 2E, 05, 05]
+1F379; [0D 13 93, 05, 05]
-1F399; [0D 10 35, 05, 05]
+1F37A; [0D 13 9A, 05, 05]
-1F39A; [0D 10 3C, 05, 05]
+1F37B; [0D 13 A1, 05, 05]
-1F39B; [0D 10 43, 05, 05]
+1F37C; [0D 13 A8, 05, 05]
-1F39C; [0D 10 4A, 05, 05]
+1F37D; [0D 13 AF, 05, 05]
-1F39D; [0D 10 51, 05, 05]
+1F37E; [0D 13 B6, 05, 05]
-1F39E; [0D 10 58, 05, 05]
+1F37F; [0D 13 BD, 05, 05]
-1F39F; [0D 10 5F, 05, 05]
+1F380; [0D 13 C4, 05, 05]
-1F3A0; [0D 10 66, 05, 05]
+1F381; [0D 13 CB, 05, 05]
-1F3A1; [0D 10 6D, 05, 05]
+1F382; [0D 13 D2, 05, 05]
-1F3A2; [0D 10 74, 05, 05]
+1F383; [0D 13 D9, 05, 05]
-1F3A3; [0D 10 7B, 05, 05]
+1F384; [0D 13 E0, 05, 05]
-1F3A4; [0D 10 82, 05, 05]
+1F385; [0D 13 E7, 05, 05]
-1F3A5; [0D 10 89, 05, 05]
+1F386; [0D 13 EE, 05, 05]
-1F3A6; [0D 10 90, 05, 05]
+1F387; [0D 13 F5, 05, 05]
-1F3A7; [0D 10 97, 05, 05]
+1F388; [0D 13 FC, 05, 05]
-1F3A8; [0D 10 9E, 05, 05]
+1F389; [0D 14 05, 05, 05]
-1F3A9; [0D 10 A5, 05, 05]
+1F38A; [0D 14 0C, 05, 05]
-1F3AA; [0D 10 AC, 05, 05]
+1F38B; [0D 14 13, 05, 05]
-1F3AB; [0D 10 B3, 05, 05]
+1F38C; [0D 14 1A, 05, 05]
-1F3AC; [0D 10 BA, 05, 05]
+1F38D; [0D 14 21, 05, 05]
-1F3AD; [0D 10 C1, 05, 05]
+1F38E; [0D 14 28, 05, 05]
-1F3AE; [0D 10 C8, 05, 05]
+1F38F; [0D 14 2F, 05, 05]
-1F3AF; [0D 10 CF, 05, 05]
+1F390; [0D 14 36, 05, 05]
-1F3B0; [0D 10 D6, 05, 05]
+1F391; [0D 14 3D, 05, 05]
-1F3B1; [0D 10 DD, 05, 05]
+1F392; [0D 14 44, 05, 05]
-1F3B2; [0D 10 E4, 05, 05]
+1F393; [0D 14 4B, 05, 05]
-1F3B3; [0D 10 EB, 05, 05]
+1F394; [0D 14 52, 05, 05]
-1F3B4; [0D 10 F2, 05, 05]
+1F395; [0D 14 59, 05, 05]
-1F3B5; [0D 10 F9, 05, 05]
+1F396; [0D 14 60, 05, 05]
-1F3B6; [0D 11 02, 05, 05]
+1F397; [0D 14 67, 05, 05]
-1F3B7; [0D 11 09, 05, 05]
+1F398; [0D 14 6E, 05, 05]
-1F3B8; [0D 11 10, 05, 05]
+1F399; [0D 14 75, 05, 05]
-1F3B9; [0D 11 17, 05, 05]
+1F39A; [0D 14 7C, 05, 05]
-1F3BA; [0D 11 1E, 05, 05]
+1F39B; [0D 14 83, 05, 05]
-1F3BB; [0D 11 25, 05, 05]
+1F39C; [0D 14 8A, 05, 05]
-1F3BC; [0D 11 2C, 05, 05]
+1F39D; [0D 14 91, 05, 05]
-1F3BD; [0D 11 33, 05, 05]
+1F39E; [0D 14 98, 05, 05]
-1F3BE; [0D 11 3A, 05, 05]
+1F39F; [0D 14 9F, 05, 05]
-1F3BF; [0D 11 41, 05, 05]
+1F3A0; [0D 14 A6, 05, 05]
-1F3C0; [0D 11 48, 05, 05]
+1F3A1; [0D 14 AD, 05, 05]
-1F3C1; [0D 11 4F, 05, 05]
+1F3A2; [0D 14 B4, 05, 05]
-1F3C2; [0D 11 56, 05, 05]
+1F3A3; [0D 14 BB, 05, 05]
-1F3C3; [0D 11 5D, 05, 05]
+1F3A4; [0D 14 C2, 05, 05]
-1F3C4; [0D 11 64, 05, 05]
+1F3A5; [0D 14 C9, 05, 05]
-1F3C5; [0D 11 6B, 05, 05]
+1F3A6; [0D 14 D0, 05, 05]
-1F3C6; [0D 11 72, 05, 05]
+1F3A7; [0D 14 D7, 05, 05]
-1F3C7; [0D 11 79, 05, 05]
+1F3A8; [0D 14 DE, 05, 05]
-1F3C8; [0D 11 80, 05, 05]
+1F3A9; [0D 14 E5, 05, 05]
-1F3C9; [0D 11 87, 05, 05]
+1F3AA; [0D 14 EC, 05, 05]
-1F3CA; [0D 11 8E, 05, 05]
+1F3AB; [0D 14 F3, 05, 05]
-1F3CB; [0D 11 95, 05, 05]
+1F3AC; [0D 14 FA, 05, 05]
-1F3CC; [0D 11 9C, 05, 05]
+1F3AD; [0D 15 03, 05, 05]
-1F3CD; [0D 11 A3, 05, 05]
+1F3AE; [0D 15 0A, 05, 05]
-1F3CE; [0D 11 AA, 05, 05]
+1F3AF; [0D 15 11, 05, 05]
-1F3CF; [0D 11 B1, 05, 05]
+1F3B0; [0D 15 18, 05, 05]
-1F3D0; [0D 11 B8, 05, 05]
+1F3B1; [0D 15 1F, 05, 05]
-1F3D1; [0D 11 BF, 05, 05]
+1F3B2; [0D 15 26, 05, 05]
-1F3D2; [0D 11 C6, 05, 05]
+1F3B3; [0D 15 2D, 05, 05]
-1F3D3; [0D 11 CD, 05, 05]
+1F3B4; [0D 15 34, 05, 05]
-1F3D4; [0D 11 D4, 05, 05]
+1F3B5; [0D 15 3B, 05, 05]
-1F3D5; [0D 11 DB, 05, 05]
+1F3B6; [0D 15 42, 05, 05]
-1F3D6; [0D 11 E2, 05, 05]
+1F3B7; [0D 15 49, 05, 05]
-1F3D7; [0D 11 E9, 05, 05]
+1F3B8; [0D 15 50, 05, 05]
-1F3D8; [0D 11 F0, 05, 05]
+1F3B9; [0D 15 57, 05, 05]
-1F3D9; [0D 11 F7, 05, 05]
+1F3BA; [0D 15 5E, 05, 05]
-1F3DA; [0D 11 FE, 05, 05]
+1F3BB; [0D 15 65, 05, 05]
-1F3DB; [0D 12 07, 05, 05]
+1F3BC; [0D 15 6C, 05, 05]
-1F3DC; [0D 12 0E, 05, 05]
+1F3BD; [0D 15 73, 05, 05]
-1F3DD; [0D 12 15, 05, 05]
+1F3BE; [0D 15 7A, 05, 05]
-1F3DE; [0D 12 1C, 05, 05]
+1F3BF; [0D 15 81, 05, 05]
-1F3DF; [0D 12 23, 05, 05]
+1F3C0; [0D 15 88, 05, 05]
-1F3E0; [0D 12 2A, 05, 05]
+1F3C1; [0D 15 8F, 05, 05]
-1F3E1; [0D 12 31, 05, 05]
+1F3C2; [0D 15 96, 05, 05]
-1F3E2; [0D 12 38, 05, 05]
+1F3C3; [0D 15 9D, 05, 05]
-1F3E3; [0D 12 3F, 05, 05]
+1F3C4; [0D 15 A4, 05, 05]
-1F3E4; [0D 12 46, 05, 05]
+1F3C5; [0D 15 AB, 05, 05]
-1F3E5; [0D 12 4D, 05, 05]
+1F3C6; [0D 15 B2, 05, 05]
-1F3E6; [0D 12 54, 05, 05]
+1F3C7; [0D 15 B9, 05, 05]
-1F3E7; [0D 12 5B, 05, 05]
+1F3C8; [0D 15 C0, 05, 05]
-1F3E8; [0D 12 62, 05, 05]
+1F3C9; [0D 15 C7, 05, 05]
-1F3E9; [0D 12 69, 05, 05]
+1F3CA; [0D 15 CE, 05, 05]
-1F3EA; [0D 12 70, 05, 05]
+1F3CB; [0D 15 D5, 05, 05]
-1F3EB; [0D 12 77, 05, 05]
+1F3CC; [0D 15 DC, 05, 05]
-1F3EC; [0D 12 7E, 05, 05]
+1F3CD; [0D 15 E3, 05, 05]
-1F3ED; [0D 12 85, 05, 05]
+1F3CE; [0D 15 EA, 05, 05]
-1F3EE; [0D 12 8C, 05, 05]
+1F3CF; [0D 15 F1, 05, 05]
-1F3EF; [0D 12 93, 05, 05]
+1F3D0; [0D 15 F8, 05, 05]
-1F3F0; [0D 12 9A, 05, 05]
+1F3D1; [0D 15 FF, 05, 05]
-1F3F1; [0D 12 A1, 05, 05]
+1F3D2; [0D 16 08, 05, 05]
-1F3F2; [0D 12 A8, 05, 05]
+1F3D3; [0D 16 0F, 05, 05]
-1F3F3; [0D 12 AF, 05, 05]
+1F3D4; [0D 16 16, 05, 05]
-1F3F4; [0D 12 B6, 05, 05]
+1F3D5; [0D 16 1D, 05, 05]
-1F3F5; [0D 12 BD, 05, 05]
+1F3D6; [0D 16 24, 05, 05]
-1F3F6; [0D 12 C4, 05, 05]
+1F3D7; [0D 16 2B, 05, 05]
-1F3F7; [0D 12 CB, 05, 05]
+1F3D8; [0D 16 32, 05, 05]
-1F3F8; [0D 12 D2, 05, 05]
+1F3D9; [0D 16 39, 05, 05]
-1F3F9; [0D 12 D9, 05, 05]
+1F3DA; [0D 16 40, 05, 05]
-1F3FA; [0D 12 E0, 05, 05]
+1F3DB; [0D 16 47, 05, 05]
-1F3FB; [0D 12 E7, 05, 05]
+1F3DC; [0D 16 4E, 05, 05]
-1F3FC; [0D 12 EE, 05, 05]
+1F3DD; [0D 16 55, 05, 05]
-1F3FD; [0D 12 F5, 05, 05]
+1F3DE; [0D 16 5C, 05, 05]
-1F3FE; [0D 12 FC, 05, 05]
+1F3DF; [0D 16 63, 05, 05]
-1F3FF; [0D 13 05, 05, 05]
+1F3E0; [0D 16 6A, 05, 05]
-1F400; [0D 13 0C, 05, 05]
+1F3E1; [0D 16 71, 05, 05]
-1F401; [0D 13 13, 05, 05]
+1F3E2; [0D 16 78, 05, 05]
-1F402; [0D 13 1A, 05, 05]
+1F3E3; [0D 16 7F, 05, 05]
-1F403; [0D 13 21, 05, 05]
+1F3E4; [0D 16 86, 05, 05]
-1F404; [0D 13 28, 05, 05]
+1F3E5; [0D 16 8D, 05, 05]
-1F405; [0D 13 2F, 05, 05]
+1F3E6; [0D 16 94, 05, 05]
-1F406; [0D 13 36, 05, 05]
+1F3E7; [0D 16 9B, 05, 05]
-1F407; [0D 13 3D, 05, 05]
+1F3E8; [0D 16 A2, 05, 05]
-1F408; [0D 13 44, 05, 05]
+1F3E9; [0D 16 A9, 05, 05]
-1F409; [0D 13 4B, 05, 05]
+1F3EA; [0D 16 B0, 05, 05]
-1F40A; [0D 13 52, 05, 05]
+1F3EB; [0D 16 B7, 05, 05]
-1F40B; [0D 13 59, 05, 05]
+1F3EC; [0D 16 BE, 05, 05]
-1F40C; [0D 13 60, 05, 05]
+1F3ED; [0D 16 C5, 05, 05]
-1F40D; [0D 13 67, 05, 05]
+1F3EE; [0D 16 CC, 05, 05]
-1F40E; [0D 13 6E, 05, 05]
+1F3EF; [0D 16 D3, 05, 05]
-1F40F; [0D 13 75, 05, 05]
+1F3F0; [0D 16 DA, 05, 05]
-1F410; [0D 13 7C, 05, 05]
+1F3F1; [0D 16 E1, 05, 05]
-1F411; [0D 13 83, 05, 05]
+1F3F2; [0D 16 E8, 05, 05]
-1F412; [0D 13 8A, 05, 05]
+1F3F3; [0D 16 EF, 05, 05]
-1F413; [0D 13 91, 05, 05]
+1F3F4; [0D 16 F6, 05, 05]
-1F414; [0D 13 98, 05, 05]
+1F3F5; [0D 16 FD, 05, 05]
-1F415; [0D 13 9F, 05, 05]
+1F3F6; [0D 17 06, 05, 05]
-1F416; [0D 13 A6, 05, 05]
+1F3F7; [0D 17 0D, 05, 05]
-1F417; [0D 13 AD, 05, 05]
+1F3F8; [0D 17 14, 05, 05]
-1F418; [0D 13 B4, 05, 05]
+1F3F9; [0D 17 1B, 05, 05]
-1F419; [0D 13 BB, 05, 05]
+1F3FA; [0D 17 22, 05, 05]
-1F41A; [0D 13 C2, 05, 05]
+1F3FB; [0D 17 29, 05, 05]
-1F41B; [0D 13 C9, 05, 05]
+1F3FC; [0D 17 30, 05, 05]
-1F41C; [0D 13 D0, 05, 05]
+1F3FD; [0D 17 37, 05, 05]
-1F41D; [0D 13 D7, 05, 05]
+1F3FE; [0D 17 3E, 05, 05]
-1F41E; [0D 13 DE, 05, 05]
+1F3FF; [0D 17 45, 05, 05]
-1F41F; [0D 13 E5, 05, 05]
+1F400; [0D 17 4C, 05, 05]
-1F420; [0D 13 EC, 05, 05]
+1F401; [0D 17 53, 05, 05]
-1F421; [0D 13 F3, 05, 05]
+1F402; [0D 17 5A, 05, 05]
-1F422; [0D 13 FA, 05, 05]
+1F403; [0D 17 61, 05, 05]
-1F423; [0D 14 03, 05, 05]
+1F404; [0D 17 68, 05, 05]
-1F424; [0D 14 0A, 05, 05]
+1F405; [0D 17 6F, 05, 05]
-1F425; [0D 14 11, 05, 05]
+1F406; [0D 17 76, 05, 05]
-1F426; [0D 14 18, 05, 05]
+1F407; [0D 17 7D, 05, 05]
-1F427; [0D 14 1F, 05, 05]
+1F408; [0D 17 84, 05, 05]
-1F428; [0D 14 26, 05, 05]
+1F409; [0D 17 8B, 05, 05]
-1F429; [0D 14 2D, 05, 05]
+1F40A; [0D 17 92, 05, 05]
-1F42A; [0D 14 34, 05, 05]
+1F40B; [0D 17 99, 05, 05]
-1F42B; [0D 14 3B, 05, 05]
+1F40C; [0D 17 A0, 05, 05]
-1F42C; [0D 14 42, 05, 05]
+1F40D; [0D 17 A7, 05, 05]
-1F42D; [0D 14 49, 05, 05]
+1F40E; [0D 17 AE, 05, 05]
-1F42E; [0D 14 50, 05, 05]
+1F40F; [0D 17 B5, 05, 05]
-1F42F; [0D 14 57, 05, 05]
+1F410; [0D 17 BC, 05, 05]
-1F430; [0D 14 5E, 05, 05]
+1F411; [0D 17 C3, 05, 05]
-1F431; [0D 14 65, 05, 05]
+1F412; [0D 17 CA, 05, 05]
-1F432; [0D 14 6C, 05, 05]
+1F413; [0D 17 D1, 05, 05]
-1F433; [0D 14 73, 05, 05]
+1F414; [0D 17 D8, 05, 05]
-1F434; [0D 14 7A, 05, 05]
+1F415; [0D 17 DF, 05, 05]
-1F435; [0D 14 81, 05, 05]
+1F416; [0D 17 E6, 05, 05]
-1F436; [0D 14 88, 05, 05]
+1F417; [0D 17 ED, 05, 05]
-1F437; [0D 14 8F, 05, 05]
+1F418; [0D 17 F4, 05, 05]
-1F438; [0D 14 96, 05, 05]
+1F419; [0D 17 FB, 05, 05]
-1F439; [0D 14 9D, 05, 05]
+1F41A; [0D 18 04, 05, 05]
-1F43A; [0D 14 A4, 05, 05]
+1F41B; [0D 18 0B, 05, 05]
-1F43B; [0D 14 AB, 05, 05]
+1F41C; [0D 18 12, 05, 05]
-1F43C; [0D 14 B2, 05, 05]
+1F41D; [0D 18 19, 05, 05]
-1F43D; [0D 14 B9, 05, 05]
+1F41E; [0D 18 20, 05, 05]
-1F43E; [0D 14 C0, 05, 05]
+1F41F; [0D 18 27, 05, 05]
-1F43F; [0D 14 C7, 05, 05]
+1F420; [0D 18 2E, 05, 05]
-1F440; [0D 14 CE, 05, 05]
+1F421; [0D 18 35, 05, 05]
-1F441; [0D 14 D5, 05, 05]
+1F422; [0D 18 3C, 05, 05]
-1F442; [0D 14 DC, 05, 05]
+1F423; [0D 18 43, 05, 05]
-1F443; [0D 14 E3, 05, 05]
+1F424; [0D 18 4A, 05, 05]
-1F444; [0D 14 EA, 05, 05]
+1F425; [0D 18 51, 05, 05]
-1F445; [0D 14 F1, 05, 05]
+1F426; [0D 18 58, 05, 05]
-1F446; [0D 14 F8, 05, 05]
+1F427; [0D 18 5F, 05, 05]
-1F447; [0D 14 FF, 05, 05]
+1F428; [0D 18 66, 05, 05]
-1F448; [0D 15 08, 05, 05]
+1F429; [0D 18 6D, 05, 05]
-1F449; [0D 15 0F, 05, 05]
+1F42A; [0D 18 74, 05, 05]
-1F44A; [0D 15 16, 05, 05]
+1F42B; [0D 18 7B, 05, 05]
-1F44B; [0D 15 1D, 05, 05]
+1F42C; [0D 18 82, 05, 05]
-1F44C; [0D 15 24, 05, 05]
+1F42D; [0D 18 89, 05, 05]
-1F44D; [0D 15 2B, 05, 05]
+1F42E; [0D 18 90, 05, 05]
-1F44E; [0D 15 32, 05, 05]
+1F42F; [0D 18 97, 05, 05]
-1F44F; [0D 15 39, 05, 05]
+1F430; [0D 18 9E, 05, 05]
-1F450; [0D 15 40, 05, 05]
+1F431; [0D 18 A5, 05, 05]
-1F451; [0D 15 47, 05, 05]
+1F432; [0D 18 AC, 05, 05]
-1F452; [0D 15 4E, 05, 05]
+1F433; [0D 18 B3, 05, 05]
-1F453; [0D 15 55, 05, 05]
+1F434; [0D 18 BA, 05, 05]
-1F454; [0D 15 5C, 05, 05]
+1F435; [0D 18 C1, 05, 05]
-1F455; [0D 15 63, 05, 05]
+1F436; [0D 18 C8, 05, 05]
-1F456; [0D 15 6A, 05, 05]
+1F437; [0D 18 CF, 05, 05]
-1F457; [0D 15 71, 05, 05]
+1F438; [0D 18 D6, 05, 05]
-1F458; [0D 15 78, 05, 05]
+1F439; [0D 18 DD, 05, 05]
-1F459; [0D 15 7F, 05, 05]
+1F43A; [0D 18 E4, 05, 05]
-1F45A; [0D 15 86, 05, 05]
+1F43B; [0D 18 EB, 05, 05]
-1F45B; [0D 15 8D, 05, 05]
+1F43C; [0D 18 F2, 05, 05]
-1F45C; [0D 15 94, 05, 05]
+1F43D; [0D 18 F9, 05, 05]
-1F45D; [0D 15 9B, 05, 05]
+1F43E; [0D 19 02, 05, 05]
-1F45E; [0D 15 A2, 05, 05]
+1F43F; [0D 19 09, 05, 05]
-1F45F; [0D 15 A9, 05, 05]
+1F440; [0D 19 10, 05, 05]
-1F460; [0D 15 B0, 05, 05]
+1F441; [0D 19 17, 05, 05]
-1F461; [0D 15 B7, 05, 05]
+1F442; [0D 19 1E, 05, 05]
-1F462; [0D 15 BE, 05, 05]
+1F443; [0D 19 25, 05, 05]
-1F463; [0D 15 C5, 05, 05]
+1F444; [0D 19 2C, 05, 05]
-1F464; [0D 15 CC, 05, 05]
+1F445; [0D 19 33, 05, 05]
-1F465; [0D 15 D3, 05, 05]
+1F446; [0D 19 3A, 05, 05]
-1F466; [0D 15 DA, 05, 05]
+1F447; [0D 19 41, 05, 05]
-1F467; [0D 15 E1, 05, 05]
+1F448; [0D 19 48, 05, 05]
-1F468; [0D 15 E8, 05, 05]
+1F449; [0D 19 4F, 05, 05]
-1F469; [0D 15 EF, 05, 05]
+1F44A; [0D 19 56, 05, 05]
-1F46A; [0D 15 F6, 05, 05]
+1F44B; [0D 19 5D, 05, 05]
-1F46B; [0D 15 FD, 05, 05]
+1F44C; [0D 19 64, 05, 05]
-1F46C; [0D 16 06, 05, 05]
+1F44D; [0D 19 6B, 05, 05]
-1F46D; [0D 16 0D, 05, 05]
+1F44E; [0D 19 72, 05, 05]
-1F46E; [0D 16 14, 05, 05]
+1F44F; [0D 19 79, 05, 05]
-1F46F; [0D 16 1B, 05, 05]
+1F450; [0D 19 80, 05, 05]
-1F470; [0D 16 22, 05, 05]
+1F451; [0D 19 87, 05, 05]
-1F471; [0D 16 29, 05, 05]
+1F452; [0D 19 8E, 05, 05]
-1F472; [0D 16 30, 05, 05]
+1F453; [0D 19 95, 05, 05]
-1F473; [0D 16 37, 05, 05]
+1F454; [0D 19 9C, 05, 05]
-1F474; [0D 16 3E, 05, 05]
+1F455; [0D 19 A3, 05, 05]
-1F475; [0D 16 45, 05, 05]
+1F456; [0D 19 AA, 05, 05]
-1F476; [0D 16 4C, 05, 05]
+1F457; [0D 19 B1, 05, 05]
-1F477; [0D 16 53, 05, 05]
+1F458; [0D 19 B8, 05, 05]
-1F478; [0D 16 5A, 05, 05]
+1F459; [0D 19 BF, 05, 05]
-1F479; [0D 16 61, 05, 05]
+1F45A; [0D 19 C6, 05, 05]
-1F47A; [0D 16 68, 05, 05]
+1F45B; [0D 19 CD, 05, 05]
-1F47B; [0D 16 6F, 05, 05]
+1F45C; [0D 19 D4, 05, 05]
-1F47C; [0D 16 76, 05, 05]
+1F45D; [0D 19 DB, 05, 05]
-1F47D; [0D 16 7D, 05, 05]
+1F45E; [0D 19 E2, 05, 05]
-1F47E; [0D 16 84, 05, 05]
+1F45F; [0D 19 E9, 05, 05]
-1F47F; [0D 16 8B, 05, 05]
+1F460; [0D 19 F0, 05, 05]
-1F480; [0D 16 92, 05, 05]
+1F461; [0D 19 F7, 05, 05]
-1F481; [0D 16 99, 05, 05]
+1F462; [0D 19 FE, 05, 05]
-1F482; [0D 16 A0, 05, 05]
+1F463; [0D 1A 07, 05, 05]
-1F483; [0D 16 A7, 05, 05]
+1F464; [0D 1A 0E, 05, 05]
-1F484; [0D 16 AE, 05, 05]
+1F465; [0D 1A 15, 05, 05]
-1F485; [0D 16 B5, 05, 05]
+1F466; [0D 1A 1C, 05, 05]
-1F486; [0D 16 BC, 05, 05]
+1F467; [0D 1A 23, 05, 05]
-1F487; [0D 16 C3, 05, 05]
+1F468; [0D 1A 2A, 05, 05]
-1F488; [0D 16 CA, 05, 05]
+1F469; [0D 1A 31, 05, 05]
-1F489; [0D 16 D1, 05, 05]
+1F46A; [0D 1A 38, 05, 05]
-1F48A; [0D 16 D8, 05, 05]
+1F46B; [0D 1A 3F, 05, 05]
-1F48B; [0D 16 DF, 05, 05]
+1F46C; [0D 1A 46, 05, 05]
-1F48C; [0D 16 E6, 05, 05]
+1F46D; [0D 1A 4D, 05, 05]
-1F48D; [0D 16 ED, 05, 05]
+1F46E; [0D 1A 54, 05, 05]
-1F48E; [0D 16 F4, 05, 05]
+1F46F; [0D 1A 5B, 05, 05]
-1F48F; [0D 16 FB, 05, 05]
+1F470; [0D 1A 62, 05, 05]
-1F490; [0D 17 04, 05, 05]
+1F471; [0D 1A 69, 05, 05]
-1F491; [0D 17 0B, 05, 05]
+1F472; [0D 1A 70, 05, 05]
-1F492; [0D 17 12, 05, 05]
+1F473; [0D 1A 77, 05, 05]
-1F493; [0D 17 19, 05, 05]
+1F474; [0D 1A 7E, 05, 05]
-1F494; [0D 17 20, 05, 05]
+1F475; [0D 1A 85, 05, 05]
-1F495; [0D 17 27, 05, 05]
+1F476; [0D 1A 8C, 05, 05]
-1F496; [0D 17 2E, 05, 05]
+1F477; [0D 1A 93, 05, 05]
-1F497; [0D 17 35, 05, 05]
+1F478; [0D 1A 9A, 05, 05]
-1F498; [0D 17 3C, 05, 05]
+1F479; [0D 1A A1, 05, 05]
-1F499; [0D 17 43, 05, 05]
+1F47A; [0D 1A A8, 05, 05]
-1F49A; [0D 17 4A, 05, 05]
+1F47B; [0D 1A AF, 05, 05]
-1F49B; [0D 17 51, 05, 05]
+1F47C; [0D 1A B6, 05, 05]
-1F49C; [0D 17 58, 05, 05]
+1F47D; [0D 1A BD, 05, 05]
-1F49D; [0D 17 5F, 05, 05]
+1F47E; [0D 1A C4, 05, 05]
-1F49E; [0D 17 66, 05, 05]
+1F47F; [0D 1A CB, 05, 05]
-1F49F; [0D 17 6D, 05, 05]
+1F480; [0D 1A D2, 05, 05]
-1F4A0; [0D 17 74, 05, 05]
+1F481; [0D 1A D9, 05, 05]
-1F4A1; [0D 17 7B, 05, 05]
+1F482; [0D 1A E0, 05, 05]
-1F4A2; [0D 17 82, 05, 05]
+1F483; [0D 1A E7, 05, 05]
-1F4A3; [0D 17 89, 05, 05]
+1F484; [0D 1A EE, 05, 05]
-1F4A4; [0D 17 90, 05, 05]
+1F485; [0D 1A F5, 05, 05]
-1F4A5; [0D 17 97, 05, 05]
+1F486; [0D 1A FC, 05, 05]
-1F4A6; [0D 17 9E, 05, 05]
+1F487; [0D 1B 05, 05, 05]
-1F4A7; [0D 17 A5, 05, 05]
+1F488; [0D 1B 0C, 05, 05]
-1F4A8; [0D 17 AC, 05, 05]
+1F489; [0D 1B 13, 05, 05]
-1F4A9; [0D 17 B3, 05, 05]
+1F48A; [0D 1B 1A, 05, 05]
-1F4AA; [0D 17 BA, 05, 05]
+1F48B; [0D 1B 21, 05, 05]
-1F4AB; [0D 17 C1, 05, 05]
+1F48C; [0D 1B 28, 05, 05]
-1F4AC; [0D 17 C8, 05, 05]
+1F48D; [0D 1B 2F, 05, 05]
-1F4AD; [0D 17 CF, 05, 05]
+1F48E; [0D 1B 36, 05, 05]
-1F4AE; [0D 17 D6, 05, 05]
+1F48F; [0D 1B 3D, 05, 05]
-1F4AF; [0D 17 DD, 05, 05]
+1F490; [0D 1B 44, 05, 05]
-1F4B0; [0D 17 E4, 05, 05]
+1F491; [0D 1B 4B, 05, 05]
-1F4B1; [0D 17 EB, 05, 05]
+1F492; [0D 1B 52, 05, 05]
-1F4B2; [0D 17 F2, 05, 05]
+1F493; [0D 1B 59, 05, 05]
-1F4B3; [0D 17 F9, 05, 05]
+1F494; [0D 1B 60, 05, 05]
-1F4B4; [0D 18 02, 05, 05]
+1F495; [0D 1B 67, 05, 05]
-1F4B5; [0D 18 09, 05, 05]
+1F496; [0D 1B 6E, 05, 05]
-1F4B6; [0D 18 10, 05, 05]
+1F497; [0D 1B 75, 05, 05]
-1F4B7; [0D 18 17, 05, 05]
+1F498; [0D 1B 7C, 05, 05]
-1F4B8; [0D 18 1E, 05, 05]
+1F499; [0D 1B 83, 05, 05]
-1F4B9; [0D 18 25, 05, 05]
+1F49A; [0D 1B 8A, 05, 05]
-1F4BA; [0D 18 2C, 05, 05]
+1F49B; [0D 1B 91, 05, 05]
-1F4BB; [0D 18 33, 05, 05]
+1F49C; [0D 1B 98, 05, 05]
-1F4BC; [0D 18 3A, 05, 05]
+1F49D; [0D 1B 9F, 05, 05]
-1F4BD; [0D 18 41, 05, 05]
+1F49E; [0D 1B A6, 05, 05]
-1F4BE; [0D 18 48, 05, 05]
+1F49F; [0D 1B AD, 05, 05]
-1F4BF; [0D 18 4F, 05, 05]
+1F4A0; [0D 1B B4, 05, 05]
-1F4C0; [0D 18 56, 05, 05]
+1F4A1; [0D 1B BB, 05, 05]
-1F4C1; [0D 18 5D, 05, 05]
+1F4A2; [0D 1B C2, 05, 05]
-1F4C2; [0D 18 64, 05, 05]
+1F4A3; [0D 1B C9, 05, 05]
-1F4C3; [0D 18 6B, 05, 05]
+1F4A4; [0D 1B D0, 05, 05]
-1F4C4; [0D 18 72, 05, 05]
+1F4A5; [0D 1B D7, 05, 05]
-1F4C5; [0D 18 79, 05, 05]
+1F4A6; [0D 1B DE, 05, 05]
-1F4C6; [0D 18 80, 05, 05]
+1F4A7; [0D 1B E5, 05, 05]
-1F4C7; [0D 18 87, 05, 05]
+1F4A8; [0D 1B EC, 05, 05]
-1F4C8; [0D 18 8E, 05, 05]
+1F4A9; [0D 1B F3, 05, 05]
-1F4C9; [0D 18 95, 05, 05]
+1F4AA; [0D 1B FA, 05, 05]
-1F4CA; [0D 18 9C, 05, 05]
+1F4AB; [0D 1C 03, 05, 05]
-1F4CB; [0D 18 A3, 05, 05]
+1F4AC; [0D 1C 0A, 05, 05]
-1F4CC; [0D 18 AA, 05, 05]
+1F4AD; [0D 1C 11, 05, 05]
-1F4CD; [0D 18 B1, 05, 05]
+1F4AE; [0D 1C 18, 05, 05]
-1F4CE; [0D 18 B8, 05, 05]
+1F4AF; [0D 1C 1F, 05, 05]
-1F4CF; [0D 18 BF, 05, 05]
+1F4B0; [0D 1C 26, 05, 05]
-1F4D0; [0D 18 C6, 05, 05]
+1F4B1; [0D 1C 2D, 05, 05]
-1F4D1; [0D 18 CD, 05, 05]
+1F4B2; [0D 1C 34, 05, 05]
-1F4D2; [0D 18 D4, 05, 05]
+1F4B3; [0D 1C 3B, 05, 05]
-1F4D3; [0D 18 DB, 05, 05]
+1F4B4; [0D 1C 42, 05, 05]
-1F4D4; [0D 18 E2, 05, 05]
+1F4B5; [0D 1C 49, 05, 05]
-1F4D5; [0D 18 E9, 05, 05]
+1F4B6; [0D 1C 50, 05, 05]
-1F4D6; [0D 18 F0, 05, 05]
+1F4B7; [0D 1C 57, 05, 05]
-1F4D7; [0D 18 F7, 05, 05]
+1F4B8; [0D 1C 5E, 05, 05]
-1F4D8; [0D 18 FE, 05, 05]
+1F4B9; [0D 1C 65, 05, 05]
-1F4D9; [0D 19 07, 05, 05]
+1F4BA; [0D 1C 6C, 05, 05]
-1F4DA; [0D 19 0E, 05, 05]
+1F4BB; [0D 1C 73, 05, 05]
-1F4DB; [0D 19 15, 05, 05]
+1F4BC; [0D 1C 7A, 05, 05]
-1F4DC; [0D 19 1C, 05, 05]
+1F4BD; [0D 1C 81, 05, 05]
-1F4DD; [0D 19 23, 05, 05]
+1F4BE; [0D 1C 88, 05, 05]
-1F4DE; [0D 19 2A, 05, 05]
+1F4BF; [0D 1C 8F, 05, 05]
-1F4DF; [0D 19 31, 05, 05]
+1F4C0; [0D 1C 96, 05, 05]
-1F4E0; [0D 19 38, 05, 05]
+1F4C1; [0D 1C 9D, 05, 05]
-1F4E1; [0D 19 3F, 05, 05]
+1F4C2; [0D 1C A4, 05, 05]
-1F4E2; [0D 19 46, 05, 05]
+1F4C3; [0D 1C AB, 05, 05]
-1F4E3; [0D 19 4D, 05, 05]
+1F4C4; [0D 1C B2, 05, 05]
-1F4E4; [0D 19 54, 05, 05]
+1F4C5; [0D 1C B9, 05, 05]
-1F4E5; [0D 19 5B, 05, 05]
+1F4C6; [0D 1C C0, 05, 05]
-1F4E6; [0D 19 62, 05, 05]
+1F4C7; [0D 1C C7, 05, 05]
-1F4E7; [0D 19 69, 05, 05]
+1F4C8; [0D 1C CE, 05, 05]
-1F4E8; [0D 19 70, 05, 05]
+1F4C9; [0D 1C D5, 05, 05]
-1F4E9; [0D 19 77, 05, 05]
+1F4CA; [0D 1C DC, 05, 05]
-1F4EA; [0D 19 7E, 05, 05]
+1F4CB; [0D 1C E3, 05, 05]
-1F4EB; [0D 19 85, 05, 05]
+1F4CC; [0D 1C EA, 05, 05]
-1F4EC; [0D 19 8C, 05, 05]
+1F4CD; [0D 1C F1, 05, 05]
-1F4ED; [0D 19 93, 05, 05]
+1F4CE; [0D 1C F8, 05, 05]
-1F4EE; [0D 19 9A, 05, 05]
+1F4CF; [0D 1C FF, 05, 05]
-1F4EF; [0D 19 A1, 05, 05]
+1F4D0; [0D 1D 08, 05, 05]
-1F4F0; [0D 19 A8, 05, 05]
+1F4D1; [0D 1D 0F, 05, 05]
-1F4F1; [0D 19 AF, 05, 05]
+1F4D2; [0D 1D 16, 05, 05]
-1F4F2; [0D 19 B6, 05, 05]
+1F4D3; [0D 1D 1D, 05, 05]
-1F4F3; [0D 19 BD, 05, 05]
+1F4D4; [0D 1D 24, 05, 05]
-1F4F4; [0D 19 C4, 05, 05]
+1F4D5; [0D 1D 2B, 05, 05]
-1F4F5; [0D 19 CB, 05, 05]
+1F4D6; [0D 1D 32, 05, 05]
-1F4F6; [0D 19 D2, 05, 05]
+1F4D7; [0D 1D 39, 05, 05]
-1F4F7; [0D 19 D9, 05, 05]
+1F4D8; [0D 1D 40, 05, 05]
-1F4F8; [0D 19 E0, 05, 05]
+1F4D9; [0D 1D 47, 05, 05]
-1F4F9; [0D 19 E7, 05, 05]
+1F4DA; [0D 1D 4E, 05, 05]
-1F4FA; [0D 19 EE, 05, 05]
+1F4DB; [0D 1D 55, 05, 05]
-1F4FB; [0D 19 F5, 05, 05]
+1F4DC; [0D 1D 5C, 05, 05]
-1F4FC; [0D 19 FC, 05, 05]
+1F4DD; [0D 1D 63, 05, 05]
-1F4FD; [0D 1A 05, 05, 05]
+1F4DE; [0D 1D 6A, 05, 05]
-1F4FE; [0D 1A 0C, 05, 05]
+1F4DF; [0D 1D 71, 05, 05]
-1F4FF; [0D 1A 13, 05, 05]
+1F4E0; [0D 1D 78, 05, 05]
-1F500; [0D 1A 1A, 05, 05]
+1F4E1; [0D 1D 7F, 05, 05]
-1F501; [0D 1A 21, 05, 05]
+1F4E2; [0D 1D 86, 05, 05]
-1F502; [0D 1A 28, 05, 05]
+1F4E3; [0D 1D 8D, 05, 05]
-1F503; [0D 1A 2F, 05, 05]
+1F4E4; [0D 1D 94, 05, 05]
-1F504; [0D 1A 36, 05, 05]
+1F4E5; [0D 1D 9B, 05, 05]
-1F505; [0D 1A 3D, 05, 05]
+1F4E6; [0D 1D A2, 05, 05]
-1F506; [0D 1A 44, 05, 05]
+1F4E7; [0D 1D A9, 05, 05]
-1F507; [0D 1A 4B, 05, 05]
+1F4E8; [0D 1D B0, 05, 05]
-1F508; [0D 1A 52, 05, 05]
+1F4E9; [0D 1D B7, 05, 05]
-1F509; [0D 1A 59, 05, 05]
+1F4EA; [0D 1D BE, 05, 05]
-1F50A; [0D 1A 60, 05, 05]
+1F4EB; [0D 1D C5, 05, 05]
-1F50B; [0D 1A 67, 05, 05]
+1F4EC; [0D 1D CC, 05, 05]
-1F50C; [0D 1A 6E, 05, 05]
+1F4ED; [0D 1D D3, 05, 05]
-1F50D; [0D 1A 75, 05, 05]
+1F4EE; [0D 1D DA, 05, 05]
-1F50E; [0D 1A 7C, 05, 05]
+1F4EF; [0D 1D E1, 05, 05]
-1F50F; [0D 1A 83, 05, 05]
+1F4F0; [0D 1D E8, 05, 05]
-1F510; [0D 1A 8A, 05, 05]
+1F4F1; [0D 1D EF, 05, 05]
-1F511; [0D 1A 91, 05, 05]
+1F4F2; [0D 1D F6, 05, 05]
-1F512; [0D 1A 98, 05, 05]
+1F4F3; [0D 1D FD, 05, 05]
-1F513; [0D 1A 9F, 05, 05]
+1F4F4; [0D 1E 06, 05, 05]
-1F514; [0D 1A A6, 05, 05]
+1F4F5; [0D 1E 0D, 05, 05]
-1F515; [0D 1A AD, 05, 05]
+1F4F6; [0D 1E 14, 05, 05]
-1F516; [0D 1A B4, 05, 05]
+1F4F7; [0D 1E 1B, 05, 05]
-1F517; [0D 1A BB, 05, 05]
+1F4F8; [0D 1E 22, 05, 05]
-1F518; [0D 1A C2, 05, 05]
+1F4F9; [0D 1E 29, 05, 05]
-1F519; [0D 1A C9, 05, 05]
+1F4FA; [0D 1E 30, 05, 05]
-1F51A; [0D 1A D0, 05, 05]
+1F4FB; [0D 1E 37, 05, 05]
-1F51B; [0D 1A D7, 05, 05]
+1F4FC; [0D 1E 3E, 05, 05]
-1F51C; [0D 1A DE, 05, 05]
+1F4FD; [0D 1E 45, 05, 05]
-1F51D; [0D 1A E5, 05, 05]
+1F4FE; [0D 1E 4C, 05, 05]
-1F51E; [0D 1A EC, 05, 05]
+1F4FF; [0D 1E 53, 05, 05]
-1F51F; [0D 1A F3, 05, 05]
+1F500; [0D 1E 5A, 05, 05]
-1F520; [0D 1A FA, 05, 05]
+1F501; [0D 1E 61, 05, 05]
-1F521; [0D 1B 03, 05, 05]
+1F502; [0D 1E 68, 05, 05]
-1F522; [0D 1B 0A, 05, 05]
+1F503; [0D 1E 6F, 05, 05]
-1F523; [0D 1B 11, 05, 05]
+1F504; [0D 1E 76, 05, 05]
-1F524; [0D 1B 18, 05, 05]
+1F505; [0D 1E 7D, 05, 05]
-1F525; [0D 1B 1F, 05, 05]
+1F506; [0D 1E 84, 05, 05]
-1F526; [0D 1B 26, 05, 05]
+1F507; [0D 1E 8B, 05, 05]
-1F527; [0D 1B 2D, 05, 05]
+1F508; [0D 1E 92, 05, 05]
-1F528; [0D 1B 34, 05, 05]
+1F509; [0D 1E 99, 05, 05]
-1F529; [0D 1B 3B, 05, 05]
+1F50A; [0D 1E A0, 05, 05]
-1F52A; [0D 1B 42, 05, 05]
+1F50B; [0D 1E A7, 05, 05]
-1F52B; [0D 1B 49, 05, 05]
+1F50C; [0D 1E AE, 05, 05]
-1F52C; [0D 1B 50, 05, 05]
+1F50D; [0D 1E B5, 05, 05]
-1F52D; [0D 1B 57, 05, 05]
+1F50E; [0D 1E BC, 05, 05]
-1F52E; [0D 1B 5E, 05, 05]
+1F50F; [0D 1E C3, 05, 05]
-1F52F; [0D 1B 65, 05, 05]
+1F510; [0D 1E CA, 05, 05]
-1F530; [0D 1B 6C, 05, 05]
+1F511; [0D 1E D1, 05, 05]
-1F531; [0D 1B 73, 05, 05]
+1F512; [0D 1E D8, 05, 05]
-1F532; [0D 1B 7A, 05, 05]
+1F513; [0D 1E DF, 05, 05]
-1F533; [0D 1B 81, 05, 05]
+1F514; [0D 1E E6, 05, 05]
-1F534; [0D 1B 88, 05, 05]
+1F515; [0D 1E ED, 05, 05]
-1F535; [0D 1B 8F, 05, 05]
+1F516; [0D 1E F4, 05, 05]
-1F536; [0D 1B 96, 05, 05]
+1F517; [0D 1E FB, 05, 05]
-1F537; [0D 1B 9D, 05, 05]
+1F518; [0D 1F 04, 05, 05]
-1F538; [0D 1B A4, 05, 05]
+1F519; [0D 1F 0B, 05, 05]
-1F539; [0D 1B AB, 05, 05]
+1F51A; [0D 1F 12, 05, 05]
-1F53A; [0D 1B B2, 05, 05]
+1F51B; [0D 1F 19, 05, 05]
-1F53B; [0D 1B B9, 05, 05]
+1F51C; [0D 1F 20, 05, 05]
-1F53C; [0D 1B C0, 05, 05]
+1F51D; [0D 1F 27, 05, 05]
-1F53D; [0D 1B C7, 05, 05]
+1F51E; [0D 1F 2E, 05, 05]
-1F53E; [0D 1B CE, 05, 05]
+1F51F; [0D 1F 35, 05, 05]
-1F53F; [0D 1B D5, 05, 05]
+1F520; [0D 1F 3C, 05, 05]
-1F540; [0D 1B DC, 05, 05]
+1F521; [0D 1F 43, 05, 05]
-1F541; [0D 1B E3, 05, 05]
+1F522; [0D 1F 4A, 05, 05]
-1F542; [0D 1B EA, 05, 05]
+1F523; [0D 1F 51, 05, 05]
-1F543; [0D 1B F1, 05, 05]
+1F524; [0D 1F 58, 05, 05]
-1F544; [0D 1B F8, 05, 05]
+1F525; [0D 1F 5F, 05, 05]
-1F545; [0D 1B FF, 05, 05]
+1F526; [0D 1F 66, 05, 05]
-1F546; [0D 1C 08, 05, 05]
+1F527; [0D 1F 6D, 05, 05]
-1F547; [0D 1C 0F, 05, 05]
+1F528; [0D 1F 74, 05, 05]
-1F548; [0D 1C 16, 05, 05]
+1F529; [0D 1F 7B, 05, 05]
-1F549; [0D 1C 1D, 05, 05]
+1F52A; [0D 1F 82, 05, 05]
-1F54A; [0D 1C 24, 05, 05]
+1F52B; [0D 1F 89, 05, 05]
-1F54B; [0D 1C 2B, 05, 05]
+1F52C; [0D 1F 90, 05, 05]
-1F54C; [0D 1C 32, 05, 05]
+1F52D; [0D 1F 97, 05, 05]
-1F54D; [0D 1C 39, 05, 05]
+1F52E; [0D 1F 9E, 05, 05]
-1F54E; [0D 1C 40, 05, 05]
+1F52F; [0D 1F A5, 05, 05]
-1F54F; [0D 1C 47, 05, 05]
+1F530; [0D 1F AC, 05, 05]
-1F550; [0D 1C 4E, 05, 05]
+1F531; [0D 1F B3, 05, 05]
-1F551; [0D 1C 55, 05, 05]
+1F532; [0D 1F BA, 05, 05]
-1F552; [0D 1C 5C, 05, 05]
+1F533; [0D 1F C1, 05, 05]
-1F553; [0D 1C 63, 05, 05]
+1F534; [0D 1F C8, 05, 05]
-1F554; [0D 1C 6A, 05, 05]
+1F535; [0D 1F CF, 05, 05]
-1F555; [0D 1C 71, 05, 05]
+1F536; [0D 1F D6, 05, 05]
-1F556; [0D 1C 78, 05, 05]
+1F537; [0D 1F DD, 05, 05]
-1F557; [0D 1C 7F, 05, 05]
+1F538; [0D 1F E4, 05, 05]
-1F558; [0D 1C 86, 05, 05]
+1F539; [0D 1F EB, 05, 05]
-1F559; [0D 1C 8D, 05, 05]
+1F53A; [0D 1F F2, 05, 05]
-1F55A; [0D 1C 94, 05, 05]
+1F53B; [0D 1F F9, 05, 05]
-1F55B; [0D 1C 9B, 05, 05]
+1F53C; [0D 20 02, 05, 05]
-1F55C; [0D 1C A2, 05, 05]
+1F53D; [0D 20 09, 05, 05]
-1F55D; [0D 1C A9, 05, 05]
+1F53E; [0D 20 10, 05, 05]
-1F55E; [0D 1C B0, 05, 05]
+1F53F; [0D 20 17, 05, 05]
-1F55F; [0D 1C B7, 05, 05]
+1F540; [0D 20 1E, 05, 05]
-1F560; [0D 1C BE, 05, 05]
+1F541; [0D 20 25, 05, 05]
-1F561; [0D 1C C5, 05, 05]
+1F542; [0D 20 2C, 05, 05]
-1F562; [0D 1C CC, 05, 05]
+1F543; [0D 20 33, 05, 05]
-1F563; [0D 1C D3, 05, 05]
+1F544; [0D 20 3A, 05, 05]
-1F564; [0D 1C DA, 05, 05]
+1F545; [0D 20 41, 05, 05]
-1F565; [0D 1C E1, 05, 05]
+1F546; [0D 20 48, 05, 05]
-1F566; [0D 1C E8, 05, 05]
+1F547; [0D 20 4F, 05, 05]
-1F567; [0D 1C EF, 05, 05]
+1F548; [0D 20 56, 05, 05]
-1F568; [0D 1C F6, 05, 05]
+1F549; [0D 20 5D, 05, 05]
-1F569; [0D 1C FD, 05, 05]
+1F54A; [0D 20 64, 05, 05]
-1F56A; [0D 1D 06, 05, 05]
+1F54B; [0D 20 6B, 05, 05]
-1F56B; [0D 1D 0D, 05, 05]
+1F54C; [0D 20 72, 05, 05]
-1F56C; [0D 1D 14, 05, 05]
+1F54D; [0D 20 79, 05, 05]
-1F56D; [0D 1D 1B, 05, 05]
+1F54E; [0D 20 80, 05, 05]
-1F56E; [0D 1D 22, 05, 05]
+1F54F; [0D 20 87, 05, 05]
-1F56F; [0D 1D 29, 05, 05]
+1F550; [0D 20 8E, 05, 05]
-1F570; [0D 1D 30, 05, 05]
+1F551; [0D 20 95, 05, 05]
-1F571; [0D 1D 37, 05, 05]
+1F552; [0D 20 9C, 05, 05]
-1F572; [0D 1D 3E, 05, 05]
+1F553; [0D 20 A3, 05, 05]
-1F573; [0D 1D 45, 05, 05]
+1F554; [0D 20 AA, 05, 05]
-1F574; [0D 1D 4C, 05, 05]
+1F555; [0D 20 B1, 05, 05]
-1F575; [0D 1D 53, 05, 05]
+1F556; [0D 20 B8, 05, 05]
-1F576; [0D 1D 5A, 05, 05]
+1F557; [0D 20 BF, 05, 05]
-1F577; [0D 1D 61, 05, 05]
+1F558; [0D 20 C6, 05, 05]
-1F578; [0D 1D 68, 05, 05]
+1F559; [0D 20 CD, 05, 05]
-1F579; [0D 1D 6F, 05, 05]
+1F55A; [0D 20 D4, 05, 05]
-1F57A; [0D 1D 76, 05, 05]
+1F55B; [0D 20 DB, 05, 05]
-1F57B; [0D 1D 7D, 05, 05]
+1F55C; [0D 20 E2, 05, 05]
-1F57C; [0D 1D 84, 05, 05]
+1F55D; [0D 20 E9, 05, 05]
-1F57D; [0D 1D 8B, 05, 05]
+1F55E; [0D 20 F0, 05, 05]
-1F57E; [0D 1D 92, 05, 05]
+1F55F; [0D 20 F7, 05, 05]
-1F57F; [0D 1D 99, 05, 05]
+1F560; [0D 20 FE, 05, 05]
-1F580; [0D 1D A0, 05, 05]
+1F561; [0D 21 07, 05, 05]
-1F581; [0D 1D A7, 05, 05]
+1F562; [0D 21 0E, 05, 05]
-1F582; [0D 1D AE, 05, 05]
+1F563; [0D 21 15, 05, 05]
-1F583; [0D 1D B5, 05, 05]
+1F564; [0D 21 1C, 05, 05]
-1F584; [0D 1D BC, 05, 05]
+1F565; [0D 21 23, 05, 05]
-1F585; [0D 1D C3, 05, 05]
+1F566; [0D 21 2A, 05, 05]
-1F586; [0D 1D CA, 05, 05]
+1F567; [0D 21 31, 05, 05]
-1F587; [0D 1D D1, 05, 05]
+1F568; [0D 21 38, 05, 05]
-1F588; [0D 1D D8, 05, 05]
+1F569; [0D 21 3F, 05, 05]
-1F589; [0D 1D DF, 05, 05]
+1F56A; [0D 21 46, 05, 05]
-1F58A; [0D 1D E6, 05, 05]
+1F56B; [0D 21 4D, 05, 05]
-1F58B; [0D 1D ED, 05, 05]
+1F56C; [0D 21 54, 05, 05]
-1F58C; [0D 1D F4, 05, 05]
+1F56D; [0D 21 5B, 05, 05]
-1F58D; [0D 1D FB, 05, 05]
+1F56E; [0D 21 62, 05, 05]
-1F58E; [0D 1E 04, 05, 05]
+1F56F; [0D 21 69, 05, 05]
-1F58F; [0D 1E 0B, 05, 05]
+1F570; [0D 21 70, 05, 05]
-1F590; [0D 1E 12, 05, 05]
+1F571; [0D 21 77, 05, 05]
-1F591; [0D 1E 19, 05, 05]
+1F572; [0D 21 7E, 05, 05]
-1F592; [0D 1E 20, 05, 05]
+1F573; [0D 21 85, 05, 05]
-1F593; [0D 1E 27, 05, 05]
+1F574; [0D 21 8C, 05, 05]
-1F594; [0D 1E 2E, 05, 05]
+1F575; [0D 21 93, 05, 05]
-1F595; [0D 1E 35, 05, 05]
+1F576; [0D 21 9A, 05, 05]
-1F596; [0D 1E 3C, 05, 05]
+1F577; [0D 21 A1, 05, 05]
-1F597; [0D 1E 43, 05, 05]
+1F578; [0D 21 A8, 05, 05]
-1F598; [0D 1E 4A, 05, 05]
+1F579; [0D 21 AF, 05, 05]
-1F599; [0D 1E 51, 05, 05]
+1F57A; [0D 21 B6, 05, 05]
-1F59A; [0D 1E 58, 05, 05]
+1F57B; [0D 21 BD, 05, 05]
-1F59B; [0D 1E 5F, 05, 05]
+1F57C; [0D 21 C4, 05, 05]
-1F59C; [0D 1E 66, 05, 05]
+1F57D; [0D 21 CB, 05, 05]
-1F59D; [0D 1E 6D, 05, 05]
+1F57E; [0D 21 D2, 05, 05]
-1F59E; [0D 1E 74, 05, 05]
+1F57F; [0D 21 D9, 05, 05]
-1F59F; [0D 1E 7B, 05, 05]
+1F580; [0D 21 E0, 05, 05]
-1F5A0; [0D 1E 82, 05, 05]
+1F581; [0D 21 E7, 05, 05]
-1F5A1; [0D 1E 89, 05, 05]
+1F582; [0D 21 EE, 05, 05]
-1F5A2; [0D 1E 90, 05, 05]
+1F583; [0D 21 F5, 05, 05]
-1F5A3; [0D 1E 97, 05, 05]
+1F584; [0D 21 FC, 05, 05]
-1F5A4; [0D 1E 9E, 05, 05]
+1F585; [0D 22 05, 05, 05]
-1F5A5; [0D 1E A5, 05, 05]
+1F586; [0D 22 0C, 05, 05]
-1F5A6; [0D 1E AC, 05, 05]
+1F587; [0D 22 13, 05, 05]
-1F5A7; [0D 1E B3, 05, 05]
+1F588; [0D 22 1A, 05, 05]
-1F5A8; [0D 1E BA, 05, 05]
+1F589; [0D 22 21, 05, 05]
-1F5A9; [0D 1E C1, 05, 05]
+1F58A; [0D 22 28, 05, 05]
-1F5AA; [0D 1E C8, 05, 05]
+1F58B; [0D 22 2F, 05, 05]
-1F5AB; [0D 1E CF, 05, 05]
+1F58C; [0D 22 36, 05, 05]
-1F5AC; [0D 1E D6, 05, 05]
+1F58D; [0D 22 3D, 05, 05]
-1F5AD; [0D 1E DD, 05, 05]
+1F58E; [0D 22 44, 05, 05]
-1F5AE; [0D 1E E4, 05, 05]
+1F58F; [0D 22 4B, 05, 05]
-1F5AF; [0D 1E EB, 05, 05]
+1F590; [0D 22 52, 05, 05]
-1F5B0; [0D 1E F2, 05, 05]
+1F591; [0D 22 59, 05, 05]
-1F5B1; [0D 1E F9, 05, 05]
+1F592; [0D 22 60, 05, 05]
-1F5B2; [0D 1F 02, 05, 05]
+1F593; [0D 22 67, 05, 05]
-1F5B3; [0D 1F 09, 05, 05]
+1F594; [0D 22 6E, 05, 05]
-1F5B4; [0D 1F 10, 05, 05]
+1F595; [0D 22 75, 05, 05]
-1F5B5; [0D 1F 17, 05, 05]
+1F596; [0D 22 7C, 05, 05]
-1F5B6; [0D 1F 1E, 05, 05]
+1F597; [0D 22 83, 05, 05]
-1F5B7; [0D 1F 25, 05, 05]
+1F598; [0D 22 8A, 05, 05]
-1F5B8; [0D 1F 2C, 05, 05]
+1F599; [0D 22 91, 05, 05]
-1F5B9; [0D 1F 33, 05, 05]
+1F59A; [0D 22 98, 05, 05]
-1F5BA; [0D 1F 3A, 05, 05]
+1F59B; [0D 22 9F, 05, 05]
-1F5BB; [0D 1F 41, 05, 05]
+1F59C; [0D 22 A6, 05, 05]
-1F5BC; [0D 1F 48, 05, 05]
+1F59D; [0D 22 AD, 05, 05]
-1F5BD; [0D 1F 4F, 05, 05]
+1F59E; [0D 22 B4, 05, 05]
-1F5BE; [0D 1F 56, 05, 05]
+1F59F; [0D 22 BB, 05, 05]
-1F5BF; [0D 1F 5D, 05, 05]
+1F5A0; [0D 22 C2, 05, 05]
-1F5C0; [0D 1F 64, 05, 05]
+1F5A1; [0D 22 C9, 05, 05]
-1F5C1; [0D 1F 6B, 05, 05]
+1F5A2; [0D 22 D0, 05, 05]
-1F5C2; [0D 1F 72, 05, 05]
+1F5A3; [0D 22 D7, 05, 05]
-1F5C3; [0D 1F 79, 05, 05]
+1F5A4; [0D 22 DE, 05, 05]
-1F5C4; [0D 1F 80, 05, 05]
+1F5A5; [0D 22 E5, 05, 05]
-1F5C5; [0D 1F 87, 05, 05]
+1F5A6; [0D 22 EC, 05, 05]
-1F5C6; [0D 1F 8E, 05, 05]
+1F5A7; [0D 22 F3, 05, 05]
-1F5C7; [0D 1F 95, 05, 05]
+1F5A8; [0D 22 FA, 05, 05]
-1F5C8; [0D 1F 9C, 05, 05]
+1F5A9; [0D 23 03, 05, 05]
-1F5C9; [0D 1F A3, 05, 05]
+1F5AA; [0D 23 0A, 05, 05]
-1F5CA; [0D 1F AA, 05, 05]
+1F5AB; [0D 23 11, 05, 05]
-1F5CB; [0D 1F B1, 05, 05]
+1F5AC; [0D 23 18, 05, 05]
-1F5CC; [0D 1F B8, 05, 05]
+1F5AD; [0D 23 1F, 05, 05]
-1F5CD; [0D 1F BF, 05, 05]
+1F5AE; [0D 23 26, 05, 05]
-1F5CE; [0D 1F C6, 05, 05]
+1F5AF; [0D 23 2D, 05, 05]
-1F5CF; [0D 1F CD, 05, 05]
+1F5B0; [0D 23 34, 05, 05]
-1F5D0; [0D 1F D4, 05, 05]
+1F5B1; [0D 23 3B, 05, 05]
-1F5D1; [0D 1F DB, 05, 05]
+1F5B2; [0D 23 42, 05, 05]
-1F5D2; [0D 1F E2, 05, 05]
+1F5B3; [0D 23 49, 05, 05]
-1F5D3; [0D 1F E9, 05, 05]
+1F5B4; [0D 23 50, 05, 05]
-1F5D4; [0D 1F F0, 05, 05]
+1F5B5; [0D 23 57, 05, 05]
-1F5D5; [0D 1F F7, 05, 05]
+1F5B6; [0D 23 5E, 05, 05]
-1F5D6; [0D 1F FE, 05, 05]
+1F5B7; [0D 23 65, 05, 05]
-1F5D7; [0D 20 07, 05, 05]
+1F5B8; [0D 23 6C, 05, 05]
-1F5D8; [0D 20 0E, 05, 05]
+1F5B9; [0D 23 73, 05, 05]
-1F5D9; [0D 20 15, 05, 05]
+1F5BA; [0D 23 7A, 05, 05]
-1F5DA; [0D 20 1C, 05, 05]
+1F5BB; [0D 23 81, 05, 05]
-1F5DB; [0D 20 23, 05, 05]
+1F5BC; [0D 23 88, 05, 05]
-1F5DC; [0D 20 2A, 05, 05]
+1F5BD; [0D 23 8F, 05, 05]
-1F5DD; [0D 20 31, 05, 05]
+1F5BE; [0D 23 96, 05, 05]
-1F5DE; [0D 20 38, 05, 05]
+1F5BF; [0D 23 9D, 05, 05]
-1F5DF; [0D 20 3F, 05, 05]
+1F5C0; [0D 23 A4, 05, 05]
-1F5E0; [0D 20 46, 05, 05]
+1F5C1; [0D 23 AB, 05, 05]
-1F5E1; [0D 20 4D, 05, 05]
+1F5C2; [0D 23 B2, 05, 05]
-1F5E2; [0D 20 54, 05, 05]
+1F5C3; [0D 23 B9, 05, 05]
-1F5E3; [0D 20 5B, 05, 05]
+1F5C4; [0D 23 C0, 05, 05]
-1F5E4; [0D 20 62, 05, 05]
+1F5C5; [0D 23 C7, 05, 05]
-1F5E5; [0D 20 69, 05, 05]
+1F5C6; [0D 23 CE, 05, 05]
-1F5E6; [0D 20 70, 05, 05]
+1F5C7; [0D 23 D5, 05, 05]
-1F5E7; [0D 20 77, 05, 05]
+1F5C8; [0D 23 DC, 05, 05]
-1F5E8; [0D 20 7E, 05, 05]
+1F5C9; [0D 23 E3, 05, 05]
-1F5E9; [0D 20 85, 05, 05]
+1F5CA; [0D 23 EA, 05, 05]
-1F5EA; [0D 20 8C, 05, 05]
+1F5CB; [0D 23 F1, 05, 05]
-1F5EB; [0D 20 93, 05, 05]
+1F5CC; [0D 23 F8, 05, 05]
-1F5EC; [0D 20 9A, 05, 05]
+1F5CD; [0D 23 FF, 05, 05]
-1F5ED; [0D 20 A1, 05, 05]
+1F5CE; [0D 24 08, 05, 05]
-1F5EE; [0D 20 A8, 05, 05]
+1F5CF; [0D 24 0F, 05, 05]
-1F5EF; [0D 20 AF, 05, 05]
+1F5D0; [0D 24 16, 05, 05]
-1F5F0; [0D 20 B6, 05, 05]
+1F5D1; [0D 24 1D, 05, 05]
-1F5F1; [0D 20 BD, 05, 05]
+1F5D2; [0D 24 24, 05, 05]
-1F5F2; [0D 20 C4, 05, 05]
+1F5D3; [0D 24 2B, 05, 05]
-1F5F3; [0D 20 CB, 05, 05]
+1F5D4; [0D 24 32, 05, 05]
-1F5F4; [0D 20 D2, 05, 05]
+1F5D5; [0D 24 39, 05, 05]
-1F5F5; [0D 20 D9, 05, 05]
+1F5D6; [0D 24 40, 05, 05]
-1F5F6; [0D 20 E0, 05, 05]
+1F5D7; [0D 24 47, 05, 05]
-1F5F7; [0D 20 E7, 05, 05]
+1F5D8; [0D 24 4E, 05, 05]
-1F5F8; [0D 20 EE, 05, 05]
+1F5D9; [0D 24 55, 05, 05]
-1F5F9; [0D 20 F5, 05, 05]
+1F5DA; [0D 24 5C, 05, 05]
-1F5FA; [0D 20 FC, 05, 05]
+1F5DB; [0D 24 63, 05, 05]
-1F5FB; [0D 21 05, 05, 05]
+1F5DC; [0D 24 6A, 05, 05]
-1F5FC; [0D 21 0C, 05, 05]
+1F5DD; [0D 24 71, 05, 05]
-1F5FD; [0D 21 13, 05, 05]
+1F5DE; [0D 24 78, 05, 05]
-1F5FE; [0D 21 1A, 05, 05]
+1F5DF; [0D 24 7F, 05, 05]
-1F5FF; [0D 21 21, 05, 05]
+1F5E0; [0D 24 86, 05, 05]
-1F900; [0D 21 28, 05, 05]
+1F5E1; [0D 24 8D, 05, 05]
-1F901; [0D 21 2F, 05, 05]
+1F5E2; [0D 24 94, 05, 05]
-1F902; [0D 21 36, 05, 05]
+1F5E3; [0D 24 9B, 05, 05]
-1F903; [0D 21 3D, 05, 05]
+1F5E4; [0D 24 A2, 05, 05]
-1F904; [0D 21 44, 05, 05]
+1F5E5; [0D 24 A9, 05, 05]
-1F905; [0D 21 4B, 05, 05]
+1F5E6; [0D 24 B0, 05, 05]
-1F906; [0D 21 52, 05, 05]
+1F5E7; [0D 24 B7, 05, 05]
-1F907; [0D 21 59, 05, 05]
+1F5E8; [0D 24 BE, 05, 05]
-1F908; [0D 21 60, 05, 05]
+1F5E9; [0D 24 C5, 05, 05]
-1F909; [0D 21 67, 05, 05]
+1F5EA; [0D 24 CC, 05, 05]
-1F90A; [0D 21 6E, 05, 05]
+1F5EB; [0D 24 D3, 05, 05]
-1F90B; [0D 21 75, 05, 05]
+1F5EC; [0D 24 DA, 05, 05]
-1F90C; [0D 21 7C, 05, 05]
+1F5ED; [0D 24 E1, 05, 05]
-1F90D; [0D 21 83, 05, 05]
+1F5EE; [0D 24 E8, 05, 05]
-1F90E; [0D 21 8A, 05, 05]
+1F5EF; [0D 24 EF, 05, 05]
-1F90F; [0D 21 91, 05, 05]
+1F5F0; [0D 24 F6, 05, 05]
-1F910; [0D 21 98, 05, 05]
+1F5F1; [0D 24 FD, 05, 05]
-1F911; [0D 21 9F, 05, 05]
+1F5F2; [0D 25 06, 05, 05]
-1F912; [0D 21 A6, 05, 05]
+1F5F3; [0D 25 0D, 05, 05]
-1F913; [0D 21 AD, 05, 05]
+1F5F4; [0D 25 14, 05, 05]
-1F914; [0D 21 B4, 05, 05]
+1F5F5; [0D 25 1B, 05, 05]
-1F915; [0D 21 BB, 05, 05]
+1F5F6; [0D 25 22, 05, 05]
-1F916; [0D 21 C2, 05, 05]
+1F5F7; [0D 25 29, 05, 05]
-1F917; [0D 21 C9, 05, 05]
+1F5F8; [0D 25 30, 05, 05]
-1F918; [0D 21 D0, 05, 05]
+1F5F9; [0D 25 37, 05, 05]
-1F919; [0D 21 D7, 05, 05]
+1F5FA; [0D 25 3E, 05, 05]
-1F91A; [0D 21 DE, 05, 05]
+1F5FB; [0D 25 45, 05, 05]
-1F91B; [0D 21 E5, 05, 05]
+1F5FC; [0D 25 4C, 05, 05]
-1F91C; [0D 21 EC, 05, 05]
+1F5FD; [0D 25 53, 05, 05]
-1F91D; [0D 21 F3, 05, 05]
+1F5FE; [0D 25 5A, 05, 05]
-1F91E; [0D 21 FA, 05, 05]
+1F5FF; [0D 25 61, 05, 05]
-1F91F; [0D 22 03, 05, 05]
+1F900; [0D 25 68, 05, 05]
-1F920; [0D 22 0A, 05, 05]
+1F901; [0D 25 6F, 05, 05]
-1F921; [0D 22 11, 05, 05]
+1F902; [0D 25 76, 05, 05]
-1F922; [0D 22 18, 05, 05]
+1F903; [0D 25 7D, 05, 05]
-1F923; [0D 22 1F, 05, 05]
+1F904; [0D 25 84, 05, 05]
-1F924; [0D 22 26, 05, 05]
+1F905; [0D 25 8B, 05, 05]
-1F925; [0D 22 2D, 05, 05]
+1F906; [0D 25 92, 05, 05]
-1F926; [0D 22 34, 05, 05]
+1F907; [0D 25 99, 05, 05]
-1F927; [0D 22 3B, 05, 05]
+1F908; [0D 25 A0, 05, 05]
-1F928; [0D 22 42, 05, 05]
+1F909; [0D 25 A7, 05, 05]
-1F929; [0D 22 49, 05, 05]
+1F90A; [0D 25 AE, 05, 05]
-1F92A; [0D 22 50, 05, 05]
+1F90B; [0D 25 B5, 05, 05]
-1F92B; [0D 22 57, 05, 05]
+1F90C; [0D 25 BC, 05, 05]
-1F92C; [0D 22 5E, 05, 05]
+1F90D; [0D 25 C3, 05, 05]
-1F92D; [0D 22 65, 05, 05]
+1F90E; [0D 25 CA, 05, 05]
-1F92E; [0D 22 6C, 05, 05]
+1F90F; [0D 25 D1, 05, 05]
-1F92F; [0D 22 73, 05, 05]
+1F910; [0D 25 D8, 05, 05]
-1F930; [0D 22 7A, 05, 05]
+1F911; [0D 25 DF, 05, 05]
-1F931; [0D 22 81, 05, 05]
+1F912; [0D 25 E6, 05, 05]
-1F932; [0D 22 88, 05, 05]
+1F913; [0D 25 ED, 05, 05]
-1F933; [0D 22 8F, 05, 05]
+1F914; [0D 25 F4, 05, 05]
-1F934; [0D 22 96, 05, 05]
+1F915; [0D 25 FB, 05, 05]
-1F935; [0D 22 9D, 05, 05]
+1F916; [0D 26 04, 05, 05]
-1F936; [0D 22 A4, 05, 05]
+1F917; [0D 26 0B, 05, 05]
-1F937; [0D 22 AB, 05, 05]
+1F918; [0D 26 12, 05, 05]
-1F938; [0D 22 B2, 05, 05]
+1F919; [0D 26 19, 05, 05]
-1F939; [0D 22 B9, 05, 05]
+1F91A; [0D 26 20, 05, 05]
-1F93A; [0D 22 C0, 05, 05]
+1F91B; [0D 26 27, 05, 05]
-1F93B; [0D 22 C7, 05, 05]
+1F91C; [0D 26 2E, 05, 05]
-1F93C; [0D 22 CE, 05, 05]
+1F91D; [0D 26 35, 05, 05]
-1F93D; [0D 22 D5, 05, 05]
+1F91E; [0D 26 3C, 05, 05]
-1F93E; [0D 22 DC, 05, 05]
+1F91F; [0D 26 43, 05, 05]
-1F93F; [0D 22 E3, 05, 05]
+1F920; [0D 26 4A, 05, 05]
-1F940; [0D 22 EA, 05, 05]
+1F921; [0D 26 51, 05, 05]
-1F941; [0D 22 F1, 05, 05]
+1F922; [0D 26 58, 05, 05]
-1F942; [0D 22 F8, 05, 05]
+1F923; [0D 26 5F, 05, 05]
-1F943; [0D 22 FF, 05, 05]
+1F924; [0D 26 66, 05, 05]
-1F944; [0D 23 08, 05, 05]
+1F925; [0D 26 6D, 05, 05]
-1F945; [0D 23 0F, 05, 05]
+1F926; [0D 26 74, 05, 05]
-1F946; [0D 23 16, 05, 05]
+1F927; [0D 26 7B, 05, 05]
-1F947; [0D 23 1D, 05, 05]
+1F928; [0D 26 82, 05, 05]
-1F948; [0D 23 24, 05, 05]
+1F929; [0D 26 89, 05, 05]
-1F949; [0D 23 2B, 05, 05]
+1F92A; [0D 26 90, 05, 05]
-1F94A; [0D 23 32, 05, 05]
+1F92B; [0D 26 97, 05, 05]
-1F94B; [0D 23 39, 05, 05]
+1F92C; [0D 26 9E, 05, 05]
-1F94C; [0D 23 40, 05, 05]
+1F92D; [0D 26 A5, 05, 05]
-1F94D; [0D 23 47, 05, 05]
+1F92E; [0D 26 AC, 05, 05]
-1F94E; [0D 23 4E, 05, 05]
+1F92F; [0D 26 B3, 05, 05]
-1F94F; [0D 23 55, 05, 05]
+1F930; [0D 26 BA, 05, 05]
-1F950; [0D 23 5C, 05, 05]
+1F931; [0D 26 C1, 05, 05]
-1F951; [0D 23 63, 05, 05]
+1F932; [0D 26 C8, 05, 05]
-1F952; [0D 23 6A, 05, 05]
+1F933; [0D 26 CF, 05, 05]
-1F953; [0D 23 71, 05, 05]
+1F934; [0D 26 D6, 05, 05]
-1F954; [0D 23 78, 05, 05]
+1F935; [0D 26 DD, 05, 05]
-1F955; [0D 23 7F, 05, 05]
+1F936; [0D 26 E4, 05, 05]
-1F956; [0D 23 86, 05, 05]
+1F937; [0D 26 EB, 05, 05]
-1F957; [0D 23 8D, 05, 05]
+1F938; [0D 26 F2, 05, 05]
-1F958; [0D 23 94, 05, 05]
+1F939; [0D 26 F9, 05, 05]
-1F959; [0D 23 9B, 05, 05]
+1F93A; [0D 27 02, 05, 05]
-1F95A; [0D 23 A2, 05, 05]
+1F93B; [0D 27 09, 05, 05]
-1F95B; [0D 23 A9, 05, 05]
+1F93C; [0D 27 10, 05, 05]
-1F95C; [0D 23 B0, 05, 05]
+1F93D; [0D 27 17, 05, 05]
-1F95D; [0D 23 B7, 05, 05]
+1F93E; [0D 27 1E, 05, 05]
-1F95E; [0D 23 BE, 05, 05]
+1F93F; [0D 27 25, 05, 05]
-1F95F; [0D 23 C5, 05, 05]
+1F940; [0D 27 2C, 05, 05]
-1F960; [0D 23 CC, 05, 05]
+1F941; [0D 27 33, 05, 05]
-1F961; [0D 23 D3, 05, 05]
+1F942; [0D 27 3A, 05, 05]
-1F962; [0D 23 DA, 05, 05]
+1F943; [0D 27 41, 05, 05]
-1F963; [0D 23 E1, 05, 05]
+1F944; [0D 27 48, 05, 05]
-1F964; [0D 23 E8, 05, 05]
+1F945; [0D 27 4F, 05, 05]
-1F965; [0D 23 EF, 05, 05]
+1F946; [0D 27 56, 05, 05]
-1F966; [0D 23 F6, 05, 05]
+1F947; [0D 27 5D, 05, 05]
-1F967; [0D 23 FD, 05, 05]
+1F948; [0D 27 64, 05, 05]
-1F968; [0D 24 06, 05, 05]
+1F949; [0D 27 6B, 05, 05]
-1F969; [0D 24 0D, 05, 05]
+1F94A; [0D 27 72, 05, 05]
-1F96A; [0D 24 14, 05, 05]
+1F94B; [0D 27 79, 05, 05]
-1F96B; [0D 24 1B, 05, 05]
+1F94C; [0D 27 80, 05, 05]
-1F96C; [0D 24 22, 05, 05]
+1F94D; [0D 27 87, 05, 05]
-1F96D; [0D 24 29, 05, 05]
+1F94E; [0D 27 8E, 05, 05]
-1F96E; [0D 24 30, 05, 05]
+1F94F; [0D 27 95, 05, 05]
-1F96F; [0D 24 37, 05, 05]
+1F950; [0D 27 9C, 05, 05]
-1F970; [0D 24 3E, 05, 05]
+1F951; [0D 27 A3, 05, 05]
-1F971; [0D 24 45, 05, 05]
+1F952; [0D 27 AA, 05, 05]
-1F972; [0D 24 4C, 05, 05]
+1F953; [0D 27 B1, 05, 05]
-1F973; [0D 24 53, 05, 05]
+1F954; [0D 27 B8, 05, 05]
-1F974; [0D 24 5A, 05, 05]
+1F955; [0D 27 BF, 05, 05]
-1F975; [0D 24 61, 05, 05]
+1F956; [0D 27 C6, 05, 05]
-1F976; [0D 24 68, 05, 05]
+1F957; [0D 27 CD, 05, 05]
-1F977; [0D 24 6F, 05, 05]
+1F958; [0D 27 D4, 05, 05]
-1F978; [0D 24 76, 05, 05]
+1F959; [0D 27 DB, 05, 05]
-1F97A; [0D 24 7D, 05, 05]
+1F95A; [0D 27 E2, 05, 05]
-1F97B; [0D 24 84, 05, 05]
+1F95B; [0D 27 E9, 05, 05]
-1F97C; [0D 24 8B, 05, 05]
+1F95C; [0D 27 F0, 05, 05]
-1F97D; [0D 24 92, 05, 05]
+1F95D; [0D 27 F7, 05, 05]
-1F97E; [0D 24 99, 05, 05]
+1F95E; [0D 27 FE, 05, 05]
-1F97F; [0D 24 A0, 05, 05]
+1F95F; [0D 28 07, 05, 05]
-1F980; [0D 24 A7, 05, 05]
+1F960; [0D 28 0E, 05, 05]
-1F981; [0D 24 AE, 05, 05]
+1F961; [0D 28 15, 05, 05]
-1F982; [0D 24 B5, 05, 05]
+1F962; [0D 28 1C, 05, 05]
-1F983; [0D 24 BC, 05, 05]
+1F963; [0D 28 23, 05, 05]
-1F984; [0D 24 C3, 05, 05]
+1F964; [0D 28 2A, 05, 05]
-1F985; [0D 24 CA, 05, 05]
+1F965; [0D 28 31, 05, 05]
-1F986; [0D 24 D1, 05, 05]
+1F966; [0D 28 38, 05, 05]
-1F987; [0D 24 D8, 05, 05]
+1F967; [0D 28 3F, 05, 05]
-1F988; [0D 24 DF, 05, 05]
+1F968; [0D 28 46, 05, 05]
-1F989; [0D 24 E6, 05, 05]
+1F969; [0D 28 4D, 05, 05]
-1F98A; [0D 24 ED, 05, 05]
+1F96A; [0D 28 54, 05, 05]
-1F98B; [0D 24 F4, 05, 05]
+1F96B; [0D 28 5B, 05, 05]
-1F98C; [0D 24 FB, 05, 05]
+1F96C; [0D 28 62, 05, 05]
-1F98D; [0D 25 04, 05, 05]
+1F96D; [0D 28 69, 05, 05]
-1F98E; [0D 25 0B, 05, 05]
+1F96E; [0D 28 70, 05, 05]
-1F98F; [0D 25 12, 05, 05]
+1F96F; [0D 28 77, 05, 05]
-1F990; [0D 25 19, 05, 05]
+1F970; [0D 28 7E, 05, 05]
-1F991; [0D 25 20, 05, 05]
+1F971; [0D 28 85, 05, 05]
-1F992; [0D 25 27, 05, 05]
+1F972; [0D 28 8C, 05, 05]
-1F993; [0D 25 2E, 05, 05]
+1F973; [0D 28 93, 05, 05]
-1F994; [0D 25 35, 05, 05]
+1F974; [0D 28 9A, 05, 05]
-1F995; [0D 25 3C, 05, 05]
+1F975; [0D 28 A1, 05, 05]
-1F996; [0D 25 43, 05, 05]
+1F976; [0D 28 A8, 05, 05]
-1F997; [0D 25 4A, 05, 05]
+1F977; [0D 28 AF, 05, 05]
-1F998; [0D 25 51, 05, 05]
+1F978; [0D 28 B6, 05, 05]
-1F999; [0D 25 58, 05, 05]
+1F979; [0D 28 BD, 05, 05]
-1F99A; [0D 25 5F, 05, 05]
+1F97A; [0D 28 C4, 05, 05]
-1F99B; [0D 25 66, 05, 05]
+1F97B; [0D 28 CB, 05, 05]
-1F99C; [0D 25 6D, 05, 05]
+1F97C; [0D 28 D2, 05, 05]
-1F99D; [0D 25 74, 05, 05]
+1F97D; [0D 28 D9, 05, 05]
-1F99E; [0D 25 7B, 05, 05]
+1F97E; [0D 28 E0, 05, 05]
-1F99F; [0D 25 82, 05, 05]
+1F97F; [0D 28 E7, 05, 05]
-1F9A0; [0D 25 89, 05, 05]
+1F980; [0D 28 EE, 05, 05]
-1F9A1; [0D 25 90, 05, 05]
+1F981; [0D 28 F5, 05, 05]
-1F9A2; [0D 25 97, 05, 05]
+1F982; [0D 28 FC, 05, 05]
-1F9A3; [0D 25 9E, 05, 05]
+1F983; [0D 29 05, 05, 05]
-1F9A4; [0D 25 A5, 05, 05]
+1F984; [0D 29 0C, 05, 05]
-1F9A5; [0D 25 AC, 05, 05]
+1F985; [0D 29 13, 05, 05]
-1F9A6; [0D 25 B3, 05, 05]
+1F986; [0D 29 1A, 05, 05]
-1F9A7; [0D 25 BA, 05, 05]
+1F987; [0D 29 21, 05, 05]
-1F9A8; [0D 25 C1, 05, 05]
+1F988; [0D 29 28, 05, 05]
-1F9A9; [0D 25 C8, 05, 05]
+1F989; [0D 29 2F, 05, 05]
-1F9AA; [0D 25 CF, 05, 05]
+1F98A; [0D 29 36, 05, 05]
-1F9AB; [0D 25 D6, 05, 05]
+1F98B; [0D 29 3D, 05, 05]
-1F9AC; [0D 25 DD, 05, 05]
+1F98C; [0D 29 44, 05, 05]
-1F9AD; [0D 25 E4, 05, 05]
+1F98D; [0D 29 4B, 05, 05]
-1F9AE; [0D 25 EB, 05, 05]
+1F98E; [0D 29 52, 05, 05]
-1F9AF; [0D 25 F2, 05, 05]
+1F98F; [0D 29 59, 05, 05]
-1F9B0; [0D 25 F9, 05, 05]
+1F990; [0D 29 60, 05, 05]
-1F9B1; [0D 26 02, 05, 05]
+1F991; [0D 29 67, 05, 05]
-1F9B2; [0D 26 09, 05, 05]
+1F992; [0D 29 6E, 05, 05]
-1F9B3; [0D 26 10, 05, 05]
+1F993; [0D 29 75, 05, 05]
-1F9B4; [0D 26 17, 05, 05]
+1F994; [0D 29 7C, 05, 05]
-1F9B5; [0D 26 1E, 05, 05]
+1F995; [0D 29 83, 05, 05]
-1F9B6; [0D 26 25, 05, 05]
+1F996; [0D 29 8A, 05, 05]
-1F9B7; [0D 26 2C, 05, 05]
+1F997; [0D 29 91, 05, 05]
-1F9B8; [0D 26 33, 05, 05]
+1F998; [0D 29 98, 05, 05]
-1F9B9; [0D 26 3A, 05, 05]
+1F999; [0D 29 9F, 05, 05]
-1F9BA; [0D 26 41, 05, 05]
+1F99A; [0D 29 A6, 05, 05]
-1F9BB; [0D 26 48, 05, 05]
+1F99B; [0D 29 AD, 05, 05]
-1F9BC; [0D 26 4F, 05, 05]
+1F99C; [0D 29 B4, 05, 05]
-1F9BD; [0D 26 56, 05, 05]
+1F99D; [0D 29 BB, 05, 05]
-1F9BE; [0D 26 5D, 05, 05]
+1F99E; [0D 29 C2, 05, 05]
-1F9BF; [0D 26 64, 05, 05]
+1F99F; [0D 29 C9, 05, 05]
-1F9C0; [0D 26 6B, 05, 05]
+1F9A0; [0D 29 D0, 05, 05]
-1F9C1; [0D 26 72, 05, 05]
+1F9A1; [0D 29 D7, 05, 05]
-1F9C2; [0D 26 79, 05, 05]
+1F9A2; [0D 29 DE, 05, 05]
-1F9C3; [0D 26 80, 05, 05]
+1F9A3; [0D 29 E5, 05, 05]
-1F9C4; [0D 26 87, 05, 05]
+1F9A4; [0D 29 EC, 05, 05]
-1F9C5; [0D 26 8E, 05, 05]
+1F9A5; [0D 29 F3, 05, 05]
-1F9C6; [0D 26 95, 05, 05]
+1F9A6; [0D 29 FA, 05, 05]
-1F9C7; [0D 26 9C, 05, 05]
+1F9A7; [0D 2A 03, 05, 05]
-1F9C8; [0D 26 A3, 05, 05]
+1F9A8; [0D 2A 0A, 05, 05]
-1F9C9; [0D 26 AA, 05, 05]
+1F9A9; [0D 2A 11, 05, 05]
-1F9CA; [0D 26 B1, 05, 05]
+1F9AA; [0D 2A 18, 05, 05]
-1F9CB; [0D 26 B8, 05, 05]
+1F9AB; [0D 2A 1F, 05, 05]
-1F9CD; [0D 26 BF, 05, 05]
+1F9AC; [0D 2A 26, 05, 05]
-1F9CE; [0D 26 C6, 05, 05]
+1F9AD; [0D 2A 2D, 05, 05]
-1F9CF; [0D 26 CD, 05, 05]
+1F9AE; [0D 2A 34, 05, 05]
-1F9D0; [0D 26 D4, 05, 05]
+1F9AF; [0D 2A 3B, 05, 05]
-1F9D1; [0D 26 DB, 05, 05]
+1F9B0; [0D 2A 42, 05, 05]
-1F9D2; [0D 26 E2, 05, 05]
+1F9B1; [0D 2A 49, 05, 05]
-1F9D3; [0D 26 E9, 05, 05]
+1F9B2; [0D 2A 50, 05, 05]
-1F9D4; [0D 26 F0, 05, 05]
+1F9B3; [0D 2A 57, 05, 05]
-1F9D5; [0D 26 F7, 05, 05]
+1F9B4; [0D 2A 5E, 05, 05]
-1F9D6; [0D 26 FE, 05, 05]
+1F9B5; [0D 2A 65, 05, 05]
-1F9D7; [0D 27 07, 05, 05]
+1F9B6; [0D 2A 6C, 05, 05]
-1F9D8; [0D 27 0E, 05, 05]
+1F9B7; [0D 2A 73, 05, 05]
-1F9D9; [0D 27 15, 05, 05]
+1F9B8; [0D 2A 7A, 05, 05]
-1F9DA; [0D 27 1C, 05, 05]
+1F9B9; [0D 2A 81, 05, 05]
-1F9DB; [0D 27 23, 05, 05]
+1F9BA; [0D 2A 88, 05, 05]
-1F9DC; [0D 27 2A, 05, 05]
+1F9BB; [0D 2A 8F, 05, 05]
-1F9DD; [0D 27 31, 05, 05]
+1F9BC; [0D 2A 96, 05, 05]
-1F9DE; [0D 27 38, 05, 05]
+1F9BD; [0D 2A 9D, 05, 05]
-1F9DF; [0D 27 3F, 05, 05]
+1F9BE; [0D 2A A4, 05, 05]
-1F9E0; [0D 27 46, 05, 05]
+1F9BF; [0D 2A AB, 05, 05]
-1F9E1; [0D 27 4D, 05, 05]
+1F9C0; [0D 2A B2, 05, 05]
-1F9E2; [0D 27 54, 05, 05]
+1F9C1; [0D 2A B9, 05, 05]
-1F9E3; [0D 27 5B, 05, 05]
+1F9C2; [0D 2A C0, 05, 05]
-1F9E4; [0D 27 62, 05, 05]
+1F9C3; [0D 2A C7, 05, 05]
-1F9E5; [0D 27 69, 05, 05]
+1F9C4; [0D 2A CE, 05, 05]
-1F9E6; [0D 27 70, 05, 05]
+1F9C5; [0D 2A D5, 05, 05]
-1F9E7; [0D 27 77, 05, 05]
+1F9C6; [0D 2A DC, 05, 05]
-1F9E8; [0D 27 7E, 05, 05]
+1F9C7; [0D 2A E3, 05, 05]
-1F9E9; [0D 27 85, 05, 05]
+1F9C8; [0D 2A EA, 05, 05]
-1F9EA; [0D 27 8C, 05, 05]
+1F9C9; [0D 2A F1, 05, 05]
-1F9EB; [0D 27 93, 05, 05]
+1F9CA; [0D 2A F8, 05, 05]
-1F9EC; [0D 27 9A, 05, 05]
+1F9CB; [0D 2A FF, 05, 05]
-1F9ED; [0D 27 A1, 05, 05]
+1F9CC; [0D 2B 08, 05, 05]
-1F9EE; [0D 27 A8, 05, 05]
+1F9CD; [0D 2B 0F, 05, 05]
-1F9EF; [0D 27 AF, 05, 05]
+1F9CE; [0D 2B 16, 05, 05]
-1F9F0; [0D 27 B6, 05, 05]
+1F9CF; [0D 2B 1D, 05, 05]
-1F9F1; [0D 27 BD, 05, 05]
+1F9D0; [0D 2B 24, 05, 05]
-1F9F2; [0D 27 C4, 05, 05]
+1F9D1; [0D 2B 2B, 05, 05]
-1F9F3; [0D 27 CB, 05, 05]
+1F9D2; [0D 2B 32, 05, 05]
-1F9F4; [0D 27 D2, 05, 05]
+1F9D3; [0D 2B 39, 05, 05]
-1F9F5; [0D 27 D9, 05, 05]
+1F9D4; [0D 2B 40, 05, 05]
-1F9F6; [0D 27 E0, 05, 05]
+1F9D5; [0D 2B 47, 05, 05]
-1F9F7; [0D 27 E7, 05, 05]
+1F9D6; [0D 2B 4E, 05, 05]
-1F9F8; [0D 27 EE, 05, 05]
+1F9D7; [0D 2B 55, 05, 05]
-1F9F9; [0D 27 F5, 05, 05]
+1F9D8; [0D 2B 5C, 05, 05]
-1F9FA; [0D 27 FC, 05, 05]
+1F9D9; [0D 2B 63, 05, 05]
-1F9FB; [0D 28 05, 05, 05]
+1F9DA; [0D 2B 6A, 05, 05]
-1F9FC; [0D 28 0C, 05, 05]
+1F9DB; [0D 2B 71, 05, 05]
-1F9FD; [0D 28 13, 05, 05]
+1F9DC; [0D 2B 78, 05, 05]
-1F9FE; [0D 28 1A, 05, 05]
+1F9DD; [0D 2B 7F, 05, 05]
-1F9FF; [0D 28 21, 05, 05]
+1F9DE; [0D 2B 86, 05, 05]
-1FA70; [0D 28 28, 05, 05]
+1F9DF; [0D 2B 8D, 05, 05]
-1FA71; [0D 28 2F, 05, 05]
+1F9E0; [0D 2B 94, 05, 05]
-1FA72; [0D 28 36, 05, 05]
+1F9E1; [0D 2B 9B, 05, 05]
-1FA73; [0D 28 3D, 05, 05]
+1F9E2; [0D 2B A2, 05, 05]
-1FA74; [0D 28 44, 05, 05]
+1F9E3; [0D 2B A9, 05, 05]
-1FA78; [0D 28 4B, 05, 05]
+1F9E4; [0D 2B B0, 05, 05]
-1FA79; [0D 28 52, 05, 05]
+1F9E5; [0D 2B B7, 05, 05]
-1FA7A; [0D 28 59, 05, 05]
+1F9E6; [0D 2B BE, 05, 05]
-1FA80; [0D 28 60, 05, 05]
+1F9E7; [0D 2B C5, 05, 05]
-1FA81; [0D 28 67, 05, 05]
+1F9E8; [0D 2B CC, 05, 05]
-1FA82; [0D 28 6E, 05, 05]
+1F9E9; [0D 2B D3, 05, 05]
-1FA83; [0D 28 75, 05, 05]
+1F9EA; [0D 2B DA, 05, 05]
-1FA84; [0D 28 7C, 05, 05]
+1F9EB; [0D 2B E1, 05, 05]
-1FA85; [0D 28 83, 05, 05]
+1F9EC; [0D 2B E8, 05, 05]
-1FA86; [0D 28 8A, 05, 05]
+1F9ED; [0D 2B EF, 05, 05]
-1FA90; [0D 28 91, 05, 05]
+1F9EE; [0D 2B F6, 05, 05]
-1FA91; [0D 28 98, 05, 05]
+1F9EF; [0D 2B FD, 05, 05]
-1FA92; [0D 28 9F, 05, 05]
+1F9F0; [0D 2C 06, 05, 05]
-1FA93; [0D 28 A6, 05, 05]
+1F9F1; [0D 2C 0D, 05, 05]
-1FA94; [0D 28 AD, 05, 05]
+1F9F2; [0D 2C 14, 05, 05]
-1FA95; [0D 28 B4, 05, 05]
+1F9F3; [0D 2C 1B, 05, 05]
-1FA96; [0D 28 BB, 05, 05]
+1F9F4; [0D 2C 22, 05, 05]
-1FA97; [0D 28 C2, 05, 05]
+1F9F5; [0D 2C 29, 05, 05]
-1FA98; [0D 28 C9, 05, 05]
+1F9F6; [0D 2C 30, 05, 05]
-1FA99; [0D 28 D0, 05, 05]
+1F9F7; [0D 2C 37, 05, 05]
-1FA9A; [0D 28 D7, 05, 05]
+1F9F8; [0D 2C 3E, 05, 05]
-1FA9B; [0D 28 DE, 05, 05]
+1F9F9; [0D 2C 45, 05, 05]
-1FA9C; [0D 28 E5, 05, 05]
+1F9FA; [0D 2C 4C, 05, 05]
-1FA9D; [0D 28 EC, 05, 05]
+1F9FB; [0D 2C 53, 05, 05]
-1FA9E; [0D 28 F3, 05, 05]
+1F9FC; [0D 2C 5A, 05, 05]
-1FA9F; [0D 28 FA, 05, 05]
+1F9FD; [0D 2C 61, 05, 05]
-1FAA0; [0D 29 03, 05, 05]
+1F9FE; [0D 2C 68, 05, 05]
-1FAA1; [0D 29 0A, 05, 05]
+1F9FF; [0D 2C 6F, 05, 05]
-1FAA2; [0D 29 11, 05, 05]
+1FA70; [0D 2C 76, 05, 05]
-1FAA3; [0D 29 18, 05, 05]
+1FA71; [0D 2C 7D, 05, 05]
-1FAA4; [0D 29 1F, 05, 05]
+1FA72; [0D 2C 84, 05, 05]
-1FAA5; [0D 29 26, 05, 05]
+1FA73; [0D 2C 8B, 05, 05]
-1FAA6; [0D 29 2D, 05, 05]
+1FA74; [0D 2C 92, 05, 05]
-1FAA7; [0D 29 34, 05, 05]
+1FA78; [0D 2C 99, 05, 05]
-1FAA8; [0D 29 3B, 05, 05]
+1FA79; [0D 2C A0, 05, 05]
-1FAB0; [0D 29 42, 05, 05]
+1FA7A; [0D 2C A7, 05, 05]
-1FAB1; [0D 29 49, 05, 05]
+1FA7B; [0D 2C AE, 05, 05]
-1FAB2; [0D 29 50, 05, 05]
+1FA7C; [0D 2C B5, 05, 05]
-1FAB3; [0D 29 57, 05, 05]
+1FA80; [0D 2C BC, 05, 05]
-1FAB4; [0D 29 5E, 05, 05]
+1FA81; [0D 2C C3, 05, 05]
-1FAB5; [0D 29 65, 05, 05]
+1FA82; [0D 2C CA, 05, 05]
-1FAB6; [0D 29 6C, 05, 05]
+1FA83; [0D 2C D1, 05, 05]
-1FAC0; [0D 29 73, 05, 05]
+1FA84; [0D 2C D8, 05, 05]
-1FAC1; [0D 29 7A, 05, 05]
+1FA85; [0D 2C DF, 05, 05]
-1FAC2; [0D 29 81, 05, 05]
+1FA86; [0D 2C E6, 05, 05]
-1FAD0; [0D 29 88, 05, 05]
+1FA90; [0D 2C ED, 05, 05]
-1FAD1; [0D 29 8F, 05, 05]
+1FA91; [0D 2C F4, 05, 05]
-1FAD2; [0D 29 96, 05, 05]
+1FA92; [0D 2C FB, 05, 05]
-1FAD3; [0D 29 9D, 05, 05]
+1FA93; [0D 2D 04, 05, 05]
-1FAD4; [0D 29 A4, 05, 05]
+1FA94; [0D 2D 0B, 05, 05]
-1FAD5; [0D 29 AB, 05, 05]
+1FA95; [0D 2D 12, 05, 05]
-1FAD6; [0D 29 B2, 05, 05]
+1FA96; [0D 2D 19, 05, 05]
-1F600; [0D 29 B9, 05, 05]
+1FA97; [0D 2D 20, 05, 05]
-1F601; [0D 29 C0, 05, 05]
+1FA98; [0D 2D 27, 05, 05]
-1F602; [0D 29 C7, 05, 05]
+1FA99; [0D 2D 2E, 05, 05]
-1F603; [0D 29 CE, 05, 05]
+1FA9A; [0D 2D 35, 05, 05]
-1F604; [0D 29 D5, 05, 05]
+1FA9B; [0D 2D 3C, 05, 05]
-1F605; [0D 29 DC, 05, 05]
+1FA9C; [0D 2D 43, 05, 05]
-1F606; [0D 29 E3, 05, 05]
+1FA9D; [0D 2D 4A, 05, 05]
-1F607; [0D 29 EA, 05, 05]
+1FA9E; [0D 2D 51, 05, 05]
-1F608; [0D 29 F1, 05, 05]
+1FA9F; [0D 2D 58, 05, 05]
-1F609; [0D 29 F8, 05, 05]
+1FAA0; [0D 2D 5F, 05, 05]
-1F60A; [0D 29 FF, 05, 05]
+1FAA1; [0D 2D 66, 05, 05]
-1F60B; [0D 2A 08, 05, 05]
+1FAA2; [0D 2D 6D, 05, 05]
-1F60C; [0D 2A 0F, 05, 05]
+1FAA3; [0D 2D 74, 05, 05]
-1F60D; [0D 2A 16, 05, 05]
+1FAA4; [0D 2D 7B, 05, 05]
-1F60E; [0D 2A 1D, 05, 05]
+1FAA5; [0D 2D 82, 05, 05]
-1F60F; [0D 2A 24, 05, 05]
+1FAA6; [0D 2D 89, 05, 05]
-1F610; [0D 2A 2B, 05, 05]
+1FAA7; [0D 2D 90, 05, 05]
-1F611; [0D 2A 32, 05, 05]
+1FAA8; [0D 2D 97, 05, 05]
-1F612; [0D 2A 39, 05, 05]
+1FAA9; [0D 2D 9E, 05, 05]
-1F613; [0D 2A 40, 05, 05]
+1FAAA; [0D 2D A5, 05, 05]
-1F614; [0D 2A 47, 05, 05]
+1FAAB; [0D 2D AC, 05, 05]
-1F615; [0D 2A 4E, 05, 05]
+1FAAC; [0D 2D B3, 05, 05]
-1F616; [0D 2A 55, 05, 05]
+1FAB0; [0D 2D BA, 05, 05]
-1F617; [0D 2A 5C, 05, 05]
+1FAB1; [0D 2D C1, 05, 05]
-1F618; [0D 2A 63, 05, 05]
+1FAB2; [0D 2D C8, 05, 05]
-1F619; [0D 2A 6A, 05, 05]
+1FAB3; [0D 2D CF, 05, 05]
-1F61A; [0D 2A 71, 05, 05]
+1FAB4; [0D 2D D6, 05, 05]
-1F61B; [0D 2A 78, 05, 05]
+1FAB5; [0D 2D DD, 05, 05]
-1F61C; [0D 2A 7F, 05, 05]
+1FAB6; [0D 2D E4, 05, 05]
-1F61D; [0D 2A 86, 05, 05]
+1FAB7; [0D 2D EB, 05, 05]
-1F61E; [0D 2A 8D, 05, 05]
+1FAB8; [0D 2D F2, 05, 05]
-1F61F; [0D 2A 94, 05, 05]
+1FAB9; [0D 2D F9, 05, 05]
-1F620; [0D 2A 9B, 05, 05]
+1FABA; [0D 2E 02, 05, 05]
-1F621; [0D 2A A2, 05, 05]
+1FAC0; [0D 2E 09, 05, 05]
-1F622; [0D 2A A9, 05, 05]
+1FAC1; [0D 2E 10, 05, 05]
-1F623; [0D 2A B0, 05, 05]
+1FAC2; [0D 2E 17, 05, 05]
-1F624; [0D 2A B7, 05, 05]
+1FAC3; [0D 2E 1E, 05, 05]
-1F625; [0D 2A BE, 05, 05]
+1FAC4; [0D 2E 25, 05, 05]
-1F626; [0D 2A C5, 05, 05]
+1FAC5; [0D 2E 2C, 05, 05]
-1F627; [0D 2A CC, 05, 05]
+1FAD0; [0D 2E 33, 05, 05]
-1F628; [0D 2A D3, 05, 05]
+1FAD1; [0D 2E 3A, 05, 05]
-1F629; [0D 2A DA, 05, 05]
+1FAD2; [0D 2E 41, 05, 05]
-1F62A; [0D 2A E1, 05, 05]
+1FAD3; [0D 2E 48, 05, 05]
-1F62B; [0D 2A E8, 05, 05]
+1FAD4; [0D 2E 4F, 05, 05]
-1F62C; [0D 2A EF, 05, 05]
+1FAD5; [0D 2E 56, 05, 05]
-1F62D; [0D 2A F6, 05, 05]
+1FAD6; [0D 2E 5D, 05, 05]
-1F62E; [0D 2A FD, 05, 05]
+1FAD7; [0D 2E 64, 05, 05]
-1F62F; [0D 2B 06, 05, 05]
+1FAD8; [0D 2E 6B, 05, 05]
-1F630; [0D 2B 0D, 05, 05]
+1FAD9; [0D 2E 72, 05, 05]
-1F631; [0D 2B 14, 05, 05]
+1FAE0; [0D 2E 79, 05, 05]
-1F632; [0D 2B 1B, 05, 05]
+1FAE1; [0D 2E 80, 05, 05]
-1F633; [0D 2B 22, 05, 05]
+1FAE2; [0D 2E 87, 05, 05]
-1F634; [0D 2B 29, 05, 05]
+1FAE3; [0D 2E 8E, 05, 05]
-1F635; [0D 2B 30, 05, 05]
+1FAE4; [0D 2E 95, 05, 05]
-1F636; [0D 2B 37, 05, 05]
+1FAE5; [0D 2E 9C, 05, 05]
-1F637; [0D 2B 3E, 05, 05]
+1FAE6; [0D 2E A3, 05, 05]
-1F638; [0D 2B 45, 05, 05]
+1FAE7; [0D 2E AA, 05, 05]
-1F639; [0D 2B 4C, 05, 05]
+1FAF0; [0D 2E B1, 05, 05]
-1F63A; [0D 2B 53, 05, 05]
+1FAF1; [0D 2E B8, 05, 05]
-1F63B; [0D 2B 5A, 05, 05]
+1FAF2; [0D 2E BF, 05, 05]
-1F63C; [0D 2B 61, 05, 05]
+1FAF3; [0D 2E C6, 05, 05]
-1F63D; [0D 2B 68, 05, 05]
+1FAF4; [0D 2E CD, 05, 05]
-1F63E; [0D 2B 6F, 05, 05]
+1FAF5; [0D 2E D4, 05, 05]
-1F63F; [0D 2B 76, 05, 05]
+1FAF6; [0D 2E DB, 05, 05]
-1F640; [0D 2B 7D, 05, 05]
+1F600; [0D 2E E2, 05, 05]
-1F641; [0D 2B 84, 05, 05]
+1F601; [0D 2E E9, 05, 05]
-1F642; [0D 2B 8B, 05, 05]
+1F602; [0D 2E F0, 05, 05]
-1F643; [0D 2B 92, 05, 05]
+1F603; [0D 2E F7, 05, 05]
-1F644; [0D 2B 99, 05, 05]
+1F604; [0D 2E FE, 05, 05]
-1F645; [0D 2B A0, 05, 05]
+1F605; [0D 2F 07, 05, 05]
-1F646; [0D 2B A7, 05, 05]
+1F606; [0D 2F 0E, 05, 05]
-1F647; [0D 2B AE, 05, 05]
+1F607; [0D 2F 15, 05, 05]
-1F648; [0D 2B B5, 05, 05]
+1F608; [0D 2F 1C, 05, 05]
-1F649; [0D 2B BC, 05, 05]
+1F609; [0D 2F 23, 05, 05]
-1F64A; [0D 2B C3, 05, 05]
+1F60A; [0D 2F 2A, 05, 05]
-1F64B; [0D 2B CA, 05, 05]
+1F60B; [0D 2F 31, 05, 05]
-1F64C; [0D 2B D1, 05, 05]
+1F60C; [0D 2F 38, 05, 05]
-1F64D; [0D 2B D8, 05, 05]
+1F60D; [0D 2F 3F, 05, 05]
-1F64E; [0D 2B DF, 05, 05]
+1F60E; [0D 2F 46, 05, 05]
-1F64F; [0D 2B E6, 05, 05]
+1F60F; [0D 2F 4D, 05, 05]
-1F650; [0D 2B ED, 05, 05]
+1F610; [0D 2F 54, 05, 05]
-1F651; [0D 2B F4, 05, 05]
+1F611; [0D 2F 5B, 05, 05]
-1F652; [0D 2B FB, 05, 05]
+1F612; [0D 2F 62, 05, 05]
-1F653; [0D 2C 04, 05, 05]
+1F613; [0D 2F 69, 05, 05]
-1F654; [0D 2C 0B, 05, 05]
+1F614; [0D 2F 70, 05, 05]
-1F655; [0D 2C 12, 05, 05]
+1F615; [0D 2F 77, 05, 05]
-1F656; [0D 2C 19, 05, 05]
+1F616; [0D 2F 7E, 05, 05]
-1F657; [0D 2C 20, 05, 05]
+1F617; [0D 2F 85, 05, 05]
-1F658; [0D 2C 27, 05, 05]
+1F618; [0D 2F 8C, 05, 05]
-1F659; [0D 2C 2E, 05, 05]
+1F619; [0D 2F 93, 05, 05]
-1F65A; [0D 2C 35, 05, 05]
+1F61A; [0D 2F 9A, 05, 05]
-1F65B; [0D 2C 3C, 05, 05]
+1F61B; [0D 2F A1, 05, 05]
-1F65C; [0D 2C 43, 05, 05]
+1F61C; [0D 2F A8, 05, 05]
-1F65D; [0D 2C 4A, 05, 05]
+1F61D; [0D 2F AF, 05, 05]
-1F65E; [0D 2C 51, 05, 05]
+1F61E; [0D 2F B6, 05, 05]
-1F65F; [0D 2C 58, 05, 05]
+1F61F; [0D 2F BD, 05, 05]
-1F660; [0D 2C 5F, 05, 05]
+1F620; [0D 2F C4, 05, 05]
-1F661; [0D 2C 66, 05, 05]
+1F621; [0D 2F CB, 05, 05]
-1F662; [0D 2C 6D, 05, 05]
+1F622; [0D 2F D2, 05, 05]
-1F663; [0D 2C 74, 05, 05]
+1F623; [0D 2F D9, 05, 05]
-1F664; [0D 2C 7B, 05, 05]
+1F624; [0D 2F E0, 05, 05]
-1F665; [0D 2C 82, 05, 05]
+1F625; [0D 2F E7, 05, 05]
-1F666; [0D 2C 89, 05, 05]
+1F626; [0D 2F EE, 05, 05]
-1F667; [0D 2C 90, 05, 05]
+1F627; [0D 2F F5, 05, 05]
-1F668; [0D 2C 97, 05, 05]
+1F628; [0D 2F FC, 05, 05]
-1F669; [0D 2C 9E, 05, 05]
+1F629; [0D 30 05, 05, 05]
-1F66A; [0D 2C A5, 05, 05]
+1F62A; [0D 30 0C, 05, 05]
-1F66B; [0D 2C AC, 05, 05]
+1F62B; [0D 30 13, 05, 05]
-1F66C; [0D 2C B3, 05, 05]
+1F62C; [0D 30 1A, 05, 05]
-1F66D; [0D 2C BA, 05, 05]
+1F62D; [0D 30 21, 05, 05]
-1F66E; [0D 2C C1, 05, 05]
+1F62E; [0D 30 28, 05, 05]
-1F66F; [0D 2C C8, 05, 05]
+1F62F; [0D 30 2F, 05, 05]
-1F670; [0D 2C CF, 05, 05]
+1F630; [0D 30 36, 05, 05]
-1F671; [0D 2C D6, 05, 05]
+1F631; [0D 30 3D, 05, 05]
-1F672; [0D 2C DD, 05, 05]
+1F632; [0D 30 44, 05, 05]
-1F673; [0D 2C E4, 05, 05]
+1F633; [0D 30 4B, 05, 05]
-1F674; [0D 2C EB, 05, 05]
+1F634; [0D 30 52, 05, 05]
-1F675; [0D 2C F2, 05, 05]
+1F635; [0D 30 59, 05, 05]
-1F676; [0D 2C F9, 05, 05]
+1F636; [0D 30 60, 05, 05]
-1F677; [0D 2D 02, 05, 05]
+1F637; [0D 30 67, 05, 05]
-1F678; [0D 2D 09, 05, 05]
+1F638; [0D 30 6E, 05, 05]
-1F679; [0D 2D 10, 05, 05]
+1F639; [0D 30 75, 05, 05]
-1F67A; [0D 2D 17, 05, 05]
+1F63A; [0D 30 7C, 05, 05]
-1F67B; [0D 2D 1E, 05, 05]
+1F63B; [0D 30 83, 05, 05]
-1F67C; [0D 2D 25, 05, 05]
+1F63C; [0D 30 8A, 05, 05]
-1F67D; [0D 2D 2C, 05, 05]
+1F63D; [0D 30 91, 05, 05]
-1F67E; [0D 2D 33, 05, 05]
+1F63E; [0D 30 98, 05, 05]
-1F67F; [0D 2D 3A, 05, 05]
+1F63F; [0D 30 9F, 05, 05]
-1F680; [0D 2D 41, 05, 05]
+1F640; [0D 30 A6, 05, 05]
-1F681; [0D 2D 48, 05, 05]
+1F641; [0D 30 AD, 05, 05]
-1F682; [0D 2D 4F, 05, 05]
+1F642; [0D 30 B4, 05, 05]
-1F683; [0D 2D 56, 05, 05]
+1F643; [0D 30 BB, 05, 05]
-1F684; [0D 2D 5D, 05, 05]
+1F644; [0D 30 C2, 05, 05]
-1F685; [0D 2D 64, 05, 05]
+1F645; [0D 30 C9, 05, 05]
-1F686; [0D 2D 6B, 05, 05]
+1F646; [0D 30 D0, 05, 05]
-1F687; [0D 2D 72, 05, 05]
+1F647; [0D 30 D7, 05, 05]
-1F688; [0D 2D 79, 05, 05]
+1F648; [0D 30 DE, 05, 05]
-1F689; [0D 2D 80, 05, 05]
+1F649; [0D 30 E5, 05, 05]
-1F68A; [0D 2D 87, 05, 05]
+1F64A; [0D 30 EC, 05, 05]
-1F68B; [0D 2D 8E, 05, 05]
+1F64B; [0D 30 F3, 05, 05]
-1F68C; [0D 2D 95, 05, 05]
+1F64C; [0D 30 FA, 05, 05]
-1F68D; [0D 2D 9C, 05, 05]
+1F64D; [0D 31 03, 05, 05]
-1F68E; [0D 2D A3, 05, 05]
+1F64E; [0D 31 0A, 05, 05]
-1F68F; [0D 2D AA, 05, 05]
+1F64F; [0D 31 11, 05, 05]
-1F690; [0D 2D B1, 05, 05]
+1F650; [0D 31 18, 05, 05]
-1F691; [0D 2D B8, 05, 05]
+1F651; [0D 31 1F, 05, 05]
-1F692; [0D 2D BF, 05, 05]
+1F652; [0D 31 26, 05, 05]
-1F693; [0D 2D C6, 05, 05]
+1F653; [0D 31 2D, 05, 05]
-1F694; [0D 2D CD, 05, 05]
+1F654; [0D 31 34, 05, 05]
-1F695; [0D 2D D4, 05, 05]
+1F655; [0D 31 3B, 05, 05]
-1F696; [0D 2D DB, 05, 05]
+1F656; [0D 31 42, 05, 05]
-1F697; [0D 2D E2, 05, 05]
+1F657; [0D 31 49, 05, 05]
-1F698; [0D 2D E9, 05, 05]
+1F658; [0D 31 50, 05, 05]
-1F699; [0D 2D F0, 05, 05]
+1F659; [0D 31 57, 05, 05]
-1F69A; [0D 2D F7, 05, 05]
+1F65A; [0D 31 5E, 05, 05]
-1F69B; [0D 2D FE, 05, 05]
+1F65B; [0D 31 65, 05, 05]
-1F69C; [0D 2E 07, 05, 05]
+1F65C; [0D 31 6C, 05, 05]
-1F69D; [0D 2E 0E, 05, 05]
+1F65D; [0D 31 73, 05, 05]
-1F69E; [0D 2E 15, 05, 05]
+1F65E; [0D 31 7A, 05, 05]
-1F69F; [0D 2E 1C, 05, 05]
+1F65F; [0D 31 81, 05, 05]
-1F6A0; [0D 2E 23, 05, 05]
+1F660; [0D 31 88, 05, 05]
-1F6A1; [0D 2E 2A, 05, 05]
+1F661; [0D 31 8F, 05, 05]
-1F6A2; [0D 2E 31, 05, 05]
+1F662; [0D 31 96, 05, 05]
-1F6A3; [0D 2E 38, 05, 05]
+1F663; [0D 31 9D, 05, 05]
-1F6A4; [0D 2E 3F, 05, 05]
+1F664; [0D 31 A4, 05, 05]
-1F6A5; [0D 2E 46, 05, 05]
+1F665; [0D 31 AB, 05, 05]
-1F6A6; [0D 2E 4D, 05, 05]
+1F666; [0D 31 B2, 05, 05]
-1F6A7; [0D 2E 54, 05, 05]
+1F667; [0D 31 B9, 05, 05]
-1F6A8; [0D 2E 5B, 05, 05]
+1F668; [0D 31 C0, 05, 05]
-1F6A9; [0D 2E 62, 05, 05]
+1F669; [0D 31 C7, 05, 05]
-1F6AA; [0D 2E 69, 05, 05]
+1F66A; [0D 31 CE, 05, 05]
-1F6AB; [0D 2E 70, 05, 05]
+1F66B; [0D 31 D5, 05, 05]
-1F6AC; [0D 2E 77, 05, 05]
+1F66C; [0D 31 DC, 05, 05]
-1F6AD; [0D 2E 7E, 05, 05]
+1F66D; [0D 31 E3, 05, 05]
-1F6AE; [0D 2E 85, 05, 05]
+1F66E; [0D 31 EA, 05, 05]
-1F6AF; [0D 2E 8C, 05, 05]
+1F66F; [0D 31 F1, 05, 05]
-1F6B0; [0D 2E 93, 05, 05]
+1F670; [0D 31 F8, 05, 05]
-1F6B1; [0D 2E 9A, 05, 05]
+1F671; [0D 31 FF, 05, 05]
-1F6B2; [0D 2E A1, 05, 05]
+1F672; [0D 32 08, 05, 05]
-1F6B3; [0D 2E A8, 05, 05]
+1F673; [0D 32 0F, 05, 05]
-1F6B4; [0D 2E AF, 05, 05]
+1F674; [0D 32 16, 05, 05]
-1F6B5; [0D 2E B6, 05, 05]
+1F675; [0D 32 1D, 05, 05]
-1F6B6; [0D 2E BD, 05, 05]
+1F676; [0D 32 24, 05, 05]
-1F6B7; [0D 2E C4, 05, 05]
+1F677; [0D 32 2B, 05, 05]
-1F6B8; [0D 2E CB, 05, 05]
+1F678; [0D 32 32, 05, 05]
-1F6B9; [0D 2E D2, 05, 05]
+1F679; [0D 32 39, 05, 05]
-1F6BA; [0D 2E D9, 05, 05]
+1F67A; [0D 32 40, 05, 05]
-1F6BB; [0D 2E E0, 05, 05]
+1F67B; [0D 32 47, 05, 05]
-1F6BC; [0D 2E E7, 05, 05]
+1F67C; [0D 32 4E, 05, 05]
-1F6BD; [0D 2E EE, 05, 05]
+1F67D; [0D 32 55, 05, 05]
-1F6BE; [0D 2E F5, 05, 05]
+1F67E; [0D 32 5C, 05, 05]
-1F6BF; [0D 2E FC, 05, 05]
+1F67F; [0D 32 63, 05, 05]
-1F6C0; [0D 2F 05, 05, 05]
+1F680; [0D 32 6A, 05, 05]
-1F6C1; [0D 2F 0C, 05, 05]
+1F681; [0D 32 71, 05, 05]
-1F6C2; [0D 2F 13, 05, 05]
+1F682; [0D 32 78, 05, 05]
-1F6C3; [0D 2F 1A, 05, 05]
+1F683; [0D 32 7F, 05, 05]
-1F6C4; [0D 2F 21, 05, 05]
+1F684; [0D 32 86, 05, 05]
-1F6C5; [0D 2F 28, 05, 05]
+1F685; [0D 32 8D, 05, 05]
-1F6C6; [0D 2F 2F, 05, 05]
+1F686; [0D 32 94, 05, 05]
-1F6C7; [0D 2F 36, 05, 05]
+1F687; [0D 32 9B, 05, 05]
-1F6C8; [0D 2F 3D, 05, 05]
+1F688; [0D 32 A2, 05, 05]
-1F6C9; [0D 2F 44, 05, 05]
+1F689; [0D 32 A9, 05, 05]
-1F6CA; [0D 2F 4B, 05, 05]
+1F68A; [0D 32 B0, 05, 05]
-1F6CB; [0D 2F 52, 05, 05]
+1F68B; [0D 32 B7, 05, 05]
-1F6CC; [0D 2F 59, 05, 05]
+1F68C; [0D 32 BE, 05, 05]
-1F6CD; [0D 2F 60, 05, 05]
+1F68D; [0D 32 C5, 05, 05]
-1F6CE; [0D 2F 67, 05, 05]
+1F68E; [0D 32 CC, 05, 05]
-1F6CF; [0D 2F 6E, 05, 05]
+1F68F; [0D 32 D3, 05, 05]
-1F6D0; [0D 2F 75, 05, 05]
+1F690; [0D 32 DA, 05, 05]
-1F6D1; [0D 2F 7C, 05, 05]
+1F691; [0D 32 E1, 05, 05]
-1F6D2; [0D 2F 83, 05, 05]
+1F692; [0D 32 E8, 05, 05]
-1F6D3; [0D 2F 8A, 05, 05]
+1F693; [0D 32 EF, 05, 05]
-1F6D4; [0D 2F 91, 05, 05]
+1F694; [0D 32 F6, 05, 05]
-1F6D5; [0D 2F 98, 05, 05]
+1F695; [0D 32 FD, 05, 05]
-1F6D6; [0D 2F 9F, 05, 05]
+1F696; [0D 33 06, 05, 05]
-1F6D7; [0D 2F A6, 05, 05]
+1F697; [0D 33 0D, 05, 05]
-1F6E0; [0D 2F AD, 05, 05]
+1F698; [0D 33 14, 05, 05]
-1F6E1; [0D 2F B4, 05, 05]
+1F699; [0D 33 1B, 05, 05]
-1F6E2; [0D 2F BB, 05, 05]
+1F69A; [0D 33 22, 05, 05]
-1F6E3; [0D 2F C2, 05, 05]
+1F69B; [0D 33 29, 05, 05]
-1F6E4; [0D 2F C9, 05, 05]
+1F69C; [0D 33 30, 05, 05]
-1F6E5; [0D 2F D0, 05, 05]
+1F69D; [0D 33 37, 05, 05]
-1F6E6; [0D 2F D7, 05, 05]
+1F69E; [0D 33 3E, 05, 05]
-1F6E7; [0D 2F DE, 05, 05]
+1F69F; [0D 33 45, 05, 05]
-1F6E8; [0D 2F E5, 05, 05]
+1F6A0; [0D 33 4C, 05, 05]
-1F6E9; [0D 2F EC, 05, 05]
+1F6A1; [0D 33 53, 05, 05]
-1F6EA; [0D 2F F3, 05, 05]
+1F6A2; [0D 33 5A, 05, 05]
-1F6EB; [0D 2F FA, 05, 05]
+1F6A3; [0D 33 61, 05, 05]
-1F6EC; [0D 30 03, 05, 05]
+1F6A4; [0D 33 68, 05, 05]
-1F6F0; [0D 30 0A, 05, 05]
+1F6A5; [0D 33 6F, 05, 05]
-1F6F1; [0D 30 11, 05, 05]
+1F6A6; [0D 33 76, 05, 05]
-1F6F2; [0D 30 18, 05, 05]
+1F6A7; [0D 33 7D, 05, 05]
-1F6F3; [0D 30 1F, 05, 05]
+1F6A8; [0D 33 84, 05, 05]
-1F6F4; [0D 30 26, 05, 05]
+1F6A9; [0D 33 8B, 05, 05]
-1F6F5; [0D 30 2D, 05, 05]
+1F6AA; [0D 33 92, 05, 05]
-1F6F6; [0D 30 34, 05, 05]
+1F6AB; [0D 33 99, 05, 05]
-1F6F7; [0D 30 3B, 05, 05]
+1F6AC; [0D 33 A0, 05, 05]
-1F6F8; [0D 30 42, 05, 05]
+1F6AD; [0D 33 A7, 05, 05]
-1F6F9; [0D 30 49, 05, 05]
+1F6AE; [0D 33 AE, 05, 05]
-1F6FA; [0D 30 50, 05, 05]
+1F6AF; [0D 33 B5, 05, 05]
-1F6FB; [0D 30 57, 05, 05]
+1F6B0; [0D 33 BC, 05, 05]
-1F6FC; [0D 30 5E, 05, 05]
+1F6B1; [0D 33 C3, 05, 05]
-1F700; [0D 30 65, 05, 05]
+1F6B2; [0D 33 CA, 05, 05]
-1F701; [0D 30 6C, 05, 05]
+1F6B3; [0D 33 D1, 05, 05]
-1F702; [0D 30 73, 05, 05]
+1F6B4; [0D 33 D8, 05, 05]
-1F703; [0D 30 7A, 05, 05]
+1F6B5; [0D 33 DF, 05, 05]
-1F704; [0D 30 81, 05, 05]
+1F6B6; [0D 33 E6, 05, 05]
-1F705; [0D 30 88, 05, 05]
+1F6B7; [0D 33 ED, 05, 05]
-1F706; [0D 30 8F, 05, 05]
+1F6B8; [0D 33 F4, 05, 05]
-1F707; [0D 30 96, 05, 05]
+1F6B9; [0D 33 FB, 05, 05]
-1F708; [0D 30 9D, 05, 05]
+1F6BA; [0D 34 04, 05, 05]
-1F709; [0D 30 A4, 05, 05]
+1F6BB; [0D 34 0B, 05, 05]
-1F70A; [0D 30 AB, 05, 05]
+1F6BC; [0D 34 12, 05, 05]
-1F70B; [0D 30 B2, 05, 05]
+1F6BD; [0D 34 19, 05, 05]
-1F70C; [0D 30 B9, 05, 05]
+1F6BE; [0D 34 20, 05, 05]
-1F70D; [0D 30 C0, 05, 05]
+1F6BF; [0D 34 27, 05, 05]
-1F70E; [0D 30 C7, 05, 05]
+1F6C0; [0D 34 2E, 05, 05]
-1F70F; [0D 30 CE, 05, 05]
+1F6C1; [0D 34 35, 05, 05]
-1F710; [0D 30 D5, 05, 05]
+1F6C2; [0D 34 3C, 05, 05]
-1F711; [0D 30 DC, 05, 05]
+1F6C3; [0D 34 43, 05, 05]
-1F712; [0D 30 E3, 05, 05]
+1F6C4; [0D 34 4A, 05, 05]
-1F713; [0D 30 EA, 05, 05]
+1F6C5; [0D 34 51, 05, 05]
-1F714; [0D 30 F1, 05, 05]
+1F6C6; [0D 34 58, 05, 05]
-1F715; [0D 30 F8, 05, 05]
+1F6C7; [0D 34 5F, 05, 05]
-1F716; [0D 30 FF, 05, 05]
+1F6C8; [0D 34 66, 05, 05]
-1F717; [0D 31 08, 05, 05]
+1F6C9; [0D 34 6D, 05, 05]
-1F718; [0D 31 0F, 05, 05]
+1F6CA; [0D 34 74, 05, 05]
-1F719; [0D 31 16, 05, 05]
+1F6CB; [0D 34 7B, 05, 05]
-1F71A; [0D 31 1D, 05, 05]
+1F6CC; [0D 34 82, 05, 05]
-1F71B; [0D 31 24, 05, 05]
+1F6CD; [0D 34 89, 05, 05]
-1F71C; [0D 31 2B, 05, 05]
+1F6CE; [0D 34 90, 05, 05]
-1F71D; [0D 31 32, 05, 05]
+1F6CF; [0D 34 97, 05, 05]
-1F71E; [0D 31 39, 05, 05]
+1F6D0; [0D 34 9E, 05, 05]
-1F71F; [0D 31 40, 05, 05]
+1F6D1; [0D 34 A5, 05, 05]
-1F720; [0D 31 47, 05, 05]
+1F6D2; [0D 34 AC, 05, 05]
-1F721; [0D 31 4E, 05, 05]
+1F6D3; [0D 34 B3, 05, 05]
-1F722; [0D 31 55, 05, 05]
+1F6D4; [0D 34 BA, 05, 05]
-1F723; [0D 31 5C, 05, 05]
+1F6D5; [0D 34 C1, 05, 05]
-1F724; [0D 31 63, 05, 05]
+1F6D6; [0D 34 C8, 05, 05]
-1F725; [0D 31 6A, 05, 05]
+1F6D7; [0D 34 CF, 05, 05]
-1F726; [0D 31 71, 05, 05]
+1F6DD; [0D 34 D6, 05, 05]
-1F727; [0D 31 78, 05, 05]
+1F6DE; [0D 34 DD, 05, 05]
-1F728; [0D 31 7F, 05, 05]
+1F6DF; [0D 34 E4, 05, 05]
-1F729; [0D 31 86, 05, 05]
+1F6E0; [0D 34 EB, 05, 05]
-1F72A; [0D 31 8D, 05, 05]
+1F6E1; [0D 34 F2, 05, 05]
-1F72B; [0D 31 94, 05, 05]
+1F6E2; [0D 34 F9, 05, 05]
-1F72C; [0D 31 9B, 05, 05]
+1F6E3; [0D 35 02, 05, 05]
-1F72D; [0D 31 A2, 05, 05]
+1F6E4; [0D 35 09, 05, 05]
-1F72E; [0D 31 A9, 05, 05]
+1F6E5; [0D 35 10, 05, 05]
-1F72F; [0D 31 B0, 05, 05]
+1F6E6; [0D 35 17, 05, 05]
-1F730; [0D 31 B7, 05, 05]
+1F6E7; [0D 35 1E, 05, 05]
-1F731; [0D 31 BE, 05, 05]
+1F6E8; [0D 35 25, 05, 05]
-1F732; [0D 31 C5, 05, 05]
+1F6E9; [0D 35 2C, 05, 05]
-1F733; [0D 31 CC, 05, 05]
+1F6EA; [0D 35 33, 05, 05]
-1F734; [0D 31 D3, 05, 05]
+1F6EB; [0D 35 3A, 05, 05]
-1F735; [0D 31 DA, 05, 05]
+1F6EC; [0D 35 41, 05, 05]
-1F736; [0D 31 E1, 05, 05]
+1F6F0; [0D 35 48, 05, 05]
-1F737; [0D 31 E8, 05, 05]
+1F6F1; [0D 35 4F, 05, 05]
-1F738; [0D 31 EF, 05, 05]
+1F6F2; [0D 35 56, 05, 05]
-1F739; [0D 31 F6, 05, 05]
+1F6F3; [0D 35 5D, 05, 05]
-1F73A; [0D 31 FD, 05, 05]
+1F6F4; [0D 35 64, 05, 05]
-1F73B; [0D 32 06, 05, 05]
+1F6F5; [0D 35 6B, 05, 05]
-1F73C; [0D 32 0D, 05, 05]
+1F6F6; [0D 35 72, 05, 05]
-1F73D; [0D 32 14, 05, 05]
+1F6F7; [0D 35 79, 05, 05]
-1F73E; [0D 32 1B, 05, 05]
+1F6F8; [0D 35 80, 05, 05]
-1F73F; [0D 32 22, 05, 05]
+1F6F9; [0D 35 87, 05, 05]
-1F740; [0D 32 29, 05, 05]
+1F6FA; [0D 35 8E, 05, 05]
-1F741; [0D 32 30, 05, 05]
+1F6FB; [0D 35 95, 05, 05]
-1F742; [0D 32 37, 05, 05]
+1F6FC; [0D 35 9C, 05, 05]
-1F743; [0D 32 3E, 05, 05]
+1F700; [0D 35 A3, 05, 05]
-1F744; [0D 32 45, 05, 05]
+1F701; [0D 35 AA, 05, 05]
-1F745; [0D 32 4C, 05, 05]
+1F702; [0D 35 B1, 05, 05]
-1F746; [0D 32 53, 05, 05]
+1F703; [0D 35 B8, 05, 05]
-1F747; [0D 32 5A, 05, 05]
+1F704; [0D 35 BF, 05, 05]
-1F748; [0D 32 61, 05, 05]
+1F705; [0D 35 C6, 05, 05]
-1F749; [0D 32 68, 05, 05]
+1F706; [0D 35 CD, 05, 05]
-1F74A; [0D 32 6F, 05, 05]
+1F707; [0D 35 D4, 05, 05]
-1F74B; [0D 32 76, 05, 05]
+1F708; [0D 35 DB, 05, 05]
-1F74C; [0D 32 7D, 05, 05]
+1F709; [0D 35 E2, 05, 05]
-1F74D; [0D 32 84, 05, 05]
+1F70A; [0D 35 E9, 05, 05]
-1F74E; [0D 32 8B, 05, 05]
+1F70B; [0D 35 F0, 05, 05]
-1F74F; [0D 32 92, 05, 05]
+1F70C; [0D 35 F7, 05, 05]
-1F750; [0D 32 99, 05, 05]
+1F70D; [0D 35 FE, 05, 05]
-1F751; [0D 32 A0, 05, 05]
+1F70E; [0D 36 07, 05, 05]
-1F752; [0D 32 A7, 05, 05]
+1F70F; [0D 36 0E, 05, 05]
-1F753; [0D 32 AE, 05, 05]
+1F710; [0D 36 15, 05, 05]
-1F754; [0D 32 B5, 05, 05]
+1F711; [0D 36 1C, 05, 05]
-1F755; [0D 32 BC, 05, 05]
+1F712; [0D 36 23, 05, 05]
-1F756; [0D 32 C3, 05, 05]
+1F713; [0D 36 2A, 05, 05]
-1F757; [0D 32 CA, 05, 05]
+1F714; [0D 36 31, 05, 05]
-1F758; [0D 32 D1, 05, 05]
+1F715; [0D 36 38, 05, 05]
-1F759; [0D 32 D8, 05, 05]
+1F716; [0D 36 3F, 05, 05]
-1F75A; [0D 32 DF, 05, 05]
+1F717; [0D 36 46, 05, 05]
-1F75B; [0D 32 E6, 05, 05]
+1F718; [0D 36 4D, 05, 05]
-1F75C; [0D 32 ED, 05, 05]
+1F719; [0D 36 54, 05, 05]
-1F75D; [0D 32 F4, 05, 05]
+1F71A; [0D 36 5B, 05, 05]
-1F75E; [0D 32 FB, 05, 05]
+1F71B; [0D 36 62, 05, 05]
-1F75F; [0D 33 04, 05, 05]
+1F71C; [0D 36 69, 05, 05]
-1F760; [0D 33 0B, 05, 05]
+1F71D; [0D 36 70, 05, 05]
-1F761; [0D 33 12, 05, 05]
+1F71E; [0D 36 77, 05, 05]
-1F762; [0D 33 19, 05, 05]
+1F71F; [0D 36 7E, 05, 05]
-1F763; [0D 33 20, 05, 05]
+1F720; [0D 36 85, 05, 05]
-1F764; [0D 33 27, 05, 05]
+1F721; [0D 36 8C, 05, 05]
-1F765; [0D 33 2E, 05, 05]
+1F722; [0D 36 93, 05, 05]
-1F766; [0D 33 35, 05, 05]
+1F723; [0D 36 9A, 05, 05]
-1F767; [0D 33 3C, 05, 05]
+1F724; [0D 36 A1, 05, 05]
-1F768; [0D 33 43, 05, 05]
+1F725; [0D 36 A8, 05, 05]
-1F769; [0D 33 4A, 05, 05]
+1F726; [0D 36 AF, 05, 05]
-1F76A; [0D 33 51, 05, 05]
+1F727; [0D 36 B6, 05, 05]
-1F76B; [0D 33 58, 05, 05]
+1F728; [0D 36 BD, 05, 05]
-1F76C; [0D 33 5F, 05, 05]
+1F729; [0D 36 C4, 05, 05]
-1F76D; [0D 33 66, 05, 05]
+1F72A; [0D 36 CB, 05, 05]
-1F76E; [0D 33 6D, 05, 05]
+1F72B; [0D 36 D2, 05, 05]
-1F76F; [0D 33 74, 05, 05]
+1F72C; [0D 36 D9, 05, 05]
-1F770; [0D 33 7B, 05, 05]
+1F72D; [0D 36 E0, 05, 05]
-1F771; [0D 33 82, 05, 05]
+1F72E; [0D 36 E7, 05, 05]
-1F772; [0D 33 89, 05, 05]
+1F72F; [0D 36 EE, 05, 05]
-1F773; [0D 33 90, 05, 05]
+1F730; [0D 36 F5, 05, 05]
-1F780; [0D 33 97, 05, 05]
+1F731; [0D 36 FC, 05, 05]
-1F781; [0D 33 9E, 05, 05]
+1F732; [0D 37 05, 05, 05]
-1F782; [0D 33 A5, 05, 05]
+1F733; [0D 37 0C, 05, 05]
-1F783; [0D 33 AC, 05, 05]
+1F734; [0D 37 13, 05, 05]
-1F784; [0D 33 B3, 05, 05]
+1F735; [0D 37 1A, 05, 05]
-1F785; [0D 33 BA, 05, 05]
+1F736; [0D 37 21, 05, 05]
-1F786; [0D 33 C1, 05, 05]
+1F737; [0D 37 28, 05, 05]
-1F787; [0D 33 C8, 05, 05]
+1F738; [0D 37 2F, 05, 05]
-1F788; [0D 33 CF, 05, 05]
+1F739; [0D 37 36, 05, 05]
-1F789; [0D 33 D6, 05, 05]
+1F73A; [0D 37 3D, 05, 05]
-1F78A; [0D 33 DD, 05, 05]
+1F73B; [0D 37 44, 05, 05]
-1F78B; [0D 33 E4, 05, 05]
+1F73C; [0D 37 4B, 05, 05]
-1F78C; [0D 33 EB, 05, 05]
+1F73D; [0D 37 52, 05, 05]
-1F78D; [0D 33 F2, 05, 05]
+1F73E; [0D 37 59, 05, 05]
-1F78E; [0D 33 F9, 05, 05]
+1F73F; [0D 37 60, 05, 05]
-1F78F; [0D 34 02, 05, 05]
+1F740; [0D 37 67, 05, 05]
-1F790; [0D 34 09, 05, 05]
+1F741; [0D 37 6E, 05, 05]
-1F791; [0D 34 10, 05, 05]
+1F742; [0D 37 75, 05, 05]
-1F792; [0D 34 17, 05, 05]
+1F743; [0D 37 7C, 05, 05]
-1F793; [0D 34 1E, 05, 05]
+1F744; [0D 37 83, 05, 05]
-1F794; [0D 34 25, 05, 05]
+1F745; [0D 37 8A, 05, 05]
-1F795; [0D 34 2C, 05, 05]
+1F746; [0D 37 91, 05, 05]
-1F796; [0D 34 33, 05, 05]
+1F747; [0D 37 98, 05, 05]
-1F797; [0D 34 3A, 05, 05]
+1F748; [0D 37 9F, 05, 05]
-1F798; [0D 34 41, 05, 05]
+1F749; [0D 37 A6, 05, 05]
-1F799; [0D 34 48, 05, 05]
+1F74A; [0D 37 AD, 05, 05]
-1F79A; [0D 34 4F, 05, 05]
+1F74B; [0D 37 B4, 05, 05]
-1F79B; [0D 34 56, 05, 05]
+1F74C; [0D 37 BB, 05, 05]
-1F79C; [0D 34 5D, 05, 05]
+1F74D; [0D 37 C2, 05, 05]
-1F79D; [0D 34 64, 05, 05]
+1F74E; [0D 37 C9, 05, 05]
-1F79E; [0D 34 6B, 05, 05]
+1F74F; [0D 37 D0, 05, 05]
-1F79F; [0D 34 72, 05, 05]
+1F750; [0D 37 D7, 05, 05]
-1F7A0; [0D 34 79, 05, 05]
+1F751; [0D 37 DE, 05, 05]
-1F7A1; [0D 34 80, 05, 05]
+1F752; [0D 37 E5, 05, 05]
-1F7A2; [0D 34 87, 05, 05]
+1F753; [0D 37 EC, 05, 05]
-1F7A3; [0D 34 8E, 05, 05]
+1F754; [0D 37 F3, 05, 05]
-1F7A4; [0D 34 95, 05, 05]
+1F755; [0D 37 FA, 05, 05]
-1F7A5; [0D 34 9C, 05, 05]
+1F756; [0D 38 03, 05, 05]
-1F7A6; [0D 34 A3, 05, 05]
+1F757; [0D 38 0A, 05, 05]
-1F7A7; [0D 34 AA, 05, 05]
+1F758; [0D 38 11, 05, 05]
-1F7A8; [0D 34 B1, 05, 05]
+1F759; [0D 38 18, 05, 05]
-1F7A9; [0D 34 B8, 05, 05]
+1F75A; [0D 38 1F, 05, 05]
-1F7AA; [0D 34 BF, 05, 05]
+1F75B; [0D 38 26, 05, 05]
-1F7AB; [0D 34 C6, 05, 05]
+1F75C; [0D 38 2D, 05, 05]
-1F7AC; [0D 34 CD, 05, 05]
+1F75D; [0D 38 34, 05, 05]
-1F7AD; [0D 34 D4, 05, 05]
+1F75E; [0D 38 3B, 05, 05]
-1F7AE; [0D 34 DB, 05, 05]
+1F75F; [0D 38 42, 05, 05]
-1F7AF; [0D 34 E2, 05, 05]
+1F760; [0D 38 49, 05, 05]
-1F7B0; [0D 34 E9, 05, 05]
+1F761; [0D 38 50, 05, 05]
-1F7B1; [0D 34 F0, 05, 05]
+1F762; [0D 38 57, 05, 05]
-1F7B2; [0D 34 F7, 05, 05]
+1F763; [0D 38 5E, 05, 05]
-1F7B3; [0D 34 FE, 05, 05]
+1F764; [0D 38 65, 05, 05]
-1F7B4; [0D 35 07, 05, 05]
+1F765; [0D 38 6C, 05, 05]
-1F7B5; [0D 35 0E, 05, 05]
+1F766; [0D 38 73, 05, 05]
-1F7B6; [0D 35 15, 05, 05]
+1F767; [0D 38 7A, 05, 05]
-1F7B7; [0D 35 1C, 05, 05]
+1F768; [0D 38 81, 05, 05]
-1F7B8; [0D 35 23, 05, 05]
+1F769; [0D 38 88, 05, 05]
-1F7B9; [0D 35 2A, 05, 05]
+1F76A; [0D 38 8F, 05, 05]
-1F7BA; [0D 35 31, 05, 05]
+1F76B; [0D 38 96, 05, 05]
-1F7BB; [0D 35 38, 05, 05]
+1F76C; [0D 38 9D, 05, 05]
-1F7BC; [0D 35 3F, 05, 05]
+1F76D; [0D 38 A4, 05, 05]
-1F7BD; [0D 35 46, 05, 05]
+1F76E; [0D 38 AB, 05, 05]
-1F7BE; [0D 35 4D, 05, 05]
+1F76F; [0D 38 B2, 05, 05]
-1F7BF; [0D 35 54, 05, 05]
+1F770; [0D 38 B9, 05, 05]
-1F7C0; [0D 35 5B, 05, 05]
+1F771; [0D 38 C0, 05, 05]
-1F7C1; [0D 35 62, 05, 05]
+1F772; [0D 38 C7, 05, 05]
-1F7C2; [0D 35 69, 05, 05]
+1F773; [0D 38 CE, 05, 05]
-1F7C3; [0D 35 70, 05, 05]
+1F780; [0D 38 D5, 05, 05]
-1F7C4; [0D 35 77, 05, 05]
+1F781; [0D 38 DC, 05, 05]
-1F7C5; [0D 35 7E, 05, 05]
+1F782; [0D 38 E3, 05, 05]
-1F7C6; [0D 35 85, 05, 05]
+1F783; [0D 38 EA, 05, 05]
-1F7C7; [0D 35 8C, 05, 05]
+1F784; [0D 38 F1, 05, 05]
-1F7C8; [0D 35 93, 05, 05]
+1F785; [0D 38 F8, 05, 05]
-1F7C9; [0D 35 9A, 05, 05]
+1F786; [0D 38 FF, 05, 05]
-1F7CA; [0D 35 A1, 05, 05]
+1F787; [0D 39 08, 05, 05]
-1F7CB; [0D 35 A8, 05, 05]
+1F788; [0D 39 0F, 05, 05]
-1F7CC; [0D 35 AF, 05, 05]
+1F789; [0D 39 16, 05, 05]
-1F7CD; [0D 35 B6, 05, 05]
+1F78A; [0D 39 1D, 05, 05]
-1F7CE; [0D 35 BD, 05, 05]
+1F78B; [0D 39 24, 05, 05]
-1F7CF; [0D 35 C4, 05, 05]
+1F78C; [0D 39 2B, 05, 05]
-1F7D0; [0D 35 CB, 05, 05]
+1F78D; [0D 39 32, 05, 05]
-1F7D1; [0D 35 D2, 05, 05]
+1F78E; [0D 39 39, 05, 05]
-1F7D2; [0D 35 D9, 05, 05]
+1F78F; [0D 39 40, 05, 05]
-1F7D3; [0D 35 E0, 05, 05]
+1F790; [0D 39 47, 05, 05]
-1F7D4; [0D 35 E7, 05, 05]
+1F791; [0D 39 4E, 05, 05]
-1F7D5; [0D 35 EE, 05, 05]
+1F792; [0D 39 55, 05, 05]
-1F7D6; [0D 35 F5, 05, 05]
+1F793; [0D 39 5C, 05, 05]
-1F7D7; [0D 35 FC, 05, 05]
+1F794; [0D 39 63, 05, 05]
-1F7D8; [0D 36 05, 05, 05]
+1F795; [0D 39 6A, 05, 05]
-1F7E0; [0D 36 0C, 05, 05]
+1F796; [0D 39 71, 05, 05]
-1F7E1; [0D 36 13, 05, 05]
+1F797; [0D 39 78, 05, 05]
-1F7E2; [0D 36 1A, 05, 05]
+1F798; [0D 39 7F, 05, 05]
-1F7E3; [0D 36 21, 05, 05]
+1F799; [0D 39 86, 05, 05]
-1F7E4; [0D 36 28, 05, 05]
+1F79A; [0D 39 8D, 05, 05]
-1F7E5; [0D 36 2F, 05, 05]
+1F79B; [0D 39 94, 05, 05]
-1F7E6; [0D 36 36, 05, 05]
+1F79C; [0D 39 9B, 05, 05]
-1F7E7; [0D 36 3D, 05, 05]
+1F79D; [0D 39 A2, 05, 05]
-1F7E8; [0D 36 44, 05, 05]
+1F79E; [0D 39 A9, 05, 05]
-1F7E9; [0D 36 4B, 05, 05]
+1F79F; [0D 39 B0, 05, 05]
-1F7EA; [0D 36 52, 05, 05]
+1F7A0; [0D 39 B7, 05, 05]
-1F7EB; [0D 36 59, 05, 05]
+1F7A1; [0D 39 BE, 05, 05]
-1F800; [0D 36 60, 05, 05]
+1F7A2; [0D 39 C5, 05, 05]
-1F801; [0D 36 67, 05, 05]
+1F7A3; [0D 39 CC, 05, 05]
-1F802; [0D 36 6E, 05, 05]
+1F7A4; [0D 39 D3, 05, 05]
-1F803; [0D 36 75, 05, 05]
+1F7A5; [0D 39 DA, 05, 05]
-1F804; [0D 36 7C, 05, 05]
+1F7A6; [0D 39 E1, 05, 05]
-1F805; [0D 36 83, 05, 05]
+1F7A7; [0D 39 E8, 05, 05]
-1F806; [0D 36 8A, 05, 05]
+1F7A8; [0D 39 EF, 05, 05]
-1F807; [0D 36 91, 05, 05]
+1F7A9; [0D 39 F6, 05, 05]
-1F808; [0D 36 98, 05, 05]
+1F7AA; [0D 39 FD, 05, 05]
-1F809; [0D 36 9F, 05, 05]
+1F7AB; [0D 3A 06, 05, 05]
-1F80A; [0D 36 A6, 05, 05]
+1F7AC; [0D 3A 0D, 05, 05]
-1F80B; [0D 36 AD, 05, 05]
+1F7AD; [0D 3A 14, 05, 05]
-1F810; [0D 36 B4, 05, 05]
+1F7AE; [0D 3A 1B, 05, 05]
-1F811; [0D 36 BB, 05, 05]
+1F7AF; [0D 3A 22, 05, 05]
-1F812; [0D 36 C2, 05, 05]
+1F7B0; [0D 3A 29, 05, 05]
-1F813; [0D 36 C9, 05, 05]
+1F7B1; [0D 3A 30, 05, 05]
-1F814; [0D 36 D0, 05, 05]
+1F7B2; [0D 3A 37, 05, 05]
-1F815; [0D 36 D7, 05, 05]
+1F7B3; [0D 3A 3E, 05, 05]
-1F816; [0D 36 DE, 05, 05]
+1F7B4; [0D 3A 45, 05, 05]
-1F817; [0D 36 E5, 05, 05]
+1F7B5; [0D 3A 4C, 05, 05]
-1F818; [0D 36 EC, 05, 05]
+1F7B6; [0D 3A 53, 05, 05]
-1F819; [0D 36 F3, 05, 05]
+1F7B7; [0D 3A 5A, 05, 05]
-1F81A; [0D 36 FA, 05, 05]
+1F7B8; [0D 3A 61, 05, 05]
-1F81B; [0D 37 03, 05, 05]
+1F7B9; [0D 3A 68, 05, 05]
-1F81C; [0D 37 0A, 05, 05]
+1F7BA; [0D 3A 6F, 05, 05]
-1F81D; [0D 37 11, 05, 05]
+1F7BB; [0D 3A 76, 05, 05]
-1F81E; [0D 37 18, 05, 05]
+1F7BC; [0D 3A 7D, 05, 05]
-1F81F; [0D 37 1F, 05, 05]
+1F7BD; [0D 3A 84, 05, 05]
-1F820; [0D 37 26, 05, 05]
+1F7BE; [0D 3A 8B, 05, 05]
-1F821; [0D 37 2D, 05, 05]
+1F7BF; [0D 3A 92, 05, 05]
-1F822; [0D 37 34, 05, 05]
+1F7C0; [0D 3A 99, 05, 05]
-1F823; [0D 37 3B, 05, 05]
+1F7C1; [0D 3A A0, 05, 05]
-1F824; [0D 37 42, 05, 05]
+1F7C2; [0D 3A A7, 05, 05]
-1F825; [0D 37 49, 05, 05]
+1F7C3; [0D 3A AE, 05, 05]
-1F826; [0D 37 50, 05, 05]
+1F7C4; [0D 3A B5, 05, 05]
-1F827; [0D 37 57, 05, 05]
+1F7C5; [0D 3A BC, 05, 05]
-1F828; [0D 37 5E, 05, 05]
+1F7C6; [0D 3A C3, 05, 05]
-1F829; [0D 37 65, 05, 05]
+1F7C7; [0D 3A CA, 05, 05]
-1F82A; [0D 37 6C, 05, 05]
+1F7C8; [0D 3A D1, 05, 05]
-1F82B; [0D 37 73, 05, 05]
+1F7C9; [0D 3A D8, 05, 05]
-1F82C; [0D 37 7A, 05, 05]
+1F7CA; [0D 3A DF, 05, 05]
-1F82D; [0D 37 81, 05, 05]
+1F7CB; [0D 3A E6, 05, 05]
-1F82E; [0D 37 88, 05, 05]
+1F7CC; [0D 3A ED, 05, 05]
-1F82F; [0D 37 8F, 05, 05]
+1F7CD; [0D 3A F4, 05, 05]
-1F830; [0D 37 96, 05, 05]
+1F7CE; [0D 3A FB, 05, 05]
-1F831; [0D 37 9D, 05, 05]
+1F7CF; [0D 3B 04, 05, 05]
-1F832; [0D 37 A4, 05, 05]
+1F7D0; [0D 3B 0B, 05, 05]
-1F833; [0D 37 AB, 05, 05]
+1F7D1; [0D 3B 12, 05, 05]
-1F834; [0D 37 B2, 05, 05]
+1F7D2; [0D 3B 19, 05, 05]
-1F835; [0D 37 B9, 05, 05]
+1F7D3; [0D 3B 20, 05, 05]
-1F836; [0D 37 C0, 05, 05]
+1F7D4; [0D 3B 27, 05, 05]
-1F837; [0D 37 C7, 05, 05]
+1F7D5; [0D 3B 2E, 05, 05]
-1F838; [0D 37 CE, 05, 05]
+1F7D6; [0D 3B 35, 05, 05]
-1F839; [0D 37 D5, 05, 05]
+1F7D7; [0D 3B 3C, 05, 05]
-1F83A; [0D 37 DC, 05, 05]
+1F7D8; [0D 3B 43, 05, 05]
-1F83B; [0D 37 E3, 05, 05]
+1F7E0; [0D 3B 4A, 05, 05]
-1F83C; [0D 37 EA, 05, 05]
+1F7E1; [0D 3B 51, 05, 05]
-1F83D; [0D 37 F1, 05, 05]
+1F7E2; [0D 3B 58, 05, 05]
-1F83E; [0D 37 F8, 05, 05]
+1F7E3; [0D 3B 5F, 05, 05]
-1F83F; [0D 37 FF, 05, 05]
+1F7E4; [0D 3B 66, 05, 05]
-1F840; [0D 38 08, 05, 05]
+1F7E5; [0D 3B 6D, 05, 05]
-1F841; [0D 38 0F, 05, 05]
+1F7E6; [0D 3B 74, 05, 05]
-1F842; [0D 38 16, 05, 05]
+1F7E7; [0D 3B 7B, 05, 05]
-1F843; [0D 38 1D, 05, 05]
+1F7E8; [0D 3B 82, 05, 05]
-1F844; [0D 38 24, 05, 05]
+1F7E9; [0D 3B 89, 05, 05]
-1F845; [0D 38 2B, 05, 05]
+1F7EA; [0D 3B 90, 05, 05]
-1F846; [0D 38 32, 05, 05]
+1F7EB; [0D 3B 97, 05, 05]
-1F847; [0D 38 39, 05, 05]
+1F7F0; [0D 3B 9E, 05, 05]
-1F850; [0D 38 40, 05, 05]
+1F800; [0D 3B A5, 05, 05]
-1F851; [0D 38 47, 05, 05]
+1F801; [0D 3B AC, 05, 05]
-1F852; [0D 38 4E, 05, 05]
+1F802; [0D 3B B3, 05, 05]
-1F853; [0D 38 55, 05, 05]
+1F803; [0D 3B BA, 05, 05]
-1F854; [0D 38 5C, 05, 05]
+1F804; [0D 3B C1, 05, 05]
-1F855; [0D 38 63, 05, 05]
+1F805; [0D 3B C8, 05, 05]
-1F856; [0D 38 6A, 05, 05]
+1F806; [0D 3B CF, 05, 05]
-1F857; [0D 38 71, 05, 05]
+1F807; [0D 3B D6, 05, 05]
-1F858; [0D 38 78, 05, 05]
+1F808; [0D 3B DD, 05, 05]
-1F859; [0D 38 7F, 05, 05]
+1F809; [0D 3B E4, 05, 05]
-1F860; [0D 38 86, 05, 05]
+1F80A; [0D 3B EB, 05, 05]
-1F861; [0D 38 8D, 05, 05]
+1F80B; [0D 3B F2, 05, 05]
-1F862; [0D 38 94, 05, 05]
+1F810; [0D 3B F9, 05, 05]
-1F863; [0D 38 9B, 05, 05]
+1F811; [0D 3C 02, 05, 05]
-1F864; [0D 38 A2, 05, 05]
+1F812; [0D 3C 09, 05, 05]
-1F865; [0D 38 A9, 05, 05]
+1F813; [0D 3C 10, 05, 05]
-1F866; [0D 38 B0, 05, 05]
+1F814; [0D 3C 17, 05, 05]
-1F867; [0D 38 B7, 05, 05]
+1F815; [0D 3C 1E, 05, 05]
-1F868; [0D 38 BE, 05, 05]
+1F816; [0D 3C 25, 05, 05]
-1F869; [0D 38 C5, 05, 05]
+1F817; [0D 3C 2C, 05, 05]
-1F86A; [0D 38 CC, 05, 05]
+1F818; [0D 3C 33, 05, 05]
-1F86B; [0D 38 D3, 05, 05]
+1F819; [0D 3C 3A, 05, 05]
-1F86C; [0D 38 DA, 05, 05]
+1F81A; [0D 3C 41, 05, 05]
-1F86D; [0D 38 E1, 05, 05]
+1F81B; [0D 3C 48, 05, 05]
-1F86E; [0D 38 E8, 05, 05]
+1F81C; [0D 3C 4F, 05, 05]
-1F86F; [0D 38 EF, 05, 05]
+1F81D; [0D 3C 56, 05, 05]
-1F870; [0D 38 F6, 05, 05]
+1F81E; [0D 3C 5D, 05, 05]
-1F871; [0D 38 FD, 05, 05]
+1F81F; [0D 3C 64, 05, 05]
-1F872; [0D 39 06, 05, 05]
+1F820; [0D 3C 6B, 05, 05]
-1F873; [0D 39 0D, 05, 05]
+1F821; [0D 3C 72, 05, 05]
-1F874; [0D 39 14, 05, 05]
+1F822; [0D 3C 79, 05, 05]
-1F875; [0D 39 1B, 05, 05]
+1F823; [0D 3C 80, 05, 05]
-1F876; [0D 39 22, 05, 05]
+1F824; [0D 3C 87, 05, 05]
-1F877; [0D 39 29, 05, 05]
+1F825; [0D 3C 8E, 05, 05]
-1F878; [0D 39 30, 05, 05]
+1F826; [0D 3C 95, 05, 05]
-1F879; [0D 39 37, 05, 05]
+1F827; [0D 3C 9C, 05, 05]
-1F87A; [0D 39 3E, 05, 05]
+1F828; [0D 3C A3, 05, 05]
-1F87B; [0D 39 45, 05, 05]
+1F829; [0D 3C AA, 05, 05]
-1F87C; [0D 39 4C, 05, 05]
+1F82A; [0D 3C B1, 05, 05]
-1F87D; [0D 39 53, 05, 05]
+1F82B; [0D 3C B8, 05, 05]
-1F87E; [0D 39 5A, 05, 05]
+1F82C; [0D 3C BF, 05, 05]
-1F87F; [0D 39 61, 05, 05]
+1F82D; [0D 3C C6, 05, 05]
-1F880; [0D 39 68, 05, 05]
+1F82E; [0D 3C CD, 05, 05]
-1F881; [0D 39 6F, 05, 05]
+1F82F; [0D 3C D4, 05, 05]
-1F882; [0D 39 76, 05, 05]
+1F830; [0D 3C DB, 05, 05]
-1F883; [0D 39 7D, 05, 05]
+1F831; [0D 3C E2, 05, 05]
-1F884; [0D 39 84, 05, 05]
+1F832; [0D 3C E9, 05, 05]
-1F885; [0D 39 8B, 05, 05]
+1F833; [0D 3C F0, 05, 05]
-1F886; [0D 39 92, 05, 05]
+1F834; [0D 3C F7, 05, 05]
-1F887; [0D 39 99, 05, 05]
+1F835; [0D 3C FE, 05, 05]
-1F890; [0D 39 A0, 05, 05]
+1F836; [0D 3D 07, 05, 05]
-1F891; [0D 39 A7, 05, 05]
+1F837; [0D 3D 0E, 05, 05]
-1F892; [0D 39 AE, 05, 05]
+1F838; [0D 3D 15, 05, 05]
-1F893; [0D 39 B5, 05, 05]
+1F839; [0D 3D 1C, 05, 05]
-1F894; [0D 39 BC, 05, 05]
+1F83A; [0D 3D 23, 05, 05]
-1F895; [0D 39 C3, 05, 05]
+1F83B; [0D 3D 2A, 05, 05]
-1F896; [0D 39 CA, 05, 05]
+1F83C; [0D 3D 31, 05, 05]
-1F897; [0D 39 D1, 05, 05]
+1F83D; [0D 3D 38, 05, 05]
-1F898; [0D 39 D8, 05, 05]
+1F83E; [0D 3D 3F, 05, 05]
-1F899; [0D 39 DF, 05, 05]
+1F83F; [0D 3D 46, 05, 05]
-1F89A; [0D 39 E6, 05, 05]
+1F840; [0D 3D 4D, 05, 05]
-1F89B; [0D 39 ED, 05, 05]
+1F841; [0D 3D 54, 05, 05]
-1F89C; [0D 39 F4, 05, 05]
+1F842; [0D 3D 5B, 05, 05]
-1F89D; [0D 39 FB, 05, 05]
+1F843; [0D 3D 62, 05, 05]
-1F89E; [0D 3A 04, 05, 05]
+1F844; [0D 3D 69, 05, 05]
-1F89F; [0D 3A 0B, 05, 05]
+1F845; [0D 3D 70, 05, 05]
-1F8A0; [0D 3A 12, 05, 05]
+1F846; [0D 3D 77, 05, 05]
-1F8A1; [0D 3A 19, 05, 05]
+1F847; [0D 3D 7E, 05, 05]
-1F8A2; [0D 3A 20, 05, 05]
+1F850; [0D 3D 85, 05, 05]
-1F8A3; [0D 3A 27, 05, 05]
+1F851; [0D 3D 8C, 05, 05]
-1F8A4; [0D 3A 2E, 05, 05]
+1F852; [0D 3D 93, 05, 05]
-1F8A5; [0D 3A 35, 05, 05]
+1F853; [0D 3D 9A, 05, 05]
-1F8A6; [0D 3A 3C, 05, 05]
+1F854; [0D 3D A1, 05, 05]
-1F8A7; [0D 3A 43, 05, 05]
+1F855; [0D 3D A8, 05, 05]
-1F8A8; [0D 3A 4A, 05, 05]
+1F856; [0D 3D AF, 05, 05]
-1F8A9; [0D 3A 51, 05, 05]
+1F857; [0D 3D B6, 05, 05]
-1F8AA; [0D 3A 58, 05, 05]
+1F858; [0D 3D BD, 05, 05]
-1F8AB; [0D 3A 5F, 05, 05]
+1F859; [0D 3D C4, 05, 05]
-1F8AC; [0D 3A 66, 05, 05]
+1F860; [0D 3D CB, 05, 05]
-1F8AD; [0D 3A 6D, 05, 05]
+1F861; [0D 3D D2, 05, 05]
-1F8B0; [0D 3A 74, 05, 05]
+1F862; [0D 3D D9, 05, 05]
-1F8B1; [0D 3A 7B, 05, 05]
+1F863; [0D 3D E0, 05, 05]
-1D800; [0D 3A 82, 05, 05]
+1F864; [0D 3D E7, 05, 05]
-1D801; [0D 3A 89, 05, 05]
+1F865; [0D 3D EE, 05, 05]
-1D802; [0D 3A 90, 05, 05]
+1F866; [0D 3D F5, 05, 05]
-1D803; [0D 3A 97, 05, 05]
+1F867; [0D 3D FC, 05, 05]
-1D804; [0D 3A 9E, 05, 05]
+1F868; [0D 3E 05, 05, 05]
-1D805; [0D 3A A5, 05, 05]
+1F869; [0D 3E 0C, 05, 05]
-1D806; [0D 3A AC, 05, 05]
+1F86A; [0D 3E 13, 05, 05]
-1D807; [0D 3A B3, 05, 05]
+1F86B; [0D 3E 1A, 05, 05]
-1D808; [0D 3A BA, 05, 05]
+1F86C; [0D 3E 21, 05, 05]
-1D809; [0D 3A C1, 05, 05]
+1F86D; [0D 3E 28, 05, 05]
-1D80A; [0D 3A C8, 05, 05]
+1F86E; [0D 3E 2F, 05, 05]
-1D80B; [0D 3A CF, 05, 05]
+1F86F; [0D 3E 36, 05, 05]
-1D80C; [0D 3A D6, 05, 05]
+1F870; [0D 3E 3D, 05, 05]
-1D80D; [0D 3A DD, 05, 05]
+1F871; [0D 3E 44, 05, 05]
-1D80E; [0D 3A E4, 05, 05]
+1F872; [0D 3E 4B, 05, 05]
-1D80F; [0D 3A EB, 05, 05]
+1F873; [0D 3E 52, 05, 05]
-1D810; [0D 3A F2, 05, 05]
+1F874; [0D 3E 59, 05, 05]
-1D811; [0D 3A F9, 05, 05]
+1F875; [0D 3E 60, 05, 05]
-1D812; [0D 3B 02, 05, 05]
+1F876; [0D 3E 67, 05, 05]
-1D813; [0D 3B 09, 05, 05]
+1F877; [0D 3E 6E, 05, 05]
-1D814; [0D 3B 10, 05, 05]
+1F878; [0D 3E 75, 05, 05]
-1D815; [0D 3B 17, 05, 05]
+1F879; [0D 3E 7C, 05, 05]
-1D816; [0D 3B 1E, 05, 05]
+1F87A; [0D 3E 83, 05, 05]
-1D817; [0D 3B 25, 05, 05]
+1F87B; [0D 3E 8A, 05, 05]
-1D818; [0D 3B 2C, 05, 05]
+1F87C; [0D 3E 91, 05, 05]
-1D819; [0D 3B 33, 05, 05]
+1F87D; [0D 3E 98, 05, 05]
-1D81A; [0D 3B 3A, 05, 05]
+1F87E; [0D 3E 9F, 05, 05]
-1D81B; [0D 3B 41, 05, 05]
+1F87F; [0D 3E A6, 05, 05]
-1D81C; [0D 3B 48, 05, 05]
+1F880; [0D 3E AD, 05, 05]
-1D81D; [0D 3B 4F, 05, 05]
+1F881; [0D 3E B4, 05, 05]
-1D81E; [0D 3B 56, 05, 05]
+1F882; [0D 3E BB, 05, 05]
-1D81F; [0D 3B 5D, 05, 05]
+1F883; [0D 3E C2, 05, 05]
-1D820; [0D 3B 64, 05, 05]
+1F884; [0D 3E C9, 05, 05]
-1D821; [0D 3B 6B, 05, 05]
+1F885; [0D 3E D0, 05, 05]
-1D822; [0D 3B 72, 05, 05]
+1F886; [0D 3E D7, 05, 05]
-1D823; [0D 3B 79, 05, 05]
+1F887; [0D 3E DE, 05, 05]
-1D824; [0D 3B 80, 05, 05]
+1F890; [0D 3E E5, 05, 05]
-1D825; [0D 3B 87, 05, 05]
+1F891; [0D 3E EC, 05, 05]
-1D826; [0D 3B 8E, 05, 05]
+1F892; [0D 3E F3, 05, 05]
-1D827; [0D 3B 95, 05, 05]
+1F893; [0D 3E FA, 05, 05]
-1D828; [0D 3B 9C, 05, 05]
+1F894; [0D 3F 03, 05, 05]
-1D829; [0D 3B A3, 05, 05]
+1F895; [0D 3F 0A, 05, 05]
-1D82A; [0D 3B AA, 05, 05]
+1F896; [0D 3F 11, 05, 05]
-1D82B; [0D 3B B1, 05, 05]
+1F897; [0D 3F 18, 05, 05]
-1D82C; [0D 3B B8, 05, 05]
+1F898; [0D 3F 1F, 05, 05]
-1D82D; [0D 3B BF, 05, 05]
+1F899; [0D 3F 26, 05, 05]
-1D82E; [0D 3B C6, 05, 05]
+1F89A; [0D 3F 2D, 05, 05]
-1D82F; [0D 3B CD, 05, 05]
+1F89B; [0D 3F 34, 05, 05]
-1D830; [0D 3B D4, 05, 05]
+1F89C; [0D 3F 3B, 05, 05]
-1D831; [0D 3B DB, 05, 05]
+1F89D; [0D 3F 42, 05, 05]
-1D832; [0D 3B E2, 05, 05]
+1F89E; [0D 3F 49, 05, 05]
-1D833; [0D 3B E9, 05, 05]
+1F89F; [0D 3F 50, 05, 05]
-1D834; [0D 3B F0, 05, 05]
+1F8A0; [0D 3F 57, 05, 05]
-1D835; [0D 3B F7, 05, 05]
+1F8A1; [0D 3F 5E, 05, 05]
-1D836; [0D 3B FE, 05, 05]
+1F8A2; [0D 3F 65, 05, 05]
-1D837; [0D 3C 07, 05, 05]
+1F8A3; [0D 3F 6C, 05, 05]
-1D838; [0D 3C 0E, 05, 05]
+1F8A4; [0D 3F 73, 05, 05]
-1D839; [0D 3C 15, 05, 05]
+1F8A5; [0D 3F 7A, 05, 05]
-1D83A; [0D 3C 1C, 05, 05]
+1F8A6; [0D 3F 81, 05, 05]
-1D83B; [0D 3C 23, 05, 05]
+1F8A7; [0D 3F 88, 05, 05]
-1D83C; [0D 3C 2A, 05, 05]
+1F8A8; [0D 3F 8F, 05, 05]
-1D83D; [0D 3C 31, 05, 05]
+1F8A9; [0D 3F 96, 05, 05]
-1D83E; [0D 3C 38, 05, 05]
+1F8AA; [0D 3F 9D, 05, 05]
-1D83F; [0D 3C 3F, 05, 05]
+1F8AB; [0D 3F A4, 05, 05]
-1D840; [0D 3C 46, 05, 05]
+1F8AC; [0D 3F AB, 05, 05]
-1D841; [0D 3C 4D, 05, 05]
+1F8AD; [0D 3F B2, 05, 05]
-1D842; [0D 3C 54, 05, 05]
+1F8B0; [0D 3F B9, 05, 05]
-1D843; [0D 3C 5B, 05, 05]
+1F8B1; [0D 3F C0, 05, 05]
-1D844; [0D 3C 62, 05, 05]
+1D800; [0D 3F C7, 05, 05]
-1D845; [0D 3C 69, 05, 05]
+1D801; [0D 3F CE, 05, 05]
-1D846; [0D 3C 70, 05, 05]
+1D802; [0D 3F D5, 05, 05]
-1D847; [0D 3C 77, 05, 05]
+1D803; [0D 3F DC, 05, 05]
-1D848; [0D 3C 7E, 05, 05]
+1D804; [0D 3F E3, 05, 05]
-1D849; [0D 3C 85, 05, 05]
+1D805; [0D 3F EA, 05, 05]
-1D84A; [0D 3C 8C, 05, 05]
+1D806; [0D 3F F1, 05, 05]
-1D84B; [0D 3C 93, 05, 05]
+1D807; [0D 3F F8, 05, 05]
-1D84C; [0D 3C 9A, 05, 05]
+1D808; [0D 3F FF, 05, 05]
-1D84D; [0D 3C A1, 05, 05]
+1D809; [0D 40 08, 05, 05]
-1D84E; [0D 3C A8, 05, 05]
+1D80A; [0D 40 0F, 05, 05]
-1D84F; [0D 3C AF, 05, 05]
+1D80B; [0D 40 16, 05, 05]
-1D850; [0D 3C B6, 05, 05]
+1D80C; [0D 40 1D, 05, 05]
-1D851; [0D 3C BD, 05, 05]
+1D80D; [0D 40 24, 05, 05]
-1D852; [0D 3C C4, 05, 05]
+1D80E; [0D 40 2B, 05, 05]
-1D853; [0D 3C CB, 05, 05]
+1D80F; [0D 40 32, 05, 05]
-1D854; [0D 3C D2, 05, 05]
+1D810; [0D 40 39, 05, 05]
-1D855; [0D 3C D9, 05, 05]
+1D811; [0D 40 40, 05, 05]
-1D856; [0D 3C E0, 05, 05]
+1D812; [0D 40 47, 05, 05]
-1D857; [0D 3C E7, 05, 05]
+1D813; [0D 40 4E, 05, 05]
-1D858; [0D 3C EE, 05, 05]
+1D814; [0D 40 55, 05, 05]
-1D859; [0D 3C F5, 05, 05]
+1D815; [0D 40 5C, 05, 05]
-1D85A; [0D 3C FC, 05, 05]
+1D816; [0D 40 63, 05, 05]
-1D85B; [0D 3D 05, 05, 05]
+1D817; [0D 40 6A, 05, 05]
-1D85C; [0D 3D 0C, 05, 05]
+1D818; [0D 40 71, 05, 05]
-1D85D; [0D 3D 13, 05, 05]
+1D819; [0D 40 78, 05, 05]
-1D85E; [0D 3D 1A, 05, 05]
+1D81A; [0D 40 7F, 05, 05]
-1D85F; [0D 3D 21, 05, 05]
+1D81B; [0D 40 86, 05, 05]
-1D860; [0D 3D 28, 05, 05]
+1D81C; [0D 40 8D, 05, 05]
-1D861; [0D 3D 2F, 05, 05]
+1D81D; [0D 40 94, 05, 05]
-1D862; [0D 3D 36, 05, 05]
+1D81E; [0D 40 9B, 05, 05]
-1D863; [0D 3D 3D, 05, 05]
+1D81F; [0D 40 A2, 05, 05]
-1D864; [0D 3D 44, 05, 05]
+1D820; [0D 40 A9, 05, 05]
-1D865; [0D 3D 4B, 05, 05]
+1D821; [0D 40 B0, 05, 05]
-1D866; [0D 3D 52, 05, 05]
+1D822; [0D 40 B7, 05, 05]
-1D867; [0D 3D 59, 05, 05]
+1D823; [0D 40 BE, 05, 05]
-1D868; [0D 3D 60, 05, 05]
+1D824; [0D 40 C5, 05, 05]
-1D869; [0D 3D 67, 05, 05]
+1D825; [0D 40 CC, 05, 05]
-1D86A; [0D 3D 6E, 05, 05]
+1D826; [0D 40 D3, 05, 05]
-1D86B; [0D 3D 75, 05, 05]
+1D827; [0D 40 DA, 05, 05]
-1D86C; [0D 3D 7C, 05, 05]
+1D828; [0D 40 E1, 05, 05]
-1D86D; [0D 3D 83, 05, 05]
+1D829; [0D 40 E8, 05, 05]
-1D86E; [0D 3D 8A, 05, 05]
+1D82A; [0D 40 EF, 05, 05]
-1D86F; [0D 3D 91, 05, 05]
+1D82B; [0D 40 F6, 05, 05]
-1D870; [0D 3D 98, 05, 05]
+1D82C; [0D 40 FD, 05, 05]
-1D871; [0D 3D 9F, 05, 05]
+1D82D; [0D 41 06, 05, 05]
-1D872; [0D 3D A6, 05, 05]
+1D82E; [0D 41 0D, 05, 05]
-1D873; [0D 3D AD, 05, 05]
+1D82F; [0D 41 14, 05, 05]
-1D874; [0D 3D B4, 05, 05]
+1D830; [0D 41 1B, 05, 05]
-1D875; [0D 3D BB, 05, 05]
+1D831; [0D 41 22, 05, 05]
-1D876; [0D 3D C2, 05, 05]
+1D832; [0D 41 29, 05, 05]
-1D877; [0D 3D C9, 05, 05]
+1D833; [0D 41 30, 05, 05]
-1D878; [0D 3D D0, 05, 05]
+1D834; [0D 41 37, 05, 05]
-1D879; [0D 3D D7, 05, 05]
+1D835; [0D 41 3E, 05, 05]
-1D87A; [0D 3D DE, 05, 05]
+1D836; [0D 41 45, 05, 05]
-1D87B; [0D 3D E5, 05, 05]
+1D837; [0D 41 4C, 05, 05]
-1D87C; [0D 3D EC, 05, 05]
+1D838; [0D 41 53, 05, 05]
-1D87D; [0D 3D F3, 05, 05]
+1D839; [0D 41 5A, 05, 05]
-1D87E; [0D 3D FA, 05, 05]
+1D83A; [0D 41 61, 05, 05]
-1D87F; [0D 3E 03, 05, 05]
+1D83B; [0D 41 68, 05, 05]
-1D880; [0D 3E 0A, 05, 05]
+1D83C; [0D 41 6F, 05, 05]
-1D881; [0D 3E 11, 05, 05]
+1D83D; [0D 41 76, 05, 05]
-1D882; [0D 3E 18, 05, 05]
+1D83E; [0D 41 7D, 05, 05]
-1D883; [0D 3E 1F, 05, 05]
+1D83F; [0D 41 84, 05, 05]
-1D884; [0D 3E 26, 05, 05]
+1D840; [0D 41 8B, 05, 05]
-1D885; [0D 3E 2D, 05, 05]
+1D841; [0D 41 92, 05, 05]
-1D886; [0D 3E 34, 05, 05]
+1D842; [0D 41 99, 05, 05]
-1D887; [0D 3E 3B, 05, 05]
+1D843; [0D 41 A0, 05, 05]
-1D888; [0D 3E 42, 05, 05]
+1D844; [0D 41 A7, 05, 05]
-1D889; [0D 3E 49, 05, 05]
+1D845; [0D 41 AE, 05, 05]
-1D88A; [0D 3E 50, 05, 05]
+1D846; [0D 41 B5, 05, 05]
-1D88B; [0D 3E 57, 05, 05]
+1D847; [0D 41 BC, 05, 05]
-1D88C; [0D 3E 5E, 05, 05]
+1D848; [0D 41 C3, 05, 05]
-1D88D; [0D 3E 65, 05, 05]
+1D849; [0D 41 CA, 05, 05]
-1D88E; [0D 3E 6C, 05, 05]
+1D84A; [0D 41 D1, 05, 05]
-1D88F; [0D 3E 73, 05, 05]
+1D84B; [0D 41 D8, 05, 05]
-1D890; [0D 3E 7A, 05, 05]
+1D84C; [0D 41 DF, 05, 05]
-1D891; [0D 3E 81, 05, 05]
+1D84D; [0D 41 E6, 05, 05]
-1D892; [0D 3E 88, 05, 05]
+1D84E; [0D 41 ED, 05, 05]
-1D893; [0D 3E 8F, 05, 05]
+1D84F; [0D 41 F4, 05, 05]
-1D894; [0D 3E 96, 05, 05]
+1D850; [0D 41 FB, 05, 05]
-1D895; [0D 3E 9D, 05, 05]
+1D851; [0D 42 04, 05, 05]
-1D896; [0D 3E A4, 05, 05]
+1D852; [0D 42 0B, 05, 05]
-1D897; [0D 3E AB, 05, 05]
+1D853; [0D 42 12, 05, 05]
-1D898; [0D 3E B2, 05, 05]
+1D854; [0D 42 19, 05, 05]
-1D899; [0D 3E B9, 05, 05]
+1D855; [0D 42 20, 05, 05]
-1D89A; [0D 3E C0, 05, 05]
+1D856; [0D 42 27, 05, 05]
-1D89B; [0D 3E C7, 05, 05]
+1D857; [0D 42 2E, 05, 05]
-1D89C; [0D 3E CE, 05, 05]
+1D858; [0D 42 35, 05, 05]
-1D89D; [0D 3E D5, 05, 05]
+1D859; [0D 42 3C, 05, 05]
-1D89E; [0D 3E DC, 05, 05]
+1D85A; [0D 42 43, 05, 05]
-1D89F; [0D 3E E3, 05, 05]
+1D85B; [0D 42 4A, 05, 05]
-1D8A0; [0D 3E EA, 05, 05]
+1D85C; [0D 42 51, 05, 05]
-1D8A1; [0D 3E F1, 05, 05]
+1D85D; [0D 42 58, 05, 05]
-1D8A2; [0D 3E F8, 05, 05]
+1D85E; [0D 42 5F, 05, 05]
-1D8A3; [0D 3E FF, 05, 05]
+1D85F; [0D 42 66, 05, 05]
-1D8A4; [0D 3F 08, 05, 05]
+1D860; [0D 42 6D, 05, 05]
-1D8A5; [0D 3F 0F, 05, 05]
+1D861; [0D 42 74, 05, 05]
-1D8A6; [0D 3F 16, 05, 05]
+1D862; [0D 42 7B, 05, 05]
-1D8A7; [0D 3F 1D, 05, 05]
+1D863; [0D 42 82, 05, 05]
-1D8A8; [0D 3F 24, 05, 05]
+1D864; [0D 42 89, 05, 05]
-1D8A9; [0D 3F 2B, 05, 05]
+1D865; [0D 42 90, 05, 05]
-1D8AA; [0D 3F 32, 05, 05]
+1D866; [0D 42 97, 05, 05]
-1D8AB; [0D 3F 39, 05, 05]
+1D867; [0D 42 9E, 05, 05]
-1D8AC; [0D 3F 40, 05, 05]
+1D868; [0D 42 A5, 05, 05]
-1D8AD; [0D 3F 47, 05, 05]
+1D869; [0D 42 AC, 05, 05]
-1D8AE; [0D 3F 4E, 05, 05]
+1D86A; [0D 42 B3, 05, 05]
-1D8AF; [0D 3F 55, 05, 05]
+1D86B; [0D 42 BA, 05, 05]
-1D8B0; [0D 3F 5C, 05, 05]
+1D86C; [0D 42 C1, 05, 05]
-1D8B1; [0D 3F 63, 05, 05]
+1D86D; [0D 42 C8, 05, 05]
-1D8B2; [0D 3F 6A, 05, 05]
+1D86E; [0D 42 CF, 05, 05]
-1D8B3; [0D 3F 71, 05, 05]
+1D86F; [0D 42 D6, 05, 05]
-1D8B4; [0D 3F 78, 05, 05]
+1D870; [0D 42 DD, 05, 05]
-1D8B5; [0D 3F 7F, 05, 05]
+1D871; [0D 42 E4, 05, 05]
-1D8B6; [0D 3F 86, 05, 05]
+1D872; [0D 42 EB, 05, 05]
-1D8B7; [0D 3F 8D, 05, 05]
+1D873; [0D 42 F2, 05, 05]
-1D8B8; [0D 3F 94, 05, 05]
+1D874; [0D 42 F9, 05, 05]
-1D8B9; [0D 3F 9B, 05, 05]
+1D875; [0D 43 02, 05, 05]
-1D8BA; [0D 3F A2, 05, 05]
+1D876; [0D 43 09, 05, 05]
-1D8BB; [0D 3F A9, 05, 05]
+1D877; [0D 43 10, 05, 05]
-1D8BC; [0D 3F B0, 05, 05]
+1D878; [0D 43 17, 05, 05]
-1D8BD; [0D 3F B7, 05, 05]
+1D879; [0D 43 1E, 05, 05]
-1D8BE; [0D 3F BE, 05, 05]
+1D87A; [0D 43 25, 05, 05]
-1D8BF; [0D 3F C5, 05, 05]
+1D87B; [0D 43 2C, 05, 05]
-1D8C0; [0D 3F CC, 05, 05]
+1D87C; [0D 43 33, 05, 05]
-1D8C1; [0D 3F D3, 05, 05]
+1D87D; [0D 43 3A, 05, 05]
-1D8C2; [0D 3F DA, 05, 05]
+1D87E; [0D 43 41, 05, 05]
-1D8C3; [0D 3F E1, 05, 05]
+1D87F; [0D 43 48, 05, 05]
-1D8C4; [0D 3F E8, 05, 05]
+1D880; [0D 43 4F, 05, 05]
-1D8C5; [0D 3F EF, 05, 05]
+1D881; [0D 43 56, 05, 05]
-1D8C6; [0D 3F F6, 05, 05]
+1D882; [0D 43 5D, 05, 05]
-1D8C7; [0D 3F FD, 05, 05]
+1D883; [0D 43 64, 05, 05]
-1D8C8; [0D 40 06, 05, 05]
+1D884; [0D 43 6B, 05, 05]
-1D8C9; [0D 40 0D, 05, 05]
+1D885; [0D 43 72, 05, 05]
-1D8CA; [0D 40 14, 05, 05]
+1D886; [0D 43 79, 05, 05]
-1D8CB; [0D 40 1B, 05, 05]
+1D887; [0D 43 80, 05, 05]
-1D8CC; [0D 40 22, 05, 05]
+1D888; [0D 43 87, 05, 05]
-1D8CD; [0D 40 29, 05, 05]
+1D889; [0D 43 8E, 05, 05]
-1D8CE; [0D 40 30, 05, 05]
+1D88A; [0D 43 95, 05, 05]
-1D8CF; [0D 40 37, 05, 05]
+1D88B; [0D 43 9C, 05, 05]
-1D8D0; [0D 40 3E, 05, 05]
+1D88C; [0D 43 A3, 05, 05]
-1D8D1; [0D 40 45, 05, 05]
+1D88D; [0D 43 AA, 05, 05]
-1D8D2; [0D 40 4C, 05, 05]
+1D88E; [0D 43 B1, 05, 05]
-1D8D3; [0D 40 53, 05, 05]
+1D88F; [0D 43 B8, 05, 05]
-1D8D4; [0D 40 5A, 05, 05]
+1D890; [0D 43 BF, 05, 05]
-1D8D5; [0D 40 61, 05, 05]
+1D891; [0D 43 C6, 05, 05]
-1D8D6; [0D 40 68, 05, 05]
+1D892; [0D 43 CD, 05, 05]
-1D8D7; [0D 40 6F, 05, 05]
+1D893; [0D 43 D4, 05, 05]
-1D8D8; [0D 40 76, 05, 05]
+1D894; [0D 43 DB, 05, 05]
-1D8D9; [0D 40 7D, 05, 05]
+1D895; [0D 43 E2, 05, 05]
-1D8DA; [0D 40 84, 05, 05]
+1D896; [0D 43 E9, 05, 05]
-1D8DB; [0D 40 8B, 05, 05]
+1D897; [0D 43 F0, 05, 05]
-1D8DC; [0D 40 92, 05, 05]
+1D898; [0D 43 F7, 05, 05]
-1D8DD; [0D 40 99, 05, 05]
+1D899; [0D 43 FE, 05, 05]
-1D8DE; [0D 40 A0, 05, 05]
+1D89A; [0D 44 07, 05, 05]
-1D8DF; [0D 40 A7, 05, 05]
+1D89B; [0D 44 0E, 05, 05]
-1D8E0; [0D 40 AE, 05, 05]
+1D89C; [0D 44 15, 05, 05]
-1D8E1; [0D 40 B5, 05, 05]
+1D89D; [0D 44 1C, 05, 05]
-1D8E2; [0D 40 BC, 05, 05]
+1D89E; [0D 44 23, 05, 05]
-1D8E3; [0D 40 C3, 05, 05]
+1D89F; [0D 44 2A, 05, 05]
-1D8E4; [0D 40 CA, 05, 05]
+1D8A0; [0D 44 31, 05, 05]
-1D8E5; [0D 40 D1, 05, 05]
+1D8A1; [0D 44 38, 05, 05]
-1D8E6; [0D 40 D8, 05, 05]
+1D8A2; [0D 44 3F, 05, 05]
-1D8E7; [0D 40 DF, 05, 05]
+1D8A3; [0D 44 46, 05, 05]
-1D8E8; [0D 40 E6, 05, 05]
+1D8A4; [0D 44 4D, 05, 05]
-1D8E9; [0D 40 ED, 05, 05]
+1D8A5; [0D 44 54, 05, 05]
-1D8EA; [0D 40 F4, 05, 05]
+1D8A6; [0D 44 5B, 05, 05]
-1D8EB; [0D 40 FB, 05, 05]
+1D8A7; [0D 44 62, 05, 05]
-1D8EC; [0D 41 04, 05, 05]
+1D8A8; [0D 44 69, 05, 05]
-1D8ED; [0D 41 0B, 05, 05]
+1D8A9; [0D 44 70, 05, 05]
-1D8EE; [0D 41 12, 05, 05]
+1D8AA; [0D 44 77, 05, 05]
-1D8EF; [0D 41 19, 05, 05]
+1D8AB; [0D 44 7E, 05, 05]
-1D8F0; [0D 41 20, 05, 05]
+1D8AC; [0D 44 85, 05, 05]
-1D8F1; [0D 41 27, 05, 05]
+1D8AD; [0D 44 8C, 05, 05]
-1D8F2; [0D 41 2E, 05, 05]
+1D8AE; [0D 44 93, 05, 05]
-1D8F3; [0D 41 35, 05, 05]
+1D8AF; [0D 44 9A, 05, 05]
-1D8F4; [0D 41 3C, 05, 05]
+1D8B0; [0D 44 A1, 05, 05]
-1D8F5; [0D 41 43, 05, 05]
+1D8B1; [0D 44 A8, 05, 05]
-1D8F6; [0D 41 4A, 05, 05]
+1D8B2; [0D 44 AF, 05, 05]
-1D8F7; [0D 41 51, 05, 05]
+1D8B3; [0D 44 B6, 05, 05]
-1D8F8; [0D 41 58, 05, 05]
+1D8B4; [0D 44 BD, 05, 05]
-1D8F9; [0D 41 5F, 05, 05]
+1D8B5; [0D 44 C4, 05, 05]
-1D8FA; [0D 41 66, 05, 05]
+1D8B6; [0D 44 CB, 05, 05]
-1D8FB; [0D 41 6D, 05, 05]
+1D8B7; [0D 44 D2, 05, 05]
-1D8FC; [0D 41 74, 05, 05]
+1D8B8; [0D 44 D9, 05, 05]
-1D8FD; [0D 41 7B, 05, 05]
+1D8B9; [0D 44 E0, 05, 05]
-1D8FE; [0D 41 82, 05, 05]
+1D8BA; [0D 44 E7, 05, 05]
-1D8FF; [0D 41 89, 05, 05]
+1D8BB; [0D 44 EE, 05, 05]
-1D900; [0D 41 90, 05, 05]
+1D8BC; [0D 44 F5, 05, 05]
-1D901; [0D 41 97, 05, 05]
+1D8BD; [0D 44 FC, 05, 05]
-1D902; [0D 41 9E, 05, 05]
+1D8BE; [0D 45 05, 05, 05]
-1D903; [0D 41 A5, 05, 05]
+1D8BF; [0D 45 0C, 05, 05]
-1D904; [0D 41 AC, 05, 05]
+1D8C0; [0D 45 13, 05, 05]
-1D905; [0D 41 B3, 05, 05]
+1D8C1; [0D 45 1A, 05, 05]
-1D906; [0D 41 BA, 05, 05]
+1D8C2; [0D 45 21, 05, 05]
-1D907; [0D 41 C1, 05, 05]
+1D8C3; [0D 45 28, 05, 05]
-1D908; [0D 41 C8, 05, 05]
+1D8C4; [0D 45 2F, 05, 05]
-1D909; [0D 41 CF, 05, 05]
+1D8C5; [0D 45 36, 05, 05]
-1D90A; [0D 41 D6, 05, 05]
+1D8C6; [0D 45 3D, 05, 05]
-1D90B; [0D 41 DD, 05, 05]
+1D8C7; [0D 45 44, 05, 05]
-1D90C; [0D 41 E4, 05, 05]
+1D8C8; [0D 45 4B, 05, 05]
-1D90D; [0D 41 EB, 05, 05]
+1D8C9; [0D 45 52, 05, 05]
-1D90E; [0D 41 F2, 05, 05]
+1D8CA; [0D 45 59, 05, 05]
-1D90F; [0D 41 F9, 05, 05]
+1D8CB; [0D 45 60, 05, 05]
-1D910; [0D 42 02, 05, 05]
+1D8CC; [0D 45 67, 05, 05]
-1D911; [0D 42 09, 05, 05]
+1D8CD; [0D 45 6E, 05, 05]
-1D912; [0D 42 10, 05, 05]
+1D8CE; [0D 45 75, 05, 05]
-1D913; [0D 42 17, 05, 05]
+1D8CF; [0D 45 7C, 05, 05]
-1D914; [0D 42 1E, 05, 05]
+1D8D0; [0D 45 83, 05, 05]
-1D915; [0D 42 25, 05, 05]
+1D8D1; [0D 45 8A, 05, 05]
-1D916; [0D 42 2C, 05, 05]
+1D8D2; [0D 45 91, 05, 05]
-1D917; [0D 42 33, 05, 05]
+1D8D3; [0D 45 98, 05, 05]
-1D918; [0D 42 3A, 05, 05]
+1D8D4; [0D 45 9F, 05, 05]
-1D919; [0D 42 41, 05, 05]
+1D8D5; [0D 45 A6, 05, 05]
-1D91A; [0D 42 48, 05, 05]
+1D8D6; [0D 45 AD, 05, 05]
-1D91B; [0D 42 4F, 05, 05]
+1D8D7; [0D 45 B4, 05, 05]
-1D91C; [0D 42 56, 05, 05]
+1D8D8; [0D 45 BB, 05, 05]
-1D91D; [0D 42 5D, 05, 05]
+1D8D9; [0D 45 C2, 05, 05]
-1D91E; [0D 42 64, 05, 05]
+1D8DA; [0D 45 C9, 05, 05]
-1D91F; [0D 42 6B, 05, 05]
+1D8DB; [0D 45 D0, 05, 05]
-1D920; [0D 42 72, 05, 05]
+1D8DC; [0D 45 D7, 05, 05]
-1D921; [0D 42 79, 05, 05]
+1D8DD; [0D 45 DE, 05, 05]
-1D922; [0D 42 80, 05, 05]
+1D8DE; [0D 45 E5, 05, 05]
-1D923; [0D 42 87, 05, 05]
+1D8DF; [0D 45 EC, 05, 05]
-1D924; [0D 42 8E, 05, 05]
+1D8E0; [0D 45 F3, 05, 05]
-1D925; [0D 42 95, 05, 05]
+1D8E1; [0D 45 FA, 05, 05]
-1D926; [0D 42 9C, 05, 05]
+1D8E2; [0D 46 03, 05, 05]
-1D927; [0D 42 A3, 05, 05]
+1D8E3; [0D 46 0A, 05, 05]
-1D928; [0D 42 AA, 05, 05]
+1D8E4; [0D 46 11, 05, 05]
-1D929; [0D 42 B1, 05, 05]
+1D8E5; [0D 46 18, 05, 05]
-1D92A; [0D 42 B8, 05, 05]
+1D8E6; [0D 46 1F, 05, 05]
-1D92B; [0D 42 BF, 05, 05]
+1D8E7; [0D 46 26, 05, 05]
-1D92C; [0D 42 C6, 05, 05]
+1D8E8; [0D 46 2D, 05, 05]
-1D92D; [0D 42 CD, 05, 05]
+1D8E9; [0D 46 34, 05, 05]
-1D92E; [0D 42 D4, 05, 05]
+1D8EA; [0D 46 3B, 05, 05]
-1D92F; [0D 42 DB, 05, 05]
+1D8EB; [0D 46 42, 05, 05]
-1D930; [0D 42 E2, 05, 05]
+1D8EC; [0D 46 49, 05, 05]
-1D931; [0D 42 E9, 05, 05]
+1D8ED; [0D 46 50, 05, 05]
-1D932; [0D 42 F0, 05, 05]
+1D8EE; [0D 46 57, 05, 05]
-1D933; [0D 42 F7, 05, 05]
+1D8EF; [0D 46 5E, 05, 05]
-1D934; [0D 42 FE, 05, 05]
+1D8F0; [0D 46 65, 05, 05]
-1D935; [0D 43 07, 05, 05]
+1D8F1; [0D 46 6C, 05, 05]
-1D936; [0D 43 0E, 05, 05]
+1D8F2; [0D 46 73, 05, 05]
-1D937; [0D 43 15, 05, 05]
+1D8F3; [0D 46 7A, 05, 05]
-1D938; [0D 43 1C, 05, 05]
+1D8F4; [0D 46 81, 05, 05]
-1D939; [0D 43 23, 05, 05]
+1D8F5; [0D 46 88, 05, 05]
-1D93A; [0D 43 2A, 05, 05]
+1D8F6; [0D 46 8F, 05, 05]
-1D93B; [0D 43 31, 05, 05]
+1D8F7; [0D 46 96, 05, 05]
-1D93C; [0D 43 38, 05, 05]
+1D8F8; [0D 46 9D, 05, 05]
-1D93D; [0D 43 3F, 05, 05]
+1D8F9; [0D 46 A4, 05, 05]
-1D93E; [0D 43 46, 05, 05]
+1D8FA; [0D 46 AB, 05, 05]
-1D93F; [0D 43 4D, 05, 05]
+1D8FB; [0D 46 B2, 05, 05]
-1D940; [0D 43 54, 05, 05]
+1D8FC; [0D 46 B9, 05, 05]
-1D941; [0D 43 5B, 05, 05]
+1D8FD; [0D 46 C0, 05, 05]
-1D942; [0D 43 62, 05, 05]
+1D8FE; [0D 46 C7, 05, 05]
-1D943; [0D 43 69, 05, 05]
+1D8FF; [0D 46 CE, 05, 05]
-1D944; [0D 43 70, 05, 05]
+1D900; [0D 46 D5, 05, 05]
-1D945; [0D 43 77, 05, 05]
+1D901; [0D 46 DC, 05, 05]
-1D946; [0D 43 7E, 05, 05]
+1D902; [0D 46 E3, 05, 05]
-1D947; [0D 43 85, 05, 05]
+1D903; [0D 46 EA, 05, 05]
-1D948; [0D 43 8C, 05, 05]
+1D904; [0D 46 F1, 05, 05]
-1D949; [0D 43 93, 05, 05]
+1D905; [0D 46 F8, 05, 05]
-1D94A; [0D 43 9A, 05, 05]
+1D906; [0D 46 FF, 05, 05]
-1D94B; [0D 43 A1, 05, 05]
+1D907; [0D 47 08, 05, 05]
-1D94C; [0D 43 A8, 05, 05]
+1D908; [0D 47 0F, 05, 05]
-1D94D; [0D 43 AF, 05, 05]
+1D909; [0D 47 16, 05, 05]
-1D94E; [0D 43 B6, 05, 05]
+1D90A; [0D 47 1D, 05, 05]
-1D94F; [0D 43 BD, 05, 05]
+1D90B; [0D 47 24, 05, 05]
-1D950; [0D 43 C4, 05, 05]
+1D90C; [0D 47 2B, 05, 05]
-1D951; [0D 43 CB, 05, 05]
+1D90D; [0D 47 32, 05, 05]
-1D952; [0D 43 D2, 05, 05]
+1D90E; [0D 47 39, 05, 05]
-1D953; [0D 43 D9, 05, 05]
+1D90F; [0D 47 40, 05, 05]
-1D954; [0D 43 E0, 05, 05]
+1D910; [0D 47 47, 05, 05]
-1D955; [0D 43 E7, 05, 05]
+1D911; [0D 47 4E, 05, 05]
-1D956; [0D 43 EE, 05, 05]
+1D912; [0D 47 55, 05, 05]
-1D957; [0D 43 F5, 05, 05]
+1D913; [0D 47 5C, 05, 05]
-1D958; [0D 43 FC, 05, 05]
+1D914; [0D 47 63, 05, 05]
-1D959; [0D 44 05, 05, 05]
+1D915; [0D 47 6A, 05, 05]
-1D95A; [0D 44 0C, 05, 05]
+1D916; [0D 47 71, 05, 05]
-1D95B; [0D 44 13, 05, 05]
+1D917; [0D 47 78, 05, 05]
-1D95C; [0D 44 1A, 05, 05]
+1D918; [0D 47 7F, 05, 05]
-1D95D; [0D 44 21, 05, 05]
+1D919; [0D 47 86, 05, 05]
-1D95E; [0D 44 28, 05, 05]
+1D91A; [0D 47 8D, 05, 05]
-1D95F; [0D 44 2F, 05, 05]
+1D91B; [0D 47 94, 05, 05]
-1D960; [0D 44 36, 05, 05]
+1D91C; [0D 47 9B, 05, 05]
-1D961; [0D 44 3D, 05, 05]
+1D91D; [0D 47 A2, 05, 05]
-1D962; [0D 44 44, 05, 05]
+1D91E; [0D 47 A9, 05, 05]
-1D963; [0D 44 4B, 05, 05]
+1D91F; [0D 47 B0, 05, 05]
-1D964; [0D 44 52, 05, 05]
+1D920; [0D 47 B7, 05, 05]
-1D965; [0D 44 59, 05, 05]
+1D921; [0D 47 BE, 05, 05]
-1D966; [0D 44 60, 05, 05]
+1D922; [0D 47 C5, 05, 05]
-1D967; [0D 44 67, 05, 05]
+1D923; [0D 47 CC, 05, 05]
-1D968; [0D 44 6E, 05, 05]
+1D924; [0D 47 D3, 05, 05]
-1D969; [0D 44 75, 05, 05]
+1D925; [0D 47 DA, 05, 05]
-1D96A; [0D 44 7C, 05, 05]
+1D926; [0D 47 E1, 05, 05]
-1D96B; [0D 44 83, 05, 05]
+1D927; [0D 47 E8, 05, 05]
-1D96C; [0D 44 8A, 05, 05]
+1D928; [0D 47 EF, 05, 05]
-1D96D; [0D 44 91, 05, 05]
+1D929; [0D 47 F6, 05, 05]
-1D96E; [0D 44 98, 05, 05]
+1D92A; [0D 47 FD, 05, 05]
-1D96F; [0D 44 9F, 05, 05]
+1D92B; [0D 48 06, 05, 05]
-1D970; [0D 44 A6, 05, 05]
+1D92C; [0D 48 0D, 05, 05]
-1D971; [0D 44 AD, 05, 05]
+1D92D; [0D 48 14, 05, 05]
-1D972; [0D 44 B4, 05, 05]
+1D92E; [0D 48 1B, 05, 05]
-1D973; [0D 44 BB, 05, 05]
+1D92F; [0D 48 22, 05, 05]
-1D974; [0D 44 C2, 05, 05]
+1D930; [0D 48 29, 05, 05]
-1D975; [0D 44 C9, 05, 05]
+1D931; [0D 48 30, 05, 05]
-1D976; [0D 44 D0, 05, 05]
+1D932; [0D 48 37, 05, 05]
-1D977; [0D 44 D7, 05, 05]
+1D933; [0D 48 3E, 05, 05]
-1D978; [0D 44 DE, 05, 05]
+1D934; [0D 48 45, 05, 05]
-1D979; [0D 44 E5, 05, 05]
+1D935; [0D 48 4C, 05, 05]
-1D97A; [0D 44 EC, 05, 05]
+1D936; [0D 48 53, 05, 05]
-1D97B; [0D 44 F3, 05, 05]
+1D937; [0D 48 5A, 05, 05]
-1D97C; [0D 44 FA, 05, 05]
+1D938; [0D 48 61, 05, 05]
-1D97D; [0D 45 03, 05, 05]
+1D939; [0D 48 68, 05, 05]
-1D97E; [0D 45 0A, 05, 05]
+1D93A; [0D 48 6F, 05, 05]
-1D97F; [0D 45 11, 05, 05]
+1D93B; [0D 48 76, 05, 05]
-1D980; [0D 45 18, 05, 05]
+1D93C; [0D 48 7D, 05, 05]
-1D981; [0D 45 1F, 05, 05]
+1D93D; [0D 48 84, 05, 05]
-1D982; [0D 45 26, 05, 05]
+1D93E; [0D 48 8B, 05, 05]
-1D983; [0D 45 2D, 05, 05]
+1D93F; [0D 48 92, 05, 05]
-1D984; [0D 45 34, 05, 05]
+1D940; [0D 48 99, 05, 05]
-1D985; [0D 45 3B, 05, 05]
+1D941; [0D 48 A0, 05, 05]
-1D986; [0D 45 42, 05, 05]
+1D942; [0D 48 A7, 05, 05]
-1D987; [0D 45 49, 05, 05]
+1D943; [0D 48 AE, 05, 05]
-1D988; [0D 45 50, 05, 05]
+1D944; [0D 48 B5, 05, 05]
-1D989; [0D 45 57, 05, 05]
+1D945; [0D 48 BC, 05, 05]
-1D98A; [0D 45 5E, 05, 05]
+1D946; [0D 48 C3, 05, 05]
-1D98B; [0D 45 65, 05, 05]
+1D947; [0D 48 CA, 05, 05]
-1D98C; [0D 45 6C, 05, 05]
+1D948; [0D 48 D1, 05, 05]
-1D98D; [0D 45 73, 05, 05]
+1D949; [0D 48 D8, 05, 05]
-1D98E; [0D 45 7A, 05, 05]
+1D94A; [0D 48 DF, 05, 05]
-1D98F; [0D 45 81, 05, 05]
+1D94B; [0D 48 E6, 05, 05]
-1D990; [0D 45 88, 05, 05]
+1D94C; [0D 48 ED, 05, 05]
-1D991; [0D 45 8F, 05, 05]
+1D94D; [0D 48 F4, 05, 05]
-1D992; [0D 45 96, 05, 05]
+1D94E; [0D 48 FB, 05, 05]
-1D993; [0D 45 9D, 05, 05]
+1D94F; [0D 49 04, 05, 05]
-1D994; [0D 45 A4, 05, 05]
+1D950; [0D 49 0B, 05, 05]
-1D995; [0D 45 AB, 05, 05]
+1D951; [0D 49 12, 05, 05]
-1D996; [0D 45 B2, 05, 05]
+1D952; [0D 49 19, 05, 05]
-1D997; [0D 45 B9, 05, 05]
+1D953; [0D 49 20, 05, 05]
-1D998; [0D 45 C0, 05, 05]
+1D954; [0D 49 27, 05, 05]
-1D999; [0D 45 C7, 05, 05]
+1D955; [0D 49 2E, 05, 05]
-1D99A; [0D 45 CE, 05, 05]
+1D956; [0D 49 35, 05, 05]
-1D99B; [0D 45 D5, 05, 05]
+1D957; [0D 49 3C, 05, 05]
-1D99C; [0D 45 DC, 05, 05]
+1D958; [0D 49 43, 05, 05]
-1D99D; [0D 45 E3, 05, 05]
+1D959; [0D 49 4A, 05, 05]
-1D99E; [0D 45 EA, 05, 05]
+1D95A; [0D 49 51, 05, 05]
-1D99F; [0D 45 F1, 05, 05]
+1D95B; [0D 49 58, 05, 05]
-1D9A0; [0D 45 F8, 05, 05]
+1D95C; [0D 49 5F, 05, 05]
-1D9A1; [0D 45 FF, 05, 05]
+1D95D; [0D 49 66, 05, 05]
-1D9A2; [0D 46 08, 05, 05]
+1D95E; [0D 49 6D, 05, 05]
-1D9A3; [0D 46 0F, 05, 05]
+1D95F; [0D 49 74, 05, 05]
-1D9A4; [0D 46 16, 05, 05]
+1D960; [0D 49 7B, 05, 05]
-1D9A5; [0D 46 1D, 05, 05]
+1D961; [0D 49 82, 05, 05]
-1D9A6; [0D 46 24, 05, 05]
+1D962; [0D 49 89, 05, 05]
-1D9A7; [0D 46 2B, 05, 05]
+1D963; [0D 49 90, 05, 05]
-1D9A8; [0D 46 32, 05, 05]
+1D964; [0D 49 97, 05, 05]
-1D9A9; [0D 46 39, 05, 05]
+1D965; [0D 49 9E, 05, 05]
-1D9AA; [0D 46 40, 05, 05]
+1D966; [0D 49 A5, 05, 05]
-1D9AB; [0D 46 47, 05, 05]
+1D967; [0D 49 AC, 05, 05]
-1D9AC; [0D 46 4E, 05, 05]
+1D968; [0D 49 B3, 05, 05]
-1D9AD; [0D 46 55, 05, 05]
+1D969; [0D 49 BA, 05, 05]
-1D9AE; [0D 46 5C, 05, 05]
+1D96A; [0D 49 C1, 05, 05]
-1D9AF; [0D 46 63, 05, 05]
+1D96B; [0D 49 C8, 05, 05]
-1D9B0; [0D 46 6A, 05, 05]
+1D96C; [0D 49 CF, 05, 05]
-1D9B1; [0D 46 71, 05, 05]
+1D96D; [0D 49 D6, 05, 05]
-1D9B2; [0D 46 78, 05, 05]
+1D96E; [0D 49 DD, 05, 05]
-1D9B3; [0D 46 7F, 05, 05]
+1D96F; [0D 49 E4, 05, 05]
-1D9B4; [0D 46 86, 05, 05]
+1D970; [0D 49 EB, 05, 05]
-1D9B5; [0D 46 8D, 05, 05]
+1D971; [0D 49 F2, 05, 05]
-1D9B6; [0D 46 94, 05, 05]
+1D972; [0D 49 F9, 05, 05]
-1D9B7; [0D 46 9B, 05, 05]
+1D973; [0D 4A 02, 05, 05]
-1D9B8; [0D 46 A2, 05, 05]
+1D974; [0D 4A 09, 05, 05]
-1D9B9; [0D 46 A9, 05, 05]
+1D975; [0D 4A 10, 05, 05]
-1D9BA; [0D 46 B0, 05, 05]
+1D976; [0D 4A 17, 05, 05]
-1D9BB; [0D 46 B7, 05, 05]
+1D977; [0D 4A 1E, 05, 05]
-1D9BC; [0D 46 BE, 05, 05]
+1D978; [0D 4A 25, 05, 05]
-1D9BD; [0D 46 C5, 05, 05]
+1D979; [0D 4A 2C, 05, 05]
-1D9BE; [0D 46 CC, 05, 05]
+1D97A; [0D 4A 33, 05, 05]
-1D9BF; [0D 46 D3, 05, 05]
+1D97B; [0D 4A 3A, 05, 05]
-1D9C0; [0D 46 DA, 05, 05]
+1D97C; [0D 4A 41, 05, 05]
-1D9C1; [0D 46 E1, 05, 05]
+1D97D; [0D 4A 48, 05, 05]
-1D9C2; [0D 46 E8, 05, 05]
+1D97E; [0D 4A 4F, 05, 05]
-1D9C3; [0D 46 EF, 05, 05]
+1D97F; [0D 4A 56, 05, 05]
-1D9C4; [0D 46 F6, 05, 05]
+1D980; [0D 4A 5D, 05, 05]
-1D9C5; [0D 46 FD, 05, 05]
+1D981; [0D 4A 64, 05, 05]
-1D9C6; [0D 47 06, 05, 05]
+1D982; [0D 4A 6B, 05, 05]
-1D9C7; [0D 47 0D, 05, 05]
+1D983; [0D 4A 72, 05, 05]
-1D9C8; [0D 47 14, 05, 05]
+1D984; [0D 4A 79, 05, 05]
-1D9C9; [0D 47 1B, 05, 05]
+1D985; [0D 4A 80, 05, 05]
-1D9CA; [0D 47 22, 05, 05]
+1D986; [0D 4A 87, 05, 05]
-1D9CB; [0D 47 29, 05, 05]
+1D987; [0D 4A 8E, 05, 05]
-1D9CC; [0D 47 30, 05, 05]
+1D988; [0D 4A 95, 05, 05]
-1D9CD; [0D 47 37, 05, 05]
+1D989; [0D 4A 9C, 05, 05]
-1D9CE; [0D 47 3E, 05, 05]
+1D98A; [0D 4A A3, 05, 05]
-1D9CF; [0D 47 45, 05, 05]
+1D98B; [0D 4A AA, 05, 05]
-1D9D0; [0D 47 4C, 05, 05]
+1D98C; [0D 4A B1, 05, 05]
-1D9D1; [0D 47 53, 05, 05]
+1D98D; [0D 4A B8, 05, 05]
-1D9D2; [0D 47 5A, 05, 05]
+1D98E; [0D 4A BF, 05, 05]
-1D9D3; [0D 47 61, 05, 05]
+1D98F; [0D 4A C6, 05, 05]
-1D9D4; [0D 47 68, 05, 05]
+1D990; [0D 4A CD, 05, 05]
-1D9D5; [0D 47 6F, 05, 05]
+1D991; [0D 4A D4, 05, 05]
-1D9D6; [0D 47 76, 05, 05]
+1D992; [0D 4A DB, 05, 05]
-1D9D7; [0D 47 7D, 05, 05]
+1D993; [0D 4A E2, 05, 05]
-1D9D8; [0D 47 84, 05, 05]
+1D994; [0D 4A E9, 05, 05]
-1D9D9; [0D 47 8B, 05, 05]
+1D995; [0D 4A F0, 05, 05]
-1D9DA; [0D 47 92, 05, 05]
+1D996; [0D 4A F7, 05, 05]
-1D9DB; [0D 47 99, 05, 05]
+1D997; [0D 4A FE, 05, 05]
-1D9DC; [0D 47 A0, 05, 05]
+1D998; [0D 4B 07, 05, 05]
-1D9DD; [0D 47 A7, 05, 05]
+1D999; [0D 4B 0E, 05, 05]
-1D9DE; [0D 47 AE, 05, 05]
+1D99A; [0D 4B 15, 05, 05]
-1D9DF; [0D 47 B5, 05, 05]
+1D99B; [0D 4B 1C, 05, 05]
-1D9E0; [0D 47 BC, 05, 05]
+1D99C; [0D 4B 23, 05, 05]
-1D9E1; [0D 47 C3, 05, 05]
+1D99D; [0D 4B 2A, 05, 05]
-1D9E2; [0D 47 CA, 05, 05]
+1D99E; [0D 4B 31, 05, 05]
-1D9E3; [0D 47 D1, 05, 05]
+1D99F; [0D 4B 38, 05, 05]
-1D9E4; [0D 47 D8, 05, 05]
+1D9A0; [0D 4B 3F, 05, 05]
-1D9E5; [0D 47 DF, 05, 05]
+1D9A1; [0D 4B 46, 05, 05]
-1D9E6; [0D 47 E6, 05, 05]
+1D9A2; [0D 4B 4D, 05, 05]
-1D9E7; [0D 47 ED, 05, 05]
+1D9A3; [0D 4B 54, 05, 05]
-1D9E8; [0D 47 F4, 05, 05]
+1D9A4; [0D 4B 5B, 05, 05]
-1D9E9; [0D 47 FB, 05, 05]
+1D9A5; [0D 4B 62, 05, 05]
-1D9EA; [0D 48 04, 05, 05]
+1D9A6; [0D 4B 69, 05, 05]
-1D9EB; [0D 48 0B, 05, 05]
+1D9A7; [0D 4B 70, 05, 05]
-1D9EC; [0D 48 12, 05, 05]
+1D9A8; [0D 4B 77, 05, 05]
-1D9ED; [0D 48 19, 05, 05]
+1D9A9; [0D 4B 7E, 05, 05]
-1D9EE; [0D 48 20, 05, 05]
+1D9AA; [0D 4B 85, 05, 05]
-1D9EF; [0D 48 27, 05, 05]
+1D9AB; [0D 4B 8C, 05, 05]
-1D9F0; [0D 48 2E, 05, 05]
+1D9AC; [0D 4B 93, 05, 05]
-1D9F1; [0D 48 35, 05, 05]
+1D9AD; [0D 4B 9A, 05, 05]
-1D9F2; [0D 48 3C, 05, 05]
+1D9AE; [0D 4B A1, 05, 05]
-1D9F3; [0D 48 43, 05, 05]
+1D9AF; [0D 4B A8, 05, 05]
-1D9F4; [0D 48 4A, 05, 05]
+1D9B0; [0D 4B AF, 05, 05]
-1D9F5; [0D 48 51, 05, 05]
+1D9B1; [0D 4B B6, 05, 05]
-1D9F6; [0D 48 58, 05, 05]
+1D9B2; [0D 4B BD, 05, 05]
-1D9F7; [0D 48 5F, 05, 05]
+1D9B3; [0D 4B C4, 05, 05]
-1D9F8; [0D 48 66, 05, 05]
+1D9B4; [0D 4B CB, 05, 05]
-1D9F9; [0D 48 6D, 05, 05]
+1D9B5; [0D 4B D2, 05, 05]
-1D9FA; [0D 48 74, 05, 05]
+1D9B6; [0D 4B D9, 05, 05]
-1D9FB; [0D 48 7B, 05, 05]
+1D9B7; [0D 4B E0, 05, 05]
-1D9FC; [0D 48 82, 05, 05]
+1D9B8; [0D 4B E7, 05, 05]
-1D9FD; [0D 48 89, 05, 05]
+1D9B9; [0D 4B EE, 05, 05]
-1D9FE; [0D 48 90, 05, 05]
+1D9BA; [0D 4B F5, 05, 05]
-1D9FF; [0D 48 97, 05, 05]
+1D9BB; [0D 4B FC, 05, 05]
-1DA37; [0D 48 9E, 05, 05]
+1D9BC; [0D 4C 05, 05, 05]
-1DA38; [0D 48 A5, 05, 05]
+1D9BD; [0D 4C 0C, 05, 05]
-1DA39; [0D 48 AC, 05, 05]
+1D9BE; [0D 4C 13, 05, 05]
-1DA3A; [0D 48 B3, 05, 05]
+1D9BF; [0D 4C 1A, 05, 05]
-1DA6D; [0D 48 BA, 05, 05]
+1D9C0; [0D 4C 21, 05, 05]
-1DA6E; [0D 48 C1, 05, 05]
+1D9C1; [0D 4C 28, 05, 05]
-1DA6F; [0D 48 C8, 05, 05]
+1D9C2; [0D 4C 2F, 05, 05]
-1DA70; [0D 48 CF, 05, 05]
+1D9C3; [0D 4C 36, 05, 05]
-1DA71; [0D 48 D6, 05, 05]
+1D9C4; [0D 4C 3D, 05, 05]
-1DA72; [0D 48 DD, 05, 05]
+1D9C5; [0D 4C 44, 05, 05]
-1DA73; [0D 48 E4, 05, 05]
+1D9C6; [0D 4C 4B, 05, 05]
-1DA74; [0D 48 EB, 05, 05]
+1D9C7; [0D 4C 52, 05, 05]
-1DA76; [0D 48 F2, 05, 05]
+1D9C8; [0D 4C 59, 05, 05]
-1DA77; [0D 48 F9, 05, 05]
+1D9C9; [0D 4C 60, 05, 05]
-1DA78; [0D 49 02, 05, 05]
+1D9CA; [0D 4C 67, 05, 05]
-1DA79; [0D 49 09, 05, 05]
+1D9CB; [0D 4C 6E, 05, 05]
-1DA7A; [0D 49 10, 05, 05]
+1D9CC; [0D 4C 75, 05, 05]
-1DA7B; [0D 49 17, 05, 05]
+1D9CD; [0D 4C 7C, 05, 05]
-1DA7C; [0D 49 1E, 05, 05]
+1D9CE; [0D 4C 83, 05, 05]
-1DA7D; [0D 49 25, 05, 05]
+1D9CF; [0D 4C 8A, 05, 05]
-1DA7E; [0D 49 2C, 05, 05]
+1D9D0; [0D 4C 91, 05, 05]
-1DA7F; [0D 49 33, 05, 05]
+1D9D1; [0D 4C 98, 05, 05]
-1DA80; [0D 49 3A, 05, 05]
+1D9D2; [0D 4C 9F, 05, 05]
-1DA81; [0D 49 41, 05, 05]
+1D9D3; [0D 4C A6, 05, 05]
-1DA82; [0D 49 48, 05, 05]
+1D9D4; [0D 4C AD, 05, 05]
-1DA83; [0D 49 4F, 05, 05]
+1D9D5; [0D 4C B4, 05, 05]
-1DA85; [0D 49 56, 05, 05]
+1D9D6; [0D 4C BB, 05, 05]
-1DA86; [0D 49 5D, 05, 05]
+1D9D7; [0D 4C C2, 05, 05]
-2FF0; [0D 49 64, 05, 05]
+1D9D8; [0D 4C C9, 05, 05]
-2FF1; [0D 49 6B, 05, 05]
+1D9D9; [0D 4C D0, 05, 05]
-2FF2; [0D 49 72, 05, 05]
+1D9DA; [0D 4C D7, 05, 05]
-2FF3; [0D 49 79, 05, 05]
+1D9DB; [0D 4C DE, 05, 05]
-2FF4; [0D 49 80, 05, 05]
+1D9DC; [0D 4C E5, 05, 05]
-2FF5; [0D 49 87, 05, 05]
+1D9DD; [0D 4C EC, 05, 05]
-2FF6; [0D 49 8E, 05, 05]
+1D9DE; [0D 4C F3, 05, 05]
-2FF7; [0D 49 95, 05, 05]
+1D9DF; [0D 4C FA, 05, 05]
-2FF8; [0D 49 9C, 05, 05]
+1D9E0; [0D 4D 03, 05, 05]
-2FF9; [0D 49 A3, 05, 05]
+1D9E1; [0D 4D 0A, 05, 05]
-2FFA; [0D 49 AA, 05, 05]
+1D9E2; [0D 4D 11, 05, 05]
-2FFB; [0D 49 B1, 05, 05]
+1D9E3; [0D 4D 18, 05, 05]
-31C0; [0D 49 B8, 05, 05]
+1D9E4; [0D 4D 1F, 05, 05]
-31C1; [0D 49 BF, 05, 05]
+1D9E5; [0D 4D 26, 05, 05]
-31C2; [0D 49 C6, 05, 05]
+1D9E6; [0D 4D 2D, 05, 05]
-31C3; [0D 49 CD, 05, 05]
+1D9E7; [0D 4D 34, 05, 05]
-31C4; [0D 49 D4, 05, 05]
+1D9E8; [0D 4D 3B, 05, 05]
-31C5; [0D 49 DB, 05, 05]
+1D9E9; [0D 4D 42, 05, 05]
-31C6; [0D 49 E2, 05, 05]
+1D9EA; [0D 4D 49, 05, 05]
-31C7; [0D 49 E9, 05, 05]
+1D9EB; [0D 4D 50, 05, 05]
-31C8; [0D 49 F0, 05, 05]
+1D9EC; [0D 4D 57, 05, 05]
-31C9; [0D 49 F7, 05, 05]
+1D9ED; [0D 4D 5E, 05, 05]
-31CA; [0D 49 FE, 05, 05]
+1D9EE; [0D 4D 65, 05, 05]
-31CB; [0D 4A 07, 05, 05]
+1D9EF; [0D 4D 6C, 05, 05]
-31CC; [0D 4A 0E, 05, 05]
+1D9F0; [0D 4D 73, 05, 05]
-31CD; [0D 4A 15, 05, 05]
+1D9F1; [0D 4D 7A, 05, 05]
-31CE; [0D 4A 1C, 05, 05]
+1D9F2; [0D 4D 81, 05, 05]
-31CF; [0D 4A 23, 05, 05]
+1D9F3; [0D 4D 88, 05, 05]
-31D0; [0D 4A 2A, 05, 05]
+1D9F4; [0D 4D 8F, 05, 05]
-31D1; [0D 4A 31, 05, 05]
+1D9F5; [0D 4D 96, 05, 05]
-31D2; [0D 4A 38, 05, 05]
+1D9F6; [0D 4D 9D, 05, 05]
-31D3; [0D 4A 3F, 05, 05]
+1D9F7; [0D 4D A4, 05, 05]
-31D4; [0D 4A 46, 05, 05]
+1D9F8; [0D 4D AB, 05, 05]
-31D5; [0D 4A 4D, 05, 05]
+1D9F9; [0D 4D B2, 05, 05]
-31D6; [0D 4A 54, 05, 05]
+1D9FA; [0D 4D B9, 05, 05]
-31D7; [0D 4A 5B, 05, 05]
+1D9FB; [0D 4D C0, 05, 05]
-31D8; [0D 4A 62, 05, 05]
+1D9FC; [0D 4D C7, 05, 05]
-31D9; [0D 4A 69, 05, 05]
+1D9FD; [0D 4D CE, 05, 05]
-31DA; [0D 4A 70, 05, 05]
+1D9FE; [0D 4D D5, 05, 05]
-31DB; [0D 4A 77, 05, 05]
+1D9FF; [0D 4D DC, 05, 05]
-31DC; [0D 4A 7E, 05, 05]
+1DA37; [0D 4D E3, 05, 05]
-31DD; [0D 4A 85, 05, 05]
+1DA38; [0D 4D EA, 05, 05]
-31DE; [0D 4A 8C, 05, 05]
+1DA39; [0D 4D F1, 05, 05]
-31DF; [0D 4A 93, 05, 05]
+1DA3A; [0D 4D F8, 05, 05]
-31E0; [0D 4A 9A, 05, 05]
+1DA6D; [0D 4D FF, 05, 05]
-31E1; [0D 4A A1, 05, 05]
+1DA6E; [0D 4E 08, 05, 05]
-31E2; [0D 4A A8, 05, 05]
+1DA6F; [0D 4E 0F, 05, 05]
-31E3; [0D 4A AF, 05, 05]
+1DA70; [0D 4E 16, 05, 05]
-3004; [0D 4A B6, 05, 05]
+1DA71; [0D 4E 1D, 05, 05]
-3012; [0D 4C, 05, 05]
-3036; [0D 4C, 05, 20]
+1DA72; [0D 4E 24, 05, 05]
-3013; [0D 4E 02, 05, 05]
+1DA73; [0D 4E 2B, 05, 05]
-3020; [0D 4E 09, 05, 05]
+1DA74; [0D 4E 32, 05, 05]
-3037; [0D 4E 10, 05, 05]
+1DA76; [0D 4E 39, 05, 05]
-303E; [0D 4E 17, 05, 05]
+1DA77; [0D 4E 40, 05, 05]
-303F; [0D 4E 1E, 05, 05]
+1DA78; [0D 4E 47, 05, 05]
-3190; [0D 4E 25, 05, 05]
+1DA79; [0D 4E 4E, 05, 05]
-3191; [0D 4E 2C, 05, 05]
+1DA7A; [0D 4E 55, 05, 05]
-327F; [0D 4E 33, 05, 05]
+1DA7B; [0D 4E 5C, 05, 05]
-FFFC; [0D 4E 3A, 05, 05]
+1DA7C; [0D 4E 63, 05, 05]
-02D0; [0D 50, 05, 05]
+1DA7D; [0D 4E 6A, 05, 05]
-02D1; [0D 52, 05, 05]
+1DA7E; [0D 4E 71, 05, 05]
-0971; [0D 54, 05, 05]
+1DA7F; [0D 4E 78, 05, 05]
-0E46; [0D 56, 05, 05]
+1DA80; [0D 4E 7F, 05, 05]
-0EC6; [0D 58, 05, 05]
+1DA81; [0D 4E 86, 05, 05]
-17D7; [0D 5A, 05, 05]
+1DA82; [0D 4E 8D, 05, 05]
-1AA7; [0D 5C, 05, 05]
+1DA83; [0D 4E 94, 05, 05]
-A9CF; [0D 5E, 05, 05]
+1DA85; [0D 4E 9B, 05, 05]
-A9E6; [0D 60, 05, 05]
+1DA86; [0D 4E A2, 05, 05]
-AA70; [0D 62, 05, 05]
+2FF0; [0D 4E A9, 05, 05]
-AADD; [0D 64 02, 05, 05]
+2FF1; [0D 4E B0, 05, 05]
-AAF3; [0D 64 09, 05, 05]
+2FF2; [0D 4E B7, 05, 05]
-AAF4; [0D 64 10, 05, 05]
+2FF3; [0D 4E BE, 05, 05]
-16B42; [0D 64 17, 05, 05]
+2FF4; [0D 4E C5, 05, 05]
-16B43; [0D 64 1E, 05, 05]
+2FF5; [0D 4E CC, 05, 05]
-1E13C; [0D 64 25, 05, 05]
+2FF6; [0D 4E D3, 05, 05]
-1E13D; [0D 64 2C, 05, 05]
+2FF7; [0D 4E DA, 05, 05]
-3005; [0D 66, 05, 05]
+2FF8; [0D 4E E1, 05, 05]
-303B; [0D 68, 05, 05]
+2FF9; [0D 4E E8, 05, 05]
-16FE0; [0D 6A 02, 05, 05]
+2FFA; [0D 4E EF, 05, 05]
-16FE1; [0D 6A 09, 05, 05]
+2FFB; [0D 4E F6, 05, 05]
-16FE3; [0D 6C, 05, 05]
+31C0; [0D 4E FD, 05, 05]
-3031; [0D 6E, 05, 05]
-3032; [0D 6E, 05, 05][, AE, 05]
+31C1; [0D 4F 06, 05, 05]
-3033; [0D 70, 05, 05]
-3034; [0D 70, 05, 05][, AE, 05]
+31C2; [0D 4F 0D, 05, 05]
-3035; [0D 72, 05, 05]
+31C3; [0D 4F 14, 05, 05]
-309D; [0D 74, 05, 05]
-309E; [0D 74, 05, 05][, AE, 05]
+31C4; [0D 4F 1B, 05, 05]
-30FC; [0D 76, 05, 05]
-FF70; [0D 76, 05, A0]
+31C5; [0D 4F 22, 05, 05]
-30FD; [0D 78, 05, 05]
-30FE; [0D 78, 05, 05][, AE, 05]
+31C6; [0D 4F 29, 05, 05]
-FDD1 20AC; [0D 84 02, 05, 05] # CURRENCY first primary
+31C7; [0D 4F 30, 05, 05]
-00A4; [0D 86, 05, 05]
+31C8; [0D 4F 37, 05, 05]
-00A2; [0D 88, 05, 05]
-FFE0; [0D 88, 05, 20]
+31C9; [0D 4F 3E, 05, 05]
-0024; [0D 8A, 05, 05]
-FF04; [0D 8A, 05, 20]
-FE69; [0D 8A, 05, 2E]
+31CA; [0D 4F 45, 05, 05]
-00A3; [0D 8C, 05, 05]
-FFE1; [0D 8C, 05, 20]
+31CB; [0D 4F 4C, 05, 05]
-00A5; [0D 8E, 05, 05]
-FFE5; [0D 8E, 05, 20]
+31CC; [0D 4F 53, 05, 05]
-058F; [0D 90, 05, 05]
+31CD; [0D 4F 5A, 05, 05]
-060B; [0D 92, 05, 05]
+31CE; [0D 4F 61, 05, 05]
-07FE; [0D 94 02, 05, 05]
+31CF; [0D 4F 68, 05, 05]
-07FF; [0D 94 09, 05, 05]
+31D0; [0D 4F 6F, 05, 05]
-09F2; [0D 96, 05, 05]
+31D1; [0D 4F 76, 05, 05]
-09F3; [0D 98, 05, 05]
+31D2; [0D 4F 7D, 05, 05]
-09FB; [0D 9A, 05, 05]
+31D3; [0D 4F 84, 05, 05]
-0AF1; [0D 9C, 05, 05]
+31D4; [0D 4F 8B, 05, 05]
-A838; [0D 9E, 05, 05]
+31D5; [0D 4F 92, 05, 05]
-0BF9; [0D A0, 05, 05]
+31D6; [0D 4F 99, 05, 05]
-11FDD; [0D A2, 05, 05]
+31D7; [0D 4F A0, 05, 05]
-11FDE; [0D A4, 05, 05]
+31D8; [0D 4F A7, 05, 05]
-11FDF; [0D A6, 05, 05]
+31D9; [0D 4F AE, 05, 05]
-11FE0; [0D A8, 05, 05]
+31DA; [0D 4F B5, 05, 05]
-0E3F; [0D AA, 05, 05]
+31DB; [0D 4F BC, 05, 05]
-17DB; [0D AC, 05, 05]
+31DC; [0D 4F C3, 05, 05]
-1E2FF; [0D AE, 05, 05]
+31DD; [0D 4F CA, 05, 05]
-20A0; [0D B0, 05, 05]
+31DE; [0D 4F D1, 05, 05]
-20A1; [0D B2, 05, 05]
+31DF; [0D 4F D8, 05, 05]
-20A2; [0D B4, 05, 05]
+31E0; [0D 4F DF, 05, 05]
-20A3; [0D B6, 05, 05]
+31E1; [0D 4F E6, 05, 05]
-20A4; [0D B8, 05, 05]
+31E2; [0D 4F ED, 05, 05]
-20A5; [0D BA, 05, 05]
+31E3; [0D 4F F4, 05, 05]
-20A6; [0D BC, 05, 05]
+3004; [0D 4F FB, 05, 05]
-20A7; [0D BE, 05, 05]
+3012; [0D 51, 05, 05]
+3036; [0D 51, 05, 20]
-20A9; [0D C0, 05, 05]
-FFE6; [0D C0, 05, 20]
+3013; [0D 53 02, 05, 05]
-20AA; [0D C2, 05, 05]
+3020; [0D 53 09, 05, 05]
-20AB; [0D C4, 05, 05]
+3037; [0D 53 10, 05, 05]
-20AC; [0D C6, 05, 05]
+303E; [0D 53 17, 05, 05]
-20AD; [0D C8, 05, 05]
+303F; [0D 53 1E, 05, 05]
-20AE; [0D CA, 05, 05]
+3190; [0D 53 25, 05, 05]
-20AF; [0D CC, 05, 05]
+3191; [0D 53 2C, 05, 05]
-20B0; [0D CE, 05, 05]
+327F; [0D 53 33, 05, 05]
-20B1; [0D D0, 05, 05]
+FFFC; [0D 53 3A, 05, 05]
-20B2; [0D D2, 05, 05]
+02D0; [0D 55, 05, 05]
+10781; [0D 55, 05, 20]
-20B3; [0D D4, 05, 05]
+02D1; [0D 57, 05, 05]
+10782; [0D 57, 05, 20]
-20B4; [0D D6, 05, 05]
+0971; [0D 59, 05, 05]
-20B5; [0D D8, 05, 05]
+0E46; [0D 5B, 05, 05]
-20B6; [0D DA, 05, 05]
+0EC6; [0D 5D, 05, 05]
-20B7; [0D DC, 05, 05]
+17D7; [0D 5F, 05, 05]
-20B8; [0D DE, 05, 05]
+1AA7; [0D 61, 05, 05]
-20B9; [0D E0, 05, 05]
+A9CF; [0D 63, 05, 05]
-1ECB0; [0D E2, 05, 05]
+A9E6; [0D 65, 05, 05]
-20BA; [0D E4, 05, 05]
+AA70; [0D 67, 05, 05]
-20BB; [0D E6, 05, 05]
+AADD; [0D 69 02, 05, 05]
-20BC; [0D E8, 05, 05]
+AAF3; [0D 69 09, 05, 05]
-20BD; [0D EA, 05, 05]
+AAF4; [0D 69 10, 05, 05]
-20BE; [0D EC, 05, 05]
+16B42; [0D 69 17, 05, 05]
-20BF; [0D EE, 05, 05]
+16B43; [0D 69 1E, 05, 05]
-20A8; [0D F0, 05, 05]
+1E13C; [0D 69 25, 05, 05]
-FDFC; [0D F2, 05, 05]
+1E13D; [0D 69 2C, 05, 05]
+
+3005; [0D 6B, 05, 05]
+
+303B; [0D 6D, 05, 05]
+
+16FE0; [0D 6F 02, 05, 05]
+
+16FE1; [0D 6F 09, 05, 05]
+
+16FE3; [0D 71, 05, 05]
+
+3031; [0D 73, 05, 05]
+3032; [0D 73, 05, 05][, AE, 05]
+
+3033; [0D 75, 05, 05]
+3034; [0D 75, 05, 05][, AE, 05]
+
+3035; [0D 77, 05, 05]
+
+309D; [0D 79, 05, 05]
+309E; [0D 79, 05, 05][, AE, 05]
+
+30FC; [0D 7B, 05, 05]
+FF70; [0D 7B, 05, A0]
+
+30FD; [0D 7D, 05, 05]
+30FE; [0D 7D, 05, 05][, AE, 05]
+
+FDD1 20AC; [0D 89 02, 05, 05] # CURRENCY first primary
+
+00A4; [0D 8B, 05, 05]
+
+00A2; [0D 8D, 05, 05]
+FFE0; [0D 8D, 05, 20]
+
+0024; [0D 8F, 05, 05]
+FF04; [0D 8F, 05, 20]
+FE69; [0D 8F, 05, 2E]
+
+00A3; [0D 91, 05, 05]
+FFE1; [0D 91, 05, 20]
+
+00A5; [0D 93, 05, 05]
+FFE5; [0D 93, 05, 20]
+
+058F; [0D 95, 05, 05]
+
+060B; [0D 97, 05, 05]
+
+07FE; [0D 99 02, 05, 05]
+
+07FF; [0D 99 09, 05, 05]
+
+09F2; [0D 9B, 05, 05]
+
+09F3; [0D 9D, 05, 05]
+
+09FB; [0D 9F, 05, 05]
+
+0AF1; [0D A1, 05, 05]
+
+A838; [0D A3, 05, 05]
+
+0BF9; [0D A5, 05, 05]
+
+11FDD; [0D A7, 05, 05]
+
+11FDE; [0D A9, 05, 05]
+
+11FDF; [0D AB, 05, 05]
+
+11FE0; [0D AD, 05, 05]
+
+0E3F; [0D AF, 05, 05]
+
+17DB; [0D B1, 05, 05]
+
+1E2FF; [0D B3, 05, 05]
+
+20A0; [0D B5, 05, 05]
+
+20A1; [0D B7, 05, 05]
+
+20A2; [0D B9, 05, 05]
+
+20A3; [0D BB, 05, 05]
+
+20A4; [0D BD, 05, 05]
+
+20A5; [0D BF, 05, 05]
+
+20A6; [0D C1, 05, 05]
+
+20A7; [0D C3, 05, 05]
+
+20A9; [0D C5, 05, 05]
+FFE6; [0D C5, 05, 20]
+
+20AA; [0D C7, 05, 05]
+
+20AB; [0D C9, 05, 05]
+
+20AC; [0D CB, 05, 05]
+
+20AD; [0D CD, 05, 05]
+
+20AE; [0D CF, 05, 05]
+
+20AF; [0D D1, 05, 05]
+
+20B0; [0D D3, 05, 05]
+
+20B1; [0D D5, 05, 05]
+
+20B2; [0D D7, 05, 05]
+
+20B3; [0D D9, 05, 05]
+
+20B4; [0D DB, 05, 05]
+
+20B5; [0D DD, 05, 05]
+
+20B6; [0D DF, 05, 05]
+
+20B7; [0D E1, 05, 05]
+
+20B8; [0D E3, 05, 05]
+
+20B9; [0D E5, 05, 05]
+
+1ECB0; [0D E7, 05, 05]
+
+20BA; [0D E9, 05, 05]
+
+20BB; [0D EB, 05, 05]
+
+20BC; [0D ED, 05, 05]
+
+20BD; [0D EF, 05, 05]
+
+20BE; [0D F1, 05, 05]
+
+20BF; [0D F3, 05, 05]
+
+20C0; [0D F5, 05, 05]
+
+20A8; [0D F7, 05, 05]
+
+FDFC; [0D F9, 05, 05]
FDD1 0034; [0E 02 02, 05, 05] # DIGIT first primary starts new lead byte
@@ -17603,6 +18134,7 @@ ABF0; [13, 05, 05]
11D50; [13, 05, 05]
11DA0; [13, 05, 05]
16A60; [13, 05, 05]
+16AC0; [13, 05, 05]
16B50; [13, 05, 05]
16E80; [13, 05, 05]
1D2E0; [13, 05, 05]
@@ -17625,7 +18157,7 @@ FF10; [13, 05, 10]
2080; [13, 05, 29]
1F101; [13, 05, 15][06, 05, 1B]
1F100; [13, 05, 15][08, 05, 18]
-2189; [13, 05, 33][0C 95, 05, 20][19, 05, 33]
+2189; [13, 05, 33][0C 96, 05, 20][19, 05, 33]
3358; [13, 05, 15][U+70B9, 10]
0031; [15, 05, 05]
@@ -17723,6 +18255,7 @@ ABF1; [15, 05, 05]
1244F; [15, 05, 05]
12458; [15, 05, 05]
16A61; [15, 05, 05]
+16AC1; [15, 05, 05]
16B51; [15, 05, 05]
16E81; [15, 05, 05]
1D2E1; [15, 05, 05]
@@ -17755,16 +18288,16 @@ FF11; [15, 05, 10]
1ECB1; [15, 70, 05]
1F102; [15, 05, 15][06, 05, 1B]
2488; [15, 05, 15][08, 05, 18]
-215F; [15, 05, 33][0C 95, 05, 20]
-2152; [15, 05, 33][0C 95, 05, 20][15, 05, 33][13, 05, 33]
-00BD; [15, 05, 33][0C 95, 05, 20][17, 05, 33]
-2153; [15, 05, 33][0C 95, 05, 20][19, 05, 33]
-00BC; [15, 05, 33][0C 95, 05, 20][1B, 05, 33]
-2155; [15, 05, 33][0C 95, 05, 20][1D, 05, 33]
-2159; [15, 05, 33][0C 95, 05, 20][1F, 05, 33]
-2150; [15, 05, 33][0C 95, 05, 20][21, 05, 33]
-215B; [15, 05, 33][0C 95, 05, 20][23, 05, 33]
-2151; [15, 05, 33][0C 95, 05, 20][25, 05, 34]
+215F; [15, 05, 33][0C 96, 05, 20]
+2152; [15, 05, 33][0C 96, 05, 20][15, 05, 33][13, 05, 33]
+00BD; [15, 05, 33][0C 96, 05, 20][17, 05, 33]
+2153; [15, 05, 33][0C 96, 05, 20][19, 05, 33]
+00BC; [15, 05, 33][0C 96, 05, 20][1B, 05, 33]
+2155; [15, 05, 33][0C 96, 05, 20][1D, 05, 33]
+2159; [15, 05, 33][0C 96, 05, 20][1F, 05, 33]
+2150; [15, 05, 33][0C 96, 05, 20][21, 05, 33]
+215B; [15, 05, 33][0C 96, 05, 20][23, 05, 33]
+2151; [15, 05, 33][0C 96, 05, 20][25, 05, 34]
2469; [15, 05, 1F][13, 05, 1F]
24FE; [15, 05, 1F][13, 05, 1F]
277F; [15, 05, 1F][13, 05, 1F]
@@ -17918,6 +18451,7 @@ ABF2; [17, 05, 05]
12456; [17, 05, 05]
12459; [17, 05, 05]
16A62; [17, 05, 05]
+16AC2; [17, 05, 05]
16B52; [17, 05, 05]
16E82; [17, 05, 05]
1D2E2; [17, 05, 05]
@@ -17950,8 +18484,8 @@ FF12; [17, 05, 10]
1ED2F; [17, 70, 05]
1F103; [17, 05, 15][06, 05, 1B]
2489; [17, 05, 15][08, 05, 18]
-2154; [17, 05, 33][0C 95, 05, 20][19, 05, 33]
-2156; [17, 05, 33][0C 95, 05, 20][1D, 05, 33]
+2154; [17, 05, 33][0C 96, 05, 20][19, 05, 33]
+2156; [17, 05, 33][0C 96, 05, 20][1D, 05, 33]
2473; [17, 05, 1F][13, 05, 1F]
24F4; [17, 05, 1F][13, 05, 1F]
3249; [17, 05, 1F][13, 05, 1F]
@@ -18078,6 +18612,7 @@ ABF3; [19, 05, 05]
12451; [19, 05, 05]
12457; [19, 05, 05]
16A63; [19, 05, 05]
+16AC3; [19, 05, 05]
16B53; [19, 05, 05]
16E83; [19, 05, 05]
1D2E3; [19, 05, 05]
@@ -18109,9 +18644,9 @@ FF13; [19, 05, 10]
1ED30; [19, 70, 20]
1F104; [19, 05, 15][06, 05, 1B]
248A; [19, 05, 15][08, 05, 18]
-00BE; [19, 05, 33][0C 95, 05, 20][1B, 05, 33]
-2157; [19, 05, 33][0C 95, 05, 20][1D, 05, 33]
-215C; [19, 05, 33][0C 95, 05, 20][23, 05, 33]
+00BE; [19, 05, 33][0C 96, 05, 20][1B, 05, 33]
+2157; [19, 05, 33][0C 96, 05, 20][1D, 05, 33]
+215C; [19, 05, 33][0C 96, 05, 20][23, 05, 33]
324A; [19, 05, 1F][13, 05, 1F]
325A; [19, 05, 1F][13, 05, 1F]
33FD; [19, 05, 15][13, 05, 15][U+65E5, 10]
@@ -18219,6 +18754,7 @@ ABF4; [1B, 05, 05]
12453; [1B, 05, 05]
12469; [1B, 05, 05]
16A64; [1B, 05, 05]
+16AC4; [1B, 05, 05]
16B54; [1B, 05, 05]
16E84; [1B, 05, 05]
1D2E4; [1B, 05, 05]
@@ -18249,7 +18785,7 @@ FF14; [1B, 05, 10]
1ED31; [1B, 70, 05]
1F105; [1B, 05, 15][06, 05, 1B]
248B; [1B, 05, 15][08, 05, 18]
-2158; [1B, 05, 33][0C 95, 05, 20][1D, 05, 33]
+2158; [1B, 05, 33][0C 96, 05, 20][1D, 05, 33]
324B; [1B, 05, 1F][13, 05, 1F]
32B5; [1B, 05, 1F][13, 05, 1F]
32B6; [1B, 05, 1F][15, 05, 1F]
@@ -18354,6 +18890,7 @@ ABF5; [1D, 05, 05]
12455; [1D, 05, 05]
1246A; [1D, 05, 05]
16A65; [1D, 05, 05]
+16AC5; [1D, 05, 05]
16B55; [1D, 05, 05]
16E85; [1D, 05, 05]
1D2E5; [1D, 05, 05]
@@ -18386,8 +18923,8 @@ FF15; [1D, 05, 10]
1F106; [1D, 05, 15][06, 05, 1B]
248C; [1D, 05, 15][08, 05, 18]
1F1A0; [1D, 05, 2E][08, 05, 30][15, 05, 2E]
-215A; [1D, 05, 33][0C 95, 05, 20][1F, 05, 33]
-215D; [1D, 05, 33][0C 95, 05, 20][23, 05, 33]
+215A; [1D, 05, 33][0C 96, 05, 20][1F, 05, 33]
+215D; [1D, 05, 33][0C 96, 05, 20][23, 05, 33]
324C; [1D, 05, 1F][13, 05, 1F]
32BF; [1D, 05, 1F][13, 05, 1F]
33E4; [1D, 05, 15][U+65E5, 10]
@@ -18467,6 +19004,7 @@ ABF6; [1F, 05, 05]
1244E; [1F, 05, 05]
1246B; [1F, 05, 05]
16A66; [1F, 05, 05]
+16AC6; [1F, 05, 05]
16B56; [1F, 05, 05]
16E86; [1F, 05, 05]
1D2E6; [1F, 05, 05]
@@ -18575,6 +19113,7 @@ ABF7; [21, 05, 05]
12443; [21, 05, 05]
1246C; [21, 05, 05]
16A67; [21, 05, 05]
+16AC7; [21, 05, 05]
16B57; [21, 05, 05]
16E87; [21, 05, 05]
1D2E7; [21, 05, 05]
@@ -18605,7 +19144,7 @@ FF17; [21, 05, 10]
1F108; [21, 05, 15][06, 05, 1B]
248E; [21, 05, 15][08, 05, 18]
1F1A1; [21, 05, 2E][08, 05, 30][15, 05, 2E]
-215E; [21, 05, 33][0C 95, 05, 20][23, 05, 33]
+215E; [21, 05, 33][0C 96, 05, 20][23, 05, 33]
324E; [21, 05, 1F][13, 05, 1F]
33E6; [21, 05, 15][U+65E5, 10]
32C6; [21, 05, 15][U+6708, 10]
@@ -18683,6 +19222,7 @@ ABF8; [23, 05, 05]
12445; [23, 05, 05]
1246D; [23, 05, 05]
16A68; [23, 05, 05]
+16AC8; [23, 05, 05]
16B58; [23, 05, 05]
16E88; [23, 05, 05]
1D2E8; [23, 05, 05]
@@ -18792,6 +19332,7 @@ ABF9; [25, 05, 05]
12449; [25, 05, 05]
1246E; [25, 05, 05]
16A69; [25, 05, 05]
+16AC9; [25, 05, 05]
16B59; [25, 05, 05]
16E89; [25, 05, 05]
1D2E9; [25, 05, 05]
@@ -18914,7 +19455,9 @@ A79A; [2A, 05, A2][, 96, 20]
01E1; [2A, 05, 05][, 9C, 05][, A4, 05]
01E0; [2A, 05, 9C][, 9C, 05][, A4, 05]
0105; [2A, 05, 05][, A2, 05]
+A7C1; [2A, 05, 13][, A2, 20]
0104; [2A, 05, 9C][, A2, 05]
+A7C0; [2A, 05, A2][, A2, 20]
0101; [2A, 05, 05][, A4, 05]
0100; [2A, 05, 9C][, A4, 05]
1EA3; [2A, 05, 05][, B6, 05]
@@ -18933,17 +19476,19 @@ A79A; [2A, 05, A2][, 96, 20]
1E00; [2A, 05, 9C][, C8, 05]
1DD3; [2A, 70, 05]
33C2; [2A, 05, 31][08, 05, 30][42, 05, 31][08, 05, 30]
-2100; [2A, 05, 13][0A 8A, 05, 2E][2E, 05, 13]
-2101; [2A, 05, 13][0A 8A, 05, 2E][4E, 05, 13]
-214D; [2A, 05, A2][0A 8A, 05, 2E][4E, 05, A2]
-33DF; [2A, 05, B4][0C 93, 05, 20][42, 05, 31]
+2100; [2A, 05, 13][0A 9E, 05, 2E][2E, 05, 13]
+2101; [2A, 05, 13][0A 9E, 05, 2E][4E, 05, 13]
+214D; [2A, 05, A2][0A 9E, 05, 2E][4E, 05, A2]
+33DF; [2A, 05, B4][0C 94, 05, 20][42, 05, 31]
A733; [2A, 05, 13][2A, 05, 13]
A732; [2A, 05, A2][2A, 05, A2]
+10780; [2A, 05, 2B][2A, 05, 2B]
1F18E; [2A, 05, B4][2C, 05, B1]
00E6; [2A, 70, 05][32, 05, 13]
1DD4; [2A, 70, 05][32, 05, 13]
00C6; [2A, 70, A0][32, 05, A2]
1D2D; [2A, 70, 2E][32, 05, 2B]
+10783; [2A, 70, 2E][32, 05, 2B]
01FD; [2A, 70, 05][32, 05, 13][, 88, 05]
01FC; [2A, 70, A0][32, 05, A2][, 88, 05]
01E3; [2A, 70, 05][32, 05, 13][, A4, 05]
@@ -18961,7 +19506,7 @@ A73B; [2A, 70, 05][54, 05, 13]
A73A; [2A, 70, A0][54, 05, A2]
A73D; [2A, 05, 13][5A, 05, 13]
A73C; [2A, 05, A2][5A, 05, A2]
-1E9A; [2A, 05, 13][5D 56, 05, 20]
+1E9A; [2A, 05, 13][5D 5C, 05, 20]
1D00; [2B 06, 05, 05]
@@ -19044,9 +19589,10 @@ FF22; [2C, 05, 9F]
1E07; [2C, 05, 05][, D2, 05]
1E06; [2C, 05, 9C][, D2, 05]
3374; [2C, 05, 2E][2A, 05, 31][4C, 05, 31]
-33C3; [2C, 05, B1][4A, 05, 34]
+33C3; [2C, 05, B1][4A, 05, 2E]
0299; [2D 06, 05, 05]
+10784; [2D 06, 05, 20]
0180; [2D 08, 05, 05]
0243; [2D 08, 05, A0]
@@ -19064,6 +19610,7 @@ A796; [2D 10, 05, A0]
0253; [2D 14, 05, 05]
0181; [2D 14, 05, A0]
+10785; [2D 14, 05, 2E]
0183; [2D 16, 05, 05]
0182; [2D 16, 05, A0]
@@ -19110,6 +19657,7 @@ FF23; [2E, 05, 9F]
1F12B; [2E, 05, A8]
1F152; [2E, 05, A8]
1D9C; [2E, 05, 2B]
+A7F2; [2E, 05, B1]
1F132; [2E, 05, B1]
1F172; [2E, 05, B1]
0107; [2E, 05, 05][, 88, 05]
@@ -19125,9 +19673,9 @@ FF23; [2E, 05, 9F]
00C7; [2E, 05, 9C][, A0, 05]
1E09; [2E, 05, 05][, A0, 05][, 88, 05]
1E08; [2E, 05, 9C][, A0, 05][, 88, 05]
-2105; [2E, 05, 13][0A 8A, 05, 2E][46, 05, 13]
-2106; [2E, 05, 13][0A 8A, 05, 2E][52, 05, 13]
-33C6; [2E, 05, B1][0C 93, 05, 20][3E, 05, 31][36, 05, 2E]
+2105; [2E, 05, 13][0A 9E, 05, 2E][46, 05, 13]
+2106; [2E, 05, 13][0A 9E, 05, 2E][52, 05, 13]
+33C6; [2E, 05, B1][0C 94, 05, 20][3E, 05, 31][36, 05, 2E]
3388; [2E, 05, 2E][2A, 05, 31][40, 05, 31]
33C4; [2E, 05, 2E][2E, 05, 2E]
1F12D; [2E, 05, A8][30, 05, A8]
@@ -19150,17 +19698,19 @@ A792; [2F 0A, 05, A0]
A794; [2F 0C, 05, 05]
A7C4; [2F 0C, 05, A0]
-0188; [2F 0E, 05, 05]
-0187; [2F 0E, 05, A0]
+1DF1D; [2F 0E, 05, 05]
-0255; [2F 10, 05, 05]
-1D9D; [2F 10, 05, 2E]
+0188; [2F 10, 05, 05]
+0187; [2F 10, 05, A0]
-2184; [2F 12, 05, 05]
-2183; [2F 12, 05, A0]
+0255; [2F 12, 05, 05]
+1D9D; [2F 12, 05, 2E]
-A73F; [2F 14, 05, 05]
-A73E; [2F 14, 05, A0]
+2184; [2F 14, 05, 05]
+2183; [2F 14, 05, A0]
+
+A73F; [2F 16, 05, 05]
+A73E; [2F 16, 05, A0]
0064; [30, 05, 05]
FF44; [30, 05, 10]
@@ -19238,12 +19788,18 @@ A779; [30, 78, A0]
02A3; [30, 05, 13][5C, 05, 13]
01F2; [30, 05, A2][5C, 05, 13]
01F1; [30, 05, A2][5C, 05, A2]
+10787; [30, 05, 2B][5C, 05, 2B]
01C6; [30, 05, 13][5C, 05, 13][, 90, 20]
01C5; [30, 05, A2][5C, 05, 13][, 90, 20]
01C4; [30, 05, A2][5C, 05, A2][, 90, 20]
AB66; [30, 05, 13][5D 10, 05, 20]
+10788; [30, 05, 2B][5D 10, 05, 2E]
02A5; [30, 05, 13][5D 12, 05, 20]
+10789; [30, 05, 2B][5D 12, 05, 2E]
02A4; [30, 05, 13][5D 1A, 05, 10]
+1078A; [30, 05, 2B][5D 1A, 05, 2C]
+1DF12; [30, 05, 13][5D 20, 05, 20]
+1DF19; [30, 05, 13][5D 22, 05, 20]
1D05; [31 06, 05, 05]
@@ -19258,11 +19814,14 @@ A7C7; [31 0A, 05, A0]
0256; [31 10, 05, 05]
0189; [31 10, 05, A0]
+1078B; [31 10, 05, 2E]
0257; [31 12, 05, 05]
018A; [31 12, 05, A0]
+1078C; [31 12, 05, 2E]
1D91; [31 14, 05, 05]
+1078D; [31 14, 05, 20]
018C; [31 16, 05, 05]
018B; [31 16, 05, A0]
@@ -19403,6 +19962,7 @@ AB34; [33 10, 05, 05]
1D93; [33 1E, 05, 05]
0258; [33 20, 05, 05]
+1078E; [33 20, 05, 20]
025A; [33 22, 05, 05]
@@ -19418,10 +19978,12 @@ A7AB; [33 24, 05, A0]
025D; [33 2A, 05, 05]
025E; [33 2C, 05, 05]
+1078F; [33 2C, 05, 20]
029A; [33 2E, 05, 05]
0264; [33 30, 05, 05]
+10791; [33 30, 05, 20]
0066; [34, 05, 05]
FF46; [34, 05, 10]
@@ -19458,6 +20020,7 @@ FF26; [34, 05, 9F]
24BB; [34, 05, A8]
1F155; [34, 05, A8]
1DA0; [34, 05, 2B]
+A7F3; [34, 05, B1]
1F135; [34, 05, B1]
1F175; [34, 05, B1]
1E1F; [34, 05, 05][, 9C, 05]
@@ -19472,6 +20035,8 @@ FB01; [34, 05, 13][3A, 05, 13]
FB02; [34, 05, 13][40, 05, 13]
3399; [34, 05, 2E][42, 05, 31]
02A9; [34, 05, 13][45 1E, 05, 10]
+10790; [34, 05, 2B][45 1E, 05, 2C]
+1DF00; [34, 78, 05][45 1E, 05, 10]
1F193; [34, 05, B1][4C, 05, B4][32, 05, B4][32, 05, B4]
A730; [35 06, 05, 05]
@@ -19547,6 +20112,7 @@ FF27; [36, 05, 9F]
1E20; [36, 05, 9C][, A4, 05]
A7A1; [36, 05, 13][, AA, 20]
A7A0; [36, 05, A2][, AA, 20]
+1ACC; [36, 70, 05]
1D79; [36, 70, 05]
A77D; [36, 70, A0]
33FF; [36, 05, 2E][2A, 05, 31][40, 05, 31]
@@ -19555,36 +20121,46 @@ A77D; [36, 70, A0]
33AC; [36, 05, B1][48, 05, B4][2A, 05, 31]
33C9; [36, 05, B1][5A, 05, 2E]
-0261; [37 06, 05, 05]
-A7AC; [37 06, 05, A0]
-1DA2; [37 06, 05, 2E]
+A7D1; [37 06, 05, 05]
+A7D0; [37 06, 05, A0]
+
+0261; [37 08, 05, 05]
+A7AC; [37 08, 05, A0]
+1DA2; [37 08, 05, 2E]
-AB36; [37 08, 05, 05]
+1DF01; [37 0A, 05, 05]
-0262; [37 0A, 05, 05]
-1DDB; [37 0A, 05, 20]
+AB36; [37 0C, 05, 05]
-01E5; [37 0C, 05, 05]
-01E4; [37 0C, 05, A0]
+0262; [37 0E, 05, 05]
+1DDB; [37 0E, 05, 20]
+10792; [37 0E, 05, 2E]
-1D83; [37 0E, 05, 05]
+01E5; [37 10, 05, 05]
+01E4; [37 10, 05, A0]
-0260; [37 10, 05, 05]
-0193; [37 10, 05, A0]
+1D83; [37 12, 05, 05]
-029B; [37 12, 05, 05]
+0260; [37 14, 05, 05]
+0193; [37 14, 05, A0]
+10793; [37 14, 05, 2E]
-1D77; [37 14, 05, 05]
+029B; [37 16, 05, 05]
+10794; [37 16, 05, 20]
-A77F; [37 16, 05, 05]
-A77E; [37 16, 05, A0]
+1D77; [37 18, 05, 05]
-0263; [37 18, 05, 05]
-0194; [37 18, 05, A0]
-02E0; [37 18, 05, 2E]
+1DF02; [37 1A, 05, 05]
-01A3; [37 1A, 05, 05]
-01A2; [37 1A, 05, A0]
+A77F; [37 1C, 05, 05]
+A77E; [37 1C, 05, A0]
+
+0263; [37 1E, 05, 05]
+0194; [37 1E, 05, A0]
+02E0; [37 1E, 05, 2E]
+
+01A3; [37 20, 05, 05]
+01A2; [37 20, 05, A0]
0068; [38, 05, 05]
FF48; [38, 05, 10]
@@ -19639,6 +20215,7 @@ FF28; [38, 05, 9F]
210F; [38, 05, 05][, B2, 05]
0126; [38, 05, 9C][, B2, 05]
A7F8; [38, 05, 2B][, B2, 20]
+10795; [38, 05, 2B][, B2, 20]
1E25; [38, 05, 05][, C4, 05]
1E24; [38, 05, 9C][, C4, 05]
1E2B; [38, 05, 05][, CE, 05]
@@ -19655,6 +20232,7 @@ A7F8; [38, 05, 2B][, B2, 20]
3390; [38, 05, B4][5C, 05, 2E]
029C; [39 06, 05, 05]
+10796; [39 06, 05, 20]
0195; [39 08, 05, 05]
01F6; [39 08, 05, A0]
@@ -19679,6 +20257,7 @@ A726; [39 14, 05, A0]
AB5C; [39 14, 05, 2E]
0267; [39 16, 05, 05]
+10797; [39 16, 05, 20]
02BB; [39 18, 05, 05]
@@ -19794,16 +20373,18 @@ A7F7; [3B 0C, 05, 05]
1D7B; [3B 12, 05, 05]
1DA7; [3B 12, 05, 20]
-1D96; [3B 14, 05, 05]
+1DF1A; [3B 14, 05, 05]
+
+1D96; [3B 16, 05, 05]
-A7BD; [3B 16, 05, 05]
-A7BC; [3B 16, 05, A0]
+A7BD; [3B 18, 05, 05]
+A7BC; [3B 18, 05, A0]
-0269; [3B 18, 05, 05]
-0196; [3B 18, 05, A0]
-1DA5; [3B 18, 05, 2E]
+0269; [3B 1A, 05, 05]
+0196; [3B 1A, 05, A0]
+1DA5; [3B 1A, 05, 2E]
-1D7C; [3B 1A, 05, 05]
+1D7C; [3B 1C, 05, 05]
006A; [3C, 05, 05]
FF4A; [3C, 05, 10]
@@ -19864,6 +20445,7 @@ A7B2; [3D 0C, 05, A0]
1DA1; [3D 0E, 05, 20]
0284; [3D 10, 05, 05]
+10798; [3D 10, 05, 20]
006B; [3E, 05, 05]
FF4B; [3E, 05, 10]
@@ -19953,8 +20535,12 @@ A742; [3F 10, 05, A0]
A745; [3F 12, 05, 05]
A744; [3F 12, 05, A0]
-029E; [3F 14, 05, 05]
-A7B0; [3F 14, 05, A0]
+1DF03; [3F 14, 05, 05]
+
+029E; [3F 16, 05, 05]
+A7B0; [3F 16, 05, A0]
+
+1DF10; [3F 18, 05, 05]
006C; [40, 05, 05]
FF4C; [40, 05, 10]
@@ -20026,9 +20612,11 @@ FF2C; [40, 05, 9F]
33D2; [40, 05, 31][46, 05, 31][36, 05, 2E]
1F1A9; [40, 05, B4][46, 05, 31][4E, 05, 31][4E, 05, 31][40, 05, 31][32, 05, 31][4E, 05, 31][4E, 05, 31]
02AA; [40, 05, 13][4E, 05, 13]
+10799; [40, 05, 2B][4E, 05, 2B]
32CF; [40, 05, B4][50, 05, B4][30, 05, B1]
33D3; [40, 05, 31][58, 05, 31]
02AB; [40, 05, 13][5C, 05, 13]
+1079A; [40, 05, 2B][5C, 05, 2B]
029F; [41 06, 05, 05]
1DDE; [41 06, 05, 20]
@@ -20059,30 +20647,47 @@ AB39; [41 16, 05, 05]
026C; [41 18, 05, 05]
A7AD; [41 18, 05, A0]
+1079B; [41 18, 05, 2E]
+
+1DF04; [41 1A, 05, 05]
+1079C; [41 1A, 05, 20]
+
+1DF13; [41 1C, 05, 05]
+
+AB37; [41 1E, 05, 05]
+AB5D; [41 1E, 05, 20]
+
+1D85; [41 20, 05, 05]
+1DAA; [41 20, 05, 20]
-AB37; [41 1A, 05, 05]
-AB5D; [41 1A, 05, 20]
+026D; [41 22, 05, 05]
+1DA9; [41 22, 05, 20]
-1D85; [41 1C, 05, 05]
-1DAA; [41 1C, 05, 20]
+A78E; [41 24, 05, 05]
+1079D; [41 24, 05, 20]
-026D; [41 1E, 05, 05]
-1DA9; [41 1E, 05, 20]
+1DF11; [41 26, 05, 05]
-A78E; [41 20, 05, 05]
+0234; [41 28, 05, 05]
-0234; [41 22, 05, 05]
+A772; [41 2A, 05, 05]
-A772; [41 24, 05, 05]
+026E; [41 2C, 05, 05]
+1079E; [41 2C, 05, 20]
-026E; [41 26, 05, 05]
+1DF05; [41 2E, 05, 05]
+1079F; [41 2E, 05, 20]
-A781; [41 28, 05, 05]
-A780; [41 28, 05, A0]
+A781; [41 30, 05, 05]
+A780; [41 30, 05, A0]
-019B; [41 2A, 05, 05]
+019B; [41 32, 05, 05]
-028E; [41 2C, 05, 05]
+028E; [41 34, 05, 05]
+107A0; [41 34, 05, 20]
+
+1DF06; [41 36, 05, 05]
+107A1; [41 36, 05, 20]
006D; [42, 05, 05]
FF4D; [42, 05, 10]
@@ -20131,8 +20736,8 @@ FF2D; [42, 05, 9F]
1E40; [42, 05, 9C][, 9C, 05]
1E43; [42, 05, 05][, C4, 05]
1E42; [42, 05, 9C][, C4, 05]
-33A7; [42, 05, 31][0C 93, 05, 20][4E, 05, 31]
-33A8; [42, 05, 31][0C 93, 05, 20][4E, 05, 31][17, 05, 2E]
+33A7; [42, 05, 31][0C 94, 05, 20][4E, 05, 31]
+33A8; [42, 05, 31][0C 94, 05, 20][4E, 05, 31][17, 05, 2E]
33A1; [42, 05, 31][17, 05, 2E]
33A5; [42, 05, 31][19, 05, 2E]
3383; [42, 05, 31][2A, 05, B4]
@@ -20286,6 +20891,10 @@ A774; [45 1C, 05, 05]
AB3C; [45 20, 05, 05]
+1DF14; [45 22, 05, 05]
+
+1DF07; [45 24, 05, 05]
+
006F; [46, 05, 05]
FF4F; [46, 05, 10]
0366; [46, 05, 13]
@@ -20367,6 +20976,7 @@ A79C; [46, 05, A2][, 96, 20]
0230; [46, 05, 9C][, 9C, 05][, A4, 05]
00F8; [46, 05, 05][, 9E, 05]
00D8; [46, 05, 9C][, 9E, 05]
+107A2; [46, 05, 2B][, 9E, 20]
01FF; [46, 05, 05][, 9E, 05][, 88, 05]
01FE; [46, 05, 9C][, 9E, 05][, 88, 05]
01EB; [46, 05, 05][, A2, 05]
@@ -20417,6 +21027,7 @@ A74E; [46, 05, A2][46, 05, A2]
AB3D; [47 0A, 05, 05]
0276; [47 0C, 05, 05]
+107A3; [47 0C, 05, 20]
1D14; [47 0E, 05, 05]
@@ -20434,48 +21045,51 @@ AB44; [47 18, 05, 05]
AB3E; [47 1C, 05, 05]
-0254; [47 1E, 05, 05]
-0186; [47 1E, 05, A0]
-1D53; [47 1E, 05, 2E]
+1DF1B; [47 1E, 05, 05]
-1D10; [47 20, 05, 05]
+0254; [47 20, 05, 05]
+0186; [47 20, 05, A0]
+1D53; [47 20, 05, 2E]
-1D12; [47 22, 05, 05]
+1D10; [47 22, 05, 05]
-AB3F; [47 24, 05, 05]
+1D12; [47 24, 05, 05]
-1D97; [47 26, 05, 05]
+AB3F; [47 26, 05, 05]
-AB62; [47 28, 05, 05]
+1D97; [47 28, 05, 05]
-A74D; [47 2A, 05, 05]
-A74C; [47 2A, 05, A0]
+AB62; [47 2A, 05, 05]
-1D16; [47 2C, 05, 05]
-1D54; [47 2C, 05, 20]
+A74D; [47 2C, 05, 05]
+A74C; [47 2C, 05, A0]
-1D17; [47 2E, 05, 05]
-1D55; [47 2E, 05, 20]
+1D16; [47 2E, 05, 05]
+1D54; [47 2E, 05, 20]
-2C7A; [47 30, 05, 05]
+1D17; [47 30, 05, 05]
+1D55; [47 30, 05, 20]
-0275; [47 32, 05, 05]
-019F; [47 32, 05, A0]
-1DB1; [47 32, 05, 2E]
+2C7A; [47 32, 05, 05]
-A74B; [47 34, 05, 05]
-A74A; [47 34, 05, A0]
+0275; [47 34, 05, 05]
+019F; [47 34, 05, A0]
+1DB1; [47 34, 05, 2E]
-0277; [47 36, 05, 05]
+A74B; [47 36, 05, 05]
+A74A; [47 36, 05, A0]
-A7B7; [47 38, 05, 05]
-A7B6; [47 38, 05, A0]
+0277; [47 38, 05, 05]
+107A4; [47 38, 05, 20]
-0223; [47 3A, 05, 05]
-0222; [47 3A, 05, A0]
-1D3D; [47 3A, 05, AE]
+A7B7; [47 3A, 05, 05]
+A7B6; [47 3A, 05, A0]
-1D15; [47 3C, 05, 05]
+0223; [47 3C, 05, 05]
+0222; [47 3C, 05, A0]
+1D3D; [47 3C, 05, AE]
+
+1D15; [47 3E, 05, 05]
0070; [48, 05, 05]
FF50; [48, 05, 10]
@@ -20566,40 +21180,42 @@ A7FC; [49 16, 05, 05]
0071; [4A, 05, 05]
FF51; [4A, 05, 10]
-1D42A; [4A, 05, 18]
-1D45E; [4A, 05, 18]
-1D492; [4A, 05, 18]
-1D4C6; [4A, 05, 18]
-1D4FA; [4A, 05, 18]
-1D52E; [4A, 05, 18]
-1D562; [4A, 05, 18]
-1D596; [4A, 05, 18]
-1D5CA; [4A, 05, 18]
-1D5FE; [4A, 05, 18]
-1D632; [4A, 05, 18]
-1D666; [4A, 05, 18]
-1D69A; [4A, 05, 18]
-24E0; [4A, 05, 1C]
-0051; [4A, 05, A0]
-FF31; [4A, 05, A4]
-211A; [4A, 05, AC]
-1D410; [4A, 05, AC]
-1D444; [4A, 05, AC]
-1D478; [4A, 05, AC]
-1D4AC; [4A, 05, AC]
-1D4E0; [4A, 05, AC]
-1D514; [4A, 05, AC]
-1D57C; [4A, 05, AC]
-1D5B0; [4A, 05, AC]
-1D5E4; [4A, 05, AC]
-1D618; [4A, 05, AC]
-1D64C; [4A, 05, AC]
-1D680; [4A, 05, AC]
-24C6; [4A, 05, B0]
-1F160; [4A, 05, B0]
-1F140; [4A, 05, B8]
-1F180; [4A, 05, B8]
-0239; [4A, 05, 14][48, 05, 13]
+1D42A; [4A, 05, 16]
+1D45E; [4A, 05, 16]
+1D492; [4A, 05, 16]
+1D4C6; [4A, 05, 16]
+1D4FA; [4A, 05, 16]
+1D52E; [4A, 05, 16]
+1D562; [4A, 05, 16]
+1D596; [4A, 05, 16]
+1D5CA; [4A, 05, 16]
+1D5FE; [4A, 05, 16]
+1D632; [4A, 05, 16]
+1D666; [4A, 05, 16]
+1D69A; [4A, 05, 16]
+24E0; [4A, 05, 19]
+0051; [4A, 05, 9C]
+FF31; [4A, 05, 9F]
+211A; [4A, 05, A5]
+1D410; [4A, 05, A5]
+1D444; [4A, 05, A5]
+1D478; [4A, 05, A5]
+1D4AC; [4A, 05, A5]
+1D4E0; [4A, 05, A5]
+1D514; [4A, 05, A5]
+1D57C; [4A, 05, A5]
+1D5B0; [4A, 05, A5]
+1D5E4; [4A, 05, A5]
+1D618; [4A, 05, A5]
+1D64C; [4A, 05, A5]
+1D680; [4A, 05, A5]
+24C6; [4A, 05, A8]
+1F160; [4A, 05, A8]
+107A5; [4A, 05, 2B]
+A7F4; [4A, 05, B1]
+1F140; [4A, 05, B1]
+1F180; [4A, 05, B1]
+0239; [4A, 05, 13][48, 05, 13]
A7AF; [4B 06, 05, 05]
@@ -20677,37 +21293,42 @@ A7A6; [4C, 05, A2][, AA, 20]
1E5C; [4C, 05, 9C][, C4, 05][, A4, 05]
1E5F; [4C, 05, 05][, D2, 05]
1E5E; [4C, 05, 9C][, D2, 05]
+1ACD; [4C, 70, 05]
A783; [4C, 70, 05]
A782; [4C, 70, A0]
+1DE3; [4C, 78, 05]
+A75B; [4C, 78, 05]
+A75A; [4C, 78, A0]
33AD; [4C, 05, 31][2A, 05, 31][30, 05, 2E]
-33AE; [4C, 05, 31][2A, 05, 31][30, 05, 2E][0C 93, 05, 20][4E, 05, 31]
-33AF; [4C, 05, 31][2A, 05, 31][30, 05, 2E][0C 93, 05, 20][4E, 05, 31][17, 05, 2E]
+33AE; [4C, 05, 31][2A, 05, 31][30, 05, 2E][0C 94, 05, 20][4E, 05, 31]
+33AF; [4C, 05, 31][2A, 05, 31][30, 05, 2E][0C 94, 05, 20][4E, 05, 31][17, 05, 2E]
AB45; [4D 06, 05, 05]
0280; [4D 08, 05, 05]
-1DE2; [4D 08, 05, 20]
-01A6; [4D 08, 05, AE]
+1DE2; [4D 08, 05, 10]
+01A6; [4D 08, 05, 9E]
+107AA; [4D 08, 05, 2C]
AB46; [4D 0A, 05, 05]
-A75B; [4D 0C, 05, 05]
-1DE3; [4D 0C, 05, 20]
-A75A; [4D 0C, 05, AE]
+1D19; [4D 0C, 05, 05]
-1D19; [4D 0E, 05, 05]
+024D; [4D 0E, 05, 05]
+024C; [4D 0E, 05, A0]
-024D; [4D 10, 05, 05]
-024C; [4D 10, 05, A0]
+1D72; [4D 10, 05, 05]
-1D72; [4D 12, 05, 05]
+0279; [4D 12, 05, 05]
+02B4; [4D 12, 05, 20]
-0279; [4D 14, 05, 05]
-02B4; [4D 14, 05, 20]
+1D1A; [4D 14, 05, 05]
-1D1A; [4D 16, 05, 05]
+027A; [4D 16, 05, 05]
+107A6; [4D 16, 05, 20]
-027A; [4D 18, 05, 05]
+1DF08; [4D 18, 05, 05]
+107A7; [4D 18, 05, 20]
1D89; [4D 1A, 05, 05]
@@ -20720,36 +21341,42 @@ A75A; [4D 0C, 05, AE]
027D; [4D 22, 05, 05]
2C64; [4D 22, 05, A0]
+107A8; [4D 22, 05, 2E]
AB49; [4D 24, 05, 05]
027E; [4D 26, 05, 05]
+107A9; [4D 26, 05, 20]
1D73; [4D 28, 05, 05]
-027F; [4D 2A, 05, 05]
+1DF16; [4D 2A, 05, 05]
+
+027F; [4D 2C, 05, 05]
-AB47; [4D 2C, 05, 05]
+AB47; [4D 2E, 05, 05]
-AB48; [4D 2E, 05, 05]
+AB48; [4D 30, 05, 05]
-AB4A; [4D 30, 05, 05]
+AB4A; [4D 32, 05, 05]
-AB4B; [4D 32, 05, 05]
+AB4B; [4D 34, 05, 05]
-AB4C; [4D 34, 05, 05]
+AB4C; [4D 36, 05, 05]
-0281; [4D 36, 05, 05]
-02B6; [4D 36, 05, 20]
+0281; [4D 38, 05, 05]
+02B6; [4D 38, 05, 20]
-AB68; [4D 38, 05, 05]
+AB68; [4D 3A, 05, 05]
-A775; [4D 3A, 05, 05]
+1DF15; [4D 3C, 05, 05]
-A776; [4D 3C, 05, 05]
+A775; [4D 3E, 05, 05]
-A75D; [4D 3E, 05, 05]
-A75C; [4D 3E, 05, A0]
+A776; [4D 40, 05, 05]
+
+A75D; [4D 42, 05, 05]
+A75C; [4D 42, 05, A0]
0073; [4E, 05, 05]
FF53; [4E, 05, 10]
@@ -20811,11 +21438,13 @@ A7A8; [4E, 05, A2][, AA, 20]
1E68; [4E, 05, 9C][, C4, 05][, 9C, 05]
0219; [4E, 05, 05][, CA, 05]
0218; [4E, 05, 9C][, CA, 05]
-017F; [4E, 78, 05]
-1DE5; [4E, 78, 05]
+017F; [4E, 74, 05]
+1DE5; [4E, 74, 05]
+1E9B; [4E, 74, 05][, 9C, 05]
A785; [4E, 78, 05]
A784; [4E, 78, A0]
-1E9B; [4E, 78, 05][, 9C, 05]
+A7D9; [4E, 7C, 05]
+A7D8; [4E, 7C, A0]
1F18D; [4E, 05, B4][2A, 05, B4]
1F14C; [4E, 05, B4][30, 05, B1]
1F1AA; [4E, 05, B4][38, 05, B4][54, 05, B4]
@@ -20826,7 +21455,7 @@ A784; [4E, 78, A0]
00DF; [4E, 70, 05][4E, 05, 13]
1E9E; [4E, 70, A0][4E, 05, A2]
FB06; [4E, 05, 13][50, 05, 13]
-FB05; [4E, 78, 05][50, 05, 13]
+FB05; [4E, 74, 05][50, 05, 13]
33DC; [4E, 05, B4][54, 05, 31]
A731; [4F 06, 05, 05]
@@ -20842,29 +21471,39 @@ A7C9; [4F 08, 05, A0]
A7C5; [4F 0E, 05, 9E]
1DB3; [4F 0E, 05, 2C]
-023F; [4F 10, 05, 05]
-2C7E; [4F 10, 05, A0]
+1DF1E; [4F 10, 05, 05]
+107BA; [4F 10, 05, 20]
-1E9C; [4F 12, 05, 05]
+023F; [4F 12, 05, 05]
+2C7E; [4F 12, 05, A0]
-1E9D; [4F 14, 05, 05]
+A7D7; [4F 14, 05, 05]
+A7D6; [4F 14, 05, A0]
-0283; [4F 16, 05, 05]
-1DEF; [4F 16, 05, 10]
-01A9; [4F 16, 05, 9E]
-1DB4; [4F 16, 05, 2C]
+1E9C; [4F 16, 05, 05]
-AB4D; [4F 18, 05, 05]
+1E9D; [4F 18, 05, 05]
-1D8B; [4F 1A, 05, 05]
+0283; [4F 1A, 05, 05]
+1DEF; [4F 1A, 05, 10]
+01A9; [4F 1A, 05, 9E]
+1DB4; [4F 1A, 05, 2C]
-01AA; [4F 1C, 05, 05]
+AB4D; [4F 1C, 05, 05]
-0285; [4F 1E, 05, 05]
+1D8B; [4F 1E, 05, 05]
1D98; [4F 20, 05, 05]
-0286; [4F 22, 05, 05]
+01AA; [4F 22, 05, 05]
+
+0285; [4F 24, 05, 05]
+
+0286; [4F 26, 05, 05]
+
+1DF0B; [4F 28, 05, 05]
+
+1DF0C; [4F 2A, 05, 05]
0074; [50, 05, 05]
FF54; [50, 05, 10]
@@ -20920,17 +21559,24 @@ FF34; [50, 05, 9F]
1E70; [50, 05, 9C][, CC, 05]
1E6F; [50, 05, 05][, D2, 05]
1E6E; [50, 05, 9C][, D2, 05]
+1ACE; [50, 78, 05]
A787; [50, 78, 05]
A786; [50, 78, A0]
-02A8; [50, 05, 13][2F 10, 05, 20]
+02A8; [50, 05, 13][2F 12, 05, 20]
+107AB; [50, 05, 2B][2F 12, 05, 2E]
2121; [50, 05, A2][32, 05, A2][40, 05, A2]
1D7A; [50, 70, 05][38, 05, 13]
3394; [50, 05, B4][38, 05, B4][5C, 05, 2E]
2122; [50, 05, 2B][42, 05, 2B]
01BE; [50, 05, 13][4E, 05, 13]
02A6; [50, 05, 13][4E, 05, 13]
+107AC; [50, 05, 2B][4E, 05, 2B]
AB67; [50, 05, 13][4F 0E, 05, 10]
-02A7; [50, 05, 13][4F 16, 05, 10]
+107AD; [50, 05, 2B][4F 0E, 05, 2C]
+02A7; [50, 05, 13][4F 1A, 05, 10]
+107AE; [50, 05, 2B][4F 1A, 05, 2C]
+1DF17; [50, 05, 13][4F 1E, 05, 20]
+1DF1C; [50, 05, 13][4F 20, 05, 20]
A729; [50, 05, 13][5C, 05, 13]
A728; [50, 05, A2][5C, 05, 13]
@@ -20952,13 +21598,18 @@ A728; [50, 05, A2][5C, 05, 13]
0288; [51 12, 05, 05]
01AE; [51 12, 05, A0]
+107AF; [51 12, 05, 2E]
+
+1DF09; [51 14, 05, 05]
+
+0236; [51 16, 05, 05]
-0236; [51 14, 05, 05]
+A777; [51 18, 05, 05]
-A777; [51 16, 05, 05]
+0287; [51 1A, 05, 05]
+A7B1; [51 1A, 05, A0]
-0287; [51 18, 05, 05]
-A7B1; [51 18, 05, A0]
+1DF0D; [51 1C, 05, 05]
0075; [52, 05, 05]
FF55; [52, 05, 10]
@@ -21171,7 +21822,7 @@ FF36; [54, 05, 9F]
1E7C; [54, 05, 9C][, 9A, 05]
1E7F; [54, 05, 05][, C4, 05]
1E7E; [54, 05, 9C][, C4, 05]
-33DE; [54, 05, B4][0C 93, 05, 20][42, 05, 31]
+33DE; [54, 05, B4][0C 94, 05, 20][42, 05, 31]
2175; [54, 05, 13][3A, 05, 13]
2165; [54, 05, A2][3A, 05, A2]
2176; [54, 05, 13][3A, 05, 13][3A, 05, 13]
@@ -21195,6 +21846,7 @@ A75E; [55 08, 05, A0]
1DB9; [55 0C, 05, 2E]
2C71; [55 0E, 05, 05]
+107B0; [55 0E, 05, 20]
2C74; [55 10, 05, 05]
@@ -21257,6 +21909,8 @@ FF37; [56, 05, A4]
1E86; [56, 05, A0][, 9C, 05]
1E89; [56, 05, 05][, C4, 05]
1E88; [56, 05, A0][, C4, 05]
+A7C3; [56, 70, 05]
+A7C2; [56, 70, A0]
33DD; [56, 05, B8][2C, 05, 2E]
1F14F; [56, 05, B8][2E, 05, B1]
1F18F; [56, 05, B8][2E, 05, B1]
@@ -21264,15 +21918,12 @@ FF37; [56, 05, A4]
1D21; [57 06, 05, 05]
-A7C3; [57 08, 05, 05]
-A7C2; [57 08, 05, A0]
+2C73; [57 08, 05, 05]
+2C72; [57 08, 05, A0]
-2C73; [57 0A, 05, 05]
-2C72; [57 0A, 05, A0]
-
-028D; [57 0C, 05, 05]
-1AC0; [57 0C, 05, 20]
-AB69; [57 0C, 05, 2E]
+028D; [57 0A, 05, 05]
+1AC0; [57 0A, 05, 20]
+AB69; [57 0A, 05, 2E]
0078; [58, 05, 05]
FF58; [58, 05, 10]
@@ -21397,6 +22048,7 @@ FF39; [5A, 05, 9F]
1EF4; [5A, 05, 9C][, C4, 05]
028F; [5B 06, 05, 05]
+107B2; [5B 06, 05, 20]
024F; [5B 08, 05, 05]
024E; [5B 08, 05, A0]
@@ -21502,124 +22154,143 @@ A762; [5D 18, 05, A0]
01B9; [5D 1E, 05, 05]
01B8; [5D 1E, 05, A0]
-1D9A; [5D 20, 05, 05]
+1DF18; [5D 20, 05, 05]
+
+1D9A; [5D 22, 05, 05]
+
+01BA; [5D 24, 05, 05]
+
+0293; [5D 26, 05, 05]
+
+00FE; [5D 28, 05, 05]
+00DE; [5D 28, 05, A0]
+
+A7D3; [5D 2A, 05, 05]
-01BA; [5D 22, 05, 05]
+A765; [5D 2C, 05, 05]
+A764; [5D 2C, 05, A0]
-0293; [5D 24, 05, 05]
+A767; [5D 2E, 05, 05]
+A766; [5D 2E, 05, A0]
-00FE; [5D 26, 05, 05]
-00DE; [5D 26, 05, A0]
+01BF; [5D 30, 05, 05]
+01F7; [5D 30, 05, A0]
-A765; [5D 28, 05, 05]
-A764; [5D 28, 05, A0]
+A7D5; [5D 32, 05, 05]
-A767; [5D 2A, 05, 05]
-A766; [5D 2A, 05, A0]
+A769; [5D 34, 05, 05]
+A768; [5D 34, 05, A0]
-01BF; [5D 2C, 05, 05]
-01F7; [5D 2C, 05, A0]
+AB60; [5D 36, 05, 05]
-A769; [5D 2E, 05, 05]
-A768; [5D 2E, 05, A0]
+AB61; [5D 38, 05, 05]
-AB60; [5D 30, 05, 05]
+AB63; [5D 3A, 05, 05]
-AB61; [5D 32, 05, 05]
+A76B; [5D 3C, 05, 05]
+A76A; [5D 3C, 05, A0]
-AB63; [5D 34, 05, 05]
+A76D; [5D 3E, 05, 05]
+A76C; [5D 3E, 05, A0]
-A76B; [5D 36, 05, 05]
-A76A; [5D 36, 05, A0]
+A76F; [5D 40, 05, 05]
+1DD2; [5D 40, 05, 10]
+A76E; [5D 40, 05, 9E]
+A770; [5D 40, 05, 2C]
-A76D; [5D 38, 05, 05]
-A76C; [5D 38, 05, A0]
+A778; [5D 42, 05, 05]
-A76F; [5D 3A, 05, 05]
-1DD2; [5D 3A, 05, 10]
-A76E; [5D 3A, 05, 9E]
-A770; [5D 3A, 05, 2C]
+01BB; [5D 44, 05, 05]
-A778; [5D 3C, 05, 05]
+A72B; [5D 46, 05, 05]
+A72A; [5D 46, 05, A0]
-01BB; [5D 3E, 05, 05]
+A72D; [5D 48, 05, 05]
+A72C; [5D 48, 05, A0]
-A72B; [5D 40, 05, 05]
-A72A; [5D 40, 05, A0]
+A72F; [5D 4A, 05, 05]
+A72E; [5D 4A, 05, A0]
-A72D; [5D 42, 05, 05]
-A72C; [5D 42, 05, A0]
+01A8; [5D 4C, 05, 05]
+01A7; [5D 4C, 05, A0]
-A72F; [5D 44, 05, 05]
-A72E; [5D 44, 05, A0]
+01BD; [5D 4E, 05, 05]
+01BC; [5D 4E, 05, A0]
-01A8; [5D 46, 05, 05]
-01A7; [5D 46, 05, A0]
+0185; [5D 50, 05, 05]
+0184; [5D 50, 05, A0]
-01BD; [5D 48, 05, 05]
-01BC; [5D 48, 05, A0]
+0294; [5D 52, 05, 05]
-0185; [5D 4A, 05, 05]
-0184; [5D 4A, 05, A0]
+0242; [5D 54, 05, 05]
+0241; [5D 54, 05, A0]
-0294; [5D 4C, 05, 05]
+02C0; [5D 56, 05, 05]
-0242; [5D 4E, 05, 05]
-0241; [5D 4E, 05, A0]
+02BC; [5D 58, 05, 05]
+0149; [5D 58, 05, 20][44, 05, 13]
-02C0; [5D 50, 05, 05]
+02EE; [5D 5A, 05, 05]
-02BC; [5D 52, 05, 05]
-0149; [5D 52, 05, 20][44, 05, 13]
+02BE; [5D 5C, 05, 05]
-02EE; [5D 54, 05, 05]
+A723; [5D 5E, 05, 05]
+A722; [5D 5E, 05, A0]
-02BE; [5D 56, 05, 05]
+A78C; [5D 60, 05, 05]
+A78B; [5D 60, 05, A0]
-A723; [5D 58, 05, 05]
-A722; [5D 58, 05, A0]
+A78F; [5D 62, 05, 05]
-A78C; [5D 5A, 05, 05]
-A78B; [5D 5A, 05, A0]
+0295; [5D 64, 05, 05]
+02E4; [5D 64, 05, 20]
-A78F; [5D 5C, 05, 05]
+02BF; [5D 66, 05, 05]
-0295; [5D 5E, 05, 05]
-02E4; [5D 5E, 05, 20]
+02C1; [5D 68, 05, 05]
-02BF; [5D 60, 05, 05]
+1D24; [5D 6A, 05, 05]
-02C1; [5D 62, 05, 05]
+1D25; [5D 6C, 05, 05]
+1D5C; [5D 6C, 05, 20]
-1D24; [5D 64, 05, 05]
+A725; [5D 6E, 05, 05]
+A724; [5D 6E, 05, A0]
-1D25; [5D 66, 05, 05]
-1D5C; [5D 66, 05, 20]
+02A1; [5D 70, 05, 05]
+107B3; [5D 70, 05, 20]
-A725; [5D 68, 05, 05]
-A724; [5D 68, 05, A0]
+02A2; [5D 72, 05, 05]
+107B4; [5D 72, 05, 20]
-02A1; [5D 6A, 05, 05]
+0296; [5D 74, 05, 05]
-02A2; [5D 6C, 05, 05]
+1DF0E; [5D 76, 05, 05]
-0296; [5D 6E, 05, 05]
+01C0; [5D 78, 05, 05]
+107B6; [5D 78, 05, 20]
-01C0; [5D 70, 05, 05]
+01C1; [5D 7A, 05, 05]
+107B7; [5D 7A, 05, 20]
-01C1; [5D 72, 05, 05]
+01C2; [5D 7C, 05, 05]
+107B8; [5D 7C, 05, 20]
-01C2; [5D 74, 05, 05]
+01C3; [5D 7E, 05, 05]
-01C3; [5D 76, 05, 05]
+1DF0A; [5D 80, 05, 05]
+107B9; [5D 80, 05, 20]
-0297; [5D 78, 05, 05]
+0297; [5D 82, 05, 05]
-0298; [5D 7A, 05, 05]
+1DF0F; [5D 84, 05, 05]
-02AC; [5D 7C, 05, 05]
+0298; [5D 86, 05, 05]
+107B5; [5D 86, 05, 20]
-02AD; [5D 7E, 05, 05]
+02AC; [5D 88, 05, 05]
+
+02AD; [5D 8A, 05, 05]
FDD0 FF3A; [5E 02 02, 05, 05] # REORDER_RESERVED_AFTER_LATIN first primary starts new lead byte
@@ -23268,88 +23939,91 @@ FDD1 2C00; [62 04 02, 05, 05] # GLAGOLITIC first primary starts new lead byte (c
2C5E; [62 62, 05, 05]
2C2E; [62 62, 05, A0]
-FDD1 1036B; [62 64 02, 05, 05] # Old_Permic first primary (compressible)
+2C5F; [62 64, 05, 05]
+2C2F; [62 64, 05, A0]
+
+FDD1 1036B; [62 66 02, 05, 05] # Old_Permic first primary (compressible)
-10350; [62 66, 05, 05]
-10376; [62 66, 05, 20]
+10350; [62 68, 05, 05]
+10376; [62 68, 05, 20]
-10351; [62 68 02, 05, 05]
+10351; [62 6A 02, 05, 05]
-10352; [62 68 09, 05, 05]
+10352; [62 6A 09, 05, 05]
-10353; [62 6A, 05, 05]
-10377; [62 6A, 05, 20]
+10353; [62 6C, 05, 05]
+10377; [62 6C, 05, 20]
-10354; [62 6C 02, 05, 05]
+10354; [62 6E 02, 05, 05]
-10355; [62 6C 09, 05, 05]
+10355; [62 6E 09, 05, 05]
-10356; [62 6C 10, 05, 05]
+10356; [62 6E 10, 05, 05]
-10357; [62 6E, 05, 05]
-10378; [62 6E, 05, 20]
+10357; [62 70, 05, 05]
+10378; [62 70, 05, 20]
-10358; [62 70 02, 05, 05]
+10358; [62 72 02, 05, 05]
-10359; [62 70 09, 05, 05]
+10359; [62 72 09, 05, 05]
-1035A; [62 70 10, 05, 05]
+1035A; [62 72 10, 05, 05]
-1035B; [62 70 17, 05, 05]
+1035B; [62 72 17, 05, 05]
-1035C; [62 70 1E, 05, 05]
+1035C; [62 72 1E, 05, 05]
-1035D; [62 72, 05, 05]
-10379; [62 72, 05, 20]
+1035D; [62 74, 05, 05]
+10379; [62 74, 05, 20]
-1035E; [62 74 02, 05, 05]
+1035E; [62 76 02, 05, 05]
-1035F; [62 74 09, 05, 05]
+1035F; [62 76 09, 05, 05]
-10360; [62 74 10, 05, 05]
+10360; [62 76 10, 05, 05]
-10361; [62 76, 05, 05]
-1037A; [62 76, 05, 20]
+10361; [62 78, 05, 05]
+1037A; [62 78, 05, 20]
-10362; [62 78 02, 05, 05]
+10362; [62 7A 02, 05, 05]
-10363; [62 78 09, 05, 05]
+10363; [62 7A 09, 05, 05]
-10364; [62 78 10, 05, 05]
+10364; [62 7A 10, 05, 05]
-10365; [62 78 17, 05, 05]
+10365; [62 7A 17, 05, 05]
-10366; [62 78 1E, 05, 05]
+10366; [62 7A 1E, 05, 05]
-10367; [62 78 25, 05, 05]
+10367; [62 7A 25, 05, 05]
-10368; [62 78 2C, 05, 05]
+10368; [62 7A 2C, 05, 05]
-10369; [62 78 33, 05, 05]
+10369; [62 7A 33, 05, 05]
-1036A; [62 78 3A, 05, 05]
+1036A; [62 7A 3A, 05, 05]
-1036B; [62 78 41, 05, 05]
+1036B; [62 7A 41, 05, 05]
-1036C; [62 78 48, 05, 05]
+1036C; [62 7A 48, 05, 05]
-1036D; [62 78 4F, 05, 05]
+1036D; [62 7A 4F, 05, 05]
-1036E; [62 78 56, 05, 05]
+1036E; [62 7A 56, 05, 05]
-1036F; [62 78 5D, 05, 05]
+1036F; [62 7A 5D, 05, 05]
-10370; [62 78 64, 05, 05]
+10370; [62 7A 64, 05, 05]
-10371; [62 78 6B, 05, 05]
+10371; [62 7A 6B, 05, 05]
-10372; [62 78 72, 05, 05]
+10372; [62 7A 72, 05, 05]
-10373; [62 78 79, 05, 05]
+10373; [62 7A 79, 05, 05]
-10374; [62 78 80, 05, 05]
+10374; [62 7A 80, 05, 05]
-10375; [62 78 87, 05, 05]
+10375; [62 7A 87, 05, 05]
FDD1 10D3; [63 04 02, 05, 05] # GEORGIAN first primary starts new lead byte (compressible)
@@ -23947,8 +24621,15 @@ FDD1 0628; [66 04 02, 05, 05] # ARABIC first primary starts new lead byte (compr
0621; [66 06, 05, 05]
0674; [66 06, 05, 20]
+0883; [66 06, 05, 20]
+0887; [66 06, 05, 20]
FE80; [66 06, 05, 2E]
06FD; [66 06, 70, 05]
+0675; [66 06, 05, 20][66 1A, 05, 10]
+0676; [66 06, 05, 20][66 E0, 05, 10]
+0677; [66 06, 05, 20][66 E6, 05, 10]
+FBDD; [66 06, 05, 2E][66 E6, 05, 2C]
+0678; [66 06, 05, 20][66 F0, 05, 10]
0622; [66 08, 05, 05]
0627 0653; [66 08, 05, 05]
@@ -23992,38 +24673,38 @@ FBEB; [66 16, 05, 26][66 1A, 05, 26]
FBEA; [66 16, 05, 31][66 1A, 05, 31]
FC97; [66 16, 05, 10][66 3A, 05, 18]
FC00; [66 16, 05, 31][66 3A, 05, 30]
-FC98; [66 16, 05, 10][66 48, 05, 18]
-FC01; [66 16, 05, 31][66 48, 05, 30]
-FC99; [66 16, 05, 10][66 4A, 05, 18]
-FC64; [66 16, 05, 26][66 6E, 05, 1E]
-FC65; [66 16, 05, 26][66 70, 05, 1E]
-FC9A; [66 16, 05, 10][66 C8, 05, 18]
-FCDF; [66 16, 05, 1B][66 C8, 05, 20]
-FC66; [66 16, 05, 26][66 C8, 05, 28]
-FC02; [66 16, 05, 31][66 C8, 05, 30]
-FC67; [66 16, 05, 26][66 CC, 05, 28]
-FC9B; [66 16, 05, 10][66 D6, 05, 18]
-FCE0; [66 16, 05, 1B][66 D6, 05, 20]
-FBED; [66 16, 05, 26][66 DC 10, 05, 20]
-FBEC; [66 16, 05, 31][66 DC 10, 05, 2E]
-FBEF; [66 16, 05, 26][66 DE, 05, 26]
-FBEE; [66 16, 05, 31][66 DE, 05, 31]
-FBF3; [66 16, 05, 26][66 E2 09, 05, 20]
-FBF2; [66 16, 05, 31][66 E2 09, 05, 2E]
-FBF1; [66 16, 05, 26][66 E4, 05, 1E]
-FBF0; [66 16, 05, 31][66 E4, 05, 2C]
-FBF5; [66 16, 05, 26][66 E6, 05, 20]
-FBF4; [66 16, 05, 31][66 E6, 05, 2E]
-FBFB; [66 16, 05, 10][66 EC, 05, 10]
-FBFA; [66 16, 05, 26][66 EC, 05, 26]
-FC68; [66 16, 05, 26][66 EC, 05, 26]
-FBF9; [66 16, 05, 31][66 EC, 05, 31]
-FC03; [66 16, 05, 31][66 EC, 05, 31]
-FC69; [66 16, 05, 26][66 EE, 05, 2C]
-FC04; [66 16, 05, 31][66 EE, 05, 33]
-FBF8; [66 16, 05, 10][66 F6, 05, 10]
-FBF7; [66 16, 05, 26][66 F6, 05, 26]
-FBF6; [66 16, 05, 31][66 F6, 05, 31]
+FC98; [66 16, 05, 10][66 4A, 05, 18]
+FC01; [66 16, 05, 31][66 4A, 05, 30]
+FC99; [66 16, 05, 10][66 4C, 05, 18]
+FC64; [66 16, 05, 26][66 70, 05, 1E]
+FC65; [66 16, 05, 26][66 72, 05, 1E]
+FC9A; [66 16, 05, 10][66 CA, 05, 18]
+FCDF; [66 16, 05, 1B][66 CA, 05, 20]
+FC66; [66 16, 05, 26][66 CA, 05, 28]
+FC02; [66 16, 05, 31][66 CA, 05, 30]
+FC67; [66 16, 05, 26][66 CE, 05, 28]
+FC9B; [66 16, 05, 10][66 D8, 05, 18]
+FCE0; [66 16, 05, 1B][66 D8, 05, 20]
+FBED; [66 16, 05, 26][66 DE 10, 05, 20]
+FBEC; [66 16, 05, 31][66 DE 10, 05, 2E]
+FBEF; [66 16, 05, 26][66 E0, 05, 26]
+FBEE; [66 16, 05, 31][66 E0, 05, 31]
+FBF3; [66 16, 05, 26][66 E4 09, 05, 20]
+FBF2; [66 16, 05, 31][66 E4 09, 05, 2E]
+FBF1; [66 16, 05, 26][66 E6, 05, 1E]
+FBF0; [66 16, 05, 31][66 E6, 05, 2C]
+FBF5; [66 16, 05, 26][66 E8, 05, 20]
+FBF4; [66 16, 05, 31][66 E8, 05, 2E]
+FBFB; [66 16, 05, 10][66 EE, 05, 10]
+FBFA; [66 16, 05, 26][66 EE, 05, 26]
+FC68; [66 16, 05, 26][66 EE, 05, 26]
+FBF9; [66 16, 05, 31][66 EE, 05, 31]
+FC03; [66 16, 05, 31][66 EE, 05, 31]
+FC69; [66 16, 05, 26][66 F0, 05, 2C]
+FC04; [66 16, 05, 31][66 F0, 05, 33]
+FBF8; [66 16, 05, 10][66 F8, 05, 10]
+FBF7; [66 16, 05, 26][66 F8, 05, 26]
+FBF6; [66 16, 05, 31][66 F8, 05, 31]
08A8; [66 18 02, 05, 05]
@@ -24032,6 +24713,25 @@ FBF6; [66 16, 05, 31][66 F6, 05, 31]
08AC; [66 18 10, 05, 05]
0627; [66 1A, 05, 05]
+0870; [66 1A, 05, 10]
+0871; [66 1A, 05, 10]
+0872; [66 1A, 05, 10]
+0873; [66 1A, 05, 10]
+0874; [66 1A, 05, 10]
+0875; [66 1A, 05, 10]
+0876; [66 1A, 05, 10]
+0877; [66 1A, 05, 10]
+0878; [66 1A, 05, 10]
+0879; [66 1A, 05, 10]
+087A; [66 1A, 05, 10]
+087B; [66 1A, 05, 10]
+087C; [66 1A, 05, 10]
+087D; [66 1A, 05, 10]
+087E; [66 1A, 05, 10]
+087F; [66 1A, 05, 10]
+0880; [66 1A, 05, 10]
+0881; [66 1A, 05, 10]
+0882; [66 1A, 05, 10]
08AD; [66 1A, 05, 10]
1EE00; [66 1A, 05, 1B]
1EE80; [66 1A, 05, 1B]
@@ -24039,9 +24739,8 @@ FE8E; [66 1A, 05, 26]
FE8D; [66 1A, 05, 31]
FD3C; [66 1A, 05, 26][, E5 A4, 1E]
FD3D; [66 1A, 05, 31][, E5 A4, 2C]
-0675; [66 1A, 05, 10][66 06, 05, 20]
-FDF3; [66 1A, 05, 31][66 B6, 05, 30][66 1E, 05, 30][66 6E, 05, 2C]
-FDF2; [66 1A, 05, 31][66 C4, 05, 30][66 C4, 05, 30][66 D6, 05, 30]
+FDF3; [66 1A, 05, 31][66 B8, 05, 30][66 1E, 05, 30][66 70, 05, 2C]
+FDF2; [66 1A, 05, 31][66 C6, 05, 30][66 C6, 05, 30][66 D8, 05, 30]
066E; [66 1C, 05, 05]
1EE1C; [66 1C, 05, 20]
@@ -24059,25 +24758,25 @@ FE90; [66 1E, 05, 28]
FE8F; [66 1E, 05, 30]
FC9C; [66 1E, 05, 18][66 3A, 05, 18]
FC05; [66 1E, 05, 30][66 3A, 05, 30]
-FC9D; [66 1E, 05, 18][66 48, 05, 18]
-FC06; [66 1E, 05, 30][66 48, 05, 30]
-FDC2; [66 1E, 05, 28][66 48, 05, 28][66 EE, 05, 2C]
-FC9E; [66 1E, 05, 18][66 4A, 05, 18]
-FC07; [66 1E, 05, 30][66 4A, 05, 30]
-FD9E; [66 1E, 05, 28][66 4A, 05, 28][66 EE, 05, 2C]
-FC6A; [66 1E, 05, 28][66 6E, 05, 1E]
-FC6B; [66 1E, 05, 28][66 70, 05, 1E]
-FC9F; [66 1E, 05, 18][66 C8, 05, 18]
-FCE1; [66 1E, 05, 20][66 C8, 05, 20]
-FC6C; [66 1E, 05, 28][66 C8, 05, 28]
-FC08; [66 1E, 05, 30][66 C8, 05, 30]
-FC6D; [66 1E, 05, 28][66 CC, 05, 28]
-FCA0; [66 1E, 05, 18][66 D6, 05, 18]
-FCE2; [66 1E, 05, 20][66 D6, 05, 20]
-FC6E; [66 1E, 05, 28][66 EC, 05, 26]
-FC09; [66 1E, 05, 30][66 EC, 05, 31]
-FC6F; [66 1E, 05, 28][66 EE, 05, 2C]
-FC0A; [66 1E, 05, 30][66 EE, 05, 33]
+FC9D; [66 1E, 05, 18][66 4A, 05, 18]
+FC06; [66 1E, 05, 30][66 4A, 05, 30]
+FDC2; [66 1E, 05, 28][66 4A, 05, 28][66 F0, 05, 2C]
+FC9E; [66 1E, 05, 18][66 4C, 05, 18]
+FC07; [66 1E, 05, 30][66 4C, 05, 30]
+FD9E; [66 1E, 05, 28][66 4C, 05, 28][66 F0, 05, 2C]
+FC6A; [66 1E, 05, 28][66 70, 05, 1E]
+FC6B; [66 1E, 05, 28][66 72, 05, 1E]
+FC9F; [66 1E, 05, 18][66 CA, 05, 18]
+FCE1; [66 1E, 05, 20][66 CA, 05, 20]
+FC6C; [66 1E, 05, 28][66 CA, 05, 28]
+FC08; [66 1E, 05, 30][66 CA, 05, 30]
+FC6D; [66 1E, 05, 28][66 CE, 05, 28]
+FCA0; [66 1E, 05, 18][66 D8, 05, 18]
+FCE2; [66 1E, 05, 20][66 D8, 05, 20]
+FC6E; [66 1E, 05, 28][66 EE, 05, 26]
+FC09; [66 1E, 05, 30][66 EE, 05, 31]
+FC6F; [66 1E, 05, 28][66 F0, 05, 2C]
+FC0A; [66 1E, 05, 30][66 F0, 05, 33]
067B; [66 20, 05, 05]
FB54; [66 20, 05, 10]
@@ -24137,37 +24836,37 @@ FE96; [66 2A, 05, 28]
FE95; [66 2A, 05, 30]
FCA1; [66 2A, 05, 18][66 3A, 05, 18]
FC0B; [66 2A, 05, 30][66 3A, 05, 30]
-FD50; [66 2A, 05, 18][66 3A, 05, 18][66 C8, 05, 18]
-FDA0; [66 2A, 05, 28][66 3A, 05, 28][66 EC, 05, 26]
-FD9F; [66 2A, 05, 28][66 3A, 05, 28][66 EE, 05, 2C]
-FCA2; [66 2A, 05, 18][66 48, 05, 18]
-FC0C; [66 2A, 05, 30][66 48, 05, 30]
-FD52; [66 2A, 05, 18][66 48, 05, 18][66 3A, 05, 18]
-FD51; [66 2A, 05, 28][66 48, 05, 28][66 3A, 05, 28]
-FD53; [66 2A, 05, 18][66 48, 05, 18][66 C8, 05, 18]
-FCA3; [66 2A, 05, 18][66 4A, 05, 18]
-FC0D; [66 2A, 05, 30][66 4A, 05, 30]
-FD54; [66 2A, 05, 18][66 4A, 05, 18][66 C8, 05, 18]
-FDA2; [66 2A, 05, 28][66 4A, 05, 28][66 EC, 05, 26]
-FDA1; [66 2A, 05, 28][66 4A, 05, 28][66 EE, 05, 2C]
-FC70; [66 2A, 05, 28][66 6E, 05, 1E]
-FC71; [66 2A, 05, 28][66 70, 05, 1E]
-FCA4; [66 2A, 05, 18][66 C8, 05, 18]
-FCE3; [66 2A, 05, 20][66 C8, 05, 20]
-FC72; [66 2A, 05, 28][66 C8, 05, 28]
-FC0E; [66 2A, 05, 30][66 C8, 05, 30]
-FD55; [66 2A, 05, 18][66 C8, 05, 18][66 3A, 05, 18]
-FD56; [66 2A, 05, 18][66 C8, 05, 18][66 48, 05, 18]
-FD57; [66 2A, 05, 18][66 C8, 05, 18][66 4A, 05, 18]
-FDA4; [66 2A, 05, 28][66 C8, 05, 28][66 EC, 05, 26]
-FDA3; [66 2A, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FC73; [66 2A, 05, 28][66 CC, 05, 28]
-FCA5; [66 2A, 05, 18][66 D6, 05, 18]
-FCE4; [66 2A, 05, 20][66 D6, 05, 20]
-FC74; [66 2A, 05, 28][66 EC, 05, 26]
-FC0F; [66 2A, 05, 30][66 EC, 05, 31]
-FC75; [66 2A, 05, 28][66 EE, 05, 2C]
-FC10; [66 2A, 05, 30][66 EE, 05, 33]
+FD50; [66 2A, 05, 18][66 3A, 05, 18][66 CA, 05, 18]
+FDA0; [66 2A, 05, 28][66 3A, 05, 28][66 EE, 05, 26]
+FD9F; [66 2A, 05, 28][66 3A, 05, 28][66 F0, 05, 2C]
+FCA2; [66 2A, 05, 18][66 4A, 05, 18]
+FC0C; [66 2A, 05, 30][66 4A, 05, 30]
+FD52; [66 2A, 05, 18][66 4A, 05, 18][66 3A, 05, 18]
+FD51; [66 2A, 05, 28][66 4A, 05, 28][66 3A, 05, 28]
+FD53; [66 2A, 05, 18][66 4A, 05, 18][66 CA, 05, 18]
+FCA3; [66 2A, 05, 18][66 4C, 05, 18]
+FC0D; [66 2A, 05, 30][66 4C, 05, 30]
+FD54; [66 2A, 05, 18][66 4C, 05, 18][66 CA, 05, 18]
+FDA2; [66 2A, 05, 28][66 4C, 05, 28][66 EE, 05, 26]
+FDA1; [66 2A, 05, 28][66 4C, 05, 28][66 F0, 05, 2C]
+FC70; [66 2A, 05, 28][66 70, 05, 1E]
+FC71; [66 2A, 05, 28][66 72, 05, 1E]
+FCA4; [66 2A, 05, 18][66 CA, 05, 18]
+FCE3; [66 2A, 05, 20][66 CA, 05, 20]
+FC72; [66 2A, 05, 28][66 CA, 05, 28]
+FC0E; [66 2A, 05, 30][66 CA, 05, 30]
+FD55; [66 2A, 05, 18][66 CA, 05, 18][66 3A, 05, 18]
+FD56; [66 2A, 05, 18][66 CA, 05, 18][66 4A, 05, 18]
+FD57; [66 2A, 05, 18][66 CA, 05, 18][66 4C, 05, 18]
+FDA4; [66 2A, 05, 28][66 CA, 05, 28][66 EE, 05, 26]
+FDA3; [66 2A, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FC73; [66 2A, 05, 28][66 CE, 05, 28]
+FCA5; [66 2A, 05, 18][66 D8, 05, 18]
+FCE4; [66 2A, 05, 20][66 D8, 05, 20]
+FC74; [66 2A, 05, 28][66 EE, 05, 26]
+FC0F; [66 2A, 05, 30][66 EE, 05, 31]
+FC75; [66 2A, 05, 28][66 F0, 05, 2C]
+FC10; [66 2A, 05, 30][66 F0, 05, 33]
062B; [66 2C, 05, 05]
1EE16; [66 2C, 05, 10]
@@ -24180,18 +24879,18 @@ FE9C; [66 2C, 05, 20]
FE9A; [66 2C, 05, 28]
FE99; [66 2C, 05, 30]
FC11; [66 2C, 05, 30][66 3A, 05, 30]
-FC76; [66 2C, 05, 28][66 6E, 05, 1E]
-FC77; [66 2C, 05, 28][66 70, 05, 1E]
-FCA6; [66 2C, 05, 18][66 C8, 05, 18]
-FCE5; [66 2C, 05, 20][66 C8, 05, 20]
-FC78; [66 2C, 05, 28][66 C8, 05, 28]
-FC12; [66 2C, 05, 30][66 C8, 05, 30]
-FC79; [66 2C, 05, 28][66 CC, 05, 28]
-FCE6; [66 2C, 05, 20][66 D6, 05, 20]
-FC7A; [66 2C, 05, 28][66 EC, 05, 26]
-FC13; [66 2C, 05, 30][66 EC, 05, 31]
-FC7B; [66 2C, 05, 28][66 EE, 05, 2C]
-FC14; [66 2C, 05, 30][66 EE, 05, 33]
+FC76; [66 2C, 05, 28][66 70, 05, 1E]
+FC77; [66 2C, 05, 28][66 72, 05, 1E]
+FCA6; [66 2C, 05, 18][66 CA, 05, 18]
+FCE5; [66 2C, 05, 20][66 CA, 05, 20]
+FC78; [66 2C, 05, 28][66 CA, 05, 28]
+FC12; [66 2C, 05, 30][66 CA, 05, 30]
+FC79; [66 2C, 05, 28][66 CE, 05, 28]
+FCE6; [66 2C, 05, 20][66 D8, 05, 20]
+FC7A; [66 2C, 05, 28][66 EE, 05, 26]
+FC13; [66 2C, 05, 30][66 EE, 05, 31]
+FC7B; [66 2C, 05, 28][66 F0, 05, 2C]
+FC14; [66 2C, 05, 30][66 F0, 05, 33]
0679; [66 2E, 05, 05]
FB68; [66 2E, 05, 10]
@@ -24232,21 +24931,21 @@ FE9F; [66 3A, 05, 18]
FEA0; [66 3A, 05, 20]
FE9E; [66 3A, 05, 28]
FE9D; [66 3A, 05, 30]
-FCA7; [66 3A, 05, 18][66 48, 05, 18]
-FC15; [66 3A, 05, 30][66 48, 05, 30]
-FDA6; [66 3A, 05, 28][66 48, 05, 28][66 EC, 05, 26]
-FDBE; [66 3A, 05, 28][66 48, 05, 28][66 EE, 05, 2C]
-FDFB; [66 3A, 05, 30][66 C4, 05, 30][04, 05, 20][66 3A, 05, 30][66 C4, 05, 30][66 1A, 05, 31][66 C4, 05, 30][66 D6, 05, 30]
-FCA8; [66 3A, 05, 18][66 C8, 05, 18]
-FC16; [66 3A, 05, 30][66 C8, 05, 30]
-FD59; [66 3A, 05, 18][66 C8, 05, 18][66 48, 05, 18]
-FD58; [66 3A, 05, 28][66 C8, 05, 28][66 48, 05, 28]
-FDA7; [66 3A, 05, 28][66 C8, 05, 28][66 EC, 05, 26]
-FDA5; [66 3A, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FD1D; [66 3A, 05, 28][66 EC, 05, 26]
-FD01; [66 3A, 05, 30][66 EC, 05, 31]
-FD1E; [66 3A, 05, 28][66 EE, 05, 2C]
-FD02; [66 3A, 05, 30][66 EE, 05, 33]
+FCA7; [66 3A, 05, 18][66 4A, 05, 18]
+FC15; [66 3A, 05, 30][66 4A, 05, 30]
+FDA6; [66 3A, 05, 28][66 4A, 05, 28][66 EE, 05, 26]
+FDBE; [66 3A, 05, 28][66 4A, 05, 28][66 F0, 05, 2C]
+FDFB; [66 3A, 05, 30][66 C6, 05, 30][04, 05, 20][66 3A, 05, 30][66 C6, 05, 30][66 1A, 05, 31][66 C6, 05, 30][66 D8, 05, 30]
+FCA8; [66 3A, 05, 18][66 CA, 05, 18]
+FC16; [66 3A, 05, 30][66 CA, 05, 30]
+FD59; [66 3A, 05, 18][66 CA, 05, 18][66 4A, 05, 18]
+FD58; [66 3A, 05, 28][66 CA, 05, 28][66 4A, 05, 28]
+FDA7; [66 3A, 05, 28][66 CA, 05, 28][66 EE, 05, 26]
+FDA5; [66 3A, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FD1D; [66 3A, 05, 28][66 EE, 05, 26]
+FD01; [66 3A, 05, 30][66 EE, 05, 31]
+FD1E; [66 3A, 05, 28][66 F0, 05, 2C]
+FD02; [66 3A, 05, 30][66 F0, 05, 33]
0683; [66 3C, 05, 05]
FB78; [66 3C, 05, 10]
@@ -24260,1012 +24959,1028 @@ FB75; [66 3E, 05, 1B]
FB73; [66 3E, 05, 26]
FB72; [66 3E, 05, 31]
-0686; [66 40, 05, 05]
-FB7C; [66 40, 05, 10]
-FB7D; [66 40, 05, 1B]
-FB7B; [66 40, 05, 26]
-FB7A; [66 40, 05, 31]
-
-06BF; [66 42, 05, 05]
-
-0687; [66 44, 05, 05]
-FB80; [66 44, 05, 10]
-FB81; [66 44, 05, 1B]
-FB7F; [66 44, 05, 26]
-FB7E; [66 44, 05, 31]
-
-08A2; [66 46 02, 05, 05]
-
-08C1; [66 46 09, 05, 05]
-
-08C5; [66 46 10, 05, 05]
-
-08C6; [66 46 17, 05, 05]
-
-062D; [66 48, 05, 05]
-1EE07; [66 48, 05, 10]
-1EE27; [66 48, 05, 10]
-1EE47; [66 48, 05, 10]
-1EE67; [66 48, 05, 10]
-1EE87; [66 48, 05, 10]
-1EEA7; [66 48, 05, 10]
-FEA3; [66 48, 05, 18]
-FEA4; [66 48, 05, 20]
-FEA2; [66 48, 05, 28]
-FEA1; [66 48, 05, 30]
-FCA9; [66 48, 05, 18][66 3A, 05, 18]
-FC17; [66 48, 05, 30][66 3A, 05, 30]
-FDBF; [66 48, 05, 28][66 3A, 05, 28][66 EE, 05, 2C]
-FCAA; [66 48, 05, 18][66 C8, 05, 18]
-FC18; [66 48, 05, 30][66 C8, 05, 30]
-FD5B; [66 48, 05, 28][66 C8, 05, 28][66 EC, 05, 26]
-FD5A; [66 48, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FD1B; [66 48, 05, 28][66 EC, 05, 26]
-FCFF; [66 48, 05, 30][66 EC, 05, 31]
-FD1C; [66 48, 05, 28][66 EE, 05, 2C]
-FD00; [66 48, 05, 30][66 EE, 05, 33]
-
-062E; [66 4A, 05, 05]
-1EE17; [66 4A, 05, 10]
-1EE37; [66 4A, 05, 10]
-1EE57; [66 4A, 05, 10]
-1EE77; [66 4A, 05, 10]
-1EE97; [66 4A, 05, 10]
-1EEB7; [66 4A, 05, 10]
-FEA7; [66 4A, 05, 18]
-FEA8; [66 4A, 05, 20]
-FEA6; [66 4A, 05, 28]
-FEA5; [66 4A, 05, 30]
-FCAB; [66 4A, 05, 18][66 3A, 05, 18]
-FC19; [66 4A, 05, 30][66 3A, 05, 30]
-FC1A; [66 4A, 05, 30][66 48, 05, 30]
-FCAC; [66 4A, 05, 18][66 C8, 05, 18]
-FC1B; [66 4A, 05, 30][66 C8, 05, 30]
-FD1F; [66 4A, 05, 28][66 EC, 05, 26]
-FD03; [66 4A, 05, 30][66 EC, 05, 31]
-FD20; [66 4A, 05, 28][66 EE, 05, 2C]
-FD04; [66 4A, 05, 30][66 EE, 05, 33]
+088A; [66 40, 05, 05]
+
+0686; [66 42, 05, 05]
+FB7C; [66 42, 05, 10]
+FB7D; [66 42, 05, 1B]
+FB7B; [66 42, 05, 26]
+FB7A; [66 42, 05, 31]
+
+06BF; [66 44, 05, 05]
+
+0687; [66 46, 05, 05]
+FB80; [66 46, 05, 10]
+FB81; [66 46, 05, 1B]
+FB7F; [66 46, 05, 26]
+FB7E; [66 46, 05, 31]
+
+08A2; [66 48 02, 05, 05]
+
+08C1; [66 48 09, 05, 05]
+
+08C5; [66 48 10, 05, 05]
+
+08C6; [66 48 17, 05, 05]
+
+062D; [66 4A, 05, 05]
+1EE07; [66 4A, 05, 10]
+1EE27; [66 4A, 05, 10]
+1EE47; [66 4A, 05, 10]
+1EE67; [66 4A, 05, 10]
+1EE87; [66 4A, 05, 10]
+1EEA7; [66 4A, 05, 10]
+FEA3; [66 4A, 05, 18]
+FEA4; [66 4A, 05, 20]
+FEA2; [66 4A, 05, 28]
+FEA1; [66 4A, 05, 30]
+FCA9; [66 4A, 05, 18][66 3A, 05, 18]
+FC17; [66 4A, 05, 30][66 3A, 05, 30]
+FDBF; [66 4A, 05, 28][66 3A, 05, 28][66 F0, 05, 2C]
+FCAA; [66 4A, 05, 18][66 CA, 05, 18]
+FC18; [66 4A, 05, 30][66 CA, 05, 30]
+FD5B; [66 4A, 05, 28][66 CA, 05, 28][66 EE, 05, 26]
+FD5A; [66 4A, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FD1B; [66 4A, 05, 28][66 EE, 05, 26]
+FCFF; [66 4A, 05, 30][66 EE, 05, 31]
+FD1C; [66 4A, 05, 28][66 F0, 05, 2C]
+FD00; [66 4A, 05, 30][66 F0, 05, 33]
+
+062E; [66 4C, 05, 05]
+1EE17; [66 4C, 05, 10]
+1EE37; [66 4C, 05, 10]
+1EE57; [66 4C, 05, 10]
+1EE77; [66 4C, 05, 10]
+1EE97; [66 4C, 05, 10]
+1EEB7; [66 4C, 05, 10]
+FEA7; [66 4C, 05, 18]
+FEA8; [66 4C, 05, 20]
+FEA6; [66 4C, 05, 28]
+FEA5; [66 4C, 05, 30]
+FCAB; [66 4C, 05, 18][66 3A, 05, 18]
+FC19; [66 4C, 05, 30][66 3A, 05, 30]
+FC1A; [66 4C, 05, 30][66 4A, 05, 30]
+FCAC; [66 4C, 05, 18][66 CA, 05, 18]
+FC1B; [66 4C, 05, 30][66 CA, 05, 30]
+FD1F; [66 4C, 05, 28][66 EE, 05, 26]
+FD03; [66 4C, 05, 30][66 EE, 05, 31]
+FD20; [66 4C, 05, 28][66 F0, 05, 2C]
+FD04; [66 4C, 05, 30][66 F0, 05, 33]
-0681; [66 4C, 05, 05]
+0681; [66 4E, 05, 05]
-0682; [66 4E, 05, 05]
+0682; [66 50, 05, 05]
-0685; [66 50, 05, 05]
+0685; [66 52, 05, 05]
-0757; [66 52 02, 05, 05]
+0757; [66 54 02, 05, 05]
-0758; [66 52 09, 05, 05]
+0758; [66 54 09, 05, 05]
-076E; [66 52 10, 05, 05]
+076E; [66 54 10, 05, 05]
-076F; [66 52 17, 05, 05]
+076F; [66 54 17, 05, 05]
-0772; [66 52 1E, 05, 05]
+0772; [66 54 1E, 05, 05]
-077C; [66 52 25, 05, 05]
+077C; [66 54 25, 05, 05]
-062F; [66 54, 05, 05]
-1EE03; [66 54, 05, 10]
-1EE83; [66 54, 05, 10]
-1EEA3; [66 54, 05, 10]
-FEAA; [66 54, 05, 1E]
-FEA9; [66 54, 05, 2C]
+062F; [66 56, 05, 05]
+1EE03; [66 56, 05, 10]
+1EE83; [66 56, 05, 10]
+1EEA3; [66 56, 05, 10]
+FEAA; [66 56, 05, 1E]
+FEA9; [66 56, 05, 2C]
-0630; [66 56, 05, 05]
-1EE18; [66 56, 05, 10]
-1EE98; [66 56, 05, 10]
-1EEB8; [66 56, 05, 10]
-FEAC; [66 56, 05, 1E]
-FEAB; [66 56, 05, 2C]
-FC5B; [66 56, 05, 2C][, EB 3B, 2C]
+0630; [66 58, 05, 05]
+1EE18; [66 58, 05, 10]
+1EE98; [66 58, 05, 10]
+1EEB8; [66 58, 05, 10]
+FEAC; [66 58, 05, 1E]
+FEAB; [66 58, 05, 2C]
+FC5B; [66 58, 05, 2C][, EB 3B, 2C]
-0688; [66 58, 05, 05]
-FB89; [66 58, 05, 20]
-FB88; [66 58, 05, 2E]
+0688; [66 5A, 05, 05]
+FB89; [66 5A, 05, 20]
+FB88; [66 5A, 05, 2E]
-0689; [66 5A, 05, 05]
+0689; [66 5C, 05, 05]
-068A; [66 5C, 05, 05]
+068A; [66 5E, 05, 05]
-068B; [66 5E, 05, 05]
+068B; [66 60, 05, 05]
-068C; [66 60, 05, 05]
-FB85; [66 60, 05, 20]
-FB84; [66 60, 05, 2E]
+068C; [66 62, 05, 05]
+FB85; [66 62, 05, 20]
+FB84; [66 62, 05, 2E]
-068D; [66 62, 05, 05]
-FB83; [66 62, 05, 20]
-FB82; [66 62, 05, 2E]
-
-08AE; [66 64, 05, 05]
-
-068E; [66 66, 05, 05]
-FB87; [66 66, 05, 20]
-FB86; [66 66, 05, 2E]
-
-068F; [66 68, 05, 05]
-
-0690; [66 6A, 05, 05]
-
-06EE; [66 6C 02, 05, 05]
-
-0759; [66 6C 09, 05, 05]
-
-075A; [66 6C 10, 05, 05]
-
-0631; [66 6E, 05, 05]
-1EE13; [66 6E, 05, 10]
-1EE93; [66 6E, 05, 10]
-1EEB3; [66 6E, 05, 10]
-FEAE; [66 6E, 05, 1E]
-FEAD; [66 6E, 05, 2C]
-FC5C; [66 6E, 05, 2C][, EB 3B, 2C]
-FDF6; [66 6E, 05, 2C][66 86, 05, 30][66 DE, 05, 31][66 C4, 05, 30]
-
-0632; [66 70, 05, 05]
-1EE06; [66 70, 05, 10]
-1EE86; [66 70, 05, 10]
-1EEA6; [66 70, 05, 10]
-FEB0; [66 70, 05, 1E]
-FEAF; [66 70, 05, 2C]
-
-0691; [66 72, 05, 05]
-FB8D; [66 72, 05, 20]
-FB8C; [66 72, 05, 2E]
-
-0692; [66 74, 05, 05]
-
-0693; [66 76, 05, 05]
-
-0694; [66 78, 05, 05]
-
-0695; [66 7A, 05, 05]
-
-0696; [66 7C, 05, 05]
-
-0697; [66 7E, 05, 05]
-
-0698; [66 80, 05, 05]
-FB8B; [66 80, 05, 20]
-FB8A; [66 80, 05, 2E]
-
-0699; [66 82, 05, 05]
-
-06EF; [66 84 02, 05, 05]
-
-075B; [66 84 09, 05, 05]
-
-076B; [66 84 10, 05, 05]
-
-076C; [66 84 17, 05, 05]
-
-0771; [66 84 1E, 05, 05]
-
-08AA; [66 84 25, 05, 05]
-
-08B2; [66 84 2C, 05, 05]
-
-08B9; [66 84 33, 05, 05]
-
-0633; [66 86, 05, 05]
-1EE0E; [66 86, 05, 10]
-1EE2E; [66 86, 05, 10]
-1EE4E; [66 86, 05, 10]
-1EE6E; [66 86, 05, 10]
-1EE8E; [66 86, 05, 10]
-1EEAE; [66 86, 05, 10]
-FEB3; [66 86, 05, 18]
-FEB4; [66 86, 05, 20]
-FEB2; [66 86, 05, 28]
-FEB1; [66 86, 05, 30]
-FCAD; [66 86, 05, 18][66 3A, 05, 18]
-FD34; [66 86, 05, 20][66 3A, 05, 20]
-FC1C; [66 86, 05, 30][66 3A, 05, 30]
-FD5D; [66 86, 05, 18][66 3A, 05, 18][66 48, 05, 18]
-FD5E; [66 86, 05, 28][66 3A, 05, 28][66 EC, 05, 26]
-FCAE; [66 86, 05, 18][66 48, 05, 18]
-FD35; [66 86, 05, 20][66 48, 05, 20]
-FC1D; [66 86, 05, 30][66 48, 05, 30]
-FD5C; [66 86, 05, 18][66 48, 05, 18][66 3A, 05, 18]
-FCAF; [66 86, 05, 18][66 4A, 05, 18]
-FD36; [66 86, 05, 20][66 4A, 05, 20]
-FC1E; [66 86, 05, 30][66 4A, 05, 30]
-FDA8; [66 86, 05, 28][66 4A, 05, 28][66 EC, 05, 26]
-FDC6; [66 86, 05, 28][66 4A, 05, 28][66 EE, 05, 2C]
-FD2A; [66 86, 05, 28][66 6E, 05, 1E]
-FD0E; [66 86, 05, 30][66 6E, 05, 2C]
-FCB0; [66 86, 05, 18][66 C8, 05, 18]
-FCE7; [66 86, 05, 20][66 C8, 05, 20]
-FC1F; [66 86, 05, 30][66 C8, 05, 30]
-FD61; [66 86, 05, 18][66 C8, 05, 18][66 3A, 05, 18]
-FD60; [66 86, 05, 18][66 C8, 05, 18][66 48, 05, 18]
-FD5F; [66 86, 05, 28][66 C8, 05, 28][66 48, 05, 28]
-FD63; [66 86, 05, 18][66 C8, 05, 18][66 C8, 05, 18]
-FD62; [66 86, 05, 28][66 C8, 05, 28][66 C8, 05, 28]
-FD31; [66 86, 05, 18][66 D6, 05, 18]
-FCE8; [66 86, 05, 20][66 D6, 05, 20]
-FD17; [66 86, 05, 28][66 EC, 05, 26]
-FCFB; [66 86, 05, 30][66 EC, 05, 31]
-FD18; [66 86, 05, 28][66 EE, 05, 2C]
-FCFC; [66 86, 05, 30][66 EE, 05, 33]
-
-0634; [66 88, 05, 05]
-1EE14; [66 88, 05, 10]
-1EE34; [66 88, 05, 10]
-1EE54; [66 88, 05, 10]
-1EE74; [66 88, 05, 10]
-1EE94; [66 88, 05, 10]
-1EEB4; [66 88, 05, 10]
-FEB7; [66 88, 05, 18]
-FEB8; [66 88, 05, 20]
-FEB6; [66 88, 05, 28]
-FEB5; [66 88, 05, 30]
-FD2D; [66 88, 05, 18][66 3A, 05, 18]
-FD37; [66 88, 05, 20][66 3A, 05, 20]
-FD25; [66 88, 05, 28][66 3A, 05, 28]
-FD09; [66 88, 05, 30][66 3A, 05, 30]
-FD69; [66 88, 05, 28][66 3A, 05, 28][66 EE, 05, 2C]
-FD2E; [66 88, 05, 18][66 48, 05, 18]
-FD38; [66 88, 05, 20][66 48, 05, 20]
-FD26; [66 88, 05, 28][66 48, 05, 28]
-FD0A; [66 88, 05, 30][66 48, 05, 30]
-FD68; [66 88, 05, 18][66 48, 05, 18][66 C8, 05, 18]
-FD67; [66 88, 05, 28][66 48, 05, 28][66 C8, 05, 28]
-FDAA; [66 88, 05, 28][66 48, 05, 28][66 EE, 05, 2C]
-FD2F; [66 88, 05, 18][66 4A, 05, 18]
-FD39; [66 88, 05, 20][66 4A, 05, 20]
-FD27; [66 88, 05, 28][66 4A, 05, 28]
-FD0B; [66 88, 05, 30][66 4A, 05, 30]
-FD29; [66 88, 05, 28][66 6E, 05, 1E]
-FD0D; [66 88, 05, 30][66 6E, 05, 2C]
-FD30; [66 88, 05, 18][66 C8, 05, 18]
-FCE9; [66 88, 05, 20][66 C8, 05, 20]
-FD28; [66 88, 05, 28][66 C8, 05, 28]
-FD0C; [66 88, 05, 30][66 C8, 05, 30]
-FD6B; [66 88, 05, 18][66 C8, 05, 18][66 4A, 05, 18]
-FD6A; [66 88, 05, 28][66 C8, 05, 28][66 4A, 05, 28]
-FD6D; [66 88, 05, 18][66 C8, 05, 18][66 C8, 05, 18]
-FD6C; [66 88, 05, 28][66 C8, 05, 28][66 C8, 05, 28]
-FD32; [66 88, 05, 18][66 D6, 05, 18]
-FCEA; [66 88, 05, 20][66 D6, 05, 20]
-FD19; [66 88, 05, 28][66 EC, 05, 26]
-FCFD; [66 88, 05, 30][66 EC, 05, 31]
-FD1A; [66 88, 05, 28][66 EE, 05, 2C]
-FCFE; [66 88, 05, 30][66 EE, 05, 33]
-
-069A; [66 8A, 05, 05]
-
-069B; [66 8C, 05, 05]
-
-069C; [66 8E, 05, 05]
-
-06FA; [66 90 02, 05, 05]
-
-075C; [66 90 09, 05, 05]
-
-076D; [66 90 10, 05, 05]
-
-0770; [66 90 17, 05, 05]
-
-077D; [66 90 1E, 05, 05]
-
-077E; [66 90 25, 05, 05]
-
-0635; [66 92, 05, 05]
-1EE11; [66 92, 05, 10]
-1EE31; [66 92, 05, 10]
-1EE51; [66 92, 05, 10]
-1EE71; [66 92, 05, 10]
-1EE91; [66 92, 05, 10]
-1EEB1; [66 92, 05, 10]
-FEBB; [66 92, 05, 18]
-FEBC; [66 92, 05, 20]
-FEBA; [66 92, 05, 28]
-FEB9; [66 92, 05, 30]
-FCB1; [66 92, 05, 18][66 48, 05, 18]
-FC20; [66 92, 05, 30][66 48, 05, 30]
-FD65; [66 92, 05, 18][66 48, 05, 18][66 48, 05, 18]
-FD64; [66 92, 05, 28][66 48, 05, 28][66 48, 05, 28]
-FDA9; [66 92, 05, 28][66 48, 05, 28][66 EE, 05, 2C]
-FCB2; [66 92, 05, 18][66 4A, 05, 18]
-FD2B; [66 92, 05, 28][66 6E, 05, 1E]
-FD0F; [66 92, 05, 30][66 6E, 05, 2C]
-FDF5; [66 92, 05, 30][66 C4, 05, 30][66 A6, 05, 30][66 C8, 05, 30]
-FDF9; [66 92, 05, 30][66 C4, 05, 30][66 EC, 05, 31]
-FDFA; [66 92, 05, 30][66 C4, 05, 30][66 EC, 05, 31][04, 05, 20][66 1A, 05, 31][66 C4, 05, 30][66 C4, 05, 30][66 D6, 05, 30][04, 05, 20][66 A6, 05, 30][66 C4, 05, 30][66 EE, 05, 33][66 D6, 05, 30][04, 05, 20][66 DE, 05, 31][66 86, 05, 30][66 C4, 05, 30][66 C8, 05, 30]
-FDF0; [66 92, 05, 30][66 C4, 05, 30][66 FA, 05, 2E]
-FCB3; [66 92, 05, 18][66 C8, 05, 18]
-FC21; [66 92, 05, 30][66 C8, 05, 30]
-FDC5; [66 92, 05, 18][66 C8, 05, 18][66 C8, 05, 18]
-FD66; [66 92, 05, 28][66 C8, 05, 28][66 C8, 05, 28]
-FD21; [66 92, 05, 28][66 EC, 05, 26]
-FD05; [66 92, 05, 30][66 EC, 05, 31]
-FD22; [66 92, 05, 28][66 EE, 05, 2C]
-FD06; [66 92, 05, 30][66 EE, 05, 33]
-
-0636; [66 94, 05, 05]
-1EE19; [66 94, 05, 10]
-1EE39; [66 94, 05, 10]
-1EE59; [66 94, 05, 10]
-1EE79; [66 94, 05, 10]
-1EE99; [66 94, 05, 10]
-1EEB9; [66 94, 05, 10]
-FEBF; [66 94, 05, 18]
-FEC0; [66 94, 05, 20]
-FEBE; [66 94, 05, 28]
-FEBD; [66 94, 05, 30]
-FCB4; [66 94, 05, 18][66 3A, 05, 18]
-FC22; [66 94, 05, 30][66 3A, 05, 30]
-FCB5; [66 94, 05, 18][66 48, 05, 18]
-FC23; [66 94, 05, 30][66 48, 05, 30]
-FD6E; [66 94, 05, 28][66 48, 05, 28][66 EC, 05, 26]
-FDAB; [66 94, 05, 28][66 48, 05, 28][66 EE, 05, 2C]
-FCB6; [66 94, 05, 18][66 4A, 05, 18]
-FC24; [66 94, 05, 30][66 4A, 05, 30]
-FD70; [66 94, 05, 18][66 4A, 05, 18][66 C8, 05, 18]
-FD6F; [66 94, 05, 28][66 4A, 05, 28][66 C8, 05, 28]
-FD2C; [66 94, 05, 28][66 6E, 05, 1E]
-FD10; [66 94, 05, 30][66 6E, 05, 2C]
-FCB7; [66 94, 05, 18][66 C8, 05, 18]
-FC25; [66 94, 05, 30][66 C8, 05, 30]
-FD23; [66 94, 05, 28][66 EC, 05, 26]
-FD07; [66 94, 05, 30][66 EC, 05, 31]
-FD24; [66 94, 05, 28][66 EE, 05, 2C]
-FD08; [66 94, 05, 30][66 EE, 05, 33]
-
-069D; [66 96, 05, 05]
-
-08AF; [66 98, 05, 05]
-
-069E; [66 9A, 05, 05]
-
-06FB; [66 9C, 05, 05]
-
-0637; [66 9E, 05, 05]
-1EE08; [66 9E, 05, 10]
-1EE68; [66 9E, 05, 10]
-1EE88; [66 9E, 05, 10]
-1EEA8; [66 9E, 05, 10]
-FEC3; [66 9E, 05, 18]
-FEC4; [66 9E, 05, 20]
-FEC2; [66 9E, 05, 28]
-FEC1; [66 9E, 05, 30]
-FCB8; [66 9E, 05, 18][66 48, 05, 18]
-FC26; [66 9E, 05, 30][66 48, 05, 30]
-FD33; [66 9E, 05, 18][66 C8, 05, 18]
-FD3A; [66 9E, 05, 20][66 C8, 05, 20]
-FC27; [66 9E, 05, 30][66 C8, 05, 30]
-FD72; [66 9E, 05, 18][66 C8, 05, 18][66 48, 05, 18]
-FD71; [66 9E, 05, 28][66 C8, 05, 28][66 48, 05, 28]
-FD73; [66 9E, 05, 18][66 C8, 05, 18][66 C8, 05, 18]
-FD74; [66 9E, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FD11; [66 9E, 05, 28][66 EC, 05, 26]
-FCF5; [66 9E, 05, 30][66 EC, 05, 31]
-FD12; [66 9E, 05, 28][66 EE, 05, 2C]
-FCF6; [66 9E, 05, 30][66 EE, 05, 33]
-
-0638; [66 A0, 05, 05]
-1EE1A; [66 A0, 05, 10]
-1EE7A; [66 A0, 05, 10]
-1EE9A; [66 A0, 05, 10]
-1EEBA; [66 A0, 05, 10]
-FEC7; [66 A0, 05, 18]
-FEC8; [66 A0, 05, 20]
-FEC6; [66 A0, 05, 28]
-FEC5; [66 A0, 05, 30]
-FCB9; [66 A0, 05, 18][66 C8, 05, 18]
-FD3B; [66 A0, 05, 20][66 C8, 05, 20]
-FC28; [66 A0, 05, 30][66 C8, 05, 30]
-
-069F; [66 A2, 05, 05]
-
-08A3; [66 A4, 05, 05]
-
-0639; [66 A6, 05, 05]
-1EE0F; [66 A6, 05, 10]
-1EE2F; [66 A6, 05, 10]
-1EE4F; [66 A6, 05, 10]
-1EE6F; [66 A6, 05, 10]
-1EE8F; [66 A6, 05, 10]
-1EEAF; [66 A6, 05, 10]
-FECB; [66 A6, 05, 18]
-FECC; [66 A6, 05, 20]
-FECA; [66 A6, 05, 28]
-FEC9; [66 A6, 05, 30]
-FCBA; [66 A6, 05, 18][66 3A, 05, 18]
-FC29; [66 A6, 05, 30][66 3A, 05, 30]
-FDC4; [66 A6, 05, 18][66 3A, 05, 18][66 C8, 05, 18]
-FD75; [66 A6, 05, 28][66 3A, 05, 28][66 C8, 05, 28]
-FDF7; [66 A6, 05, 30][66 C4, 05, 30][66 EE, 05, 33][66 D6, 05, 30]
-FCBB; [66 A6, 05, 18][66 C8, 05, 18]
-FC2A; [66 A6, 05, 30][66 C8, 05, 30]
-FD77; [66 A6, 05, 18][66 C8, 05, 18][66 C8, 05, 18]
-FD76; [66 A6, 05, 28][66 C8, 05, 28][66 C8, 05, 28]
-FD78; [66 A6, 05, 28][66 C8, 05, 28][66 EC, 05, 26]
-FDB6; [66 A6, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FD13; [66 A6, 05, 28][66 EC, 05, 26]
-FCF7; [66 A6, 05, 30][66 EC, 05, 31]
-FD14; [66 A6, 05, 28][66 EE, 05, 2C]
-FCF8; [66 A6, 05, 30][66 EE, 05, 33]
-
-063A; [66 A8, 05, 05]
-1EE1B; [66 A8, 05, 10]
-1EE3B; [66 A8, 05, 10]
-1EE5B; [66 A8, 05, 10]
-1EE7B; [66 A8, 05, 10]
-1EE9B; [66 A8, 05, 10]
-1EEBB; [66 A8, 05, 10]
-FECF; [66 A8, 05, 18]
-FED0; [66 A8, 05, 20]
-FECE; [66 A8, 05, 28]
-FECD; [66 A8, 05, 30]
-FCBC; [66 A8, 05, 18][66 3A, 05, 18]
-FC2B; [66 A8, 05, 30][66 3A, 05, 30]
-FCBD; [66 A8, 05, 18][66 C8, 05, 18]
-FC2C; [66 A8, 05, 30][66 C8, 05, 30]
-FD79; [66 A8, 05, 28][66 C8, 05, 28][66 C8, 05, 28]
-FD7B; [66 A8, 05, 28][66 C8, 05, 28][66 EC, 05, 26]
-FD7A; [66 A8, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FD15; [66 A8, 05, 28][66 EC, 05, 26]
-FCF9; [66 A8, 05, 30][66 EC, 05, 31]
-FD16; [66 A8, 05, 28][66 EE, 05, 2C]
-FCFA; [66 A8, 05, 30][66 EE, 05, 33]
-
-06A0; [66 AA, 05, 05]
-
-08C3; [66 AC 02, 05, 05]
-
-06FC; [66 AC 09, 05, 05]
-
-075D; [66 AC 10, 05, 05]
-
-075E; [66 AC 17, 05, 05]
-
-075F; [66 AC 1E, 05, 05]
-
-08B3; [66 AC 25, 05, 05]
-
-0641; [66 AE, 05, 05]
-1EE10; [66 AE, 05, 10]
-1EE30; [66 AE, 05, 10]
-1EE70; [66 AE, 05, 10]
-1EE90; [66 AE, 05, 10]
-1EEB0; [66 AE, 05, 10]
-FED3; [66 AE, 05, 18]
-FED4; [66 AE, 05, 20]
-FED2; [66 AE, 05, 28]
-FED1; [66 AE, 05, 30]
-FCBE; [66 AE, 05, 18][66 3A, 05, 18]
-FC2D; [66 AE, 05, 30][66 3A, 05, 30]
-FCBF; [66 AE, 05, 18][66 48, 05, 18]
-FC2E; [66 AE, 05, 30][66 48, 05, 30]
-FCC0; [66 AE, 05, 18][66 4A, 05, 18]
-FC2F; [66 AE, 05, 30][66 4A, 05, 30]
-FD7D; [66 AE, 05, 18][66 4A, 05, 18][66 C8, 05, 18]
-FD7C; [66 AE, 05, 28][66 4A, 05, 28][66 C8, 05, 28]
-FCC1; [66 AE, 05, 18][66 C8, 05, 18]
-FC30; [66 AE, 05, 30][66 C8, 05, 30]
-FDC1; [66 AE, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FC7C; [66 AE, 05, 28][66 EC, 05, 26]
-FC31; [66 AE, 05, 30][66 EC, 05, 31]
-FC7D; [66 AE, 05, 28][66 EE, 05, 2C]
-FC32; [66 AE, 05, 30][66 EE, 05, 33]
-
-06A1; [66 B0 02, 05, 05]
-1EE1E; [66 B0 02, 05, 20]
-1EE7E; [66 B0 02, 05, 20]
-
-06A2; [66 B0 09, 05, 05]
-
-08BB; [66 B0 10, 05, 05]
-
-06A3; [66 B0 17, 05, 05]
-
-06A4; [66 B0 1E, 05, 05]
-FB6C; [66 B0 1E, 05, 10]
-FB6D; [66 B0 1E, 05, 1B]
-FB6B; [66 B0 1E, 05, 26]
-FB6A; [66 B0 1E, 05, 31]
-
-08A4; [66 B0 25, 05, 05]
-
-06A5; [66 B0 2C, 05, 05]
-
-06A6; [66 B0 33, 05, 05]
-FB70; [66 B0 33, 05, 10]
-FB71; [66 B0 33, 05, 1B]
-FB6F; [66 B0 33, 05, 26]
-FB6E; [66 B0 33, 05, 31]
-
-0760; [66 B0 3A, 05, 05]
-
-0761; [66 B0 41, 05, 05]
-
-066F; [66 B0 48, 05, 05]
-1EE1F; [66 B0 48, 05, 20]
-1EE5F; [66 B0 48, 05, 20]
-
-0642; [66 B2, 05, 05]
-1EE12; [66 B2, 05, 10]
-1EE32; [66 B2, 05, 10]
-1EE52; [66 B2, 05, 10]
-1EE72; [66 B2, 05, 10]
-1EE92; [66 B2, 05, 10]
-1EEB2; [66 B2, 05, 10]
-FED7; [66 B2, 05, 18]
-FED8; [66 B2, 05, 20]
-FED6; [66 B2, 05, 28]
-FED5; [66 B2, 05, 30]
-FCC2; [66 B2, 05, 18][66 48, 05, 18]
-FC33; [66 B2, 05, 30][66 48, 05, 30]
-FDF1; [66 B2, 05, 30][66 C4, 05, 30][66 FA, 05, 2E]
-FCC3; [66 B2, 05, 18][66 C8, 05, 18]
-FC34; [66 B2, 05, 30][66 C8, 05, 30]
-FDB4; [66 B2, 05, 18][66 C8, 05, 18][66 48, 05, 18]
-FD7E; [66 B2, 05, 28][66 C8, 05, 28][66 48, 05, 28]
-FD7F; [66 B2, 05, 28][66 C8, 05, 28][66 C8, 05, 28]
-FDB2; [66 B2, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FC7E; [66 B2, 05, 28][66 EC, 05, 26]
-FC35; [66 B2, 05, 30][66 EC, 05, 31]
-FC7F; [66 B2, 05, 28][66 EE, 05, 2C]
-FC36; [66 B2, 05, 30][66 EE, 05, 33]
-
-06A7; [66 B4 02, 05, 05]
-
-08BC; [66 B4 09, 05, 05]
-
-06A8; [66 B4 10, 05, 05]
-
-08C4; [66 B4 17, 05, 05]
-
-08A5; [66 B4 1E, 05, 05]
-
-0643; [66 B6, 05, 05]
-1EE0A; [66 B6, 05, 10]
-1EE2A; [66 B6, 05, 10]
-1EE6A; [66 B6, 05, 10]
-FEDB; [66 B6, 05, 18]
-FEDC; [66 B6, 05, 20]
-FEDA; [66 B6, 05, 28]
-FED9; [66 B6, 05, 30]
-FC80; [66 B6, 05, 28][66 1A, 05, 26]
-FC37; [66 B6, 05, 30][66 1A, 05, 31]
-FCC4; [66 B6, 05, 18][66 3A, 05, 18]
-FC38; [66 B6, 05, 30][66 3A, 05, 30]
-FCC5; [66 B6, 05, 18][66 48, 05, 18]
-FC39; [66 B6, 05, 30][66 48, 05, 30]
-FCC6; [66 B6, 05, 18][66 4A, 05, 18]
-FC3A; [66 B6, 05, 30][66 4A, 05, 30]
-FCC7; [66 B6, 05, 18][66 C4, 05, 18]
-FCEB; [66 B6, 05, 20][66 C4, 05, 20]
-FC81; [66 B6, 05, 28][66 C4, 05, 28]
-FC3B; [66 B6, 05, 30][66 C4, 05, 30]
-FCC8; [66 B6, 05, 18][66 C8, 05, 18]
-FCEC; [66 B6, 05, 20][66 C8, 05, 20]
-FC82; [66 B6, 05, 28][66 C8, 05, 28]
-FC3C; [66 B6, 05, 30][66 C8, 05, 30]
-FDC3; [66 B6, 05, 18][66 C8, 05, 18][66 C8, 05, 18]
-FDBB; [66 B6, 05, 28][66 C8, 05, 28][66 C8, 05, 28]
-FDB7; [66 B6, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FC83; [66 B6, 05, 28][66 EC, 05, 26]
-FC3D; [66 B6, 05, 30][66 EC, 05, 31]
-FC84; [66 B6, 05, 28][66 EE, 05, 2C]
-FC3E; [66 B6, 05, 30][66 EE, 05, 33]
-
-06A9; [66 B8, 05, 05]
-FB90; [66 B8, 05, 10]
-FB91; [66 B8, 05, 1B]
-FB8F; [66 B8, 05, 26]
-FB8E; [66 B8, 05, 31]
-
-06AA; [66 BA, 05, 05]
-
-06AB; [66 BC, 05, 05]
-
-06AC; [66 BE 02, 05, 05]
-
-077F; [66 BE 09, 05, 05]
-
-06AD; [66 BE 10, 05, 05]
-FBD5; [66 BE 10, 05, 10]
-FBD6; [66 BE 10, 05, 1B]
-FBD4; [66 BE 10, 05, 26]
-FBD3; [66 BE 10, 05, 31]
-
-06AE; [66 BE 17, 05, 05]
-
-08B4; [66 BE 1E, 05, 05]
-
-06AF; [66 C0, 05, 05]
-FB94; [66 C0, 05, 10]
-FB95; [66 C0, 05, 1B]
-FB93; [66 C0, 05, 26]
-FB92; [66 C0, 05, 31]
-
-08B0; [66 C2 02, 05, 05]
-
-06B0; [66 C2 09, 05, 05]
-
-06B1; [66 C2 10, 05, 05]
-FB9C; [66 C2 10, 05, 10]
-FB9D; [66 C2 10, 05, 1B]
-FB9B; [66 C2 10, 05, 26]
-FB9A; [66 C2 10, 05, 31]
-
-06B2; [66 C2 17, 05, 05]
-
-06B3; [66 C2 1E, 05, 05]
-FB98; [66 C2 1E, 05, 10]
-FB99; [66 C2 1E, 05, 1B]
-FB97; [66 C2 1E, 05, 26]
-FB96; [66 C2 1E, 05, 31]
-
-06B4; [66 C2 25, 05, 05]
-
-0762; [66 C2 2C, 05, 05]
-
-063B; [66 C2 33, 05, 05]
-
-063C; [66 C2 3A, 05, 05]
-
-0763; [66 C2 41, 05, 05]
-
-0764; [66 C2 48, 05, 05]
-
-08C2; [66 C2 4F, 05, 05]
-
-0644; [66 C4, 05, 05]
-1EE0B; [66 C4, 05, 10]
-1EE2B; [66 C4, 05, 10]
-1EE4B; [66 C4, 05, 10]
-1EE8B; [66 C4, 05, 10]
-1EEAB; [66 C4, 05, 10]
-FEDF; [66 C4, 05, 18]
-FEE0; [66 C4, 05, 20]
-FEDE; [66 C4, 05, 28]
-FEDD; [66 C4, 05, 30]
-FEF6; [66 C4, 05, 28][66 08, 05, 20]
-FEF5; [66 C4, 05, 30][66 08, 05, 2E]
-FEF8; [66 C4, 05, 28][66 0A, 05, 20]
-FEF7; [66 C4, 05, 30][66 0A, 05, 2E]
-FEFA; [66 C4, 05, 28][66 12, 05, 20]
-FEF9; [66 C4, 05, 30][66 12, 05, 2E]
-FEFC; [66 C4, 05, 28][66 1A, 05, 26]
-FEFB; [66 C4, 05, 30][66 1A, 05, 31]
-FCC9; [66 C4, 05, 18][66 3A, 05, 18]
-FC3F; [66 C4, 05, 30][66 3A, 05, 30]
-FD83; [66 C4, 05, 18][66 3A, 05, 18][66 3A, 05, 18]
-FD84; [66 C4, 05, 28][66 3A, 05, 28][66 3A, 05, 28]
-FDBA; [66 C4, 05, 18][66 3A, 05, 18][66 C8, 05, 18]
-FDBC; [66 C4, 05, 28][66 3A, 05, 28][66 C8, 05, 28]
-FDAC; [66 C4, 05, 28][66 3A, 05, 28][66 EE, 05, 2C]
-FCCA; [66 C4, 05, 18][66 48, 05, 18]
-FC40; [66 C4, 05, 30][66 48, 05, 30]
-FDB5; [66 C4, 05, 18][66 48, 05, 18][66 C8, 05, 18]
-FD80; [66 C4, 05, 28][66 48, 05, 28][66 C8, 05, 28]
-FD82; [66 C4, 05, 28][66 48, 05, 28][66 EC, 05, 26]
-FD81; [66 C4, 05, 28][66 48, 05, 28][66 EE, 05, 2C]
-FCCB; [66 C4, 05, 18][66 4A, 05, 18]
-FC41; [66 C4, 05, 30][66 4A, 05, 30]
-FD86; [66 C4, 05, 18][66 4A, 05, 18][66 C8, 05, 18]
-FD85; [66 C4, 05, 28][66 4A, 05, 28][66 C8, 05, 28]
-FCCC; [66 C4, 05, 18][66 C8, 05, 18]
-FCED; [66 C4, 05, 20][66 C8, 05, 20]
-FC85; [66 C4, 05, 28][66 C8, 05, 28]
-FC42; [66 C4, 05, 30][66 C8, 05, 30]
-FD88; [66 C4, 05, 18][66 C8, 05, 18][66 48, 05, 18]
-FD87; [66 C4, 05, 28][66 C8, 05, 28][66 48, 05, 28]
-FDAD; [66 C4, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FCCD; [66 C4, 05, 18][66 D6, 05, 18]
-FC86; [66 C4, 05, 28][66 EC, 05, 26]
-FC43; [66 C4, 05, 30][66 EC, 05, 31]
-FC87; [66 C4, 05, 28][66 EE, 05, 2C]
-FC44; [66 C4, 05, 30][66 EE, 05, 33]
-
-06B5; [66 C6 02, 05, 05]
-
-06B6; [66 C6 09, 05, 05]
-
-06B7; [66 C6 10, 05, 05]
-
-06B8; [66 C6 17, 05, 05]
-
-076A; [66 C6 1E, 05, 05]
-
-08A6; [66 C6 25, 05, 05]
-
-08C7; [66 C6 2C, 05, 05]
-
-0645; [66 C8, 05, 05]
-1EE0C; [66 C8, 05, 10]
-1EE2C; [66 C8, 05, 10]
-1EE6C; [66 C8, 05, 10]
-1EE8C; [66 C8, 05, 10]
-1EEAC; [66 C8, 05, 10]
-FEE3; [66 C8, 05, 18]
-FEE4; [66 C8, 05, 20]
-FEE2; [66 C8, 05, 28]
-FEE1; [66 C8, 05, 30]
-06FE; [66 C8, 70, 05]
-FC88; [66 C8, 05, 28][66 1A, 05, 26]
-FCCE; [66 C8, 05, 18][66 3A, 05, 18]
-FC45; [66 C8, 05, 30][66 3A, 05, 30]
-FD8C; [66 C8, 05, 18][66 3A, 05, 18][66 48, 05, 18]
-FD92; [66 C8, 05, 18][66 3A, 05, 18][66 4A, 05, 18]
-FD8D; [66 C8, 05, 18][66 3A, 05, 18][66 C8, 05, 18]
-FDC0; [66 C8, 05, 28][66 3A, 05, 28][66 EE, 05, 2C]
-FCCF; [66 C8, 05, 18][66 48, 05, 18]
-FC46; [66 C8, 05, 30][66 48, 05, 30]
-FD89; [66 C8, 05, 18][66 48, 05, 18][66 3A, 05, 18]
-FD8A; [66 C8, 05, 18][66 48, 05, 18][66 C8, 05, 18]
-FDF4; [66 C8, 05, 30][66 48, 05, 30][66 C8, 05, 30][66 54, 05, 2C]
-FD8B; [66 C8, 05, 28][66 48, 05, 28][66 EE, 05, 2C]
-FCD0; [66 C8, 05, 18][66 4A, 05, 18]
-FC47; [66 C8, 05, 30][66 4A, 05, 30]
-FD8E; [66 C8, 05, 18][66 4A, 05, 18][66 3A, 05, 18]
-FD8F; [66 C8, 05, 18][66 4A, 05, 18][66 C8, 05, 18]
-FDB9; [66 C8, 05, 28][66 4A, 05, 28][66 EE, 05, 2C]
-FCD1; [66 C8, 05, 18][66 C8, 05, 18]
-FC89; [66 C8, 05, 28][66 C8, 05, 28]
-FC48; [66 C8, 05, 30][66 C8, 05, 30]
-FDB1; [66 C8, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FC49; [66 C8, 05, 30][66 EC, 05, 31]
-FC4A; [66 C8, 05, 30][66 EE, 05, 33]
-
-0765; [66 CA 02, 05, 05]
-
-0766; [66 CA 09, 05, 05]
-
-08A7; [66 CA 10, 05, 05]
-
-0646; [66 CC, 05, 05]
-1EE0D; [66 CC, 05, 10]
-1EE2D; [66 CC, 05, 10]
-1EE4D; [66 CC, 05, 10]
-1EE6D; [66 CC, 05, 10]
-1EE8D; [66 CC, 05, 10]
-1EEAD; [66 CC, 05, 10]
-FEE7; [66 CC, 05, 18]
-FEE8; [66 CC, 05, 20]
-FEE6; [66 CC, 05, 28]
-FEE5; [66 CC, 05, 30]
-FCD2; [66 CC, 05, 18][66 3A, 05, 18]
-FC4B; [66 CC, 05, 30][66 3A, 05, 30]
-FDB8; [66 CC, 05, 18][66 3A, 05, 18][66 48, 05, 18]
-FDBD; [66 CC, 05, 28][66 3A, 05, 28][66 48, 05, 28]
-FD98; [66 CC, 05, 18][66 3A, 05, 18][66 C8, 05, 18]
-FD97; [66 CC, 05, 28][66 3A, 05, 28][66 C8, 05, 28]
-FD99; [66 CC, 05, 28][66 3A, 05, 28][66 EC, 05, 26]
-FDC7; [66 CC, 05, 28][66 3A, 05, 28][66 EE, 05, 2C]
-FCD3; [66 CC, 05, 18][66 48, 05, 18]
-FC4C; [66 CC, 05, 30][66 48, 05, 30]
-FD95; [66 CC, 05, 18][66 48, 05, 18][66 C8, 05, 18]
-FD96; [66 CC, 05, 28][66 48, 05, 28][66 EC, 05, 26]
-FDB3; [66 CC, 05, 28][66 48, 05, 28][66 EE, 05, 2C]
-FCD4; [66 CC, 05, 18][66 4A, 05, 18]
-FC4D; [66 CC, 05, 30][66 4A, 05, 30]
-FC8A; [66 CC, 05, 28][66 6E, 05, 1E]
-FC8B; [66 CC, 05, 28][66 70, 05, 1E]
-FCD5; [66 CC, 05, 18][66 C8, 05, 18]
-FCEE; [66 CC, 05, 20][66 C8, 05, 20]
-FC8C; [66 CC, 05, 28][66 C8, 05, 28]
-FC4E; [66 CC, 05, 30][66 C8, 05, 30]
-FD9B; [66 CC, 05, 28][66 C8, 05, 28][66 EC, 05, 26]
-FD9A; [66 CC, 05, 28][66 C8, 05, 28][66 EE, 05, 2C]
-FC8D; [66 CC, 05, 28][66 CC, 05, 28]
-FCD6; [66 CC, 05, 18][66 D6, 05, 18]
-FCEF; [66 CC, 05, 20][66 D6, 05, 20]
-FC8E; [66 CC, 05, 28][66 EC, 05, 26]
-FC4F; [66 CC, 05, 30][66 EC, 05, 31]
-FC8F; [66 CC, 05, 28][66 EE, 05, 2C]
-FC50; [66 CC, 05, 30][66 EE, 05, 33]
-
-06BA; [66 CE, 05, 05]
-1EE1D; [66 CE, 05, 10]
-1EE5D; [66 CE, 05, 10]
-FB9F; [66 CE, 05, 1E]
-FB9E; [66 CE, 05, 2C]
-
-08BD; [66 D0 02, 05, 05]
-
-06BB; [66 D0 09, 05, 05]
-FBA2; [66 D0 09, 05, 10]
-FBA3; [66 D0 09, 05, 1B]
-FBA1; [66 D0 09, 05, 26]
-FBA0; [66 D0 09, 05, 31]
-
-06BC; [66 D2, 05, 05]
-
-06BD; [66 D4 02, 05, 05]
-
-06B9; [66 D4 09, 05, 05]
-
-0767; [66 D4 10, 05, 05]
-
-0768; [66 D4 17, 05, 05]
-
-0769; [66 D4 1E, 05, 05]
-
-0647; [66 D6, 05, 05]
-1EE24; [66 D6, 05, 10]
-1EE64; [66 D6, 05, 10]
-1EE84; [66 D6, 05, 10]
-FEEB; [66 D6, 05, 18]
-FEEC; [66 D6, 05, 20]
-FEEA; [66 D6, 05, 28]
-FEE9; [66 D6, 05, 30]
-FCD9; [66 D6, 05, 18][, EB 3B, 10]
-FCD7; [66 D6, 05, 18][66 3A, 05, 18]
-FC51; [66 D6, 05, 30][66 3A, 05, 30]
-FCD8; [66 D6, 05, 18][66 C8, 05, 18]
-FC52; [66 D6, 05, 30][66 C8, 05, 30]
-FD93; [66 D6, 05, 18][66 C8, 05, 18][66 3A, 05, 18]
-FD94; [66 D6, 05, 18][66 C8, 05, 18][66 C8, 05, 18]
-FC53; [66 D6, 05, 30][66 EC, 05, 31]
-FC54; [66 D6, 05, 30][66 EE, 05, 33]
-
-06BE; [66 D8, 05, 05]
-FBAC; [66 D8, 05, 10]
-FBAD; [66 D8, 05, 1B]
-FBAB; [66 D8, 05, 26]
-FBAA; [66 D8, 05, 31]
-
-06C1; [66 DA, 05, 05]
-FBA8; [66 DA, 05, 10]
-FBA9; [66 DA, 05, 1B]
-FBA7; [66 DA, 05, 26]
-FBA6; [66 DA, 05, 31]
-06C2; [66 DA, 05, 05][, E8 80, 05]
-
-06C3; [66 DC 02, 05, 05]
-
-06FF; [66 DC 09, 05, 05]
-
-06D5; [66 DC 10, 05, 05]
-06C0; [66 DC 10, 05, 05][, E8 80, 05]
-FBA5; [66 DC 10, 05, 20][, E8 80, 20]
-FBA4; [66 DC 10, 05, 2E][, E8 80, 2E]
-
-0648; [66 DE, 05, 05]
-06E5; [66 DE, 05, 10]
-1EE05; [66 DE, 05, 1B]
-1EE85; [66 DE, 05, 1B]
-1EEA5; [66 DE, 05, 1B]
-FEEE; [66 DE, 05, 26]
-FEED; [66 DE, 05, 31]
-0676; [66 DE, 05, 10][66 06, 05, 20]
-FDF8; [66 DE, 05, 31][66 86, 05, 30][66 C4, 05, 30][66 C8, 05, 30]
-
-06C4; [66 E0, 05, 05]
-
-06C5; [66 E2 02, 05, 05]
-FBE1; [66 E2 02, 05, 20]
-FBE0; [66 E2 02, 05, 2E]
-
-06C6; [66 E2 09, 05, 05]
-FBDA; [66 E2 09, 05, 20]
-FBD9; [66 E2 09, 05, 2E]
-
-06C7; [66 E4, 05, 05]
-FBD8; [66 E4, 05, 1E]
-FBD7; [66 E4, 05, 2C]
-0677; [66 E4, 05, 10][66 06, 05, 20]
-FBDD; [66 E4, 05, 2C][66 06, 05, 2E]
-
-06C8; [66 E6, 05, 05]
-FBDC; [66 E6, 05, 20]
-FBDB; [66 E6, 05, 2E]
-
-06C9; [66 E8, 05, 05]
-FBE3; [66 E8, 05, 20]
-FBE2; [66 E8, 05, 2E]
-
-06CA; [66 EA 02, 05, 05]
-
-06CB; [66 EA 09, 05, 05]
-FBDF; [66 EA 09, 05, 20]
-FBDE; [66 EA 09, 05, 2E]
-
-08B1; [66 EA 10, 05, 05]
-
-06CF; [66 EA 17, 05, 05]
-
-0778; [66 EA 1E, 05, 05]
-
-0779; [66 EA 25, 05, 05]
-
-08AB; [66 EA 2C, 05, 05]
-
-0649; [66 EC, 05, 05]
-FBE8; [66 EC, 05, 10]
-FBE9; [66 EC, 05, 1B]
-FEF0; [66 EC, 05, 26]
-FEEF; [66 EC, 05, 31]
-FC90; [66 EC, 05, 26][, EB 3B, 1E]
-FC5D; [66 EC, 05, 31][, EB 3B, 2C]
-
-064A; [66 EE, 05, 05]
-06E6; [66 EE, 05, 10]
-1EE09; [66 EE, 05, 17]
-1EE29; [66 EE, 05, 17]
-1EE49; [66 EE, 05, 17]
-1EE69; [66 EE, 05, 17]
-1EE89; [66 EE, 05, 17]
-1EEA9; [66 EE, 05, 17]
-FEF3; [66 EE, 05, 1E]
-FEF4; [66 EE, 05, 25]
-FEF2; [66 EE, 05, 2C]
-FEF1; [66 EE, 05, 33]
-0678; [66 EE, 05, 10][66 06, 05, 20]
-FCDA; [66 EE, 05, 1E][66 3A, 05, 18]
-FC55; [66 EE, 05, 33][66 3A, 05, 30]
-FDAF; [66 EE, 05, 2C][66 3A, 05, 28][66 EE, 05, 2C]
-FCDB; [66 EE, 05, 1E][66 48, 05, 18]
-FC56; [66 EE, 05, 33][66 48, 05, 30]
-FDAE; [66 EE, 05, 2C][66 48, 05, 28][66 EE, 05, 2C]
-FCDC; [66 EE, 05, 1E][66 4A, 05, 18]
-FC57; [66 EE, 05, 33][66 4A, 05, 30]
-FC91; [66 EE, 05, 2C][66 6E, 05, 1E]
-FC92; [66 EE, 05, 2C][66 70, 05, 1E]
-FCDD; [66 EE, 05, 1E][66 C8, 05, 18]
-FCF0; [66 EE, 05, 25][66 C8, 05, 20]
-FC93; [66 EE, 05, 2C][66 C8, 05, 28]
-FC58; [66 EE, 05, 33][66 C8, 05, 30]
-FD9D; [66 EE, 05, 1E][66 C8, 05, 18][66 C8, 05, 18]
-FD9C; [66 EE, 05, 2C][66 C8, 05, 28][66 C8, 05, 28]
-FDB0; [66 EE, 05, 2C][66 C8, 05, 28][66 EE, 05, 2C]
-FC94; [66 EE, 05, 2C][66 CC, 05, 28]
-FCDE; [66 EE, 05, 1E][66 D6, 05, 18]
-FCF1; [66 EE, 05, 25][66 D6, 05, 20]
-FC95; [66 EE, 05, 2C][66 EC, 05, 26]
-FC59; [66 EE, 05, 33][66 EC, 05, 31]
-FC96; [66 EE, 05, 2C][66 EE, 05, 2C]
-FC5A; [66 EE, 05, 33][66 EE, 05, 33]
-
-06CC; [66 F0, 05, 05]
-FBFE; [66 F0, 05, 10]
-FBFF; [66 F0, 05, 1B]
-FBFD; [66 F0, 05, 26]
-FBFC; [66 F0, 05, 31]
-
-06CD; [66 F2, 05, 05]
-
-06CE; [66 F4, 05, 05]
-
-06D0; [66 F6, 05, 05]
-FBE6; [66 F6, 05, 10]
-FBE7; [66 F6, 05, 1B]
-FBE5; [66 F6, 05, 26]
-FBE4; [66 F6, 05, 31]
-
-06D1; [66 F8 02, 05, 05]
-
-063D; [66 F8 09, 05, 05]
-
-063E; [66 F8 10, 05, 05]
-
-063F; [66 F8 17, 05, 05]
-
-0620; [66 F8 1E, 05, 05]
-
-0775; [66 F8 25, 05, 05]
-
-0776; [66 F8 2C, 05, 05]
-
-0777; [66 F8 33, 05, 05]
-
-08BA; [66 F8 3A, 05, 05]
-
-06D2; [66 FA, 05, 05]
-FBAF; [66 FA, 05, 20]
-FBAE; [66 FA, 05, 2E]
-06D3; [66 FA, 05, 05][, E8 80, 05]
-FBB1; [66 FA, 05, 20][, E8 80, 20]
-FBB0; [66 FA, 05, 2E][, E8 80, 2E]
-
-077A; [66 FC 02, 05, 05]
-
-077B; [66 FC 09, 05, 05]
+068D; [66 64, 05, 05]
+FB83; [66 64, 05, 20]
+FB82; [66 64, 05, 2E]
+
+08AE; [66 66, 05, 05]
+
+068E; [66 68, 05, 05]
+FB87; [66 68, 05, 20]
+FB86; [66 68, 05, 2E]
+
+068F; [66 6A, 05, 05]
+
+0690; [66 6C, 05, 05]
+
+06EE; [66 6E 02, 05, 05]
+
+0759; [66 6E 09, 05, 05]
+
+075A; [66 6E 10, 05, 05]
+
+0631; [66 70, 05, 05]
+1EE13; [66 70, 05, 10]
+1EE93; [66 70, 05, 10]
+1EEB3; [66 70, 05, 10]
+FEAE; [66 70, 05, 1E]
+FEAD; [66 70, 05, 2C]
+FC5C; [66 70, 05, 2C][, EB 3B, 2C]
+FDF6; [66 70, 05, 2C][66 88, 05, 30][66 E0, 05, 31][66 C6, 05, 30]
+
+0632; [66 72, 05, 05]
+1EE06; [66 72, 05, 10]
+1EE86; [66 72, 05, 10]
+1EEA6; [66 72, 05, 10]
+FEB0; [66 72, 05, 1E]
+FEAF; [66 72, 05, 2C]
+
+0691; [66 74, 05, 05]
+FB8D; [66 74, 05, 20]
+FB8C; [66 74, 05, 2E]
+
+0692; [66 76, 05, 05]
+
+0693; [66 78, 05, 05]
+
+0694; [66 7A, 05, 05]
+
+0695; [66 7C, 05, 05]
+
+0696; [66 7E, 05, 05]
+
+0697; [66 80, 05, 05]
+
+0698; [66 82, 05, 05]
+FB8B; [66 82, 05, 20]
+FB8A; [66 82, 05, 2E]
+
+0699; [66 84, 05, 05]
+
+06EF; [66 86 02, 05, 05]
+
+075B; [66 86 09, 05, 05]
+
+076B; [66 86 10, 05, 05]
+
+076C; [66 86 17, 05, 05]
+
+0771; [66 86 1E, 05, 05]
+
+08AA; [66 86 25, 05, 05]
+
+08B2; [66 86 2C, 05, 05]
+
+08B9; [66 86 33, 05, 05]
+
+0633; [66 88, 05, 05]
+1EE0E; [66 88, 05, 10]
+1EE2E; [66 88, 05, 10]
+1EE4E; [66 88, 05, 10]
+1EE6E; [66 88, 05, 10]
+1EE8E; [66 88, 05, 10]
+1EEAE; [66 88, 05, 10]
+FEB3; [66 88, 05, 18]
+FEB4; [66 88, 05, 20]
+FEB2; [66 88, 05, 28]
+FEB1; [66 88, 05, 30]
+FCAD; [66 88, 05, 18][66 3A, 05, 18]
+FD34; [66 88, 05, 20][66 3A, 05, 20]
+FC1C; [66 88, 05, 30][66 3A, 05, 30]
+FD5D; [66 88, 05, 18][66 3A, 05, 18][66 4A, 05, 18]
+FD5E; [66 88, 05, 28][66 3A, 05, 28][66 EE, 05, 26]
+FCAE; [66 88, 05, 18][66 4A, 05, 18]
+FD35; [66 88, 05, 20][66 4A, 05, 20]
+FC1D; [66 88, 05, 30][66 4A, 05, 30]
+FD5C; [66 88, 05, 18][66 4A, 05, 18][66 3A, 05, 18]
+FCAF; [66 88, 05, 18][66 4C, 05, 18]
+FD36; [66 88, 05, 20][66 4C, 05, 20]
+FC1E; [66 88, 05, 30][66 4C, 05, 30]
+FDA8; [66 88, 05, 28][66 4C, 05, 28][66 EE, 05, 26]
+FDC6; [66 88, 05, 28][66 4C, 05, 28][66 F0, 05, 2C]
+FD2A; [66 88, 05, 28][66 70, 05, 1E]
+FD0E; [66 88, 05, 30][66 70, 05, 2C]
+FCB0; [66 88, 05, 18][66 CA, 05, 18]
+FCE7; [66 88, 05, 20][66 CA, 05, 20]
+FC1F; [66 88, 05, 30][66 CA, 05, 30]
+FD61; [66 88, 05, 18][66 CA, 05, 18][66 3A, 05, 18]
+FD60; [66 88, 05, 18][66 CA, 05, 18][66 4A, 05, 18]
+FD5F; [66 88, 05, 28][66 CA, 05, 28][66 4A, 05, 28]
+FD63; [66 88, 05, 18][66 CA, 05, 18][66 CA, 05, 18]
+FD62; [66 88, 05, 28][66 CA, 05, 28][66 CA, 05, 28]
+FD31; [66 88, 05, 18][66 D8, 05, 18]
+FCE8; [66 88, 05, 20][66 D8, 05, 20]
+FD17; [66 88, 05, 28][66 EE, 05, 26]
+FCFB; [66 88, 05, 30][66 EE, 05, 31]
+FD18; [66 88, 05, 28][66 F0, 05, 2C]
+FCFC; [66 88, 05, 30][66 F0, 05, 33]
+
+0634; [66 8A, 05, 05]
+1EE14; [66 8A, 05, 10]
+1EE34; [66 8A, 05, 10]
+1EE54; [66 8A, 05, 10]
+1EE74; [66 8A, 05, 10]
+1EE94; [66 8A, 05, 10]
+1EEB4; [66 8A, 05, 10]
+FEB7; [66 8A, 05, 18]
+FEB8; [66 8A, 05, 20]
+FEB6; [66 8A, 05, 28]
+FEB5; [66 8A, 05, 30]
+FD2D; [66 8A, 05, 18][66 3A, 05, 18]
+FD37; [66 8A, 05, 20][66 3A, 05, 20]
+FD25; [66 8A, 05, 28][66 3A, 05, 28]
+FD09; [66 8A, 05, 30][66 3A, 05, 30]
+FD69; [66 8A, 05, 28][66 3A, 05, 28][66 F0, 05, 2C]
+FD2E; [66 8A, 05, 18][66 4A, 05, 18]
+FD38; [66 8A, 05, 20][66 4A, 05, 20]
+FD26; [66 8A, 05, 28][66 4A, 05, 28]
+FD0A; [66 8A, 05, 30][66 4A, 05, 30]
+FD68; [66 8A, 05, 18][66 4A, 05, 18][66 CA, 05, 18]
+FD67; [66 8A, 05, 28][66 4A, 05, 28][66 CA, 05, 28]
+FDAA; [66 8A, 05, 28][66 4A, 05, 28][66 F0, 05, 2C]
+FD2F; [66 8A, 05, 18][66 4C, 05, 18]
+FD39; [66 8A, 05, 20][66 4C, 05, 20]
+FD27; [66 8A, 05, 28][66 4C, 05, 28]
+FD0B; [66 8A, 05, 30][66 4C, 05, 30]
+FD29; [66 8A, 05, 28][66 70, 05, 1E]
+FD0D; [66 8A, 05, 30][66 70, 05, 2C]
+FD30; [66 8A, 05, 18][66 CA, 05, 18]
+FCE9; [66 8A, 05, 20][66 CA, 05, 20]
+FD28; [66 8A, 05, 28][66 CA, 05, 28]
+FD0C; [66 8A, 05, 30][66 CA, 05, 30]
+FD6B; [66 8A, 05, 18][66 CA, 05, 18][66 4C, 05, 18]
+FD6A; [66 8A, 05, 28][66 CA, 05, 28][66 4C, 05, 28]
+FD6D; [66 8A, 05, 18][66 CA, 05, 18][66 CA, 05, 18]
+FD6C; [66 8A, 05, 28][66 CA, 05, 28][66 CA, 05, 28]
+FD32; [66 8A, 05, 18][66 D8, 05, 18]
+FCEA; [66 8A, 05, 20][66 D8, 05, 20]
+FD19; [66 8A, 05, 28][66 EE, 05, 26]
+FCFD; [66 8A, 05, 30][66 EE, 05, 31]
+FD1A; [66 8A, 05, 28][66 F0, 05, 2C]
+FCFE; [66 8A, 05, 30][66 F0, 05, 33]
+
+069A; [66 8C, 05, 05]
+
+069B; [66 8E, 05, 05]
+
+069C; [66 90, 05, 05]
+
+06FA; [66 92 02, 05, 05]
+
+075C; [66 92 09, 05, 05]
+
+076D; [66 92 10, 05, 05]
+
+0770; [66 92 17, 05, 05]
+
+077D; [66 92 1E, 05, 05]
+
+077E; [66 92 25, 05, 05]
+
+0635; [66 94, 05, 05]
+1EE11; [66 94, 05, 10]
+1EE31; [66 94, 05, 10]
+1EE51; [66 94, 05, 10]
+1EE71; [66 94, 05, 10]
+1EE91; [66 94, 05, 10]
+1EEB1; [66 94, 05, 10]
+FEBB; [66 94, 05, 18]
+FEBC; [66 94, 05, 20]
+FEBA; [66 94, 05, 28]
+FEB9; [66 94, 05, 30]
+FCB1; [66 94, 05, 18][66 4A, 05, 18]
+FC20; [66 94, 05, 30][66 4A, 05, 30]
+FD65; [66 94, 05, 18][66 4A, 05, 18][66 4A, 05, 18]
+FD64; [66 94, 05, 28][66 4A, 05, 28][66 4A, 05, 28]
+FDA9; [66 94, 05, 28][66 4A, 05, 28][66 F0, 05, 2C]
+FCB2; [66 94, 05, 18][66 4C, 05, 18]
+FD2B; [66 94, 05, 28][66 70, 05, 1E]
+FD0F; [66 94, 05, 30][66 70, 05, 2C]
+FDF5; [66 94, 05, 30][66 C6, 05, 30][66 A8, 05, 30][66 CA, 05, 30]
+FDF9; [66 94, 05, 30][66 C6, 05, 30][66 EE, 05, 31]
+FDFA; [66 94, 05, 30][66 C6, 05, 30][66 EE, 05, 31][04, 05, 20][66 1A, 05, 31][66 C6, 05, 30][66 C6, 05, 30][66 D8, 05, 30][04, 05, 20][66 A8, 05, 30][66 C6, 05, 30][66 F0, 05, 33][66 D8, 05, 30][04, 05, 20][66 E0, 05, 31][66 88, 05, 30][66 C6, 05, 30][66 CA, 05, 30]
+FDF0; [66 94, 05, 30][66 C6, 05, 30][66 FC, 05, 2E]
+FCB3; [66 94, 05, 18][66 CA, 05, 18]
+FC21; [66 94, 05, 30][66 CA, 05, 30]
+FDC5; [66 94, 05, 18][66 CA, 05, 18][66 CA, 05, 18]
+FD66; [66 94, 05, 28][66 CA, 05, 28][66 CA, 05, 28]
+FD21; [66 94, 05, 28][66 EE, 05, 26]
+FD05; [66 94, 05, 30][66 EE, 05, 31]
+FD22; [66 94, 05, 28][66 F0, 05, 2C]
+FD06; [66 94, 05, 30][66 F0, 05, 33]
+
+0636; [66 96, 05, 05]
+1EE19; [66 96, 05, 10]
+1EE39; [66 96, 05, 10]
+1EE59; [66 96, 05, 10]
+1EE79; [66 96, 05, 10]
+1EE99; [66 96, 05, 10]
+1EEB9; [66 96, 05, 10]
+FEBF; [66 96, 05, 18]
+FEC0; [66 96, 05, 20]
+FEBE; [66 96, 05, 28]
+FEBD; [66 96, 05, 30]
+FCB4; [66 96, 05, 18][66 3A, 05, 18]
+FC22; [66 96, 05, 30][66 3A, 05, 30]
+FCB5; [66 96, 05, 18][66 4A, 05, 18]
+FC23; [66 96, 05, 30][66 4A, 05, 30]
+FD6E; [66 96, 05, 28][66 4A, 05, 28][66 EE, 05, 26]
+FDAB; [66 96, 05, 28][66 4A, 05, 28][66 F0, 05, 2C]
+FCB6; [66 96, 05, 18][66 4C, 05, 18]
+FC24; [66 96, 05, 30][66 4C, 05, 30]
+FD70; [66 96, 05, 18][66 4C, 05, 18][66 CA, 05, 18]
+FD6F; [66 96, 05, 28][66 4C, 05, 28][66 CA, 05, 28]
+FD2C; [66 96, 05, 28][66 70, 05, 1E]
+FD10; [66 96, 05, 30][66 70, 05, 2C]
+FCB7; [66 96, 05, 18][66 CA, 05, 18]
+FC25; [66 96, 05, 30][66 CA, 05, 30]
+FD23; [66 96, 05, 28][66 EE, 05, 26]
+FD07; [66 96, 05, 30][66 EE, 05, 31]
+FD24; [66 96, 05, 28][66 F0, 05, 2C]
+FD08; [66 96, 05, 30][66 F0, 05, 33]
+
+069D; [66 98, 05, 05]
+
+08AF; [66 9A, 05, 05]
+
+069E; [66 9C, 05, 05]
+
+06FB; [66 9E, 05, 05]
+
+0637; [66 A0, 05, 05]
+1EE08; [66 A0, 05, 10]
+1EE68; [66 A0, 05, 10]
+1EE88; [66 A0, 05, 10]
+1EEA8; [66 A0, 05, 10]
+FEC3; [66 A0, 05, 18]
+FEC4; [66 A0, 05, 20]
+FEC2; [66 A0, 05, 28]
+FEC1; [66 A0, 05, 30]
+FCB8; [66 A0, 05, 18][66 4A, 05, 18]
+FC26; [66 A0, 05, 30][66 4A, 05, 30]
+FD33; [66 A0, 05, 18][66 CA, 05, 18]
+FD3A; [66 A0, 05, 20][66 CA, 05, 20]
+FC27; [66 A0, 05, 30][66 CA, 05, 30]
+FD72; [66 A0, 05, 18][66 CA, 05, 18][66 4A, 05, 18]
+FD71; [66 A0, 05, 28][66 CA, 05, 28][66 4A, 05, 28]
+FD73; [66 A0, 05, 18][66 CA, 05, 18][66 CA, 05, 18]
+FD74; [66 A0, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FD11; [66 A0, 05, 28][66 EE, 05, 26]
+FCF5; [66 A0, 05, 30][66 EE, 05, 31]
+FD12; [66 A0, 05, 28][66 F0, 05, 2C]
+FCF6; [66 A0, 05, 30][66 F0, 05, 33]
+
+0638; [66 A2, 05, 05]
+1EE1A; [66 A2, 05, 10]
+1EE7A; [66 A2, 05, 10]
+1EE9A; [66 A2, 05, 10]
+1EEBA; [66 A2, 05, 10]
+FEC7; [66 A2, 05, 18]
+FEC8; [66 A2, 05, 20]
+FEC6; [66 A2, 05, 28]
+FEC5; [66 A2, 05, 30]
+FCB9; [66 A2, 05, 18][66 CA, 05, 18]
+FD3B; [66 A2, 05, 20][66 CA, 05, 20]
+FC28; [66 A2, 05, 30][66 CA, 05, 30]
+
+069F; [66 A4, 05, 05]
+
+08A3; [66 A6 02, 05, 05]
+
+088B; [66 A6 09, 05, 05]
+
+088C; [66 A6 10, 05, 05]
+
+0639; [66 A8, 05, 05]
+1EE0F; [66 A8, 05, 10]
+1EE2F; [66 A8, 05, 10]
+1EE4F; [66 A8, 05, 10]
+1EE6F; [66 A8, 05, 10]
+1EE8F; [66 A8, 05, 10]
+1EEAF; [66 A8, 05, 10]
+FECB; [66 A8, 05, 18]
+FECC; [66 A8, 05, 20]
+FECA; [66 A8, 05, 28]
+FEC9; [66 A8, 05, 30]
+FCBA; [66 A8, 05, 18][66 3A, 05, 18]
+FC29; [66 A8, 05, 30][66 3A, 05, 30]
+FDC4; [66 A8, 05, 18][66 3A, 05, 18][66 CA, 05, 18]
+FD75; [66 A8, 05, 28][66 3A, 05, 28][66 CA, 05, 28]
+FDF7; [66 A8, 05, 30][66 C6, 05, 30][66 F0, 05, 33][66 D8, 05, 30]
+FCBB; [66 A8, 05, 18][66 CA, 05, 18]
+FC2A; [66 A8, 05, 30][66 CA, 05, 30]
+FD77; [66 A8, 05, 18][66 CA, 05, 18][66 CA, 05, 18]
+FD76; [66 A8, 05, 28][66 CA, 05, 28][66 CA, 05, 28]
+FD78; [66 A8, 05, 28][66 CA, 05, 28][66 EE, 05, 26]
+FDB6; [66 A8, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FD13; [66 A8, 05, 28][66 EE, 05, 26]
+FCF7; [66 A8, 05, 30][66 EE, 05, 31]
+FD14; [66 A8, 05, 28][66 F0, 05, 2C]
+FCF8; [66 A8, 05, 30][66 F0, 05, 33]
+
+063A; [66 AA, 05, 05]
+1EE1B; [66 AA, 05, 10]
+1EE3B; [66 AA, 05, 10]
+1EE5B; [66 AA, 05, 10]
+1EE7B; [66 AA, 05, 10]
+1EE9B; [66 AA, 05, 10]
+1EEBB; [66 AA, 05, 10]
+FECF; [66 AA, 05, 18]
+FED0; [66 AA, 05, 20]
+FECE; [66 AA, 05, 28]
+FECD; [66 AA, 05, 30]
+FCBC; [66 AA, 05, 18][66 3A, 05, 18]
+FC2B; [66 AA, 05, 30][66 3A, 05, 30]
+FCBD; [66 AA, 05, 18][66 CA, 05, 18]
+FC2C; [66 AA, 05, 30][66 CA, 05, 30]
+FD79; [66 AA, 05, 28][66 CA, 05, 28][66 CA, 05, 28]
+FD7B; [66 AA, 05, 28][66 CA, 05, 28][66 EE, 05, 26]
+FD7A; [66 AA, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FD15; [66 AA, 05, 28][66 EE, 05, 26]
+FCF9; [66 AA, 05, 30][66 EE, 05, 31]
+FD16; [66 AA, 05, 28][66 F0, 05, 2C]
+FCFA; [66 AA, 05, 30][66 F0, 05, 33]
+
+06A0; [66 AC, 05, 05]
+
+08C3; [66 AE 02, 05, 05]
+
+06FC; [66 AE 09, 05, 05]
+
+075D; [66 AE 10, 05, 05]
+
+075E; [66 AE 17, 05, 05]
+
+075F; [66 AE 1E, 05, 05]
+
+08B3; [66 AE 25, 05, 05]
+
+0641; [66 B0, 05, 05]
+1EE10; [66 B0, 05, 10]
+1EE30; [66 B0, 05, 10]
+1EE70; [66 B0, 05, 10]
+1EE90; [66 B0, 05, 10]
+1EEB0; [66 B0, 05, 10]
+FED3; [66 B0, 05, 18]
+FED4; [66 B0, 05, 20]
+FED2; [66 B0, 05, 28]
+FED1; [66 B0, 05, 30]
+FCBE; [66 B0, 05, 18][66 3A, 05, 18]
+FC2D; [66 B0, 05, 30][66 3A, 05, 30]
+FCBF; [66 B0, 05, 18][66 4A, 05, 18]
+FC2E; [66 B0, 05, 30][66 4A, 05, 30]
+FCC0; [66 B0, 05, 18][66 4C, 05, 18]
+FC2F; [66 B0, 05, 30][66 4C, 05, 30]
+FD7D; [66 B0, 05, 18][66 4C, 05, 18][66 CA, 05, 18]
+FD7C; [66 B0, 05, 28][66 4C, 05, 28][66 CA, 05, 28]
+FCC1; [66 B0, 05, 18][66 CA, 05, 18]
+FC30; [66 B0, 05, 30][66 CA, 05, 30]
+FDC1; [66 B0, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FC7C; [66 B0, 05, 28][66 EE, 05, 26]
+FC31; [66 B0, 05, 30][66 EE, 05, 31]
+FC7D; [66 B0, 05, 28][66 F0, 05, 2C]
+FC32; [66 B0, 05, 30][66 F0, 05, 33]
+
+06A1; [66 B2 02, 05, 05]
+1EE1E; [66 B2 02, 05, 20]
+1EE7E; [66 B2 02, 05, 20]
+
+06A2; [66 B2 09, 05, 05]
+
+08BB; [66 B2 10, 05, 05]
+
+06A3; [66 B2 17, 05, 05]
+
+06A4; [66 B2 1E, 05, 05]
+FB6C; [66 B2 1E, 05, 10]
+FB6D; [66 B2 1E, 05, 1B]
+FB6B; [66 B2 1E, 05, 26]
+FB6A; [66 B2 1E, 05, 31]
+
+08A4; [66 B2 25, 05, 05]
+
+06A5; [66 B2 2C, 05, 05]
+
+06A6; [66 B2 33, 05, 05]
+FB70; [66 B2 33, 05, 10]
+FB71; [66 B2 33, 05, 1B]
+FB6F; [66 B2 33, 05, 26]
+FB6E; [66 B2 33, 05, 31]
+
+0760; [66 B2 3A, 05, 05]
+
+0761; [66 B2 41, 05, 05]
+
+066F; [66 B2 48, 05, 05]
+1EE1F; [66 B2 48, 05, 20]
+1EE5F; [66 B2 48, 05, 20]
+
+0642; [66 B4, 05, 05]
+1EE12; [66 B4, 05, 10]
+1EE32; [66 B4, 05, 10]
+1EE52; [66 B4, 05, 10]
+1EE72; [66 B4, 05, 10]
+1EE92; [66 B4, 05, 10]
+1EEB2; [66 B4, 05, 10]
+FED7; [66 B4, 05, 18]
+FED8; [66 B4, 05, 20]
+FED6; [66 B4, 05, 28]
+FED5; [66 B4, 05, 30]
+FCC2; [66 B4, 05, 18][66 4A, 05, 18]
+FC33; [66 B4, 05, 30][66 4A, 05, 30]
+FDF1; [66 B4, 05, 30][66 C6, 05, 30][66 FC, 05, 2E]
+FCC3; [66 B4, 05, 18][66 CA, 05, 18]
+FC34; [66 B4, 05, 30][66 CA, 05, 30]
+FDB4; [66 B4, 05, 18][66 CA, 05, 18][66 4A, 05, 18]
+FD7E; [66 B4, 05, 28][66 CA, 05, 28][66 4A, 05, 28]
+FD7F; [66 B4, 05, 28][66 CA, 05, 28][66 CA, 05, 28]
+FDB2; [66 B4, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FC7E; [66 B4, 05, 28][66 EE, 05, 26]
+FC35; [66 B4, 05, 30][66 EE, 05, 31]
+FC7F; [66 B4, 05, 28][66 F0, 05, 2C]
+FC36; [66 B4, 05, 30][66 F0, 05, 33]
+
+06A7; [66 B6 02, 05, 05]
+
+08BC; [66 B6 09, 05, 05]
+
+06A8; [66 B6 10, 05, 05]
+
+08C4; [66 B6 17, 05, 05]
+
+08A5; [66 B6 1E, 05, 05]
+
+08B5; [66 B6 25, 05, 05]
+
+0643; [66 B8, 05, 05]
+1EE0A; [66 B8, 05, 10]
+1EE2A; [66 B8, 05, 10]
+1EE6A; [66 B8, 05, 10]
+FEDB; [66 B8, 05, 18]
+FEDC; [66 B8, 05, 20]
+FEDA; [66 B8, 05, 28]
+FED9; [66 B8, 05, 30]
+FC80; [66 B8, 05, 28][66 1A, 05, 26]
+FC37; [66 B8, 05, 30][66 1A, 05, 31]
+FCC4; [66 B8, 05, 18][66 3A, 05, 18]
+FC38; [66 B8, 05, 30][66 3A, 05, 30]
+FCC5; [66 B8, 05, 18][66 4A, 05, 18]
+FC39; [66 B8, 05, 30][66 4A, 05, 30]
+FCC6; [66 B8, 05, 18][66 4C, 05, 18]
+FC3A; [66 B8, 05, 30][66 4C, 05, 30]
+FCC7; [66 B8, 05, 18][66 C6, 05, 18]
+FCEB; [66 B8, 05, 20][66 C6, 05, 20]
+FC81; [66 B8, 05, 28][66 C6, 05, 28]
+FC3B; [66 B8, 05, 30][66 C6, 05, 30]
+FCC8; [66 B8, 05, 18][66 CA, 05, 18]
+FCEC; [66 B8, 05, 20][66 CA, 05, 20]
+FC82; [66 B8, 05, 28][66 CA, 05, 28]
+FC3C; [66 B8, 05, 30][66 CA, 05, 30]
+FDC3; [66 B8, 05, 18][66 CA, 05, 18][66 CA, 05, 18]
+FDBB; [66 B8, 05, 28][66 CA, 05, 28][66 CA, 05, 28]
+FDB7; [66 B8, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FC83; [66 B8, 05, 28][66 EE, 05, 26]
+FC3D; [66 B8, 05, 30][66 EE, 05, 31]
+FC84; [66 B8, 05, 28][66 F0, 05, 2C]
+FC3E; [66 B8, 05, 30][66 F0, 05, 33]
+
+06A9; [66 BA, 05, 05]
+FB90; [66 BA, 05, 10]
+FB91; [66 BA, 05, 1B]
+FB8F; [66 BA, 05, 26]
+FB8E; [66 BA, 05, 31]
+
+06AA; [66 BC, 05, 05]
+
+06AB; [66 BE, 05, 05]
+
+06AC; [66 C0 02, 05, 05]
+
+077F; [66 C0 09, 05, 05]
+
+06AD; [66 C0 10, 05, 05]
+FBD5; [66 C0 10, 05, 10]
+FBD6; [66 C0 10, 05, 1B]
+FBD4; [66 C0 10, 05, 26]
+FBD3; [66 C0 10, 05, 31]
+
+06AE; [66 C0 17, 05, 05]
+
+08B4; [66 C0 1E, 05, 05]
+
+06AF; [66 C2, 05, 05]
+FB94; [66 C2, 05, 10]
+FB95; [66 C2, 05, 1B]
+FB93; [66 C2, 05, 26]
+FB92; [66 C2, 05, 31]
+
+08B0; [66 C4 02, 05, 05]
+
+08C8; [66 C4 09, 05, 05]
+
+06B0; [66 C4 10, 05, 05]
+
+06B1; [66 C4 17, 05, 05]
+FB9C; [66 C4 17, 05, 10]
+FB9D; [66 C4 17, 05, 1B]
+FB9B; [66 C4 17, 05, 26]
+FB9A; [66 C4 17, 05, 31]
+
+06B2; [66 C4 1E, 05, 05]
+
+06B3; [66 C4 25, 05, 05]
+FB98; [66 C4 25, 05, 10]
+FB99; [66 C4 25, 05, 1B]
+FB97; [66 C4 25, 05, 26]
+FB96; [66 C4 25, 05, 31]
+
+06B4; [66 C4 2C, 05, 05]
+
+0762; [66 C4 33, 05, 05]
+
+063B; [66 C4 3A, 05, 05]
+
+088D; [66 C4 41, 05, 05]
+
+063C; [66 C4 48, 05, 05]
+
+0763; [66 C4 4F, 05, 05]
+
+0764; [66 C4 56, 05, 05]
+
+08C2; [66 C4 5D, 05, 05]
+
+0644; [66 C6, 05, 05]
+1EE0B; [66 C6, 05, 10]
+1EE2B; [66 C6, 05, 10]
+1EE4B; [66 C6, 05, 10]
+1EE8B; [66 C6, 05, 10]
+1EEAB; [66 C6, 05, 10]
+FEDF; [66 C6, 05, 18]
+FEE0; [66 C6, 05, 20]
+FEDE; [66 C6, 05, 28]
+FEDD; [66 C6, 05, 30]
+FEF6; [66 C6, 05, 28][66 08, 05, 20]
+FEF5; [66 C6, 05, 30][66 08, 05, 2E]
+FEF8; [66 C6, 05, 28][66 0A, 05, 20]
+FEF7; [66 C6, 05, 30][66 0A, 05, 2E]
+FEFA; [66 C6, 05, 28][66 12, 05, 20]
+FEF9; [66 C6, 05, 30][66 12, 05, 2E]
+FEFC; [66 C6, 05, 28][66 1A, 05, 26]
+FEFB; [66 C6, 05, 30][66 1A, 05, 31]
+FCC9; [66 C6, 05, 18][66 3A, 05, 18]
+FC3F; [66 C6, 05, 30][66 3A, 05, 30]
+FD83; [66 C6, 05, 18][66 3A, 05, 18][66 3A, 05, 18]
+FD84; [66 C6, 05, 28][66 3A, 05, 28][66 3A, 05, 28]
+FDBA; [66 C6, 05, 18][66 3A, 05, 18][66 CA, 05, 18]
+FDBC; [66 C6, 05, 28][66 3A, 05, 28][66 CA, 05, 28]
+FDAC; [66 C6, 05, 28][66 3A, 05, 28][66 F0, 05, 2C]
+FCCA; [66 C6, 05, 18][66 4A, 05, 18]
+FC40; [66 C6, 05, 30][66 4A, 05, 30]
+FDB5; [66 C6, 05, 18][66 4A, 05, 18][66 CA, 05, 18]
+FD80; [66 C6, 05, 28][66 4A, 05, 28][66 CA, 05, 28]
+FD82; [66 C6, 05, 28][66 4A, 05, 28][66 EE, 05, 26]
+FD81; [66 C6, 05, 28][66 4A, 05, 28][66 F0, 05, 2C]
+FCCB; [66 C6, 05, 18][66 4C, 05, 18]
+FC41; [66 C6, 05, 30][66 4C, 05, 30]
+FD86; [66 C6, 05, 18][66 4C, 05, 18][66 CA, 05, 18]
+FD85; [66 C6, 05, 28][66 4C, 05, 28][66 CA, 05, 28]
+FCCC; [66 C6, 05, 18][66 CA, 05, 18]
+FCED; [66 C6, 05, 20][66 CA, 05, 20]
+FC85; [66 C6, 05, 28][66 CA, 05, 28]
+FC42; [66 C6, 05, 30][66 CA, 05, 30]
+FD88; [66 C6, 05, 18][66 CA, 05, 18][66 4A, 05, 18]
+FD87; [66 C6, 05, 28][66 CA, 05, 28][66 4A, 05, 28]
+FDAD; [66 C6, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FCCD; [66 C6, 05, 18][66 D8, 05, 18]
+FC86; [66 C6, 05, 28][66 EE, 05, 26]
+FC43; [66 C6, 05, 30][66 EE, 05, 31]
+FC87; [66 C6, 05, 28][66 F0, 05, 2C]
+FC44; [66 C6, 05, 30][66 F0, 05, 33]
+
+06B5; [66 C8 02, 05, 05]
+
+06B6; [66 C8 09, 05, 05]
+
+06B7; [66 C8 10, 05, 05]
+
+06B8; [66 C8 17, 05, 05]
+
+076A; [66 C8 1E, 05, 05]
+
+08A6; [66 C8 25, 05, 05]
+
+08C7; [66 C8 2C, 05, 05]
+
+0645; [66 CA, 05, 05]
+1EE0C; [66 CA, 05, 10]
+1EE2C; [66 CA, 05, 10]
+1EE6C; [66 CA, 05, 10]
+1EE8C; [66 CA, 05, 10]
+1EEAC; [66 CA, 05, 10]
+FEE3; [66 CA, 05, 18]
+FEE4; [66 CA, 05, 20]
+FEE2; [66 CA, 05, 28]
+FEE1; [66 CA, 05, 30]
+06FE; [66 CA, 70, 05]
+FC88; [66 CA, 05, 28][66 1A, 05, 26]
+FCCE; [66 CA, 05, 18][66 3A, 05, 18]
+FC45; [66 CA, 05, 30][66 3A, 05, 30]
+FD8C; [66 CA, 05, 18][66 3A, 05, 18][66 4A, 05, 18]
+FD92; [66 CA, 05, 18][66 3A, 05, 18][66 4C, 05, 18]
+FD8D; [66 CA, 05, 18][66 3A, 05, 18][66 CA, 05, 18]
+FDC0; [66 CA, 05, 28][66 3A, 05, 28][66 F0, 05, 2C]
+FCCF; [66 CA, 05, 18][66 4A, 05, 18]
+FC46; [66 CA, 05, 30][66 4A, 05, 30]
+FD89; [66 CA, 05, 18][66 4A, 05, 18][66 3A, 05, 18]
+FD8A; [66 CA, 05, 18][66 4A, 05, 18][66 CA, 05, 18]
+FDF4; [66 CA, 05, 30][66 4A, 05, 30][66 CA, 05, 30][66 56, 05, 2C]
+FD8B; [66 CA, 05, 28][66 4A, 05, 28][66 F0, 05, 2C]
+FCD0; [66 CA, 05, 18][66 4C, 05, 18]
+FC47; [66 CA, 05, 30][66 4C, 05, 30]
+FD8E; [66 CA, 05, 18][66 4C, 05, 18][66 3A, 05, 18]
+FD8F; [66 CA, 05, 18][66 4C, 05, 18][66 CA, 05, 18]
+FDB9; [66 CA, 05, 28][66 4C, 05, 28][66 F0, 05, 2C]
+FCD1; [66 CA, 05, 18][66 CA, 05, 18]
+FC89; [66 CA, 05, 28][66 CA, 05, 28]
+FC48; [66 CA, 05, 30][66 CA, 05, 30]
+FDB1; [66 CA, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FC49; [66 CA, 05, 30][66 EE, 05, 31]
+FC4A; [66 CA, 05, 30][66 F0, 05, 33]
+
+0765; [66 CC 02, 05, 05]
+
+0766; [66 CC 09, 05, 05]
+
+08A7; [66 CC 10, 05, 05]
+
+0646; [66 CE, 05, 05]
+1EE0D; [66 CE, 05, 10]
+1EE2D; [66 CE, 05, 10]
+1EE4D; [66 CE, 05, 10]
+1EE6D; [66 CE, 05, 10]
+1EE8D; [66 CE, 05, 10]
+1EEAD; [66 CE, 05, 10]
+FEE7; [66 CE, 05, 18]
+FEE8; [66 CE, 05, 20]
+FEE6; [66 CE, 05, 28]
+FEE5; [66 CE, 05, 30]
+FCD2; [66 CE, 05, 18][66 3A, 05, 18]
+FC4B; [66 CE, 05, 30][66 3A, 05, 30]
+FDB8; [66 CE, 05, 18][66 3A, 05, 18][66 4A, 05, 18]
+FDBD; [66 CE, 05, 28][66 3A, 05, 28][66 4A, 05, 28]
+FD98; [66 CE, 05, 18][66 3A, 05, 18][66 CA, 05, 18]
+FD97; [66 CE, 05, 28][66 3A, 05, 28][66 CA, 05, 28]
+FD99; [66 CE, 05, 28][66 3A, 05, 28][66 EE, 05, 26]
+FDC7; [66 CE, 05, 28][66 3A, 05, 28][66 F0, 05, 2C]
+FCD3; [66 CE, 05, 18][66 4A, 05, 18]
+FC4C; [66 CE, 05, 30][66 4A, 05, 30]
+FD95; [66 CE, 05, 18][66 4A, 05, 18][66 CA, 05, 18]
+FD96; [66 CE, 05, 28][66 4A, 05, 28][66 EE, 05, 26]
+FDB3; [66 CE, 05, 28][66 4A, 05, 28][66 F0, 05, 2C]
+FCD4; [66 CE, 05, 18][66 4C, 05, 18]
+FC4D; [66 CE, 05, 30][66 4C, 05, 30]
+FC8A; [66 CE, 05, 28][66 70, 05, 1E]
+FC8B; [66 CE, 05, 28][66 72, 05, 1E]
+FCD5; [66 CE, 05, 18][66 CA, 05, 18]
+FCEE; [66 CE, 05, 20][66 CA, 05, 20]
+FC8C; [66 CE, 05, 28][66 CA, 05, 28]
+FC4E; [66 CE, 05, 30][66 CA, 05, 30]
+FD9B; [66 CE, 05, 28][66 CA, 05, 28][66 EE, 05, 26]
+FD9A; [66 CE, 05, 28][66 CA, 05, 28][66 F0, 05, 2C]
+FC8D; [66 CE, 05, 28][66 CE, 05, 28]
+FCD6; [66 CE, 05, 18][66 D8, 05, 18]
+FCEF; [66 CE, 05, 20][66 D8, 05, 20]
+FC8E; [66 CE, 05, 28][66 EE, 05, 26]
+FC4F; [66 CE, 05, 30][66 EE, 05, 31]
+FC8F; [66 CE, 05, 28][66 F0, 05, 2C]
+FC50; [66 CE, 05, 30][66 F0, 05, 33]
+
+06BA; [66 D0, 05, 05]
+1EE1D; [66 D0, 05, 10]
+1EE5D; [66 D0, 05, 10]
+FB9F; [66 D0, 05, 1E]
+FB9E; [66 D0, 05, 2C]
+
+08BD; [66 D2 02, 05, 05]
+
+06BB; [66 D2 09, 05, 05]
+FBA2; [66 D2 09, 05, 10]
+FBA3; [66 D2 09, 05, 1B]
+FBA1; [66 D2 09, 05, 26]
+FBA0; [66 D2 09, 05, 31]
+
+06BC; [66 D4, 05, 05]
+
+06BD; [66 D6 02, 05, 05]
+
+06B9; [66 D6 09, 05, 05]
+
+0767; [66 D6 10, 05, 05]
+
+0768; [66 D6 17, 05, 05]
+
+0769; [66 D6 1E, 05, 05]
+
+0889; [66 D6 25, 05, 05]
+
+0647; [66 D8, 05, 05]
+1EE24; [66 D8, 05, 10]
+1EE64; [66 D8, 05, 10]
+1EE84; [66 D8, 05, 10]
+FEEB; [66 D8, 05, 18]
+FEEC; [66 D8, 05, 20]
+FEEA; [66 D8, 05, 28]
+FEE9; [66 D8, 05, 30]
+FCD9; [66 D8, 05, 18][, EB 3B, 10]
+FCD7; [66 D8, 05, 18][66 3A, 05, 18]
+FC51; [66 D8, 05, 30][66 3A, 05, 30]
+FCD8; [66 D8, 05, 18][66 CA, 05, 18]
+FC52; [66 D8, 05, 30][66 CA, 05, 30]
+FD93; [66 D8, 05, 18][66 CA, 05, 18][66 3A, 05, 18]
+FD94; [66 D8, 05, 18][66 CA, 05, 18][66 CA, 05, 18]
+FC53; [66 D8, 05, 30][66 EE, 05, 31]
+FC54; [66 D8, 05, 30][66 F0, 05, 33]
+
+06BE; [66 DA, 05, 05]
+FBAC; [66 DA, 05, 10]
+FBAD; [66 DA, 05, 1B]
+FBAB; [66 DA, 05, 26]
+FBAA; [66 DA, 05, 31]
+
+06C1; [66 DC, 05, 05]
+FBA8; [66 DC, 05, 10]
+FBA9; [66 DC, 05, 1B]
+FBA7; [66 DC, 05, 26]
+FBA6; [66 DC, 05, 31]
+06C2; [66 DC, 05, 05][, E8 80, 05]
+
+06C3; [66 DE 02, 05, 05]
+
+06FF; [66 DE 09, 05, 05]
+
+06D5; [66 DE 10, 05, 05]
+06C0; [66 DE 10, 05, 05][, E8 80, 05]
+FBA5; [66 DE 10, 05, 20][, E8 80, 20]
+FBA4; [66 DE 10, 05, 2E][, E8 80, 2E]
+
+0648; [66 E0, 05, 05]
+06E5; [66 E0, 05, 10]
+0884; [66 E0, 05, 10]
+1EE05; [66 E0, 05, 1B]
+1EE85; [66 E0, 05, 1B]
+1EEA5; [66 E0, 05, 1B]
+FEEE; [66 E0, 05, 26]
+FEED; [66 E0, 05, 31]
+FDF8; [66 E0, 05, 31][66 88, 05, 30][66 C6, 05, 30][66 CA, 05, 30]
+
+06C4; [66 E2, 05, 05]
+
+06C5; [66 E4 02, 05, 05]
+FBE1; [66 E4 02, 05, 20]
+FBE0; [66 E4 02, 05, 2E]
+
+06C6; [66 E4 09, 05, 05]
+FBDA; [66 E4 09, 05, 20]
+FBD9; [66 E4 09, 05, 2E]
+
+06C7; [66 E6, 05, 05]
+FBD8; [66 E6, 05, 1E]
+FBD7; [66 E6, 05, 2C]
+
+06C8; [66 E8, 05, 05]
+FBDC; [66 E8, 05, 20]
+FBDB; [66 E8, 05, 2E]
+
+06C9; [66 EA, 05, 05]
+FBE3; [66 EA, 05, 20]
+FBE2; [66 EA, 05, 2E]
+
+06CA; [66 EC 02, 05, 05]
+
+06CB; [66 EC 09, 05, 05]
+FBDF; [66 EC 09, 05, 20]
+FBDE; [66 EC 09, 05, 2E]
+
+08B1; [66 EC 10, 05, 05]
+
+06CF; [66 EC 17, 05, 05]
+
+0778; [66 EC 1E, 05, 05]
+
+0779; [66 EC 25, 05, 05]
+
+08AB; [66 EC 2C, 05, 05]
+
+0649; [66 EE, 05, 05]
+FBE8; [66 EE, 05, 10]
+FBE9; [66 EE, 05, 1B]
+FEF0; [66 EE, 05, 26]
+FEEF; [66 EE, 05, 31]
+FC90; [66 EE, 05, 26][, EB 3B, 1E]
+FC5D; [66 EE, 05, 31][, EB 3B, 2C]
+
+064A; [66 F0, 05, 05]
+06E6; [66 F0, 05, 10]
+0885; [66 F0, 05, 10]
+0886; [66 F0, 05, 10]
+1EE09; [66 F0, 05, 17]
+1EE29; [66 F0, 05, 17]
+1EE49; [66 F0, 05, 17]
+1EE69; [66 F0, 05, 17]
+1EE89; [66 F0, 05, 17]
+1EEA9; [66 F0, 05, 17]
+FEF3; [66 F0, 05, 1E]
+FEF4; [66 F0, 05, 25]
+FEF2; [66 F0, 05, 2C]
+FEF1; [66 F0, 05, 33]
+FCDA; [66 F0, 05, 1E][66 3A, 05, 18]
+FC55; [66 F0, 05, 33][66 3A, 05, 30]
+FDAF; [66 F0, 05, 2C][66 3A, 05, 28][66 F0, 05, 2C]
+FCDB; [66 F0, 05, 1E][66 4A, 05, 18]
+FC56; [66 F0, 05, 33][66 4A, 05, 30]
+FDAE; [66 F0, 05, 2C][66 4A, 05, 28][66 F0, 05, 2C]
+FCDC; [66 F0, 05, 1E][66 4C, 05, 18]
+FC57; [66 F0, 05, 33][66 4C, 05, 30]
+FC91; [66 F0, 05, 2C][66 70, 05, 1E]
+FC92; [66 F0, 05, 2C][66 72, 05, 1E]
+FCDD; [66 F0, 05, 1E][66 CA, 05, 18]
+FCF0; [66 F0, 05, 25][66 CA, 05, 20]
+FC93; [66 F0, 05, 2C][66 CA, 05, 28]
+FC58; [66 F0, 05, 33][66 CA, 05, 30]
+FD9D; [66 F0, 05, 1E][66 CA, 05, 18][66 CA, 05, 18]
+FD9C; [66 F0, 05, 2C][66 CA, 05, 28][66 CA, 05, 28]
+FDB0; [66 F0, 05, 2C][66 CA, 05, 28][66 F0, 05, 2C]
+FC94; [66 F0, 05, 2C][66 CE, 05, 28]
+FCDE; [66 F0, 05, 1E][66 D8, 05, 18]
+FCF1; [66 F0, 05, 25][66 D8, 05, 20]
+FC95; [66 F0, 05, 2C][66 EE, 05, 26]
+FC59; [66 F0, 05, 33][66 EE, 05, 31]
+FC96; [66 F0, 05, 2C][66 F0, 05, 2C]
+FC5A; [66 F0, 05, 33][66 F0, 05, 33]
+
+06CC; [66 F2, 05, 05]
+08C9; [66 F2, 05, 10]
+FBFE; [66 F2, 05, 18]
+FBFF; [66 F2, 05, 20]
+FBFD; [66 F2, 05, 28]
+FBFC; [66 F2, 05, 30]
+
+06CD; [66 F4, 05, 05]
+
+06CE; [66 F6, 05, 05]
+
+06D0; [66 F8, 05, 05]
+FBE6; [66 F8, 05, 10]
+FBE7; [66 F8, 05, 1B]
+FBE5; [66 F8, 05, 26]
+FBE4; [66 F8, 05, 31]
+
+06D1; [66 FA 02, 05, 05]
+
+063D; [66 FA 09, 05, 05]
+
+063E; [66 FA 10, 05, 05]
+
+063F; [66 FA 17, 05, 05]
+
+0620; [66 FA 1E, 05, 05]
+
+0775; [66 FA 25, 05, 05]
+
+0776; [66 FA 2C, 05, 05]
+
+0777; [66 FA 33, 05, 05]
+
+08BA; [66 FA 3A, 05, 05]
+
+06D2; [66 FC, 05, 05]
+FBAF; [66 FC, 05, 20]
+FBAE; [66 FC, 05, 2E]
+06D3; [66 FC, 05, 05][, E8 80, 05]
+FBB1; [66 FC, 05, 20][, E8 80, 20]
+FBB0; [66 FC, 05, 2E][, E8 80, 2E]
+
+077A; [66 FE 02, 05, 05]
+
+077B; [66 FE 09, 05, 05]
+
+088E; [66 FE 10, 05, 05]
FDD1 0710; [67 04 02, 05, 05] # SYRIAC first primary starts new lead byte (compressible)
@@ -25761,843 +26476,899 @@ FDD1 12A0; [67 8F 02, 05, 05] # ETHIOPIC first primary (compressible)
1380; [67 8F F0, 05, 05]
-1381; [67 8F F7, 05, 05]
+1E7ED; [67 8F F7, 05, 05]
+
+1381; [67 8F FE, 05, 05]
+
+1E7EE; [67 90 07, 05, 05]
+
+1382; [67 90 0E, 05, 05]
+
+1383; [67 90 15, 05, 05]
+
+2D81; [67 90 1C, 05, 05]
+
+1220; [67 90 23, 05, 05]
+
+1221; [67 90 2A, 05, 05]
-1382; [67 8F FE, 05, 05]
+1222; [67 90 31, 05, 05]
-1383; [67 90 07, 05, 05]
+1223; [67 90 38, 05, 05]
-2D81; [67 90 0E, 05, 05]
+1224; [67 90 3F, 05, 05]
-1220; [67 90 15, 05, 05]
+1225; [67 90 46, 05, 05]
-1221; [67 90 1C, 05, 05]
+1226; [67 90 4D, 05, 05]
-1222; [67 90 23, 05, 05]
+1227; [67 90 54, 05, 05]
-1223; [67 90 2A, 05, 05]
+1228; [67 90 5B, 05, 05]
-1224; [67 90 31, 05, 05]
+1229; [67 90 62, 05, 05]
-1225; [67 90 38, 05, 05]
+122A; [67 90 69, 05, 05]
-1226; [67 90 3F, 05, 05]
+122B; [67 90 70, 05, 05]
-1227; [67 90 46, 05, 05]
+122C; [67 90 77, 05, 05]
-1228; [67 90 4D, 05, 05]
+122D; [67 90 7E, 05, 05]
-1229; [67 90 54, 05, 05]
+122E; [67 90 85, 05, 05]
-122A; [67 90 5B, 05, 05]
+122F; [67 90 8C, 05, 05]
-122B; [67 90 62, 05, 05]
+2D82; [67 90 93, 05, 05]
-122C; [67 90 69, 05, 05]
+1230; [67 90 9A, 05, 05]
-122D; [67 90 70, 05, 05]
+1231; [67 90 A1, 05, 05]
-122E; [67 90 77, 05, 05]
+1232; [67 90 A8, 05, 05]
-122F; [67 90 7E, 05, 05]
+1233; [67 90 AF, 05, 05]
-2D82; [67 90 85, 05, 05]
+1234; [67 90 B6, 05, 05]
-1230; [67 90 8C, 05, 05]
+1235; [67 90 BD, 05, 05]
-1231; [67 90 93, 05, 05]
+1236; [67 90 C4, 05, 05]
-1232; [67 90 9A, 05, 05]
+1237; [67 90 CB, 05, 05]
-1233; [67 90 A1, 05, 05]
+2D83; [67 90 D2, 05, 05]
-1234; [67 90 A8, 05, 05]
+AB01; [67 90 D9, 05, 05]
-1235; [67 90 AF, 05, 05]
+AB02; [67 90 E0, 05, 05]
-1236; [67 90 B6, 05, 05]
+AB03; [67 90 E7, 05, 05]
-1237; [67 90 BD, 05, 05]
+AB04; [67 90 EE, 05, 05]
-2D83; [67 90 C4, 05, 05]
+AB05; [67 90 F5, 05, 05]
-AB01; [67 90 CB, 05, 05]
+AB06; [67 90 FC, 05, 05]
-AB02; [67 90 D2, 05, 05]
+1238; [67 91 05, 05, 05]
-AB03; [67 90 D9, 05, 05]
+1239; [67 91 0C, 05, 05]
-AB04; [67 90 E0, 05, 05]
+123A; [67 91 13, 05, 05]
-AB05; [67 90 E7, 05, 05]
+123B; [67 91 1A, 05, 05]
-AB06; [67 90 EE, 05, 05]
+123C; [67 91 21, 05, 05]
-1238; [67 90 F5, 05, 05]
+123D; [67 91 28, 05, 05]
-1239; [67 90 FC, 05, 05]
+123E; [67 91 2F, 05, 05]
-123A; [67 91 05, 05, 05]
+123F; [67 91 36, 05, 05]
-123B; [67 91 0C, 05, 05]
+2D84; [67 91 3D, 05, 05]
-123C; [67 91 13, 05, 05]
+1240; [67 91 44, 05, 05]
-123D; [67 91 1A, 05, 05]
+1241; [67 91 4B, 05, 05]
-123E; [67 91 21, 05, 05]
+1242; [67 91 52, 05, 05]
-123F; [67 91 28, 05, 05]
+1243; [67 91 59, 05, 05]
-2D84; [67 91 2F, 05, 05]
+1244; [67 91 60, 05, 05]
-1240; [67 91 36, 05, 05]
+1245; [67 91 67, 05, 05]
-1241; [67 91 3D, 05, 05]
+1246; [67 91 6E, 05, 05]
-1242; [67 91 44, 05, 05]
+1247; [67 91 75, 05, 05]
-1243; [67 91 4B, 05, 05]
+1248; [67 91 7C, 05, 05]
-1244; [67 91 52, 05, 05]
+1E7F0; [67 91 83, 05, 05]
-1245; [67 91 59, 05, 05]
+124A; [67 91 8A, 05, 05]
-1246; [67 91 60, 05, 05]
+124B; [67 91 91, 05, 05]
-1247; [67 91 67, 05, 05]
+1E7F1; [67 91 98, 05, 05]
-1248; [67 91 6E, 05, 05]
+124C; [67 91 9F, 05, 05]
-124A; [67 91 75, 05, 05]
+1E7F2; [67 91 A6, 05, 05]
-124B; [67 91 7C, 05, 05]
+124D; [67 91 AD, 05, 05]
-124C; [67 91 83, 05, 05]
+1250; [67 91 B4, 05, 05]
-124D; [67 91 8A, 05, 05]
+1251; [67 91 BB, 05, 05]
-1250; [67 91 91, 05, 05]
+1252; [67 91 C2, 05, 05]
-1251; [67 91 98, 05, 05]
+1253; [67 91 C9, 05, 05]
-1252; [67 91 9F, 05, 05]
+1254; [67 91 D0, 05, 05]
-1253; [67 91 A6, 05, 05]
+1255; [67 91 D7, 05, 05]
-1254; [67 91 AD, 05, 05]
+1256; [67 91 DE, 05, 05]
-1255; [67 91 B4, 05, 05]
+1258; [67 91 E5, 05, 05]
-1256; [67 91 BB, 05, 05]
+125A; [67 91 EC, 05, 05]
-1258; [67 91 C2, 05, 05]
+125B; [67 91 F3, 05, 05]
-125A; [67 91 C9, 05, 05]
+125C; [67 91 FA, 05, 05]
-125B; [67 91 D0, 05, 05]
+125D; [67 92 03, 05, 05]
-125C; [67 91 D7, 05, 05]
+1260; [67 92 0A, 05, 05]
-125D; [67 91 DE, 05, 05]
+1261; [67 92 11, 05, 05]
-1260; [67 91 E5, 05, 05]
+1262; [67 92 18, 05, 05]
-1261; [67 91 EC, 05, 05]
+1263; [67 92 1F, 05, 05]
-1262; [67 91 F3, 05, 05]
+1264; [67 92 26, 05, 05]
-1263; [67 91 FA, 05, 05]
+1265; [67 92 2D, 05, 05]
-1264; [67 92 03, 05, 05]
+1266; [67 92 34, 05, 05]
-1265; [67 92 0A, 05, 05]
+1267; [67 92 3B, 05, 05]
-1266; [67 92 11, 05, 05]
+1384; [67 92 42, 05, 05]
-1267; [67 92 18, 05, 05]
+1E7F3; [67 92 49, 05, 05]
-1384; [67 92 1F, 05, 05]
+1385; [67 92 50, 05, 05]
-1385; [67 92 26, 05, 05]
+1E7F4; [67 92 57, 05, 05]
-1386; [67 92 2D, 05, 05]
+1386; [67 92 5E, 05, 05]
-1387; [67 92 34, 05, 05]
+1387; [67 92 65, 05, 05]
-2D85; [67 92 3B, 05, 05]
+2D85; [67 92 6C, 05, 05]
-1268; [67 92 42, 05, 05]
+1268; [67 92 73, 05, 05]
-1269; [67 92 49, 05, 05]
+1269; [67 92 7A, 05, 05]
-126A; [67 92 50, 05, 05]
+126A; [67 92 81, 05, 05]
-126B; [67 92 57, 05, 05]
+126B; [67 92 88, 05, 05]
-126C; [67 92 5E, 05, 05]
+126C; [67 92 8F, 05, 05]
-126D; [67 92 65, 05, 05]
+126D; [67 92 96, 05, 05]
-126E; [67 92 6C, 05, 05]
+126E; [67 92 9D, 05, 05]
-126F; [67 92 73, 05, 05]
+126F; [67 92 A4, 05, 05]
-1270; [67 92 7A, 05, 05]
+1270; [67 92 AB, 05, 05]
-1271; [67 92 81, 05, 05]
+1271; [67 92 B2, 05, 05]
-1272; [67 92 88, 05, 05]
+1272; [67 92 B9, 05, 05]
-1273; [67 92 8F, 05, 05]
+1273; [67 92 C0, 05, 05]
-1274; [67 92 96, 05, 05]
+1274; [67 92 C7, 05, 05]
-1275; [67 92 9D, 05, 05]
+1275; [67 92 CE, 05, 05]
-1276; [67 92 A4, 05, 05]
+1276; [67 92 D5, 05, 05]
-1277; [67 92 AB, 05, 05]
+1277; [67 92 DC, 05, 05]
-2D86; [67 92 B2, 05, 05]
+2D86; [67 92 E3, 05, 05]
-1278; [67 92 B9, 05, 05]
+1278; [67 92 EA, 05, 05]
-1279; [67 92 C0, 05, 05]
+1279; [67 92 F1, 05, 05]
-127A; [67 92 C7, 05, 05]
+127A; [67 92 F8, 05, 05]
-127B; [67 92 CE, 05, 05]
+127B; [67 92 FF, 05, 05]
-127C; [67 92 D5, 05, 05]
+127C; [67 93 08, 05, 05]
-127D; [67 92 DC, 05, 05]
+127D; [67 93 0F, 05, 05]
-127E; [67 92 E3, 05, 05]
+127E; [67 93 16, 05, 05]
-127F; [67 92 EA, 05, 05]
+127F; [67 93 1D, 05, 05]
-2D87; [67 92 F1, 05, 05]
+2D87; [67 93 24, 05, 05]
-1280; [67 92 F8, 05, 05]
+1280; [67 93 2B, 05, 05]
-1281; [67 92 FF, 05, 05]
+1281; [67 93 32, 05, 05]
-1282; [67 93 08, 05, 05]
+1282; [67 93 39, 05, 05]
-1283; [67 93 0F, 05, 05]
+1283; [67 93 40, 05, 05]
-1284; [67 93 16, 05, 05]
+1284; [67 93 47, 05, 05]
-1285; [67 93 1D, 05, 05]
+1285; [67 93 4E, 05, 05]
-1286; [67 93 24, 05, 05]
+1286; [67 93 55, 05, 05]
-1287; [67 93 2B, 05, 05]
+1287; [67 93 5C, 05, 05]
-1288; [67 93 32, 05, 05]
+1288; [67 93 63, 05, 05]
-128A; [67 93 39, 05, 05]
+128A; [67 93 6A, 05, 05]
-128B; [67 93 40, 05, 05]
+128B; [67 93 71, 05, 05]
-128C; [67 93 47, 05, 05]
+128C; [67 93 78, 05, 05]
-128D; [67 93 4E, 05, 05]
+128D; [67 93 7F, 05, 05]
-1290; [67 93 55, 05, 05]
+1290; [67 93 86, 05, 05]
-1291; [67 93 5C, 05, 05]
+1291; [67 93 8D, 05, 05]
-1292; [67 93 63, 05, 05]
+1292; [67 93 94, 05, 05]
-1293; [67 93 6A, 05, 05]
+1293; [67 93 9B, 05, 05]
-1294; [67 93 71, 05, 05]
+1294; [67 93 A2, 05, 05]
-1295; [67 93 78, 05, 05]
+1295; [67 93 A9, 05, 05]
-1296; [67 93 7F, 05, 05]
+1296; [67 93 B0, 05, 05]
-1297; [67 93 86, 05, 05]
+1297; [67 93 B7, 05, 05]
-2D88; [67 93 8D, 05, 05]
+2D88; [67 93 BE, 05, 05]
-1298; [67 93 94, 05, 05]
+1298; [67 93 C5, 05, 05]
-1299; [67 93 9B, 05, 05]
+1299; [67 93 CC, 05, 05]
-129A; [67 93 A2, 05, 05]
+129A; [67 93 D3, 05, 05]
-129B; [67 93 A9, 05, 05]
+129B; [67 93 DA, 05, 05]
-129C; [67 93 B0, 05, 05]
+129C; [67 93 E1, 05, 05]
-129D; [67 93 B7, 05, 05]
+129D; [67 93 E8, 05, 05]
-129E; [67 93 BE, 05, 05]
+129E; [67 93 EF, 05, 05]
-129F; [67 93 C5, 05, 05]
+129F; [67 93 F6, 05, 05]
-2D89; [67 93 CC, 05, 05]
+2D89; [67 93 FD, 05, 05]
-12A0; [67 93 D3, 05, 05]
+12A0; [67 94 06, 05, 05]
-12A1; [67 93 DA, 05, 05]
+12A1; [67 94 0D, 05, 05]
-12A2; [67 93 E1, 05, 05]
+12A2; [67 94 14, 05, 05]
-12A3; [67 93 E8, 05, 05]
+12A3; [67 94 1B, 05, 05]
-12A4; [67 93 EF, 05, 05]
+12A4; [67 94 22, 05, 05]
-12A5; [67 93 F6, 05, 05]
+12A5; [67 94 29, 05, 05]
-12A6; [67 93 FD, 05, 05]
+12A6; [67 94 30, 05, 05]
-12A7; [67 94 06, 05, 05]
+12A7; [67 94 37, 05, 05]
-2D8A; [67 94 0D, 05, 05]
+2D8A; [67 94 3E, 05, 05]
-12A8; [67 94 14, 05, 05]
+12A8; [67 94 45, 05, 05]
-12A9; [67 94 1B, 05, 05]
+12A9; [67 94 4C, 05, 05]
-12AA; [67 94 22, 05, 05]
+12AA; [67 94 53, 05, 05]
-12AB; [67 94 29, 05, 05]
+12AB; [67 94 5A, 05, 05]
-12AC; [67 94 30, 05, 05]
+12AC; [67 94 61, 05, 05]
-12AD; [67 94 37, 05, 05]
+12AD; [67 94 68, 05, 05]
-12AE; [67 94 3E, 05, 05]
+12AE; [67 94 6F, 05, 05]
-12AF; [67 94 45, 05, 05]
+12AF; [67 94 76, 05, 05]
-12B0; [67 94 4C, 05, 05]
+12B0; [67 94 7D, 05, 05]
-12B2; [67 94 53, 05, 05]
+1E7F5; [67 94 84, 05, 05]
-12B3; [67 94 5A, 05, 05]
+12B2; [67 94 8B, 05, 05]
-12B4; [67 94 61, 05, 05]
+12B3; [67 94 92, 05, 05]
-12B5; [67 94 68, 05, 05]
+1E7F6; [67 94 99, 05, 05]
-12B8; [67 94 6F, 05, 05]
+12B4; [67 94 A0, 05, 05]
-12B9; [67 94 76, 05, 05]
+1E7F7; [67 94 A7, 05, 05]
-12BA; [67 94 7D, 05, 05]
+12B5; [67 94 AE, 05, 05]
-12BB; [67 94 84, 05, 05]
+12B8; [67 94 B5, 05, 05]
-12BC; [67 94 8B, 05, 05]
+12B9; [67 94 BC, 05, 05]
-12BD; [67 94 92, 05, 05]
+12BA; [67 94 C3, 05, 05]
-12BE; [67 94 99, 05, 05]
+12BB; [67 94 CA, 05, 05]
-12C0; [67 94 A0, 05, 05]
+12BC; [67 94 D1, 05, 05]
-12C2; [67 94 A7, 05, 05]
+12BD; [67 94 D8, 05, 05]
-12C3; [67 94 AE, 05, 05]
+12BE; [67 94 DF, 05, 05]
-12C4; [67 94 B5, 05, 05]
+1E7E8; [67 94 E6, 05, 05]
-12C5; [67 94 BC, 05, 05]
+12C0; [67 94 ED, 05, 05]
-12C8; [67 94 C3, 05, 05]
+1E7E9; [67 94 F4, 05, 05]
-12C9; [67 94 CA, 05, 05]
+12C2; [67 94 FB, 05, 05]
-12CA; [67 94 D1, 05, 05]
+12C3; [67 95 04, 05, 05]
-12CB; [67 94 D8, 05, 05]
+1E7EA; [67 95 0B, 05, 05]
-12CC; [67 94 DF, 05, 05]
+12C4; [67 95 12, 05, 05]
-12CD; [67 94 E6, 05, 05]
+1E7EB; [67 95 19, 05, 05]
-12CE; [67 94 ED, 05, 05]
+12C5; [67 95 20, 05, 05]
-12CF; [67 94 F4, 05, 05]
+12C8; [67 95 27, 05, 05]
-12D0; [67 94 FB, 05, 05]
+12C9; [67 95 2E, 05, 05]
-12D1; [67 95 04, 05, 05]
+12CA; [67 95 35, 05, 05]
-12D2; [67 95 0B, 05, 05]
+12CB; [67 95 3C, 05, 05]
-12D3; [67 95 12, 05, 05]
+12CC; [67 95 43, 05, 05]
-12D4; [67 95 19, 05, 05]
+12CD; [67 95 4A, 05, 05]
-12D5; [67 95 20, 05, 05]
+12CE; [67 95 51, 05, 05]
-12D6; [67 95 27, 05, 05]
+12CF; [67 95 58, 05, 05]
-12D8; [67 95 2E, 05, 05]
+12D0; [67 95 5F, 05, 05]
-12D9; [67 95 35, 05, 05]
+12D1; [67 95 66, 05, 05]
-12DA; [67 95 3C, 05, 05]
+12D2; [67 95 6D, 05, 05]
-12DB; [67 95 43, 05, 05]
+12D3; [67 95 74, 05, 05]
-12DC; [67 95 4A, 05, 05]
+12D4; [67 95 7B, 05, 05]
-12DD; [67 95 51, 05, 05]
+12D5; [67 95 82, 05, 05]
-12DE; [67 95 58, 05, 05]
+12D6; [67 95 89, 05, 05]
-12DF; [67 95 5F, 05, 05]
+12D8; [67 95 90, 05, 05]
-2D8B; [67 95 66, 05, 05]
+12D9; [67 95 97, 05, 05]
-AB11; [67 95 6D, 05, 05]
+12DA; [67 95 9E, 05, 05]
-AB12; [67 95 74, 05, 05]
+12DB; [67 95 A5, 05, 05]
-AB13; [67 95 7B, 05, 05]
+12DC; [67 95 AC, 05, 05]
-AB14; [67 95 82, 05, 05]
+12DD; [67 95 B3, 05, 05]
-AB15; [67 95 89, 05, 05]
+12DE; [67 95 BA, 05, 05]
-AB16; [67 95 90, 05, 05]
+12DF; [67 95 C1, 05, 05]
-12E0; [67 95 97, 05, 05]
+2D8B; [67 95 C8, 05, 05]
-12E1; [67 95 9E, 05, 05]
+AB11; [67 95 CF, 05, 05]
-12E2; [67 95 A5, 05, 05]
+AB12; [67 95 D6, 05, 05]
-12E3; [67 95 AC, 05, 05]
+AB13; [67 95 DD, 05, 05]
-12E4; [67 95 B3, 05, 05]
+AB14; [67 95 E4, 05, 05]
-12E5; [67 95 BA, 05, 05]
+AB15; [67 95 EB, 05, 05]
-12E6; [67 95 C1, 05, 05]
+AB16; [67 95 F2, 05, 05]
-12E7; [67 95 C8, 05, 05]
+12E0; [67 95 F9, 05, 05]
-12E8; [67 95 CF, 05, 05]
+12E1; [67 96 02, 05, 05]
-12E9; [67 95 D6, 05, 05]
+12E2; [67 96 09, 05, 05]
-12EA; [67 95 DD, 05, 05]
+12E3; [67 96 10, 05, 05]
-12EB; [67 95 E4, 05, 05]
+12E4; [67 96 17, 05, 05]
-12EC; [67 95 EB, 05, 05]
+12E5; [67 96 1E, 05, 05]
-12ED; [67 95 F2, 05, 05]
+12E6; [67 96 25, 05, 05]
-12EE; [67 95 F9, 05, 05]
+12E7; [67 96 2C, 05, 05]
-12EF; [67 96 02, 05, 05]
+12E8; [67 96 33, 05, 05]
-12F0; [67 96 09, 05, 05]
+12E9; [67 96 3A, 05, 05]
-12F1; [67 96 10, 05, 05]
+12EA; [67 96 41, 05, 05]
-12F2; [67 96 17, 05, 05]
+12EB; [67 96 48, 05, 05]
-12F3; [67 96 1E, 05, 05]
+12EC; [67 96 4F, 05, 05]
-12F4; [67 96 25, 05, 05]
+12ED; [67 96 56, 05, 05]
-12F5; [67 96 2C, 05, 05]
+12EE; [67 96 5D, 05, 05]
-12F6; [67 96 33, 05, 05]
+12EF; [67 96 64, 05, 05]
-12F7; [67 96 3A, 05, 05]
+12F0; [67 96 6B, 05, 05]
-2D8C; [67 96 41, 05, 05]
+12F1; [67 96 72, 05, 05]
-AB09; [67 96 48, 05, 05]
+12F2; [67 96 79, 05, 05]
-AB0A; [67 96 4F, 05, 05]
+12F3; [67 96 80, 05, 05]
-AB0B; [67 96 56, 05, 05]
+12F4; [67 96 87, 05, 05]
-AB0C; [67 96 5D, 05, 05]
+12F5; [67 96 8E, 05, 05]
-AB0D; [67 96 64, 05, 05]
+12F6; [67 96 95, 05, 05]
-AB0E; [67 96 6B, 05, 05]
+12F7; [67 96 9C, 05, 05]
-12F8; [67 96 72, 05, 05]
+2D8C; [67 96 A3, 05, 05]
-12F9; [67 96 79, 05, 05]
+AB09; [67 96 AA, 05, 05]
-12FA; [67 96 80, 05, 05]
+AB0A; [67 96 B1, 05, 05]
-12FB; [67 96 87, 05, 05]
+AB0B; [67 96 B8, 05, 05]
-12FC; [67 96 8E, 05, 05]
+AB0C; [67 96 BF, 05, 05]
-12FD; [67 96 95, 05, 05]
+AB0D; [67 96 C6, 05, 05]
-12FE; [67 96 9C, 05, 05]
+AB0E; [67 96 CD, 05, 05]
-12FF; [67 96 A3, 05, 05]
+12F8; [67 96 D4, 05, 05]
-2D8D; [67 96 AA, 05, 05]
+12F9; [67 96 DB, 05, 05]
-1300; [67 96 B1, 05, 05]
+12FA; [67 96 E2, 05, 05]
-1301; [67 96 B8, 05, 05]
+12FB; [67 96 E9, 05, 05]
-1302; [67 96 BF, 05, 05]
+12FC; [67 96 F0, 05, 05]
-1303; [67 96 C6, 05, 05]
+12FD; [67 96 F7, 05, 05]
-1304; [67 96 CD, 05, 05]
+12FE; [67 96 FE, 05, 05]
-1305; [67 96 D4, 05, 05]
+12FF; [67 97 07, 05, 05]
-1306; [67 96 DB, 05, 05]
+2D8D; [67 97 0E, 05, 05]
-1307; [67 96 E2, 05, 05]
+1300; [67 97 15, 05, 05]
-2D8E; [67 96 E9, 05, 05]
+1301; [67 97 1C, 05, 05]
-1308; [67 96 F0, 05, 05]
+1302; [67 97 23, 05, 05]
-1309; [67 96 F7, 05, 05]
+1303; [67 97 2A, 05, 05]
-130A; [67 96 FE, 05, 05]
+1304; [67 97 31, 05, 05]
-130B; [67 97 07, 05, 05]
+1305; [67 97 38, 05, 05]
-130C; [67 97 0E, 05, 05]
+1306; [67 97 3F, 05, 05]
-130D; [67 97 15, 05, 05]
+1307; [67 97 46, 05, 05]
-130E; [67 97 1C, 05, 05]
+2D8E; [67 97 4D, 05, 05]
-130F; [67 97 23, 05, 05]
+1308; [67 97 54, 05, 05]
-1310; [67 97 2A, 05, 05]
+1309; [67 97 5B, 05, 05]
-1312; [67 97 31, 05, 05]
+130A; [67 97 62, 05, 05]
-1313; [67 97 38, 05, 05]
+130B; [67 97 69, 05, 05]
-1314; [67 97 3F, 05, 05]
+130C; [67 97 70, 05, 05]
-1315; [67 97 46, 05, 05]
+130D; [67 97 77, 05, 05]
-1318; [67 97 4D, 05, 05]
+130E; [67 97 7E, 05, 05]
-1319; [67 97 54, 05, 05]
+130F; [67 97 85, 05, 05]
-131A; [67 97 5B, 05, 05]
+1310; [67 97 8C, 05, 05]
-131B; [67 97 62, 05, 05]
+1E7F8; [67 97 93, 05, 05]
-131C; [67 97 69, 05, 05]
+1312; [67 97 9A, 05, 05]
-131D; [67 97 70, 05, 05]
+1313; [67 97 A1, 05, 05]
-131E; [67 97 77, 05, 05]
+1E7F9; [67 97 A8, 05, 05]
-131F; [67 97 7E, 05, 05]
+1314; [67 97 AF, 05, 05]
-2D93; [67 97 85, 05, 05]
+1E7FA; [67 97 B6, 05, 05]
-2D94; [67 97 8C, 05, 05]
+1315; [67 97 BD, 05, 05]
-2D95; [67 97 93, 05, 05]
+1318; [67 97 C4, 05, 05]
-2D96; [67 97 9A, 05, 05]
+1319; [67 97 CB, 05, 05]
-1320; [67 97 A1, 05, 05]
+131A; [67 97 D2, 05, 05]
-1321; [67 97 A8, 05, 05]
+131B; [67 97 D9, 05, 05]
-1322; [67 97 AF, 05, 05]
+131C; [67 97 E0, 05, 05]
-1323; [67 97 B6, 05, 05]
+131D; [67 97 E7, 05, 05]
-1324; [67 97 BD, 05, 05]
+131E; [67 97 EE, 05, 05]
-1325; [67 97 C4, 05, 05]
+131F; [67 97 F5, 05, 05]
-1326; [67 97 CB, 05, 05]
+2D93; [67 97 FC, 05, 05]
-1327; [67 97 D2, 05, 05]
+2D94; [67 98 05, 05, 05]
-2D8F; [67 97 D9, 05, 05]
+2D95; [67 98 0C, 05, 05]
-1328; [67 97 E0, 05, 05]
+2D96; [67 98 13, 05, 05]
-1329; [67 97 E7, 05, 05]
+1320; [67 98 1A, 05, 05]
-132A; [67 97 EE, 05, 05]
+1321; [67 98 21, 05, 05]
-132B; [67 97 F5, 05, 05]
+1322; [67 98 28, 05, 05]
-132C; [67 97 FC, 05, 05]
+1323; [67 98 2F, 05, 05]
-132D; [67 98 05, 05, 05]
+1324; [67 98 36, 05, 05]
-132E; [67 98 0C, 05, 05]
+1325; [67 98 3D, 05, 05]
-132F; [67 98 13, 05, 05]
+1326; [67 98 44, 05, 05]
-2D90; [67 98 1A, 05, 05]
+1327; [67 98 4B, 05, 05]
-AB20; [67 98 21, 05, 05]
+2D8F; [67 98 52, 05, 05]
-AB21; [67 98 28, 05, 05]
+1328; [67 98 59, 05, 05]
-AB22; [67 98 2F, 05, 05]
+1329; [67 98 60, 05, 05]
-AB23; [67 98 36, 05, 05]
+132A; [67 98 67, 05, 05]
-AB24; [67 98 3D, 05, 05]
+132B; [67 98 6E, 05, 05]
-AB25; [67 98 44, 05, 05]
+132C; [67 98 75, 05, 05]
-AB26; [67 98 4B, 05, 05]
+132D; [67 98 7C, 05, 05]
-1330; [67 98 52, 05, 05]
+132E; [67 98 83, 05, 05]
-1331; [67 98 59, 05, 05]
+132F; [67 98 8A, 05, 05]
-1332; [67 98 60, 05, 05]
+2D90; [67 98 91, 05, 05]
-1333; [67 98 67, 05, 05]
+AB20; [67 98 98, 05, 05]
-1334; [67 98 6E, 05, 05]
+AB21; [67 98 9F, 05, 05]
-1335; [67 98 75, 05, 05]
+AB22; [67 98 A6, 05, 05]
-1336; [67 98 7C, 05, 05]
+AB23; [67 98 AD, 05, 05]
-1337; [67 98 83, 05, 05]
+AB24; [67 98 B4, 05, 05]
-2D91; [67 98 8A, 05, 05]
+AB25; [67 98 BB, 05, 05]
-1338; [67 98 91, 05, 05]
+AB26; [67 98 C2, 05, 05]
-1339; [67 98 98, 05, 05]
+1330; [67 98 C9, 05, 05]
-133A; [67 98 9F, 05, 05]
+1331; [67 98 D0, 05, 05]
-133B; [67 98 A6, 05, 05]
+1332; [67 98 D7, 05, 05]
-133C; [67 98 AD, 05, 05]
+1333; [67 98 DE, 05, 05]
-133D; [67 98 B4, 05, 05]
+1334; [67 98 E5, 05, 05]
-133E; [67 98 BB, 05, 05]
+1335; [67 98 EC, 05, 05]
-133F; [67 98 C2, 05, 05]
+1336; [67 98 F3, 05, 05]
-AB28; [67 98 C9, 05, 05]
+1337; [67 98 FA, 05, 05]
-AB29; [67 98 D0, 05, 05]
+2D91; [67 99 03, 05, 05]
-AB2A; [67 98 D7, 05, 05]
+1338; [67 99 0A, 05, 05]
-AB2B; [67 98 DE, 05, 05]
+1339; [67 99 11, 05, 05]
-AB2C; [67 98 E5, 05, 05]
+133A; [67 99 18, 05, 05]
-AB2D; [67 98 EC, 05, 05]
+133B; [67 99 1F, 05, 05]
-AB2E; [67 98 F3, 05, 05]
+133C; [67 99 26, 05, 05]
-1340; [67 98 FA, 05, 05]
+133D; [67 99 2D, 05, 05]
-1341; [67 99 03, 05, 05]
+133E; [67 99 34, 05, 05]
-1342; [67 99 0A, 05, 05]
+133F; [67 99 3B, 05, 05]
-1343; [67 99 11, 05, 05]
+AB28; [67 99 42, 05, 05]
-1344; [67 99 18, 05, 05]
+AB29; [67 99 49, 05, 05]
-1345; [67 99 1F, 05, 05]
+AB2A; [67 99 50, 05, 05]
-1346; [67 99 26, 05, 05]
+AB2B; [67 99 57, 05, 05]
-1347; [67 99 2D, 05, 05]
+AB2C; [67 99 5E, 05, 05]
-1348; [67 99 34, 05, 05]
+AB2D; [67 99 65, 05, 05]
-1349; [67 99 3B, 05, 05]
+AB2E; [67 99 6C, 05, 05]
-134A; [67 99 42, 05, 05]
+1340; [67 99 73, 05, 05]
-134B; [67 99 49, 05, 05]
+1341; [67 99 7A, 05, 05]
-134C; [67 99 50, 05, 05]
+1342; [67 99 81, 05, 05]
-134D; [67 99 57, 05, 05]
+1343; [67 99 88, 05, 05]
-134E; [67 99 5E, 05, 05]
+1344; [67 99 8F, 05, 05]
-134F; [67 99 65, 05, 05]
+1345; [67 99 96, 05, 05]
-1388; [67 99 6C, 05, 05]
+1346; [67 99 9D, 05, 05]
-1389; [67 99 73, 05, 05]
+1347; [67 99 A4, 05, 05]
-138A; [67 99 7A, 05, 05]
+1348; [67 99 AB, 05, 05]
-138B; [67 99 81, 05, 05]
+1349; [67 99 B2, 05, 05]
-1350; [67 99 88, 05, 05]
+134A; [67 99 B9, 05, 05]
-1351; [67 99 8F, 05, 05]
+134B; [67 99 C0, 05, 05]
-1352; [67 99 96, 05, 05]
+134C; [67 99 C7, 05, 05]
-1353; [67 99 9D, 05, 05]
+134D; [67 99 CE, 05, 05]
-1354; [67 99 A4, 05, 05]
+134E; [67 99 D5, 05, 05]
-1355; [67 99 AB, 05, 05]
+134F; [67 99 DC, 05, 05]
-1356; [67 99 B2, 05, 05]
+1388; [67 99 E3, 05, 05]
-1357; [67 99 B9, 05, 05]
+1E7FB; [67 99 EA, 05, 05]
-138C; [67 99 C0, 05, 05]
+1389; [67 99 F1, 05, 05]
-138D; [67 99 C7, 05, 05]
+1E7FC; [67 99 F8, 05, 05]
-138E; [67 99 CE, 05, 05]
+138A; [67 99 FF, 05, 05]
-138F; [67 99 D5, 05, 05]
+138B; [67 9A 08, 05, 05]
-2D92; [67 99 DC, 05, 05]
+1350; [67 9A 0F, 05, 05]
-1358; [67 99 E3, 05, 05]
+1351; [67 9A 16, 05, 05]
-1359; [67 99 EA, 05, 05]
+1352; [67 9A 1D, 05, 05]
-135A; [67 99 F1, 05, 05]
+1353; [67 9A 24, 05, 05]
-2DA0; [67 99 F8, 05, 05]
+1354; [67 9A 2B, 05, 05]
-2DA1; [67 99 FF, 05, 05]
+1355; [67 9A 32, 05, 05]
-2DA2; [67 9A 08, 05, 05]
+1356; [67 9A 39, 05, 05]
-2DA3; [67 9A 0F, 05, 05]
+1357; [67 9A 40, 05, 05]
-2DA4; [67 9A 16, 05, 05]
+138C; [67 9A 47, 05, 05]
-2DA5; [67 9A 1D, 05, 05]
+1E7FD; [67 9A 4E, 05, 05]
-2DA6; [67 9A 24, 05, 05]
+138D; [67 9A 55, 05, 05]
-2DA8; [67 9A 2B, 05, 05]
+1E7FE; [67 9A 5C, 05, 05]
-2DA9; [67 9A 32, 05, 05]
+138E; [67 9A 63, 05, 05]
-2DAA; [67 9A 39, 05, 05]
+138F; [67 9A 6A, 05, 05]
-2DAB; [67 9A 40, 05, 05]
+2D92; [67 9A 71, 05, 05]
-2DAC; [67 9A 47, 05, 05]
+1358; [67 9A 78, 05, 05]
-2DAD; [67 9A 4E, 05, 05]
+1359; [67 9A 7F, 05, 05]
-2DAE; [67 9A 55, 05, 05]
+135A; [67 9A 86, 05, 05]
-2DB0; [67 9A 5C, 05, 05]
+2DA0; [67 9A 8D, 05, 05]
-2DB1; [67 9A 63, 05, 05]
+2DA1; [67 9A 94, 05, 05]
-2DB2; [67 9A 6A, 05, 05]
+2DA2; [67 9A 9B, 05, 05]
-2DB3; [67 9A 71, 05, 05]
+2DA3; [67 9A A2, 05, 05]
-2DB4; [67 9A 78, 05, 05]
+2DA4; [67 9A A9, 05, 05]
-2DB5; [67 9A 7F, 05, 05]
+2DA5; [67 9A B0, 05, 05]
-2DB6; [67 9A 86, 05, 05]
+2DA6; [67 9A B7, 05, 05]
-2DB8; [67 9A 8D, 05, 05]
+2DA8; [67 9A BE, 05, 05]
-2DB9; [67 9A 94, 05, 05]
+2DA9; [67 9A C5, 05, 05]
-2DBA; [67 9A 9B, 05, 05]
+2DAA; [67 9A CC, 05, 05]
-2DBB; [67 9A A2, 05, 05]
+2DAB; [67 9A D3, 05, 05]
-2DBC; [67 9A A9, 05, 05]
+2DAC; [67 9A DA, 05, 05]
-2DBD; [67 9A B0, 05, 05]
+2DAD; [67 9A E1, 05, 05]
-2DBE; [67 9A B7, 05, 05]
+2DAE; [67 9A E8, 05, 05]
-2DC0; [67 9A BE, 05, 05]
+2DB0; [67 9A EF, 05, 05]
-2DC1; [67 9A C5, 05, 05]
+2DB1; [67 9A F6, 05, 05]
-2DC2; [67 9A CC, 05, 05]
+2DB2; [67 9A FD, 05, 05]
-2DC3; [67 9A D3, 05, 05]
+2DB3; [67 9B 06, 05, 05]
-2DC4; [67 9A DA, 05, 05]
+2DB4; [67 9B 0D, 05, 05]
-2DC5; [67 9A E1, 05, 05]
+2DB5; [67 9B 14, 05, 05]
-2DC6; [67 9A E8, 05, 05]
+2DB6; [67 9B 1B, 05, 05]
-2DC8; [67 9A EF, 05, 05]
+2DB8; [67 9B 22, 05, 05]
-2DC9; [67 9A F6, 05, 05]
+2DB9; [67 9B 29, 05, 05]
-2DCA; [67 9A FD, 05, 05]
+2DBA; [67 9B 30, 05, 05]
-2DCB; [67 9B 06, 05, 05]
+2DBB; [67 9B 37, 05, 05]
-2DCC; [67 9B 0D, 05, 05]
+2DBC; [67 9B 3E, 05, 05]
-2DCD; [67 9B 14, 05, 05]
+2DBD; [67 9B 45, 05, 05]
-2DCE; [67 9B 1B, 05, 05]
+2DBE; [67 9B 4C, 05, 05]
-2DD0; [67 9B 22, 05, 05]
+2DC0; [67 9B 53, 05, 05]
-2DD1; [67 9B 29, 05, 05]
+2DC1; [67 9B 5A, 05, 05]
-2DD2; [67 9B 30, 05, 05]
+2DC2; [67 9B 61, 05, 05]
-2DD3; [67 9B 37, 05, 05]
+2DC3; [67 9B 68, 05, 05]
-2DD4; [67 9B 3E, 05, 05]
+2DC4; [67 9B 6F, 05, 05]
-2DD5; [67 9B 45, 05, 05]
+2DC5; [67 9B 76, 05, 05]
-2DD6; [67 9B 4C, 05, 05]
+2DC6; [67 9B 7D, 05, 05]
-2DD8; [67 9B 53, 05, 05]
+2DC8; [67 9B 84, 05, 05]
-2DD9; [67 9B 5A, 05, 05]
+2DC9; [67 9B 8B, 05, 05]
-2DDA; [67 9B 61, 05, 05]
+2DCA; [67 9B 92, 05, 05]
-2DDB; [67 9B 68, 05, 05]
+2DCB; [67 9B 99, 05, 05]
-2DDC; [67 9B 6F, 05, 05]
+2DCC; [67 9B A0, 05, 05]
-2DDD; [67 9B 76, 05, 05]
+2DCD; [67 9B A7, 05, 05]
-2DDE; [67 9B 7D, 05, 05]
+2DCE; [67 9B AE, 05, 05]
+
+1E7E0; [67 9B B5, 05, 05]
+
+2DD0; [67 9B BC, 05, 05]
+
+1E7E1; [67 9B C3, 05, 05]
+
+2DD1; [67 9B CA, 05, 05]
+
+1E7E2; [67 9B D1, 05, 05]
+
+2DD2; [67 9B D8, 05, 05]
+
+1E7E3; [67 9B DF, 05, 05]
+
+2DD3; [67 9B E6, 05, 05]
+
+1E7E4; [67 9B ED, 05, 05]
+
+2DD4; [67 9B F4, 05, 05]
+
+1E7E5; [67 9B FB, 05, 05]
+
+2DD5; [67 9C 04, 05, 05]
+
+1E7E6; [67 9C 0B, 05, 05]
+
+2DD6; [67 9C 12, 05, 05]
+
+2DD8; [67 9C 19, 05, 05]
+
+2DD9; [67 9C 20, 05, 05]
+
+2DDA; [67 9C 27, 05, 05]
+
+2DDB; [67 9C 2E, 05, 05]
+
+2DDC; [67 9C 35, 05, 05]
+
+2DDD; [67 9C 3C, 05, 05]
+
+2DDE; [67 9C 43, 05, 05]
FDD1 0905; [68 04 02, 05, 05] # DEVANAGARI first primary starts new lead byte (compressible)
@@ -27555,6 +28326,7 @@ FDD1 0C15; [6E 04 02, 05, 05] # TELUGU first primary starts new lead byte (compr
0C27; [6E 4E, 05, 05]
0C28; [6E 50, 05, 05]
+0C5D; [6E 50, 05, 20][6E 94, 05, 20]
0C2A; [6E 52, 05, 05]
@@ -27702,6 +28474,7 @@ FDD1 0C95; [6F 04 02, 05, 05] # KANNADA first primary starts new lead byte (comp
0CA7; [6F 4A, 05, 05]
0CA8; [6F 4C, 05, 05]
+0CDD; [6F 4C, 05, 20][6F 94, 05, 20]
0CAA; [6F 4E, 05, 05]
@@ -28556,15 +29329,17 @@ FDD1 11083; [71 A6 02, 05, 05] # Kaithi first primary (compressible)
110B4; [71 A7 4D, 05, 05]
-110B5; [71 A7 54, 05, 05]
+110C2; [71 A7 54, 05, 05]
-110B6; [71 A7 5B, 05, 05]
+110B5; [71 A7 5B, 05, 05]
-110B7; [71 A7 62, 05, 05]
+110B6; [71 A7 62, 05, 05]
-110B8; [71 A7 69, 05, 05]
+110B7; [71 A7 69, 05, 05]
-110B9; [71 A7 70, 05, 05]
+110B8; [71 A7 70, 05, 05]
+
+110B9; [71 A7 77, 05, 05]
FDD1 11152; [71 A8 02, 05, 05] # Mahajani first primary (compressible)
@@ -30281,35 +31056,49 @@ FDD1 11717; [71 D3 02, 05, 05] # Ahom first primary (compressible)
11719; [71 DF 10, 05, 05]
-11720; [71 DF 17, 05, 05]
+11740; [71 DF 17, 05, 05]
+
+11741; [71 DF 1E, 05, 05]
+
+11742; [71 DF 25, 05, 05]
+
+11743; [71 DF 2C, 05, 05]
+
+11744; [71 DF 33, 05, 05]
+
+11745; [71 DF 3A, 05, 05]
-11721; [71 DF 1E, 05, 05]
+11746; [71 DF 41, 05, 05]
-11722; [71 DF 25, 05, 05]
+11720; [71 DF 48, 05, 05]
-11723; [71 DF 2C, 05, 05]
+11721; [71 DF 4F, 05, 05]
-11724; [71 DF 33, 05, 05]
+11722; [71 DF 56, 05, 05]
-11725; [71 DF 3A, 05, 05]
+11723; [71 DF 5D, 05, 05]
-11726; [71 DF 41, 05, 05]
+11724; [71 DF 64, 05, 05]
-11727; [71 DF 48, 05, 05]
+11725; [71 DF 6B, 05, 05]
-11728; [71 DF 4F, 05, 05]
+11726; [71 DF 72, 05, 05]
-11729; [71 DF 56, 05, 05]
+11727; [71 DF 79, 05, 05]
-1172A; [71 DF 5D, 05, 05]
+11728; [71 DF 80, 05, 05]
-1172B; [71 DF 64, 05, 05]
+11729; [71 DF 87, 05, 05]
-1171D; [71 DF 6B, 05, 05]
+1172A; [71 DF 8E, 05, 05]
-1171E; [71 DF 72, 05, 05]
+1172B; [71 DF 95, 05, 05]
-1171F; [71 DF 79, 05, 05]
+1171D; [71 DF 9C, 05, 05]
+
+1171E; [71 DF A3, 05, 05]
+
+1171F; [71 DF AA, 05, 05]
FDD1 11D10; [71 E0 02, 05, 05] # Masaram_Gondi first primary (compressible)
@@ -30660,335 +31449,347 @@ FDD1 11005; [71 F4 02, 05, 05] # Brahmi first primary (compressible)
1100E; [71 F4 48, 05, 05]
-1100F; [71 F4 4F, 05, 05]
+11071; [71 F4 4F, 05, 05]
+
+1100F; [71 F4 56, 05, 05]
+
+11010; [71 F4 5D, 05, 05]
+
+11072; [71 F4 64, 05, 05]
+
+11011; [71 F4 6B, 05, 05]
+
+11012; [71 F4 72, 05, 05]
+
+11013; [71 F4 79, 05, 05]
-11010; [71 F4 56, 05, 05]
+11014; [71 F4 80, 05, 05]
-11011; [71 F4 5D, 05, 05]
+11015; [71 F4 87, 05, 05]
-11012; [71 F4 64, 05, 05]
+11016; [71 F4 8E, 05, 05]
-11013; [71 F4 6B, 05, 05]
+11017; [71 F4 95, 05, 05]
-11014; [71 F4 72, 05, 05]
+11018; [71 F4 9C, 05, 05]
-11015; [71 F4 79, 05, 05]
+11019; [71 F4 A3, 05, 05]
-11016; [71 F4 80, 05, 05]
+1101A; [71 F4 AA, 05, 05]
-11017; [71 F4 87, 05, 05]
+1101B; [71 F4 B1, 05, 05]
-11018; [71 F4 8E, 05, 05]
+1101C; [71 F4 B8, 05, 05]
-11019; [71 F4 95, 05, 05]
+1101D; [71 F4 BF, 05, 05]
-1101A; [71 F4 9C, 05, 05]
+1101E; [71 F4 C6, 05, 05]
-1101B; [71 F4 A3, 05, 05]
+1101F; [71 F4 CD, 05, 05]
-1101C; [71 F4 AA, 05, 05]
+11020; [71 F4 D4, 05, 05]
-1101D; [71 F4 B1, 05, 05]
+11021; [71 F4 DB, 05, 05]
-1101E; [71 F4 B8, 05, 05]
+11022; [71 F4 E2, 05, 05]
-1101F; [71 F4 BF, 05, 05]
+11023; [71 F4 E9, 05, 05]
-11020; [71 F4 C6, 05, 05]
+11024; [71 F4 F0, 05, 05]
-11021; [71 F4 CD, 05, 05]
+11025; [71 F4 F7, 05, 05]
-11022; [71 F4 D4, 05, 05]
+11026; [71 F4 FE, 05, 05]
-11023; [71 F4 DB, 05, 05]
+11027; [71 F5 07, 05, 05]
-11024; [71 F4 E2, 05, 05]
+11028; [71 F5 0E, 05, 05]
-11025; [71 F4 E9, 05, 05]
+11029; [71 F5 15, 05, 05]
-11026; [71 F4 F0, 05, 05]
+1102A; [71 F5 1C, 05, 05]
-11027; [71 F4 F7, 05, 05]
+1102B; [71 F5 23, 05, 05]
-11028; [71 F4 FE, 05, 05]
+1102C; [71 F5 2A, 05, 05]
-11029; [71 F5 07, 05, 05]
+1102D; [71 F5 31, 05, 05]
-1102A; [71 F5 0E, 05, 05]
+1102E; [71 F5 38, 05, 05]
-1102B; [71 F5 15, 05, 05]
+1102F; [71 F5 3F, 05, 05]
-1102C; [71 F5 1C, 05, 05]
+11030; [71 F5 46, 05, 05]
-1102D; [71 F5 23, 05, 05]
+11031; [71 F5 4D, 05, 05]
-1102E; [71 F5 2A, 05, 05]
+11032; [71 F5 54, 05, 05]
-1102F; [71 F5 31, 05, 05]
+11033; [71 F5 5B, 05, 05]
-11030; [71 F5 38, 05, 05]
+11003; [71 F5 62, 05, 05]
-11031; [71 F5 3F, 05, 05]
+11004; [71 F5 69, 05, 05]
-11032; [71 F5 46, 05, 05]
+11034; [71 F5 70, 05, 05]
-11033; [71 F5 4D, 05, 05]
+11035; [71 F5 77, 05, 05]
-11003; [71 F5 54, 05, 05]
+11075; [71 F5 7E, 05, 05]
-11004; [71 F5 5B, 05, 05]
+11036; [71 F5 85, 05, 05]
-11034; [71 F5 62, 05, 05]
+11037; [71 F5 8C, 05, 05]
-11035; [71 F5 69, 05, 05]
+11038; [71 F5 93, 05, 05]
-11036; [71 F5 70, 05, 05]
+11039; [71 F5 9A, 05, 05]
-11037; [71 F5 77, 05, 05]
+1103A; [71 F5 A1, 05, 05]
-11038; [71 F5 7E, 05, 05]
+1103B; [71 F5 A8, 05, 05]
-11039; [71 F5 85, 05, 05]
+1103C; [71 F5 AF, 05, 05]
-1103A; [71 F5 8C, 05, 05]
+1103D; [71 F5 B6, 05, 05]
-1103B; [71 F5 93, 05, 05]
+1103E; [71 F5 BD, 05, 05]
-1103C; [71 F5 9A, 05, 05]
+1103F; [71 F5 C4, 05, 05]
-1103D; [71 F5 A1, 05, 05]
+11040; [71 F5 CB, 05, 05]
-1103E; [71 F5 A8, 05, 05]
+11041; [71 F5 D2, 05, 05]
-1103F; [71 F5 AF, 05, 05]
+11073; [71 F5 D9, 05, 05]
-11040; [71 F5 B6, 05, 05]
+11042; [71 F5 E0, 05, 05]
-11041; [71 F5 BD, 05, 05]
+11043; [71 F5 E7, 05, 05]
-11042; [71 F5 C4, 05, 05]
+11074; [71 F5 EE, 05, 05]
-11043; [71 F5 CB, 05, 05]
+11044; [71 F5 F5, 05, 05]
-11044; [71 F5 D2, 05, 05]
+11045; [71 F5 FC, 05, 05]
-11045; [71 F5 D9, 05, 05]
+11046; [71 F6 05, 05, 05]
-11046; [71 F5 E0, 05, 05]
+1107F; [71 F6 0C, 05, 05]
-1107F; [71 F5 E7, 05, 05]
+11070; [71 F6 13, 05, 05]
-FDD1 10A00; [71 F6 02, 05, 05] # KHAROSHTHI first primary (compressible)
+FDD1 10A00; [71 F7 02, 05, 05] # KHAROSHTHI first primary (compressible)
-10A00; [71 F6 09, 05, 05]
+10A00; [71 F7 09, 05, 05]
-10A01; [71 F6 10, 05, 05]
+10A01; [71 F7 10, 05, 05]
-10A02; [71 F6 17, 05, 05]
+10A02; [71 F7 17, 05, 05]
-10A03; [71 F6 1E, 05, 05]
+10A03; [71 F7 1E, 05, 05]
-10A05; [71 F6 25, 05, 05]
+10A05; [71 F7 25, 05, 05]
-10A06; [71 F6 2C, 05, 05]
+10A06; [71 F7 2C, 05, 05]
-10A0C; [71 F6 33, 05, 05]
+10A0C; [71 F7 33, 05, 05]
-10A10; [71 F6 3A, 05, 05]
+10A10; [71 F7 3A, 05, 05]
-10A32; [71 F6 41, 05, 05]
+10A32; [71 F7 41, 05, 05]
-10A11; [71 F6 48, 05, 05]
+10A11; [71 F7 48, 05, 05]
-10A12; [71 F6 4F, 05, 05]
+10A12; [71 F7 4F, 05, 05]
-10A13; [71 F6 56, 05, 05]
+10A13; [71 F7 56, 05, 05]
-10A15; [71 F6 5D, 05, 05]
+10A15; [71 F7 5D, 05, 05]
-10A16; [71 F6 64, 05, 05]
+10A16; [71 F7 64, 05, 05]
-10A17; [71 F6 6B, 05, 05]
+10A17; [71 F7 6B, 05, 05]
-10A19; [71 F6 72, 05, 05]
+10A19; [71 F7 72, 05, 05]
-10A1A; [71 F6 79, 05, 05]
+10A1A; [71 F7 79, 05, 05]
-10A34; [71 F6 80, 05, 05]
+10A34; [71 F7 80, 05, 05]
-10A1B; [71 F6 87, 05, 05]
+10A1B; [71 F7 87, 05, 05]
-10A33; [71 F6 8E, 05, 05]
+10A33; [71 F7 8E, 05, 05]
-10A1C; [71 F6 95, 05, 05]
+10A1C; [71 F7 95, 05, 05]
-10A1D; [71 F6 9C, 05, 05]
+10A1D; [71 F7 9C, 05, 05]
-10A1E; [71 F6 A3, 05, 05]
+10A1E; [71 F7 A3, 05, 05]
-10A1F; [71 F6 AA, 05, 05]
+10A1F; [71 F7 AA, 05, 05]
-10A20; [71 F6 B1, 05, 05]
+10A20; [71 F7 B1, 05, 05]
-10A21; [71 F6 B8, 05, 05]
+10A21; [71 F7 B8, 05, 05]
-10A22; [71 F6 BF, 05, 05]
+10A22; [71 F7 BF, 05, 05]
-10A23; [71 F6 C6, 05, 05]
+10A23; [71 F7 C6, 05, 05]
-10A24; [71 F6 CD, 05, 05]
+10A24; [71 F7 CD, 05, 05]
-10A25; [71 F6 D4, 05, 05]
+10A25; [71 F7 D4, 05, 05]
-10A26; [71 F6 DB, 05, 05]
+10A26; [71 F7 DB, 05, 05]
-10A27; [71 F6 E2, 05, 05]
+10A27; [71 F7 E2, 05, 05]
-10A28; [71 F6 E9, 05, 05]
+10A28; [71 F7 E9, 05, 05]
-10A29; [71 F6 F0, 05, 05]
+10A29; [71 F7 F0, 05, 05]
-10A2A; [71 F6 F7, 05, 05]
+10A2A; [71 F7 F7, 05, 05]
-10A2B; [71 F6 FE, 05, 05]
+10A2B; [71 F7 FE, 05, 05]
-10A2C; [71 F7 07, 05, 05]
+10A2C; [71 F8 07, 05, 05]
-10A35; [71 F7 0E, 05, 05]
+10A35; [71 F8 0E, 05, 05]
-10A2D; [71 F7 15, 05, 05]
+10A2D; [71 F8 15, 05, 05]
-10A2E; [71 F7 1C, 05, 05]
+10A2E; [71 F8 1C, 05, 05]
-10A2F; [71 F7 23, 05, 05]
+10A2F; [71 F8 23, 05, 05]
-10A30; [71 F7 2A, 05, 05]
+10A30; [71 F8 2A, 05, 05]
-10A31; [71 F7 31, 05, 05]
+10A31; [71 F8 31, 05, 05]
-10A3F; [71 F7 38, 05, 05]
+10A3F; [71 F8 38, 05, 05]
-FDD1 11C0E; [71 F8 02, 05, 05] # Bhaiksuki first primary (compressible)
+FDD1 11C0E; [71 F9 02, 05, 05] # Bhaiksuki first primary (compressible)
-11C00; [71 F8 09, 05, 05]
+11C00; [71 F9 09, 05, 05]
-11C01; [71 F8 10, 05, 05]
+11C01; [71 F9 10, 05, 05]
-11C02; [71 F8 17, 05, 05]
+11C02; [71 F9 17, 05, 05]
-11C03; [71 F8 1E, 05, 05]
+11C03; [71 F9 1E, 05, 05]
-11C04; [71 F8 25, 05, 05]
+11C04; [71 F9 25, 05, 05]
-11C05; [71 F8 2C, 05, 05]
+11C05; [71 F9 2C, 05, 05]
-11C06; [71 F8 33, 05, 05]
+11C06; [71 F9 33, 05, 05]
-11C07; [71 F8 3A, 05, 05]
+11C07; [71 F9 3A, 05, 05]
-11C08; [71 F8 41, 05, 05]
+11C08; [71 F9 41, 05, 05]
-11C0A; [71 F8 48, 05, 05]
+11C0A; [71 F9 48, 05, 05]
-11C0B; [71 F8 4F, 05, 05]
+11C0B; [71 F9 4F, 05, 05]
-11C0C; [71 F8 56, 05, 05]
+11C0C; [71 F9 56, 05, 05]
-11C0D; [71 F8 5D, 05, 05]
+11C0D; [71 F9 5D, 05, 05]
-11C0E; [71 F8 64, 05, 05]
+11C0E; [71 F9 64, 05, 05]
-11C0F; [71 F8 6B, 05, 05]
+11C0F; [71 F9 6B, 05, 05]
-11C10; [71 F8 72, 05, 05]
+11C10; [71 F9 72, 05, 05]
-11C11; [71 F8 79, 05, 05]
+11C11; [71 F9 79, 05, 05]
-11C12; [71 F8 80, 05, 05]
+11C12; [71 F9 80, 05, 05]
-11C13; [71 F8 87, 05, 05]
+11C13; [71 F9 87, 05, 05]
-11C14; [71 F8 8E, 05, 05]
+11C14; [71 F9 8E, 05, 05]
-11C15; [71 F8 95, 05, 05]
+11C15; [71 F9 95, 05, 05]
-11C16; [71 F8 9C, 05, 05]
+11C16; [71 F9 9C, 05, 05]
-11C17; [71 F8 A3, 05, 05]
+11C17; [71 F9 A3, 05, 05]
-11C18; [71 F8 AA, 05, 05]
+11C18; [71 F9 AA, 05, 05]
-11C19; [71 F8 B1, 05, 05]
+11C19; [71 F9 B1, 05, 05]
-11C1A; [71 F8 B8, 05, 05]
+11C1A; [71 F9 B8, 05, 05]
-11C1B; [71 F8 BF, 05, 05]
+11C1B; [71 F9 BF, 05, 05]
-11C1C; [71 F8 C6, 05, 05]
+11C1C; [71 F9 C6, 05, 05]
-11C1D; [71 F8 CD, 05, 05]
+11C1D; [71 F9 CD, 05, 05]
-11C1E; [71 F8 D4, 05, 05]
+11C1E; [71 F9 D4, 05, 05]
-11C1F; [71 F8 DB, 05, 05]
+11C1F; [71 F9 DB, 05, 05]
-11C20; [71 F8 E2, 05, 05]
+11C20; [71 F9 E2, 05, 05]
-11C21; [71 F8 E9, 05, 05]
+11C21; [71 F9 E9, 05, 05]
-11C22; [71 F8 F0, 05, 05]
+11C22; [71 F9 F0, 05, 05]
-11C23; [71 F8 F7, 05, 05]
+11C23; [71 F9 F7, 05, 05]
-11C24; [71 F8 FE, 05, 05]
+11C24; [71 F9 FE, 05, 05]
-11C25; [71 F9 07, 05, 05]
+11C25; [71 FA 07, 05, 05]
-11C26; [71 F9 0E, 05, 05]
+11C26; [71 FA 0E, 05, 05]
-11C27; [71 F9 15, 05, 05]
+11C27; [71 FA 15, 05, 05]
-11C28; [71 F9 1C, 05, 05]
+11C28; [71 FA 1C, 05, 05]
-11C29; [71 F9 23, 05, 05]
+11C29; [71 FA 23, 05, 05]
-11C2A; [71 F9 2A, 05, 05]
+11C2A; [71 FA 2A, 05, 05]
-11C2B; [71 F9 31, 05, 05]
+11C2B; [71 FA 31, 05, 05]
-11C2C; [71 F9 38, 05, 05]
+11C2C; [71 FA 38, 05, 05]
-11C2D; [71 F9 3F, 05, 05]
+11C2D; [71 FA 3F, 05, 05]
-11C2E; [71 F9 46, 05, 05]
+11C2E; [71 FA 46, 05, 05]
-11C40; [71 F9 4D, 05, 05]
+11C40; [71 FA 4D, 05, 05]
-11C2F; [71 F9 54, 05, 05]
+11C2F; [71 FA 54, 05, 05]
-11C30; [71 F9 5B, 05, 05]
+11C30; [71 FA 5B, 05, 05]
-11C31; [71 F9 62, 05, 05]
+11C31; [71 FA 62, 05, 05]
-11C32; [71 F9 69, 05, 05]
+11C32; [71 FA 69, 05, 05]
-11C33; [71 F9 70, 05, 05]
+11C33; [71 FA 70, 05, 05]
-11C34; [71 F9 77, 05, 05]
+11C34; [71 FA 77, 05, 05]
-11C35; [71 F9 7E, 05, 05]
+11C35; [71 FA 7E, 05, 05]
-11C36; [71 F9 85, 05, 05]
+11C36; [71 FA 85, 05, 05]
-11C38; [71 F9 8C, 05, 05]
+11C38; [71 FA 8C, 05, 05]
-11C39; [71 F9 93, 05, 05]
+11C39; [71 FA 93, 05, 05]
-11C3A; [71 F9 9A, 05, 05]
+11C3A; [71 FA 9A, 05, 05]
-11C3B; [71 F9 A1, 05, 05]
+11C3B; [71 FA A1, 05, 05]
-11C3F; [71 F9 A8, 05, 05]
+11C3F; [71 FA A8, 05, 05]
FDD1 0E17; [72 04 02, 05, 05] # THAI first primary starts new lead byte (compressible)
@@ -33042,19 +33843,25 @@ FDD1 1703; [75 19 02, 05, 05] # TAGALOG first primary (compressible)
170C; [75 19 5D, 05, 05]
-170E; [75 19 64, 05, 05]
+170D; [75 19 64, 05, 05]
-170F; [75 19 6B, 05, 05]
+171F; [75 19 6B, 05, 05]
-1710; [75 19 72, 05, 05]
+170E; [75 19 72, 05, 05]
-1711; [75 19 79, 05, 05]
+170F; [75 19 79, 05, 05]
-1712; [75 19 80, 05, 05]
+1710; [75 19 80, 05, 05]
-1713; [75 19 87, 05, 05]
+1711; [75 19 87, 05, 05]
-1714; [75 19 8E, 05, 05]
+1712; [75 19 8E, 05, 05]
+
+1713; [75 19 95, 05, 05]
+
+1714; [75 19 9C, 05, 05]
+
+1715; [75 19 A3, 05, 05]
FDD1 1723; [75 1A 02, 05, 05] # HANUNOO first primary (compressible)
@@ -33805,17 +34612,17 @@ A9FA; [75 55 3A, 05, 05]
109D; [75 59 8E, 05, 05]
-1034; [75 59 95, 05, 05]
+1086; [75 59 95, 05, 05]
-1062; [75 59 9C, 05, 05]
+1034; [75 59 9C, 05, 05]
-1067; [75 59 A3, 05, 05]
+1062; [75 59 A3, 05, 05]
-1068; [75 59 AA, 05, 05]
+1067; [75 59 AA, 05, 05]
-A9E5; [75 59 B1, 05, 05]
+1068; [75 59 B1, 05, 05]
-1086; [75 59 B8, 05, 05]
+A9E5; [75 59 B8, 05, 05]
1039; [75 5B, 05, 05]
@@ -34943,2803 +35750,2836 @@ FDD1 1B05; [76 28 02, 05, 05] # Balinese first primary (compressible)
1B19; [76 28 A3, 05, 05]
-1B1A; [76 28 AA, 05, 05]
+1B1A; [76 2A, 05, 05]
+1B4C; [76 2A, 05, 20][76 33, 05, 20][76 2E, 05, 20]
+
+1B1B; [76 2C, 05, 05]
+
+1B1C; [76 2E, 05, 05]
+
+1B1D; [76 30 02, 05, 05]
+
+1B1E; [76 30 09, 05, 05]
+
+1B1F; [76 30 10, 05, 05]
+
+1B20; [76 30 17, 05, 05]
+
+1B21; [76 30 1E, 05, 05]
+
+1B22; [76 30 25, 05, 05]
+
+1B47; [76 30 2C, 05, 05]
+
+1B23; [76 30 33, 05, 05]
+
+1B24; [76 30 3A, 05, 05]
+
+1B25; [76 30 41, 05, 05]
+
+1B26; [76 30 48, 05, 05]
+
+1B27; [76 30 4F, 05, 05]
+
+1B48; [76 30 56, 05, 05]
-1B1B; [76 28 B1, 05, 05]
+1B28; [76 30 5D, 05, 05]
-1B1C; [76 28 B8, 05, 05]
+1B29; [76 30 64, 05, 05]
-1B1D; [76 28 BF, 05, 05]
+1B2A; [76 30 6B, 05, 05]
-1B1E; [76 28 C6, 05, 05]
+1B2B; [76 30 72, 05, 05]
-1B1F; [76 28 CD, 05, 05]
+1B2C; [76 30 79, 05, 05]
-1B20; [76 28 D4, 05, 05]
+1B2D; [76 30 80, 05, 05]
-1B21; [76 28 DB, 05, 05]
+1B2E; [76 30 87, 05, 05]
-1B22; [76 28 E2, 05, 05]
+1B2F; [76 30 8E, 05, 05]
-1B47; [76 28 E9, 05, 05]
+1B49; [76 30 95, 05, 05]
-1B23; [76 28 F0, 05, 05]
+1B30; [76 30 9C, 05, 05]
-1B24; [76 28 F7, 05, 05]
+1B31; [76 30 A3, 05, 05]
-1B25; [76 28 FE, 05, 05]
+1B32; [76 30 AA, 05, 05]
-1B26; [76 29 07, 05, 05]
+1B4A; [76 30 B1, 05, 05]
-1B27; [76 29 0E, 05, 05]
+1B4B; [76 30 B8, 05, 05]
-1B48; [76 29 15, 05, 05]
+1B33; [76 30 BF, 05, 05]
-1B28; [76 29 1C, 05, 05]
+1B35; [76 30 C6, 05, 05]
-1B29; [76 29 23, 05, 05]
+1B36; [76 30 CD, 05, 05]
-1B2A; [76 29 2A, 05, 05]
+1B37; [76 30 D4, 05, 05]
-1B2B; [76 29 31, 05, 05]
+1B38; [76 30 DB, 05, 05]
-1B2C; [76 29 38, 05, 05]
+1B39; [76 30 E2, 05, 05]
-1B2D; [76 29 3F, 05, 05]
+1B3A; [76 30 E9, 05, 05]
-1B2E; [76 29 46, 05, 05]
+1B3A 1B35; [76 30 F0, 05, 05]
+1B3B; [76 30 F0, 05, 05]
-1B2F; [76 29 4D, 05, 05]
+1B3C; [76 30 F7, 05, 05]
-1B49; [76 29 54, 05, 05]
+1B3C 1B35; [76 30 FE, 05, 05]
+1B3D; [76 30 FE, 05, 05]
-1B30; [76 29 5B, 05, 05]
+1B3E; [76 31 07, 05, 05]
-1B31; [76 29 62, 05, 05]
+1B3F; [76 31 0E, 05, 05]
-1B32; [76 29 69, 05, 05]
+1B3E 1B35; [76 31 15, 05, 05]
+1B40; [76 31 15, 05, 05]
-1B4A; [76 29 70, 05, 05]
+1B3F 1B35; [76 31 1C, 05, 05]
+1B41; [76 31 1C, 05, 05]
-1B4B; [76 29 77, 05, 05]
+1B42; [76 31 23, 05, 05]
-1B33; [76 29 7E, 05, 05]
+1B42 1B35; [76 31 2A, 05, 05]
+1B43; [76 31 2A, 05, 05]
-1B35; [76 29 85, 05, 05]
+1B44; [76 33, 05, 05]
-1B36; [76 29 8C, 05, 05]
+FDD1 A984; [76 35 02, 05, 05] # Javanese first primary (compressible)
-1B37; [76 29 93, 05, 05]
+A984; [76 35 09, 05, 05]
-1B38; [76 29 9A, 05, 05]
+A985; [76 35 10, 05, 05]
-1B39; [76 29 A1, 05, 05]
+A986; [76 35 17, 05, 05]
-1B3A; [76 29 A8, 05, 05]
+A987; [76 35 1E, 05, 05]
-1B3A 1B35; [76 29 AF, 05, 05]
-1B3B; [76 29 AF, 05, 05]
+A988; [76 35 25, 05, 05]
-1B3C; [76 29 B6, 05, 05]
+A989; [76 35 2C, 05, 05]
-1B3C 1B35; [76 29 BD, 05, 05]
-1B3D; [76 29 BD, 05, 05]
+A98A; [76 35 33, 05, 05]
-1B3E; [76 29 C4, 05, 05]
+A98B; [76 35 3A, 05, 05]
-1B3F; [76 29 CB, 05, 05]
+A98C; [76 35 41, 05, 05]
-1B3E 1B35; [76 29 D2, 05, 05]
-1B40; [76 29 D2, 05, 05]
+A98D; [76 35 48, 05, 05]
-1B3F 1B35; [76 29 D9, 05, 05]
-1B41; [76 29 D9, 05, 05]
+A98E; [76 35 4F, 05, 05]
-1B42; [76 29 E0, 05, 05]
+A98F; [76 35 56, 05, 05]
-1B42 1B35; [76 29 E7, 05, 05]
-1B43; [76 29 E7, 05, 05]
+A990; [76 35 5D, 05, 05]
-1B44; [76 29 EE, 05, 05]
+A991; [76 35 64, 05, 05]
-FDD1 A984; [76 2A 02, 05, 05] # Javanese first primary (compressible)
+A992; [76 35 6B, 05, 05]
-A984; [76 2A 09, 05, 05]
+A993; [76 35 72, 05, 05]
-A985; [76 2A 10, 05, 05]
+A994; [76 35 79, 05, 05]
-A986; [76 2A 17, 05, 05]
+A995; [76 35 80, 05, 05]
-A987; [76 2A 1E, 05, 05]
+A996; [76 35 87, 05, 05]
-A988; [76 2A 25, 05, 05]
+A997; [76 35 8E, 05, 05]
-A989; [76 2A 2C, 05, 05]
+A998; [76 35 95, 05, 05]
-A98A; [76 2A 33, 05, 05]
+A999; [76 35 9C, 05, 05]
-A98B; [76 2A 3A, 05, 05]
+A99A; [76 35 A3, 05, 05]
-A98C; [76 2A 41, 05, 05]
+A99B; [76 35 AA, 05, 05]
-A98D; [76 2A 48, 05, 05]
+A99C; [76 35 B1, 05, 05]
-A98E; [76 2A 4F, 05, 05]
+A99D; [76 35 B8, 05, 05]
-A98F; [76 2A 56, 05, 05]
+A99E; [76 35 BF, 05, 05]
-A990; [76 2A 5D, 05, 05]
+A99F; [76 35 C6, 05, 05]
-A991; [76 2A 64, 05, 05]
+A9A0; [76 35 CD, 05, 05]
-A992; [76 2A 6B, 05, 05]
+A9A1; [76 35 D4, 05, 05]
-A993; [76 2A 72, 05, 05]
+A9A2; [76 35 DB, 05, 05]
-A994; [76 2A 79, 05, 05]
+A9A3; [76 35 E2, 05, 05]
-A995; [76 2A 80, 05, 05]
+A9A4; [76 35 E9, 05, 05]
-A996; [76 2A 87, 05, 05]
+A9A5; [76 35 F0, 05, 05]
-A997; [76 2A 8E, 05, 05]
+A9A6; [76 35 F7, 05, 05]
-A998; [76 2A 95, 05, 05]
+A9A7; [76 35 FE, 05, 05]
-A999; [76 2A 9C, 05, 05]
+A9A8; [76 36 07, 05, 05]
-A99A; [76 2A A3, 05, 05]
+A9A9; [76 36 0E, 05, 05]
-A99B; [76 2A AA, 05, 05]
+A9AA; [76 36 15, 05, 05]
-A99C; [76 2A B1, 05, 05]
+A9BE; [76 36 1C, 05, 05]
-A99D; [76 2A B8, 05, 05]
+A9AB; [76 38, 05, 05]
+A9AC; [76 38, 05, 20]
-A99E; [76 2A BF, 05, 05]
+A9BF; [76 3A 02, 05, 05]
-A99F; [76 2A C6, 05, 05]
+A9AD; [76 3A 09, 05, 05]
-A9A0; [76 2A CD, 05, 05]
+A9AE; [76 3A 10, 05, 05]
-A9A1; [76 2A D4, 05, 05]
+A9AF; [76 3A 17, 05, 05]
-A9A2; [76 2A DB, 05, 05]
+A9B0; [76 3A 1E, 05, 05]
-A9A3; [76 2A E2, 05, 05]
+A9B1; [76 3A 25, 05, 05]
-A9A4; [76 2A E9, 05, 05]
+A9B2; [76 3A 2C, 05, 05]
-A9A5; [76 2A F0, 05, 05]
+A9B4; [76 3C, 05, 05]
+A9B5; [76 3C, 05, 20]
-A9A6; [76 2A F7, 05, 05]
+A9BC; [76 3E 02, 05, 05]
-A9A7; [76 2A FE, 05, 05]
+A9B6; [76 3E 09, 05, 05]
-A9A8; [76 2B 07, 05, 05]
+A9B7; [76 3E 10, 05, 05]
-A9A9; [76 2B 0E, 05, 05]
+A9B8; [76 3E 17, 05, 05]
-A9AA; [76 2B 15, 05, 05]
+A9B9; [76 3E 1E, 05, 05]
-A9BE; [76 2B 1C, 05, 05]
+A9BD; [76 3E 25, 05, 05]
-A9AB; [76 2D, 05, 05]
-A9AC; [76 2D, 05, 20]
+A9BA; [76 3E 2C, 05, 05]
-A9BF; [76 2F 02, 05, 05]
+A9BB; [76 3E 33, 05, 05]
-A9AD; [76 2F 09, 05, 05]
+A9C0; [76 3E 3A, 05, 05]
-A9AE; [76 2F 10, 05, 05]
+FDD1 1826; [76 3F 02, 05, 05] # MONGOLIAN first primary (compressible)
-A9AF; [76 2F 17, 05, 05]
+1880; [76 3F 09, 05, 05]
-A9B0; [76 2F 1E, 05, 05]
+1881; [76 3F 10, 05, 05]
-A9B1; [76 2F 25, 05, 05]
+1882; [76 3F 17, 05, 05]
-A9B2; [76 2F 2C, 05, 05]
+1883; [76 3F 1E, 05, 05]
-A9B4; [76 31, 05, 05]
-A9B5; [76 31, 05, 20]
+1884; [76 3F 25, 05, 05]
-A9BC; [76 33 02, 05, 05]
+1885; [76 3F 2C, 05, 05]
-A9B6; [76 33 09, 05, 05]
+1886; [76 3F 33, 05, 05]
-A9B7; [76 33 10, 05, 05]
+1843; [76 3F 3A, 05, 05]
-A9B8; [76 33 17, 05, 05]
+1820; [76 3F 41, 05, 05]
-A9B9; [76 33 1E, 05, 05]
+1887; [76 3F 48, 05, 05]
-A9BD; [76 33 25, 05, 05]
+1821; [76 3F 4F, 05, 05]
-A9BA; [76 33 2C, 05, 05]
+1844; [76 3F 56, 05, 05]
-A9BB; [76 33 33, 05, 05]
+185D; [76 3F 5D, 05, 05]
-A9C0; [76 33 3A, 05, 05]
+1822; [76 3F 64, 05, 05]
-FDD1 1826; [76 34 02, 05, 05] # MONGOLIAN first primary (compressible)
+1845; [76 3F 6B, 05, 05]
-1880; [76 34 09, 05, 05]
+185E; [76 3F 72, 05, 05]
-1881; [76 34 10, 05, 05]
+1873; [76 3F 79, 05, 05]
-1882; [76 34 17, 05, 05]
+1888; [76 3F 80, 05, 05]
-1883; [76 34 1E, 05, 05]
+185F; [76 3F 87, 05, 05]
-1884; [76 34 25, 05, 05]
+1823; [76 3F 8E, 05, 05]
-1885; [76 34 2C, 05, 05]
+1846; [76 3F 95, 05, 05]
-1886; [76 34 33, 05, 05]
+1824; [76 3F 9C, 05, 05]
-1843; [76 34 3A, 05, 05]
+1847; [76 3F A3, 05, 05]
-1820; [76 34 41, 05, 05]
+1861; [76 3F AA, 05, 05]
-1887; [76 34 48, 05, 05]
+1825; [76 3F B1, 05, 05]
-1821; [76 34 4F, 05, 05]
+1848; [76 3F B8, 05, 05]
-1844; [76 34 56, 05, 05]
+1826; [76 3F BF, 05, 05]
-185D; [76 34 5D, 05, 05]
+1849; [76 3F C6, 05, 05]
-1822; [76 34 64, 05, 05]
+1860; [76 3F CD, 05, 05]
-1845; [76 34 6B, 05, 05]
+1827; [76 3F D4, 05, 05]
-185E; [76 34 72, 05, 05]
+1828; [76 3F DB, 05, 05]
-1873; [76 34 79, 05, 05]
+1829; [76 3F E2, 05, 05]
-1888; [76 34 80, 05, 05]
+184A; [76 3F E9, 05, 05]
-185F; [76 34 87, 05, 05]
+1862; [76 3F F0, 05, 05]
-1823; [76 34 8E, 05, 05]
+188A; [76 3F F7, 05, 05]
-1846; [76 34 95, 05, 05]
+189B; [76 3F FE, 05, 05]
-1824; [76 34 9C, 05, 05]
+182A; [76 40 07, 05, 05]
-1847; [76 34 A3, 05, 05]
+184B; [76 40 0E, 05, 05]
-1861; [76 34 AA, 05, 05]
+182B; [76 40 15, 05, 05]
-1825; [76 34 B1, 05, 05]
+184C; [76 40 1C, 05, 05]
-1848; [76 34 B8, 05, 05]
+1866; [76 40 23, 05, 05]
-1826; [76 34 BF, 05, 05]
+182C; [76 40 2A, 05, 05]
-1849; [76 34 C6, 05, 05]
+184D; [76 40 31, 05, 05]
-1860; [76 34 CD, 05, 05]
+182D; [76 40 38, 05, 05]
-1827; [76 34 D4, 05, 05]
+184E; [76 40 3F, 05, 05]
-1828; [76 34 DB, 05, 05]
+1864; [76 40 46, 05, 05]
-1829; [76 34 E2, 05, 05]
+189A; [76 40 4D, 05, 05]
-184A; [76 34 E9, 05, 05]
+1865; [76 40 54, 05, 05]
-1862; [76 34 F0, 05, 05]
+182E; [76 40 5B, 05, 05]
-188A; [76 34 F7, 05, 05]
+184F; [76 40 62, 05, 05]
-189B; [76 34 FE, 05, 05]
+182F; [76 40 69, 05, 05]
-182A; [76 35 07, 05, 05]
+1830; [76 40 70, 05, 05]
-184B; [76 35 0E, 05, 05]
+1831; [76 40 77, 05, 05]
-182B; [76 35 15, 05, 05]
+1867; [76 40 7E, 05, 05]
-184C; [76 35 1C, 05, 05]
+189C; [76 40 85, 05, 05]
-1866; [76 35 23, 05, 05]
+189D; [76 40 8C, 05, 05]
-182C; [76 35 2A, 05, 05]
+18A2; [76 40 93, 05, 05]
-184D; [76 35 31, 05, 05]
+18A4; [76 40 9A, 05, 05]
-182D; [76 35 38, 05, 05]
+18A5; [76 40 A1, 05, 05]
-184E; [76 35 3F, 05, 05]
+1832; [76 40 A8, 05, 05]
-1864; [76 35 46, 05, 05]
+1850; [76 40 AF, 05, 05]
-189A; [76 35 4D, 05, 05]
+1868; [76 40 B6, 05, 05]
-1865; [76 35 54, 05, 05]
+1833; [76 40 BD, 05, 05]
-182E; [76 35 5B, 05, 05]
+1851; [76 40 C4, 05, 05]
-184F; [76 35 62, 05, 05]
+1869; [76 40 CB, 05, 05]
-182F; [76 35 69, 05, 05]
+1834; [76 40 D2, 05, 05]
-1830; [76 35 70, 05, 05]
+1852; [76 40 D9, 05, 05]
-1831; [76 35 77, 05, 05]
+1871; [76 40 E0, 05, 05]
-1867; [76 35 7E, 05, 05]
+1878; [76 40 E7, 05, 05]
-189C; [76 35 85, 05, 05]
+185C; [76 40 EE, 05, 05]
-189D; [76 35 8C, 05, 05]
+188B; [76 40 F5, 05, 05]
-18A2; [76 35 93, 05, 05]
+1835; [76 40 FC, 05, 05]
-18A4; [76 35 9A, 05, 05]
+1853; [76 41 05, 05, 05]
-18A5; [76 35 A1, 05, 05]
+186A; [76 41 0C, 05, 05]
-1832; [76 35 A8, 05, 05]
+1877; [76 41 13, 05, 05]
-1850; [76 35 AF, 05, 05]
+1836; [76 41 1A, 05, 05]
-1868; [76 35 B6, 05, 05]
+1855; [76 41 21, 05, 05]
-1833; [76 35 BD, 05, 05]
+1872; [76 41 28, 05, 05]
-1851; [76 35 C4, 05, 05]
+1837; [76 41 2F, 05, 05]
-1869; [76 35 CB, 05, 05]
+1875; [76 41 36, 05, 05]
-1834; [76 35 D2, 05, 05]
+1838; [76 41 3D, 05, 05]
-1852; [76 35 D9, 05, 05]
+1856; [76 41 44, 05, 05]
-1871; [76 35 E0, 05, 05]
+1839; [76 41 4B, 05, 05]
-1878; [76 35 E7, 05, 05]
+186B; [76 41 52, 05, 05]
-185C; [76 35 EE, 05, 05]
+1876; [76 41 59, 05, 05]
-188B; [76 35 F5, 05, 05]
+183A; [76 41 60, 05, 05]
-1835; [76 35 FC, 05, 05]
+1857; [76 41 67, 05, 05]
-1853; [76 36 05, 05, 05]
+1863; [76 41 6E, 05, 05]
-186A; [76 36 0C, 05, 05]
+1874; [76 41 75, 05, 05]
-1877; [76 36 13, 05, 05]
+1889; [76 41 7C, 05, 05]
-1836; [76 36 1A, 05, 05]
+183B; [76 41 83, 05, 05]
-1855; [76 36 21, 05, 05]
+183C; [76 41 8A, 05, 05]
-1872; [76 36 28, 05, 05]
+1854; [76 41 91, 05, 05]
-1837; [76 36 2F, 05, 05]
+186E; [76 41 98, 05, 05]
-1875; [76 36 36, 05, 05]
+183D; [76 41 9F, 05, 05]
-1838; [76 36 3D, 05, 05]
+186F; [76 41 A6, 05, 05]
-1856; [76 36 44, 05, 05]
+1858; [76 41 AD, 05, 05]
-1839; [76 36 4B, 05, 05]
+186C; [76 41 B4, 05, 05]
-186B; [76 36 52, 05, 05]
+183E; [76 41 BB, 05, 05]
-1876; [76 36 59, 05, 05]
+1859; [76 41 C2, 05, 05]
-183A; [76 36 60, 05, 05]
+186D; [76 41 C9, 05, 05]
-1857; [76 36 67, 05, 05]
+183F; [76 41 D0, 05, 05]
-1863; [76 36 6E, 05, 05]
+1840; [76 41 D7, 05, 05]
-1874; [76 36 75, 05, 05]
+1841; [76 41 DE, 05, 05]
-1889; [76 36 7C, 05, 05]
+1842; [76 41 E5, 05, 05]
-183B; [76 36 83, 05, 05]
+185A; [76 41 EC, 05, 05]
-183C; [76 36 8A, 05, 05]
+185B; [76 41 F3, 05, 05]
-1854; [76 36 91, 05, 05]
+1870; [76 41 FA, 05, 05]
-186E; [76 36 98, 05, 05]
+188C; [76 42 03, 05, 05]
-183D; [76 36 9F, 05, 05]
+189E; [76 42 0A, 05, 05]
-186F; [76 36 A6, 05, 05]
+188D; [76 42 11, 05, 05]
-1858; [76 36 AD, 05, 05]
+188E; [76 42 18, 05, 05]
-186C; [76 36 B4, 05, 05]
+189F; [76 42 1F, 05, 05]
-183E; [76 36 BB, 05, 05]
+188F; [76 42 26, 05, 05]
-1859; [76 36 C2, 05, 05]
+1890; [76 42 2D, 05, 05]
-186D; [76 36 C9, 05, 05]
+1898; [76 42 34, 05, 05]
-183F; [76 36 D0, 05, 05]
+18A0; [76 42 3B, 05, 05]
-1840; [76 36 D7, 05, 05]
+1891; [76 42 42, 05, 05]
-1841; [76 36 DE, 05, 05]
+18A1; [76 42 49, 05, 05]
-1842; [76 36 E5, 05, 05]
+1892; [76 42 50, 05, 05]
-185A; [76 36 EC, 05, 05]
+1893; [76 42 57, 05, 05]
-185B; [76 36 F3, 05, 05]
+18A8; [76 42 5E, 05, 05]
-1870; [76 36 FA, 05, 05]
+1894; [76 42 65, 05, 05]
-188C; [76 37 03, 05, 05]
+18A3; [76 42 6C, 05, 05]
-189E; [76 37 0A, 05, 05]
+1895; [76 42 73, 05, 05]
-188D; [76 37 11, 05, 05]
+1899; [76 42 7A, 05, 05]
-188E; [76 37 18, 05, 05]
+1896; [76 42 81, 05, 05]
-189F; [76 37 1F, 05, 05]
+1897; [76 42 88, 05, 05]
-188F; [76 37 26, 05, 05]
+18A6; [76 42 8F, 05, 05]
-1890; [76 37 2D, 05, 05]
+18A7; [76 42 96, 05, 05]
-1898; [76 37 34, 05, 05]
+18AA; [76 42 9D, 05, 05]
-18A0; [76 37 3B, 05, 05]
+18A9; [76 42 A4, 05, 05]
-1891; [76 37 42, 05, 05]
+FDD1 1C5A; [76 43 02, 05, 05] # Ol Chiki first primary (compressible)
-18A1; [76 37 49, 05, 05]
+1C5A; [76 43 09, 05, 05]
-1892; [76 37 50, 05, 05]
+1C5B; [76 43 10, 05, 05]
-1893; [76 37 57, 05, 05]
+1C5C; [76 43 17, 05, 05]
-18A8; [76 37 5E, 05, 05]
+1C5D; [76 43 1E, 05, 05]
-1894; [76 37 65, 05, 05]
+1C5E; [76 43 25, 05, 05]
-18A3; [76 37 6C, 05, 05]
+1C5F; [76 43 2C, 05, 05]
-1895; [76 37 73, 05, 05]
+1C60; [76 43 33, 05, 05]
-1899; [76 37 7A, 05, 05]
+1C61; [76 43 3A, 05, 05]
-1896; [76 37 81, 05, 05]
+1C62; [76 43 41, 05, 05]
-1897; [76 37 88, 05, 05]
+1C63; [76 43 48, 05, 05]
-18A6; [76 37 8F, 05, 05]
+1C64; [76 43 4F, 05, 05]
-18A7; [76 37 96, 05, 05]
+1C65; [76 43 56, 05, 05]
-18AA; [76 37 9D, 05, 05]
+1C66; [76 43 5D, 05, 05]
-18A9; [76 37 A4, 05, 05]
+1C67; [76 43 64, 05, 05]
-FDD1 1C5A; [76 38 02, 05, 05] # Ol Chiki first primary (compressible)
+1C68; [76 43 6B, 05, 05]
-1C5A; [76 38 09, 05, 05]
+1C69; [76 43 72, 05, 05]
-1C5B; [76 38 10, 05, 05]
+1C6A; [76 43 79, 05, 05]
-1C5C; [76 38 17, 05, 05]
+1C6B; [76 43 80, 05, 05]
-1C5D; [76 38 1E, 05, 05]
+1C6C; [76 43 87, 05, 05]
-1C5E; [76 38 25, 05, 05]
+1C6D; [76 43 8E, 05, 05]
-1C5F; [76 38 2C, 05, 05]
+1C6E; [76 43 95, 05, 05]
-1C60; [76 38 33, 05, 05]
+1C6F; [76 43 9C, 05, 05]
-1C61; [76 38 3A, 05, 05]
+1C70; [76 43 A3, 05, 05]
-1C62; [76 38 41, 05, 05]
+1C71; [76 43 AA, 05, 05]
-1C63; [76 38 48, 05, 05]
+1C72; [76 43 B1, 05, 05]
-1C64; [76 38 4F, 05, 05]
+1C73; [76 43 B8, 05, 05]
-1C65; [76 38 56, 05, 05]
+1C74; [76 43 BF, 05, 05]
-1C66; [76 38 5D, 05, 05]
+1C75; [76 43 C6, 05, 05]
-1C67; [76 38 64, 05, 05]
+1C76; [76 43 CD, 05, 05]
-1C68; [76 38 6B, 05, 05]
+1C77; [76 43 D4, 05, 05]
-1C69; [76 38 72, 05, 05]
+1C78; [76 43 DB, 05, 05]
-1C6A; [76 38 79, 05, 05]
+1C79; [76 43 E2, 05, 05]
-1C6B; [76 38 80, 05, 05]
+1C7A; [76 43 E9, 05, 05]
-1C6C; [76 38 87, 05, 05]
+1C7B; [76 43 F0, 05, 05]
-1C6D; [76 38 8E, 05, 05]
+1C7C; [76 43 F7, 05, 05]
-1C6E; [76 38 95, 05, 05]
+1C7D; [76 43 FE, 05, 05]
-1C6F; [76 38 9C, 05, 05]
+FDD1 13C4; [76 45 02, 05, 05] # CHEROKEE first primary (compressible)
-1C70; [76 38 A3, 05, 05]
+AB70; [76 47, 05, 05]
+13A0; [76 47, 05, A0]
-1C71; [76 38 AA, 05, 05]
+AB71; [76 49, 05, 05]
+13A1; [76 49, 05, A0]
-1C72; [76 38 B1, 05, 05]
+AB72; [76 4B, 05, 05]
+13A2; [76 4B, 05, A0]
-1C73; [76 38 B8, 05, 05]
+AB73; [76 4D, 05, 05]
+13A3; [76 4D, 05, A0]
-1C74; [76 38 BF, 05, 05]
+AB74; [76 4F, 05, 05]
+13A4; [76 4F, 05, A0]
-1C75; [76 38 C6, 05, 05]
+AB75; [76 51, 05, 05]
+13A5; [76 51, 05, A0]
-1C76; [76 38 CD, 05, 05]
+AB76; [76 53, 05, 05]
+13A6; [76 53, 05, A0]
-1C77; [76 38 D4, 05, 05]
+AB77; [76 55, 05, 05]
+13A7; [76 55, 05, A0]
-1C78; [76 38 DB, 05, 05]
+AB78; [76 57, 05, 05]
+13A8; [76 57, 05, A0]
-1C79; [76 38 E2, 05, 05]
+AB79; [76 59, 05, 05]
+13A9; [76 59, 05, A0]
-1C7A; [76 38 E9, 05, 05]
+AB7A; [76 5B, 05, 05]
+13AA; [76 5B, 05, A0]
-1C7B; [76 38 F0, 05, 05]
+AB7B; [76 5D, 05, 05]
+13AB; [76 5D, 05, A0]
-1C7C; [76 38 F7, 05, 05]
+AB7C; [76 5F, 05, 05]
+13AC; [76 5F, 05, A0]
-1C7D; [76 38 FE, 05, 05]
+AB7D; [76 61, 05, 05]
+13AD; [76 61, 05, A0]
-FDD1 13C4; [76 3A 02, 05, 05] # CHEROKEE first primary (compressible)
+AB7E; [76 63, 05, 05]
+13AE; [76 63, 05, A0]
-AB70; [76 3C, 05, 05]
-13A0; [76 3C, 05, A0]
+AB7F; [76 65, 05, 05]
+13AF; [76 65, 05, A0]
-AB71; [76 3E, 05, 05]
-13A1; [76 3E, 05, A0]
+AB80; [76 67, 05, 05]
+13B0; [76 67, 05, A0]
-AB72; [76 40, 05, 05]
-13A2; [76 40, 05, A0]
+AB81; [76 69, 05, 05]
+13B1; [76 69, 05, A0]
-AB73; [76 42, 05, 05]
-13A3; [76 42, 05, A0]
+AB82; [76 6B, 05, 05]
+13B2; [76 6B, 05, A0]
-AB74; [76 44, 05, 05]
-13A4; [76 44, 05, A0]
+AB83; [76 6D, 05, 05]
+13B3; [76 6D, 05, A0]
-AB75; [76 46, 05, 05]
-13A5; [76 46, 05, A0]
+AB84; [76 6F, 05, 05]
+13B4; [76 6F, 05, A0]
-AB76; [76 48, 05, 05]
-13A6; [76 48, 05, A0]
+AB85; [76 71, 05, 05]
+13B5; [76 71, 05, A0]
-AB77; [76 4A, 05, 05]
-13A7; [76 4A, 05, A0]
+AB86; [76 73, 05, 05]
+13B6; [76 73, 05, A0]
-AB78; [76 4C, 05, 05]
-13A8; [76 4C, 05, A0]
+AB87; [76 75, 05, 05]
+13B7; [76 75, 05, A0]
-AB79; [76 4E, 05, 05]
-13A9; [76 4E, 05, A0]
+AB88; [76 77, 05, 05]
+13B8; [76 77, 05, A0]
-AB7A; [76 50, 05, 05]
-13AA; [76 50, 05, A0]
+AB89; [76 79, 05, 05]
+13B9; [76 79, 05, A0]
-AB7B; [76 52, 05, 05]
-13AB; [76 52, 05, A0]
+AB8A; [76 7B, 05, 05]
+13BA; [76 7B, 05, A0]
-AB7C; [76 54, 05, 05]
-13AC; [76 54, 05, A0]
+AB8B; [76 7D, 05, 05]
+13BB; [76 7D, 05, A0]
-AB7D; [76 56, 05, 05]
-13AD; [76 56, 05, A0]
+AB8C; [76 7F, 05, 05]
+13BC; [76 7F, 05, A0]
-AB7E; [76 58, 05, 05]
-13AE; [76 58, 05, A0]
+AB8D; [76 81, 05, 05]
+13BD; [76 81, 05, A0]
-AB7F; [76 5A, 05, 05]
-13AF; [76 5A, 05, A0]
+AB8E; [76 83, 05, 05]
+13BE; [76 83, 05, A0]
-AB80; [76 5C, 05, 05]
-13B0; [76 5C, 05, A0]
+AB8F; [76 85, 05, 05]
+13BF; [76 85, 05, A0]
-AB81; [76 5E, 05, 05]
-13B1; [76 5E, 05, A0]
+AB90; [76 87, 05, 05]
+13C0; [76 87, 05, A0]
-AB82; [76 60, 05, 05]
-13B2; [76 60, 05, A0]
+AB91; [76 89, 05, 05]
+13C1; [76 89, 05, A0]
-AB83; [76 62, 05, 05]
-13B3; [76 62, 05, A0]
+AB92; [76 8B, 05, 05]
+13C2; [76 8B, 05, A0]
-AB84; [76 64, 05, 05]
-13B4; [76 64, 05, A0]
+AB93; [76 8D, 05, 05]
+13C3; [76 8D, 05, A0]
-AB85; [76 66, 05, 05]
-13B5; [76 66, 05, A0]
+AB94; [76 8F, 05, 05]
+13C4; [76 8F, 05, A0]
-AB86; [76 68, 05, 05]
-13B6; [76 68, 05, A0]
+AB95; [76 91, 05, 05]
+13C5; [76 91, 05, A0]
-AB87; [76 6A, 05, 05]
-13B7; [76 6A, 05, A0]
+AB96; [76 93, 05, 05]
+13C6; [76 93, 05, A0]
-AB88; [76 6C, 05, 05]
-13B8; [76 6C, 05, A0]
+AB97; [76 95, 05, 05]
+13C7; [76 95, 05, A0]
-AB89; [76 6E, 05, 05]
-13B9; [76 6E, 05, A0]
+AB98; [76 97, 05, 05]
+13C8; [76 97, 05, A0]
-AB8A; [76 70, 05, 05]
-13BA; [76 70, 05, A0]
+AB99; [76 99, 05, 05]
+13C9; [76 99, 05, A0]
-AB8B; [76 72, 05, 05]
-13BB; [76 72, 05, A0]
+AB9A; [76 9B, 05, 05]
+13CA; [76 9B, 05, A0]
-AB8C; [76 74, 05, 05]
-13BC; [76 74, 05, A0]
+AB9B; [76 9D, 05, 05]
+13CB; [76 9D, 05, A0]
-AB8D; [76 76, 05, 05]
-13BD; [76 76, 05, A0]
+AB9C; [76 9F, 05, 05]
+13CC; [76 9F, 05, A0]
-AB8E; [76 78, 05, 05]
-13BE; [76 78, 05, A0]
+AB9D; [76 A1, 05, 05]
+13CD; [76 A1, 05, A0]
-AB8F; [76 7A, 05, 05]
-13BF; [76 7A, 05, A0]
+AB9E; [76 A3, 05, 05]
+13CE; [76 A3, 05, A0]
-AB90; [76 7C, 05, 05]
-13C0; [76 7C, 05, A0]
+AB9F; [76 A5, 05, 05]
+13CF; [76 A5, 05, A0]
-AB91; [76 7E, 05, 05]
-13C1; [76 7E, 05, A0]
+ABA0; [76 A7, 05, 05]
+13D0; [76 A7, 05, A0]
-AB92; [76 80, 05, 05]
-13C2; [76 80, 05, A0]
+ABA1; [76 A9, 05, 05]
+13D1; [76 A9, 05, A0]
-AB93; [76 82, 05, 05]
-13C3; [76 82, 05, A0]
+ABA2; [76 AB, 05, 05]
+13D2; [76 AB, 05, A0]
-AB94; [76 84, 05, 05]
-13C4; [76 84, 05, A0]
+ABA3; [76 AD, 05, 05]
+13D3; [76 AD, 05, A0]
-AB95; [76 86, 05, 05]
-13C5; [76 86, 05, A0]
+ABA4; [76 AF, 05, 05]
+13D4; [76 AF, 05, A0]
-AB96; [76 88, 05, 05]
-13C6; [76 88, 05, A0]
+ABA5; [76 B1, 05, 05]
+13D5; [76 B1, 05, A0]
-AB97; [76 8A, 05, 05]
-13C7; [76 8A, 05, A0]
+ABA6; [76 B3, 05, 05]
+13D6; [76 B3, 05, A0]
-AB98; [76 8C, 05, 05]
-13C8; [76 8C, 05, A0]
+ABA7; [76 B5, 05, 05]
+13D7; [76 B5, 05, A0]
-AB99; [76 8E, 05, 05]
-13C9; [76 8E, 05, A0]
+ABA8; [76 B7, 05, 05]
+13D8; [76 B7, 05, A0]
-AB9A; [76 90, 05, 05]
-13CA; [76 90, 05, A0]
+ABA9; [76 B9, 05, 05]
+13D9; [76 B9, 05, A0]
-AB9B; [76 92, 05, 05]
-13CB; [76 92, 05, A0]
+ABAA; [76 BB, 05, 05]
+13DA; [76 BB, 05, A0]
-AB9C; [76 94, 05, 05]
-13CC; [76 94, 05, A0]
+ABAB; [76 BD, 05, 05]
+13DB; [76 BD, 05, A0]
-AB9D; [76 96, 05, 05]
-13CD; [76 96, 05, A0]
+ABAC; [76 BF, 05, 05]
+13DC; [76 BF, 05, A0]
-AB9E; [76 98, 05, 05]
-13CE; [76 98, 05, A0]
+ABAD; [76 C1, 05, 05]
+13DD; [76 C1, 05, A0]
-AB9F; [76 9A, 05, 05]
-13CF; [76 9A, 05, A0]
+ABAE; [76 C3, 05, 05]
+13DE; [76 C3, 05, A0]
-ABA0; [76 9C, 05, 05]
-13D0; [76 9C, 05, A0]
+ABAF; [76 C5, 05, 05]
+13DF; [76 C5, 05, A0]
-ABA1; [76 9E, 05, 05]
-13D1; [76 9E, 05, A0]
+ABB0; [76 C7, 05, 05]
+13E0; [76 C7, 05, A0]
-ABA2; [76 A0, 05, 05]
-13D2; [76 A0, 05, A0]
+ABB1; [76 C9, 05, 05]
+13E1; [76 C9, 05, A0]
-ABA3; [76 A2, 05, 05]
-13D3; [76 A2, 05, A0]
+ABB2; [76 CB, 05, 05]
+13E2; [76 CB, 05, A0]
-ABA4; [76 A4, 05, 05]
-13D4; [76 A4, 05, A0]
+ABB3; [76 CD, 05, 05]
+13E3; [76 CD, 05, A0]
-ABA5; [76 A6, 05, 05]
-13D5; [76 A6, 05, A0]
+ABB4; [76 CF, 05, 05]
+13E4; [76 CF, 05, A0]
-ABA6; [76 A8, 05, 05]
-13D6; [76 A8, 05, A0]
+ABB5; [76 D1, 05, 05]
+13E5; [76 D1, 05, A0]
-ABA7; [76 AA, 05, 05]
-13D7; [76 AA, 05, A0]
+ABB6; [76 D3, 05, 05]
+13E6; [76 D3, 05, A0]
-ABA8; [76 AC, 05, 05]
-13D8; [76 AC, 05, A0]
+ABB7; [76 D5, 05, 05]
+13E7; [76 D5, 05, A0]
-ABA9; [76 AE, 05, 05]
-13D9; [76 AE, 05, A0]
+ABB8; [76 D7, 05, 05]
+13E8; [76 D7, 05, A0]
-ABAA; [76 B0, 05, 05]
-13DA; [76 B0, 05, A0]
+ABB9; [76 D9, 05, 05]
+13E9; [76 D9, 05, A0]
-ABAB; [76 B2, 05, 05]
-13DB; [76 B2, 05, A0]
+ABBA; [76 DB, 05, 05]
+13EA; [76 DB, 05, A0]
-ABAC; [76 B4, 05, 05]
-13DC; [76 B4, 05, A0]
+ABBB; [76 DD, 05, 05]
+13EB; [76 DD, 05, A0]
-ABAD; [76 B6, 05, 05]
-13DD; [76 B6, 05, A0]
+ABBC; [76 DF, 05, 05]
+13EC; [76 DF, 05, A0]
-ABAE; [76 B8, 05, 05]
-13DE; [76 B8, 05, A0]
+ABBD; [76 E1, 05, 05]
+13ED; [76 E1, 05, A0]
-ABAF; [76 BA, 05, 05]
-13DF; [76 BA, 05, A0]
+ABBE; [76 E3, 05, 05]
+13EE; [76 E3, 05, A0]
-ABB0; [76 BC, 05, 05]
-13E0; [76 BC, 05, A0]
+ABBF; [76 E5, 05, 05]
+13EF; [76 E5, 05, A0]
-ABB1; [76 BE, 05, 05]
-13E1; [76 BE, 05, A0]
+13F8; [76 E7, 05, 05]
+13F0; [76 E7, 05, A0]
-ABB2; [76 C0, 05, 05]
-13E2; [76 C0, 05, A0]
+13F9; [76 E9, 05, 05]
+13F1; [76 E9, 05, A0]
-ABB3; [76 C2, 05, 05]
-13E3; [76 C2, 05, A0]
+13FA; [76 EB, 05, 05]
+13F2; [76 EB, 05, A0]
-ABB4; [76 C4, 05, 05]
-13E4; [76 C4, 05, A0]
+13FB; [76 ED, 05, 05]
+13F3; [76 ED, 05, A0]
-ABB5; [76 C6, 05, 05]
-13E5; [76 C6, 05, A0]
+13FC; [76 EF, 05, 05]
+13F4; [76 EF, 05, A0]
-ABB6; [76 C8, 05, 05]
-13E6; [76 C8, 05, A0]
+13FD; [76 F1, 05, 05]
+13F5; [76 F1, 05, A0]
-ABB7; [76 CA, 05, 05]
-13E7; [76 CA, 05, A0]
+FDD1 104B5; [76 F3 02, 05, 05] # Osage first primary (compressible)
-ABB8; [76 CC, 05, 05]
-13E8; [76 CC, 05, A0]
+104D8; [76 F3 09, 05, 05]
+104B0; [76 F3 09, 05, A0]
-ABB9; [76 CE, 05, 05]
-13E9; [76 CE, 05, A0]
+104D9; [76 F3 10, 05, 05]
+104B1; [76 F3 10, 05, A0]
-ABBA; [76 D0, 05, 05]
-13EA; [76 D0, 05, A0]
+104DA; [76 F3 17, 05, 05]
+104B2; [76 F3 17, 05, A0]
-ABBB; [76 D2, 05, 05]
-13EB; [76 D2, 05, A0]
+104DB; [76 F3 1E, 05, 05]
+104B3; [76 F3 1E, 05, A0]
-ABBC; [76 D4, 05, 05]
-13EC; [76 D4, 05, A0]
+104DC; [76 F3 25, 05, 05]
+104B4; [76 F3 25, 05, A0]
-ABBD; [76 D6, 05, 05]
-13ED; [76 D6, 05, A0]
+104DD; [76 F3 2C, 05, 05]
+104B5; [76 F3 2C, 05, A0]
-ABBE; [76 D8, 05, 05]
-13EE; [76 D8, 05, A0]
+104DE; [76 F3 33, 05, 05]
+104B6; [76 F3 33, 05, A0]
-ABBF; [76 DA, 05, 05]
-13EF; [76 DA, 05, A0]
+104DF; [76 F3 3A, 05, 05]
+104B7; [76 F3 3A, 05, A0]
-13F8; [76 DC, 05, 05]
-13F0; [76 DC, 05, A0]
+104E0; [76 F3 41, 05, 05]
+104B8; [76 F3 41, 05, A0]
-13F9; [76 DE, 05, 05]
-13F1; [76 DE, 05, A0]
+104E1; [76 F3 48, 05, 05]
+104B9; [76 F3 48, 05, A0]
-13FA; [76 E0, 05, 05]
-13F2; [76 E0, 05, A0]
+104E2; [76 F3 4F, 05, 05]
+104BA; [76 F3 4F, 05, A0]
-13FB; [76 E2, 05, 05]
-13F3; [76 E2, 05, A0]
+104E3; [76 F3 56, 05, 05]
+104BB; [76 F3 56, 05, A0]
-13FC; [76 E4, 05, 05]
-13F4; [76 E4, 05, A0]
+104E4; [76 F3 5D, 05, 05]
+104BC; [76 F3 5D, 05, A0]
-13FD; [76 E6, 05, 05]
-13F5; [76 E6, 05, A0]
+104E5; [76 F3 64, 05, 05]
+104BD; [76 F3 64, 05, A0]
-FDD1 104B5; [76 E8 02, 05, 05] # Osage first primary (compressible)
+104E6; [76 F3 6B, 05, 05]
+104BE; [76 F3 6B, 05, A0]
-104D8; [76 E8 09, 05, 05]
-104B0; [76 E8 09, 05, A0]
+104E7; [76 F3 72, 05, 05]
+104BF; [76 F3 72, 05, A0]
-104D9; [76 E8 10, 05, 05]
-104B1; [76 E8 10, 05, A0]
+104E8; [76 F3 79, 05, 05]
+104C0; [76 F3 79, 05, A0]
-104DA; [76 E8 17, 05, 05]
-104B2; [76 E8 17, 05, A0]
+104E9; [76 F3 80, 05, 05]
+104C1; [76 F3 80, 05, A0]
-104DB; [76 E8 1E, 05, 05]
-104B3; [76 E8 1E, 05, A0]
+104EA; [76 F3 87, 05, 05]
+104C2; [76 F3 87, 05, A0]
-104DC; [76 E8 25, 05, 05]
-104B4; [76 E8 25, 05, A0]
+104EB; [76 F3 8E, 05, 05]
+104C3; [76 F3 8E, 05, A0]
-104DD; [76 E8 2C, 05, 05]
-104B5; [76 E8 2C, 05, A0]
+104EC; [76 F3 95, 05, 05]
+104C4; [76 F3 95, 05, A0]
-104DE; [76 E8 33, 05, 05]
-104B6; [76 E8 33, 05, A0]
+104ED; [76 F3 9C, 05, 05]
+104C5; [76 F3 9C, 05, A0]
-104DF; [76 E8 3A, 05, 05]
-104B7; [76 E8 3A, 05, A0]
+104EE; [76 F3 A3, 05, 05]
+104C6; [76 F3 A3, 05, A0]
-104E0; [76 E8 41, 05, 05]
-104B8; [76 E8 41, 05, A0]
+104EF; [76 F3 AA, 05, 05]
+104C7; [76 F3 AA, 05, A0]
-104E1; [76 E8 48, 05, 05]
-104B9; [76 E8 48, 05, A0]
+104F0; [76 F3 B1, 05, 05]
+104C8; [76 F3 B1, 05, A0]
-104E2; [76 E8 4F, 05, 05]
-104BA; [76 E8 4F, 05, A0]
+104F1; [76 F3 B8, 05, 05]
+104C9; [76 F3 B8, 05, A0]
-104E3; [76 E8 56, 05, 05]
-104BB; [76 E8 56, 05, A0]
+104F2; [76 F3 BF, 05, 05]
+104CA; [76 F3 BF, 05, A0]
-104E4; [76 E8 5D, 05, 05]
-104BC; [76 E8 5D, 05, A0]
+104F3; [76 F3 C6, 05, 05]
+104CB; [76 F3 C6, 05, A0]
-104E5; [76 E8 64, 05, 05]
-104BD; [76 E8 64, 05, A0]
+104F4; [76 F3 CD, 05, 05]
+104CC; [76 F3 CD, 05, A0]
-104E6; [76 E8 6B, 05, 05]
-104BE; [76 E8 6B, 05, A0]
+104F5; [76 F3 D4, 05, 05]
+104CD; [76 F3 D4, 05, A0]
-104E7; [76 E8 72, 05, 05]
-104BF; [76 E8 72, 05, A0]
+104F6; [76 F3 DB, 05, 05]
+104CE; [76 F3 DB, 05, A0]
-104E8; [76 E8 79, 05, 05]
-104C0; [76 E8 79, 05, A0]
+104F7; [76 F3 E2, 05, 05]
+104CF; [76 F3 E2, 05, A0]
-104E9; [76 E8 80, 05, 05]
-104C1; [76 E8 80, 05, A0]
+104F8; [76 F3 E9, 05, 05]
+104D0; [76 F3 E9, 05, A0]
-104EA; [76 E8 87, 05, 05]
-104C2; [76 E8 87, 05, A0]
+104F9; [76 F3 F0, 05, 05]
+104D1; [76 F3 F0, 05, A0]
-104EB; [76 E8 8E, 05, 05]
-104C3; [76 E8 8E, 05, A0]
+104FA; [76 F3 F7, 05, 05]
+104D2; [76 F3 F7, 05, A0]
-104EC; [76 E8 95, 05, 05]
-104C4; [76 E8 95, 05, A0]
+104FB; [76 F3 FE, 05, 05]
+104D3; [76 F3 FE, 05, A0]
-104ED; [76 E8 9C, 05, 05]
-104C5; [76 E8 9C, 05, A0]
+FDD1 14C0; [77 04 02, 05, 05] # CANADIAN-ABORIGINAL first primary starts new lead byte (compressible)
-104EE; [76 E8 A3, 05, 05]
-104C6; [76 E8 A3, 05, A0]
+1401; [77 04 09, 05, 05]
-104EF; [76 E8 AA, 05, 05]
-104C7; [76 E8 AA, 05, A0]
+1402; [77 04 10, 05, 05]
-104F0; [76 E8 B1, 05, 05]
-104C8; [76 E8 B1, 05, A0]
+1403; [77 04 17, 05, 05]
-104F1; [76 E8 B8, 05, 05]
-104C9; [76 E8 B8, 05, A0]
+1404; [77 04 1E, 05, 05]
-104F2; [76 E8 BF, 05, 05]
-104CA; [76 E8 BF, 05, A0]
+1405; [77 04 25, 05, 05]
-104F3; [76 E8 C6, 05, 05]
-104CB; [76 E8 C6, 05, A0]
+1406; [77 04 2C, 05, 05]
-104F4; [76 E8 CD, 05, 05]
-104CC; [76 E8 CD, 05, A0]
+1407; [77 04 33, 05, 05]
-104F5; [76 E8 D4, 05, 05]
-104CD; [76 E8 D4, 05, A0]
+1408; [77 04 3A, 05, 05]
-104F6; [76 E8 DB, 05, 05]
-104CE; [76 E8 DB, 05, A0]
+1409; [77 04 41, 05, 05]
-104F7; [76 E8 E2, 05, 05]
-104CF; [76 E8 E2, 05, A0]
+140A; [77 04 48, 05, 05]
-104F8; [76 E8 E9, 05, 05]
-104D0; [76 E8 E9, 05, A0]
+140B; [77 04 4F, 05, 05]
-104F9; [76 E8 F0, 05, 05]
-104D1; [76 E8 F0, 05, A0]
+140C; [77 04 56, 05, 05]
-104FA; [76 E8 F7, 05, 05]
-104D2; [76 E8 F7, 05, A0]
+140D; [77 04 5D, 05, 05]
-104FB; [76 E8 FE, 05, 05]
-104D3; [76 E8 FE, 05, A0]
+140E; [77 04 64, 05, 05]
-FDD1 14C0; [76 EA 02, 05, 05] # CANADIAN-ABORIGINAL first primary (compressible)
+140F; [77 04 6B, 05, 05]
-1401; [76 EA 09, 05, 05]
+1410; [77 04 72, 05, 05]
-1402; [76 EA 10, 05, 05]
+1411; [77 04 79, 05, 05]
-1403; [76 EA 17, 05, 05]
+1412; [77 04 80, 05, 05]
-1404; [76 EA 1E, 05, 05]
+1413; [77 04 87, 05, 05]
-1405; [76 EA 25, 05, 05]
+1414; [77 04 8E, 05, 05]
-1406; [76 EA 2C, 05, 05]
+1415; [77 04 95, 05, 05]
-1407; [76 EA 33, 05, 05]
+1416; [77 04 9C, 05, 05]
-1408; [76 EA 3A, 05, 05]
+1417; [77 04 A3, 05, 05]
-1409; [76 EA 41, 05, 05]
+1418; [77 04 AA, 05, 05]
-140A; [76 EA 48, 05, 05]
+1419; [77 04 B1, 05, 05]
-140B; [76 EA 4F, 05, 05]
+141A; [77 04 B8, 05, 05]
-140C; [76 EA 56, 05, 05]
+141B; [77 04 BF, 05, 05]
-140D; [76 EA 5D, 05, 05]
+141C; [77 04 C6, 05, 05]
-140E; [76 EA 64, 05, 05]
+141D; [77 04 CD, 05, 05]
-140F; [76 EA 6B, 05, 05]
+141E; [77 04 D4, 05, 05]
-1410; [76 EA 72, 05, 05]
+141F; [77 04 DB, 05, 05]
-1411; [76 EA 79, 05, 05]
+1420; [77 04 E2, 05, 05]
-1412; [76 EA 80, 05, 05]
+1421; [77 04 E9, 05, 05]
-1413; [76 EA 87, 05, 05]
+1422; [77 04 F0, 05, 05]
-1414; [76 EA 8E, 05, 05]
+1423; [77 04 F7, 05, 05]
-1415; [76 EA 95, 05, 05]
+1424; [77 04 FE, 05, 05]
-1416; [76 EA 9C, 05, 05]
+1425; [77 05 07, 05, 05]
-1417; [76 EA A3, 05, 05]
+1426; [77 05 0E, 05, 05]
-1418; [76 EA AA, 05, 05]
+1427; [77 05 15, 05, 05]
-1419; [76 EA B1, 05, 05]
+1428; [77 05 1C, 05, 05]
-141A; [76 EA B8, 05, 05]
+1429; [77 05 23, 05, 05]
-141B; [76 EA BF, 05, 05]
+142A; [77 05 2A, 05, 05]
-141C; [76 EA C6, 05, 05]
+142B; [77 05 31, 05, 05]
-141D; [76 EA CD, 05, 05]
+142C; [77 05 38, 05, 05]
-141E; [76 EA D4, 05, 05]
+142D; [77 05 3F, 05, 05]
-141F; [76 EA DB, 05, 05]
+142E; [77 05 46, 05, 05]
-1420; [76 EA E2, 05, 05]
+142F; [77 05 4D, 05, 05]
-1421; [76 EA E9, 05, 05]
+1430; [77 05 54, 05, 05]
-1422; [76 EA F0, 05, 05]
+1431; [77 05 5B, 05, 05]
-1423; [76 EA F7, 05, 05]
+1432; [77 05 62, 05, 05]
-1424; [76 EA FE, 05, 05]
+1433; [77 05 69, 05, 05]
-1425; [76 EB 07, 05, 05]
+1434; [77 05 70, 05, 05]
-1426; [76 EB 0E, 05, 05]
+1435; [77 05 77, 05, 05]
-1427; [76 EB 15, 05, 05]
+1436; [77 05 7E, 05, 05]
-1428; [76 EB 1C, 05, 05]
+1437; [77 05 85, 05, 05]
-1429; [76 EB 23, 05, 05]
+1438; [77 05 8C, 05, 05]
-142A; [76 EB 2A, 05, 05]
+1439; [77 05 93, 05, 05]
-142B; [76 EB 31, 05, 05]
+143A; [77 05 9A, 05, 05]
-142C; [76 EB 38, 05, 05]
+143B; [77 05 A1, 05, 05]
-142D; [76 EB 3F, 05, 05]
+143C; [77 05 A8, 05, 05]
-142E; [76 EB 46, 05, 05]
+143D; [77 05 AF, 05, 05]
-142F; [76 EB 4D, 05, 05]
+143E; [77 05 B6, 05, 05]
-1430; [76 EB 54, 05, 05]
+143F; [77 05 BD, 05, 05]
-1431; [76 EB 5B, 05, 05]
+1440; [77 05 C4, 05, 05]
-1432; [76 EB 62, 05, 05]
+1441; [77 05 CB, 05, 05]
-1433; [76 EB 69, 05, 05]
+1442; [77 05 D2, 05, 05]
-1434; [76 EB 70, 05, 05]
+1443; [77 05 D9, 05, 05]
-1435; [76 EB 77, 05, 05]
+1444; [77 05 E0, 05, 05]
-1436; [76 EB 7E, 05, 05]
+1445; [77 05 E7, 05, 05]
-1437; [76 EB 85, 05, 05]
+1446; [77 05 EE, 05, 05]
-1438; [76 EB 8C, 05, 05]
+1447; [77 05 F5, 05, 05]
-1439; [76 EB 93, 05, 05]
+1448; [77 05 FC, 05, 05]
-143A; [76 EB 9A, 05, 05]
+1449; [77 06 05, 05, 05]
-143B; [76 EB A1, 05, 05]
+144A; [77 06 0C, 05, 05]
-143C; [76 EB A8, 05, 05]
+144B; [77 06 13, 05, 05]
-143D; [76 EB AF, 05, 05]
+144C; [77 06 1A, 05, 05]
-143E; [76 EB B6, 05, 05]
+144D; [77 06 21, 05, 05]
-143F; [76 EB BD, 05, 05]
+144E; [77 06 28, 05, 05]
-1440; [76 EB C4, 05, 05]
+144F; [77 06 2F, 05, 05]
-1441; [76 EB CB, 05, 05]
+1450; [77 06 36, 05, 05]
-1442; [76 EB D2, 05, 05]
+1451; [77 06 3D, 05, 05]
-1443; [76 EB D9, 05, 05]
+1452; [77 06 44, 05, 05]
-1444; [76 EB E0, 05, 05]
+1453; [77 06 4B, 05, 05]
-1445; [76 EB E7, 05, 05]
+1454; [77 06 52, 05, 05]
-1446; [76 EB EE, 05, 05]
+1455; [77 06 59, 05, 05]
-1447; [76 EB F5, 05, 05]
+1456; [77 06 60, 05, 05]
-1448; [76 EB FC, 05, 05]
+1457; [77 06 67, 05, 05]
-1449; [76 EC 05, 05, 05]
+1458; [77 06 6E, 05, 05]
-144A; [76 EC 0C, 05, 05]
+1459; [77 06 75, 05, 05]
-144B; [76 EC 13, 05, 05]
+145A; [77 06 7C, 05, 05]
-144C; [76 EC 1A, 05, 05]
+145B; [77 06 83, 05, 05]
-144D; [76 EC 21, 05, 05]
+145C; [77 06 8A, 05, 05]
-144E; [76 EC 28, 05, 05]
+145D; [77 06 91, 05, 05]
-144F; [76 EC 2F, 05, 05]
+145E; [77 06 98, 05, 05]
-1450; [76 EC 36, 05, 05]
+145F; [77 06 9F, 05, 05]
-1451; [76 EC 3D, 05, 05]
+1460; [77 06 A6, 05, 05]
-1452; [76 EC 44, 05, 05]
+1461; [77 06 AD, 05, 05]
-1453; [76 EC 4B, 05, 05]
+1462; [77 06 B4, 05, 05]
-1454; [76 EC 52, 05, 05]
+1463; [77 06 BB, 05, 05]
-1455; [76 EC 59, 05, 05]
+1464; [77 06 C2, 05, 05]
-1456; [76 EC 60, 05, 05]
+1465; [77 06 C9, 05, 05]
-1457; [76 EC 67, 05, 05]
+1466; [77 06 D0, 05, 05]
-1458; [76 EC 6E, 05, 05]
+1467; [77 06 D7, 05, 05]
-1459; [76 EC 75, 05, 05]
+1468; [77 06 DE, 05, 05]
-145A; [76 EC 7C, 05, 05]
+1469; [77 06 E5, 05, 05]
-145B; [76 EC 83, 05, 05]
+146A; [77 06 EC, 05, 05]
-145C; [76 EC 8A, 05, 05]
+146B; [77 06 F3, 05, 05]
-145D; [76 EC 91, 05, 05]
+146C; [77 06 FA, 05, 05]
-145E; [76 EC 98, 05, 05]
+146D; [77 07 03, 05, 05]
-145F; [76 EC 9F, 05, 05]
+146E; [77 07 0A, 05, 05]
-1460; [76 EC A6, 05, 05]
+146F; [77 07 11, 05, 05]
-1461; [76 EC AD, 05, 05]
+1470; [77 07 18, 05, 05]
-1462; [76 EC B4, 05, 05]
+1471; [77 07 1F, 05, 05]
-1463; [76 EC BB, 05, 05]
+1472; [77 07 26, 05, 05]
-1464; [76 EC C2, 05, 05]
+1473; [77 07 2D, 05, 05]
-1465; [76 EC C9, 05, 05]
+1474; [77 07 34, 05, 05]
-1466; [76 EC D0, 05, 05]
+1475; [77 07 3B, 05, 05]
-1467; [76 EC D7, 05, 05]
+1476; [77 07 42, 05, 05]
-1468; [76 EC DE, 05, 05]
+1477; [77 07 49, 05, 05]
-1469; [76 EC E5, 05, 05]
+1478; [77 07 50, 05, 05]
-146A; [76 EC EC, 05, 05]
+1479; [77 07 57, 05, 05]
-146B; [76 EC F3, 05, 05]
+147A; [77 07 5E, 05, 05]
-146C; [76 EC FA, 05, 05]
+147B; [77 07 65, 05, 05]
-146D; [76 ED 03, 05, 05]
+147C; [77 07 6C, 05, 05]
-146E; [76 ED 0A, 05, 05]
+147D; [77 07 73, 05, 05]
-146F; [76 ED 11, 05, 05]
+147E; [77 07 7A, 05, 05]
-1470; [76 ED 18, 05, 05]
+147F; [77 07 81, 05, 05]
-1471; [76 ED 1F, 05, 05]
+1480; [77 07 88, 05, 05]
-1472; [76 ED 26, 05, 05]
+1481; [77 07 8F, 05, 05]
-1473; [76 ED 2D, 05, 05]
+1482; [77 07 96, 05, 05]
-1474; [76 ED 34, 05, 05]
+1483; [77 07 9D, 05, 05]
-1475; [76 ED 3B, 05, 05]
+1484; [77 07 A4, 05, 05]
-1476; [76 ED 42, 05, 05]
+1485; [77 07 AB, 05, 05]
-1477; [76 ED 49, 05, 05]
+1486; [77 07 B2, 05, 05]
-1478; [76 ED 50, 05, 05]
+1487; [77 07 B9, 05, 05]
-1479; [76 ED 57, 05, 05]
+1488; [77 07 C0, 05, 05]
-147A; [76 ED 5E, 05, 05]
+1489; [77 07 C7, 05, 05]
-147B; [76 ED 65, 05, 05]
+148A; [77 07 CE, 05, 05]
-147C; [76 ED 6C, 05, 05]
+148B; [77 07 D5, 05, 05]
-147D; [76 ED 73, 05, 05]
+148C; [77 07 DC, 05, 05]
-147E; [76 ED 7A, 05, 05]
+148D; [77 07 E3, 05, 05]
-147F; [76 ED 81, 05, 05]
+148E; [77 07 EA, 05, 05]
-1480; [76 ED 88, 05, 05]
+148F; [77 07 F1, 05, 05]
-1481; [76 ED 8F, 05, 05]
+1490; [77 07 F8, 05, 05]
-1482; [76 ED 96, 05, 05]
+1491; [77 07 FF, 05, 05]
-1483; [76 ED 9D, 05, 05]
+1492; [77 08 08, 05, 05]
-1484; [76 ED A4, 05, 05]
+1493; [77 08 0F, 05, 05]
-1485; [76 ED AB, 05, 05]
+1494; [77 08 16, 05, 05]
-1486; [76 ED B2, 05, 05]
+1495; [77 08 1D, 05, 05]
-1487; [76 ED B9, 05, 05]
+1496; [77 08 24, 05, 05]
-1488; [76 ED C0, 05, 05]
+1497; [77 08 2B, 05, 05]
-1489; [76 ED C7, 05, 05]
+1498; [77 08 32, 05, 05]
-148A; [76 ED CE, 05, 05]
+1499; [77 08 39, 05, 05]
-148B; [76 ED D5, 05, 05]
+149A; [77 08 40, 05, 05]
-148C; [76 ED DC, 05, 05]
+149B; [77 08 47, 05, 05]
-148D; [76 ED E3, 05, 05]
+149C; [77 08 4E, 05, 05]
-148E; [76 ED EA, 05, 05]
+149D; [77 08 55, 05, 05]
-148F; [76 ED F1, 05, 05]
+149E; [77 08 5C, 05, 05]
-1490; [76 ED F8, 05, 05]
+149F; [77 08 63, 05, 05]
-1491; [76 ED FF, 05, 05]
+14A0; [77 08 6A, 05, 05]
-1492; [76 EE 08, 05, 05]
+14A1; [77 08 71, 05, 05]
-1493; [76 EE 0F, 05, 05]
+14A2; [77 08 78, 05, 05]
-1494; [76 EE 16, 05, 05]
+14A3; [77 08 7F, 05, 05]
-1495; [76 EE 1D, 05, 05]
+14A4; [77 08 86, 05, 05]
-1496; [76 EE 24, 05, 05]
+14A5; [77 08 8D, 05, 05]
-1497; [76 EE 2B, 05, 05]
+14A6; [77 08 94, 05, 05]
-1498; [76 EE 32, 05, 05]
+14A7; [77 08 9B, 05, 05]
-1499; [76 EE 39, 05, 05]
+14A8; [77 08 A2, 05, 05]
-149A; [76 EE 40, 05, 05]
+14A9; [77 08 A9, 05, 05]
-149B; [76 EE 47, 05, 05]
+14AA; [77 08 B0, 05, 05]
-149C; [76 EE 4E, 05, 05]
+14AB; [77 08 B7, 05, 05]
-149D; [76 EE 55, 05, 05]
+14AC; [77 08 BE, 05, 05]
-149E; [76 EE 5C, 05, 05]
+14AD; [77 08 C5, 05, 05]
-149F; [76 EE 63, 05, 05]
+14AE; [77 08 CC, 05, 05]
-14A0; [76 EE 6A, 05, 05]
+14AF; [77 08 D3, 05, 05]
-14A1; [76 EE 71, 05, 05]
+14B0; [77 08 DA, 05, 05]
-14A2; [76 EE 78, 05, 05]
+14B1; [77 08 E1, 05, 05]
-14A3; [76 EE 7F, 05, 05]
+14B2; [77 08 E8, 05, 05]
-14A4; [76 EE 86, 05, 05]
+14B3; [77 08 EF, 05, 05]
-14A5; [76 EE 8D, 05, 05]
+14B4; [77 08 F6, 05, 05]
-14A6; [76 EE 94, 05, 05]
+14B5; [77 08 FD, 05, 05]
-14A7; [76 EE 9B, 05, 05]
+14B6; [77 09 06, 05, 05]
-14A8; [76 EE A2, 05, 05]
+14B7; [77 09 0D, 05, 05]
-14A9; [76 EE A9, 05, 05]
+14B8; [77 09 14, 05, 05]
-14AA; [76 EE B0, 05, 05]
+14B9; [77 09 1B, 05, 05]
-14AB; [76 EE B7, 05, 05]
+14BA; [77 09 22, 05, 05]
-14AC; [76 EE BE, 05, 05]
+14BB; [77 09 29, 05, 05]
-14AD; [76 EE C5, 05, 05]
+14BC; [77 09 30, 05, 05]
-14AE; [76 EE CC, 05, 05]
+14BD; [77 09 37, 05, 05]
-14AF; [76 EE D3, 05, 05]
+14BE; [77 09 3E, 05, 05]
-14B0; [76 EE DA, 05, 05]
+14BF; [77 09 45, 05, 05]
-14B1; [76 EE E1, 05, 05]
+14C0; [77 09 4C, 05, 05]
-14B2; [76 EE E8, 05, 05]
+14C1; [77 09 53, 05, 05]
-14B3; [76 EE EF, 05, 05]
+14C2; [77 09 5A, 05, 05]
-14B4; [76 EE F6, 05, 05]
+14C3; [77 09 61, 05, 05]
-14B5; [76 EE FD, 05, 05]
+14C4; [77 09 68, 05, 05]
-14B6; [76 EF 06, 05, 05]
+14C5; [77 09 6F, 05, 05]
-14B7; [76 EF 0D, 05, 05]
+14C6; [77 09 76, 05, 05]
-14B8; [76 EF 14, 05, 05]
+14C7; [77 09 7D, 05, 05]
-14B9; [76 EF 1B, 05, 05]
+14C8; [77 09 84, 05, 05]
-14BA; [76 EF 22, 05, 05]
+14C9; [77 09 8B, 05, 05]
-14BB; [76 EF 29, 05, 05]
+14CA; [77 09 92, 05, 05]
-14BC; [76 EF 30, 05, 05]
+14CB; [77 09 99, 05, 05]
-14BD; [76 EF 37, 05, 05]
+14CC; [77 09 A0, 05, 05]
-14BE; [76 EF 3E, 05, 05]
+14CD; [77 09 A7, 05, 05]
-14BF; [76 EF 45, 05, 05]
+14CE; [77 09 AE, 05, 05]
-14C0; [76 EF 4C, 05, 05]
+14CF; [77 09 B5, 05, 05]
-14C1; [76 EF 53, 05, 05]
+14D0; [77 09 BC, 05, 05]
-14C2; [76 EF 5A, 05, 05]
+14D1; [77 09 C3, 05, 05]
-14C3; [76 EF 61, 05, 05]
+14D2; [77 09 CA, 05, 05]
-14C4; [76 EF 68, 05, 05]
+14D3; [77 09 D1, 05, 05]
-14C5; [76 EF 6F, 05, 05]
+14D4; [77 09 D8, 05, 05]
-14C6; [76 EF 76, 05, 05]
+14D5; [77 09 DF, 05, 05]
-14C7; [76 EF 7D, 05, 05]
+14D6; [77 09 E6, 05, 05]
-14C8; [76 EF 84, 05, 05]
+14D7; [77 09 ED, 05, 05]
-14C9; [76 EF 8B, 05, 05]
+14D8; [77 09 F4, 05, 05]
-14CA; [76 EF 92, 05, 05]
+14D9; [77 09 FB, 05, 05]
-14CB; [76 EF 99, 05, 05]
+14DA; [77 0A 04, 05, 05]
-14CC; [76 EF A0, 05, 05]
+14DB; [77 0A 0B, 05, 05]
-14CD; [76 EF A7, 05, 05]
+14DC; [77 0A 12, 05, 05]
-14CE; [76 EF AE, 05, 05]
+14DD; [77 0A 19, 05, 05]
-14CF; [76 EF B5, 05, 05]
+14DE; [77 0A 20, 05, 05]
-14D0; [76 EF BC, 05, 05]
+14DF; [77 0A 27, 05, 05]
-14D1; [76 EF C3, 05, 05]
+14E0; [77 0A 2E, 05, 05]
-14D2; [76 EF CA, 05, 05]
+14E1; [77 0A 35, 05, 05]
-14D3; [76 EF D1, 05, 05]
+14E2; [77 0A 3C, 05, 05]
-14D4; [76 EF D8, 05, 05]
+14E3; [77 0A 43, 05, 05]
-14D5; [76 EF DF, 05, 05]
+14E4; [77 0A 4A, 05, 05]
-14D6; [76 EF E6, 05, 05]
+14E5; [77 0A 51, 05, 05]
-14D7; [76 EF ED, 05, 05]
+14E6; [77 0A 58, 05, 05]
-14D8; [76 EF F4, 05, 05]
+14E7; [77 0A 5F, 05, 05]
-14D9; [76 EF FB, 05, 05]
+14E8; [77 0A 66, 05, 05]
-14DA; [76 F0 04, 05, 05]
+14E9; [77 0A 6D, 05, 05]
-14DB; [76 F0 0B, 05, 05]
+14EA; [77 0A 74, 05, 05]
-14DC; [76 F0 12, 05, 05]
+14EB; [77 0A 7B, 05, 05]
-14DD; [76 F0 19, 05, 05]
+14EC; [77 0A 82, 05, 05]
-14DE; [76 F0 20, 05, 05]
+14ED; [77 0A 89, 05, 05]
-14DF; [76 F0 27, 05, 05]
+14EE; [77 0A 90, 05, 05]
-14E0; [76 F0 2E, 05, 05]
+14EF; [77 0A 97, 05, 05]
-14E1; [76 F0 35, 05, 05]
+14F0; [77 0A 9E, 05, 05]
-14E2; [76 F0 3C, 05, 05]
+14F1; [77 0A A5, 05, 05]
-14E3; [76 F0 43, 05, 05]
+14F2; [77 0A AC, 05, 05]
-14E4; [76 F0 4A, 05, 05]
+14F3; [77 0A B3, 05, 05]
-14E5; [76 F0 51, 05, 05]
+14F4; [77 0A BA, 05, 05]
-14E6; [76 F0 58, 05, 05]
+14F5; [77 0A C1, 05, 05]
-14E7; [76 F0 5F, 05, 05]
+14F6; [77 0A C8, 05, 05]
-14E8; [76 F0 66, 05, 05]
+14F7; [77 0A CF, 05, 05]
-14E9; [76 F0 6D, 05, 05]
+14F8; [77 0A D6, 05, 05]
-14EA; [76 F0 74, 05, 05]
+14F9; [77 0A DD, 05, 05]
-14EB; [76 F0 7B, 05, 05]
+14FA; [77 0A E4, 05, 05]
-14EC; [76 F0 82, 05, 05]
+14FB; [77 0A EB, 05, 05]
-14ED; [76 F0 89, 05, 05]
+14FC; [77 0A F2, 05, 05]
-14EE; [76 F0 90, 05, 05]
+14FD; [77 0A F9, 05, 05]
-14EF; [76 F0 97, 05, 05]
+14FE; [77 0B 02, 05, 05]
-14F0; [76 F0 9E, 05, 05]
+14FF; [77 0B 09, 05, 05]
-14F1; [76 F0 A5, 05, 05]
+1500; [77 0B 10, 05, 05]
-14F2; [76 F0 AC, 05, 05]
+1501; [77 0B 17, 05, 05]
-14F3; [76 F0 B3, 05, 05]
+1502; [77 0B 1E, 05, 05]
-14F4; [76 F0 BA, 05, 05]
+1503; [77 0B 25, 05, 05]
-14F5; [76 F0 C1, 05, 05]
+1504; [77 0B 2C, 05, 05]
-14F6; [76 F0 C8, 05, 05]
+1505; [77 0B 33, 05, 05]
-14F7; [76 F0 CF, 05, 05]
+1506; [77 0B 3A, 05, 05]
-14F8; [76 F0 D6, 05, 05]
+1507; [77 0B 41, 05, 05]
-14F9; [76 F0 DD, 05, 05]
+1508; [77 0B 48, 05, 05]
-14FA; [76 F0 E4, 05, 05]
+1509; [77 0B 4F, 05, 05]
-14FB; [76 F0 EB, 05, 05]
+150A; [77 0B 56, 05, 05]
-14FC; [76 F0 F2, 05, 05]
+150B; [77 0B 5D, 05, 05]
-14FD; [76 F0 F9, 05, 05]
+150C; [77 0B 64, 05, 05]
-14FE; [76 F1 02, 05, 05]
+150D; [77 0B 6B, 05, 05]
-14FF; [76 F1 09, 05, 05]
+150E; [77 0B 72, 05, 05]
-1500; [76 F1 10, 05, 05]
+150F; [77 0B 79, 05, 05]
-1501; [76 F1 17, 05, 05]
+1510; [77 0B 80, 05, 05]
-1502; [76 F1 1E, 05, 05]
+1511; [77 0B 87, 05, 05]
-1503; [76 F1 25, 05, 05]
+1512; [77 0B 8E, 05, 05]
-1504; [76 F1 2C, 05, 05]
+1513; [77 0B 95, 05, 05]
-1505; [76 F1 33, 05, 05]
+1514; [77 0B 9C, 05, 05]
-1506; [76 F1 3A, 05, 05]
+1515; [77 0B A3, 05, 05]
-1507; [76 F1 41, 05, 05]
+1516; [77 0B AA, 05, 05]
-1508; [76 F1 48, 05, 05]
+1517; [77 0B B1, 05, 05]
-1509; [76 F1 4F, 05, 05]
+1518; [77 0B B8, 05, 05]
-150A; [76 F1 56, 05, 05]
+1519; [77 0B BF, 05, 05]
-150B; [76 F1 5D, 05, 05]
+151A; [77 0B C6, 05, 05]
-150C; [76 F1 64, 05, 05]
+151B; [77 0B CD, 05, 05]
-150D; [76 F1 6B, 05, 05]
+151C; [77 0B D4, 05, 05]
-150E; [76 F1 72, 05, 05]
+151D; [77 0B DB, 05, 05]
-150F; [76 F1 79, 05, 05]
+151E; [77 0B E2, 05, 05]
-1510; [76 F1 80, 05, 05]
+151F; [77 0B E9, 05, 05]
-1511; [76 F1 87, 05, 05]
+1520; [77 0B F0, 05, 05]
-1512; [76 F1 8E, 05, 05]
+1521; [77 0B F7, 05, 05]
-1513; [76 F1 95, 05, 05]
+1522; [77 0B FE, 05, 05]
-1514; [76 F1 9C, 05, 05]
+1523; [77 0C 07, 05, 05]
-1515; [76 F1 A3, 05, 05]
+1524; [77 0C 0E, 05, 05]
-1516; [76 F1 AA, 05, 05]
+1525; [77 0C 15, 05, 05]
-1517; [76 F1 B1, 05, 05]
+1526; [77 0C 1C, 05, 05]
-1518; [76 F1 B8, 05, 05]
+1527; [77 0C 23, 05, 05]
-1519; [76 F1 BF, 05, 05]
+1528; [77 0C 2A, 05, 05]
-151A; [76 F1 C6, 05, 05]
+1529; [77 0C 31, 05, 05]
-151B; [76 F1 CD, 05, 05]
+152A; [77 0C 38, 05, 05]
-151C; [76 F1 D4, 05, 05]
+152B; [77 0C 3F, 05, 05]
-151D; [76 F1 DB, 05, 05]
+152C; [77 0C 46, 05, 05]
-151E; [76 F1 E2, 05, 05]
+152D; [77 0C 4D, 05, 05]
-151F; [76 F1 E9, 05, 05]
+152E; [77 0C 54, 05, 05]
-1520; [76 F1 F0, 05, 05]
+152F; [77 0C 5B, 05, 05]
-1521; [76 F1 F7, 05, 05]
+1530; [77 0C 62, 05, 05]
-1522; [76 F1 FE, 05, 05]
+1531; [77 0C 69, 05, 05]
-1523; [76 F2 07, 05, 05]
+1532; [77 0C 70, 05, 05]
-1524; [76 F2 0E, 05, 05]
+1533; [77 0C 77, 05, 05]
-1525; [76 F2 15, 05, 05]
+1534; [77 0C 7E, 05, 05]
-1526; [76 F2 1C, 05, 05]
+1535; [77 0C 85, 05, 05]
-1527; [76 F2 23, 05, 05]
+1536; [77 0C 8C, 05, 05]
-1528; [76 F2 2A, 05, 05]
+1537; [77 0C 93, 05, 05]
-1529; [76 F2 31, 05, 05]
+1538; [77 0C 9A, 05, 05]
-152A; [76 F2 38, 05, 05]
+1539; [77 0C A1, 05, 05]
-152B; [76 F2 3F, 05, 05]
+153A; [77 0C A8, 05, 05]
-152C; [76 F2 46, 05, 05]
+153B; [77 0C AF, 05, 05]
-152D; [76 F2 4D, 05, 05]
+153C; [77 0C B6, 05, 05]
-152E; [76 F2 54, 05, 05]
+153D; [77 0C BD, 05, 05]
-152F; [76 F2 5B, 05, 05]
+153E; [77 0C C4, 05, 05]
-1530; [76 F2 62, 05, 05]
+153F; [77 0C CB, 05, 05]
-1531; [76 F2 69, 05, 05]
+1540; [77 0C D2, 05, 05]
-1532; [76 F2 70, 05, 05]
+1541; [77 0C D9, 05, 05]
-1533; [76 F2 77, 05, 05]
+1542; [77 0C E0, 05, 05]
-1534; [76 F2 7E, 05, 05]
+1543; [77 0C E7, 05, 05]
-1535; [76 F2 85, 05, 05]
+1544; [77 0C EE, 05, 05]
-1536; [76 F2 8C, 05, 05]
+1545; [77 0C F5, 05, 05]
-1537; [76 F2 93, 05, 05]
+1546; [77 0C FC, 05, 05]
-1538; [76 F2 9A, 05, 05]
+1547; [77 0D 05, 05, 05]
-1539; [76 F2 A1, 05, 05]
+1548; [77 0D 0C, 05, 05]
-153A; [76 F2 A8, 05, 05]
+1549; [77 0D 13, 05, 05]
-153B; [76 F2 AF, 05, 05]
+154A; [77 0D 1A, 05, 05]
-153C; [76 F2 B6, 05, 05]
+154B; [77 0D 21, 05, 05]
-153D; [76 F2 BD, 05, 05]
+154C; [77 0D 28, 05, 05]
-153E; [76 F2 C4, 05, 05]
+154D; [77 0D 2F, 05, 05]
-153F; [76 F2 CB, 05, 05]
+154E; [77 0D 36, 05, 05]
-1540; [76 F2 D2, 05, 05]
+154F; [77 0D 3D, 05, 05]
-1541; [76 F2 D9, 05, 05]
+1550; [77 0D 44, 05, 05]
-1542; [76 F2 E0, 05, 05]
+1551; [77 0D 4B, 05, 05]
-1543; [76 F2 E7, 05, 05]
+1552; [77 0D 52, 05, 05]
-1544; [76 F2 EE, 05, 05]
+1553; [77 0D 59, 05, 05]
-1545; [76 F2 F5, 05, 05]
+1554; [77 0D 60, 05, 05]
-1546; [76 F2 FC, 05, 05]
+1555; [77 0D 67, 05, 05]
-1547; [76 F3 05, 05, 05]
+1556; [77 0D 6E, 05, 05]
-1548; [76 F3 0C, 05, 05]
+1557; [77 0D 75, 05, 05]
-1549; [76 F3 13, 05, 05]
+1558; [77 0D 7C, 05, 05]
-154A; [76 F3 1A, 05, 05]
+1559; [77 0D 83, 05, 05]
-154B; [76 F3 21, 05, 05]
+155A; [77 0D 8A, 05, 05]
-154C; [76 F3 28, 05, 05]
+155B; [77 0D 91, 05, 05]
-154D; [76 F3 2F, 05, 05]
+155C; [77 0D 98, 05, 05]
-154E; [76 F3 36, 05, 05]
+155D; [77 0D 9F, 05, 05]
-154F; [76 F3 3D, 05, 05]
+155E; [77 0D A6, 05, 05]
-1550; [76 F3 44, 05, 05]
+155F; [77 0D AD, 05, 05]
-1551; [76 F3 4B, 05, 05]
+1560; [77 0D B4, 05, 05]
-1552; [76 F3 52, 05, 05]
+1561; [77 0D BB, 05, 05]
-1553; [76 F3 59, 05, 05]
+1562; [77 0D C2, 05, 05]
-1554; [76 F3 60, 05, 05]
+1563; [77 0D C9, 05, 05]
-1555; [76 F3 67, 05, 05]
+1564; [77 0D D0, 05, 05]
-1556; [76 F3 6E, 05, 05]
+1565; [77 0D D7, 05, 05]
-1557; [76 F3 75, 05, 05]
+1566; [77 0D DE, 05, 05]
-1558; [76 F3 7C, 05, 05]
+1567; [77 0D E5, 05, 05]
-1559; [76 F3 83, 05, 05]
+1568; [77 0D EC, 05, 05]
-155A; [76 F3 8A, 05, 05]
+1569; [77 0D F3, 05, 05]
-155B; [76 F3 91, 05, 05]
+156A; [77 0D FA, 05, 05]
-155C; [76 F3 98, 05, 05]
+156B; [77 0E 03, 05, 05]
-155D; [76 F3 9F, 05, 05]
+156C; [77 0E 0A, 05, 05]
-155E; [76 F3 A6, 05, 05]
+156D; [77 0E 11, 05, 05]
-155F; [76 F3 AD, 05, 05]
+156E; [77 0E 18, 05, 05]
-1560; [76 F3 B4, 05, 05]
+156F; [77 0E 1F, 05, 05]
-1561; [76 F3 BB, 05, 05]
+1570; [77 0E 26, 05, 05]
-1562; [76 F3 C2, 05, 05]
+1571; [77 0E 2D, 05, 05]
-1563; [76 F3 C9, 05, 05]
+1572; [77 0E 34, 05, 05]
-1564; [76 F3 D0, 05, 05]
+1573; [77 0E 3B, 05, 05]
-1565; [76 F3 D7, 05, 05]
+1574; [77 0E 42, 05, 05]
-1566; [76 F3 DE, 05, 05]
+1575; [77 0E 49, 05, 05]
-1567; [76 F3 E5, 05, 05]
+1576; [77 0E 50, 05, 05]
-1568; [76 F3 EC, 05, 05]
+1577; [77 0E 57, 05, 05]
-1569; [76 F3 F3, 05, 05]
+1578; [77 0E 5E, 05, 05]
-156A; [76 F3 FA, 05, 05]
+1579; [77 0E 65, 05, 05]
-156B; [76 F4 03, 05, 05]
+157A; [77 0E 6C, 05, 05]
-156C; [76 F4 0A, 05, 05]
+157B; [77 0E 73, 05, 05]
-156D; [76 F4 11, 05, 05]
+157D; [77 0E 7A, 05, 05]
-156E; [76 F4 18, 05, 05]
+166F; [77 0E 81, 05, 05]
-156F; [76 F4 1F, 05, 05]
+157E; [77 0E 88, 05, 05]
-1570; [76 F4 26, 05, 05]
+157F; [77 0E 8F, 05, 05]
-1571; [76 F4 2D, 05, 05]
+1580; [77 0E 96, 05, 05]
-1572; [76 F4 34, 05, 05]
+1581; [77 0E 9D, 05, 05]
-1573; [76 F4 3B, 05, 05]
+1582; [77 0E A4, 05, 05]
-1574; [76 F4 42, 05, 05]
+1583; [77 0E AB, 05, 05]
-1575; [76 F4 49, 05, 05]
+1584; [77 0E B2, 05, 05]
-1576; [76 F4 50, 05, 05]
+1585; [77 0E B9, 05, 05]
-1577; [76 F4 57, 05, 05]
+1586; [77 0E C0, 05, 05]
-1578; [76 F4 5E, 05, 05]
+1587; [77 0E C7, 05, 05]
-1579; [76 F4 65, 05, 05]
+1588; [77 0E CE, 05, 05]
-157A; [76 F4 6C, 05, 05]
+1589; [77 0E D5, 05, 05]
-157B; [76 F4 73, 05, 05]
+158A; [77 0E DC, 05, 05]
-157D; [76 F4 7A, 05, 05]
+158B; [77 0E E3, 05, 05]
-166F; [76 F4 81, 05, 05]
+158C; [77 0E EA, 05, 05]
-157E; [76 F4 88, 05, 05]
+158D; [77 0E F1, 05, 05]
-157F; [76 F4 8F, 05, 05]
+1670; [77 0E F8, 05, 05]
-1580; [76 F4 96, 05, 05]
+158E; [77 0E FF, 05, 05]
-1581; [76 F4 9D, 05, 05]
+158F; [77 0F 08, 05, 05]
-1582; [76 F4 A4, 05, 05]
+1590; [77 0F 0F, 05, 05]
-1583; [76 F4 AB, 05, 05]
+1591; [77 0F 16, 05, 05]
-1584; [76 F4 B2, 05, 05]
+1592; [77 0F 1D, 05, 05]
-1585; [76 F4 B9, 05, 05]
+1593; [77 0F 24, 05, 05]
-1586; [76 F4 C0, 05, 05]
+1594; [77 0F 2B, 05, 05]
-1587; [76 F4 C7, 05, 05]
+1595; [77 0F 32, 05, 05]
-1588; [76 F4 CE, 05, 05]
+1671; [77 0F 39, 05, 05]
-1589; [76 F4 D5, 05, 05]
+1672; [77 0F 40, 05, 05]
-158A; [76 F4 DC, 05, 05]
+1673; [77 0F 47, 05, 05]
-158B; [76 F4 E3, 05, 05]
+1674; [77 0F 4E, 05, 05]
-158C; [76 F4 EA, 05, 05]
+1675; [77 0F 55, 05, 05]
-158D; [76 F4 F1, 05, 05]
+1676; [77 0F 5C, 05, 05]
-1670; [76 F4 F8, 05, 05]
+1596; [77 0F 63, 05, 05]
-158E; [76 F4 FF, 05, 05]
+1597; [77 0F 6A, 05, 05]
-158F; [76 F5 08, 05, 05]
+1598; [77 0F 71, 05, 05]
-1590; [76 F5 0F, 05, 05]
+1599; [77 0F 78, 05, 05]
-1591; [76 F5 16, 05, 05]
+159A; [77 0F 7F, 05, 05]
-1592; [76 F5 1D, 05, 05]
+159B; [77 0F 86, 05, 05]
-1593; [76 F5 24, 05, 05]
+159C; [77 0F 8D, 05, 05]
-1594; [76 F5 2B, 05, 05]
+159D; [77 0F 94, 05, 05]
-1595; [76 F5 32, 05, 05]
+159E; [77 0F 9B, 05, 05]
-1671; [76 F5 39, 05, 05]
+159F; [77 0F A2, 05, 05]
-1672; [76 F5 40, 05, 05]
+15A0; [77 0F A9, 05, 05]
-1673; [76 F5 47, 05, 05]
+15A1; [77 0F B0, 05, 05]
-1674; [76 F5 4E, 05, 05]
+15A2; [77 0F B7, 05, 05]
-1675; [76 F5 55, 05, 05]
+15A3; [77 0F BE, 05, 05]
-1676; [76 F5 5C, 05, 05]
+15A4; [77 0F C5, 05, 05]
-1596; [76 F5 63, 05, 05]
+15A5; [77 0F CC, 05, 05]
-1597; [76 F5 6A, 05, 05]
+15A6; [77 0F D3, 05, 05]
-1598; [76 F5 71, 05, 05]
+157C; [77 0F DA, 05, 05]
-1599; [76 F5 78, 05, 05]
+15A7; [77 0F E1, 05, 05]
-159A; [76 F5 7F, 05, 05]
+15A8; [77 0F E8, 05, 05]
-159B; [76 F5 86, 05, 05]
+15A9; [77 0F EF, 05, 05]
-159C; [76 F5 8D, 05, 05]
+15AA; [77 0F F6, 05, 05]
-159D; [76 F5 94, 05, 05]
+15AB; [77 0F FD, 05, 05]
-159E; [76 F5 9B, 05, 05]
+15AC; [77 10 06, 05, 05]
-159F; [76 F5 A2, 05, 05]
+15AD; [77 10 0D, 05, 05]
-15A0; [76 F5 A9, 05, 05]
+15AE; [77 10 14, 05, 05]
-15A1; [76 F5 B0, 05, 05]
+15AF; [77 10 1B, 05, 05]
-15A2; [76 F5 B7, 05, 05]
+15B0; [77 10 22, 05, 05]
-15A3; [76 F5 BE, 05, 05]
+15B1; [77 10 29, 05, 05]
-15A4; [76 F5 C5, 05, 05]
+15B2; [77 10 30, 05, 05]
-15A5; [76 F5 CC, 05, 05]
+15B3; [77 10 37, 05, 05]
-15A6; [76 F5 D3, 05, 05]
+15B4; [77 10 3E, 05, 05]
-157C; [76 F5 DA, 05, 05]
+15B5; [77 10 45, 05, 05]
-15A7; [76 F5 E1, 05, 05]
+15B6; [77 10 4C, 05, 05]
-15A8; [76 F5 E8, 05, 05]
+15B7; [77 10 53, 05, 05]
-15A9; [76 F5 EF, 05, 05]
+15B8; [77 10 5A, 05, 05]
-15AA; [76 F5 F6, 05, 05]
+15B9; [77 10 61, 05, 05]
-15AB; [76 F5 FD, 05, 05]
+15BA; [77 10 68, 05, 05]
-15AC; [76 F6 06, 05, 05]
+15BB; [77 10 6F, 05, 05]
-15AD; [76 F6 0D, 05, 05]
+15BC; [77 10 76, 05, 05]
-15AE; [76 F6 14, 05, 05]
+15BD; [77 10 7D, 05, 05]
-15AF; [76 F6 1B, 05, 05]
+15BE; [77 10 84, 05, 05]
-15B0; [76 F6 22, 05, 05]
+15BF; [77 10 8B, 05, 05]
-15B1; [76 F6 29, 05, 05]
+15C0; [77 10 92, 05, 05]
-15B2; [76 F6 30, 05, 05]
+15C1; [77 10 99, 05, 05]
-15B3; [76 F6 37, 05, 05]
+15C2; [77 10 A0, 05, 05]
-15B4; [76 F6 3E, 05, 05]
+15C3; [77 10 A7, 05, 05]
-15B5; [76 F6 45, 05, 05]
+15C4; [77 10 AE, 05, 05]
-15B6; [76 F6 4C, 05, 05]
+15C5; [77 10 B5, 05, 05]
-15B7; [76 F6 53, 05, 05]
+15C6; [77 10 BC, 05, 05]
-15B8; [76 F6 5A, 05, 05]
+15C7; [77 10 C3, 05, 05]
-15B9; [76 F6 61, 05, 05]
+15C8; [77 10 CA, 05, 05]
-15BA; [76 F6 68, 05, 05]
+15C9; [77 10 D1, 05, 05]
-15BB; [76 F6 6F, 05, 05]
+15CA; [77 10 D8, 05, 05]
-15BC; [76 F6 76, 05, 05]
+15CB; [77 10 DF, 05, 05]
-15BD; [76 F6 7D, 05, 05]
+15CC; [77 10 E6, 05, 05]
-15BE; [76 F6 84, 05, 05]
+15CD; [77 10 ED, 05, 05]
-15BF; [76 F6 8B, 05, 05]
+15CE; [77 10 F4, 05, 05]
-15C0; [76 F6 92, 05, 05]
+15CF; [77 10 FB, 05, 05]
-15C1; [76 F6 99, 05, 05]
+15D0; [77 11 04, 05, 05]
-15C2; [76 F6 A0, 05, 05]
+15D1; [77 11 0B, 05, 05]
-15C3; [76 F6 A7, 05, 05]
+15D2; [77 11 12, 05, 05]
-15C4; [76 F6 AE, 05, 05]
+15D3; [77 11 19, 05, 05]
-15C5; [76 F6 B5, 05, 05]
+15D4; [77 11 20, 05, 05]
-15C6; [76 F6 BC, 05, 05]
+15D5; [77 11 27, 05, 05]
-15C7; [76 F6 C3, 05, 05]
+15D6; [77 11 2E, 05, 05]
-15C8; [76 F6 CA, 05, 05]
+15D7; [77 11 35, 05, 05]
-15C9; [76 F6 D1, 05, 05]
+15D8; [77 11 3C, 05, 05]
-15CA; [76 F6 D8, 05, 05]
+15D9; [77 11 43, 05, 05]
-15CB; [76 F6 DF, 05, 05]
+15DA; [77 11 4A, 05, 05]
-15CC; [76 F6 E6, 05, 05]
+15DB; [77 11 51, 05, 05]
-15CD; [76 F6 ED, 05, 05]
+15DC; [77 11 58, 05, 05]
-15CE; [76 F6 F4, 05, 05]
+15DD; [77 11 5F, 05, 05]
-15CF; [76 F6 FB, 05, 05]
+15DE; [77 11 66, 05, 05]
-15D0; [76 F7 04, 05, 05]
+15DF; [77 11 6D, 05, 05]
-15D1; [76 F7 0B, 05, 05]
+15E0; [77 11 74, 05, 05]
-15D2; [76 F7 12, 05, 05]
+15E1; [77 11 7B, 05, 05]
-15D3; [76 F7 19, 05, 05]
+15E2; [77 11 82, 05, 05]
-15D4; [76 F7 20, 05, 05]
+15E3; [77 11 89, 05, 05]
-15D5; [76 F7 27, 05, 05]
+15E4; [77 11 90, 05, 05]
-15D6; [76 F7 2E, 05, 05]
+15E5; [77 11 97, 05, 05]
-15D7; [76 F7 35, 05, 05]
+15E6; [77 11 9E, 05, 05]
-15D8; [76 F7 3C, 05, 05]
+15E7; [77 11 A5, 05, 05]
-15D9; [76 F7 43, 05, 05]
+15E8; [77 11 AC, 05, 05]
-15DA; [76 F7 4A, 05, 05]
+15E9; [77 11 B3, 05, 05]
-15DB; [76 F7 51, 05, 05]
+15EA; [77 11 BA, 05, 05]
-15DC; [76 F7 58, 05, 05]
+15EB; [77 11 C1, 05, 05]
-15DD; [76 F7 5F, 05, 05]
+15EC; [77 11 C8, 05, 05]
-15DE; [76 F7 66, 05, 05]
+15ED; [77 11 CF, 05, 05]
-15DF; [76 F7 6D, 05, 05]
+15EE; [77 11 D6, 05, 05]
-15E0; [76 F7 74, 05, 05]
+15EF; [77 11 DD, 05, 05]
-15E1; [76 F7 7B, 05, 05]
+15F0; [77 11 E4, 05, 05]
-15E2; [76 F7 82, 05, 05]
+15F1; [77 11 EB, 05, 05]
-15E3; [76 F7 89, 05, 05]
+15F2; [77 11 F2, 05, 05]
-15E4; [76 F7 90, 05, 05]
+15F3; [77 11 F9, 05, 05]
-15E5; [76 F7 97, 05, 05]
+15F4; [77 12 02, 05, 05]
-15E6; [76 F7 9E, 05, 05]
+15F5; [77 12 09, 05, 05]
-15E7; [76 F7 A5, 05, 05]
+15F6; [77 12 10, 05, 05]
-15E8; [76 F7 AC, 05, 05]
+15F7; [77 12 17, 05, 05]
-15E9; [76 F7 B3, 05, 05]
+15F8; [77 12 1E, 05, 05]
-15EA; [76 F7 BA, 05, 05]
+15F9; [77 12 25, 05, 05]
-15EB; [76 F7 C1, 05, 05]
+15FA; [77 12 2C, 05, 05]
-15EC; [76 F7 C8, 05, 05]
+15FB; [77 12 33, 05, 05]
-15ED; [76 F7 CF, 05, 05]
+15FC; [77 12 3A, 05, 05]
-15EE; [76 F7 D6, 05, 05]
+15FD; [77 12 41, 05, 05]
-15EF; [76 F7 DD, 05, 05]
+15FE; [77 12 48, 05, 05]
-15F0; [76 F7 E4, 05, 05]
+15FF; [77 12 4F, 05, 05]
-15F1; [76 F7 EB, 05, 05]
+1600; [77 12 56, 05, 05]
-15F2; [76 F7 F2, 05, 05]
+1601; [77 12 5D, 05, 05]
-15F3; [76 F7 F9, 05, 05]
+1602; [77 12 64, 05, 05]
-15F4; [76 F8 02, 05, 05]
+1603; [77 12 6B, 05, 05]
-15F5; [76 F8 09, 05, 05]
+1604; [77 12 72, 05, 05]
-15F6; [76 F8 10, 05, 05]
+1605; [77 12 79, 05, 05]
-15F7; [76 F8 17, 05, 05]
+1606; [77 12 80, 05, 05]
-15F8; [76 F8 1E, 05, 05]
+1607; [77 12 87, 05, 05]
-15F9; [76 F8 25, 05, 05]
+1608; [77 12 8E, 05, 05]
-15FA; [76 F8 2C, 05, 05]
+1609; [77 12 95, 05, 05]
-15FB; [76 F8 33, 05, 05]
+160A; [77 12 9C, 05, 05]
-15FC; [76 F8 3A, 05, 05]
+160B; [77 12 A3, 05, 05]
-15FD; [76 F8 41, 05, 05]
+160C; [77 12 AA, 05, 05]
-15FE; [76 F8 48, 05, 05]
+160D; [77 12 B1, 05, 05]
-15FF; [76 F8 4F, 05, 05]
+160E; [77 12 B8, 05, 05]
-1600; [76 F8 56, 05, 05]
+160F; [77 12 BF, 05, 05]
-1601; [76 F8 5D, 05, 05]
+1610; [77 12 C6, 05, 05]
-1602; [76 F8 64, 05, 05]
+1611; [77 12 CD, 05, 05]
-1603; [76 F8 6B, 05, 05]
+1612; [77 12 D4, 05, 05]
-1604; [76 F8 72, 05, 05]
+1613; [77 12 DB, 05, 05]
-1605; [76 F8 79, 05, 05]
+1614; [77 12 E2, 05, 05]
-1606; [76 F8 80, 05, 05]
+1615; [77 12 E9, 05, 05]
-1607; [76 F8 87, 05, 05]
+1616; [77 12 F0, 05, 05]
-1608; [76 F8 8E, 05, 05]
+1617; [77 12 F7, 05, 05]
-1609; [76 F8 95, 05, 05]
+1618; [77 12 FE, 05, 05]
-160A; [76 F8 9C, 05, 05]
+1619; [77 13 07, 05, 05]
-160B; [76 F8 A3, 05, 05]
+161A; [77 13 0E, 05, 05]
-160C; [76 F8 AA, 05, 05]
+161B; [77 13 15, 05, 05]
-160D; [76 F8 B1, 05, 05]
+161C; [77 13 1C, 05, 05]
-160E; [76 F8 B8, 05, 05]
+161D; [77 13 23, 05, 05]
-160F; [76 F8 BF, 05, 05]
+161E; [77 13 2A, 05, 05]
-1610; [76 F8 C6, 05, 05]
+161F; [77 13 31, 05, 05]
-1611; [76 F8 CD, 05, 05]
+1620; [77 13 38, 05, 05]
-1612; [76 F8 D4, 05, 05]
+1621; [77 13 3F, 05, 05]
-1613; [76 F8 DB, 05, 05]
+1622; [77 13 46, 05, 05]
-1614; [76 F8 E2, 05, 05]
+1623; [77 13 4D, 05, 05]
-1615; [76 F8 E9, 05, 05]
+1624; [77 13 54, 05, 05]
-1616; [76 F8 F0, 05, 05]
+1625; [77 13 5B, 05, 05]
-1617; [76 F8 F7, 05, 05]
+1626; [77 13 62, 05, 05]
-1618; [76 F8 FE, 05, 05]
+1627; [77 13 69, 05, 05]
-1619; [76 F9 07, 05, 05]
+1628; [77 13 70, 05, 05]
-161A; [76 F9 0E, 05, 05]
+1629; [77 13 77, 05, 05]
-161B; [76 F9 15, 05, 05]
+162A; [77 13 7E, 05, 05]
-161C; [76 F9 1C, 05, 05]
+162B; [77 13 85, 05, 05]
-161D; [76 F9 23, 05, 05]
+162C; [77 13 8C, 05, 05]
-161E; [76 F9 2A, 05, 05]
+162D; [77 13 93, 05, 05]
-161F; [76 F9 31, 05, 05]
+162E; [77 13 9A, 05, 05]
-1620; [76 F9 38, 05, 05]
+162F; [77 13 A1, 05, 05]
-1621; [76 F9 3F, 05, 05]
+1630; [77 13 A8, 05, 05]
-1622; [76 F9 46, 05, 05]
+1631; [77 13 AF, 05, 05]
-1623; [76 F9 4D, 05, 05]
+1632; [77 13 B6, 05, 05]
-1624; [76 F9 54, 05, 05]
+1633; [77 13 BD, 05, 05]
-1625; [76 F9 5B, 05, 05]
+1634; [77 13 C4, 05, 05]
-1626; [76 F9 62, 05, 05]
+1635; [77 13 CB, 05, 05]
-1627; [76 F9 69, 05, 05]
+1636; [77 13 D2, 05, 05]
-1628; [76 F9 70, 05, 05]
+1637; [77 13 D9, 05, 05]
-1629; [76 F9 77, 05, 05]
+1638; [77 13 E0, 05, 05]
-162A; [76 F9 7E, 05, 05]
+1639; [77 13 E7, 05, 05]
-162B; [76 F9 85, 05, 05]
+163A; [77 13 EE, 05, 05]
-162C; [76 F9 8C, 05, 05]
+163B; [77 13 F5, 05, 05]
-162D; [76 F9 93, 05, 05]
+163C; [77 13 FC, 05, 05]
-162E; [76 F9 9A, 05, 05]
+163D; [77 14 05, 05, 05]
-162F; [76 F9 A1, 05, 05]
+163E; [77 14 0C, 05, 05]
-1630; [76 F9 A8, 05, 05]
+163F; [77 14 13, 05, 05]
-1631; [76 F9 AF, 05, 05]
+1640; [77 14 1A, 05, 05]
-1632; [76 F9 B6, 05, 05]
+1641; [77 14 21, 05, 05]
-1633; [76 F9 BD, 05, 05]
+1642; [77 14 28, 05, 05]
-1634; [76 F9 C4, 05, 05]
+1643; [77 14 2F, 05, 05]
-1635; [76 F9 CB, 05, 05]
+1644; [77 14 36, 05, 05]
-1636; [76 F9 D2, 05, 05]
+1645; [77 14 3D, 05, 05]
-1637; [76 F9 D9, 05, 05]
+1646; [77 14 44, 05, 05]
-1638; [76 F9 E0, 05, 05]
+1647; [77 14 4B, 05, 05]
-1639; [76 F9 E7, 05, 05]
+1648; [77 14 52, 05, 05]
-163A; [76 F9 EE, 05, 05]
+1649; [77 14 59, 05, 05]
-163B; [76 F9 F5, 05, 05]
+164A; [77 14 60, 05, 05]
-163C; [76 F9 FC, 05, 05]
+164B; [77 14 67, 05, 05]
-163D; [76 FA 05, 05, 05]
+164C; [77 14 6E, 05, 05]
-163E; [76 FA 0C, 05, 05]
+164D; [77 14 75, 05, 05]
-163F; [76 FA 13, 05, 05]
+164E; [77 14 7C, 05, 05]
-1640; [76 FA 1A, 05, 05]
+164F; [77 14 83, 05, 05]
-1641; [76 FA 21, 05, 05]
+1650; [77 14 8A, 05, 05]
-1642; [76 FA 28, 05, 05]
+1651; [77 14 91, 05, 05]
-1643; [76 FA 2F, 05, 05]
+1652; [77 14 98, 05, 05]
-1644; [76 FA 36, 05, 05]
+1653; [77 14 9F, 05, 05]
-1645; [76 FA 3D, 05, 05]
+1654; [77 14 A6, 05, 05]
-1646; [76 FA 44, 05, 05]
+1655; [77 14 AD, 05, 05]
-1647; [76 FA 4B, 05, 05]
+1656; [77 14 B4, 05, 05]
-1648; [76 FA 52, 05, 05]
+1657; [77 14 BB, 05, 05]
-1649; [76 FA 59, 05, 05]
+1658; [77 14 C2, 05, 05]
-164A; [76 FA 60, 05, 05]
+1659; [77 14 C9, 05, 05]
-164B; [76 FA 67, 05, 05]
+165A; [77 14 D0, 05, 05]
-164C; [76 FA 6E, 05, 05]
+165B; [77 14 D7, 05, 05]
-164D; [76 FA 75, 05, 05]
+165C; [77 14 DE, 05, 05]
-164E; [76 FA 7C, 05, 05]
+165D; [77 14 E5, 05, 05]
-164F; [76 FA 83, 05, 05]
+165E; [77 14 EC, 05, 05]
-1650; [76 FA 8A, 05, 05]
+165F; [77 14 F3, 05, 05]
-1651; [76 FA 91, 05, 05]
+1660; [77 14 FA, 05, 05]
-1652; [76 FA 98, 05, 05]
+1661; [77 15 03, 05, 05]
-1653; [76 FA 9F, 05, 05]
+1662; [77 15 0A, 05, 05]
-1654; [76 FA A6, 05, 05]
+1663; [77 15 11, 05, 05]
-1655; [76 FA AD, 05, 05]
+1664; [77 15 18, 05, 05]
-1656; [76 FA B4, 05, 05]
+1665; [77 15 1F, 05, 05]
-1657; [76 FA BB, 05, 05]
+1666; [77 15 26, 05, 05]
-1658; [76 FA C2, 05, 05]
+1667; [77 15 2D, 05, 05]
-1659; [76 FA C9, 05, 05]
+1668; [77 15 34, 05, 05]
-165A; [76 FA D0, 05, 05]
+1669; [77 15 3B, 05, 05]
-165B; [76 FA D7, 05, 05]
+166A; [77 15 42, 05, 05]
-165C; [76 FA DE, 05, 05]
+166B; [77 15 49, 05, 05]
-165D; [76 FA E5, 05, 05]
+166C; [77 15 50, 05, 05]
-165E; [76 FA EC, 05, 05]
+1677; [77 15 57, 05, 05]
-165F; [76 FA F3, 05, 05]
+1678; [77 15 5E, 05, 05]
-1660; [76 FA FA, 05, 05]
+1679; [77 15 65, 05, 05]
-1661; [76 FB 03, 05, 05]
+167A; [77 15 6C, 05, 05]
-1662; [76 FB 0A, 05, 05]
+167B; [77 15 73, 05, 05]
-1663; [76 FB 11, 05, 05]
+167C; [77 15 7A, 05, 05]
-1664; [76 FB 18, 05, 05]
+167D; [77 15 81, 05, 05]
-1665; [76 FB 1F, 05, 05]
+167E; [77 15 88, 05, 05]
-1666; [76 FB 26, 05, 05]
+167F; [77 15 8F, 05, 05]
-1667; [76 FB 2D, 05, 05]
+18B0; [77 15 96, 05, 05]
-1668; [76 FB 34, 05, 05]
+18B1; [77 15 9D, 05, 05]
-1669; [76 FB 3B, 05, 05]
+18B2; [77 15 A4, 05, 05]
-166A; [76 FB 42, 05, 05]
+18B3; [77 15 AB, 05, 05]
-166B; [76 FB 49, 05, 05]
+18B4; [77 15 B2, 05, 05]
-166C; [76 FB 50, 05, 05]
+18B5; [77 15 B9, 05, 05]
-1677; [76 FB 57, 05, 05]
+18B6; [77 15 C0, 05, 05]
-1678; [76 FB 5E, 05, 05]
+18B7; [77 15 C7, 05, 05]
-1679; [76 FB 65, 05, 05]
+18B8; [77 15 CE, 05, 05]
-167A; [76 FB 6C, 05, 05]
+18B9; [77 15 D5, 05, 05]
-167B; [76 FB 73, 05, 05]
+18BA; [77 15 DC, 05, 05]
-167C; [76 FB 7A, 05, 05]
+18BB; [77 15 E3, 05, 05]
-167D; [76 FB 81, 05, 05]
+18BC; [77 15 EA, 05, 05]
-167E; [76 FB 88, 05, 05]
+18BD; [77 15 F1, 05, 05]
-167F; [76 FB 8F, 05, 05]
+18BE; [77 15 F8, 05, 05]
-18B0; [76 FB 96, 05, 05]
+18BF; [77 15 FF, 05, 05]
-18B1; [76 FB 9D, 05, 05]
+18C0; [77 16 08, 05, 05]
-18B2; [76 FB A4, 05, 05]
+18C1; [77 16 0F, 05, 05]
-18B3; [76 FB AB, 05, 05]
+18C2; [77 16 16, 05, 05]
-18B4; [76 FB B2, 05, 05]
+18C3; [77 16 1D, 05, 05]
-18B5; [76 FB B9, 05, 05]
+18C4; [77 16 24, 05, 05]
-18B6; [76 FB C0, 05, 05]
+18C5; [77 16 2B, 05, 05]
-18B7; [76 FB C7, 05, 05]
+18C6; [77 16 32, 05, 05]
-18B8; [76 FB CE, 05, 05]
+18C7; [77 16 39, 05, 05]
-18B9; [76 FB D5, 05, 05]
+18C8; [77 16 40, 05, 05]
-18BA; [76 FB DC, 05, 05]
+18C9; [77 16 47, 05, 05]
-18BB; [76 FB E3, 05, 05]
+18CA; [77 16 4E, 05, 05]
-18BC; [76 FB EA, 05, 05]
+18CB; [77 16 55, 05, 05]
-18BD; [76 FB F1, 05, 05]
+18CC; [77 16 5C, 05, 05]
-18BE; [76 FB F8, 05, 05]
+18CD; [77 16 63, 05, 05]
-18BF; [76 FB FF, 05, 05]
+18CE; [77 16 6A, 05, 05]
-18C0; [76 FC 08, 05, 05]
+18CF; [77 16 71, 05, 05]
-18C1; [76 FC 0F, 05, 05]
+18D0; [77 16 78, 05, 05]
-18C2; [76 FC 16, 05, 05]
+18D1; [77 16 7F, 05, 05]
-18C3; [76 FC 1D, 05, 05]
+18D2; [77 16 86, 05, 05]
-18C4; [76 FC 24, 05, 05]
+18D3; [77 16 8D, 05, 05]
-18C5; [76 FC 2B, 05, 05]
+18D4; [77 16 94, 05, 05]
-18C6; [76 FC 32, 05, 05]
+18D5; [77 16 9B, 05, 05]
-18C7; [76 FC 39, 05, 05]
+18D6; [77 16 A2, 05, 05]
-18C8; [76 FC 40, 05, 05]
+18D7; [77 16 A9, 05, 05]
-18C9; [76 FC 47, 05, 05]
+18D8; [77 16 B0, 05, 05]
-18CA; [76 FC 4E, 05, 05]
+18D9; [77 16 B7, 05, 05]
-18CB; [76 FC 55, 05, 05]
+18DA; [77 16 BE, 05, 05]
-18CC; [76 FC 5C, 05, 05]
+18DB; [77 16 C5, 05, 05]
-18CD; [76 FC 63, 05, 05]
+18DC; [77 16 CC, 05, 05]
-18CE; [76 FC 6A, 05, 05]
+18DD; [77 16 D3, 05, 05]
-18CF; [76 FC 71, 05, 05]
+18DE; [77 16 DA, 05, 05]
-18D0; [76 FC 78, 05, 05]
+18DF; [77 16 E1, 05, 05]
-18D1; [76 FC 7F, 05, 05]
+18E0; [77 16 E8, 05, 05]
-18D2; [76 FC 86, 05, 05]
+18E1; [77 16 EF, 05, 05]
-18D3; [76 FC 8D, 05, 05]
+18E2; [77 16 F6, 05, 05]
-18D4; [76 FC 94, 05, 05]
+18E3; [77 16 FD, 05, 05]
-18D5; [76 FC 9B, 05, 05]
+18E4; [77 17 06, 05, 05]
-18D6; [76 FC A2, 05, 05]
+18E5; [77 17 0D, 05, 05]
-18D7; [76 FC A9, 05, 05]
+18E6; [77 17 14, 05, 05]
-18D8; [76 FC B0, 05, 05]
+18E7; [77 17 1B, 05, 05]
-18D9; [76 FC B7, 05, 05]
+18E8; [77 17 22, 05, 05]
-18DA; [76 FC BE, 05, 05]
+18E9; [77 17 29, 05, 05]
-18DB; [76 FC C5, 05, 05]
+18EA; [77 17 30, 05, 05]
-18DC; [76 FC CC, 05, 05]
+18EB; [77 17 37, 05, 05]
-18DD; [76 FC D3, 05, 05]
+18EC; [77 17 3E, 05, 05]
-18DE; [76 FC DA, 05, 05]
+18ED; [77 17 45, 05, 05]
-18DF; [76 FC E1, 05, 05]
+18EE; [77 17 4C, 05, 05]
-18E0; [76 FC E8, 05, 05]
+18EF; [77 17 53, 05, 05]
-18E1; [76 FC EF, 05, 05]
+18F0; [77 17 5A, 05, 05]
-18E2; [76 FC F6, 05, 05]
+18F1; [77 17 61, 05, 05]
-18E3; [76 FC FD, 05, 05]
+18F2; [77 17 68, 05, 05]
-18E4; [76 FD 06, 05, 05]
+18F3; [77 17 6F, 05, 05]
-18E5; [76 FD 0D, 05, 05]
+18F4; [77 17 76, 05, 05]
-18E6; [76 FD 14, 05, 05]
+18F5; [77 17 7D, 05, 05]
-18E7; [76 FD 1B, 05, 05]
+11AB0; [77 17 84, 05, 05]
-18E8; [76 FD 22, 05, 05]
+11AB1; [77 17 8B, 05, 05]
-18E9; [76 FD 29, 05, 05]
+11AB2; [77 17 92, 05, 05]
-18EA; [76 FD 30, 05, 05]
+11AB3; [77 17 99, 05, 05]
-18EB; [76 FD 37, 05, 05]
+11AB4; [77 17 A0, 05, 05]
-18EC; [76 FD 3E, 05, 05]
+11AB5; [77 17 A7, 05, 05]
-18ED; [76 FD 45, 05, 05]
+11AB6; [77 17 AE, 05, 05]
-18EE; [76 FD 4C, 05, 05]
+11AB7; [77 17 B5, 05, 05]
-18EF; [76 FD 53, 05, 05]
+11AB8; [77 17 BC, 05, 05]
-18F0; [76 FD 5A, 05, 05]
+11AB9; [77 17 C3, 05, 05]
-18F1; [76 FD 61, 05, 05]
+11ABA; [77 17 CA, 05, 05]
-18F2; [76 FD 68, 05, 05]
+11ABB; [77 17 D1, 05, 05]
-18F3; [76 FD 6F, 05, 05]
+11ABC; [77 17 D8, 05, 05]
-18F4; [76 FD 76, 05, 05]
+11ABD; [77 17 DF, 05, 05]
-18F5; [76 FD 7D, 05, 05]
+11ABE; [77 17 E6, 05, 05]
-FDD1 168F; [76 FE 02, 05, 05] # OGHAM first primary (compressible)
+11ABF; [77 17 ED, 05, 05]
-1681; [76 FE 09, 05, 05]
+FDD1 168F; [77 18 02, 05, 05] # OGHAM first primary (compressible)
-1682; [76 FE 10, 05, 05]
+1681; [77 18 09, 05, 05]
-1683; [76 FE 17, 05, 05]
+1682; [77 18 10, 05, 05]
-1684; [76 FE 1E, 05, 05]
+1683; [77 18 17, 05, 05]
-1685; [76 FE 25, 05, 05]
+1684; [77 18 1E, 05, 05]
-1686; [76 FE 2C, 05, 05]
+1685; [77 18 25, 05, 05]
-1687; [76 FE 33, 05, 05]
+1686; [77 18 2C, 05, 05]
-1688; [76 FE 3A, 05, 05]
+1687; [77 18 33, 05, 05]
-1689; [76 FE 41, 05, 05]
+1688; [77 18 3A, 05, 05]
-168A; [76 FE 48, 05, 05]
+1689; [77 18 41, 05, 05]
-168B; [76 FE 4F, 05, 05]
+168A; [77 18 48, 05, 05]
-168C; [76 FE 56, 05, 05]
+168B; [77 18 4F, 05, 05]
-168D; [76 FE 5D, 05, 05]
+168C; [77 18 56, 05, 05]
-168E; [76 FE 64, 05, 05]
+168D; [77 18 5D, 05, 05]
-168F; [76 FE 6B, 05, 05]
+168E; [77 18 64, 05, 05]
-1690; [76 FE 72, 05, 05]
+168F; [77 18 6B, 05, 05]
-1691; [76 FE 79, 05, 05]
+1690; [77 18 72, 05, 05]
-1692; [76 FE 80, 05, 05]
+1691; [77 18 79, 05, 05]
-1693; [76 FE 87, 05, 05]
+1692; [77 18 80, 05, 05]
-1694; [76 FE 8E, 05, 05]
+1693; [77 18 87, 05, 05]
-1695; [76 FE 95, 05, 05]
+1694; [77 18 8E, 05, 05]
-1696; [76 FE 9C, 05, 05]
+1695; [77 18 95, 05, 05]
-1697; [76 FE A3, 05, 05]
+1696; [77 18 9C, 05, 05]
-1698; [76 FE AA, 05, 05]
+1697; [77 18 A3, 05, 05]
-1699; [76 FE B1, 05, 05]
+1698; [77 18 AA, 05, 05]
-169A; [76 FE B8, 05, 05]
+1699; [77 18 B1, 05, 05]
-FDD1 16A0; [77 04 02, 05, 05] # RUNIC first primary starts new lead byte (compressible)
+169A; [77 18 B8, 05, 05]
-16A0; [77 06, 05, 05]
-16A1; [77 06, 70, 05]
+FDD1 16A0; [77 19 02, 05, 05] # RUNIC first primary (compressible)
-16A2; [77 08, 05, 05]
-16A4; [77 08, 70, 05]
-16A5; [77 08, 78, 05]
+16A0; [77 1B, 05, 05]
+16A1; [77 1B, 70, 05]
-16A6; [77 0A, 05, 05]
-16A7; [77 0A, 70, 05]
-16F0; [77 0A, 05, 20][77 0A, 05, 20]
+16A2; [77 1D, 05, 05]
+16A4; [77 1D, 70, 05]
+16A5; [77 1D, 78, 05]
-16A8; [77 0C, 05, 05]
-16A9; [77 0C, 70, 05]
-16AC; [77 0C, 74, 05]
-16AD; [77 0C, 78, 05]
-16AE; [77 0C, 7C, 05]
+16A6; [77 1F, 05, 05]
+16A7; [77 1F, 70, 05]
+16F0; [77 1F, 05, 20][77 1F, 05, 20]
-16F4; [77 0E 02, 05, 05]
+16A8; [77 21, 05, 05]
+16A9; [77 21, 70, 05]
+16AC; [77 21, 74, 05]
+16AD; [77 21, 78, 05]
+16AE; [77 21, 7C, 05]
-16AF; [77 0E 09, 05, 05]
+16F4; [77 23 02, 05, 05]
-16B0; [77 0E 10, 05, 05]
+16AF; [77 23 09, 05, 05]
-16B1; [77 0E 17, 05, 05]
+16B0; [77 23 10, 05, 05]
-16B2; [77 10, 05, 05]
-16B3; [77 10, 70, 05]
-16B4; [77 10, 74, 05]
-16B5; [77 10, 78, 05]
-16B6; [77 10, 7C, 05]
+16B1; [77 23 17, 05, 05]
-16F1; [77 12 02, 05, 05]
+16B2; [77 25, 05, 05]
+16B3; [77 25, 70, 05]
+16B4; [77 25, 74, 05]
+16B5; [77 25, 78, 05]
+16B6; [77 25, 7C, 05]
-16B7; [77 12 09, 05, 05]
+16F1; [77 27 02, 05, 05]
-16B9; [77 14, 05, 05]
-16E9; [77 14, 70, 05]
+16B7; [77 27 09, 05, 05]
-16BA; [77 16, 05, 05]
-16BB; [77 16, 70, 05]
-16BC; [77 16, 75, 05]
-16BD; [77 16, 7A, 05]
+16B9; [77 29, 05, 05]
+16E9; [77 29, 70, 05]
-16BE; [77 18, 05, 05]
-16BF; [77 18, 70, 05]
-16C0; [77 18, 78, 05]
+16BA; [77 2B, 05, 05]
+16BB; [77 2B, 70, 05]
+16BC; [77 2B, 75, 05]
+16BD; [77 2B, 7A, 05]
-16C1; [77 1A, 05, 05]
-16C2; [77 1A, 70, 05]
+16BE; [77 2D, 05, 05]
+16BF; [77 2D, 70, 05]
+16C0; [77 2D, 78, 05]
-16F5; [77 1C, 05, 05]
+16C1; [77 2F, 05, 05]
+16C2; [77 2F, 70, 05]
-16C3; [77 1E, 05, 05]
-16C4; [77 1E, 70, 05]
+16F5; [77 31, 05, 05]
-16C5; [77 20, 05, 05]
-16C6; [77 20, 70, 05]
-16EE; [77 20, 05, 20][77 34, 05, 20]
+16C3; [77 33, 05, 05]
+16C4; [77 33, 70, 05]
-16C7; [77 22, 05, 05]
+16C5; [77 35, 05, 05]
+16C6; [77 35, 70, 05]
+16EE; [77 35, 05, 20][77 49, 05, 20]
-16C8; [77 24, 05, 05]
-16D5; [77 24, 70, 05]
+16C7; [77 37, 05, 05]
-16C9; [77 26, 05, 05]
+16C8; [77 39, 05, 05]
+16D5; [77 39, 70, 05]
-16CA; [77 28, 05, 05]
-16CB; [77 28, 70, 05]
-16EA; [77 28, 73, 05]
-16CC; [77 28, 76, 05]
-16CD; [77 28, 79, 05]
-16CE; [77 28, 7C, 05]
+16C9; [77 3B, 05, 05]
-16F2; [77 2A, 05, 05]
+16CA; [77 3D, 05, 05]
+16CB; [77 3D, 70, 05]
+16EA; [77 3D, 73, 05]
+16CC; [77 3D, 76, 05]
+16CD; [77 3D, 79, 05]
+16CE; [77 3D, 7C, 05]
-16CF; [77 2C, 05, 05]
-16D0; [77 2C, 70, 05]
-16D1; [77 2C, 78, 05]
+16F2; [77 3F, 05, 05]
-16D2; [77 2E, 05, 05]
-16D3; [77 2E, 70, 05]
-16D4; [77 2E, 78, 05]
+16CF; [77 41, 05, 05]
+16D0; [77 41, 70, 05]
+16D1; [77 41, 78, 05]
-16D6; [77 30 02, 05, 05]
+16D2; [77 43, 05, 05]
+16D3; [77 43, 70, 05]
+16D4; [77 43, 78, 05]
-16F6; [77 30 09, 05, 05]
+16D6; [77 45 02, 05, 05]
-16D7; [77 32, 05, 05]
-16D8; [77 32, 70, 05]
-16D9; [77 32, 78, 05]
-16EF; [77 32, 70, 05][77 32, 70, 05]
+16F6; [77 45 09, 05, 05]
-16DA; [77 34, 05, 05]
-16DB; [77 34, 70, 05]
+16D7; [77 47, 05, 05]
+16D8; [77 47, 70, 05]
+16D9; [77 47, 78, 05]
+16EF; [77 47, 70, 05][77 47, 70, 05]
-16DC; [77 36, 05, 05]
-16DD; [77 36, 70, 05]
+16DA; [77 49, 05, 05]
+16DB; [77 49, 70, 05]
-16DE; [77 38 02, 05, 05]
+16DC; [77 4B, 05, 05]
+16DD; [77 4B, 70, 05]
-16DF; [77 38 09, 05, 05]
+16DE; [77 4D 02, 05, 05]
-16F3; [77 38 10, 05, 05]
+16DF; [77 4D 09, 05, 05]
-16AA; [77 38 17, 05, 05]
+16F3; [77 4D 10, 05, 05]
-16F7; [77 38 1E, 05, 05]
+16AA; [77 4D 17, 05, 05]
-16AB; [77 38 25, 05, 05]
+16F7; [77 4D 1E, 05, 05]
-16F8; [77 38 2C, 05, 05]
+16AB; [77 4D 25, 05, 05]
-16A3; [77 38 33, 05, 05]
+16F8; [77 4D 2C, 05, 05]
-16E0; [77 38 3A, 05, 05]
+16A3; [77 4D 33, 05, 05]
-16E3; [77 38 41, 05, 05]
+16E0; [77 4D 3A, 05, 05]
-16B8; [77 38 48, 05, 05]
+16E3; [77 4D 41, 05, 05]
-16E4; [77 38 4F, 05, 05]
+16B8; [77 4D 48, 05, 05]
-16E1; [77 38 56, 05, 05]
+16E4; [77 4D 4F, 05, 05]
-16E2; [77 38 5D, 05, 05]
+16E1; [77 4D 56, 05, 05]
-16E5; [77 38 64, 05, 05]
+16E2; [77 4D 5D, 05, 05]
-16E6; [77 3A, 05, 05]
-16E7; [77 3A, 70, 05]
-16E8; [77 3A, 78, 05]
+16E5; [77 4D 64, 05, 05]
-FDD1 10CA1; [77 3C 02, 05, 05] # Old_Hungarian first primary (compressible)
+16E6; [77 4F, 05, 05]
+16E7; [77 4F, 70, 05]
+16E8; [77 4F, 78, 05]
-10CC0; [77 3E, 05, 05]
-10C80; [77 3E, 05, A0]
-10CC1; [77 3E, 70, 05]
-10C81; [77 3E, 70, A0]
+FDD1 10CA1; [77 51 02, 05, 05] # Old_Hungarian first primary (compressible)
-10CC2; [77 40, 05, 05]
-10C82; [77 40, 05, A0]
+10CC0; [77 53, 05, 05]
+10C80; [77 53, 05, A0]
+10CC1; [77 53, 70, 05]
+10C81; [77 53, 70, A0]
-10CC3; [77 42, 05, 05]
-10C83; [77 42, 05, A0]
+10CC2; [77 55, 05, 05]
+10C82; [77 55, 05, A0]
-10CC4; [77 44, 05, 05]
-10C84; [77 44, 05, A0]
+10CC3; [77 57, 05, 05]
+10C83; [77 57, 05, A0]
-10CC5; [77 46, 05, 05]
-10C85; [77 46, 05, A0]
+10CC4; [77 59, 05, 05]
+10C84; [77 59, 05, A0]
-10CC6; [77 48, 05, 05]
-10C86; [77 48, 05, A0]
+10CC5; [77 5B, 05, 05]
+10C85; [77 5B, 05, A0]
-10CC7; [77 4A, 05, 05]
-10C87; [77 4A, 05, A0]
+10CC6; [77 5D, 05, 05]
+10C86; [77 5D, 05, A0]
-10CC8; [77 4C, 05, 05]
-10C88; [77 4C, 05, A0]
+10CC7; [77 5F, 05, 05]
+10C87; [77 5F, 05, A0]
-10CC9; [77 4E, 05, 05]
-10C89; [77 4E, 05, A0]
-10CCA; [77 4E, 70, 05]
-10C8A; [77 4E, 70, A0]
-10CCB; [77 4E, 78, 05]
-10C8B; [77 4E, 78, A0]
+10CC8; [77 61, 05, 05]
+10C88; [77 61, 05, A0]
-10CCC; [77 50, 05, 05]
-10C8C; [77 50, 05, A0]
+10CC9; [77 63, 05, 05]
+10C89; [77 63, 05, A0]
+10CCA; [77 63, 70, 05]
+10C8A; [77 63, 70, A0]
+10CCB; [77 63, 78, 05]
+10C8B; [77 63, 78, A0]
-10CCD; [77 52, 05, 05]
-10C8D; [77 52, 05, A0]
+10CCC; [77 65, 05, 05]
+10C8C; [77 65, 05, A0]
-10CCE; [77 54, 05, 05]
-10C8E; [77 54, 05, A0]
+10CCD; [77 67, 05, 05]
+10C8D; [77 67, 05, A0]
-10CCF; [77 56, 05, 05]
-10C8F; [77 56, 05, A0]
+10CCE; [77 69, 05, 05]
+10C8E; [77 69, 05, A0]
-10CD0; [77 58, 05, 05]
-10C90; [77 58, 05, A0]
-10CD1; [77 58, 70, 05]
-10C91; [77 58, 70, A0]
+10CCF; [77 6B, 05, 05]
+10C8F; [77 6B, 05, A0]
-10CD2; [77 5A, 05, 05]
-10C92; [77 5A, 05, A0]
+10CD0; [77 6D, 05, 05]
+10C90; [77 6D, 05, A0]
+10CD1; [77 6D, 70, 05]
+10C91; [77 6D, 70, A0]
-10CD3; [77 5C, 05, 05]
-10C93; [77 5C, 05, A0]
+10CD2; [77 6F, 05, 05]
+10C92; [77 6F, 05, A0]
-10CD4; [77 5E, 05, 05]
-10C94; [77 5E, 05, A0]
+10CD3; [77 71, 05, 05]
+10C93; [77 71, 05, A0]
-10CD5; [77 60, 05, 05]
-10C95; [77 60, 05, A0]
+10CD4; [77 73, 05, 05]
+10C94; [77 73, 05, A0]
-10CD6; [77 62, 05, 05]
-10C96; [77 62, 05, A0]
+10CD5; [77 75, 05, 05]
+10C95; [77 75, 05, A0]
-10CD7; [77 64, 05, 05]
-10C97; [77 64, 05, A0]
+10CD6; [77 77, 05, 05]
+10C96; [77 77, 05, A0]
-10CD8; [77 66, 05, 05]
-10C98; [77 66, 05, A0]
+10CD7; [77 79, 05, 05]
+10C97; [77 79, 05, A0]
-10CD9; [77 68, 05, 05]
-10C99; [77 68, 05, A0]
+10CD8; [77 7B, 05, 05]
+10C98; [77 7B, 05, A0]
-10CDA; [77 6A, 05, 05]
-10C9A; [77 6A, 05, A0]
+10CD9; [77 7D, 05, 05]
+10C99; [77 7D, 05, A0]
-10CDB; [77 6C, 05, 05]
-10C9B; [77 6C, 05, A0]
-10CDC; [77 6C, 70, 05]
-10C9C; [77 6C, 70, A0]
+10CDA; [77 7F, 05, 05]
+10C9A; [77 7F, 05, A0]
-10CDD; [77 6E, 05, 05]
-10C9D; [77 6E, 05, A0]
-10CDE; [77 6E, 70, 05]
-10C9E; [77 6E, 70, A0]
-10CDF; [77 6E, 78, 05]
-10C9F; [77 6E, 78, A0]
+10CDB; [77 81, 05, 05]
+10C9B; [77 81, 05, A0]
+10CDC; [77 81, 70, 05]
+10C9C; [77 81, 70, A0]
-10CE0; [77 70, 05, 05]
-10CA0; [77 70, 05, A0]
+10CDD; [77 83, 05, 05]
+10C9D; [77 83, 05, A0]
+10CDE; [77 83, 70, 05]
+10C9E; [77 83, 70, A0]
+10CDF; [77 83, 78, 05]
+10C9F; [77 83, 78, A0]
-10CE1; [77 72, 05, 05]
-10CA1; [77 72, 05, A0]
+10CE0; [77 85, 05, 05]
+10CA0; [77 85, 05, A0]
-10CE2; [77 74, 05, 05]
-10CA2; [77 74, 05, A0]
-10CE3; [77 74, 70, 05]
-10CA3; [77 74, 70, A0]
+10CE1; [77 87, 05, 05]
+10CA1; [77 87, 05, A0]
-10CE4; [77 76, 05, 05]
-10CA4; [77 76, 05, A0]
+10CE2; [77 89, 05, 05]
+10CA2; [77 89, 05, A0]
+10CE3; [77 89, 70, 05]
+10CA3; [77 89, 70, A0]
-10CE5; [77 78, 05, 05]
-10CA5; [77 78, 05, A0]
+10CE4; [77 8B, 05, 05]
+10CA4; [77 8B, 05, A0]
-10CE6; [77 7A, 05, 05]
-10CA6; [77 7A, 05, A0]
+10CE5; [77 8D, 05, 05]
+10CA5; [77 8D, 05, A0]
-10CE7; [77 7C, 05, 05]
-10CA7; [77 7C, 05, A0]
+10CE6; [77 8F, 05, 05]
+10CA6; [77 8F, 05, A0]
-10CE8; [77 7E, 05, 05]
-10CA8; [77 7E, 05, A0]
+10CE7; [77 91, 05, 05]
+10CA7; [77 91, 05, A0]
-10CE9; [77 80, 05, 05]
-10CA9; [77 80, 05, A0]
+10CE8; [77 93, 05, 05]
+10CA8; [77 93, 05, A0]
-10CEA; [77 82, 05, 05]
-10CAA; [77 82, 05, A0]
-10CEB; [77 82, 70, 05]
-10CAB; [77 82, 70, A0]
+10CE9; [77 95, 05, 05]
+10CA9; [77 95, 05, A0]
-10CEC; [77 84, 05, 05]
-10CAC; [77 84, 05, A0]
-10CED; [77 84, 70, 05]
-10CAD; [77 84, 70, A0]
+10CEA; [77 97, 05, 05]
+10CAA; [77 97, 05, A0]
+10CEB; [77 97, 70, 05]
+10CAB; [77 97, 70, A0]
-10CEE; [77 86, 05, 05]
-10CAE; [77 86, 05, A0]
+10CEC; [77 99, 05, 05]
+10CAC; [77 99, 05, A0]
+10CED; [77 99, 70, 05]
+10CAD; [77 99, 70, A0]
-10CEF; [77 88, 05, 05]
-10CAF; [77 88, 05, A0]
+10CEE; [77 9B, 05, 05]
+10CAE; [77 9B, 05, A0]
-10CF0; [77 8A, 05, 05]
-10CB0; [77 8A, 05, A0]
+10CEF; [77 9D, 05, 05]
+10CAF; [77 9D, 05, A0]
-10CF1; [77 8C, 05, 05]
-10CB1; [77 8C, 05, A0]
+10CF0; [77 9F, 05, 05]
+10CB0; [77 9F, 05, A0]
-10CF2; [77 8E, 05, 05]
-10CB2; [77 8E, 05, A0]
+10CF1; [77 A1, 05, 05]
+10CB1; [77 A1, 05, A0]
-FDD1 10C00; [77 90 02, 05, 05] # Old Turkic first primary (compressible)
+10CF2; [77 A3, 05, 05]
+10CB2; [77 A3, 05, A0]
-10C00; [77 92, 05, 05]
-10C01; [77 92, 70, 05]
+FDD1 10C00; [77 A5 02, 05, 05] # Old Turkic first primary (compressible)
-10C02; [77 94, 05, 05]
+10C00; [77 A7, 05, 05]
+10C01; [77 A7, 70, 05]
-10C03; [77 96, 05, 05]
-10C04; [77 96, 70, 05]
+10C02; [77 A9, 05, 05]
-10C05; [77 98 02, 05, 05]
+10C03; [77 AB, 05, 05]
+10C04; [77 AB, 70, 05]
-10C06; [77 98 09, 05, 05]
+10C05; [77 AD 02, 05, 05]
-10C07; [77 9A, 05, 05]
-10C08; [77 9A, 70, 05]
+10C06; [77 AD 09, 05, 05]
-10C09; [77 9C, 05, 05]
-10C0A; [77 9C, 70, 05]
+10C07; [77 AF, 05, 05]
+10C08; [77 AF, 70, 05]
-10C0B; [77 9E, 05, 05]
-10C0C; [77 9E, 70, 05]
+10C09; [77 B1, 05, 05]
+10C0A; [77 B1, 70, 05]
-10C0D; [77 A0, 05, 05]
-10C0E; [77 A0, 70, 05]
+10C0B; [77 B3, 05, 05]
+10C0C; [77 B3, 70, 05]
-10C0F; [77 A2, 05, 05]
-10C10; [77 A2, 70, 05]
+10C0D; [77 B5, 05, 05]
+10C0E; [77 B5, 70, 05]
-10C11; [77 A4, 05, 05]
-10C12; [77 A4, 70, 05]
+10C0F; [77 B7, 05, 05]
+10C10; [77 B7, 70, 05]
-10C13; [77 A6, 05, 05]
+10C11; [77 B9, 05, 05]
+10C12; [77 B9, 70, 05]
-10C14; [77 A8, 05, 05]
-10C15; [77 A8, 70, 05]
+10C13; [77 BB, 05, 05]
-10C16; [77 AA, 05, 05]
-10C17; [77 AA, 70, 05]
+10C14; [77 BD, 05, 05]
+10C15; [77 BD, 70, 05]
-10C18; [77 AC, 05, 05]
-10C19; [77 AC, 70, 05]
+10C16; [77 BF, 05, 05]
+10C17; [77 BF, 70, 05]
-10C1A; [77 AE, 05, 05]
-10C1B; [77 AE, 70, 05]
+10C18; [77 C1, 05, 05]
+10C19; [77 C1, 70, 05]
-10C1C; [77 B0, 05, 05]
-10C1D; [77 B0, 70, 05]
+10C1A; [77 C3, 05, 05]
+10C1B; [77 C3, 70, 05]
-10C1E; [77 B2, 05, 05]
-10C1F; [77 B2, 70, 05]
+10C1C; [77 C5, 05, 05]
+10C1D; [77 C5, 70, 05]
-10C20; [77 B4 02, 05, 05]
+10C1E; [77 C7, 05, 05]
+10C1F; [77 C7, 70, 05]
-10C21; [77 B4 09, 05, 05]
+10C20; [77 C9 02, 05, 05]
-10C22; [77 B4 10, 05, 05]
+10C21; [77 C9 09, 05, 05]
-10C23; [77 B4 17, 05, 05]
+10C22; [77 C9 10, 05, 05]
-10C24; [77 B6, 05, 05]
-10C25; [77 B6, 70, 05]
+10C23; [77 C9 17, 05, 05]
-10C26; [77 B8, 05, 05]
-10C27; [77 B8, 70, 05]
+10C24; [77 CB, 05, 05]
+10C25; [77 CB, 70, 05]
-10C28; [77 BA, 05, 05]
-10C29; [77 BA, 70, 05]
+10C26; [77 CD, 05, 05]
+10C27; [77 CD, 70, 05]
-10C2A; [77 BC, 05, 05]
-10C2B; [77 BC, 70, 05]
+10C28; [77 CF, 05, 05]
+10C29; [77 CF, 70, 05]
-10C2C; [77 BE, 05, 05]
+10C2A; [77 D1, 05, 05]
+10C2B; [77 D1, 70, 05]
-10C2D; [77 C0, 05, 05]
-10C2E; [77 C0, 70, 05]
+10C2C; [77 D3, 05, 05]
-10C2F; [77 C2 02, 05, 05]
+10C2D; [77 D5, 05, 05]
+10C2E; [77 D5, 70, 05]
-10C30; [77 C2 09, 05, 05]
+10C2F; [77 D7 02, 05, 05]
-10C31; [77 C2 10, 05, 05]
+10C30; [77 D7 09, 05, 05]
-10C32; [77 C4, 05, 05]
-10C33; [77 C4, 70, 05]
+10C31; [77 D7 10, 05, 05]
-10C34; [77 C6, 05, 05]
-10C35; [77 C6, 70, 05]
+10C32; [77 D9, 05, 05]
+10C33; [77 D9, 70, 05]
-10C36; [77 C8, 05, 05]
-10C37; [77 C8, 70, 05]
+10C34; [77 DB, 05, 05]
+10C35; [77 DB, 70, 05]
-10C38; [77 CA, 05, 05]
-10C39; [77 CA, 70, 05]
+10C36; [77 DD, 05, 05]
+10C37; [77 DD, 70, 05]
-10C3A; [77 CC, 05, 05]
-10C3B; [77 CC, 70, 05]
+10C38; [77 DF, 05, 05]
+10C39; [77 DF, 70, 05]
-10C3C; [77 CE 02, 05, 05]
+10C3A; [77 E1, 05, 05]
+10C3B; [77 E1, 70, 05]
-10C3D; [77 CE 09, 05, 05]
+10C3C; [77 E3 02, 05, 05]
-10C3E; [77 CE 10, 05, 05]
+10C3D; [77 E3 09, 05, 05]
-10C3F; [77 D0, 05, 05]
-10C40; [77 D0, 70, 05]
+10C3E; [77 E3 10, 05, 05]
-10C41; [77 D2, 05, 05]
-10C42; [77 D2, 70, 05]
+10C3F; [77 E5, 05, 05]
+10C40; [77 E5, 70, 05]
-10C43; [77 D4, 05, 05]
-10C44; [77 D4, 70, 05]
+10C41; [77 E7, 05, 05]
+10C42; [77 E7, 70, 05]
-10C45; [77 D6, 05, 05]
-10C46; [77 D6, 70, 05]
+10C43; [77 E9, 05, 05]
+10C44; [77 E9, 70, 05]
-10C47; [77 D8 02, 05, 05]
+10C45; [77 EB, 05, 05]
+10C46; [77 EB, 70, 05]
-10C48; [77 D8 09, 05, 05]
+10C47; [77 ED 02, 05, 05]
+
+10C48; [77 ED 09, 05, 05]
FDD1 A549; [78 04 02, 05, 05] # Vai first primary starts new lead byte (compressible)
@@ -41165,10 +42005,10 @@ FF67; [7A 06, 05, 17]
30A2; [7A 06, 05, 9E]
FF71; [7A 06, 05, A5]
32D0; [7A 06, 05, 2C]
-3303; [7A 06, 05, 33][0D 76, 05, 2E][7A 58, 05, 30]
-3300; [7A 06, 05, 33][7A 3A, 05, 30][, B0, 2E][0D 76, 05, 2E][7A 2E, 05, 33]
-3301; [7A 06, 05, 33][7A 58, 05, 30][7A 3E, 05, 30][7A 06, 05, 33]
-3302; [7A 06, 05, 33][7A 66, 05, 31][7A 40, 05, 30][, B0, 2E][7A 06, 05, 33]
+3303; [7A 06, 05, 33][0D 7B, 05, 2E][7A 5C, 05, 30]
+3300; [7A 06, 05, 33][7A 3A, 05, 30][, B0, 2E][0D 7B, 05, 2E][7A 2E, 05, 33]
+3301; [7A 06, 05, 33][7A 5C, 05, 30][7A 3E, 05, 30][7A 06, 05, 33]
+3302; [7A 06, 05, 33][7A 6C, 05, 31][7A 40, 05, 30][, B0, 2E][7A 06, 05, 33]
3043; [7A 08, 05, 03]
3044; [7A 08, 05, 85]
@@ -41177,8 +42017,8 @@ FF68; [7A 08, 05, 17]
30A4; [7A 08, 05, 9E]
FF72; [7A 08, 05, A5]
32D1; [7A 08, 05, 2C]
-3304; [7A 08, 05, 33][7A 32, 05, 31][7A 66, 05, 31][7A 16, 05, 30][, AE, 2E]
-3305; [7A 08, 05, 33][7A 66, 05, 31][7A 28, 05, 31]
+3304; [7A 08, 05, 33][7A 32, 05, 31][7A 6C, 05, 31][7A 16, 05, 30][, AE, 2E]
+3305; [7A 08, 05, 33][7A 6C, 05, 31][7A 28, 05, 31]
3045; [7A 0A, 05, 03]
3046; [7A 0A, 05, 85]
@@ -41189,7 +42029,7 @@ FF73; [7A 0A, 05, A5]
32D2; [7A 0A, 05, 2C]
3094; [7A 0A, 05, 85][, AE, 05]
30F4; [7A 0A, 05, 9E][, AE, 05]
-3306; [7A 0A, 05, 33][7A 10, 05, 33][7A 66, 05, 31]
+3306; [7A 0A, 05, 33][7A 10, 05, 33][7A 6C, 05, 31]
1B000; [7A 0C, 05, 85]
@@ -41200,8 +42040,8 @@ FF6A; [7A 0E, 05, 17]
30A8; [7A 0E, 05, 9E]
FF74; [7A 0E, 05, A5]
32D3; [7A 0E, 05, 2C]
-3308; [7A 0E, 05, 33][0D 76, 05, 2E][7A 12, 05, 30][0D 76, 05, 2E]
-3307; [7A 0E, 05, 33][7A 20, 05, 30][7A 16, 05, 30][0D 76, 05, 2E][7A 2E, 05, 33][, AE, 2E]
+3308; [7A 0E, 05, 33][0D 7B, 05, 2E][7A 12, 05, 30][0D 7B, 05, 2E]
+3307; [7A 0E, 05, 33][7A 20, 05, 30][7A 16, 05, 30][0D 7B, 05, 2E][7A 2E, 05, 33][, AE, 2E]
3049; [7A 10, 05, 03]
304A; [7A 10, 05, 85]
@@ -41210,8 +42050,8 @@ FF6B; [7A 10, 05, 17]
30AA; [7A 10, 05, 9E]
FF75; [7A 10, 05, A5]
32D4; [7A 10, 05, 2C]
-330A; [7A 10, 05, 33][0D 76, 05, 2E][7A 48, 05, 30]
-3309; [7A 10, 05, 33][7A 66, 05, 31][7A 20, 05, 30]
+330A; [7A 10, 05, 33][0D 7B, 05, 2E][7A 48, 05, 30]
+3309; [7A 10, 05, 33][7A 6C, 05, 31][7A 20, 05, 30]
3095; [7A 12, 05, 03]
304B; [7A 12, 05, 85]
@@ -41221,11 +42061,11 @@ FF76; [7A 12, 05, A0]
32D5; [7A 12, 05, 28]
304C; [7A 12, 05, 85][, AE, 05]
30AC; [7A 12, 05, 98][, AE, 05]
-330B; [7A 12, 05, 30][7A 08, 05, 33][7A 56, 05, 33]
-330C; [7A 12, 05, 30][7A 54, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33]
-330D; [7A 12, 05, 30][7A 5C, 05, 30][7A 56, 05, 33][0D 76, 05, 2E]
-330E; [7A 12, 05, 30][, AE, 2E][7A 5C, 05, 30][7A 66, 05, 31]
-330F; [7A 12, 05, 30][, AE, 2E][7A 66, 05, 31][7A 44, 05, 31]
+330B; [7A 12, 05, 30][7A 08, 05, 33][7A 5A, 05, 33]
+330C; [7A 12, 05, 30][7A 58, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33]
+330D; [7A 12, 05, 30][7A 60, 05, 30][7A 5A, 05, 33][0D 7B, 05, 2E]
+330E; [7A 12, 05, 30][, AE, 2E][7A 60, 05, 30][7A 6C, 05, 31]
+330F; [7A 12, 05, 30][, AE, 2E][7A 6C, 05, 31][7A 44, 05, 31]
304D; [7A 14, 05, 85]
30AD; [7A 14, 05, 90]
@@ -41234,13 +42074,13 @@ FF77; [7A 14, 05, 9B]
304E; [7A 14, 05, 85][, AE, 05]
30AE; [7A 14, 05, 90][, AE, 05]
3310; [7A 14, 05, 31][, AE, 2E][7A 12, 05, 30][, AE, 2E]
-3311; [7A 14, 05, 31][, AE, 2E][7A 32, 05, 31][0D 76, 05, 2E]
-3312; [7A 14, 05, 31][7A 50, 05, 33][7A 56, 05, 33][0D 76, 05, 2E]
-3313; [7A 14, 05, 31][, AE, 2E][7A 58, 05, 30][7A 26, 05, 31][, AE, 2E][0D 76, 05, 2E]
-3314; [7A 14, 05, 31][7A 5C, 05, 30]
-3315; [7A 14, 05, 31][7A 5C, 05, 30][7A 16, 05, 30][, AE, 2E][7A 54, 05, 30][7A 48, 05, 30]
-3316; [7A 14, 05, 31][7A 5C, 05, 30][7A 4A, 05, 31][0D 76, 05, 2E][7A 2E, 05, 33][7A 58, 05, 30]
-3317; [7A 14, 05, 31][7A 5C, 05, 30][7A 5E, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33]
+3311; [7A 14, 05, 31][, AE, 2E][7A 32, 05, 31][0D 7B, 05, 2E]
+3312; [7A 14, 05, 31][7A 52, 05, 33][7A 5A, 05, 33][0D 7B, 05, 2E]
+3313; [7A 14, 05, 31][, AE, 2E][7A 5C, 05, 30][7A 26, 05, 31][, AE, 2E][0D 7B, 05, 2E]
+3314; [7A 14, 05, 31][7A 60, 05, 30]
+3315; [7A 14, 05, 31][7A 60, 05, 30][7A 16, 05, 30][, AE, 2E][7A 58, 05, 30][7A 48, 05, 30]
+3316; [7A 14, 05, 31][7A 60, 05, 30][7A 4A, 05, 31][0D 7B, 05, 2E][7A 2E, 05, 33][7A 5C, 05, 30]
+3317; [7A 14, 05, 31][7A 60, 05, 30][7A 62, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33]
304F; [7A 16, 05, 85]
31F0; [7A 16, 05, 10]
@@ -41249,10 +42089,10 @@ FF78; [7A 16, 05, A0]
32D7; [7A 16, 05, 28]
3050; [7A 16, 05, 85][, AE, 05]
30B0; [7A 16, 05, 98][, AE, 05]
-3318; [7A 16, 05, 30][, AE, 2E][7A 54, 05, 30][7A 48, 05, 30]
-3319; [7A 16, 05, 30][, AE, 2E][7A 54, 05, 30][7A 48, 05, 30][7A 2E, 05, 33][7A 66, 05, 31]
-331A; [7A 16, 05, 30][7A 58, 05, 30][7A 22, 05, 31][, AE, 2E][7A 08, 05, 33][7A 5C, 05, 30]
-331B; [7A 16, 05, 30][7A 5C, 05, 30][0D 76, 05, 2E][7A 36, 05, 31]
+3318; [7A 16, 05, 30][, AE, 2E][7A 58, 05, 30][7A 48, 05, 30]
+3319; [7A 16, 05, 30][, AE, 2E][7A 58, 05, 30][7A 48, 05, 30][7A 2E, 05, 33][7A 6C, 05, 31]
+331A; [7A 16, 05, 30][7A 5C, 05, 30][7A 22, 05, 31][, AE, 2E][7A 08, 05, 33][7A 60, 05, 30]
+331B; [7A 16, 05, 30][7A 60, 05, 30][0D 7B, 05, 2E][7A 36, 05, 31]
3096; [7A 18, 05, 03]
3051; [7A 18, 05, 85]
@@ -41262,7 +42102,7 @@ FF79; [7A 18, 05, A0]
32D8; [7A 18, 05, 28]
3052; [7A 18, 05, 85][, AE, 05]
30B2; [7A 18, 05, 98][, AE, 05]
-331C; [7A 18, 05, 30][0D 76, 05, 2E][7A 20, 05, 30]
+331C; [7A 18, 05, 30][0D 7B, 05, 2E][7A 20, 05, 30]
3053; [7A 1A, 05, 85]
30B3; [7A 1A, 05, 90]
@@ -41270,10 +42110,10 @@ FF7A; [7A 1A, 05, 98]
32D9; [7A 1A, 05, 20]
3054; [7A 1A, 05, 85][, AE, 05]
30B4; [7A 1A, 05, 90][, AE, 05]
-331E; [7A 1A, 05, 30][0D 76, 05, 2E][7A 42, 05, 30][, B0, 2E]
+331E; [7A 1A, 05, 30][0D 7B, 05, 2E][7A 42, 05, 30][, B0, 2E]
1F201; [7A 1A, 05, 30][7A 1A, 05, 30]
30FF; [7A 1A, 05, 28][7A 2E, 05, 2C]
-331D; [7A 1A, 05, 30][7A 58, 05, 30][7A 30, 05, 31]
+331D; [7A 1A, 05, 30][7A 5C, 05, 30][7A 30, 05, 31]
3055; [7A 1C, 05, 85]
30B5; [7A 1C, 05, 90]
@@ -41282,8 +42122,8 @@ FF7B; [7A 1C, 05, 9B]
1F202; [7A 1C, 05, 31]
3056; [7A 1C, 05, 85][, AE, 05]
30B6; [7A 1C, 05, 90][, AE, 05]
-331F; [7A 1C, 05, 31][7A 08, 05, 33][7A 16, 05, 30][7A 58, 05, 30]
-3320; [7A 1C, 05, 31][7A 66, 05, 31][7A 28, 05, 31][0D 76, 05, 2E][7A 48, 05, 30]
+331F; [7A 1C, 05, 31][7A 08, 05, 33][7A 16, 05, 30][7A 5C, 05, 30]
+3320; [7A 1C, 05, 31][7A 6C, 05, 31][7A 28, 05, 31][0D 7B, 05, 2E][7A 48, 05, 30]
3057; [7A 1E, 05, 85]
31F1; [7A 1E, 05, 10]
@@ -41293,7 +42133,7 @@ FF7C; [7A 1E, 05, A0]
3058; [7A 1E, 05, 85][, AE, 05]
30B8; [7A 1E, 05, 98][, AE, 05]
3006; [7A 1E, 05, 03][7A 4A, 05, 03]
-3321; [7A 1E, 05, 30][7A 56, 05, 33][7A 66, 05, 31][7A 16, 05, 30][, AE, 2E]
+3321; [7A 1E, 05, 30][7A 5A, 05, 33][7A 6C, 05, 31][7A 16, 05, 30][, AE, 2E]
3059; [7A 20, 05, 85]
31F2; [7A 20, 05, 10]
@@ -41309,8 +42149,8 @@ FF7E; [7A 22, 05, 9B]
32DD; [7A 22, 05, 26]
305C; [7A 22, 05, 85][, AE, 05]
30BC; [7A 22, 05, 90][, AE, 05]
-3322; [7A 22, 05, 31][7A 66, 05, 31][7A 28, 05, 31]
-3323; [7A 22, 05, 31][7A 66, 05, 31][7A 2E, 05, 33]
+3322; [7A 22, 05, 31][7A 6C, 05, 31][7A 28, 05, 31]
+3323; [7A 22, 05, 31][7A 6C, 05, 31][7A 2E, 05, 33]
305D; [7A 24, 05, 85]
30BD; [7A 24, 05, 90]
@@ -41325,7 +42165,7 @@ FF80; [7A 26, 05, 9B]
32DF; [7A 26, 05, 26]
3060; [7A 26, 05, 85][, AE, 05]
30C0; [7A 26, 05, 90][, AE, 05]
-3324; [7A 26, 05, 31][, AE, 2E][0D 76, 05, 2E][7A 20, 05, 30]
+3324; [7A 26, 05, 31][, AE, 2E][0D 7B, 05, 2E][7A 20, 05, 30]
3061; [7A 28, 05, 85]
30C1; [7A 28, 05, 90]
@@ -41360,8 +42200,8 @@ FF84; [7A 2E, 05, 9E]
32E3; [7A 2E, 05, 25]
3069; [7A 2E, 05, 85][, AE, 05]
30C9; [7A 2E, 05, 97][, AE, 05]
-3326; [7A 2E, 05, 33][, AE, 2E][7A 58, 05, 30]
-3327; [7A 2E, 05, 33][7A 66, 05, 31]
+3326; [7A 2E, 05, 33][, AE, 2E][7A 5C, 05, 30]
+3327; [7A 2E, 05, 33][7A 6C, 05, 31]
306A; [7A 30, 05, 85]
30CA; [7A 30, 05, 90]
@@ -41400,9 +42240,9 @@ FF8A; [7A 3A, 05, A0]
30D0; [7A 3A, 05, 98][, AE, 05]
3071; [7A 3A, 05, 85][, B0, 05]
30D1; [7A 3A, 05, 98][, B0, 05]
-332B; [7A 3A, 05, 30][, B0, 2E][0D 76, 05, 2E][7A 22, 05, 31][7A 66, 05, 31][7A 2E, 05, 33]
-332C; [7A 3A, 05, 30][, B0, 2E][0D 76, 05, 2E][7A 2A, 05, 33]
-332D; [7A 3A, 05, 30][, AE, 2E][0D 76, 05, 2E][7A 5A, 05, 30][7A 58, 05, 30]
+332B; [7A 3A, 05, 30][, B0, 2E][0D 7B, 05, 2E][7A 22, 05, 31][7A 6C, 05, 31][7A 2E, 05, 33]
+332C; [7A 3A, 05, 30][, B0, 2E][0D 7B, 05, 2E][7A 2A, 05, 33]
+332D; [7A 3A, 05, 30][, AE, 2E][0D 7B, 05, 2E][7A 5E, 05, 30][7A 5C, 05, 30]
332A; [7A 3A, 05, 30][7A 08, 05, 33][7A 2A, 05, 33]
3072; [7A 3C, 05, 85]
@@ -41414,10 +42254,10 @@ FF8B; [7A 3C, 05, A0]
30D3; [7A 3C, 05, 98][, AE, 05]
3074; [7A 3C, 05, 85][, B0, 05]
30D4; [7A 3C, 05, 98][, B0, 05]
-332E; [7A 3C, 05, 30][, B0, 2E][7A 06, 05, 33][7A 20, 05, 30][7A 2E, 05, 33][7A 58, 05, 30]
-332F; [7A 3C, 05, 30][, B0, 2E][7A 16, 05, 30][7A 58, 05, 30]
+332E; [7A 3C, 05, 30][, B0, 2E][7A 06, 05, 33][7A 20, 05, 30][7A 2E, 05, 33][7A 5C, 05, 30]
+332F; [7A 3C, 05, 30][, B0, 2E][7A 16, 05, 30][7A 5C, 05, 30]
3330; [7A 3C, 05, 30][, B0, 2E][7A 1A, 05, 30]
-3331; [7A 3C, 05, 30][, AE, 2E][7A 58, 05, 30]
+3331; [7A 3C, 05, 30][, AE, 2E][7A 5C, 05, 30]
3075; [7A 3E, 05, 85]
31F7; [7A 3E, 05, 10]
@@ -41428,10 +42268,10 @@ FF8C; [7A 3E, 05, A0]
30D6; [7A 3E, 05, 98][, AE, 05]
3077; [7A 3E, 05, 85][, B0, 05]
30D7; [7A 3E, 05, 98][, B0, 05]
-3332; [7A 3E, 05, 30][7A 06, 05, 33][7A 54, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33][, AE, 2E]
-3333; [7A 3E, 05, 30][7A 08, 05, 33][0D 76, 05, 2E][7A 2E, 05, 33]
-3334; [7A 3E, 05, 30][, AE, 2E][7A 2A, 05, 33][7A 1E, 05, 30][7A 0E, 05, 33][7A 58, 05, 30]
-3335; [7A 3E, 05, 30][7A 54, 05, 30][7A 66, 05, 31]
+3332; [7A 3E, 05, 30][7A 06, 05, 33][7A 58, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33][, AE, 2E]
+3333; [7A 3E, 05, 30][7A 08, 05, 33][0D 7B, 05, 2E][7A 2E, 05, 33]
+3334; [7A 3E, 05, 30][, AE, 2E][7A 2A, 05, 33][7A 1E, 05, 30][7A 0E, 05, 33][7A 5C, 05, 30]
+3335; [7A 3E, 05, 30][7A 58, 05, 30][7A 6C, 05, 31]
3078; [7A 40, 05, 85]
31F8; [7A 40, 05, 10]
@@ -41442,13 +42282,13 @@ FF8D; [7A 40, 05, A0]
30D9; [7A 40, 05, 98][, AE, 05]
307A; [7A 40, 05, 85][, B0, 05]
30DA; [7A 40, 05, 98][, B0, 05]
-333B; [7A 40, 05, 30][, B0, 2E][0D 76, 05, 2E][7A 1E, 05, 30][, AE, 2E]
-333C; [7A 40, 05, 30][, AE, 2E][0D 76, 05, 2E][7A 26, 05, 31]
-3336; [7A 40, 05, 30][7A 16, 05, 30][7A 26, 05, 31][0D 76, 05, 2E][7A 58, 05, 30]
+333B; [7A 40, 05, 30][, B0, 2E][0D 7B, 05, 2E][7A 1E, 05, 30][, AE, 2E]
+333C; [7A 40, 05, 30][, AE, 2E][0D 7B, 05, 2E][7A 26, 05, 31]
+3336; [7A 40, 05, 30][7A 16, 05, 30][7A 26, 05, 31][0D 7B, 05, 2E][7A 5C, 05, 30]
3337; [7A 40, 05, 30][, B0, 2E][7A 24, 05, 31]
3338; [7A 40, 05, 30][, B0, 2E][7A 32, 05, 31][7A 3C, 05, 30]
-3339; [7A 40, 05, 30][7A 58, 05, 30][7A 2A, 05, 33]
-333A; [7A 40, 05, 30][, B0, 2E][7A 66, 05, 31][7A 20, 05, 30]
+3339; [7A 40, 05, 30][7A 5C, 05, 30][7A 2A, 05, 33]
+333A; [7A 40, 05, 30][, B0, 2E][7A 6C, 05, 31][7A 20, 05, 30]
307B; [7A 42, 05, 85]
31F9; [7A 42, 05, 10]
@@ -41459,32 +42299,32 @@ FF8E; [7A 42, 05, A0]
30DC; [7A 42, 05, 98][, AE, 05]
307D; [7A 42, 05, 85][, B0, 05]
30DD; [7A 42, 05, 98][, B0, 05]
-3341; [7A 42, 05, 30][0D 76, 05, 2E][7A 58, 05, 30]
-3342; [7A 42, 05, 30][0D 76, 05, 2E][7A 66, 05, 31]
-333D; [7A 42, 05, 30][, B0, 2E][7A 08, 05, 33][7A 66, 05, 31][7A 2E, 05, 33]
+3341; [7A 42, 05, 30][0D 7B, 05, 2E][7A 5C, 05, 30]
+3342; [7A 42, 05, 30][0D 7B, 05, 2E][7A 6C, 05, 31]
+333D; [7A 42, 05, 30][, B0, 2E][7A 08, 05, 33][7A 6C, 05, 31][7A 2E, 05, 33]
1F200; [7A 42, 05, 30][7A 12, 05, 30]
-333E; [7A 42, 05, 30][, AE, 2E][7A 58, 05, 30][7A 2E, 05, 33]
-333F; [7A 42, 05, 30][7A 66, 05, 31]
-3340; [7A 42, 05, 30][, B0, 2E][7A 66, 05, 31][7A 2E, 05, 33][, AE, 2E]
+333E; [7A 42, 05, 30][, AE, 2E][7A 5C, 05, 30][7A 2E, 05, 33]
+333F; [7A 42, 05, 30][7A 6C, 05, 31]
+3340; [7A 42, 05, 30][, B0, 2E][7A 6C, 05, 31][7A 2E, 05, 33][, AE, 2E]
307E; [7A 44, 05, 85]
30DE; [7A 44, 05, 90]
FF8F; [7A 44, 05, 9B]
32EE; [7A 44, 05, 26]
-3343; [7A 44, 05, 31][7A 08, 05, 33][7A 16, 05, 30][7A 5C, 05, 30]
-3344; [7A 44, 05, 31][7A 08, 05, 33][7A 58, 05, 30]
+3343; [7A 44, 05, 31][7A 08, 05, 33][7A 16, 05, 30][7A 60, 05, 30]
+3344; [7A 44, 05, 31][7A 08, 05, 33][7A 5C, 05, 30]
303C; [7A 44, 05, 03][7A 20, 05, 03]
3345; [7A 44, 05, 31][7A 2A, 05, 33][7A 3A, 05, 30]
-3346; [7A 44, 05, 31][7A 58, 05, 30][7A 16, 05, 30]
-3347; [7A 44, 05, 31][7A 66, 05, 31][7A 1E, 05, 30][7A 52, 05, 34][7A 66, 05, 31]
+3346; [7A 44, 05, 31][7A 5C, 05, 30][7A 16, 05, 30]
+3347; [7A 44, 05, 31][7A 6C, 05, 31][7A 1E, 05, 30][7A 56, 05, 34][7A 6C, 05, 31]
307F; [7A 46, 05, 85]
30DF; [7A 46, 05, 90]
FF90; [7A 46, 05, 9B]
32EF; [7A 46, 05, 26]
-3348; [7A 46, 05, 31][7A 16, 05, 30][7A 5C, 05, 30][7A 66, 05, 31]
-3349; [7A 46, 05, 31][7A 56, 05, 33]
-334A; [7A 46, 05, 31][7A 56, 05, 33][7A 3A, 05, 30][, AE, 2E][0D 76, 05, 2E][7A 58, 05, 30]
+3348; [7A 46, 05, 31][7A 16, 05, 30][7A 60, 05, 30][7A 6C, 05, 31]
+3349; [7A 46, 05, 31][7A 5A, 05, 33]
+334A; [7A 46, 05, 31][7A 5A, 05, 33][7A 3A, 05, 30][, AE, 2E][0D 7B, 05, 2E][7A 5C, 05, 30]
3080; [7A 48, 05, 85]
31FA; [7A 48, 05, 10]
@@ -41496,9 +42336,9 @@ FF91; [7A 48, 05, A0]
30E1; [7A 4A, 05, 90]
FF92; [7A 4A, 05, 9B]
32F1; [7A 4A, 05, 26]
-334D; [7A 4A, 05, 31][0D 76, 05, 2E][7A 2E, 05, 33][7A 58, 05, 30]
+334D; [7A 4A, 05, 31][0D 7B, 05, 2E][7A 2E, 05, 33][7A 5C, 05, 30]
334B; [7A 4A, 05, 31][7A 12, 05, 30][, AE, 2E]
-334C; [7A 4A, 05, 31][7A 12, 05, 30][, AE, 2E][7A 2E, 05, 33][7A 66, 05, 31]
+334C; [7A 4A, 05, 31][7A 12, 05, 30][, AE, 2E][7A 2E, 05, 33][7A 6C, 05, 31]
3082; [7A 4C, 05, 85]
30E2; [7A 4C, 05, 90]
@@ -41512,670 +42352,677 @@ FF6C; [7A 4E, 05, 17]
30E4; [7A 4E, 05, 9E]
FF94; [7A 4E, 05, A5]
32F3; [7A 4E, 05, 2C]
-334E; [7A 4E, 05, 33][0D 76, 05, 2E][7A 2E, 05, 33][, AE, 2E]
-334F; [7A 4E, 05, 33][0D 76, 05, 2E][7A 58, 05, 30]
-
-3085; [7A 50, 05, 03]
-3086; [7A 50, 05, 85]
-30E5; [7A 50, 05, 10]
-FF6D; [7A 50, 05, 17]
-30E6; [7A 50, 05, 9E]
-FF95; [7A 50, 05, A5]
-32F4; [7A 50, 05, 2C]
-3350; [7A 50, 05, 33][7A 06, 05, 33][7A 66, 05, 31]
-
-3087; [7A 52, 05, 03]
-3088; [7A 52, 05, 85]
-30E7; [7A 52, 05, 10]
-FF6E; [7A 52, 05, 16]
-30E8; [7A 52, 05, 9C]
-FF96; [7A 52, 05, A2]
-32F5; [7A 52, 05, 28]
-309F; [7A 52, 05, 2E][7A 56, 05, 2C]
-
-3089; [7A 54, 05, 85]
-31FB; [7A 54, 05, 10]
-30E9; [7A 54, 05, 98]
-FF97; [7A 54, 05, A0]
-32F6; [7A 54, 05, 28]
-
-308A; [7A 56, 05, 85]
-31FC; [7A 56, 05, 10]
-30EA; [7A 56, 05, 97]
-FF98; [7A 56, 05, 9E]
-32F7; [7A 56, 05, 25]
-3351; [7A 56, 05, 33][7A 2A, 05, 33][7A 2E, 05, 33][7A 58, 05, 30]
-3352; [7A 56, 05, 33][7A 54, 05, 30]
+334E; [7A 4E, 05, 33][0D 7B, 05, 2E][7A 2E, 05, 33][, AE, 2E]
+334F; [7A 4E, 05, 33][0D 7B, 05, 2E][7A 5C, 05, 30]
+
+1B120; [7A 50, 05, 85]
+
+3085; [7A 52, 05, 03]
+3086; [7A 52, 05, 85]
+30E5; [7A 52, 05, 10]
+FF6D; [7A 52, 05, 17]
+30E6; [7A 52, 05, 9E]
+FF95; [7A 52, 05, A5]
+32F4; [7A 52, 05, 2C]
+3350; [7A 52, 05, 33][7A 06, 05, 33][7A 6C, 05, 31]
+
+1B121; [7A 54, 05, 85]
+
+3087; [7A 56, 05, 03]
+3088; [7A 56, 05, 85]
+30E7; [7A 56, 05, 10]
+FF6E; [7A 56, 05, 16]
+30E8; [7A 56, 05, 9C]
+FF96; [7A 56, 05, A2]
+32F5; [7A 56, 05, 28]
+309F; [7A 56, 05, 2E][7A 5A, 05, 2C]
+
+3089; [7A 58, 05, 85]
+31FB; [7A 58, 05, 10]
+30E9; [7A 58, 05, 98]
+FF97; [7A 58, 05, A0]
+32F6; [7A 58, 05, 28]
+
+308A; [7A 5A, 05, 85]
+31FC; [7A 5A, 05, 10]
+30EA; [7A 5A, 05, 97]
+FF98; [7A 5A, 05, 9E]
+32F7; [7A 5A, 05, 25]
+3351; [7A 5A, 05, 33][7A 2A, 05, 33][7A 2E, 05, 33][7A 5C, 05, 30]
+3352; [7A 5A, 05, 33][7A 58, 05, 30]
+
+308B; [7A 5C, 05, 85]
+31FD; [7A 5C, 05, 10]
+30EB; [7A 5C, 05, 98]
+FF99; [7A 5C, 05, A0]
+32F8; [7A 5C, 05, 28]
+3354; [7A 5C, 05, 30][0D 7B, 05, 2E][7A 3E, 05, 30][, AE, 2E][7A 5C, 05, 30]
+3353; [7A 5C, 05, 30][7A 3C, 05, 30][, B0, 2E][0D 7B, 05, 2E]
-308B; [7A 58, 05, 85]
-31FD; [7A 58, 05, 10]
-30EB; [7A 58, 05, 98]
-FF99; [7A 58, 05, A0]
-32F8; [7A 58, 05, 28]
-3354; [7A 58, 05, 30][0D 76, 05, 2E][7A 3E, 05, 30][, AE, 2E][7A 58, 05, 30]
-3353; [7A 58, 05, 30][7A 3C, 05, 30][, B0, 2E][0D 76, 05, 2E]
+308C; [7A 5E, 05, 85]
+31FE; [7A 5E, 05, 10]
+30EC; [7A 5E, 05, 98]
+FF9A; [7A 5E, 05, A0]
+32F9; [7A 5E, 05, 28]
+3355; [7A 5E, 05, 30][7A 48, 05, 30]
+3356; [7A 5E, 05, 30][7A 6C, 05, 31][7A 2E, 05, 33][7A 18, 05, 30][, AE, 2E][7A 6C, 05, 31]
-308C; [7A 5A, 05, 85]
-31FE; [7A 5A, 05, 10]
-30EC; [7A 5A, 05, 98]
-FF9A; [7A 5A, 05, A0]
-32F9; [7A 5A, 05, 28]
-3355; [7A 5A, 05, 30][7A 48, 05, 30]
-3356; [7A 5A, 05, 30][7A 66, 05, 31][7A 2E, 05, 33][7A 18, 05, 30][, AE, 2E][7A 66, 05, 31]
+308D; [7A 60, 05, 85]
+31FF; [7A 60, 05, 10]
+30ED; [7A 60, 05, 98]
+FF9B; [7A 60, 05, A0]
+32FA; [7A 60, 05, 28]
-308D; [7A 5C, 05, 85]
-31FF; [7A 5C, 05, 10]
-30ED; [7A 5C, 05, 98]
-FF9B; [7A 5C, 05, A0]
-32FA; [7A 5C, 05, 28]
+308E; [7A 62, 05, 03]
+308F; [7A 62, 05, 85]
+30EE; [7A 62, 05, 10]
+30EF; [7A 62, 05, 98]
+FF9C; [7A 62, 05, A0]
+32FB; [7A 62, 05, 28]
+30F7; [7A 62, 05, 98][, AE, 05]
+3357; [7A 62, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33]
-308E; [7A 5E, 05, 03]
-308F; [7A 5E, 05, 85]
-30EE; [7A 5E, 05, 10]
-30EF; [7A 5E, 05, 98]
-FF9C; [7A 5E, 05, A0]
-32FB; [7A 5E, 05, 28]
-30F7; [7A 5E, 05, 98][, AE, 05]
-3357; [7A 5E, 05, 30][7A 2A, 05, 33][7A 2E, 05, 33]
+1B150; [7A 64, 05, 03]
+3090; [7A 64, 05, 85]
+1B164; [7A 64, 05, 10]
+30F0; [7A 64, 05, 9E]
+32FC; [7A 64, 05, 2C]
+30F8; [7A 64, 05, 9E][, AE, 05]
-1B150; [7A 60, 05, 03]
-3090; [7A 60, 05, 85]
-1B164; [7A 60, 05, 10]
-30F0; [7A 60, 05, 9E]
-32FC; [7A 60, 05, 2C]
-30F8; [7A 60, 05, 9E][, AE, 05]
+1B11F; [7A 66, 05, 85]
+1B122; [7A 66, 05, A0]
-1B151; [7A 62, 05, 03]
-3091; [7A 62, 05, 85]
-1B165; [7A 62, 05, 10]
-30F1; [7A 62, 05, 9E]
-32FD; [7A 62, 05, 2C]
-30F9; [7A 62, 05, 9E][, AE, 05]
+1B151; [7A 68, 05, 03]
+3091; [7A 68, 05, 85]
+1B165; [7A 68, 05, 10]
+30F1; [7A 68, 05, 9E]
+32FD; [7A 68, 05, 2C]
+30F9; [7A 68, 05, 9E][, AE, 05]
-1B152; [7A 64, 05, 03]
-3092; [7A 64, 05, 85]
-1B166; [7A 64, 05, 10]
-30F2; [7A 64, 05, 9B]
-FF66; [7A 64, 05, A6]
-32FE; [7A 64, 05, 31]
-30FA; [7A 64, 05, 9B][, AE, 05]
+1B152; [7A 6A, 05, 03]
+3092; [7A 6A, 05, 85]
+1B166; [7A 6A, 05, 10]
+30F2; [7A 6A, 05, 9B]
+FF66; [7A 6A, 05, A6]
+32FE; [7A 6A, 05, 31]
+30FA; [7A 6A, 05, 9B][, AE, 05]
-3093; [7A 66, 05, 85]
-1B167; [7A 66, 05, 10]
-30F3; [7A 66, 05, 9B]
-FF9D; [7A 66, 05, A6]
+3093; [7A 6C, 05, 85]
+1B167; [7A 6C, 05, 10]
+30F3; [7A 6C, 05, 9B]
+FF9D; [7A 6C, 05, A6]
-1B002; [7A 68 02, 05, 05]
+1B002; [7A 6E 02, 05, 05]
-1B003; [7A 68 09, 05, 05]
+1B003; [7A 6E 09, 05, 05]
-1B004; [7A 68 10, 05, 05]
+1B004; [7A 6E 10, 05, 05]
-1B005; [7A 68 17, 05, 05]
+1B005; [7A 6E 17, 05, 05]
-1B006; [7A 68 1E, 05, 05]
+1B006; [7A 6E 1E, 05, 05]
-1B007; [7A 68 25, 05, 05]
+1B007; [7A 6E 25, 05, 05]
-1B008; [7A 68 2C, 05, 05]
+1B008; [7A 6E 2C, 05, 05]
-1B009; [7A 68 33, 05, 05]
+1B009; [7A 6E 33, 05, 05]
-1B00A; [7A 68 3A, 05, 05]
+1B00A; [7A 6E 3A, 05, 05]
-1B00B; [7A 68 41, 05, 05]
+1B00B; [7A 6E 41, 05, 05]
-1B00C; [7A 68 48, 05, 05]
+1B00C; [7A 6E 48, 05, 05]
-1B00D; [7A 68 4F, 05, 05]
+1B00D; [7A 6E 4F, 05, 05]
-1B00E; [7A 68 56, 05, 05]
+1B00E; [7A 6E 56, 05, 05]
-1B001; [7A 68 5D, 05, 05]
+1B001; [7A 6E 5D, 05, 05]
-1B00F; [7A 68 64, 05, 05]
+1B00F; [7A 6E 64, 05, 05]
-1B010; [7A 68 6B, 05, 05]
+1B010; [7A 6E 6B, 05, 05]
-1B011; [7A 68 72, 05, 05]
+1B011; [7A 6E 72, 05, 05]
-1B012; [7A 68 79, 05, 05]
+1B012; [7A 6E 79, 05, 05]
-1B013; [7A 68 80, 05, 05]
+1B013; [7A 6E 80, 05, 05]
-1B014; [7A 68 87, 05, 05]
+1B014; [7A 6E 87, 05, 05]
-1B015; [7A 68 8E, 05, 05]
+1B015; [7A 6E 8E, 05, 05]
-1B016; [7A 68 95, 05, 05]
+1B016; [7A 6E 95, 05, 05]
-1B017; [7A 68 9C, 05, 05]
+1B017; [7A 6E 9C, 05, 05]
-1B018; [7A 68 A3, 05, 05]
+1B018; [7A 6E A3, 05, 05]
-1B019; [7A 68 AA, 05, 05]
+1B019; [7A 6E AA, 05, 05]
-1B01A; [7A 68 B1, 05, 05]
+1B01A; [7A 6E B1, 05, 05]
-1B01B; [7A 68 B8, 05, 05]
+1B01B; [7A 6E B8, 05, 05]
-1B01C; [7A 68 BF, 05, 05]
+1B01C; [7A 6E BF, 05, 05]
-1B01D; [7A 68 C6, 05, 05]
+1B01D; [7A 6E C6, 05, 05]
-1B01E; [7A 68 CD, 05, 05]
+1B01E; [7A 6E CD, 05, 05]
-1B01F; [7A 68 D4, 05, 05]
+1B01F; [7A 6E D4, 05, 05]
-1B020; [7A 68 DB, 05, 05]
+1B020; [7A 6E DB, 05, 05]
-1B021; [7A 68 E2, 05, 05]
+1B021; [7A 6E E2, 05, 05]
-1B022; [7A 68 E9, 05, 05]
+1B022; [7A 6E E9, 05, 05]
-1B023; [7A 68 F0, 05, 05]
+1B023; [7A 6E F0, 05, 05]
-1B024; [7A 68 F7, 05, 05]
+1B024; [7A 6E F7, 05, 05]
-1B025; [7A 68 FE, 05, 05]
+1B025; [7A 6E FE, 05, 05]
-1B026; [7A 69 07, 05, 05]
+1B026; [7A 6F 07, 05, 05]
-1B027; [7A 69 0E, 05, 05]
+1B027; [7A 6F 0E, 05, 05]
-1B028; [7A 69 15, 05, 05]
+1B028; [7A 6F 15, 05, 05]
-1B029; [7A 69 1C, 05, 05]
+1B029; [7A 6F 1C, 05, 05]
-1B02A; [7A 69 23, 05, 05]
+1B02A; [7A 6F 23, 05, 05]
-1B02B; [7A 69 2A, 05, 05]
+1B02B; [7A 6F 2A, 05, 05]
-1B02C; [7A 69 31, 05, 05]
+1B02C; [7A 6F 31, 05, 05]
-1B02D; [7A 69 38, 05, 05]
+1B02D; [7A 6F 38, 05, 05]
-1B02E; [7A 69 3F, 05, 05]
+1B02E; [7A 6F 3F, 05, 05]
-1B02F; [7A 69 46, 05, 05]
+1B02F; [7A 6F 46, 05, 05]
-1B030; [7A 69 4D, 05, 05]
+1B030; [7A 6F 4D, 05, 05]
-1B031; [7A 69 54, 05, 05]
+1B031; [7A 6F 54, 05, 05]
-1B032; [7A 69 5B, 05, 05]
+1B032; [7A 6F 5B, 05, 05]
-1B033; [7A 69 62, 05, 05]
+1B033; [7A 6F 62, 05, 05]
-1B034; [7A 69 69, 05, 05]
+1B034; [7A 6F 69, 05, 05]
-1B035; [7A 69 70, 05, 05]
+1B035; [7A 6F 70, 05, 05]
-1B036; [7A 69 77, 05, 05]
+1B036; [7A 6F 77, 05, 05]
-1B037; [7A 69 7E, 05, 05]
+1B037; [7A 6F 7E, 05, 05]
-1B038; [7A 69 85, 05, 05]
+1B038; [7A 6F 85, 05, 05]
-1B039; [7A 69 8C, 05, 05]
+1B039; [7A 6F 8C, 05, 05]
-1B03A; [7A 69 93, 05, 05]
+1B03A; [7A 6F 93, 05, 05]
-1B03B; [7A 69 9A, 05, 05]
+1B03B; [7A 6F 9A, 05, 05]
-1B03C; [7A 69 A1, 05, 05]
+1B03C; [7A 6F A1, 05, 05]
-1B03D; [7A 69 A8, 05, 05]
+1B03D; [7A 6F A8, 05, 05]
-1B03E; [7A 69 AF, 05, 05]
+1B03E; [7A 6F AF, 05, 05]
-1B03F; [7A 69 B6, 05, 05]
+1B03F; [7A 6F B6, 05, 05]
-1B040; [7A 69 BD, 05, 05]
+1B040; [7A 6F BD, 05, 05]
-1B041; [7A 69 C4, 05, 05]
+1B041; [7A 6F C4, 05, 05]
-1B042; [7A 69 CB, 05, 05]
+1B042; [7A 6F CB, 05, 05]
-1B043; [7A 69 D2, 05, 05]
+1B043; [7A 6F D2, 05, 05]
-1B044; [7A 69 D9, 05, 05]
+1B044; [7A 6F D9, 05, 05]
-1B045; [7A 69 E0, 05, 05]
+1B045; [7A 6F E0, 05, 05]
-1B046; [7A 69 E7, 05, 05]
+1B046; [7A 6F E7, 05, 05]
-1B047; [7A 69 EE, 05, 05]
+1B047; [7A 6F EE, 05, 05]
-1B048; [7A 69 F5, 05, 05]
+1B048; [7A 6F F5, 05, 05]
-1B049; [7A 69 FC, 05, 05]
+1B049; [7A 6F FC, 05, 05]
-1B04A; [7A 6A 05, 05, 05]
+1B04A; [7A 70 05, 05, 05]
-1B04B; [7A 6A 0C, 05, 05]
+1B04B; [7A 70 0C, 05, 05]
-1B04C; [7A 6A 13, 05, 05]
+1B04C; [7A 70 13, 05, 05]
-1B04D; [7A 6A 1A, 05, 05]
+1B04D; [7A 70 1A, 05, 05]
-1B04E; [7A 6A 21, 05, 05]
+1B04E; [7A 70 21, 05, 05]
-1B04F; [7A 6A 28, 05, 05]
+1B04F; [7A 70 28, 05, 05]
-1B050; [7A 6A 2F, 05, 05]
+1B050; [7A 70 2F, 05, 05]
-1B051; [7A 6A 36, 05, 05]
+1B051; [7A 70 36, 05, 05]
-1B052; [7A 6A 3D, 05, 05]
+1B052; [7A 70 3D, 05, 05]
-1B053; [7A 6A 44, 05, 05]
+1B053; [7A 70 44, 05, 05]
-1B054; [7A 6A 4B, 05, 05]
+1B054; [7A 70 4B, 05, 05]
-1B055; [7A 6A 52, 05, 05]
+1B055; [7A 70 52, 05, 05]
-1B056; [7A 6A 59, 05, 05]
+1B056; [7A 70 59, 05, 05]
-1B057; [7A 6A 60, 05, 05]
+1B057; [7A 70 60, 05, 05]
-1B058; [7A 6A 67, 05, 05]
+1B058; [7A 70 67, 05, 05]
-1B059; [7A 6A 6E, 05, 05]
+1B059; [7A 70 6E, 05, 05]
-1B05A; [7A 6A 75, 05, 05]
+1B05A; [7A 70 75, 05, 05]
-1B05B; [7A 6A 7C, 05, 05]
+1B05B; [7A 70 7C, 05, 05]
-1B05C; [7A 6A 83, 05, 05]
+1B05C; [7A 70 83, 05, 05]
-1B05D; [7A 6A 8A, 05, 05]
+1B05D; [7A 70 8A, 05, 05]
-1B05E; [7A 6A 91, 05, 05]
+1B05E; [7A 70 91, 05, 05]
-1B05F; [7A 6A 98, 05, 05]
+1B05F; [7A 70 98, 05, 05]
-1B060; [7A 6A 9F, 05, 05]
+1B060; [7A 70 9F, 05, 05]
-1B061; [7A 6A A6, 05, 05]
+1B061; [7A 70 A6, 05, 05]
-1B062; [7A 6A AD, 05, 05]
+1B062; [7A 70 AD, 05, 05]
-1B063; [7A 6A B4, 05, 05]
+1B063; [7A 70 B4, 05, 05]
-1B064; [7A 6A BB, 05, 05]
+1B064; [7A 70 BB, 05, 05]
-1B065; [7A 6A C2, 05, 05]
+1B065; [7A 70 C2, 05, 05]
-1B066; [7A 6A C9, 05, 05]
+1B066; [7A 70 C9, 05, 05]
-1B067; [7A 6A D0, 05, 05]
+1B067; [7A 70 D0, 05, 05]
-1B068; [7A 6A D7, 05, 05]
+1B068; [7A 70 D7, 05, 05]
-1B069; [7A 6A DE, 05, 05]
+1B069; [7A 70 DE, 05, 05]
-1B06A; [7A 6A E5, 05, 05]
+1B06A; [7A 70 E5, 05, 05]
-1B06B; [7A 6A EC, 05, 05]
+1B06B; [7A 70 EC, 05, 05]
-1B06C; [7A 6A F3, 05, 05]
+1B06C; [7A 70 F3, 05, 05]
-1B06D; [7A 6A FA, 05, 05]
+1B06D; [7A 70 FA, 05, 05]
-1B06E; [7A 6B 03, 05, 05]
+1B06E; [7A 71 03, 05, 05]
-1B06F; [7A 6B 0A, 05, 05]
+1B06F; [7A 71 0A, 05, 05]
-1B070; [7A 6B 11, 05, 05]
+1B070; [7A 71 11, 05, 05]
-1B071; [7A 6B 18, 05, 05]
+1B071; [7A 71 18, 05, 05]
-1B072; [7A 6B 1F, 05, 05]
+1B072; [7A 71 1F, 05, 05]
-1B073; [7A 6B 26, 05, 05]
+1B073; [7A 71 26, 05, 05]
-1B074; [7A 6B 2D, 05, 05]
+1B074; [7A 71 2D, 05, 05]
-1B075; [7A 6B 34, 05, 05]
+1B075; [7A 71 34, 05, 05]
-1B076; [7A 6B 3B, 05, 05]
+1B076; [7A 71 3B, 05, 05]
-1B077; [7A 6B 42, 05, 05]
+1B077; [7A 71 42, 05, 05]
-1B078; [7A 6B 49, 05, 05]
+1B078; [7A 71 49, 05, 05]
-1B079; [7A 6B 50, 05, 05]
+1B079; [7A 71 50, 05, 05]
-1B07A; [7A 6B 57, 05, 05]
+1B07A; [7A 71 57, 05, 05]
-1B07B; [7A 6B 5E, 05, 05]
+1B07B; [7A 71 5E, 05, 05]
-1B07C; [7A 6B 65, 05, 05]
+1B07C; [7A 71 65, 05, 05]
-1B07D; [7A 6B 6C, 05, 05]
+1B07D; [7A 71 6C, 05, 05]
-1B07E; [7A 6B 73, 05, 05]
+1B07E; [7A 71 73, 05, 05]
-1B07F; [7A 6B 7A, 05, 05]
+1B07F; [7A 71 7A, 05, 05]
-1B080; [7A 6B 81, 05, 05]
+1B080; [7A 71 81, 05, 05]
-1B081; [7A 6B 88, 05, 05]
+1B081; [7A 71 88, 05, 05]
-1B082; [7A 6B 8F, 05, 05]
+1B082; [7A 71 8F, 05, 05]
-1B083; [7A 6B 96, 05, 05]
+1B083; [7A 71 96, 05, 05]
-1B084; [7A 6B 9D, 05, 05]
+1B084; [7A 71 9D, 05, 05]
-1B085; [7A 6B A4, 05, 05]
+1B085; [7A 71 A4, 05, 05]
-1B086; [7A 6B AB, 05, 05]
+1B086; [7A 71 AB, 05, 05]
-1B087; [7A 6B B2, 05, 05]
+1B087; [7A 71 B2, 05, 05]
-1B088; [7A 6B B9, 05, 05]
+1B088; [7A 71 B9, 05, 05]
-1B089; [7A 6B C0, 05, 05]
+1B089; [7A 71 C0, 05, 05]
-1B08A; [7A 6B C7, 05, 05]
+1B08A; [7A 71 C7, 05, 05]
-1B08B; [7A 6B CE, 05, 05]
+1B08B; [7A 71 CE, 05, 05]
-1B08C; [7A 6B D5, 05, 05]
+1B08C; [7A 71 D5, 05, 05]
-1B08D; [7A 6B DC, 05, 05]
+1B08D; [7A 71 DC, 05, 05]
-1B08E; [7A 6B E3, 05, 05]
+1B08E; [7A 71 E3, 05, 05]
-1B08F; [7A 6B EA, 05, 05]
+1B08F; [7A 71 EA, 05, 05]
-1B090; [7A 6B F1, 05, 05]
+1B090; [7A 71 F1, 05, 05]
-1B091; [7A 6B F8, 05, 05]
+1B091; [7A 71 F8, 05, 05]
-1B092; [7A 6B FF, 05, 05]
+1B092; [7A 71 FF, 05, 05]
-1B093; [7A 6C 08, 05, 05]
+1B093; [7A 72 08, 05, 05]
-1B094; [7A 6C 0F, 05, 05]
+1B094; [7A 72 0F, 05, 05]
-1B095; [7A 6C 16, 05, 05]
+1B095; [7A 72 16, 05, 05]
-1B096; [7A 6C 1D, 05, 05]
+1B096; [7A 72 1D, 05, 05]
-1B097; [7A 6C 24, 05, 05]
+1B097; [7A 72 24, 05, 05]
-1B098; [7A 6C 2B, 05, 05]
+1B098; [7A 72 2B, 05, 05]
-1B099; [7A 6C 32, 05, 05]
+1B099; [7A 72 32, 05, 05]
-1B09A; [7A 6C 39, 05, 05]
+1B09A; [7A 72 39, 05, 05]
-1B09B; [7A 6C 40, 05, 05]
+1B09B; [7A 72 40, 05, 05]
-1B09C; [7A 6C 47, 05, 05]
+1B09C; [7A 72 47, 05, 05]
-1B09D; [7A 6C 4E, 05, 05]
+1B09D; [7A 72 4E, 05, 05]
-1B09E; [7A 6C 55, 05, 05]
+1B09E; [7A 72 55, 05, 05]
-1B09F; [7A 6C 5C, 05, 05]
+1B09F; [7A 72 5C, 05, 05]
-1B0A0; [7A 6C 63, 05, 05]
+1B0A0; [7A 72 63, 05, 05]
-1B0A1; [7A 6C 6A, 05, 05]
+1B0A1; [7A 72 6A, 05, 05]
-1B0A2; [7A 6C 71, 05, 05]
+1B0A2; [7A 72 71, 05, 05]
-1B0A3; [7A 6C 78, 05, 05]
+1B0A3; [7A 72 78, 05, 05]
-1B0A4; [7A 6C 7F, 05, 05]
+1B0A4; [7A 72 7F, 05, 05]
-1B0A5; [7A 6C 86, 05, 05]
+1B0A5; [7A 72 86, 05, 05]
-1B0A6; [7A 6C 8D, 05, 05]
+1B0A6; [7A 72 8D, 05, 05]
-1B0A7; [7A 6C 94, 05, 05]
+1B0A7; [7A 72 94, 05, 05]
-1B0A8; [7A 6C 9B, 05, 05]
+1B0A8; [7A 72 9B, 05, 05]
-1B0A9; [7A 6C A2, 05, 05]
+1B0A9; [7A 72 A2, 05, 05]
-1B0AA; [7A 6C A9, 05, 05]
+1B0AA; [7A 72 A9, 05, 05]
-1B0AB; [7A 6C B0, 05, 05]
+1B0AB; [7A 72 B0, 05, 05]
-1B0AC; [7A 6C B7, 05, 05]
+1B0AC; [7A 72 B7, 05, 05]
-1B0AD; [7A 6C BE, 05, 05]
+1B0AD; [7A 72 BE, 05, 05]
-1B0AE; [7A 6C C5, 05, 05]
+1B0AE; [7A 72 C5, 05, 05]
-1B0AF; [7A 6C CC, 05, 05]
+1B0AF; [7A 72 CC, 05, 05]
-1B0B0; [7A 6C D3, 05, 05]
+1B0B0; [7A 72 D3, 05, 05]
-1B0B1; [7A 6C DA, 05, 05]
+1B0B1; [7A 72 DA, 05, 05]
-1B0B2; [7A 6C E1, 05, 05]
+1B0B2; [7A 72 E1, 05, 05]
-1B0B3; [7A 6C E8, 05, 05]
+1B0B3; [7A 72 E8, 05, 05]
-1B0B4; [7A 6C EF, 05, 05]
+1B0B4; [7A 72 EF, 05, 05]
-1B0B5; [7A 6C F6, 05, 05]
+1B0B5; [7A 72 F6, 05, 05]
-1B0B6; [7A 6C FD, 05, 05]
+1B0B6; [7A 72 FD, 05, 05]
-1B0B7; [7A 6D 06, 05, 05]
+1B0B7; [7A 73 06, 05, 05]
-1B0B8; [7A 6D 0D, 05, 05]
+1B0B8; [7A 73 0D, 05, 05]
-1B0B9; [7A 6D 14, 05, 05]
+1B0B9; [7A 73 14, 05, 05]
-1B0BA; [7A 6D 1B, 05, 05]
+1B0BA; [7A 73 1B, 05, 05]
-1B0BB; [7A 6D 22, 05, 05]
+1B0BB; [7A 73 22, 05, 05]
-1B0BC; [7A 6D 29, 05, 05]
+1B0BC; [7A 73 29, 05, 05]
-1B0BD; [7A 6D 30, 05, 05]
+1B0BD; [7A 73 30, 05, 05]
-1B0BE; [7A 6D 37, 05, 05]
+1B0BE; [7A 73 37, 05, 05]
-1B0BF; [7A 6D 3E, 05, 05]
+1B0BF; [7A 73 3E, 05, 05]
-1B0C0; [7A 6D 45, 05, 05]
+1B0C0; [7A 73 45, 05, 05]
-1B0C1; [7A 6D 4C, 05, 05]
+1B0C1; [7A 73 4C, 05, 05]
-1B0C2; [7A 6D 53, 05, 05]
+1B0C2; [7A 73 53, 05, 05]
-1B0C3; [7A 6D 5A, 05, 05]
+1B0C3; [7A 73 5A, 05, 05]
-1B0C4; [7A 6D 61, 05, 05]
+1B0C4; [7A 73 61, 05, 05]
-1B0C5; [7A 6D 68, 05, 05]
+1B0C5; [7A 73 68, 05, 05]
-1B0C6; [7A 6D 6F, 05, 05]
+1B0C6; [7A 73 6F, 05, 05]
-1B0C7; [7A 6D 76, 05, 05]
+1B0C7; [7A 73 76, 05, 05]
-1B0C8; [7A 6D 7D, 05, 05]
+1B0C8; [7A 73 7D, 05, 05]
-1B0C9; [7A 6D 84, 05, 05]
+1B0C9; [7A 73 84, 05, 05]
-1B0CA; [7A 6D 8B, 05, 05]
+1B0CA; [7A 73 8B, 05, 05]
-1B0CB; [7A 6D 92, 05, 05]
+1B0CB; [7A 73 92, 05, 05]
-1B0CC; [7A 6D 99, 05, 05]
+1B0CC; [7A 73 99, 05, 05]
-1B0CD; [7A 6D A0, 05, 05]
+1B0CD; [7A 73 A0, 05, 05]
-1B0CE; [7A 6D A7, 05, 05]
+1B0CE; [7A 73 A7, 05, 05]
-1B0CF; [7A 6D AE, 05, 05]
+1B0CF; [7A 73 AE, 05, 05]
-1B0D0; [7A 6D B5, 05, 05]
+1B0D0; [7A 73 B5, 05, 05]
-1B0D1; [7A 6D BC, 05, 05]
+1B0D1; [7A 73 BC, 05, 05]
-1B0D2; [7A 6D C3, 05, 05]
+1B0D2; [7A 73 C3, 05, 05]
-1B0D3; [7A 6D CA, 05, 05]
+1B0D3; [7A 73 CA, 05, 05]
-1B0D4; [7A 6D D1, 05, 05]
+1B0D4; [7A 73 D1, 05, 05]
-1B0D5; [7A 6D D8, 05, 05]
+1B0D5; [7A 73 D8, 05, 05]
-1B0D6; [7A 6D DF, 05, 05]
+1B0D6; [7A 73 DF, 05, 05]
-1B0D7; [7A 6D E6, 05, 05]
+1B0D7; [7A 73 E6, 05, 05]
-1B0D8; [7A 6D ED, 05, 05]
+1B0D8; [7A 73 ED, 05, 05]
-1B0D9; [7A 6D F4, 05, 05]
+1B0D9; [7A 73 F4, 05, 05]
-1B0DA; [7A 6D FB, 05, 05]
+1B0DA; [7A 73 FB, 05, 05]
-1B0DB; [7A 6E 04, 05, 05]
+1B0DB; [7A 74 04, 05, 05]
-1B0DC; [7A 6E 0B, 05, 05]
+1B0DC; [7A 74 0B, 05, 05]
-1B0DD; [7A 6E 12, 05, 05]
+1B0DD; [7A 74 12, 05, 05]
-1B0DE; [7A 6E 19, 05, 05]
+1B0DE; [7A 74 19, 05, 05]
-1B0DF; [7A 6E 20, 05, 05]
+1B0DF; [7A 74 20, 05, 05]
-1B0E0; [7A 6E 27, 05, 05]
+1B0E0; [7A 74 27, 05, 05]
-1B0E1; [7A 6E 2E, 05, 05]
+1B0E1; [7A 74 2E, 05, 05]
-1B0E2; [7A 6E 35, 05, 05]
+1B0E2; [7A 74 35, 05, 05]
-1B0E3; [7A 6E 3C, 05, 05]
+1B0E3; [7A 74 3C, 05, 05]
-1B0E4; [7A 6E 43, 05, 05]
+1B0E4; [7A 74 43, 05, 05]
-1B0E5; [7A 6E 4A, 05, 05]
+1B0E5; [7A 74 4A, 05, 05]
-1B0E6; [7A 6E 51, 05, 05]
+1B0E6; [7A 74 51, 05, 05]
-1B0E7; [7A 6E 58, 05, 05]
+1B0E7; [7A 74 58, 05, 05]
-1B0E8; [7A 6E 5F, 05, 05]
+1B0E8; [7A 74 5F, 05, 05]
-1B0E9; [7A 6E 66, 05, 05]
+1B0E9; [7A 74 66, 05, 05]
-1B0EA; [7A 6E 6D, 05, 05]
+1B0EA; [7A 74 6D, 05, 05]
-1B0EB; [7A 6E 74, 05, 05]
+1B0EB; [7A 74 74, 05, 05]
-1B0EC; [7A 6E 7B, 05, 05]
+1B0EC; [7A 74 7B, 05, 05]
-1B0ED; [7A 6E 82, 05, 05]
+1B0ED; [7A 74 82, 05, 05]
-1B0EE; [7A 6E 89, 05, 05]
+1B0EE; [7A 74 89, 05, 05]
-1B0EF; [7A 6E 90, 05, 05]
+1B0EF; [7A 74 90, 05, 05]
-1B0F0; [7A 6E 97, 05, 05]
+1B0F0; [7A 74 97, 05, 05]
-1B0F1; [7A 6E 9E, 05, 05]
+1B0F1; [7A 74 9E, 05, 05]
-1B0F2; [7A 6E A5, 05, 05]
+1B0F2; [7A 74 A5, 05, 05]
-1B0F3; [7A 6E AC, 05, 05]
+1B0F3; [7A 74 AC, 05, 05]
-1B0F4; [7A 6E B3, 05, 05]
+1B0F4; [7A 74 B3, 05, 05]
-1B0F5; [7A 6E BA, 05, 05]
+1B0F5; [7A 74 BA, 05, 05]
-1B0F6; [7A 6E C1, 05, 05]
+1B0F6; [7A 74 C1, 05, 05]
-1B0F7; [7A 6E C8, 05, 05]
+1B0F7; [7A 74 C8, 05, 05]
-1B0F8; [7A 6E CF, 05, 05]
+1B0F8; [7A 74 CF, 05, 05]
-1B0F9; [7A 6E D6, 05, 05]
+1B0F9; [7A 74 D6, 05, 05]
-1B0FA; [7A 6E DD, 05, 05]
+1B0FA; [7A 74 DD, 05, 05]
-1B0FB; [7A 6E E4, 05, 05]
+1B0FB; [7A 74 E4, 05, 05]
-1B0FC; [7A 6E EB, 05, 05]
+1B0FC; [7A 74 EB, 05, 05]
-1B0FD; [7A 6E F2, 05, 05]
+1B0FD; [7A 74 F2, 05, 05]
-1B0FE; [7A 6E F9, 05, 05]
+1B0FE; [7A 74 F9, 05, 05]
-1B0FF; [7A 6F 02, 05, 05]
+1B0FF; [7A 75 02, 05, 05]
-1B100; [7A 6F 09, 05, 05]
+1B100; [7A 75 09, 05, 05]
-1B101; [7A 6F 10, 05, 05]
+1B101; [7A 75 10, 05, 05]
-1B102; [7A 6F 17, 05, 05]
+1B102; [7A 75 17, 05, 05]
-1B103; [7A 6F 1E, 05, 05]
+1B103; [7A 75 1E, 05, 05]
-1B104; [7A 6F 25, 05, 05]
+1B104; [7A 75 25, 05, 05]
-1B105; [7A 6F 2C, 05, 05]
+1B105; [7A 75 2C, 05, 05]
-1B106; [7A 6F 33, 05, 05]
+1B106; [7A 75 33, 05, 05]
-1B107; [7A 6F 3A, 05, 05]
+1B107; [7A 75 3A, 05, 05]
-1B108; [7A 6F 41, 05, 05]
+1B108; [7A 75 41, 05, 05]
-1B109; [7A 6F 48, 05, 05]
+1B109; [7A 75 48, 05, 05]
-1B10A; [7A 6F 4F, 05, 05]
+1B10A; [7A 75 4F, 05, 05]
-1B10B; [7A 6F 56, 05, 05]
+1B10B; [7A 75 56, 05, 05]
-1B10C; [7A 6F 5D, 05, 05]
+1B10C; [7A 75 5D, 05, 05]
-1B10D; [7A 6F 64, 05, 05]
+1B10D; [7A 75 64, 05, 05]
-1B10E; [7A 6F 6B, 05, 05]
+1B10E; [7A 75 6B, 05, 05]
-1B10F; [7A 6F 72, 05, 05]
+1B10F; [7A 75 72, 05, 05]
-1B110; [7A 6F 79, 05, 05]
+1B110; [7A 75 79, 05, 05]
-1B111; [7A 6F 80, 05, 05]
+1B111; [7A 75 80, 05, 05]
-1B112; [7A 6F 87, 05, 05]
+1B112; [7A 75 87, 05, 05]
-1B113; [7A 6F 8E, 05, 05]
+1B113; [7A 75 8E, 05, 05]
-1B114; [7A 6F 95, 05, 05]
+1B114; [7A 75 95, 05, 05]
-1B115; [7A 6F 9C, 05, 05]
+1B115; [7A 75 9C, 05, 05]
-1B116; [7A 6F A3, 05, 05]
+1B116; [7A 75 A3, 05, 05]
-1B117; [7A 6F AA, 05, 05]
+1B117; [7A 75 AA, 05, 05]
-1B118; [7A 6F B1, 05, 05]
+1B118; [7A 75 B1, 05, 05]
-1B119; [7A 6F B8, 05, 05]
+1B119; [7A 75 B8, 05, 05]
-1B11A; [7A 6F BF, 05, 05]
+1B11A; [7A 75 BF, 05, 05]
-1B11B; [7A 6F C6, 05, 05]
+1B11B; [7A 75 C6, 05, 05]
-1B11C; [7A 6F CD, 05, 05]
+1B11C; [7A 75 CD, 05, 05]
-1B11D; [7A 6F D4, 05, 05]
+1B11D; [7A 75 D4, 05, 05]
-1B11E; [7A 6F DB, 05, 05]
+1B11E; [7A 75 DB, 05, 05]
FDD1 3105; [7B 04 02, 05, 05] # BOPOMOFO first primary starts new lead byte (compressible)
@@ -45536,437 +46383,499 @@ FDD1 1E108; [7B F3 02, 05, 05] # Nyiakeng_Puachue_Hmong first primary (compressi
1E14E; [7B F4 69, 05, 05]
-FDD1 1E2E1; [7B F5 02, 05, 05] # Wancho first primary (compressible)
+FDD1 1E290; [7B F5 02, 05, 05] # Toto first primary (compressible)
+
+1E290; [7B F5 09, 05, 05]
+
+1E291; [7B F5 10, 05, 05]
+
+1E292; [7B F5 17, 05, 05]
+
+1E293; [7B F5 1E, 05, 05]
+
+1E294; [7B F5 25, 05, 05]
+
+1E295; [7B F5 2C, 05, 05]
+
+1E296; [7B F5 33, 05, 05]
+
+1E297; [7B F5 3A, 05, 05]
+
+1E298; [7B F5 41, 05, 05]
+
+1E299; [7B F5 48, 05, 05]
+
+1E29A; [7B F5 4F, 05, 05]
+
+1E29B; [7B F5 56, 05, 05]
+
+1E29C; [7B F5 5D, 05, 05]
+
+1E29D; [7B F5 64, 05, 05]
+
+1E29E; [7B F5 6B, 05, 05]
+
+1E29F; [7B F5 72, 05, 05]
-1E2C0; [7B F5 09, 05, 05]
+1E2A0; [7B F5 79, 05, 05]
-1E2C1; [7B F5 10, 05, 05]
+1E2A1; [7B F5 80, 05, 05]
-1E2C2; [7B F5 17, 05, 05]
+1E2A2; [7B F5 87, 05, 05]
-1E2C3; [7B F5 1E, 05, 05]
+1E2A3; [7B F5 8E, 05, 05]
-1E2C4; [7B F5 25, 05, 05]
+1E2A4; [7B F5 95, 05, 05]
-1E2C5; [7B F5 2C, 05, 05]
+1E2A5; [7B F5 9C, 05, 05]
-1E2C6; [7B F5 33, 05, 05]
+1E2A6; [7B F5 A3, 05, 05]
-1E2C7; [7B F5 3A, 05, 05]
+1E2A7; [7B F5 AA, 05, 05]
-1E2C8; [7B F5 41, 05, 05]
+1E2A8; [7B F5 B1, 05, 05]
-1E2C9; [7B F5 48, 05, 05]
+1E2A9; [7B F5 B8, 05, 05]
-1E2CA; [7B F5 4F, 05, 05]
+1E2AA; [7B F5 BF, 05, 05]
-1E2CB; [7B F5 56, 05, 05]
+1E2AB; [7B F5 C6, 05, 05]
-1E2CC; [7B F5 5D, 05, 05]
+1E2AC; [7B F5 CD, 05, 05]
-1E2CD; [7B F5 64, 05, 05]
+1E2AD; [7B F5 D4, 05, 05]
-1E2CE; [7B F5 6B, 05, 05]
+FDD1 1E2E1; [7B F6 02, 05, 05] # Wancho first primary (compressible)
-1E2CF; [7B F5 72, 05, 05]
+1E2C0; [7B F6 09, 05, 05]
-1E2D0; [7B F5 79, 05, 05]
+1E2C1; [7B F6 10, 05, 05]
-1E2D1; [7B F5 80, 05, 05]
+1E2C2; [7B F6 17, 05, 05]
-1E2D2; [7B F5 87, 05, 05]
+1E2C3; [7B F6 1E, 05, 05]
-1E2D3; [7B F5 8E, 05, 05]
+1E2C4; [7B F6 25, 05, 05]
-1E2D4; [7B F5 95, 05, 05]
+1E2C5; [7B F6 2C, 05, 05]
-1E2D5; [7B F5 9C, 05, 05]
+1E2C6; [7B F6 33, 05, 05]
-1E2D6; [7B F5 A3, 05, 05]
+1E2C7; [7B F6 3A, 05, 05]
-1E2D7; [7B F5 AA, 05, 05]
+1E2C8; [7B F6 41, 05, 05]
-1E2D8; [7B F5 B1, 05, 05]
+1E2C9; [7B F6 48, 05, 05]
-1E2D9; [7B F5 B8, 05, 05]
+1E2CA; [7B F6 4F, 05, 05]
-1E2DA; [7B F5 BF, 05, 05]
+1E2CB; [7B F6 56, 05, 05]
-1E2DB; [7B F5 C6, 05, 05]
+1E2CC; [7B F6 5D, 05, 05]
-1E2DC; [7B F5 CD, 05, 05]
+1E2CD; [7B F6 64, 05, 05]
-1E2DD; [7B F5 D4, 05, 05]
+1E2CE; [7B F6 6B, 05, 05]
-1E2DE; [7B F5 DB, 05, 05]
+1E2CF; [7B F6 72, 05, 05]
-1E2DF; [7B F5 E2, 05, 05]
+1E2D0; [7B F6 79, 05, 05]
-1E2E0; [7B F5 E9, 05, 05]
+1E2D1; [7B F6 80, 05, 05]
-1E2E1; [7B F5 F0, 05, 05]
+1E2D2; [7B F6 87, 05, 05]
-1E2E2; [7B F5 F7, 05, 05]
+1E2D3; [7B F6 8E, 05, 05]
-1E2E3; [7B F5 FE, 05, 05]
+1E2D4; [7B F6 95, 05, 05]
-1E2E4; [7B F6 07, 05, 05]
+1E2D5; [7B F6 9C, 05, 05]
-1E2E5; [7B F6 0E, 05, 05]
+1E2D6; [7B F6 A3, 05, 05]
-1E2E6; [7B F6 15, 05, 05]
+1E2D7; [7B F6 AA, 05, 05]
-1E2E7; [7B F6 1C, 05, 05]
+1E2D8; [7B F6 B1, 05, 05]
-1E2E8; [7B F6 23, 05, 05]
+1E2D9; [7B F6 B8, 05, 05]
-1E2E9; [7B F6 2A, 05, 05]
+1E2DA; [7B F6 BF, 05, 05]
-1E2EA; [7B F6 31, 05, 05]
+1E2DB; [7B F6 C6, 05, 05]
-1E2EB; [7B F6 38, 05, 05]
+1E2DC; [7B F6 CD, 05, 05]
-FDD1 10280; [7B F7 02, 05, 05] # Lycian first primary (compressible)
+1E2DD; [7B F6 D4, 05, 05]
-10280; [7B F7 09, 05, 05]
+1E2DE; [7B F6 DB, 05, 05]
-10281; [7B F7 10, 05, 05]
+1E2DF; [7B F6 E2, 05, 05]
-10282; [7B F7 17, 05, 05]
+1E2E0; [7B F6 E9, 05, 05]
-10283; [7B F7 1E, 05, 05]
+1E2E1; [7B F6 F0, 05, 05]
-10284; [7B F7 25, 05, 05]
+1E2E2; [7B F6 F7, 05, 05]
-10285; [7B F7 2C, 05, 05]
+1E2E3; [7B F6 FE, 05, 05]
-10286; [7B F7 33, 05, 05]
+1E2E4; [7B F7 07, 05, 05]
-10287; [7B F7 3A, 05, 05]
+1E2E5; [7B F7 0E, 05, 05]
-10288; [7B F7 41, 05, 05]
+1E2E6; [7B F7 15, 05, 05]
-10289; [7B F7 48, 05, 05]
+1E2E7; [7B F7 1C, 05, 05]
-1028A; [7B F7 4F, 05, 05]
+1E2E8; [7B F7 23, 05, 05]
-1028B; [7B F7 56, 05, 05]
+1E2E9; [7B F7 2A, 05, 05]
-1028C; [7B F7 5D, 05, 05]
+1E2EA; [7B F7 31, 05, 05]
-1028D; [7B F7 64, 05, 05]
+1E2EB; [7B F7 38, 05, 05]
-1028E; [7B F7 6B, 05, 05]
+FDD1 10280; [7B F8 02, 05, 05] # Lycian first primary (compressible)
-1028F; [7B F7 72, 05, 05]
+10280; [7B F8 09, 05, 05]
-10290; [7B F7 79, 05, 05]
+10281; [7B F8 10, 05, 05]
-10291; [7B F7 80, 05, 05]
+10282; [7B F8 17, 05, 05]
-10292; [7B F7 87, 05, 05]
+10283; [7B F8 1E, 05, 05]
-10293; [7B F7 8E, 05, 05]
+10284; [7B F8 25, 05, 05]
-10294; [7B F7 95, 05, 05]
+10285; [7B F8 2C, 05, 05]
-10295; [7B F7 9C, 05, 05]
+10286; [7B F8 33, 05, 05]
-10296; [7B F7 A3, 05, 05]
+10287; [7B F8 3A, 05, 05]
-10297; [7B F7 AA, 05, 05]
+10288; [7B F8 41, 05, 05]
-10298; [7B F7 B1, 05, 05]
+10289; [7B F8 48, 05, 05]
-10299; [7B F7 B8, 05, 05]
+1028A; [7B F8 4F, 05, 05]
-1029A; [7B F7 BF, 05, 05]
+1028B; [7B F8 56, 05, 05]
-1029B; [7B F7 C6, 05, 05]
+1028C; [7B F8 5D, 05, 05]
-1029C; [7B F7 CD, 05, 05]
+1028D; [7B F8 64, 05, 05]
-FDD1 102A0; [7B F8 02, 05, 05] # Carian first primary (compressible)
+1028E; [7B F8 6B, 05, 05]
-102A0; [7B F8 09, 05, 05]
+1028F; [7B F8 72, 05, 05]
-102A1; [7B F8 10, 05, 05]
+10290; [7B F8 79, 05, 05]
-102A2; [7B F8 17, 05, 05]
+10291; [7B F8 80, 05, 05]
-102A3; [7B F8 1E, 05, 05]
+10292; [7B F8 87, 05, 05]
-102A4; [7B F8 25, 05, 05]
+10293; [7B F8 8E, 05, 05]
-102A5; [7B F8 2C, 05, 05]
+10294; [7B F8 95, 05, 05]
-102A6; [7B F8 33, 05, 05]
+10295; [7B F8 9C, 05, 05]
-102A7; [7B F8 3A, 05, 05]
+10296; [7B F8 A3, 05, 05]
-102A8; [7B F8 41, 05, 05]
+10297; [7B F8 AA, 05, 05]
-102A9; [7B F8 48, 05, 05]
+10298; [7B F8 B1, 05, 05]
-102AA; [7B F8 4F, 05, 05]
+10299; [7B F8 B8, 05, 05]
-102AB; [7B F8 56, 05, 05]
+1029A; [7B F8 BF, 05, 05]
-102AC; [7B F8 5D, 05, 05]
+1029B; [7B F8 C6, 05, 05]
-102AD; [7B F8 64, 05, 05]
+1029C; [7B F8 CD, 05, 05]
-102AE; [7B F8 6B, 05, 05]
+FDD1 102A0; [7B F9 02, 05, 05] # Carian first primary (compressible)
-102AF; [7B F8 72, 05, 05]
+102A0; [7B F9 09, 05, 05]
-102B0; [7B F8 79, 05, 05]
+102A1; [7B F9 10, 05, 05]
-102B1; [7B F8 80, 05, 05]
+102A2; [7B F9 17, 05, 05]
-102B2; [7B F8 87, 05, 05]
+102A3; [7B F9 1E, 05, 05]
-102B3; [7B F8 8E, 05, 05]
+102A4; [7B F9 25, 05, 05]
-102B4; [7B F8 95, 05, 05]
+102A5; [7B F9 2C, 05, 05]
-102B5; [7B F8 9C, 05, 05]
+102A6; [7B F9 33, 05, 05]
-102B6; [7B F8 A3, 05, 05]
+102A7; [7B F9 3A, 05, 05]
-102B7; [7B F8 AA, 05, 05]
+102A8; [7B F9 41, 05, 05]
-102B8; [7B F8 B1, 05, 05]
+102A9; [7B F9 48, 05, 05]
-102B9; [7B F8 B8, 05, 05]
+102AA; [7B F9 4F, 05, 05]
-102BA; [7B F8 BF, 05, 05]
+102AB; [7B F9 56, 05, 05]
-102BB; [7B F8 C6, 05, 05]
+102AC; [7B F9 5D, 05, 05]
-102BC; [7B F8 CD, 05, 05]
+102AD; [7B F9 64, 05, 05]
-102BD; [7B F8 D4, 05, 05]
+102AE; [7B F9 6B, 05, 05]
-102BE; [7B F8 DB, 05, 05]
+102AF; [7B F9 72, 05, 05]
-102BF; [7B F8 E2, 05, 05]
+102B0; [7B F9 79, 05, 05]
-102C0; [7B F8 E9, 05, 05]
+102B1; [7B F9 80, 05, 05]
-102C1; [7B F8 F0, 05, 05]
+102B2; [7B F9 87, 05, 05]
-102C2; [7B F8 F7, 05, 05]
+102B3; [7B F9 8E, 05, 05]
-102C3; [7B F8 FE, 05, 05]
+102B4; [7B F9 95, 05, 05]
-102C4; [7B F9 07, 05, 05]
+102B5; [7B F9 9C, 05, 05]
-102C5; [7B F9 0E, 05, 05]
+102B6; [7B F9 A3, 05, 05]
-102C6; [7B F9 15, 05, 05]
+102B7; [7B F9 AA, 05, 05]
-102C7; [7B F9 1C, 05, 05]
+102B8; [7B F9 B1, 05, 05]
-102C8; [7B F9 23, 05, 05]
+102B9; [7B F9 B8, 05, 05]
-102C9; [7B F9 2A, 05, 05]
+102BA; [7B F9 BF, 05, 05]
-102CA; [7B F9 31, 05, 05]
+102BB; [7B F9 C6, 05, 05]
-102CB; [7B F9 38, 05, 05]
+102BC; [7B F9 CD, 05, 05]
-102CC; [7B F9 3F, 05, 05]
+102BD; [7B F9 D4, 05, 05]
-102CD; [7B F9 46, 05, 05]
+102BE; [7B F9 DB, 05, 05]
-102CE; [7B F9 4D, 05, 05]
+102BF; [7B F9 E2, 05, 05]
-102CF; [7B F9 54, 05, 05]
+102C0; [7B F9 E9, 05, 05]
-102D0; [7B F9 5B, 05, 05]
+102C1; [7B F9 F0, 05, 05]
-FDD1 10920; [7B FA 02, 05, 05] # Lydian first primary (compressible)
+102C2; [7B F9 F7, 05, 05]
-10920; [7B FA 09, 05, 05]
+102C3; [7B F9 FE, 05, 05]
-10921; [7B FA 10, 05, 05]
+102C4; [7B FA 07, 05, 05]
-10922; [7B FA 17, 05, 05]
+102C5; [7B FA 0E, 05, 05]
-10923; [7B FA 1E, 05, 05]
+102C6; [7B FA 15, 05, 05]
-10924; [7B FA 25, 05, 05]
+102C7; [7B FA 1C, 05, 05]
-10925; [7B FA 2C, 05, 05]
+102C8; [7B FA 23, 05, 05]
-10926; [7B FA 33, 05, 05]
+102C9; [7B FA 2A, 05, 05]
-10927; [7B FA 3A, 05, 05]
+102CA; [7B FA 31, 05, 05]
-10928; [7B FA 41, 05, 05]
+102CB; [7B FA 38, 05, 05]
-10929; [7B FA 48, 05, 05]
+102CC; [7B FA 3F, 05, 05]
-1092A; [7B FA 4F, 05, 05]
+102CD; [7B FA 46, 05, 05]
-1092B; [7B FA 56, 05, 05]
+102CE; [7B FA 4D, 05, 05]
-1092C; [7B FA 5D, 05, 05]
+102CF; [7B FA 54, 05, 05]
-1092D; [7B FA 64, 05, 05]
+102D0; [7B FA 5B, 05, 05]
-1092E; [7B FA 6B, 05, 05]
+FDD1 10920; [7B FB 02, 05, 05] # Lydian first primary (compressible)
-1092F; [7B FA 72, 05, 05]
+10920; [7B FB 09, 05, 05]
-10930; [7B FA 79, 05, 05]
+10921; [7B FB 10, 05, 05]
-10931; [7B FA 80, 05, 05]
+10922; [7B FB 17, 05, 05]
-10932; [7B FA 87, 05, 05]
+10923; [7B FB 1E, 05, 05]
-10933; [7B FA 8E, 05, 05]
+10924; [7B FB 25, 05, 05]
-10934; [7B FA 95, 05, 05]
+10925; [7B FB 2C, 05, 05]
-10935; [7B FA 9C, 05, 05]
+10926; [7B FB 33, 05, 05]
-10936; [7B FA A3, 05, 05]
+10927; [7B FB 3A, 05, 05]
-10937; [7B FA AA, 05, 05]
+10928; [7B FB 41, 05, 05]
-10938; [7B FA B1, 05, 05]
+10929; [7B FB 48, 05, 05]
-10939; [7B FA B8, 05, 05]
+1092A; [7B FB 4F, 05, 05]
-FDD1 10300; [7B FB 02, 05, 05] # OLD_ITALIC first primary (compressible)
+1092B; [7B FB 56, 05, 05]
-10300; [7B FB 09, 05, 05]
+1092C; [7B FB 5D, 05, 05]
-10301; [7B FB 10, 05, 05]
+1092D; [7B FB 64, 05, 05]
-10302; [7B FB 17, 05, 05]
+1092E; [7B FB 6B, 05, 05]
-10303; [7B FB 1E, 05, 05]
+1092F; [7B FB 72, 05, 05]
-10304; [7B FB 25, 05, 05]
+10930; [7B FB 79, 05, 05]
-10305; [7B FB 2C, 05, 05]
+10931; [7B FB 80, 05, 05]
-10306; [7B FB 33, 05, 05]
+10932; [7B FB 87, 05, 05]
-10307; [7B FB 3A, 05, 05]
+10933; [7B FB 8E, 05, 05]
-10308; [7B FB 41, 05, 05]
+10934; [7B FB 95, 05, 05]
-10309; [7B FB 48, 05, 05]
+10935; [7B FB 9C, 05, 05]
-1030A; [7B FB 4F, 05, 05]
+10936; [7B FB A3, 05, 05]
-1030B; [7B FB 56, 05, 05]
+10937; [7B FB AA, 05, 05]
-1030C; [7B FB 5D, 05, 05]
+10938; [7B FB B1, 05, 05]
-1030D; [7B FB 64, 05, 05]
+10939; [7B FB B8, 05, 05]
-1030E; [7B FB 6B, 05, 05]
+FDD1 10300; [7B FC 02, 05, 05] # OLD_ITALIC first primary (compressible)
-1031F; [7B FB 72, 05, 05]
+10300; [7B FC 09, 05, 05]
-1030F; [7B FB 79, 05, 05]
+10301; [7B FC 10, 05, 05]
-10310; [7B FB 80, 05, 05]
+10302; [7B FC 17, 05, 05]
-10311; [7B FB 87, 05, 05]
+10303; [7B FC 1E, 05, 05]
-10312; [7B FB 8E, 05, 05]
+10304; [7B FC 25, 05, 05]
-10313; [7B FB 95, 05, 05]
+10305; [7B FC 2C, 05, 05]
-10314; [7B FB 9C, 05, 05]
+10306; [7B FC 33, 05, 05]
-10315; [7B FB A3, 05, 05]
+10307; [7B FC 3A, 05, 05]
-10316; [7B FB AA, 05, 05]
+10308; [7B FC 41, 05, 05]
-10317; [7B FB B1, 05, 05]
+10309; [7B FC 48, 05, 05]
-10318; [7B FB B8, 05, 05]
+1030A; [7B FC 4F, 05, 05]
-10319; [7B FB BF, 05, 05]
+1030B; [7B FC 56, 05, 05]
-1031A; [7B FB C6, 05, 05]
+1030C; [7B FC 5D, 05, 05]
-1031B; [7B FB CD, 05, 05]
+1030D; [7B FC 64, 05, 05]
-1031C; [7B FB D4, 05, 05]
+1030E; [7B FC 6B, 05, 05]
-1031D; [7B FB DB, 05, 05]
+1031F; [7B FC 72, 05, 05]
-1031E; [7B FB E2, 05, 05]
+1030F; [7B FC 79, 05, 05]
-1032D; [7B FB E9, 05, 05]
+10310; [7B FC 80, 05, 05]
-1032E; [7B FB F0, 05, 05]
+10311; [7B FC 87, 05, 05]
-1032F; [7B FB F7, 05, 05]
+10312; [7B FC 8E, 05, 05]
-FDD1 10330; [7B FC 02, 05, 05] # GOTHIC first primary (compressible)
+10313; [7B FC 95, 05, 05]
-10330; [7B FC 09, 05, 05]
+10314; [7B FC 9C, 05, 05]
-10331; [7B FC 10, 05, 05]
+10315; [7B FC A3, 05, 05]
-10332; [7B FC 17, 05, 05]
+10316; [7B FC AA, 05, 05]
-10333; [7B FC 1E, 05, 05]
+10317; [7B FC B1, 05, 05]
-10334; [7B FC 25, 05, 05]
+10318; [7B FC B8, 05, 05]
-10335; [7B FC 2C, 05, 05]
+10319; [7B FC BF, 05, 05]
-10336; [7B FC 33, 05, 05]
+1031A; [7B FC C6, 05, 05]
-10337; [7B FC 3A, 05, 05]
+1031B; [7B FC CD, 05, 05]
-10338; [7B FC 41, 05, 05]
+1031C; [7B FC D4, 05, 05]
-10339; [7B FC 48, 05, 05]
+1031D; [7B FC DB, 05, 05]
-1033A; [7B FC 4F, 05, 05]
+1031E; [7B FC E2, 05, 05]
-1033B; [7B FC 56, 05, 05]
+1032D; [7B FC E9, 05, 05]
-1033C; [7B FC 5D, 05, 05]
+1032E; [7B FC F0, 05, 05]
-1033D; [7B FC 64, 05, 05]
+1032F; [7B FC F7, 05, 05]
-1033E; [7B FC 6B, 05, 05]
+FDD1 10330; [7B FD 02, 05, 05] # GOTHIC first primary (compressible)
-1033F; [7B FC 72, 05, 05]
+10330; [7B FD 09, 05, 05]
-10340; [7B FC 79, 05, 05]
+10331; [7B FD 10, 05, 05]
-10341; [7B FC 80, 05, 05]
+10332; [7B FD 17, 05, 05]
-10342; [7B FC 87, 05, 05]
+10333; [7B FD 1E, 05, 05]
-10343; [7B FC 8E, 05, 05]
+10334; [7B FD 25, 05, 05]
-10344; [7B FC 95, 05, 05]
+10335; [7B FD 2C, 05, 05]
-10345; [7B FC 9C, 05, 05]
+10336; [7B FD 33, 05, 05]
-10346; [7B FC A3, 05, 05]
+10337; [7B FD 3A, 05, 05]
-10347; [7B FC AA, 05, 05]
+10338; [7B FD 41, 05, 05]
-10348; [7B FC B1, 05, 05]
+10339; [7B FD 48, 05, 05]
-10349; [7B FC B8, 05, 05]
+1033A; [7B FD 4F, 05, 05]
-1034A; [7B FC BF, 05, 05]
+1033B; [7B FD 56, 05, 05]
+
+1033C; [7B FD 5D, 05, 05]
+
+1033D; [7B FD 64, 05, 05]
+
+1033E; [7B FD 6B, 05, 05]
+
+1033F; [7B FD 72, 05, 05]
+
+10340; [7B FD 79, 05, 05]
+
+10341; [7B FD 80, 05, 05]
+
+10342; [7B FD 87, 05, 05]
+
+10343; [7B FD 8E, 05, 05]
+
+10344; [7B FD 95, 05, 05]
+
+10345; [7B FD 9C, 05, 05]
+
+10346; [7B FD A3, 05, 05]
+
+10347; [7B FD AA, 05, 05]
+
+10348; [7B FD B1, 05, 05]
+
+10349; [7B FD B8, 05, 05]
+
+1034A; [7B FD BF, 05, 05]
FDD1 10414; [7C 04 02, 05, 05] # DESERET first primary starts new lead byte (compressible)
@@ -46718,4628 +47627,5129 @@ FDD1 10537; [7C 5F 02, 05, 05] # Caucasian_Albanian first primary (compressible)
10563; [7C 60 70, 05, 05]
-FDD1 110D0; [7C 61 02, 05, 05] # Sora_Sompeng first primary (compressible)
+FDD1 10582; [7C 61 02, 05, 05] # Vithkuqi first primary (compressible)
+
+10597; [7C 61 09, 05, 05]
+10570; [7C 61 09, 05, A0]
+
+10598; [7C 61 10, 05, 05]
+10571; [7C 61 10, 05, A0]
+
+10599; [7C 61 17, 05, 05]
+10572; [7C 61 17, 05, A0]
+
+1059A; [7C 61 1E, 05, 05]
+10573; [7C 61 1E, 05, A0]
+
+1059B; [7C 61 25, 05, 05]
+10574; [7C 61 25, 05, A0]
+
+1059C; [7C 61 2C, 05, 05]
+10575; [7C 61 2C, 05, A0]
+
+1059D; [7C 61 33, 05, 05]
+10576; [7C 61 33, 05, A0]
+
+1059E; [7C 61 3A, 05, 05]
+10577; [7C 61 3A, 05, A0]
+
+1059F; [7C 61 41, 05, 05]
+10578; [7C 61 41, 05, A0]
+
+105A0; [7C 61 48, 05, 05]
+10579; [7C 61 48, 05, A0]
+
+105A1; [7C 61 4F, 05, 05]
+1057A; [7C 61 4F, 05, A0]
+
+105A3; [7C 61 56, 05, 05]
+1057C; [7C 61 56, 05, A0]
+
+105A4; [7C 61 5D, 05, 05]
+1057D; [7C 61 5D, 05, A0]
+
+105A5; [7C 61 64, 05, 05]
+1057E; [7C 61 64, 05, A0]
+
+105A6; [7C 61 6B, 05, 05]
+1057F; [7C 61 6B, 05, A0]
+
+105A7; [7C 61 72, 05, 05]
+10580; [7C 61 72, 05, A0]
+
+105A8; [7C 61 79, 05, 05]
+10581; [7C 61 79, 05, A0]
+
+105A9; [7C 61 80, 05, 05]
+10582; [7C 61 80, 05, A0]
+
+105AA; [7C 61 87, 05, 05]
+10583; [7C 61 87, 05, A0]
+
+105AB; [7C 61 8E, 05, 05]
+10584; [7C 61 8E, 05, A0]
+
+105AC; [7C 61 95, 05, 05]
+10585; [7C 61 95, 05, A0]
+
+105AD; [7C 61 9C, 05, 05]
+10586; [7C 61 9C, 05, A0]
+
+105AE; [7C 61 A3, 05, 05]
+10587; [7C 61 A3, 05, A0]
+
+105AF; [7C 61 AA, 05, 05]
+10588; [7C 61 AA, 05, A0]
+
+105B0; [7C 61 B1, 05, 05]
+10589; [7C 61 B1, 05, A0]
+
+105B1; [7C 61 B8, 05, 05]
+1058A; [7C 61 B8, 05, A0]
+
+105B3; [7C 61 BF, 05, 05]
+1058C; [7C 61 BF, 05, A0]
+
+105B4; [7C 61 C6, 05, 05]
+1058D; [7C 61 C6, 05, A0]
+
+105B5; [7C 61 CD, 05, 05]
+1058E; [7C 61 CD, 05, A0]
+
+105B6; [7C 61 D4, 05, 05]
+1058F; [7C 61 D4, 05, A0]
+
+105B7; [7C 61 DB, 05, 05]
+10590; [7C 61 DB, 05, A0]
+
+105B8; [7C 61 E2, 05, 05]
+10591; [7C 61 E2, 05, A0]
+
+105B9; [7C 61 E9, 05, 05]
+10592; [7C 61 E9, 05, A0]
+
+105BB; [7C 61 F0, 05, 05]
+10594; [7C 61 F0, 05, A0]
+
+105BC; [7C 61 F7, 05, 05]
+10595; [7C 61 F7, 05, A0]
+
+FDD1 110D0; [7C 62 02, 05, 05] # Sora_Sompeng first primary (compressible)
+
+110D0; [7C 62 09, 05, 05]
+
+110D1; [7C 62 10, 05, 05]
+
+110D2; [7C 62 17, 05, 05]
+
+110D3; [7C 62 1E, 05, 05]
+
+110D4; [7C 62 25, 05, 05]
+
+110D5; [7C 62 2C, 05, 05]
+
+110D6; [7C 62 33, 05, 05]
+
+110D7; [7C 62 3A, 05, 05]
+
+110D8; [7C 62 41, 05, 05]
+
+110D9; [7C 62 48, 05, 05]
+
+110DA; [7C 62 4F, 05, 05]
+
+110DB; [7C 62 56, 05, 05]
+
+110DC; [7C 62 5D, 05, 05]
+
+110DD; [7C 62 64, 05, 05]
+
+110DE; [7C 62 6B, 05, 05]
+
+110DF; [7C 62 72, 05, 05]
+
+110E0; [7C 62 79, 05, 05]
+
+110E1; [7C 62 80, 05, 05]
+
+110E2; [7C 62 87, 05, 05]
+
+110E3; [7C 62 8E, 05, 05]
+
+110E4; [7C 62 95, 05, 05]
+
+110E5; [7C 62 9C, 05, 05]
+
+110E6; [7C 62 A3, 05, 05]
+
+110E7; [7C 62 AA, 05, 05]
+
+110E8; [7C 62 B1, 05, 05]
+
+FDD1 16A4F; [7C 63 02, 05, 05] # Mro first primary (compressible)
+
+16A40; [7C 63 09, 05, 05]
+
+16A41; [7C 63 10, 05, 05]
+
+16A42; [7C 63 17, 05, 05]
+
+16A43; [7C 63 1E, 05, 05]
+
+16A44; [7C 63 25, 05, 05]
+
+16A45; [7C 63 2C, 05, 05]
+
+16A46; [7C 63 33, 05, 05]
+
+16A47; [7C 63 3A, 05, 05]
+
+16A48; [7C 63 41, 05, 05]
+
+16A49; [7C 63 48, 05, 05]
+
+16A4A; [7C 63 4F, 05, 05]
+
+16A4B; [7C 63 56, 05, 05]
+
+16A4C; [7C 63 5D, 05, 05]
+
+16A4D; [7C 63 64, 05, 05]
+
+16A4E; [7C 63 6B, 05, 05]
+
+16A4F; [7C 63 72, 05, 05]
+
+16A50; [7C 63 79, 05, 05]
+
+16A51; [7C 63 80, 05, 05]
+
+16A52; [7C 63 87, 05, 05]
+
+16A53; [7C 63 8E, 05, 05]
+
+16A54; [7C 63 95, 05, 05]
+
+16A55; [7C 63 9C, 05, 05]
+
+16A56; [7C 63 A3, 05, 05]
+
+16A57; [7C 63 AA, 05, 05]
+
+16A58; [7C 63 B1, 05, 05]
+
+16A59; [7C 63 B8, 05, 05]
+
+16A5A; [7C 63 BF, 05, 05]
+
+16A5B; [7C 63 C6, 05, 05]
+
+16A5C; [7C 63 CD, 05, 05]
+
+16A5D; [7C 63 D4, 05, 05]
+
+16A5E; [7C 63 DB, 05, 05]
+
+FDD1 16ABC; [7C 64 02, 05, 05] # Tangsa first primary (compressible)
+
+16A70; [7C 64 09, 05, 05]
+
+16A71; [7C 64 10, 05, 05]
+
+16A72; [7C 64 17, 05, 05]
+
+16A73; [7C 64 1E, 05, 05]
+
+16A74; [7C 64 25, 05, 05]
+
+16A75; [7C 64 2C, 05, 05]
+
+16A76; [7C 64 33, 05, 05]
+
+16A77; [7C 64 3A, 05, 05]
+
+16A78; [7C 64 41, 05, 05]
+
+16A79; [7C 64 48, 05, 05]
+
+16A7A; [7C 64 4F, 05, 05]
+
+16A7B; [7C 64 56, 05, 05]
+
+16A7C; [7C 64 5D, 05, 05]
+
+16A7D; [7C 64 64, 05, 05]
+
+16A7E; [7C 64 6B, 05, 05]
+
+16A7F; [7C 64 72, 05, 05]
+
+16A80; [7C 64 79, 05, 05]
+
+16A81; [7C 64 80, 05, 05]
+
+16A82; [7C 64 87, 05, 05]
+
+16A83; [7C 64 8E, 05, 05]
+
+16A84; [7C 64 95, 05, 05]
+
+16A85; [7C 64 9C, 05, 05]
+
+16A86; [7C 64 A3, 05, 05]
+
+16A87; [7C 64 AA, 05, 05]
+
+16A88; [7C 64 B1, 05, 05]
+
+16A89; [7C 64 B8, 05, 05]
+
+16A8A; [7C 64 BF, 05, 05]
+
+16A8B; [7C 64 C6, 05, 05]
+
+16A8C; [7C 64 CD, 05, 05]
+
+16A8D; [7C 64 D4, 05, 05]
+
+16A8E; [7C 64 DB, 05, 05]
+
+16A8F; [7C 64 E2, 05, 05]
+
+16A90; [7C 64 E9, 05, 05]
+
+16A91; [7C 64 F0, 05, 05]
+
+16A92; [7C 64 F7, 05, 05]
+
+16A93; [7C 64 FE, 05, 05]
+
+16A94; [7C 65 07, 05, 05]
+
+16A95; [7C 65 0E, 05, 05]
+
+16A96; [7C 65 15, 05, 05]
+
+16A97; [7C 65 1C, 05, 05]
+
+16A98; [7C 65 23, 05, 05]
+
+16A99; [7C 65 2A, 05, 05]
+
+16A9A; [7C 65 31, 05, 05]
+
+16A9B; [7C 65 38, 05, 05]
+
+16A9C; [7C 65 3F, 05, 05]
+
+16A9D; [7C 65 46, 05, 05]
+
+16A9E; [7C 65 4D, 05, 05]
+
+16A9F; [7C 65 54, 05, 05]
+
+16AA0; [7C 65 5B, 05, 05]
+
+16AA1; [7C 65 62, 05, 05]
+
+16AA2; [7C 65 69, 05, 05]
+
+16AA3; [7C 65 70, 05, 05]
+
+16AA4; [7C 65 77, 05, 05]
+
+16AA5; [7C 65 7E, 05, 05]
+
+16AA6; [7C 65 85, 05, 05]
+
+16AA7; [7C 65 8C, 05, 05]
+
+16AA8; [7C 65 93, 05, 05]
+
+16AA9; [7C 65 9A, 05, 05]
+
+16AAA; [7C 65 A1, 05, 05]
+
+16AAB; [7C 65 A8, 05, 05]
+
+16AAC; [7C 65 AF, 05, 05]
+
+16AAD; [7C 65 B6, 05, 05]
+
+16AAE; [7C 65 BD, 05, 05]
+
+16AAF; [7C 65 C4, 05, 05]
+
+16AB0; [7C 65 CB, 05, 05]
+
+16AB1; [7C 65 D2, 05, 05]
+
+16AB2; [7C 65 D9, 05, 05]
+
+16AB3; [7C 65 E0, 05, 05]
+
+16AB4; [7C 65 E7, 05, 05]
+
+16AB5; [7C 65 EE, 05, 05]
+
+16AB6; [7C 65 F5, 05, 05]
+
+16AB7; [7C 65 FC, 05, 05]
+
+16AB8; [7C 66 05, 05, 05]
+
+16AB9; [7C 66 0C, 05, 05]
+
+16ABA; [7C 66 13, 05, 05]
+
+16ABB; [7C 66 1A, 05, 05]
+
+16ABC; [7C 66 21, 05, 05]
+
+16ABD; [7C 66 28, 05, 05]
+
+16ABE; [7C 66 2F, 05, 05]
+
+FDD1 10000; [7C 67 02, 05, 05] # LINEAR_B first primary (compressible)
+
+10000; [7C 67 09, 05, 05]
+
+10001; [7C 67 10, 05, 05]
+
+10002; [7C 67 17, 05, 05]
+
+10003; [7C 67 1E, 05, 05]
+
+10004; [7C 67 25, 05, 05]
+
+10005; [7C 67 2C, 05, 05]
+
+10006; [7C 67 33, 05, 05]
+
+10007; [7C 67 3A, 05, 05]
+
+10008; [7C 67 41, 05, 05]
+
+10009; [7C 67 48, 05, 05]
+
+1000A; [7C 67 4F, 05, 05]
+
+1000B; [7C 67 56, 05, 05]
+
+1000D; [7C 67 5D, 05, 05]
+
+1000E; [7C 67 64, 05, 05]
+
+1000F; [7C 67 6B, 05, 05]
+
+10010; [7C 67 72, 05, 05]
+
+10011; [7C 67 79, 05, 05]
+
+10012; [7C 67 80, 05, 05]
+
+10013; [7C 67 87, 05, 05]
+
+10014; [7C 67 8E, 05, 05]
+
+10015; [7C 67 95, 05, 05]
+
+10016; [7C 67 9C, 05, 05]
+
+10017; [7C 67 A3, 05, 05]
+
+10018; [7C 67 AA, 05, 05]
+
+10019; [7C 67 B1, 05, 05]
+
+1001A; [7C 67 B8, 05, 05]
+
+1001B; [7C 67 BF, 05, 05]
+
+1001C; [7C 67 C6, 05, 05]
+
+1001D; [7C 67 CD, 05, 05]
+
+1001E; [7C 67 D4, 05, 05]
+
+1001F; [7C 67 DB, 05, 05]
+
+10020; [7C 67 E2, 05, 05]
+
+10021; [7C 67 E9, 05, 05]
+
+10022; [7C 67 F0, 05, 05]
+
+10023; [7C 67 F7, 05, 05]
+
+10024; [7C 67 FE, 05, 05]
+
+10025; [7C 68 07, 05, 05]
+
+10026; [7C 68 0E, 05, 05]
+
+10028; [7C 68 15, 05, 05]
+
+10029; [7C 68 1C, 05, 05]
+
+1002A; [7C 68 23, 05, 05]
+
+1002B; [7C 68 2A, 05, 05]
+
+1002C; [7C 68 31, 05, 05]
+
+1002D; [7C 68 38, 05, 05]
+
+1002E; [7C 68 3F, 05, 05]
+
+1002F; [7C 68 46, 05, 05]
+
+10030; [7C 68 4D, 05, 05]
+
+10031; [7C 68 54, 05, 05]
+
+10032; [7C 68 5B, 05, 05]
+
+10033; [7C 68 62, 05, 05]
+
+10034; [7C 68 69, 05, 05]
+
+10035; [7C 68 70, 05, 05]
+
+10036; [7C 68 77, 05, 05]
+
+10037; [7C 68 7E, 05, 05]
+
+10038; [7C 68 85, 05, 05]
+
+10039; [7C 68 8C, 05, 05]
+
+1003A; [7C 68 93, 05, 05]
+
+1003C; [7C 68 9A, 05, 05]
+
+1003D; [7C 68 A1, 05, 05]
-110D0; [7C 61 09, 05, 05]
+1003F; [7C 68 A8, 05, 05]
-110D1; [7C 61 10, 05, 05]
+10040; [7C 68 AF, 05, 05]
-110D2; [7C 61 17, 05, 05]
+10041; [7C 68 B6, 05, 05]
-110D3; [7C 61 1E, 05, 05]
+10042; [7C 68 BD, 05, 05]
-110D4; [7C 61 25, 05, 05]
+10043; [7C 68 C4, 05, 05]
-110D5; [7C 61 2C, 05, 05]
+10044; [7C 68 CB, 05, 05]
-110D6; [7C 61 33, 05, 05]
+10045; [7C 68 D2, 05, 05]
-110D7; [7C 61 3A, 05, 05]
+10046; [7C 68 D9, 05, 05]
-110D8; [7C 61 41, 05, 05]
+10047; [7C 68 E0, 05, 05]
-110D9; [7C 61 48, 05, 05]
+10048; [7C 68 E7, 05, 05]
-110DA; [7C 61 4F, 05, 05]
+10049; [7C 68 EE, 05, 05]
-110DB; [7C 61 56, 05, 05]
+1004A; [7C 68 F5, 05, 05]
-110DC; [7C 61 5D, 05, 05]
+1004B; [7C 68 FC, 05, 05]
-110DD; [7C 61 64, 05, 05]
+1004C; [7C 69 05, 05, 05]
-110DE; [7C 61 6B, 05, 05]
+1004D; [7C 69 0C, 05, 05]
-110DF; [7C 61 72, 05, 05]
+10050; [7C 69 13, 05, 05]
-110E0; [7C 61 79, 05, 05]
+10051; [7C 69 1A, 05, 05]
-110E1; [7C 61 80, 05, 05]
+10052; [7C 69 21, 05, 05]
-110E2; [7C 61 87, 05, 05]
+10053; [7C 69 28, 05, 05]
-110E3; [7C 61 8E, 05, 05]
+10054; [7C 69 2F, 05, 05]
-110E4; [7C 61 95, 05, 05]
+10055; [7C 69 36, 05, 05]
-110E5; [7C 61 9C, 05, 05]
+10056; [7C 69 3D, 05, 05]
-110E6; [7C 61 A3, 05, 05]
+10057; [7C 69 44, 05, 05]
-110E7; [7C 61 AA, 05, 05]
+10058; [7C 69 4B, 05, 05]
-110E8; [7C 61 B1, 05, 05]
+10059; [7C 69 52, 05, 05]
-FDD1 16A4F; [7C 62 02, 05, 05] # Mro first primary (compressible)
+1005A; [7C 69 59, 05, 05]
-16A40; [7C 62 09, 05, 05]
+1005B; [7C 69 60, 05, 05]
-16A41; [7C 62 10, 05, 05]
+1005C; [7C 69 67, 05, 05]
-16A42; [7C 62 17, 05, 05]
+1005D; [7C 69 6E, 05, 05]
-16A43; [7C 62 1E, 05, 05]
+10080; [7C 69 75, 05, 05]
-16A44; [7C 62 25, 05, 05]
+10081; [7C 69 7C, 05, 05]
-16A45; [7C 62 2C, 05, 05]
+10082; [7C 69 83, 05, 05]
-16A46; [7C 62 33, 05, 05]
+10083; [7C 69 8A, 05, 05]
-16A47; [7C 62 3A, 05, 05]
+10084; [7C 69 91, 05, 05]
-16A48; [7C 62 41, 05, 05]
+10085; [7C 69 98, 05, 05]
-16A49; [7C 62 48, 05, 05]
+10086; [7C 69 9F, 05, 05]
-16A4A; [7C 62 4F, 05, 05]
+10087; [7C 69 A6, 05, 05]
-16A4B; [7C 62 56, 05, 05]
+10088; [7C 69 AD, 05, 05]
-16A4C; [7C 62 5D, 05, 05]
+10089; [7C 69 B4, 05, 05]
-16A4D; [7C 62 64, 05, 05]
+1008A; [7C 69 BB, 05, 05]
-16A4E; [7C 62 6B, 05, 05]
+1008B; [7C 69 C2, 05, 05]
-16A4F; [7C 62 72, 05, 05]
+1008C; [7C 69 C9, 05, 05]
-16A50; [7C 62 79, 05, 05]
+1008D; [7C 69 D0, 05, 05]
-16A51; [7C 62 80, 05, 05]
+1008E; [7C 69 D7, 05, 05]
-16A52; [7C 62 87, 05, 05]
+1008F; [7C 69 DE, 05, 05]
-16A53; [7C 62 8E, 05, 05]
+10090; [7C 69 E5, 05, 05]
-16A54; [7C 62 95, 05, 05]
+10091; [7C 69 EC, 05, 05]
-16A55; [7C 62 9C, 05, 05]
+10092; [7C 69 F3, 05, 05]
-16A56; [7C 62 A3, 05, 05]
+10093; [7C 69 FA, 05, 05]
-16A57; [7C 62 AA, 05, 05]
+10094; [7C 6A 03, 05, 05]
-16A58; [7C 62 B1, 05, 05]
+10095; [7C 6A 0A, 05, 05]
-16A59; [7C 62 B8, 05, 05]
+10096; [7C 6A 11, 05, 05]
-16A5A; [7C 62 BF, 05, 05]
+10097; [7C 6A 18, 05, 05]
-16A5B; [7C 62 C6, 05, 05]
+10098; [7C 6A 1F, 05, 05]
-16A5C; [7C 62 CD, 05, 05]
+10099; [7C 6A 26, 05, 05]
-16A5D; [7C 62 D4, 05, 05]
+1009A; [7C 6A 2D, 05, 05]
-16A5E; [7C 62 DB, 05, 05]
+1009B; [7C 6A 34, 05, 05]
-FDD1 10000; [7C 63 02, 05, 05] # LINEAR_B first primary (compressible)
+1009C; [7C 6A 3B, 05, 05]
-10000; [7C 63 09, 05, 05]
+1009D; [7C 6A 42, 05, 05]
-10001; [7C 63 10, 05, 05]
+1009E; [7C 6A 49, 05, 05]
-10002; [7C 63 17, 05, 05]
+1009F; [7C 6A 50, 05, 05]
-10003; [7C 63 1E, 05, 05]
+100A0; [7C 6A 57, 05, 05]
-10004; [7C 63 25, 05, 05]
+100A1; [7C 6A 5E, 05, 05]
-10005; [7C 63 2C, 05, 05]
+100A2; [7C 6A 65, 05, 05]
-10006; [7C 63 33, 05, 05]
+100A3; [7C 6A 6C, 05, 05]
-10007; [7C 63 3A, 05, 05]
+100A4; [7C 6A 73, 05, 05]
-10008; [7C 63 41, 05, 05]
+100A5; [7C 6A 7A, 05, 05]
-10009; [7C 63 48, 05, 05]
+100A6; [7C 6A 81, 05, 05]
-1000A; [7C 63 4F, 05, 05]
+100A7; [7C 6A 88, 05, 05]
-1000B; [7C 63 56, 05, 05]
+100A8; [7C 6A 8F, 05, 05]
-1000D; [7C 63 5D, 05, 05]
+100A9; [7C 6A 96, 05, 05]
-1000E; [7C 63 64, 05, 05]
+100AA; [7C 6A 9D, 05, 05]
-1000F; [7C 63 6B, 05, 05]
+100AB; [7C 6A A4, 05, 05]
-10010; [7C 63 72, 05, 05]
+100AC; [7C 6A AB, 05, 05]
-10011; [7C 63 79, 05, 05]
+100AD; [7C 6A B2, 05, 05]
-10012; [7C 63 80, 05, 05]
+100AE; [7C 6A B9, 05, 05]
-10013; [7C 63 87, 05, 05]
+100AF; [7C 6A C0, 05, 05]
-10014; [7C 63 8E, 05, 05]
+100B0; [7C 6A C7, 05, 05]
-10015; [7C 63 95, 05, 05]
+100B1; [7C 6A CE, 05, 05]
-10016; [7C 63 9C, 05, 05]
+100B2; [7C 6A D5, 05, 05]
-10017; [7C 63 A3, 05, 05]
+100B3; [7C 6A DC, 05, 05]
-10018; [7C 63 AA, 05, 05]
+100B4; [7C 6A E3, 05, 05]
-10019; [7C 63 B1, 05, 05]
+100B5; [7C 6A EA, 05, 05]
-1001A; [7C 63 B8, 05, 05]
+100B6; [7C 6A F1, 05, 05]
-1001B; [7C 63 BF, 05, 05]
+100B7; [7C 6A F8, 05, 05]
-1001C; [7C 63 C6, 05, 05]
+100B8; [7C 6A FF, 05, 05]
-1001D; [7C 63 CD, 05, 05]
+100B9; [7C 6B 08, 05, 05]
-1001E; [7C 63 D4, 05, 05]
+100BA; [7C 6B 0F, 05, 05]
-1001F; [7C 63 DB, 05, 05]
+100BB; [7C 6B 16, 05, 05]
-10020; [7C 63 E2, 05, 05]
+100BC; [7C 6B 1D, 05, 05]
-10021; [7C 63 E9, 05, 05]
+100BD; [7C 6B 24, 05, 05]
-10022; [7C 63 F0, 05, 05]
+100BE; [7C 6B 2B, 05, 05]
-10023; [7C 63 F7, 05, 05]
+100BF; [7C 6B 32, 05, 05]
-10024; [7C 63 FE, 05, 05]
+100C0; [7C 6B 39, 05, 05]
-10025; [7C 64 07, 05, 05]
+100C1; [7C 6B 40, 05, 05]
-10026; [7C 64 0E, 05, 05]
+100C2; [7C 6B 47, 05, 05]
-10028; [7C 64 15, 05, 05]
+100C3; [7C 6B 4E, 05, 05]
-10029; [7C 64 1C, 05, 05]
+100C4; [7C 6B 55, 05, 05]
-1002A; [7C 64 23, 05, 05]
+100C5; [7C 6B 5C, 05, 05]
-1002B; [7C 64 2A, 05, 05]
+100C6; [7C 6B 63, 05, 05]
-1002C; [7C 64 31, 05, 05]
+100C7; [7C 6B 6A, 05, 05]
-1002D; [7C 64 38, 05, 05]
+100C8; [7C 6B 71, 05, 05]
-1002E; [7C 64 3F, 05, 05]
+100C9; [7C 6B 78, 05, 05]
-1002F; [7C 64 46, 05, 05]
+100CA; [7C 6B 7F, 05, 05]
-10030; [7C 64 4D, 05, 05]
+100CB; [7C 6B 86, 05, 05]
-10031; [7C 64 54, 05, 05]
+100CC; [7C 6B 8D, 05, 05]
-10032; [7C 64 5B, 05, 05]
+100CD; [7C 6B 94, 05, 05]
-10033; [7C 64 62, 05, 05]
+100CE; [7C 6B 9B, 05, 05]
-10034; [7C 64 69, 05, 05]
+100CF; [7C 6B A2, 05, 05]
-10035; [7C 64 70, 05, 05]
+100D0; [7C 6B A9, 05, 05]
-10036; [7C 64 77, 05, 05]
+100D1; [7C 6B B0, 05, 05]
-10037; [7C 64 7E, 05, 05]
+100D2; [7C 6B B7, 05, 05]
-10038; [7C 64 85, 05, 05]
+100D3; [7C 6B BE, 05, 05]
-10039; [7C 64 8C, 05, 05]
+100D4; [7C 6B C5, 05, 05]
-1003A; [7C 64 93, 05, 05]
+100D5; [7C 6B CC, 05, 05]
-1003C; [7C 64 9A, 05, 05]
+100D6; [7C 6B D3, 05, 05]
-1003D; [7C 64 A1, 05, 05]
+100D7; [7C 6B DA, 05, 05]
-1003F; [7C 64 A8, 05, 05]
+100D8; [7C 6B E1, 05, 05]
-10040; [7C 64 AF, 05, 05]
+100D9; [7C 6B E8, 05, 05]
-10041; [7C 64 B6, 05, 05]
+100DA; [7C 6B EF, 05, 05]
-10042; [7C 64 BD, 05, 05]
+100DB; [7C 6B F6, 05, 05]
-10043; [7C 64 C4, 05, 05]
+100DC; [7C 6B FD, 05, 05]
-10044; [7C 64 CB, 05, 05]
+100DD; [7C 6C 06, 05, 05]
-10045; [7C 64 D2, 05, 05]
+100DE; [7C 6C 0D, 05, 05]
-10046; [7C 64 D9, 05, 05]
+100DF; [7C 6C 14, 05, 05]
-10047; [7C 64 E0, 05, 05]
+100E0; [7C 6C 1B, 05, 05]
-10048; [7C 64 E7, 05, 05]
+100E1; [7C 6C 22, 05, 05]
-10049; [7C 64 EE, 05, 05]
+100E2; [7C 6C 29, 05, 05]
-1004A; [7C 64 F5, 05, 05]
+100E3; [7C 6C 30, 05, 05]
-1004B; [7C 64 FC, 05, 05]
+100E4; [7C 6C 37, 05, 05]
-1004C; [7C 65 05, 05, 05]
+100E5; [7C 6C 3E, 05, 05]
-1004D; [7C 65 0C, 05, 05]
+100E6; [7C 6C 45, 05, 05]
-10050; [7C 65 13, 05, 05]
+100E7; [7C 6C 4C, 05, 05]
-10051; [7C 65 1A, 05, 05]
+100E8; [7C 6C 53, 05, 05]
-10052; [7C 65 21, 05, 05]
+100E9; [7C 6C 5A, 05, 05]
-10053; [7C 65 28, 05, 05]
+100EA; [7C 6C 61, 05, 05]
-10054; [7C 65 2F, 05, 05]
+100EB; [7C 6C 68, 05, 05]
-10055; [7C 65 36, 05, 05]
+100EC; [7C 6C 6F, 05, 05]
-10056; [7C 65 3D, 05, 05]
+100ED; [7C 6C 76, 05, 05]
-10057; [7C 65 44, 05, 05]
+100EE; [7C 6C 7D, 05, 05]
-10058; [7C 65 4B, 05, 05]
+100EF; [7C 6C 84, 05, 05]
-10059; [7C 65 52, 05, 05]
+100F0; [7C 6C 8B, 05, 05]
-1005A; [7C 65 59, 05, 05]
+100F1; [7C 6C 92, 05, 05]
-1005B; [7C 65 60, 05, 05]
+100F2; [7C 6C 99, 05, 05]
-1005C; [7C 65 67, 05, 05]
+100F3; [7C 6C A0, 05, 05]
-1005D; [7C 65 6E, 05, 05]
+100F4; [7C 6C A7, 05, 05]
-10080; [7C 65 75, 05, 05]
+100F5; [7C 6C AE, 05, 05]
-10081; [7C 65 7C, 05, 05]
+100F6; [7C 6C B5, 05, 05]
-10082; [7C 65 83, 05, 05]
+100F7; [7C 6C BC, 05, 05]
-10083; [7C 65 8A, 05, 05]
+100F8; [7C 6C C3, 05, 05]
-10084; [7C 65 91, 05, 05]
+100F9; [7C 6C CA, 05, 05]
-10085; [7C 65 98, 05, 05]
+100FA; [7C 6C D1, 05, 05]
-10086; [7C 65 9F, 05, 05]
+FDD1 10647; [7C 6D 02, 05, 05] # Linear_A first primary (compressible)
-10087; [7C 65 A6, 05, 05]
+10600; [7C 6D 09, 05, 05]
-10088; [7C 65 AD, 05, 05]
+10601; [7C 6D 10, 05, 05]
-10089; [7C 65 B4, 05, 05]
+10602; [7C 6D 17, 05, 05]
-1008A; [7C 65 BB, 05, 05]
+10603; [7C 6D 1E, 05, 05]
-1008B; [7C 65 C2, 05, 05]
+10604; [7C 6D 25, 05, 05]
-1008C; [7C 65 C9, 05, 05]
+10605; [7C 6D 2C, 05, 05]
-1008D; [7C 65 D0, 05, 05]
+10606; [7C 6D 33, 05, 05]
-1008E; [7C 65 D7, 05, 05]
+10607; [7C 6D 3A, 05, 05]
-1008F; [7C 65 DE, 05, 05]
+10608; [7C 6D 41, 05, 05]
-10090; [7C 65 E5, 05, 05]
+10609; [7C 6D 48, 05, 05]
-10091; [7C 65 EC, 05, 05]
+1060A; [7C 6D 4F, 05, 05]
-10092; [7C 65 F3, 05, 05]
+1060B; [7C 6D 56, 05, 05]
-10093; [7C 65 FA, 05, 05]
+1060C; [7C 6D 5D, 05, 05]
-10094; [7C 66 03, 05, 05]
+1060D; [7C 6D 64, 05, 05]
-10095; [7C 66 0A, 05, 05]
+1060E; [7C 6D 6B, 05, 05]
-10096; [7C 66 11, 05, 05]
+1060F; [7C 6D 72, 05, 05]
-10097; [7C 66 18, 05, 05]
+10610; [7C 6D 79, 05, 05]
-10098; [7C 66 1F, 05, 05]
+10611; [7C 6D 80, 05, 05]
-10099; [7C 66 26, 05, 05]
+10612; [7C 6D 87, 05, 05]
-1009A; [7C 66 2D, 05, 05]
+10613; [7C 6D 8E, 05, 05]
-1009B; [7C 66 34, 05, 05]
+10614; [7C 6D 95, 05, 05]
-1009C; [7C 66 3B, 05, 05]
+10615; [7C 6D 9C, 05, 05]
-1009D; [7C 66 42, 05, 05]
+10616; [7C 6D A3, 05, 05]
-1009E; [7C 66 49, 05, 05]
+10617; [7C 6D AA, 05, 05]
-1009F; [7C 66 50, 05, 05]
+10618; [7C 6D B1, 05, 05]
-100A0; [7C 66 57, 05, 05]
+10619; [7C 6D B8, 05, 05]
-100A1; [7C 66 5E, 05, 05]
+1061A; [7C 6D BF, 05, 05]
-100A2; [7C 66 65, 05, 05]
+1061B; [7C 6D C6, 05, 05]
-100A3; [7C 66 6C, 05, 05]
+1061C; [7C 6D CD, 05, 05]
-100A4; [7C 66 73, 05, 05]
+1061D; [7C 6D D4, 05, 05]
-100A5; [7C 66 7A, 05, 05]
+1061E; [7C 6D DB, 05, 05]
-100A6; [7C 66 81, 05, 05]
+1061F; [7C 6D E2, 05, 05]
-100A7; [7C 66 88, 05, 05]
+10620; [7C 6D E9, 05, 05]
-100A8; [7C 66 8F, 05, 05]
+10621; [7C 6D F0, 05, 05]
-100A9; [7C 66 96, 05, 05]
+10622; [7C 6D F7, 05, 05]
-100AA; [7C 66 9D, 05, 05]
+10623; [7C 6D FE, 05, 05]
-100AB; [7C 66 A4, 05, 05]
+10624; [7C 6E 07, 05, 05]
-100AC; [7C 66 AB, 05, 05]
+10625; [7C 6E 0E, 05, 05]
-100AD; [7C 66 B2, 05, 05]
+10626; [7C 6E 15, 05, 05]
-100AE; [7C 66 B9, 05, 05]
+10627; [7C 6E 1C, 05, 05]
-100AF; [7C 66 C0, 05, 05]
+10628; [7C 6E 23, 05, 05]
-100B0; [7C 66 C7, 05, 05]
+10629; [7C 6E 2A, 05, 05]
-100B1; [7C 66 CE, 05, 05]
+1062A; [7C 6E 31, 05, 05]
-100B2; [7C 66 D5, 05, 05]
+1062B; [7C 6E 38, 05, 05]
-100B3; [7C 66 DC, 05, 05]
+1062C; [7C 6E 3F, 05, 05]
-100B4; [7C 66 E3, 05, 05]
+1062D; [7C 6E 46, 05, 05]
-100B5; [7C 66 EA, 05, 05]
+1062E; [7C 6E 4D, 05, 05]
-100B6; [7C 66 F1, 05, 05]
+1062F; [7C 6E 54, 05, 05]
-100B7; [7C 66 F8, 05, 05]
+10630; [7C 6E 5B, 05, 05]
-100B8; [7C 66 FF, 05, 05]
+10631; [7C 6E 62, 05, 05]
-100B9; [7C 67 08, 05, 05]
+10632; [7C 6E 69, 05, 05]
-100BA; [7C 67 0F, 05, 05]
+10633; [7C 6E 70, 05, 05]
-100BB; [7C 67 16, 05, 05]
+10634; [7C 6E 77, 05, 05]
-100BC; [7C 67 1D, 05, 05]
+10635; [7C 6E 7E, 05, 05]
-100BD; [7C 67 24, 05, 05]
+10636; [7C 6E 85, 05, 05]
-100BE; [7C 67 2B, 05, 05]
+10637; [7C 6E 8C, 05, 05]
-100BF; [7C 67 32, 05, 05]
+10638; [7C 6E 93, 05, 05]
-100C0; [7C 67 39, 05, 05]
+10639; [7C 6E 9A, 05, 05]
-100C1; [7C 67 40, 05, 05]
+1063A; [7C 6E A1, 05, 05]
-100C2; [7C 67 47, 05, 05]
+1063B; [7C 6E A8, 05, 05]
-100C3; [7C 67 4E, 05, 05]
+1063C; [7C 6E AF, 05, 05]
-100C4; [7C 67 55, 05, 05]
+1063D; [7C 6E B6, 05, 05]
-100C5; [7C 67 5C, 05, 05]
+1063E; [7C 6E BD, 05, 05]
-100C6; [7C 67 63, 05, 05]
+1063F; [7C 6E C4, 05, 05]
-100C7; [7C 67 6A, 05, 05]
+10640; [7C 6E CB, 05, 05]
-100C8; [7C 67 71, 05, 05]
+10641; [7C 6E D2, 05, 05]
-100C9; [7C 67 78, 05, 05]
+10642; [7C 6E D9, 05, 05]
-100CA; [7C 67 7F, 05, 05]
+10643; [7C 6E E0, 05, 05]
-100CB; [7C 67 86, 05, 05]
+10644; [7C 6E E7, 05, 05]
-100CC; [7C 67 8D, 05, 05]
+10645; [7C 6E EE, 05, 05]
-100CD; [7C 67 94, 05, 05]
+10646; [7C 6E F5, 05, 05]
-100CE; [7C 67 9B, 05, 05]
+10647; [7C 6E FC, 05, 05]
-100CF; [7C 67 A2, 05, 05]
+10648; [7C 6F 05, 05, 05]
-100D0; [7C 67 A9, 05, 05]
+10649; [7C 6F 0C, 05, 05]
-100D1; [7C 67 B0, 05, 05]
+1064A; [7C 6F 13, 05, 05]
-100D2; [7C 67 B7, 05, 05]
+1064B; [7C 6F 1A, 05, 05]
-100D3; [7C 67 BE, 05, 05]
+1064C; [7C 6F 21, 05, 05]
-100D4; [7C 67 C5, 05, 05]
+1064D; [7C 6F 28, 05, 05]
-100D5; [7C 67 CC, 05, 05]
+1064E; [7C 6F 2F, 05, 05]
-100D6; [7C 67 D3, 05, 05]
+1064F; [7C 6F 36, 05, 05]
-100D7; [7C 67 DA, 05, 05]
+10650; [7C 6F 3D, 05, 05]
-100D8; [7C 67 E1, 05, 05]
+10651; [7C 6F 44, 05, 05]
-100D9; [7C 67 E8, 05, 05]
+10652; [7C 6F 4B, 05, 05]
-100DA; [7C 67 EF, 05, 05]
+10653; [7C 6F 52, 05, 05]
-100DB; [7C 67 F6, 05, 05]
+10654; [7C 6F 59, 05, 05]
-100DC; [7C 67 FD, 05, 05]
+10655; [7C 6F 60, 05, 05]
-100DD; [7C 68 06, 05, 05]
+10656; [7C 6F 67, 05, 05]
-100DE; [7C 68 0D, 05, 05]
+10657; [7C 6F 6E, 05, 05]
-100DF; [7C 68 14, 05, 05]
+10658; [7C 6F 75, 05, 05]
-100E0; [7C 68 1B, 05, 05]
+10659; [7C 6F 7C, 05, 05]
-100E1; [7C 68 22, 05, 05]
+1065A; [7C 6F 83, 05, 05]
-100E2; [7C 68 29, 05, 05]
+1065B; [7C 6F 8A, 05, 05]
-100E3; [7C 68 30, 05, 05]
+1065C; [7C 6F 91, 05, 05]
-100E4; [7C 68 37, 05, 05]
+1065D; [7C 6F 98, 05, 05]
-100E5; [7C 68 3E, 05, 05]
+1065E; [7C 6F 9F, 05, 05]
-100E6; [7C 68 45, 05, 05]
+1065F; [7C 6F A6, 05, 05]
-100E7; [7C 68 4C, 05, 05]
+10660; [7C 6F AD, 05, 05]
-100E8; [7C 68 53, 05, 05]
+10661; [7C 6F B4, 05, 05]
-100E9; [7C 68 5A, 05, 05]
+10662; [7C 6F BB, 05, 05]
-100EA; [7C 68 61, 05, 05]
+10663; [7C 6F C2, 05, 05]
-100EB; [7C 68 68, 05, 05]
+10664; [7C 6F C9, 05, 05]
-100EC; [7C 68 6F, 05, 05]
+10665; [7C 6F D0, 05, 05]
-100ED; [7C 68 76, 05, 05]
+10666; [7C 6F D7, 05, 05]
-100EE; [7C 68 7D, 05, 05]
+10667; [7C 6F DE, 05, 05]
-100EF; [7C 68 84, 05, 05]
+10668; [7C 6F E5, 05, 05]
-100F0; [7C 68 8B, 05, 05]
+10669; [7C 6F EC, 05, 05]
-100F1; [7C 68 92, 05, 05]
+1066A; [7C 6F F3, 05, 05]
-100F2; [7C 68 99, 05, 05]
+1066B; [7C 6F FA, 05, 05]
-100F3; [7C 68 A0, 05, 05]
+1066C; [7C 70 03, 05, 05]
-100F4; [7C 68 A7, 05, 05]
+1066D; [7C 70 0A, 05, 05]
-100F5; [7C 68 AE, 05, 05]
+1066E; [7C 70 11, 05, 05]
-100F6; [7C 68 B5, 05, 05]
+1066F; [7C 70 18, 05, 05]
-100F7; [7C 68 BC, 05, 05]
+10670; [7C 70 1F, 05, 05]
-100F8; [7C 68 C3, 05, 05]
+10671; [7C 70 26, 05, 05]
-100F9; [7C 68 CA, 05, 05]
+10672; [7C 70 2D, 05, 05]
-100FA; [7C 68 D1, 05, 05]
+10673; [7C 70 34, 05, 05]
-FDD1 10647; [7C 69 02, 05, 05] # Linear_A first primary (compressible)
+10674; [7C 70 3B, 05, 05]
-10600; [7C 69 09, 05, 05]
+10675; [7C 70 42, 05, 05]
-10601; [7C 69 10, 05, 05]
+10676; [7C 70 49, 05, 05]
-10602; [7C 69 17, 05, 05]
+10677; [7C 70 50, 05, 05]
-10603; [7C 69 1E, 05, 05]
+10678; [7C 70 57, 05, 05]
-10604; [7C 69 25, 05, 05]
+10679; [7C 70 5E, 05, 05]
-10605; [7C 69 2C, 05, 05]
+1067A; [7C 70 65, 05, 05]
-10606; [7C 69 33, 05, 05]
+1067B; [7C 70 6C, 05, 05]
-10607; [7C 69 3A, 05, 05]
+1067C; [7C 70 73, 05, 05]
-10608; [7C 69 41, 05, 05]
+1067D; [7C 70 7A, 05, 05]
-10609; [7C 69 48, 05, 05]
+1067E; [7C 70 81, 05, 05]
-1060A; [7C 69 4F, 05, 05]
+1067F; [7C 70 88, 05, 05]
-1060B; [7C 69 56, 05, 05]
+10680; [7C 70 8F, 05, 05]
-1060C; [7C 69 5D, 05, 05]
+10681; [7C 70 96, 05, 05]
-1060D; [7C 69 64, 05, 05]
+10682; [7C 70 9D, 05, 05]
-1060E; [7C 69 6B, 05, 05]
+10683; [7C 70 A4, 05, 05]
-1060F; [7C 69 72, 05, 05]
+10684; [7C 70 AB, 05, 05]
-10610; [7C 69 79, 05, 05]
+10685; [7C 70 B2, 05, 05]
-10611; [7C 69 80, 05, 05]
+10686; [7C 70 B9, 05, 05]
-10612; [7C 69 87, 05, 05]
+10687; [7C 70 C0, 05, 05]
-10613; [7C 69 8E, 05, 05]
+10688; [7C 70 C7, 05, 05]
-10614; [7C 69 95, 05, 05]
+10689; [7C 70 CE, 05, 05]
-10615; [7C 69 9C, 05, 05]
+1068A; [7C 70 D5, 05, 05]
-10616; [7C 69 A3, 05, 05]
+1068B; [7C 70 DC, 05, 05]
-10617; [7C 69 AA, 05, 05]
+1068C; [7C 70 E3, 05, 05]
-10618; [7C 69 B1, 05, 05]
+1068D; [7C 70 EA, 05, 05]
-10619; [7C 69 B8, 05, 05]
+1068E; [7C 70 F1, 05, 05]
-1061A; [7C 69 BF, 05, 05]
+1068F; [7C 70 F8, 05, 05]
-1061B; [7C 69 C6, 05, 05]
+10690; [7C 70 FF, 05, 05]
-1061C; [7C 69 CD, 05, 05]
+10691; [7C 71 08, 05, 05]
-1061D; [7C 69 D4, 05, 05]
+10692; [7C 71 0F, 05, 05]
-1061E; [7C 69 DB, 05, 05]
+10693; [7C 71 16, 05, 05]
-1061F; [7C 69 E2, 05, 05]
+10694; [7C 71 1D, 05, 05]
-10620; [7C 69 E9, 05, 05]
+10695; [7C 71 24, 05, 05]
-10621; [7C 69 F0, 05, 05]
+10696; [7C 71 2B, 05, 05]
-10622; [7C 69 F7, 05, 05]
+10697; [7C 71 32, 05, 05]
-10623; [7C 69 FE, 05, 05]
+10698; [7C 71 39, 05, 05]
-10624; [7C 6A 07, 05, 05]
+10699; [7C 71 40, 05, 05]
-10625; [7C 6A 0E, 05, 05]
+1069A; [7C 71 47, 05, 05]
-10626; [7C 6A 15, 05, 05]
+1069B; [7C 71 4E, 05, 05]
-10627; [7C 6A 1C, 05, 05]
+1069C; [7C 71 55, 05, 05]
-10628; [7C 6A 23, 05, 05]
+1069D; [7C 71 5C, 05, 05]
-10629; [7C 6A 2A, 05, 05]
+1069E; [7C 71 63, 05, 05]
-1062A; [7C 6A 31, 05, 05]
+1069F; [7C 71 6A, 05, 05]
-1062B; [7C 6A 38, 05, 05]
+106A0; [7C 71 71, 05, 05]
-1062C; [7C 6A 3F, 05, 05]
+106A1; [7C 71 78, 05, 05]
-1062D; [7C 6A 46, 05, 05]
+106A2; [7C 71 7F, 05, 05]
-1062E; [7C 6A 4D, 05, 05]
+106A3; [7C 71 86, 05, 05]
-1062F; [7C 6A 54, 05, 05]
+106A4; [7C 71 8D, 05, 05]
-10630; [7C 6A 5B, 05, 05]
+106A5; [7C 71 94, 05, 05]
-10631; [7C 6A 62, 05, 05]
+106A6; [7C 71 9B, 05, 05]
-10632; [7C 6A 69, 05, 05]
+106A7; [7C 71 A2, 05, 05]
-10633; [7C 6A 70, 05, 05]
+106A8; [7C 71 A9, 05, 05]
-10634; [7C 6A 77, 05, 05]
+106A9; [7C 71 B0, 05, 05]
-10635; [7C 6A 7E, 05, 05]
+106AA; [7C 71 B7, 05, 05]
-10636; [7C 6A 85, 05, 05]
+106AB; [7C 71 BE, 05, 05]
-10637; [7C 6A 8C, 05, 05]
+106AC; [7C 71 C5, 05, 05]
-10638; [7C 6A 93, 05, 05]
+106AD; [7C 71 CC, 05, 05]
-10639; [7C 6A 9A, 05, 05]
+106AE; [7C 71 D3, 05, 05]
-1063A; [7C 6A A1, 05, 05]
+106AF; [7C 71 DA, 05, 05]
-1063B; [7C 6A A8, 05, 05]
+106B0; [7C 71 E1, 05, 05]
-1063C; [7C 6A AF, 05, 05]
+106B1; [7C 71 E8, 05, 05]
-1063D; [7C 6A B6, 05, 05]
+106B2; [7C 71 EF, 05, 05]
-1063E; [7C 6A BD, 05, 05]
+106B3; [7C 71 F6, 05, 05]
-1063F; [7C 6A C4, 05, 05]
+106B4; [7C 71 FD, 05, 05]
-10640; [7C 6A CB, 05, 05]
+106B5; [7C 72 06, 05, 05]
-10641; [7C 6A D2, 05, 05]
+106B6; [7C 72 0D, 05, 05]
-10642; [7C 6A D9, 05, 05]
+106B7; [7C 72 14, 05, 05]
-10643; [7C 6A E0, 05, 05]
+106B8; [7C 72 1B, 05, 05]
-10644; [7C 6A E7, 05, 05]
+106B9; [7C 72 22, 05, 05]
-10645; [7C 6A EE, 05, 05]
+106BA; [7C 72 29, 05, 05]
-10646; [7C 6A F5, 05, 05]
+106BB; [7C 72 30, 05, 05]
-10647; [7C 6A FC, 05, 05]
+106BC; [7C 72 37, 05, 05]
-10648; [7C 6B 05, 05, 05]
+106BD; [7C 72 3E, 05, 05]
-10649; [7C 6B 0C, 05, 05]
+106BE; [7C 72 45, 05, 05]
-1064A; [7C 6B 13, 05, 05]
+106BF; [7C 72 4C, 05, 05]
-1064B; [7C 6B 1A, 05, 05]
+106C0; [7C 72 53, 05, 05]
-1064C; [7C 6B 21, 05, 05]
+106C1; [7C 72 5A, 05, 05]
-1064D; [7C 6B 28, 05, 05]
+106C2; [7C 72 61, 05, 05]
-1064E; [7C 6B 2F, 05, 05]
+106C3; [7C 72 68, 05, 05]
-1064F; [7C 6B 36, 05, 05]
+106C4; [7C 72 6F, 05, 05]
-10650; [7C 6B 3D, 05, 05]
+106C5; [7C 72 76, 05, 05]
-10651; [7C 6B 44, 05, 05]
+106C6; [7C 72 7D, 05, 05]
-10652; [7C 6B 4B, 05, 05]
+106C7; [7C 72 84, 05, 05]
-10653; [7C 6B 52, 05, 05]
+106C8; [7C 72 8B, 05, 05]
-10654; [7C 6B 59, 05, 05]
+106C9; [7C 72 92, 05, 05]
-10655; [7C 6B 60, 05, 05]
+106CA; [7C 72 99, 05, 05]
-10656; [7C 6B 67, 05, 05]
+106CB; [7C 72 A0, 05, 05]
-10657; [7C 6B 6E, 05, 05]
+106CC; [7C 72 A7, 05, 05]
-10658; [7C 6B 75, 05, 05]
+106CD; [7C 72 AE, 05, 05]
-10659; [7C 6B 7C, 05, 05]
+106CE; [7C 72 B5, 05, 05]
-1065A; [7C 6B 83, 05, 05]
+106CF; [7C 72 BC, 05, 05]
-1065B; [7C 6B 8A, 05, 05]
+106D0; [7C 72 C3, 05, 05]
-1065C; [7C 6B 91, 05, 05]
+106D1; [7C 72 CA, 05, 05]
-1065D; [7C 6B 98, 05, 05]
+106D2; [7C 72 D1, 05, 05]
-1065E; [7C 6B 9F, 05, 05]
+106D3; [7C 72 D8, 05, 05]
-1065F; [7C 6B A6, 05, 05]
+106D4; [7C 72 DF, 05, 05]
-10660; [7C 6B AD, 05, 05]
+106D5; [7C 72 E6, 05, 05]
-10661; [7C 6B B4, 05, 05]
+106D6; [7C 72 ED, 05, 05]
-10662; [7C 6B BB, 05, 05]
+106D7; [7C 72 F4, 05, 05]
-10663; [7C 6B C2, 05, 05]
+106D8; [7C 72 FB, 05, 05]
-10664; [7C 6B C9, 05, 05]
+106D9; [7C 73 04, 05, 05]
-10665; [7C 6B D0, 05, 05]
+106DA; [7C 73 0B, 05, 05]
-10666; [7C 6B D7, 05, 05]
+106DB; [7C 73 12, 05, 05]
-10667; [7C 6B DE, 05, 05]
+106DC; [7C 73 19, 05, 05]
-10668; [7C 6B E5, 05, 05]
+106DD; [7C 73 20, 05, 05]
-10669; [7C 6B EC, 05, 05]
+106DE; [7C 73 27, 05, 05]
-1066A; [7C 6B F3, 05, 05]
+106DF; [7C 73 2E, 05, 05]
-1066B; [7C 6B FA, 05, 05]
+106E0; [7C 73 35, 05, 05]
-1066C; [7C 6C 03, 05, 05]
+106E1; [7C 73 3C, 05, 05]
-1066D; [7C 6C 0A, 05, 05]
+106E2; [7C 73 43, 05, 05]
-1066E; [7C 6C 11, 05, 05]
+106E3; [7C 73 4A, 05, 05]
-1066F; [7C 6C 18, 05, 05]
+106E4; [7C 73 51, 05, 05]
-10670; [7C 6C 1F, 05, 05]
+106E5; [7C 73 58, 05, 05]
-10671; [7C 6C 26, 05, 05]
+106E6; [7C 73 5F, 05, 05]
-10672; [7C 6C 2D, 05, 05]
+106E7; [7C 73 66, 05, 05]
-10673; [7C 6C 34, 05, 05]
+106E8; [7C 73 6D, 05, 05]
-10674; [7C 6C 3B, 05, 05]
+106E9; [7C 73 74, 05, 05]
-10675; [7C 6C 42, 05, 05]
+106EA; [7C 73 7B, 05, 05]
-10676; [7C 6C 49, 05, 05]
+106EB; [7C 73 82, 05, 05]
-10677; [7C 6C 50, 05, 05]
+106EC; [7C 73 89, 05, 05]
-10678; [7C 6C 57, 05, 05]
+106ED; [7C 73 90, 05, 05]
-10679; [7C 6C 5E, 05, 05]
+106EE; [7C 73 97, 05, 05]
-1067A; [7C 6C 65, 05, 05]
+106EF; [7C 73 9E, 05, 05]
-1067B; [7C 6C 6C, 05, 05]
+106F0; [7C 73 A5, 05, 05]
-1067C; [7C 6C 73, 05, 05]
+106F1; [7C 73 AC, 05, 05]
-1067D; [7C 6C 7A, 05, 05]
+106F2; [7C 73 B3, 05, 05]
-1067E; [7C 6C 81, 05, 05]
+106F3; [7C 73 BA, 05, 05]
-1067F; [7C 6C 88, 05, 05]
+106F4; [7C 73 C1, 05, 05]
-10680; [7C 6C 8F, 05, 05]
+106F5; [7C 73 C8, 05, 05]
-10681; [7C 6C 96, 05, 05]
+106F6; [7C 73 CF, 05, 05]
-10682; [7C 6C 9D, 05, 05]
+106F7; [7C 73 D6, 05, 05]
-10683; [7C 6C A4, 05, 05]
+106F8; [7C 73 DD, 05, 05]
-10684; [7C 6C AB, 05, 05]
+106F9; [7C 73 E4, 05, 05]
-10685; [7C 6C B2, 05, 05]
+106FA; [7C 73 EB, 05, 05]
-10686; [7C 6C B9, 05, 05]
+106FB; [7C 73 F2, 05, 05]
-10687; [7C 6C C0, 05, 05]
+106FC; [7C 73 F9, 05, 05]
-10688; [7C 6C C7, 05, 05]
+106FD; [7C 74 02, 05, 05]
-10689; [7C 6C CE, 05, 05]
+106FE; [7C 74 09, 05, 05]
-1068A; [7C 6C D5, 05, 05]
+106FF; [7C 74 10, 05, 05]
-1068B; [7C 6C DC, 05, 05]
+10700; [7C 74 17, 05, 05]
-1068C; [7C 6C E3, 05, 05]
+10701; [7C 74 1E, 05, 05]
-1068D; [7C 6C EA, 05, 05]
+10702; [7C 74 25, 05, 05]
-1068E; [7C 6C F1, 05, 05]
+10703; [7C 74 2C, 05, 05]
-1068F; [7C 6C F8, 05, 05]
+10704; [7C 74 33, 05, 05]
-10690; [7C 6C FF, 05, 05]
+10705; [7C 74 3A, 05, 05]
-10691; [7C 6D 08, 05, 05]
+10706; [7C 74 41, 05, 05]
-10692; [7C 6D 0F, 05, 05]
+10707; [7C 74 48, 05, 05]
-10693; [7C 6D 16, 05, 05]
+10708; [7C 74 4F, 05, 05]
-10694; [7C 6D 1D, 05, 05]
+10709; [7C 74 56, 05, 05]
-10695; [7C 6D 24, 05, 05]
+1070A; [7C 74 5D, 05, 05]
-10696; [7C 6D 2B, 05, 05]
+1070B; [7C 74 64, 05, 05]
-10697; [7C 6D 32, 05, 05]
+1070C; [7C 74 6B, 05, 05]
-10698; [7C 6D 39, 05, 05]
+1070D; [7C 74 72, 05, 05]
-10699; [7C 6D 40, 05, 05]
+1070E; [7C 74 79, 05, 05]
-1069A; [7C 6D 47, 05, 05]
+1070F; [7C 74 80, 05, 05]
-1069B; [7C 6D 4E, 05, 05]
+10710; [7C 74 87, 05, 05]
-1069C; [7C 6D 55, 05, 05]
+10711; [7C 74 8E, 05, 05]
-1069D; [7C 6D 5C, 05, 05]
+10712; [7C 74 95, 05, 05]
-1069E; [7C 6D 63, 05, 05]
+10713; [7C 74 9C, 05, 05]
-1069F; [7C 6D 6A, 05, 05]
+10714; [7C 74 A3, 05, 05]
-106A0; [7C 6D 71, 05, 05]
+10715; [7C 74 AA, 05, 05]
-106A1; [7C 6D 78, 05, 05]
+10716; [7C 74 B1, 05, 05]
-106A2; [7C 6D 7F, 05, 05]
+10717; [7C 74 B8, 05, 05]
-106A3; [7C 6D 86, 05, 05]
+10718; [7C 74 BF, 05, 05]
-106A4; [7C 6D 8D, 05, 05]
+10719; [7C 74 C6, 05, 05]
-106A5; [7C 6D 94, 05, 05]
+1071A; [7C 74 CD, 05, 05]
-106A6; [7C 6D 9B, 05, 05]
+1071B; [7C 74 D4, 05, 05]
-106A7; [7C 6D A2, 05, 05]
+1071C; [7C 74 DB, 05, 05]
-106A8; [7C 6D A9, 05, 05]
+1071D; [7C 74 E2, 05, 05]
-106A9; [7C 6D B0, 05, 05]
+1071E; [7C 74 E9, 05, 05]
-106AA; [7C 6D B7, 05, 05]
+1071F; [7C 74 F0, 05, 05]
-106AB; [7C 6D BE, 05, 05]
+10720; [7C 74 F7, 05, 05]
-106AC; [7C 6D C5, 05, 05]
+10721; [7C 74 FE, 05, 05]
-106AD; [7C 6D CC, 05, 05]
+10722; [7C 75 07, 05, 05]
-106AE; [7C 6D D3, 05, 05]
+10723; [7C 75 0E, 05, 05]
-106AF; [7C 6D DA, 05, 05]
+10724; [7C 75 15, 05, 05]
-106B0; [7C 6D E1, 05, 05]
+10725; [7C 75 1C, 05, 05]
-106B1; [7C 6D E8, 05, 05]
+10726; [7C 75 23, 05, 05]
-106B2; [7C 6D EF, 05, 05]
+10727; [7C 75 2A, 05, 05]
-106B3; [7C 6D F6, 05, 05]
+10728; [7C 75 31, 05, 05]
-106B4; [7C 6D FD, 05, 05]
+10729; [7C 75 38, 05, 05]
-106B5; [7C 6E 06, 05, 05]
+1072A; [7C 75 3F, 05, 05]
-106B6; [7C 6E 0D, 05, 05]
+1072B; [7C 75 46, 05, 05]
-106B7; [7C 6E 14, 05, 05]
+1072C; [7C 75 4D, 05, 05]
-106B8; [7C 6E 1B, 05, 05]
+1072D; [7C 75 54, 05, 05]
-106B9; [7C 6E 22, 05, 05]
+1072E; [7C 75 5B, 05, 05]
-106BA; [7C 6E 29, 05, 05]
+1072F; [7C 75 62, 05, 05]
-106BB; [7C 6E 30, 05, 05]
+10730; [7C 75 69, 05, 05]
-106BC; [7C 6E 37, 05, 05]
+10731; [7C 75 70, 05, 05]
-106BD; [7C 6E 3E, 05, 05]
+10732; [7C 75 77, 05, 05]
-106BE; [7C 6E 45, 05, 05]
+10733; [7C 75 7E, 05, 05]
-106BF; [7C 6E 4C, 05, 05]
+10734; [7C 75 85, 05, 05]
-106C0; [7C 6E 53, 05, 05]
+10735; [7C 75 8C, 05, 05]
-106C1; [7C 6E 5A, 05, 05]
+10736; [7C 75 93, 05, 05]
-106C2; [7C 6E 61, 05, 05]
+10740; [7C 75 9A, 05, 05]
-106C3; [7C 6E 68, 05, 05]
+10741; [7C 75 A1, 05, 05]
-106C4; [7C 6E 6F, 05, 05]
+10742; [7C 75 A8, 05, 05]
-106C5; [7C 6E 76, 05, 05]
+10743; [7C 75 AF, 05, 05]
-106C6; [7C 6E 7D, 05, 05]
+10744; [7C 75 B6, 05, 05]
-106C7; [7C 6E 84, 05, 05]
+10745; [7C 75 BD, 05, 05]
-106C8; [7C 6E 8B, 05, 05]
+10746; [7C 75 C4, 05, 05]
-106C9; [7C 6E 92, 05, 05]
+10747; [7C 75 CB, 05, 05]
-106CA; [7C 6E 99, 05, 05]
+10748; [7C 75 D2, 05, 05]
-106CB; [7C 6E A0, 05, 05]
+10749; [7C 75 D9, 05, 05]
-106CC; [7C 6E A7, 05, 05]
+1074A; [7C 75 E0, 05, 05]
-106CD; [7C 6E AE, 05, 05]
+1074B; [7C 75 E7, 05, 05]
-106CE; [7C 6E B5, 05, 05]
+1074C; [7C 75 EE, 05, 05]
-106CF; [7C 6E BC, 05, 05]
+1074D; [7C 75 F5, 05, 05]
-106D0; [7C 6E C3, 05, 05]
+1074E; [7C 75 FC, 05, 05]
-106D1; [7C 6E CA, 05, 05]
+1074F; [7C 76 05, 05, 05]
-106D2; [7C 6E D1, 05, 05]
+10750; [7C 76 0C, 05, 05]
-106D3; [7C 6E D8, 05, 05]
+10751; [7C 76 13, 05, 05]
-106D4; [7C 6E DF, 05, 05]
+10752; [7C 76 1A, 05, 05]
-106D5; [7C 6E E6, 05, 05]
+10753; [7C 76 21, 05, 05]
-106D6; [7C 6E ED, 05, 05]
+10754; [7C 76 28, 05, 05]
-106D7; [7C 6E F4, 05, 05]
+10755; [7C 76 2F, 05, 05]
-106D8; [7C 6E FB, 05, 05]
+10760; [7C 76 36, 05, 05]
-106D9; [7C 6F 04, 05, 05]
+10761; [7C 76 3D, 05, 05]
-106DA; [7C 6F 0B, 05, 05]
+10762; [7C 76 44, 05, 05]
-106DB; [7C 6F 12, 05, 05]
+10763; [7C 76 4B, 05, 05]
-106DC; [7C 6F 19, 05, 05]
+10764; [7C 76 52, 05, 05]
-106DD; [7C 6F 20, 05, 05]
+10765; [7C 76 59, 05, 05]
-106DE; [7C 6F 27, 05, 05]
+10766; [7C 76 60, 05, 05]
-106DF; [7C 6F 2E, 05, 05]
+10767; [7C 76 67, 05, 05]
-106E0; [7C 6F 35, 05, 05]
+FDD1 10800; [7C 77 02, 05, 05] # CYPRIOT first primary (compressible)
-106E1; [7C 6F 3C, 05, 05]
+10800; [7C 77 09, 05, 05]
-106E2; [7C 6F 43, 05, 05]
+10801; [7C 77 10, 05, 05]
-106E3; [7C 6F 4A, 05, 05]
+10802; [7C 77 17, 05, 05]
-106E4; [7C 6F 51, 05, 05]
+10803; [7C 77 1E, 05, 05]
-106E5; [7C 6F 58, 05, 05]
+10804; [7C 77 25, 05, 05]
-106E6; [7C 6F 5F, 05, 05]
+10805; [7C 77 2C, 05, 05]
-106E7; [7C 6F 66, 05, 05]
+10808; [7C 77 33, 05, 05]
-106E8; [7C 6F 6D, 05, 05]
+1080A; [7C 77 3A, 05, 05]
-106E9; [7C 6F 74, 05, 05]
+1080B; [7C 77 41, 05, 05]
-106EA; [7C 6F 7B, 05, 05]
+1080C; [7C 77 48, 05, 05]
-106EB; [7C 6F 82, 05, 05]
+1080D; [7C 77 4F, 05, 05]
-106EC; [7C 6F 89, 05, 05]
+1080E; [7C 77 56, 05, 05]
-106ED; [7C 6F 90, 05, 05]
+1080F; [7C 77 5D, 05, 05]
-106EE; [7C 6F 97, 05, 05]
+10810; [7C 77 64, 05, 05]
-106EF; [7C 6F 9E, 05, 05]
+10811; [7C 77 6B, 05, 05]
-106F0; [7C 6F A5, 05, 05]
+10812; [7C 77 72, 05, 05]
-106F1; [7C 6F AC, 05, 05]
+10813; [7C 77 79, 05, 05]
-106F2; [7C 6F B3, 05, 05]
+10814; [7C 77 80, 05, 05]
-106F3; [7C 6F BA, 05, 05]
+10815; [7C 77 87, 05, 05]
-106F4; [7C 6F C1, 05, 05]
+10816; [7C 77 8E, 05, 05]
-106F5; [7C 6F C8, 05, 05]
+10817; [7C 77 95, 05, 05]
-106F6; [7C 6F CF, 05, 05]
+10818; [7C 77 9C, 05, 05]
-106F7; [7C 6F D6, 05, 05]
+10819; [7C 77 A3, 05, 05]
-106F8; [7C 6F DD, 05, 05]
+1081A; [7C 77 AA, 05, 05]
-106F9; [7C 6F E4, 05, 05]
+1081B; [7C 77 B1, 05, 05]
-106FA; [7C 6F EB, 05, 05]
+1081C; [7C 77 B8, 05, 05]
-106FB; [7C 6F F2, 05, 05]
+1081D; [7C 77 BF, 05, 05]
-106FC; [7C 6F F9, 05, 05]
+1081E; [7C 77 C6, 05, 05]
-106FD; [7C 70 02, 05, 05]
+1081F; [7C 77 CD, 05, 05]
-106FE; [7C 70 09, 05, 05]
+10820; [7C 77 D4, 05, 05]
-106FF; [7C 70 10, 05, 05]
+10821; [7C 77 DB, 05, 05]
-10700; [7C 70 17, 05, 05]
+10822; [7C 77 E2, 05, 05]
-10701; [7C 70 1E, 05, 05]
+10823; [7C 77 E9, 05, 05]
-10702; [7C 70 25, 05, 05]
+10824; [7C 77 F0, 05, 05]
-10703; [7C 70 2C, 05, 05]
+10825; [7C 77 F7, 05, 05]
-10704; [7C 70 33, 05, 05]
+10826; [7C 77 FE, 05, 05]
-10705; [7C 70 3A, 05, 05]
+10827; [7C 78 07, 05, 05]
-10706; [7C 70 41, 05, 05]
+10828; [7C 78 0E, 05, 05]
-10707; [7C 70 48, 05, 05]
+10829; [7C 78 15, 05, 05]
-10708; [7C 70 4F, 05, 05]
+1082A; [7C 78 1C, 05, 05]
-10709; [7C 70 56, 05, 05]
+1082B; [7C 78 23, 05, 05]
-1070A; [7C 70 5D, 05, 05]
+1082C; [7C 78 2A, 05, 05]
-1070B; [7C 70 64, 05, 05]
+1082D; [7C 78 31, 05, 05]
-1070C; [7C 70 6B, 05, 05]
+1082E; [7C 78 38, 05, 05]
-1070D; [7C 70 72, 05, 05]
+1082F; [7C 78 3F, 05, 05]
-1070E; [7C 70 79, 05, 05]
+10830; [7C 78 46, 05, 05]
-1070F; [7C 70 80, 05, 05]
+10831; [7C 78 4D, 05, 05]
-10710; [7C 70 87, 05, 05]
+10832; [7C 78 54, 05, 05]
-10711; [7C 70 8E, 05, 05]
+10833; [7C 78 5B, 05, 05]
-10712; [7C 70 95, 05, 05]
+10834; [7C 78 62, 05, 05]
-10713; [7C 70 9C, 05, 05]
+10835; [7C 78 69, 05, 05]
-10714; [7C 70 A3, 05, 05]
+10837; [7C 78 70, 05, 05]
-10715; [7C 70 AA, 05, 05]
+10838; [7C 78 77, 05, 05]
-10716; [7C 70 B1, 05, 05]
+1083C; [7C 78 7E, 05, 05]
-10717; [7C 70 B8, 05, 05]
+1083F; [7C 78 85, 05, 05]
-10718; [7C 70 BF, 05, 05]
+FDD1 12FE5; [7C 79 02, 05, 05] # Cypro_Minoan first primary (compressible)
-10719; [7C 70 C6, 05, 05]
+12F90; [7C 79 09, 05, 05]
-1071A; [7C 70 CD, 05, 05]
+12F91; [7C 79 10, 05, 05]
-1071B; [7C 70 D4, 05, 05]
+12F92; [7C 79 17, 05, 05]
-1071C; [7C 70 DB, 05, 05]
+12F93; [7C 79 1E, 05, 05]
-1071D; [7C 70 E2, 05, 05]
+12F94; [7C 79 25, 05, 05]
-1071E; [7C 70 E9, 05, 05]
+12F95; [7C 79 2C, 05, 05]
-1071F; [7C 70 F0, 05, 05]
+12F96; [7C 79 33, 05, 05]
-10720; [7C 70 F7, 05, 05]
+12F97; [7C 79 3A, 05, 05]
-10721; [7C 70 FE, 05, 05]
+12F98; [7C 79 41, 05, 05]
-10722; [7C 71 07, 05, 05]
+12F99; [7C 79 48, 05, 05]
-10723; [7C 71 0E, 05, 05]
+12F9A; [7C 79 4F, 05, 05]
-10724; [7C 71 15, 05, 05]
+12F9B; [7C 79 56, 05, 05]
-10725; [7C 71 1C, 05, 05]
+12F9C; [7C 79 5D, 05, 05]
-10726; [7C 71 23, 05, 05]
+12F9D; [7C 79 64, 05, 05]
-10727; [7C 71 2A, 05, 05]
+12F9E; [7C 79 6B, 05, 05]
-10728; [7C 71 31, 05, 05]
+12F9F; [7C 79 72, 05, 05]
-10729; [7C 71 38, 05, 05]
+12FA0; [7C 79 79, 05, 05]
-1072A; [7C 71 3F, 05, 05]
+12FA1; [7C 79 80, 05, 05]
-1072B; [7C 71 46, 05, 05]
+12FA2; [7C 79 87, 05, 05]
-1072C; [7C 71 4D, 05, 05]
+12FA3; [7C 79 8E, 05, 05]
-1072D; [7C 71 54, 05, 05]
+12FA4; [7C 79 95, 05, 05]
-1072E; [7C 71 5B, 05, 05]
+12FA5; [7C 79 9C, 05, 05]
-1072F; [7C 71 62, 05, 05]
+12FA6; [7C 79 A3, 05, 05]
-10730; [7C 71 69, 05, 05]
+12FA7; [7C 79 AA, 05, 05]
-10731; [7C 71 70, 05, 05]
+12FA8; [7C 79 B1, 05, 05]
-10732; [7C 71 77, 05, 05]
+12FA9; [7C 79 B8, 05, 05]
-10733; [7C 71 7E, 05, 05]
+12FAA; [7C 79 BF, 05, 05]
-10734; [7C 71 85, 05, 05]
+12FAB; [7C 79 C6, 05, 05]
-10735; [7C 71 8C, 05, 05]
+12FAC; [7C 79 CD, 05, 05]
-10736; [7C 71 93, 05, 05]
+12FAD; [7C 79 D4, 05, 05]
-10740; [7C 71 9A, 05, 05]
+12FAE; [7C 79 DB, 05, 05]
-10741; [7C 71 A1, 05, 05]
+12FAF; [7C 79 E2, 05, 05]
-10742; [7C 71 A8, 05, 05]
+12FB0; [7C 79 E9, 05, 05]
-10743; [7C 71 AF, 05, 05]
+12FB1; [7C 79 F0, 05, 05]
-10744; [7C 71 B6, 05, 05]
+12FB2; [7C 79 F7, 05, 05]
-10745; [7C 71 BD, 05, 05]
+12FB3; [7C 79 FE, 05, 05]
-10746; [7C 71 C4, 05, 05]
+12FB4; [7C 7A 07, 05, 05]
-10747; [7C 71 CB, 05, 05]
+12FB5; [7C 7A 0E, 05, 05]
-10748; [7C 71 D2, 05, 05]
+12FB6; [7C 7A 15, 05, 05]
-10749; [7C 71 D9, 05, 05]
+12FB7; [7C 7A 1C, 05, 05]
-1074A; [7C 71 E0, 05, 05]
+12FB8; [7C 7A 23, 05, 05]
-1074B; [7C 71 E7, 05, 05]
+12FB9; [7C 7A 2A, 05, 05]
-1074C; [7C 71 EE, 05, 05]
+12FBA; [7C 7A 31, 05, 05]
-1074D; [7C 71 F5, 05, 05]
+12FBB; [7C 7A 38, 05, 05]
-1074E; [7C 71 FC, 05, 05]
+12FBC; [7C 7A 3F, 05, 05]
-1074F; [7C 72 05, 05, 05]
+12FBD; [7C 7A 46, 05, 05]
-10750; [7C 72 0C, 05, 05]
+12FBE; [7C 7A 4D, 05, 05]
-10751; [7C 72 13, 05, 05]
+12FBF; [7C 7A 54, 05, 05]
-10752; [7C 72 1A, 05, 05]
+12FC0; [7C 7A 5B, 05, 05]
-10753; [7C 72 21, 05, 05]
+12FC1; [7C 7A 62, 05, 05]
-10754; [7C 72 28, 05, 05]
+12FC2; [7C 7A 69, 05, 05]
-10755; [7C 72 2F, 05, 05]
+12FC3; [7C 7A 70, 05, 05]
-10760; [7C 72 36, 05, 05]
+12FC4; [7C 7A 77, 05, 05]
-10761; [7C 72 3D, 05, 05]
+12FC5; [7C 7A 7E, 05, 05]
-10762; [7C 72 44, 05, 05]
+12FC6; [7C 7A 85, 05, 05]
-10763; [7C 72 4B, 05, 05]
+12FC7; [7C 7A 8C, 05, 05]
-10764; [7C 72 52, 05, 05]
+12FC8; [7C 7A 93, 05, 05]
-10765; [7C 72 59, 05, 05]
+12FC9; [7C 7A 9A, 05, 05]
-10766; [7C 72 60, 05, 05]
+12FCA; [7C 7A A1, 05, 05]
-10767; [7C 72 67, 05, 05]
+12FCB; [7C 7A A8, 05, 05]
-FDD1 10800; [7C 73 02, 05, 05] # CYPRIOT first primary (compressible)
+12FCC; [7C 7A AF, 05, 05]
-10800; [7C 73 09, 05, 05]
+12FCD; [7C 7A B6, 05, 05]
-10801; [7C 73 10, 05, 05]
+12FCE; [7C 7A BD, 05, 05]
-10802; [7C 73 17, 05, 05]
+12FCF; [7C 7A C4, 05, 05]
-10803; [7C 73 1E, 05, 05]
+12FD0; [7C 7A CB, 05, 05]
-10804; [7C 73 25, 05, 05]
+12FD1; [7C 7A D2, 05, 05]
-10805; [7C 73 2C, 05, 05]
+12FD2; [7C 7A D9, 05, 05]
-10808; [7C 73 33, 05, 05]
+12FD3; [7C 7A E0, 05, 05]
-1080A; [7C 73 3A, 05, 05]
+12FD4; [7C 7A E7, 05, 05]
-1080B; [7C 73 41, 05, 05]
+12FD5; [7C 7A EE, 05, 05]
-1080C; [7C 73 48, 05, 05]
+12FD6; [7C 7A F5, 05, 05]
-1080D; [7C 73 4F, 05, 05]
+12FD7; [7C 7A FC, 05, 05]
-1080E; [7C 73 56, 05, 05]
+12FD8; [7C 7B 05, 05, 05]
-1080F; [7C 73 5D, 05, 05]
+12FD9; [7C 7B 0C, 05, 05]
-10810; [7C 73 64, 05, 05]
+12FDA; [7C 7B 13, 05, 05]
-10811; [7C 73 6B, 05, 05]
+12FDB; [7C 7B 1A, 05, 05]
-10812; [7C 73 72, 05, 05]
+12FDC; [7C 7B 21, 05, 05]
-10813; [7C 73 79, 05, 05]
+12FDD; [7C 7B 28, 05, 05]
-10814; [7C 73 80, 05, 05]
+12FDE; [7C 7B 2F, 05, 05]
-10815; [7C 73 87, 05, 05]
+12FDF; [7C 7B 36, 05, 05]
-10816; [7C 73 8E, 05, 05]
+12FE0; [7C 7B 3D, 05, 05]
-10817; [7C 73 95, 05, 05]
+12FE1; [7C 7B 44, 05, 05]
-10818; [7C 73 9C, 05, 05]
+12FE2; [7C 7B 4B, 05, 05]
-10819; [7C 73 A3, 05, 05]
+12FE3; [7C 7B 52, 05, 05]
-1081A; [7C 73 AA, 05, 05]
+12FE4; [7C 7B 59, 05, 05]
-1081B; [7C 73 B1, 05, 05]
+12FE5; [7C 7B 60, 05, 05]
-1081C; [7C 73 B8, 05, 05]
+12FE6; [7C 7B 67, 05, 05]
-1081D; [7C 73 BF, 05, 05]
+12FE7; [7C 7B 6E, 05, 05]
-1081E; [7C 73 C6, 05, 05]
+12FE8; [7C 7B 75, 05, 05]
-1081F; [7C 73 CD, 05, 05]
+12FE9; [7C 7B 7C, 05, 05]
-10820; [7C 73 D4, 05, 05]
+12FEA; [7C 7B 83, 05, 05]
-10821; [7C 73 DB, 05, 05]
+12FEB; [7C 7B 8A, 05, 05]
-10822; [7C 73 E2, 05, 05]
+12FEC; [7C 7B 91, 05, 05]
-10823; [7C 73 E9, 05, 05]
+12FED; [7C 7B 98, 05, 05]
-10824; [7C 73 F0, 05, 05]
+12FEE; [7C 7B 9F, 05, 05]
-10825; [7C 73 F7, 05, 05]
+12FEF; [7C 7B A6, 05, 05]
-10826; [7C 73 FE, 05, 05]
+12FF0; [7C 7B AD, 05, 05]
-10827; [7C 74 07, 05, 05]
+FDD1 10A60; [7C 7C 02, 05, 05] # Old South Arabian first primary (compressible)
-10828; [7C 74 0E, 05, 05]
+10A60; [7C 7C 09, 05, 05]
-10829; [7C 74 15, 05, 05]
+10A61; [7C 7C 10, 05, 05]
-1082A; [7C 74 1C, 05, 05]
+10A62; [7C 7C 17, 05, 05]
-1082B; [7C 74 23, 05, 05]
+10A63; [7C 7C 1E, 05, 05]
-1082C; [7C 74 2A, 05, 05]
+10A64; [7C 7C 25, 05, 05]
-1082D; [7C 74 31, 05, 05]
+10A65; [7C 7C 2C, 05, 05]
-1082E; [7C 74 38, 05, 05]
+10A66; [7C 7C 33, 05, 05]
-1082F; [7C 74 3F, 05, 05]
+10A67; [7C 7C 3A, 05, 05]
-10830; [7C 74 46, 05, 05]
+10A68; [7C 7C 41, 05, 05]
-10831; [7C 74 4D, 05, 05]
+10A69; [7C 7C 48, 05, 05]
-10832; [7C 74 54, 05, 05]
+10A6A; [7C 7C 4F, 05, 05]
-10833; [7C 74 5B, 05, 05]
+10A6B; [7C 7C 56, 05, 05]
-10834; [7C 74 62, 05, 05]
+10A6C; [7C 7C 5D, 05, 05]
-10835; [7C 74 69, 05, 05]
+10A6D; [7C 7C 64, 05, 05]
-10837; [7C 74 70, 05, 05]
+10A6E; [7C 7C 6B, 05, 05]
-10838; [7C 74 77, 05, 05]
+10A6F; [7C 7C 72, 05, 05]
-1083C; [7C 74 7E, 05, 05]
+10A70; [7C 7C 79, 05, 05]
-1083F; [7C 74 85, 05, 05]
+10A71; [7C 7C 80, 05, 05]
-FDD1 10A60; [7C 75 02, 05, 05] # Old South Arabian first primary (compressible)
+10A72; [7C 7C 87, 05, 05]
-10A60; [7C 75 09, 05, 05]
+10A73; [7C 7C 8E, 05, 05]
-10A61; [7C 75 10, 05, 05]
+10A74; [7C 7C 95, 05, 05]
-10A62; [7C 75 17, 05, 05]
+10A75; [7C 7C 9C, 05, 05]
-10A63; [7C 75 1E, 05, 05]
+10A76; [7C 7C A3, 05, 05]
-10A64; [7C 75 25, 05, 05]
+10A77; [7C 7C AA, 05, 05]
-10A65; [7C 75 2C, 05, 05]
+10A78; [7C 7C B1, 05, 05]
-10A66; [7C 75 33, 05, 05]
+10A79; [7C 7C B8, 05, 05]
-10A67; [7C 75 3A, 05, 05]
+10A7A; [7C 7C BF, 05, 05]
-10A68; [7C 75 41, 05, 05]
+10A7B; [7C 7C C6, 05, 05]
-10A69; [7C 75 48, 05, 05]
+10A7C; [7C 7C CD, 05, 05]
-10A6A; [7C 75 4F, 05, 05]
+FDD1 10A95; [7C 7D 02, 05, 05] # Old_North_Arabian first primary (compressible)
-10A6B; [7C 75 56, 05, 05]
+10A80; [7C 7D 09, 05, 05]
-10A6C; [7C 75 5D, 05, 05]
+10A81; [7C 7D 10, 05, 05]
-10A6D; [7C 75 64, 05, 05]
+10A82; [7C 7D 17, 05, 05]
-10A6E; [7C 75 6B, 05, 05]
+10A83; [7C 7D 1E, 05, 05]
-10A6F; [7C 75 72, 05, 05]
+10A84; [7C 7D 25, 05, 05]
-10A70; [7C 75 79, 05, 05]
+10A85; [7C 7D 2C, 05, 05]
-10A71; [7C 75 80, 05, 05]
+10A86; [7C 7D 33, 05, 05]
-10A72; [7C 75 87, 05, 05]
+10A87; [7C 7D 3A, 05, 05]
-10A73; [7C 75 8E, 05, 05]
+10A88; [7C 7D 41, 05, 05]
-10A74; [7C 75 95, 05, 05]
+10A89; [7C 7D 48, 05, 05]
-10A75; [7C 75 9C, 05, 05]
+10A8A; [7C 7D 4F, 05, 05]
-10A76; [7C 75 A3, 05, 05]
+10A8B; [7C 7D 56, 05, 05]
-10A77; [7C 75 AA, 05, 05]
+10A8C; [7C 7D 5D, 05, 05]
-10A78; [7C 75 B1, 05, 05]
+10A8D; [7C 7D 64, 05, 05]
-10A79; [7C 75 B8, 05, 05]
+10A8E; [7C 7D 6B, 05, 05]
-10A7A; [7C 75 BF, 05, 05]
+10A8F; [7C 7D 72, 05, 05]
-10A7B; [7C 75 C6, 05, 05]
+10A90; [7C 7D 79, 05, 05]
-10A7C; [7C 75 CD, 05, 05]
+10A91; [7C 7D 80, 05, 05]
-FDD1 10A95; [7C 76 02, 05, 05] # Old_North_Arabian first primary (compressible)
+10A92; [7C 7D 87, 05, 05]
-10A80; [7C 76 09, 05, 05]
+10A93; [7C 7D 8E, 05, 05]
-10A81; [7C 76 10, 05, 05]
+10A94; [7C 7D 95, 05, 05]
-10A82; [7C 76 17, 05, 05]
+10A95; [7C 7D 9C, 05, 05]
-10A83; [7C 76 1E, 05, 05]
+10A96; [7C 7D A3, 05, 05]
-10A84; [7C 76 25, 05, 05]
+10A97; [7C 7D AA, 05, 05]
-10A85; [7C 76 2C, 05, 05]
+10A98; [7C 7D B1, 05, 05]
-10A86; [7C 76 33, 05, 05]
+10A99; [7C 7D B8, 05, 05]
-10A87; [7C 76 3A, 05, 05]
+10A9A; [7C 7D BF, 05, 05]
-10A88; [7C 76 41, 05, 05]
+10A9B; [7C 7D C6, 05, 05]
-10A89; [7C 76 48, 05, 05]
+10A9C; [7C 7D CD, 05, 05]
-10A8A; [7C 76 4F, 05, 05]
+FDD1 10B00; [7C 7E 02, 05, 05] # Avestan first primary (compressible)
-10A8B; [7C 76 56, 05, 05]
+10B00; [7C 7E 09, 05, 05]
-10A8C; [7C 76 5D, 05, 05]
+10B01; [7C 7E 10, 05, 05]
-10A8D; [7C 76 64, 05, 05]
+10B02; [7C 7E 17, 05, 05]
-10A8E; [7C 76 6B, 05, 05]
+10B03; [7C 7E 1E, 05, 05]
-10A8F; [7C 76 72, 05, 05]
+10B04; [7C 7E 25, 05, 05]
-10A90; [7C 76 79, 05, 05]
+10B05; [7C 7E 2C, 05, 05]
-10A91; [7C 76 80, 05, 05]
+10B06; [7C 7E 33, 05, 05]
-10A92; [7C 76 87, 05, 05]
+10B07; [7C 7E 3A, 05, 05]
-10A93; [7C 76 8E, 05, 05]
+10B08; [7C 7E 41, 05, 05]
-10A94; [7C 76 95, 05, 05]
+10B09; [7C 7E 48, 05, 05]
-10A95; [7C 76 9C, 05, 05]
+10B0A; [7C 7E 4F, 05, 05]
-10A96; [7C 76 A3, 05, 05]
+10B0B; [7C 7E 56, 05, 05]
-10A97; [7C 76 AA, 05, 05]
+10B0C; [7C 7E 5D, 05, 05]
-10A98; [7C 76 B1, 05, 05]
+10B0D; [7C 7E 64, 05, 05]
-10A99; [7C 76 B8, 05, 05]
+10B0E; [7C 7E 6B, 05, 05]
-10A9A; [7C 76 BF, 05, 05]
+10B0F; [7C 7E 72, 05, 05]
-10A9B; [7C 76 C6, 05, 05]
+10B10; [7C 7E 79, 05, 05]
-10A9C; [7C 76 CD, 05, 05]
+10B11; [7C 7E 80, 05, 05]
-FDD1 10B00; [7C 77 02, 05, 05] # Avestan first primary (compressible)
+10B12; [7C 7E 87, 05, 05]
-10B00; [7C 77 09, 05, 05]
+10B13; [7C 7E 8E, 05, 05]
-10B01; [7C 77 10, 05, 05]
+10B14; [7C 7E 95, 05, 05]
-10B02; [7C 77 17, 05, 05]
+10B15; [7C 7E 9C, 05, 05]
-10B03; [7C 77 1E, 05, 05]
+10B16; [7C 7E A3, 05, 05]
-10B04; [7C 77 25, 05, 05]
+10B17; [7C 7E AA, 05, 05]
-10B05; [7C 77 2C, 05, 05]
+10B18; [7C 7E B1, 05, 05]
-10B06; [7C 77 33, 05, 05]
+10B19; [7C 7E B8, 05, 05]
-10B07; [7C 77 3A, 05, 05]
+10B1A; [7C 7E BF, 05, 05]
-10B08; [7C 77 41, 05, 05]
+10B1B; [7C 7E C6, 05, 05]
-10B09; [7C 77 48, 05, 05]
+10B1C; [7C 7E CD, 05, 05]
-10B0A; [7C 77 4F, 05, 05]
+10B1D; [7C 7E D4, 05, 05]
-10B0B; [7C 77 56, 05, 05]
+10B1E; [7C 7E DB, 05, 05]
-10B0C; [7C 77 5D, 05, 05]
+10B1F; [7C 7E E2, 05, 05]
-10B0D; [7C 77 64, 05, 05]
+10B20; [7C 7E E9, 05, 05]
-10B0E; [7C 77 6B, 05, 05]
+10B21; [7C 7E F0, 05, 05]
-10B0F; [7C 77 72, 05, 05]
+10B22; [7C 7E F7, 05, 05]
-10B10; [7C 77 79, 05, 05]
+10B23; [7C 7E FE, 05, 05]
-10B11; [7C 77 80, 05, 05]
+10B24; [7C 7F 07, 05, 05]
-10B12; [7C 77 87, 05, 05]
+10B25; [7C 7F 0E, 05, 05]
-10B13; [7C 77 8E, 05, 05]
+10B26; [7C 7F 15, 05, 05]
-10B14; [7C 77 95, 05, 05]
+10B27; [7C 7F 1C, 05, 05]
-10B15; [7C 77 9C, 05, 05]
+10B28; [7C 7F 23, 05, 05]
-10B16; [7C 77 A3, 05, 05]
+10B29; [7C 7F 2A, 05, 05]
-10B17; [7C 77 AA, 05, 05]
+10B2A; [7C 7F 31, 05, 05]
-10B18; [7C 77 B1, 05, 05]
+10B2B; [7C 7F 38, 05, 05]
-10B19; [7C 77 B8, 05, 05]
+10B2C; [7C 7F 3F, 05, 05]
-10B1A; [7C 77 BF, 05, 05]
+10B2D; [7C 81, 05, 05]
+10B2E; [7C 81, 70, 05]
-10B1B; [7C 77 C6, 05, 05]
+10B2F; [7C 83 02, 05, 05]
-10B1C; [7C 77 CD, 05, 05]
+10B30; [7C 83 09, 05, 05]
-10B1D; [7C 77 D4, 05, 05]
+10B31; [7C 83 10, 05, 05]
-10B1E; [7C 77 DB, 05, 05]
+10B32; [7C 83 17, 05, 05]
-10B1F; [7C 77 E2, 05, 05]
+10B33; [7C 83 1E, 05, 05]
-10B20; [7C 77 E9, 05, 05]
+10B34; [7C 83 25, 05, 05]
-10B21; [7C 77 F0, 05, 05]
+10B35; [7C 83 2C, 05, 05]
-10B22; [7C 77 F7, 05, 05]
+FDD1 10873; [7C 84 02, 05, 05] # Palmyrene first primary (compressible)
-10B23; [7C 77 FE, 05, 05]
+10860; [7C 84 09, 05, 05]
-10B24; [7C 78 07, 05, 05]
+10861; [7C 84 10, 05, 05]
-10B25; [7C 78 0E, 05, 05]
+10862; [7C 84 17, 05, 05]
-10B26; [7C 78 15, 05, 05]
+10863; [7C 84 1E, 05, 05]
-10B27; [7C 78 1C, 05, 05]
+10864; [7C 84 25, 05, 05]
-10B28; [7C 78 23, 05, 05]
+10865; [7C 84 2C, 05, 05]
-10B29; [7C 78 2A, 05, 05]
+10866; [7C 84 33, 05, 05]
-10B2A; [7C 78 31, 05, 05]
+10867; [7C 84 3A, 05, 05]
-10B2B; [7C 78 38, 05, 05]
+10868; [7C 84 41, 05, 05]
-10B2C; [7C 78 3F, 05, 05]
+10869; [7C 84 48, 05, 05]
-10B2D; [7C 7A, 05, 05]
-10B2E; [7C 7A, 70, 05]
+1086A; [7C 84 4F, 05, 05]
-10B2F; [7C 7C 02, 05, 05]
+1086B; [7C 84 56, 05, 05]
-10B30; [7C 7C 09, 05, 05]
+1086C; [7C 84 5D, 05, 05]
-10B31; [7C 7C 10, 05, 05]
+1086E; [7C 86, 05, 05]
+1086D; [7C 86, 05, 20]
-10B32; [7C 7C 17, 05, 05]
+1086F; [7C 88 02, 05, 05]
-10B33; [7C 7C 1E, 05, 05]
+10870; [7C 88 09, 05, 05]
-10B34; [7C 7C 25, 05, 05]
+10871; [7C 88 10, 05, 05]
-10B35; [7C 7C 2C, 05, 05]
+10872; [7C 88 17, 05, 05]
-FDD1 10873; [7C 7D 02, 05, 05] # Palmyrene first primary (compressible)
+10873; [7C 88 1E, 05, 05]
-10860; [7C 7D 09, 05, 05]
+10874; [7C 88 25, 05, 05]
-10861; [7C 7D 10, 05, 05]
+10875; [7C 88 2C, 05, 05]
-10862; [7C 7D 17, 05, 05]
+10876; [7C 88 33, 05, 05]
-10863; [7C 7D 1E, 05, 05]
+FDD1 10896; [7C 89 02, 05, 05] # Nabataean first primary (compressible)
-10864; [7C 7D 25, 05, 05]
+10881; [7C 8B, 05, 05]
+10880; [7C 8B, 05, 20]
-10865; [7C 7D 2C, 05, 05]
+10883; [7C 8D, 05, 05]
+10882; [7C 8D, 05, 20]
-10866; [7C 7D 33, 05, 05]
+10884; [7C 8F 02, 05, 05]
-10867; [7C 7D 3A, 05, 05]
+10885; [7C 8F 09, 05, 05]
-10868; [7C 7D 41, 05, 05]
+10887; [7C 91, 05, 05]
+10886; [7C 91, 05, 20]
-10869; [7C 7D 48, 05, 05]
+10888; [7C 93 02, 05, 05]
-1086A; [7C 7D 4F, 05, 05]
+10889; [7C 93 09, 05, 05]
-1086B; [7C 7D 56, 05, 05]
+1088A; [7C 93 10, 05, 05]
-1086C; [7C 7D 5D, 05, 05]
+1088B; [7C 93 17, 05, 05]
-1086E; [7C 7F, 05, 05]
-1086D; [7C 7F, 05, 20]
+1088D; [7C 95, 05, 05]
+1088C; [7C 95, 05, 20]
-1086F; [7C 81 02, 05, 05]
+1088F; [7C 97, 05, 05]
+1088E; [7C 97, 05, 20]
-10870; [7C 81 09, 05, 05]
+10891; [7C 99, 05, 05]
+10890; [7C 99, 05, 20]
-10871; [7C 81 10, 05, 05]
+10893; [7C 9B, 05, 05]
+10892; [7C 9B, 05, 20]
-10872; [7C 81 17, 05, 05]
+10895; [7C 9D, 05, 05]
+10894; [7C 9D, 05, 20]
-10873; [7C 81 1E, 05, 05]
+10896; [7C 9F 02, 05, 05]
-10874; [7C 81 25, 05, 05]
+10897; [7C 9F 09, 05, 05]
-10875; [7C 81 2C, 05, 05]
+10898; [7C 9F 10, 05, 05]
-10876; [7C 81 33, 05, 05]
+10899; [7C 9F 17, 05, 05]
-FDD1 10896; [7C 82 02, 05, 05] # Nabataean first primary (compressible)
+1089A; [7C 9F 1E, 05, 05]
-10881; [7C 84, 05, 05]
-10880; [7C 84, 05, 20]
+1089B; [7C 9F 25, 05, 05]
-10883; [7C 86, 05, 05]
-10882; [7C 86, 05, 20]
+1089D; [7C A1, 05, 05]
+1089C; [7C A1, 05, 20]
-10884; [7C 88 02, 05, 05]
+1089E; [7C A3 02, 05, 05]
-10885; [7C 88 09, 05, 05]
+FDD1 108F4; [7C A4 02, 05, 05] # Hatran first primary (compressible)
-10887; [7C 8A, 05, 05]
-10886; [7C 8A, 05, 20]
+108E0; [7C A4 09, 05, 05]
-10888; [7C 8C 02, 05, 05]
+108E1; [7C A4 10, 05, 05]
-10889; [7C 8C 09, 05, 05]
+108E2; [7C A4 17, 05, 05]
-1088A; [7C 8C 10, 05, 05]
+108E3; [7C A4 1E, 05, 05]
-1088B; [7C 8C 17, 05, 05]
+108E4; [7C A4 25, 05, 05]
-1088D; [7C 8E, 05, 05]
-1088C; [7C 8E, 05, 20]
+108E5; [7C A4 2C, 05, 05]
-1088F; [7C 90, 05, 05]
-1088E; [7C 90, 05, 20]
+108E6; [7C A4 33, 05, 05]
-10891; [7C 92, 05, 05]
-10890; [7C 92, 05, 20]
+108E7; [7C A4 3A, 05, 05]
-10893; [7C 94, 05, 05]
-10892; [7C 94, 05, 20]
+108E8; [7C A4 41, 05, 05]
-10895; [7C 96, 05, 05]
-10894; [7C 96, 05, 20]
+108E9; [7C A4 48, 05, 05]
-10896; [7C 98 02, 05, 05]
+108EA; [7C A4 4F, 05, 05]
-10897; [7C 98 09, 05, 05]
+108EB; [7C A4 56, 05, 05]
-10898; [7C 98 10, 05, 05]
+108EC; [7C A4 5D, 05, 05]
-10899; [7C 98 17, 05, 05]
+108ED; [7C A4 64, 05, 05]
-1089A; [7C 98 1E, 05, 05]
+108EE; [7C A4 6B, 05, 05]
-1089B; [7C 98 25, 05, 05]
+108EF; [7C A4 72, 05, 05]
-1089D; [7C 9A, 05, 05]
-1089C; [7C 9A, 05, 20]
+108F0; [7C A4 79, 05, 05]
-1089E; [7C 9C 02, 05, 05]
+108F1; [7C A4 80, 05, 05]
-FDD1 108F4; [7C 9D 02, 05, 05] # Hatran first primary (compressible)
+108F2; [7C A4 87, 05, 05]
-108E0; [7C 9D 09, 05, 05]
+108F4; [7C A4 8E, 05, 05]
-108E1; [7C 9D 10, 05, 05]
+108F5; [7C A4 95, 05, 05]
-108E2; [7C 9D 17, 05, 05]
+FDD1 10840; [7C A5 02, 05, 05] # Imperial Aramaic first primary (compressible)
-108E3; [7C 9D 1E, 05, 05]
+10840; [7C A5 09, 05, 05]
-108E4; [7C 9D 25, 05, 05]
+10841; [7C A5 10, 05, 05]
-108E5; [7C 9D 2C, 05, 05]
+10842; [7C A5 17, 05, 05]
-108E6; [7C 9D 33, 05, 05]
+10843; [7C A5 1E, 05, 05]
-108E7; [7C 9D 3A, 05, 05]
+10844; [7C A5 25, 05, 05]
-108E8; [7C 9D 41, 05, 05]
+10845; [7C A5 2C, 05, 05]
-108E9; [7C 9D 48, 05, 05]
+10846; [7C A5 33, 05, 05]
-108EA; [7C 9D 4F, 05, 05]
+10847; [7C A5 3A, 05, 05]
-108EB; [7C 9D 56, 05, 05]
+10848; [7C A5 41, 05, 05]
-108EC; [7C 9D 5D, 05, 05]
+10849; [7C A5 48, 05, 05]
-108ED; [7C 9D 64, 05, 05]
+1084A; [7C A5 4F, 05, 05]
-108EE; [7C 9D 6B, 05, 05]
+1084B; [7C A5 56, 05, 05]
-108EF; [7C 9D 72, 05, 05]
+1084C; [7C A5 5D, 05, 05]
-108F0; [7C 9D 79, 05, 05]
+1084D; [7C A5 64, 05, 05]
-108F1; [7C 9D 80, 05, 05]
+1084E; [7C A5 6B, 05, 05]
-108F2; [7C 9D 87, 05, 05]
+1084F; [7C A5 72, 05, 05]
-108F4; [7C 9D 8E, 05, 05]
+10850; [7C A5 79, 05, 05]
-108F5; [7C 9D 95, 05, 05]
+10851; [7C A5 80, 05, 05]
-FDD1 10840; [7C 9E 02, 05, 05] # Imperial Aramaic first primary (compressible)
+10852; [7C A5 87, 05, 05]
-10840; [7C 9E 09, 05, 05]
+10853; [7C A5 8E, 05, 05]
-10841; [7C 9E 10, 05, 05]
+10854; [7C A5 95, 05, 05]
-10842; [7C 9E 17, 05, 05]
+10855; [7C A5 9C, 05, 05]
-10843; [7C 9E 1E, 05, 05]
+FDD1 10B40; [7C A6 02, 05, 05] # Inscriptional Parthian first primary (compressible)
-10844; [7C 9E 25, 05, 05]
+10B40; [7C A6 09, 05, 05]
-10845; [7C 9E 2C, 05, 05]
+10B41; [7C A6 10, 05, 05]
-10846; [7C 9E 33, 05, 05]
+10B42; [7C A6 17, 05, 05]
-10847; [7C 9E 3A, 05, 05]
+10B43; [7C A6 1E, 05, 05]
-10848; [7C 9E 41, 05, 05]
+10B44; [7C A6 25, 05, 05]
-10849; [7C 9E 48, 05, 05]
+10B45; [7C A6 2C, 05, 05]
-1084A; [7C 9E 4F, 05, 05]
+10B46; [7C A6 33, 05, 05]
-1084B; [7C 9E 56, 05, 05]
+10B47; [7C A6 3A, 05, 05]
-1084C; [7C 9E 5D, 05, 05]
+10B48; [7C A6 41, 05, 05]
-1084D; [7C 9E 64, 05, 05]
+10B49; [7C A6 48, 05, 05]
-1084E; [7C 9E 6B, 05, 05]
+10B4A; [7C A6 4F, 05, 05]
-1084F; [7C 9E 72, 05, 05]
+10B4B; [7C A6 56, 05, 05]
-10850; [7C 9E 79, 05, 05]
+10B4C; [7C A6 5D, 05, 05]
-10851; [7C 9E 80, 05, 05]
+10B4D; [7C A6 64, 05, 05]
-10852; [7C 9E 87, 05, 05]
+10B4E; [7C A6 6B, 05, 05]
-10853; [7C 9E 8E, 05, 05]
+10B4F; [7C A6 72, 05, 05]
-10854; [7C 9E 95, 05, 05]
+10B50; [7C A6 79, 05, 05]
-10855; [7C 9E 9C, 05, 05]
+10B51; [7C A6 80, 05, 05]
-FDD1 10B40; [7C 9F 02, 05, 05] # Inscriptional Parthian first primary (compressible)
+10B52; [7C A6 87, 05, 05]
-10B40; [7C 9F 09, 05, 05]
+10B53; [7C A6 8E, 05, 05]
-10B41; [7C 9F 10, 05, 05]
+10B54; [7C A6 95, 05, 05]
-10B42; [7C 9F 17, 05, 05]
+10B55; [7C A6 9C, 05, 05]
-10B43; [7C 9F 1E, 05, 05]
+FDD1 10B60; [7C A7 02, 05, 05] # Inscriptional Pahlavi first primary (compressible)
-10B44; [7C 9F 25, 05, 05]
+10B60; [7C A7 09, 05, 05]
-10B45; [7C 9F 2C, 05, 05]
+10B61; [7C A7 10, 05, 05]
-10B46; [7C 9F 33, 05, 05]
+10B62; [7C A7 17, 05, 05]
-10B47; [7C 9F 3A, 05, 05]
+10B63; [7C A7 1E, 05, 05]
-10B48; [7C 9F 41, 05, 05]
+10B64; [7C A7 25, 05, 05]
-10B49; [7C 9F 48, 05, 05]
+10B65; [7C A7 2C, 05, 05]
-10B4A; [7C 9F 4F, 05, 05]
+10B66; [7C A7 33, 05, 05]
-10B4B; [7C 9F 56, 05, 05]
+10B67; [7C A7 3A, 05, 05]
-10B4C; [7C 9F 5D, 05, 05]
+10B68; [7C A7 41, 05, 05]
-10B4D; [7C 9F 64, 05, 05]
+10B69; [7C A7 48, 05, 05]
-10B4E; [7C 9F 6B, 05, 05]
+10B6A; [7C A7 4F, 05, 05]
-10B4F; [7C 9F 72, 05, 05]
+10B6B; [7C A7 56, 05, 05]
-10B50; [7C 9F 79, 05, 05]
+10B6C; [7C A7 5D, 05, 05]
-10B51; [7C 9F 80, 05, 05]
+10B6D; [7C A7 64, 05, 05]
-10B52; [7C 9F 87, 05, 05]
+10B6E; [7C A7 6B, 05, 05]
-10B53; [7C 9F 8E, 05, 05]
+10B6F; [7C A7 72, 05, 05]
-10B54; [7C 9F 95, 05, 05]
+10B70; [7C A7 79, 05, 05]
-10B55; [7C 9F 9C, 05, 05]
+10B71; [7C A7 80, 05, 05]
-FDD1 10B60; [7C A0 02, 05, 05] # Inscriptional Pahlavi first primary (compressible)
+10B72; [7C A7 87, 05, 05]
-10B60; [7C A0 09, 05, 05]
+FDD1 10B8F; [7C A8 02, 05, 05] # Psalter_Pahlavi first primary (compressible)
-10B61; [7C A0 10, 05, 05]
+10B80; [7C A8 09, 05, 05]
-10B62; [7C A0 17, 05, 05]
+10B81; [7C A8 10, 05, 05]
-10B63; [7C A0 1E, 05, 05]
+10B82; [7C A8 17, 05, 05]
-10B64; [7C A0 25, 05, 05]
+10B83; [7C A8 1E, 05, 05]
-10B65; [7C A0 2C, 05, 05]
+10B84; [7C A8 25, 05, 05]
-10B66; [7C A0 33, 05, 05]
+10B85; [7C A8 2C, 05, 05]
-10B67; [7C A0 3A, 05, 05]
+10B86; [7C A8 33, 05, 05]
-10B68; [7C A0 41, 05, 05]
+10B87; [7C A8 3A, 05, 05]
-10B69; [7C A0 48, 05, 05]
+10B88; [7C A8 41, 05, 05]
-10B6A; [7C A0 4F, 05, 05]
+10B89; [7C A8 48, 05, 05]
-10B6B; [7C A0 56, 05, 05]
+10B8A; [7C A8 4F, 05, 05]
-10B6C; [7C A0 5D, 05, 05]
+10B8B; [7C A8 56, 05, 05]
-10B6D; [7C A0 64, 05, 05]
+10B8C; [7C A8 5D, 05, 05]
-10B6E; [7C A0 6B, 05, 05]
+10B8D; [7C A8 64, 05, 05]
-10B6F; [7C A0 72, 05, 05]
+10B8E; [7C A8 6B, 05, 05]
-10B70; [7C A0 79, 05, 05]
+10B8F; [7C A8 72, 05, 05]
-10B71; [7C A0 80, 05, 05]
+10B90; [7C A8 79, 05, 05]
-10B72; [7C A0 87, 05, 05]
+10B91; [7C A8 80, 05, 05]
-FDD1 10B8F; [7C A1 02, 05, 05] # Psalter_Pahlavi first primary (compressible)
+FDD1 10FF1; [7C A9 02, 05, 05] # Elymaic first primary (compressible)
-10B80; [7C A1 09, 05, 05]
+10FE0; [7C A9 09, 05, 05]
-10B81; [7C A1 10, 05, 05]
+10FE1; [7C A9 10, 05, 05]
-10B82; [7C A1 17, 05, 05]
+10FE2; [7C A9 17, 05, 05]
-10B83; [7C A1 1E, 05, 05]
+10FE3; [7C A9 1E, 05, 05]
-10B84; [7C A1 25, 05, 05]
+10FE4; [7C A9 25, 05, 05]
-10B85; [7C A1 2C, 05, 05]
+10FE5; [7C A9 2C, 05, 05]
-10B86; [7C A1 33, 05, 05]
+10FE6; [7C A9 33, 05, 05]
+10FF6; [7C A9 33, 05, 20][7C A9 48, 05, 20]
-10B87; [7C A1 3A, 05, 05]
+10FE7; [7C A9 3A, 05, 05]
-10B88; [7C A1 41, 05, 05]
+10FE8; [7C A9 41, 05, 05]
-10B89; [7C A1 48, 05, 05]
+10FE9; [7C A9 48, 05, 05]
-10B8A; [7C A1 4F, 05, 05]
+10FEA; [7C A9 4F, 05, 05]
-10B8B; [7C A1 56, 05, 05]
+10FEB; [7C A9 56, 05, 05]
-10B8C; [7C A1 5D, 05, 05]
+10FEC; [7C A9 5D, 05, 05]
-10B8D; [7C A1 64, 05, 05]
+10FED; [7C A9 64, 05, 05]
-10B8E; [7C A1 6B, 05, 05]
+10FEE; [7C A9 6B, 05, 05]
-10B8F; [7C A1 72, 05, 05]
+10FEF; [7C A9 72, 05, 05]
-10B90; [7C A1 79, 05, 05]
+10FF0; [7C A9 79, 05, 05]
-10B91; [7C A1 80, 05, 05]
+10FF1; [7C A9 80, 05, 05]
-FDD1 10FF1; [7C A2 02, 05, 05] # Elymaic first primary (compressible)
+10FF2; [7C A9 87, 05, 05]
-10FE0; [7C A2 09, 05, 05]
+10FF3; [7C A9 8E, 05, 05]
-10FE1; [7C A2 10, 05, 05]
+10FF4; [7C A9 95, 05, 05]
-10FE2; [7C A2 17, 05, 05]
+10FF5; [7C A9 9C, 05, 05]
-10FE3; [7C A2 1E, 05, 05]
+FDD1 10AD8; [7C AA 02, 05, 05] # Manichaean first primary (compressible)
-10FE4; [7C A2 25, 05, 05]
+10AC0; [7C AA 09, 05, 05]
-10FE5; [7C A2 2C, 05, 05]
+10AC1; [7C AA 10, 05, 05]
-10FE6; [7C A2 33, 05, 05]
-10FF6; [7C A2 33, 05, 20][7C A2 48, 05, 20]
+10AC2; [7C AA 17, 05, 05]
-10FE7; [7C A2 3A, 05, 05]
+10AC3; [7C AA 1E, 05, 05]
-10FE8; [7C A2 41, 05, 05]
+10AC4; [7C AA 25, 05, 05]
-10FE9; [7C A2 48, 05, 05]
+10AC5; [7C AA 2C, 05, 05]
-10FEA; [7C A2 4F, 05, 05]
+10AC6; [7C AA 33, 05, 05]
-10FEB; [7C A2 56, 05, 05]
+10AC7; [7C AC, 05, 05]
+10AC8; [7C AC, 70, 05]
-10FEC; [7C A2 5D, 05, 05]
+10AC9; [7C AE 02, 05, 05]
-10FED; [7C A2 64, 05, 05]
+10ACA; [7C AE 09, 05, 05]
-10FEE; [7C A2 6B, 05, 05]
+10ACB; [7C AE 10, 05, 05]
-10FEF; [7C A2 72, 05, 05]
+10ACC; [7C AE 17, 05, 05]
-10FF0; [7C A2 79, 05, 05]
+10ACD; [7C AE 1E, 05, 05]
-10FF1; [7C A2 80, 05, 05]
+10ACE; [7C AE 25, 05, 05]
-10FF2; [7C A2 87, 05, 05]
+10ACF; [7C AE 2C, 05, 05]
-10FF3; [7C A2 8E, 05, 05]
+10AD0; [7C AE 33, 05, 05]
-10FF4; [7C A2 95, 05, 05]
+10AD1; [7C AE 3A, 05, 05]
-10FF5; [7C A2 9C, 05, 05]
+10AD2; [7C AE 41, 05, 05]
-FDD1 10AD8; [7C A3 02, 05, 05] # Manichaean first primary (compressible)
+10AD3; [7C AE 48, 05, 05]
-10AC0; [7C A3 09, 05, 05]
+10AD4; [7C AE 4F, 05, 05]
-10AC1; [7C A3 10, 05, 05]
+10AD5; [7C AE 56, 05, 05]
-10AC2; [7C A3 17, 05, 05]
+10AD6; [7C AE 5D, 05, 05]
-10AC3; [7C A3 1E, 05, 05]
+10AD7; [7C AE 64, 05, 05]
-10AC4; [7C A3 25, 05, 05]
+10AD8; [7C AE 6B, 05, 05]
-10AC5; [7C A3 2C, 05, 05]
+10AD9; [7C AE 72, 05, 05]
-10AC6; [7C A3 33, 05, 05]
+10ADA; [7C AE 79, 05, 05]
-10AC7; [7C A5, 05, 05]
-10AC8; [7C A5, 70, 05]
+10ADB; [7C AE 80, 05, 05]
-10AC9; [7C A7 02, 05, 05]
+10ADC; [7C AE 87, 05, 05]
-10ACA; [7C A7 09, 05, 05]
+10ADD; [7C AE 8E, 05, 05]
-10ACB; [7C A7 10, 05, 05]
+10ADE; [7C AE 95, 05, 05]
-10ACC; [7C A7 17, 05, 05]
+10ADF; [7C AE 9C, 05, 05]
-10ACD; [7C A7 1E, 05, 05]
+10AE0; [7C AE A3, 05, 05]
-10ACE; [7C A7 25, 05, 05]
+10AE1; [7C AE AA, 05, 05]
-10ACF; [7C A7 2C, 05, 05]
+10AE2; [7C AE B1, 05, 05]
-10AD0; [7C A7 33, 05, 05]
+10AE3; [7C AE B8, 05, 05]
-10AD1; [7C A7 3A, 05, 05]
+10AE4; [7C AE BF, 05, 05]
-10AD2; [7C A7 41, 05, 05]
+FDD1 10F19; [7C AF 02, 05, 05] # Old_Sogdian first primary (compressible)
-10AD3; [7C A7 48, 05, 05]
+10F00; [7C B1, 05, 05]
+10F01; [7C B1, 05, 20]
-10AD4; [7C A7 4F, 05, 05]
+10F02; [7C B3, 05, 05]
+10F03; [7C B3, 05, 20]
-10AD5; [7C A7 56, 05, 05]
+10F04; [7C B5, 05, 05]
-10AD6; [7C A7 5D, 05, 05]
+10F05; [7C B7, 05, 05]
+10F06; [7C B7, 05, 20]
-10AD7; [7C A7 64, 05, 05]
+10F07; [7C B9 02, 05, 05]
-10AD8; [7C A7 6B, 05, 05]
+10F08; [7C B9 09, 05, 05]
-10AD9; [7C A7 72, 05, 05]
+10F09; [7C B9 10, 05, 05]
-10ADA; [7C A7 79, 05, 05]
+10F0A; [7C B9 17, 05, 05]
-10ADB; [7C A7 80, 05, 05]
+10F0B; [7C B9 1E, 05, 05]
-10ADC; [7C A7 87, 05, 05]
+10F0C; [7C B9 25, 05, 05]
-10ADD; [7C A7 8E, 05, 05]
+10F0D; [7C B9 2C, 05, 05]
-10ADE; [7C A7 95, 05, 05]
+10F0E; [7C BB, 05, 05]
+10F0F; [7C BB, 05, 20]
+10F10; [7C BB, 70, 05]
-10ADF; [7C A7 9C, 05, 05]
+10F11; [7C BD, 05, 05]
-10AE0; [7C A7 A3, 05, 05]
+10F12; [7C BF, 05, 05]
+10F13; [7C BF, 70, 05]
+10F27; [7C BF, 05, 20][7C C5, 05, 20]
-10AE1; [7C A7 AA, 05, 05]
+10F14; [7C C1, 05, 05]
-10AE2; [7C A7 B1, 05, 05]
+10F15; [7C C3, 05, 05]
+10F16; [7C C3, 05, 20]
+10F17; [7C C3, 70, 05]
-10AE3; [7C A7 B8, 05, 05]
+10F18; [7C C5, 05, 05]
-10AE4; [7C A7 BF, 05, 05]
+10F19; [7C C7, 05, 05]
-FDD1 10F19; [7C A8 02, 05, 05] # Old_Sogdian first primary (compressible)
+10F1A; [7C C9, 05, 05]
+10F1B; [7C C9, 05, 20]
+10F1C; [7C C9, 70, 05]
-10F00; [7C AA, 05, 05]
-10F01; [7C AA, 05, 20]
+FDD1 10F42; [7C CB 02, 05, 05] # Sogdian first primary (compressible)
-10F02; [7C AC, 05, 05]
-10F03; [7C AC, 05, 20]
+10F30; [7C CB 09, 05, 05]
-10F04; [7C AE, 05, 05]
+10F31; [7C CB 10, 05, 05]
-10F05; [7C B0, 05, 05]
-10F06; [7C B0, 05, 20]
+10F32; [7C CB 17, 05, 05]
-10F07; [7C B2 02, 05, 05]
+10F33; [7C CB 1E, 05, 05]
-10F08; [7C B2 09, 05, 05]
+10F34; [7C CB 25, 05, 05]
-10F09; [7C B2 10, 05, 05]
+10F35; [7C CB 2C, 05, 05]
-10F0A; [7C B2 17, 05, 05]
+10F36; [7C CB 33, 05, 05]
-10F0B; [7C B2 1E, 05, 05]
+10F37; [7C CB 3A, 05, 05]
-10F0C; [7C B2 25, 05, 05]
+10F38; [7C CB 41, 05, 05]
-10F0D; [7C B2 2C, 05, 05]
+10F39; [7C CB 48, 05, 05]
-10F0E; [7C B4, 05, 05]
-10F0F; [7C B4, 05, 20]
-10F10; [7C B4, 70, 05]
+10F3A; [7C CB 4F, 05, 05]
-10F11; [7C B6, 05, 05]
+10F3B; [7C CB 56, 05, 05]
-10F12; [7C B8, 05, 05]
-10F13; [7C B8, 70, 05]
-10F27; [7C B8, 05, 20][7C BE, 05, 20]
+10F3C; [7C CB 5D, 05, 05]
-10F14; [7C BA, 05, 05]
+10F3D; [7C CB 64, 05, 05]
-10F15; [7C BC, 05, 05]
-10F16; [7C BC, 05, 20]
-10F17; [7C BC, 70, 05]
+10F3E; [7C CB 6B, 05, 05]
-10F18; [7C BE, 05, 05]
+10F3F; [7C CB 72, 05, 05]
-10F19; [7C C0, 05, 05]
+10F40; [7C CB 79, 05, 05]
-10F1A; [7C C2, 05, 05]
-10F1B; [7C C2, 05, 20]
-10F1C; [7C C2, 70, 05]
+10F41; [7C CD, 05, 05]
+10F45; [7C CD, 70, 05]
-FDD1 10F42; [7C C4 02, 05, 05] # Sogdian first primary (compressible)
+10F42; [7C CF 02, 05, 05]
-10F30; [7C C4 09, 05, 05]
+10F43; [7C CF 09, 05, 05]
-10F31; [7C C4 10, 05, 05]
+10F44; [7C CF 10, 05, 05]
-10F32; [7C C4 17, 05, 05]
+FDD1 10F7C; [7C D0 02, 05, 05] # Old_Uyghur first primary (compressible)
-10F33; [7C C4 1E, 05, 05]
+10F70; [7C D0 09, 05, 05]
-10F34; [7C C4 25, 05, 05]
+10F71; [7C D0 10, 05, 05]
-10F35; [7C C4 2C, 05, 05]
+10F72; [7C D0 17, 05, 05]
-10F36; [7C C4 33, 05, 05]
+10F73; [7C D0 1E, 05, 05]
-10F37; [7C C4 3A, 05, 05]
+10F74; [7C D0 25, 05, 05]
-10F38; [7C C4 41, 05, 05]
+10F75; [7C D0 2C, 05, 05]
-10F39; [7C C4 48, 05, 05]
+10F76; [7C D0 33, 05, 05]
-10F3A; [7C C4 4F, 05, 05]
+10F77; [7C D0 3A, 05, 05]
-10F3B; [7C C4 56, 05, 05]
+10F78; [7C D0 41, 05, 05]
-10F3C; [7C C4 5D, 05, 05]
+10F79; [7C D0 48, 05, 05]
-10F3D; [7C C4 64, 05, 05]
+10F7A; [7C D0 4F, 05, 05]
-10F3E; [7C C4 6B, 05, 05]
+10F7B; [7C D0 56, 05, 05]
-10F3F; [7C C4 72, 05, 05]
+10F7C; [7C D0 5D, 05, 05]
-10F40; [7C C4 79, 05, 05]
+10F7D; [7C D0 64, 05, 05]
-10F41; [7C C6, 05, 05]
-10F45; [7C C6, 70, 05]
+10F7E; [7C D0 6B, 05, 05]
-10F42; [7C C8 02, 05, 05]
+10F7F; [7C D0 72, 05, 05]
-10F43; [7C C8 09, 05, 05]
+10F80; [7C D0 79, 05, 05]
-10F44; [7C C8 10, 05, 05]
+10F81; [7C D0 80, 05, 05]
-FDD1 10E88; [7C C9 02, 05, 05] # Yezidi first primary (compressible)
+FDD1 10E88; [7C D1 02, 05, 05] # Yezidi first primary (compressible)
-10E80; [7C C9 09, 05, 05]
+10E80; [7C D1 09, 05, 05]
-10E81; [7C C9 10, 05, 05]
+10E81; [7C D1 10, 05, 05]
-10E82; [7C C9 17, 05, 05]
+10E82; [7C D1 17, 05, 05]
-10E83; [7C C9 1E, 05, 05]
+10E83; [7C D1 1E, 05, 05]
-10E84; [7C C9 25, 05, 05]
+10E84; [7C D1 25, 05, 05]
-10E85; [7C C9 2C, 05, 05]
+10E85; [7C D1 2C, 05, 05]
-10E86; [7C C9 33, 05, 05]
+10E86; [7C D1 33, 05, 05]
-10E87; [7C C9 3A, 05, 05]
+10E87; [7C D1 3A, 05, 05]
-10E88; [7C C9 41, 05, 05]
+10E88; [7C D1 41, 05, 05]
-10E89; [7C C9 48, 05, 05]
+10E89; [7C D1 48, 05, 05]
-10E8A; [7C C9 4F, 05, 05]
+10E8A; [7C D1 4F, 05, 05]
-10E8B; [7C C9 56, 05, 05]
+10E8B; [7C D1 56, 05, 05]
-10E8C; [7C C9 5D, 05, 05]
+10E8C; [7C D1 5D, 05, 05]
-10E8D; [7C C9 64, 05, 05]
+10E8D; [7C D1 64, 05, 05]
-10E8E; [7C C9 6B, 05, 05]
+10E8E; [7C D1 6B, 05, 05]
-10E8F; [7C C9 72, 05, 05]
+10E8F; [7C D1 72, 05, 05]
-10E90; [7C C9 79, 05, 05]
+10E90; [7C D1 79, 05, 05]
-10E91; [7C C9 80, 05, 05]
+10E91; [7C D1 80, 05, 05]
-10E92; [7C C9 87, 05, 05]
+10E92; [7C D1 87, 05, 05]
-10E93; [7C C9 8E, 05, 05]
+10E93; [7C D1 8E, 05, 05]
-10E94; [7C C9 95, 05, 05]
+10E94; [7C D1 95, 05, 05]
-10E95; [7C C9 9C, 05, 05]
+10E95; [7C D1 9C, 05, 05]
-10E96; [7C C9 A3, 05, 05]
+10E96; [7C D1 A3, 05, 05]
-10E97; [7C C9 AA, 05, 05]
+10E97; [7C D1 AA, 05, 05]
-10E98; [7C C9 B1, 05, 05]
+10E98; [7C D1 B1, 05, 05]
-10E99; [7C C9 B8, 05, 05]
+10E99; [7C D1 B8, 05, 05]
-10E9A; [7C C9 BF, 05, 05]
+10E9A; [7C D1 BF, 05, 05]
-10E9B; [7C C9 C6, 05, 05]
+10E9B; [7C D1 C6, 05, 05]
-10E9C; [7C C9 CD, 05, 05]
+10E9C; [7C D1 CD, 05, 05]
-10E9D; [7C C9 D4, 05, 05]
+10E9D; [7C D1 D4, 05, 05]
-10E9E; [7C C9 DB, 05, 05]
+10E9E; [7C D1 DB, 05, 05]
-10E9F; [7C C9 E2, 05, 05]
+10E9F; [7C D1 E2, 05, 05]
-10EA0; [7C C9 E9, 05, 05]
+10EA0; [7C D1 E9, 05, 05]
-10EB0; [7C C9 F0, 05, 05]
+10EB0; [7C D1 F0, 05, 05]
-10EA1; [7C C9 F7, 05, 05]
+10EA1; [7C D1 F7, 05, 05]
-10EA2; [7C C9 FE, 05, 05]
+10EA2; [7C D1 FE, 05, 05]
-10EA3; [7C CA 07, 05, 05]
+10EA3; [7C D2 07, 05, 05]
-10EA4; [7C CA 0E, 05, 05]
+10EA4; [7C D2 0E, 05, 05]
-10EA5; [7C CA 15, 05, 05]
+10EA5; [7C D2 15, 05, 05]
-10EA6; [7C CA 1C, 05, 05]
+10EA6; [7C D2 1C, 05, 05]
-10EA7; [7C CA 23, 05, 05]
+10EA7; [7C D2 23, 05, 05]
-10EA8; [7C CA 2A, 05, 05]
+10EA8; [7C D2 2A, 05, 05]
-10EB1; [7C CA 31, 05, 05]
+10EB1; [7C D2 31, 05, 05]
-10EA9; [7C CA 38, 05, 05]
+10EA9; [7C D2 38, 05, 05]
-FDD1 10FBF; [7C CB 02, 05, 05] # Chorasmian first primary (compressible)
+FDD1 10FBF; [7C D3 02, 05, 05] # Chorasmian first primary (compressible)
-10FB0; [7C CB 09, 05, 05]
+10FB0; [7C D3 09, 05, 05]
-10FB1; [7C CB 10, 05, 05]
+10FB1; [7C D3 10, 05, 05]
-10FB2; [7C CB 17, 05, 05]
+10FB2; [7C D3 17, 05, 05]
-10FB3; [7C CB 1E, 05, 05]
+10FB3; [7C D3 1E, 05, 05]
-10FB4; [7C CB 25, 05, 05]
+10FB4; [7C D3 25, 05, 05]
-10FB5; [7C CB 2C, 05, 05]
+10FB5; [7C D3 2C, 05, 05]
-10FB6; [7C CB 33, 05, 05]
+10FB6; [7C D3 33, 05, 05]
-10FB7; [7C CB 3A, 05, 05]
+10FB7; [7C D3 3A, 05, 05]
-10FB8; [7C CB 41, 05, 05]
+10FB8; [7C D3 41, 05, 05]
-10FB9; [7C CB 48, 05, 05]
+10FB9; [7C D3 48, 05, 05]
-10FBA; [7C CB 4F, 05, 05]
+10FBA; [7C D3 4F, 05, 05]
-10FBB; [7C CB 56, 05, 05]
+10FBB; [7C D3 56, 05, 05]
-10FBC; [7C CB 5D, 05, 05]
+10FBC; [7C D3 5D, 05, 05]
-10FBD; [7C CB 64, 05, 05]
+10FBD; [7C D3 64, 05, 05]
-10FBE; [7C CB 6B, 05, 05]
+10FBE; [7C D3 6B, 05, 05]
-10FBF; [7C CB 72, 05, 05]
+10FBF; [7C D3 72, 05, 05]
-10FC0; [7C CB 79, 05, 05]
+10FC0; [7C D3 79, 05, 05]
-10FC1; [7C CB 80, 05, 05]
+10FC1; [7C D3 80, 05, 05]
-10FC2; [7C CB 87, 05, 05]
+10FC2; [7C D3 87, 05, 05]
-10FC3; [7C CB 8E, 05, 05]
+10FC3; [7C D3 8E, 05, 05]
-10FC4; [7C CB 95, 05, 05]
+10FC4; [7C D3 95, 05, 05]
-FDD1 10380; [7C CC 02, 05, 05] # UGARITIC first primary (compressible)
+FDD1 10380; [7C D4 02, 05, 05] # UGARITIC first primary (compressible)
-10380; [7C CC 09, 05, 05]
+10380; [7C D4 09, 05, 05]
-10381; [7C CC 10, 05, 05]
+10381; [7C D4 10, 05, 05]
-10382; [7C CC 17, 05, 05]
+10382; [7C D4 17, 05, 05]
-10383; [7C CC 1E, 05, 05]
+10383; [7C D4 1E, 05, 05]
-10384; [7C CC 25, 05, 05]
+10384; [7C D4 25, 05, 05]
-10385; [7C CC 2C, 05, 05]
+10385; [7C D4 2C, 05, 05]
-10386; [7C CC 33, 05, 05]
+10386; [7C D4 33, 05, 05]
-10387; [7C CC 3A, 05, 05]
+10387; [7C D4 3A, 05, 05]
-10388; [7C CC 41, 05, 05]
+10388; [7C D4 41, 05, 05]
-10389; [7C CC 48, 05, 05]
+10389; [7C D4 48, 05, 05]
-1038A; [7C CC 4F, 05, 05]
+1038A; [7C D4 4F, 05, 05]
-1038B; [7C CC 56, 05, 05]
+1038B; [7C D4 56, 05, 05]
-1038C; [7C CC 5D, 05, 05]
+1038C; [7C D4 5D, 05, 05]
-1038D; [7C CC 64, 05, 05]
+1038D; [7C D4 64, 05, 05]
-1038E; [7C CC 6B, 05, 05]
+1038E; [7C D4 6B, 05, 05]
-1038F; [7C CC 72, 05, 05]
+1038F; [7C D4 72, 05, 05]
-10390; [7C CC 79, 05, 05]
+10390; [7C D4 79, 05, 05]
-10391; [7C CC 80, 05, 05]
+10391; [7C D4 80, 05, 05]
-10392; [7C CC 87, 05, 05]
+10392; [7C D4 87, 05, 05]
-10393; [7C CC 8E, 05, 05]
+10393; [7C D4 8E, 05, 05]
-10394; [7C CC 95, 05, 05]
+10394; [7C D4 95, 05, 05]
-10395; [7C CC 9C, 05, 05]
+10395; [7C D4 9C, 05, 05]
-10396; [7C CC A3, 05, 05]
+10396; [7C D4 A3, 05, 05]
-10397; [7C CC AA, 05, 05]
+10397; [7C D4 AA, 05, 05]
-10398; [7C CC B1, 05, 05]
+10398; [7C D4 B1, 05, 05]
-10399; [7C CC B8, 05, 05]
+10399; [7C D4 B8, 05, 05]
-1039A; [7C CC BF, 05, 05]
+1039A; [7C D4 BF, 05, 05]
-1039B; [7C CC C6, 05, 05]
+1039B; [7C D4 C6, 05, 05]
-1039C; [7C CC CD, 05, 05]
+1039C; [7C D4 CD, 05, 05]
-1039D; [7C CC D4, 05, 05]
+1039D; [7C D4 D4, 05, 05]
-FDD1 103A0; [7C CD 02, 05, 05] # OLD_PERSIAN first primary (compressible)
+FDD1 103A0; [7C D5 02, 05, 05] # OLD_PERSIAN first primary (compressible)
-103A0; [7C CD 09, 05, 05]
+103A0; [7C D5 09, 05, 05]
-103A1; [7C CD 10, 05, 05]
+103A1; [7C D5 10, 05, 05]
-103A2; [7C CD 17, 05, 05]
+103A2; [7C D5 17, 05, 05]
-103A3; [7C CD 1E, 05, 05]
+103A3; [7C D5 1E, 05, 05]
-103A4; [7C CD 25, 05, 05]
+103A4; [7C D5 25, 05, 05]
-103A5; [7C CD 2C, 05, 05]
+103A5; [7C D5 2C, 05, 05]
-103A6; [7C CD 33, 05, 05]
+103A6; [7C D5 33, 05, 05]
-103A7; [7C CD 3A, 05, 05]
+103A7; [7C D5 3A, 05, 05]
-103A8; [7C CD 41, 05, 05]
+103A8; [7C D5 41, 05, 05]
-103A9; [7C CD 48, 05, 05]
+103A9; [7C D5 48, 05, 05]
-103AA; [7C CD 4F, 05, 05]
+103AA; [7C D5 4F, 05, 05]
-103AB; [7C CD 56, 05, 05]
+103AB; [7C D5 56, 05, 05]
-103AC; [7C CD 5D, 05, 05]
+103AC; [7C D5 5D, 05, 05]
-103AD; [7C CD 64, 05, 05]
+103AD; [7C D5 64, 05, 05]
-103AE; [7C CD 6B, 05, 05]
+103AE; [7C D5 6B, 05, 05]
-103AF; [7C CD 72, 05, 05]
+103AF; [7C D5 72, 05, 05]
-103B0; [7C CD 79, 05, 05]
+103B0; [7C D5 79, 05, 05]
-103B1; [7C CD 80, 05, 05]
+103B1; [7C D5 80, 05, 05]
-103B2; [7C CD 87, 05, 05]
+103B2; [7C D5 87, 05, 05]
-103B3; [7C CD 8E, 05, 05]
+103B3; [7C D5 8E, 05, 05]
-103B4; [7C CD 95, 05, 05]
+103B4; [7C D5 95, 05, 05]
-103B5; [7C CD 9C, 05, 05]
+103B5; [7C D5 9C, 05, 05]
-103B6; [7C CD A3, 05, 05]
+103B6; [7C D5 A3, 05, 05]
-103B7; [7C CD AA, 05, 05]
+103B7; [7C D5 AA, 05, 05]
-103B8; [7C CD B1, 05, 05]
+103B8; [7C D5 B1, 05, 05]
-103B9; [7C CD B8, 05, 05]
+103B9; [7C D5 B8, 05, 05]
-103BA; [7C CD BF, 05, 05]
+103BA; [7C D5 BF, 05, 05]
-103BB; [7C CD C6, 05, 05]
+103BB; [7C D5 C6, 05, 05]
-103BC; [7C CD CD, 05, 05]
+103BC; [7C D5 CD, 05, 05]
-103BD; [7C CD D4, 05, 05]
+103BD; [7C D5 D4, 05, 05]
-103BE; [7C CD DB, 05, 05]
+103BE; [7C D5 DB, 05, 05]
-103BF; [7C CD E2, 05, 05]
+103BF; [7C D5 E2, 05, 05]
-103C0; [7C CD E9, 05, 05]
+103C0; [7C D5 E9, 05, 05]
-103C1; [7C CD F0, 05, 05]
+103C1; [7C D5 F0, 05, 05]
-103C2; [7C CD F7, 05, 05]
+103C2; [7C D5 F7, 05, 05]
-103C3; [7C CD FE, 05, 05]
+103C3; [7C D5 FE, 05, 05]
-103C8; [7C CE 07, 05, 05]
+103C8; [7C D6 07, 05, 05]
-103C9; [7C CE 0E, 05, 05]
+103C9; [7C D6 0E, 05, 05]
-103CA; [7C CE 15, 05, 05]
+103CA; [7C D6 15, 05, 05]
-103CB; [7C CE 1C, 05, 05]
+103CB; [7C D6 1C, 05, 05]
-103CC; [7C CE 23, 05, 05]
+103CC; [7C D6 23, 05, 05]
-103CD; [7C CE 2A, 05, 05]
+103CD; [7C D6 2A, 05, 05]
-103CE; [7C CE 31, 05, 05]
+103CE; [7C D6 31, 05, 05]
-103CF; [7C CE 38, 05, 05]
+103CF; [7C D6 38, 05, 05]
-FDD1 12000; [7C CF 02, 05, 05] # Cuneiform first primary (compressible)
+FDD1 12000; [7C D7 02, 05, 05] # Cuneiform first primary (compressible)
-12000; [7C CF 09, 05, 05]
+12000; [7C D7 09, 05, 05]
-12001; [7C CF 10, 05, 05]
+12001; [7C D7 10, 05, 05]
-12002; [7C CF 17, 05, 05]
+12002; [7C D7 17, 05, 05]
-12003; [7C CF 1E, 05, 05]
+12003; [7C D7 1E, 05, 05]
-12004; [7C CF 25, 05, 05]
+12004; [7C D7 25, 05, 05]
-12005; [7C CF 2C, 05, 05]
+12005; [7C D7 2C, 05, 05]
-12006; [7C CF 33, 05, 05]
+12006; [7C D7 33, 05, 05]
-12007; [7C CF 3A, 05, 05]
+12007; [7C D7 3A, 05, 05]
-12008; [7C CF 41, 05, 05]
+12008; [7C D7 41, 05, 05]
-12009; [7C CF 48, 05, 05]
+12009; [7C D7 48, 05, 05]
-1200A; [7C CF 4F, 05, 05]
+1200A; [7C D7 4F, 05, 05]
-1200B; [7C CF 56, 05, 05]
+1200B; [7C D7 56, 05, 05]
-1200C; [7C CF 5D, 05, 05]
+1200C; [7C D7 5D, 05, 05]
-1200D; [7C CF 64, 05, 05]
+1200D; [7C D7 64, 05, 05]
-1200E; [7C CF 6B, 05, 05]
+1200E; [7C D7 6B, 05, 05]
-1200F; [7C CF 72, 05, 05]
+1200F; [7C D7 72, 05, 05]
-12010; [7C CF 79, 05, 05]
+12010; [7C D7 79, 05, 05]
-12011; [7C CF 80, 05, 05]
+12011; [7C D7 80, 05, 05]
-12012; [7C CF 87, 05, 05]
+12012; [7C D7 87, 05, 05]
-12013; [7C CF 8E, 05, 05]
+12013; [7C D7 8E, 05, 05]
-12014; [7C CF 95, 05, 05]
+12014; [7C D7 95, 05, 05]
-12015; [7C CF 9C, 05, 05]
+12015; [7C D7 9C, 05, 05]
-12016; [7C CF A3, 05, 05]
+12016; [7C D7 A3, 05, 05]
-12017; [7C CF AA, 05, 05]
+12017; [7C D7 AA, 05, 05]
-12018; [7C CF B1, 05, 05]
+12018; [7C D7 B1, 05, 05]
-12019; [7C CF B8, 05, 05]
+12019; [7C D7 B8, 05, 05]
-1201A; [7C CF BF, 05, 05]
+1201A; [7C D7 BF, 05, 05]
-1201B; [7C CF C6, 05, 05]
+1201B; [7C D7 C6, 05, 05]
-1201C; [7C CF CD, 05, 05]
+1201C; [7C D7 CD, 05, 05]
-1201D; [7C CF D4, 05, 05]
+1201D; [7C D7 D4, 05, 05]
-1201E; [7C CF DB, 05, 05]
+1201E; [7C D7 DB, 05, 05]
-1201F; [7C CF E2, 05, 05]
+1201F; [7C D7 E2, 05, 05]
-12020; [7C CF E9, 05, 05]
+12020; [7C D7 E9, 05, 05]
-12021; [7C CF F0, 05, 05]
+12021; [7C D7 F0, 05, 05]
-12022; [7C CF F7, 05, 05]
+12022; [7C D7 F7, 05, 05]
-12023; [7C CF FE, 05, 05]
+12023; [7C D7 FE, 05, 05]
-12024; [7C D0 07, 05, 05]
+12024; [7C D8 07, 05, 05]
-12025; [7C D0 0E, 05, 05]
+12025; [7C D8 0E, 05, 05]
-12026; [7C D0 15, 05, 05]
+12026; [7C D8 15, 05, 05]
-12027; [7C D0 1C, 05, 05]
+12027; [7C D8 1C, 05, 05]
-12028; [7C D0 23, 05, 05]
+12028; [7C D8 23, 05, 05]
-12029; [7C D0 2A, 05, 05]
+12029; [7C D8 2A, 05, 05]
-1202A; [7C D0 31, 05, 05]
+1202A; [7C D8 31, 05, 05]
-1202B; [7C D0 38, 05, 05]
+1202B; [7C D8 38, 05, 05]
-1202C; [7C D0 3F, 05, 05]
+1202C; [7C D8 3F, 05, 05]
-1202D; [7C D0 46, 05, 05]
+1202D; [7C D8 46, 05, 05]
-1202E; [7C D0 4D, 05, 05]
+1202E; [7C D8 4D, 05, 05]
-1202F; [7C D0 54, 05, 05]
+1202F; [7C D8 54, 05, 05]
-12030; [7C D0 5B, 05, 05]
+12030; [7C D8 5B, 05, 05]
-12031; [7C D0 62, 05, 05]
+12031; [7C D8 62, 05, 05]
-12032; [7C D0 69, 05, 05]
+12032; [7C D8 69, 05, 05]
-12033; [7C D0 70, 05, 05]
+12033; [7C D8 70, 05, 05]
-12034; [7C D0 77, 05, 05]
+12034; [7C D8 77, 05, 05]
-12035; [7C D0 7E, 05, 05]
+12035; [7C D8 7E, 05, 05]
-12036; [7C D0 85, 05, 05]
+12036; [7C D8 85, 05, 05]
-12037; [7C D0 8C, 05, 05]
+12037; [7C D8 8C, 05, 05]
-12038; [7C D0 93, 05, 05]
+12038; [7C D8 93, 05, 05]
-12039; [7C D0 9A, 05, 05]
+12039; [7C D8 9A, 05, 05]
-1203A; [7C D0 A1, 05, 05]
+1203A; [7C D8 A1, 05, 05]
-1203B; [7C D0 A8, 05, 05]
+1203B; [7C D8 A8, 05, 05]
-1203C; [7C D0 AF, 05, 05]
+1203C; [7C D8 AF, 05, 05]
-1203D; [7C D0 B6, 05, 05]
+1203D; [7C D8 B6, 05, 05]
-1203E; [7C D0 BD, 05, 05]
+1203E; [7C D8 BD, 05, 05]
-1203F; [7C D0 C4, 05, 05]
+1203F; [7C D8 C4, 05, 05]
-12040; [7C D0 CB, 05, 05]
+12040; [7C D8 CB, 05, 05]
-12041; [7C D0 D2, 05, 05]
+12041; [7C D8 D2, 05, 05]
-12042; [7C D0 D9, 05, 05]
+12042; [7C D8 D9, 05, 05]
-12043; [7C D0 E0, 05, 05]
+12043; [7C D8 E0, 05, 05]
-12044; [7C D0 E7, 05, 05]
+12044; [7C D8 E7, 05, 05]
-12045; [7C D0 EE, 05, 05]
+12045; [7C D8 EE, 05, 05]
-12046; [7C D0 F5, 05, 05]
+12046; [7C D8 F5, 05, 05]
-12047; [7C D0 FC, 05, 05]
+12047; [7C D8 FC, 05, 05]
-12048; [7C D1 05, 05, 05]
+12048; [7C D9 05, 05, 05]
-12049; [7C D1 0C, 05, 05]
+12049; [7C D9 0C, 05, 05]
-1204A; [7C D1 13, 05, 05]
+1204A; [7C D9 13, 05, 05]
-1204B; [7C D1 1A, 05, 05]
+1204B; [7C D9 1A, 05, 05]
-1204C; [7C D1 21, 05, 05]
+1204C; [7C D9 21, 05, 05]
-1204D; [7C D1 28, 05, 05]
+1204D; [7C D9 28, 05, 05]
-1204E; [7C D1 2F, 05, 05]
+1204E; [7C D9 2F, 05, 05]
-1204F; [7C D1 36, 05, 05]
+1204F; [7C D9 36, 05, 05]
-12050; [7C D1 3D, 05, 05]
+12050; [7C D9 3D, 05, 05]
-12051; [7C D1 44, 05, 05]
+12051; [7C D9 44, 05, 05]
-12052; [7C D1 4B, 05, 05]
+12052; [7C D9 4B, 05, 05]
-12053; [7C D1 52, 05, 05]
+12053; [7C D9 52, 05, 05]
-12054; [7C D1 59, 05, 05]
+12054; [7C D9 59, 05, 05]
-12055; [7C D1 60, 05, 05]
+12055; [7C D9 60, 05, 05]
-12056; [7C D1 67, 05, 05]
+12056; [7C D9 67, 05, 05]
-12057; [7C D1 6E, 05, 05]
+12057; [7C D9 6E, 05, 05]
-12058; [7C D1 75, 05, 05]
+12058; [7C D9 75, 05, 05]
-12059; [7C D1 7C, 05, 05]
+12059; [7C D9 7C, 05, 05]
-1205A; [7C D1 83, 05, 05]
+1205A; [7C D9 83, 05, 05]
-1205B; [7C D1 8A, 05, 05]
+1205B; [7C D9 8A, 05, 05]
-1205C; [7C D1 91, 05, 05]
+1205C; [7C D9 91, 05, 05]
-1205D; [7C D1 98, 05, 05]
+1205D; [7C D9 98, 05, 05]
-1205E; [7C D1 9F, 05, 05]
+1205E; [7C D9 9F, 05, 05]
-1205F; [7C D1 A6, 05, 05]
+1205F; [7C D9 A6, 05, 05]
-12060; [7C D1 AD, 05, 05]
+12060; [7C D9 AD, 05, 05]
-12061; [7C D1 B4, 05, 05]
+12061; [7C D9 B4, 05, 05]
-12062; [7C D1 BB, 05, 05]
+12062; [7C D9 BB, 05, 05]
-12063; [7C D1 C2, 05, 05]
+12063; [7C D9 C2, 05, 05]
-12064; [7C D1 C9, 05, 05]
+12064; [7C D9 C9, 05, 05]
-12065; [7C D1 D0, 05, 05]
+12065; [7C D9 D0, 05, 05]
-12066; [7C D1 D7, 05, 05]
+12066; [7C D9 D7, 05, 05]
-12067; [7C D1 DE, 05, 05]
+12067; [7C D9 DE, 05, 05]
-12068; [7C D1 E5, 05, 05]
+12068; [7C D9 E5, 05, 05]
-12069; [7C D1 EC, 05, 05]
+12069; [7C D9 EC, 05, 05]
-1206A; [7C D1 F3, 05, 05]
+1206A; [7C D9 F3, 05, 05]
-1206B; [7C D1 FA, 05, 05]
+1206B; [7C D9 FA, 05, 05]
-1206C; [7C D2 03, 05, 05]
+1206C; [7C DA 03, 05, 05]
-1206D; [7C D2 0A, 05, 05]
+1206D; [7C DA 0A, 05, 05]
-1206E; [7C D2 11, 05, 05]
+1206E; [7C DA 11, 05, 05]
-1206F; [7C D2 18, 05, 05]
+1206F; [7C DA 18, 05, 05]
-12070; [7C D2 1F, 05, 05]
+12070; [7C DA 1F, 05, 05]
-12071; [7C D2 26, 05, 05]
+12071; [7C DA 26, 05, 05]
-12072; [7C D2 2D, 05, 05]
+12072; [7C DA 2D, 05, 05]
-12073; [7C D2 34, 05, 05]
+12073; [7C DA 34, 05, 05]
-12074; [7C D2 3B, 05, 05]
+12074; [7C DA 3B, 05, 05]
-12075; [7C D2 42, 05, 05]
+12075; [7C DA 42, 05, 05]
-12076; [7C D2 49, 05, 05]
+12076; [7C DA 49, 05, 05]
-12077; [7C D2 50, 05, 05]
+12077; [7C DA 50, 05, 05]
-12078; [7C D2 57, 05, 05]
+12078; [7C DA 57, 05, 05]
-12079; [7C D2 5E, 05, 05]
+12079; [7C DA 5E, 05, 05]
-1207A; [7C D2 65, 05, 05]
+1207A; [7C DA 65, 05, 05]
-1207B; [7C D2 6C, 05, 05]
+1207B; [7C DA 6C, 05, 05]
-1207C; [7C D2 73, 05, 05]
+1207C; [7C DA 73, 05, 05]
-1207D; [7C D2 7A, 05, 05]
+1207D; [7C DA 7A, 05, 05]
-1207E; [7C D2 81, 05, 05]
+1207E; [7C DA 81, 05, 05]
-1207F; [7C D2 88, 05, 05]
+1207F; [7C DA 88, 05, 05]
-12080; [7C D2 8F, 05, 05]
+12080; [7C DA 8F, 05, 05]
-12081; [7C D2 96, 05, 05]
+12081; [7C DA 96, 05, 05]
-12082; [7C D2 9D, 05, 05]
+12082; [7C DA 9D, 05, 05]
-12083; [7C D2 A4, 05, 05]
+12083; [7C DA A4, 05, 05]
-12084; [7C D2 AB, 05, 05]
+12084; [7C DA AB, 05, 05]
-12085; [7C D2 B2, 05, 05]
+12085; [7C DA B2, 05, 05]
-12086; [7C D2 B9, 05, 05]
+12086; [7C DA B9, 05, 05]
-12087; [7C D2 C0, 05, 05]
+12087; [7C DA C0, 05, 05]
-12088; [7C D2 C7, 05, 05]
+12088; [7C DA C7, 05, 05]
-12089; [7C D2 CE, 05, 05]
+12089; [7C DA CE, 05, 05]
-1208A; [7C D2 D5, 05, 05]
+1208A; [7C DA D5, 05, 05]
-1208B; [7C D2 DC, 05, 05]
+1208B; [7C DA DC, 05, 05]
-1208C; [7C D2 E3, 05, 05]
+1208C; [7C DA E3, 05, 05]
-1208D; [7C D2 EA, 05, 05]
+1208D; [7C DA EA, 05, 05]
-1208E; [7C D2 F1, 05, 05]
+1208E; [7C DA F1, 05, 05]
-1208F; [7C D2 F8, 05, 05]
+1208F; [7C DA F8, 05, 05]
-12090; [7C D2 FF, 05, 05]
+12090; [7C DA FF, 05, 05]
-12091; [7C D3 08, 05, 05]
+12091; [7C DB 08, 05, 05]
-12092; [7C D3 0F, 05, 05]
+12092; [7C DB 0F, 05, 05]
-12093; [7C D3 16, 05, 05]
+12093; [7C DB 16, 05, 05]
-12094; [7C D3 1D, 05, 05]
+12094; [7C DB 1D, 05, 05]
-12095; [7C D3 24, 05, 05]
+12095; [7C DB 24, 05, 05]
-12096; [7C D3 2B, 05, 05]
+12096; [7C DB 2B, 05, 05]
-12097; [7C D3 32, 05, 05]
+12097; [7C DB 32, 05, 05]
-12098; [7C D3 39, 05, 05]
+12098; [7C DB 39, 05, 05]
-12099; [7C D3 40, 05, 05]
+12099; [7C DB 40, 05, 05]
-1209A; [7C D3 47, 05, 05]
+1209A; [7C DB 47, 05, 05]
-1209B; [7C D3 4E, 05, 05]
+1209B; [7C DB 4E, 05, 05]
-1209C; [7C D3 55, 05, 05]
+1209C; [7C DB 55, 05, 05]
-1209D; [7C D3 5C, 05, 05]
+1209D; [7C DB 5C, 05, 05]
-1209E; [7C D3 63, 05, 05]
+1209E; [7C DB 63, 05, 05]
-1209F; [7C D3 6A, 05, 05]
+1209F; [7C DB 6A, 05, 05]
-120A0; [7C D3 71, 05, 05]
+120A0; [7C DB 71, 05, 05]
-120A1; [7C D3 78, 05, 05]
+120A1; [7C DB 78, 05, 05]
-120A2; [7C D3 7F, 05, 05]
+120A2; [7C DB 7F, 05, 05]
-120A3; [7C D3 86, 05, 05]
+120A3; [7C DB 86, 05, 05]
-120A4; [7C D3 8D, 05, 05]
+120A4; [7C DB 8D, 05, 05]
-120A5; [7C D3 94, 05, 05]
+120A5; [7C DB 94, 05, 05]
-120A6; [7C D3 9B, 05, 05]
+120A6; [7C DB 9B, 05, 05]
-120A7; [7C D3 A2, 05, 05]
+120A7; [7C DB A2, 05, 05]
-120A8; [7C D3 A9, 05, 05]
+120A8; [7C DB A9, 05, 05]
-120A9; [7C D3 B0, 05, 05]
+120A9; [7C DB B0, 05, 05]
-120AA; [7C D3 B7, 05, 05]
+120AA; [7C DB B7, 05, 05]
-120AB; [7C D3 BE, 05, 05]
+120AB; [7C DB BE, 05, 05]
-120AC; [7C D3 C5, 05, 05]
+120AC; [7C DB C5, 05, 05]
-120AD; [7C D3 CC, 05, 05]
+120AD; [7C DB CC, 05, 05]
-120AE; [7C D3 D3, 05, 05]
+120AE; [7C DB D3, 05, 05]
-120AF; [7C D3 DA, 05, 05]
+120AF; [7C DB DA, 05, 05]
-120B0; [7C D3 E1, 05, 05]
+120B0; [7C DB E1, 05, 05]
-120B1; [7C D3 E8, 05, 05]
+120B1; [7C DB E8, 05, 05]
-120B2; [7C D3 EF, 05, 05]
+120B2; [7C DB EF, 05, 05]
-120B3; [7C D3 F6, 05, 05]
+120B3; [7C DB F6, 05, 05]
-120B4; [7C D3 FD, 05, 05]
+120B4; [7C DB FD, 05, 05]
-120B5; [7C D4 06, 05, 05]
+120B5; [7C DC 06, 05, 05]
-120B6; [7C D4 0D, 05, 05]
+120B6; [7C DC 0D, 05, 05]
-120B7; [7C D4 14, 05, 05]
+120B7; [7C DC 14, 05, 05]
-120B8; [7C D4 1B, 05, 05]
+120B8; [7C DC 1B, 05, 05]
-120B9; [7C D4 22, 05, 05]
+120B9; [7C DC 22, 05, 05]
-120BA; [7C D4 29, 05, 05]
+120BA; [7C DC 29, 05, 05]
-120BB; [7C D4 30, 05, 05]
+120BB; [7C DC 30, 05, 05]
-120BC; [7C D4 37, 05, 05]
+120BC; [7C DC 37, 05, 05]
-120BD; [7C D4 3E, 05, 05]
+120BD; [7C DC 3E, 05, 05]
-120BE; [7C D4 45, 05, 05]
+120BE; [7C DC 45, 05, 05]
-120BF; [7C D4 4C, 05, 05]
+120BF; [7C DC 4C, 05, 05]
-120C0; [7C D4 53, 05, 05]
+120C0; [7C DC 53, 05, 05]
-120C1; [7C D4 5A, 05, 05]
+120C1; [7C DC 5A, 05, 05]
-120C2; [7C D4 61, 05, 05]
+120C2; [7C DC 61, 05, 05]
-120C3; [7C D4 68, 05, 05]
+120C3; [7C DC 68, 05, 05]
-120C4; [7C D4 6F, 05, 05]
+120C4; [7C DC 6F, 05, 05]
-120C5; [7C D4 76, 05, 05]
+120C5; [7C DC 76, 05, 05]
-120C6; [7C D4 7D, 05, 05]
+120C6; [7C DC 7D, 05, 05]
-120C7; [7C D4 84, 05, 05]
+120C7; [7C DC 84, 05, 05]
-120C8; [7C D4 8B, 05, 05]
+120C8; [7C DC 8B, 05, 05]
-120C9; [7C D4 92, 05, 05]
+120C9; [7C DC 92, 05, 05]
-120CA; [7C D4 99, 05, 05]
+120CA; [7C DC 99, 05, 05]
-120CB; [7C D4 A0, 05, 05]
+120CB; [7C DC A0, 05, 05]
-120CC; [7C D4 A7, 05, 05]
+120CC; [7C DC A7, 05, 05]
-120CD; [7C D4 AE, 05, 05]
+120CD; [7C DC AE, 05, 05]
-120CE; [7C D4 B5, 05, 05]
+120CE; [7C DC B5, 05, 05]
-120CF; [7C D4 BC, 05, 05]
+120CF; [7C DC BC, 05, 05]
-120D0; [7C D4 C3, 05, 05]
+120D0; [7C DC C3, 05, 05]
-120D1; [7C D4 CA, 05, 05]
+120D1; [7C DC CA, 05, 05]
-120D2; [7C D4 D1, 05, 05]
+120D2; [7C DC D1, 05, 05]
-120D3; [7C D4 D8, 05, 05]
+120D3; [7C DC D8, 05, 05]
-120D4; [7C D4 DF, 05, 05]
+120D4; [7C DC DF, 05, 05]
-120D5; [7C D4 E6, 05, 05]
+120D5; [7C DC E6, 05, 05]
-120D6; [7C D4 ED, 05, 05]
+120D6; [7C DC ED, 05, 05]
-120D7; [7C D4 F4, 05, 05]
+120D7; [7C DC F4, 05, 05]
-120D8; [7C D4 FB, 05, 05]
+120D8; [7C DC FB, 05, 05]
-120D9; [7C D5 04, 05, 05]
+120D9; [7C DD 04, 05, 05]
-120DA; [7C D5 0B, 05, 05]
+120DA; [7C DD 0B, 05, 05]
-120DB; [7C D5 12, 05, 05]
+120DB; [7C DD 12, 05, 05]
-120DC; [7C D5 19, 05, 05]
+120DC; [7C DD 19, 05, 05]
-120DD; [7C D5 20, 05, 05]
+120DD; [7C DD 20, 05, 05]
-120DE; [7C D5 27, 05, 05]
+120DE; [7C DD 27, 05, 05]
-120DF; [7C D5 2E, 05, 05]
+120DF; [7C DD 2E, 05, 05]
-120E0; [7C D5 35, 05, 05]
+120E0; [7C DD 35, 05, 05]
-120E1; [7C D5 3C, 05, 05]
+120E1; [7C DD 3C, 05, 05]
-120E2; [7C D5 43, 05, 05]
+120E2; [7C DD 43, 05, 05]
-120E3; [7C D5 4A, 05, 05]
+120E3; [7C DD 4A, 05, 05]
-120E4; [7C D5 51, 05, 05]
+120E4; [7C DD 51, 05, 05]
-120E5; [7C D5 58, 05, 05]
+120E5; [7C DD 58, 05, 05]
-120E6; [7C D5 5F, 05, 05]
+120E6; [7C DD 5F, 05, 05]
-120E7; [7C D5 66, 05, 05]
+120E7; [7C DD 66, 05, 05]
-120E8; [7C D5 6D, 05, 05]
+120E8; [7C DD 6D, 05, 05]
-120E9; [7C D5 74, 05, 05]
+120E9; [7C DD 74, 05, 05]
-120EA; [7C D5 7B, 05, 05]
+120EA; [7C DD 7B, 05, 05]
-120EB; [7C D5 82, 05, 05]
+120EB; [7C DD 82, 05, 05]
-120EC; [7C D5 89, 05, 05]
+120EC; [7C DD 89, 05, 05]
-120ED; [7C D5 90, 05, 05]
+120ED; [7C DD 90, 05, 05]
-120EE; [7C D5 97, 05, 05]
+120EE; [7C DD 97, 05, 05]
-120EF; [7C D5 9E, 05, 05]
+120EF; [7C DD 9E, 05, 05]
-120F0; [7C D5 A5, 05, 05]
+120F0; [7C DD A5, 05, 05]
-120F1; [7C D5 AC, 05, 05]
+120F1; [7C DD AC, 05, 05]
-120F2; [7C D5 B3, 05, 05]
+120F2; [7C DD B3, 05, 05]
-120F3; [7C D5 BA, 05, 05]
+120F3; [7C DD BA, 05, 05]
-120F4; [7C D5 C1, 05, 05]
+120F4; [7C DD C1, 05, 05]
-120F5; [7C D5 C8, 05, 05]
+120F5; [7C DD C8, 05, 05]
-120F6; [7C D5 CF, 05, 05]
+120F6; [7C DD CF, 05, 05]
-120F7; [7C D5 D6, 05, 05]
+120F7; [7C DD D6, 05, 05]
-120F8; [7C D5 DD, 05, 05]
+120F8; [7C DD DD, 05, 05]
-120F9; [7C D5 E4, 05, 05]
+120F9; [7C DD E4, 05, 05]
-120FA; [7C D5 EB, 05, 05]
+120FA; [7C DD EB, 05, 05]
-120FB; [7C D5 F2, 05, 05]
+120FB; [7C DD F2, 05, 05]
-120FC; [7C D5 F9, 05, 05]
+120FC; [7C DD F9, 05, 05]
-120FD; [7C D6 02, 05, 05]
+120FD; [7C DE 02, 05, 05]
-120FE; [7C D6 09, 05, 05]
+120FE; [7C DE 09, 05, 05]
-120FF; [7C D6 10, 05, 05]
+120FF; [7C DE 10, 05, 05]
-12100; [7C D6 17, 05, 05]
+12100; [7C DE 17, 05, 05]
-12101; [7C D6 1E, 05, 05]
+12101; [7C DE 1E, 05, 05]
-12102; [7C D6 25, 05, 05]
+12102; [7C DE 25, 05, 05]
-12103; [7C D6 2C, 05, 05]
+12103; [7C DE 2C, 05, 05]
-12104; [7C D6 33, 05, 05]
+12104; [7C DE 33, 05, 05]
-12105; [7C D6 3A, 05, 05]
+12105; [7C DE 3A, 05, 05]
-12106; [7C D6 41, 05, 05]
+12106; [7C DE 41, 05, 05]
-12107; [7C D6 48, 05, 05]
+12107; [7C DE 48, 05, 05]
-12108; [7C D6 4F, 05, 05]
+12108; [7C DE 4F, 05, 05]
-12109; [7C D6 56, 05, 05]
+12109; [7C DE 56, 05, 05]
-1210A; [7C D6 5D, 05, 05]
+1210A; [7C DE 5D, 05, 05]
-1210B; [7C D6 64, 05, 05]
+1210B; [7C DE 64, 05, 05]
-1210C; [7C D6 6B, 05, 05]
+1210C; [7C DE 6B, 05, 05]
-1210D; [7C D6 72, 05, 05]
+1210D; [7C DE 72, 05, 05]
-1210E; [7C D6 79, 05, 05]
+1210E; [7C DE 79, 05, 05]
-1210F; [7C D6 80, 05, 05]
+1210F; [7C DE 80, 05, 05]
-12110; [7C D6 87, 05, 05]
+12110; [7C DE 87, 05, 05]
-12111; [7C D6 8E, 05, 05]
+12111; [7C DE 8E, 05, 05]
-12112; [7C D6 95, 05, 05]
+12112; [7C DE 95, 05, 05]
-12113; [7C D6 9C, 05, 05]
+12113; [7C DE 9C, 05, 05]
-12114; [7C D6 A3, 05, 05]
+12114; [7C DE A3, 05, 05]
-12115; [7C D6 AA, 05, 05]
+12115; [7C DE AA, 05, 05]
-12116; [7C D6 B1, 05, 05]
+12116; [7C DE B1, 05, 05]
-12117; [7C D6 B8, 05, 05]
+12117; [7C DE B8, 05, 05]
-12118; [7C D6 BF, 05, 05]
+12118; [7C DE BF, 05, 05]
-12119; [7C D6 C6, 05, 05]
+12119; [7C DE C6, 05, 05]
-1211A; [7C D6 CD, 05, 05]
+1211A; [7C DE CD, 05, 05]
-1211B; [7C D6 D4, 05, 05]
+1211B; [7C DE D4, 05, 05]
-1211C; [7C D6 DB, 05, 05]
+1211C; [7C DE DB, 05, 05]
-1211D; [7C D6 E2, 05, 05]
+1211D; [7C DE E2, 05, 05]
-1211E; [7C D6 E9, 05, 05]
+1211E; [7C DE E9, 05, 05]
-1211F; [7C D6 F0, 05, 05]
+1211F; [7C DE F0, 05, 05]
-12120; [7C D6 F7, 05, 05]
+12120; [7C DE F7, 05, 05]
-12121; [7C D6 FE, 05, 05]
+12121; [7C DE FE, 05, 05]
-12122; [7C D7 07, 05, 05]
+12122; [7C DF 07, 05, 05]
-12123; [7C D7 0E, 05, 05]
+12123; [7C DF 0E, 05, 05]
-12124; [7C D7 15, 05, 05]
+12124; [7C DF 15, 05, 05]
-12125; [7C D7 1C, 05, 05]
+12125; [7C DF 1C, 05, 05]
-12126; [7C D7 23, 05, 05]
+12126; [7C DF 23, 05, 05]
-12127; [7C D7 2A, 05, 05]
+12127; [7C DF 2A, 05, 05]
-12128; [7C D7 31, 05, 05]
+12128; [7C DF 31, 05, 05]
-12129; [7C D7 38, 05, 05]
+12129; [7C DF 38, 05, 05]
-1212A; [7C D7 3F, 05, 05]
+1212A; [7C DF 3F, 05, 05]
-1212B; [7C D7 46, 05, 05]
+1212B; [7C DF 46, 05, 05]
-1212C; [7C D7 4D, 05, 05]
+1212C; [7C DF 4D, 05, 05]
-1212D; [7C D7 54, 05, 05]
+1212D; [7C DF 54, 05, 05]
-1212E; [7C D7 5B, 05, 05]
+1212E; [7C DF 5B, 05, 05]
-1212F; [7C D7 62, 05, 05]
+1212F; [7C DF 62, 05, 05]
-12130; [7C D7 69, 05, 05]
+12130; [7C DF 69, 05, 05]
-12131; [7C D7 70, 05, 05]
+12131; [7C DF 70, 05, 05]
-12132; [7C D7 77, 05, 05]
+12132; [7C DF 77, 05, 05]
-12133; [7C D7 7E, 05, 05]
+12133; [7C DF 7E, 05, 05]
-12134; [7C D7 85, 05, 05]
+12134; [7C DF 85, 05, 05]
-12135; [7C D7 8C, 05, 05]
+12135; [7C DF 8C, 05, 05]
-12136; [7C D7 93, 05, 05]
+12136; [7C DF 93, 05, 05]
-12137; [7C D7 9A, 05, 05]
+12137; [7C DF 9A, 05, 05]
-12138; [7C D7 A1, 05, 05]
+12138; [7C DF A1, 05, 05]
-12139; [7C D7 A8, 05, 05]
+12139; [7C DF A8, 05, 05]
-1213A; [7C D7 AF, 05, 05]
+1213A; [7C DF AF, 05, 05]
-1213B; [7C D7 B6, 05, 05]
+1213B; [7C DF B6, 05, 05]
-1213C; [7C D7 BD, 05, 05]
+1213C; [7C DF BD, 05, 05]
-1213D; [7C D7 C4, 05, 05]
+1213D; [7C DF C4, 05, 05]
-1213E; [7C D7 CB, 05, 05]
+1213E; [7C DF CB, 05, 05]
-1213F; [7C D7 D2, 05, 05]
+1213F; [7C DF D2, 05, 05]
-12140; [7C D7 D9, 05, 05]
+12140; [7C DF D9, 05, 05]
-12141; [7C D7 E0, 05, 05]
+12141; [7C DF E0, 05, 05]
-12142; [7C D7 E7, 05, 05]
+12142; [7C DF E7, 05, 05]
-12143; [7C D7 EE, 05, 05]
+12143; [7C DF EE, 05, 05]
-12144; [7C D7 F5, 05, 05]
+12144; [7C DF F5, 05, 05]
-12145; [7C D7 FC, 05, 05]
+12145; [7C DF FC, 05, 05]
-12146; [7C D8 05, 05, 05]
+12146; [7C E0 05, 05, 05]
-12147; [7C D8 0C, 05, 05]
+12147; [7C E0 0C, 05, 05]
-12148; [7C D8 13, 05, 05]
+12148; [7C E0 13, 05, 05]
-12149; [7C D8 1A, 05, 05]
+12149; [7C E0 1A, 05, 05]
-1214A; [7C D8 21, 05, 05]
+1214A; [7C E0 21, 05, 05]
-1214B; [7C D8 28, 05, 05]
+1214B; [7C E0 28, 05, 05]
-1214C; [7C D8 2F, 05, 05]
+1214C; [7C E0 2F, 05, 05]
-1214D; [7C D8 36, 05, 05]
+1214D; [7C E0 36, 05, 05]
-1214E; [7C D8 3D, 05, 05]
+1214E; [7C E0 3D, 05, 05]
-1214F; [7C D8 44, 05, 05]
+1214F; [7C E0 44, 05, 05]
-12150; [7C D8 4B, 05, 05]
+12150; [7C E0 4B, 05, 05]
-12151; [7C D8 52, 05, 05]
+12151; [7C E0 52, 05, 05]
-12152; [7C D8 59, 05, 05]
+12152; [7C E0 59, 05, 05]
-12153; [7C D8 60, 05, 05]
+12153; [7C E0 60, 05, 05]
-12154; [7C D8 67, 05, 05]
+12154; [7C E0 67, 05, 05]
-12155; [7C D8 6E, 05, 05]
+12155; [7C E0 6E, 05, 05]
-12156; [7C D8 75, 05, 05]
+12156; [7C E0 75, 05, 05]
-12157; [7C D8 7C, 05, 05]
+12157; [7C E0 7C, 05, 05]
-12158; [7C D8 83, 05, 05]
+12158; [7C E0 83, 05, 05]
-12159; [7C D8 8A, 05, 05]
+12159; [7C E0 8A, 05, 05]
-1215A; [7C D8 91, 05, 05]
+1215A; [7C E0 91, 05, 05]
-1215B; [7C D8 98, 05, 05]
+1215B; [7C E0 98, 05, 05]
-1215C; [7C D8 9F, 05, 05]
+1215C; [7C E0 9F, 05, 05]
-1215D; [7C D8 A6, 05, 05]
+1215D; [7C E0 A6, 05, 05]
-1215E; [7C D8 AD, 05, 05]
+1215E; [7C E0 AD, 05, 05]
-1215F; [7C D8 B4, 05, 05]
+1215F; [7C E0 B4, 05, 05]
-12160; [7C D8 BB, 05, 05]
+12160; [7C E0 BB, 05, 05]
-12161; [7C D8 C2, 05, 05]
+12161; [7C E0 C2, 05, 05]
-12162; [7C D8 C9, 05, 05]
+12162; [7C E0 C9, 05, 05]
-12163; [7C D8 D0, 05, 05]
+12163; [7C E0 D0, 05, 05]
-12164; [7C D8 D7, 05, 05]
+12164; [7C E0 D7, 05, 05]
-12165; [7C D8 DE, 05, 05]
+12165; [7C E0 DE, 05, 05]
-12166; [7C D8 E5, 05, 05]
+12166; [7C E0 E5, 05, 05]
-12167; [7C D8 EC, 05, 05]
+12167; [7C E0 EC, 05, 05]
-12168; [7C D8 F3, 05, 05]
+12168; [7C E0 F3, 05, 05]
-12169; [7C D8 FA, 05, 05]
+12169; [7C E0 FA, 05, 05]
-1216A; [7C D9 03, 05, 05]
+1216A; [7C E1 03, 05, 05]
-1216B; [7C D9 0A, 05, 05]
+1216B; [7C E1 0A, 05, 05]
-1216C; [7C D9 11, 05, 05]
+1216C; [7C E1 11, 05, 05]
-1216D; [7C D9 18, 05, 05]
+1216D; [7C E1 18, 05, 05]
-1216E; [7C D9 1F, 05, 05]
+1216E; [7C E1 1F, 05, 05]
-1216F; [7C D9 26, 05, 05]
+1216F; [7C E1 26, 05, 05]
-12170; [7C D9 2D, 05, 05]
+12170; [7C E1 2D, 05, 05]
-12171; [7C D9 34, 05, 05]
+12171; [7C E1 34, 05, 05]
-12172; [7C D9 3B, 05, 05]
+12172; [7C E1 3B, 05, 05]
-12173; [7C D9 42, 05, 05]
+12173; [7C E1 42, 05, 05]
-12174; [7C D9 49, 05, 05]
+12174; [7C E1 49, 05, 05]
-12175; [7C D9 50, 05, 05]
+12175; [7C E1 50, 05, 05]
-12176; [7C D9 57, 05, 05]
+12176; [7C E1 57, 05, 05]
-12177; [7C D9 5E, 05, 05]
+12177; [7C E1 5E, 05, 05]
-12178; [7C D9 65, 05, 05]
+12178; [7C E1 65, 05, 05]
-12179; [7C D9 6C, 05, 05]
+12179; [7C E1 6C, 05, 05]
-1217A; [7C D9 73, 05, 05]
+1217A; [7C E1 73, 05, 05]
-1217B; [7C D9 7A, 05, 05]
+1217B; [7C E1 7A, 05, 05]
-1217C; [7C D9 81, 05, 05]
+1217C; [7C E1 81, 05, 05]
-1217D; [7C D9 88, 05, 05]
+1217D; [7C E1 88, 05, 05]
-1217E; [7C D9 8F, 05, 05]
+1217E; [7C E1 8F, 05, 05]
-1217F; [7C D9 96, 05, 05]
+1217F; [7C E1 96, 05, 05]
-12180; [7C D9 9D, 05, 05]
+12180; [7C E1 9D, 05, 05]
-12181; [7C D9 A4, 05, 05]
+12181; [7C E1 A4, 05, 05]
-12182; [7C D9 AB, 05, 05]
+12182; [7C E1 AB, 05, 05]
-12183; [7C D9 B2, 05, 05]
+12183; [7C E1 B2, 05, 05]
-12184; [7C D9 B9, 05, 05]
+12184; [7C E1 B9, 05, 05]
-12185; [7C D9 C0, 05, 05]
+12185; [7C E1 C0, 05, 05]
-12186; [7C D9 C7, 05, 05]
+12186; [7C E1 C7, 05, 05]
-12187; [7C D9 CE, 05, 05]
+12187; [7C E1 CE, 05, 05]
-12188; [7C D9 D5, 05, 05]
+12188; [7C E1 D5, 05, 05]
-12189; [7C D9 DC, 05, 05]
+12189; [7C E1 DC, 05, 05]
-1218A; [7C D9 E3, 05, 05]
+1218A; [7C E1 E3, 05, 05]
-1218B; [7C D9 EA, 05, 05]
+1218B; [7C E1 EA, 05, 05]
-1218C; [7C D9 F1, 05, 05]
+1218C; [7C E1 F1, 05, 05]
-1218D; [7C D9 F8, 05, 05]
+1218D; [7C E1 F8, 05, 05]
-1218E; [7C D9 FF, 05, 05]
+1218E; [7C E1 FF, 05, 05]
-1218F; [7C DA 08, 05, 05]
+1218F; [7C E2 08, 05, 05]
-12190; [7C DA 0F, 05, 05]
+12190; [7C E2 0F, 05, 05]
-12191; [7C DA 16, 05, 05]
+12191; [7C E2 16, 05, 05]
-12192; [7C DA 1D, 05, 05]
+12192; [7C E2 1D, 05, 05]
-12193; [7C DA 24, 05, 05]
+12193; [7C E2 24, 05, 05]
-12194; [7C DA 2B, 05, 05]
+12194; [7C E2 2B, 05, 05]
-12195; [7C DA 32, 05, 05]
+12195; [7C E2 32, 05, 05]
-12196; [7C DA 39, 05, 05]
+12196; [7C E2 39, 05, 05]
-12197; [7C DA 40, 05, 05]
+12197; [7C E2 40, 05, 05]
-12198; [7C DA 47, 05, 05]
+12198; [7C E2 47, 05, 05]
-12199; [7C DA 4E, 05, 05]
+12199; [7C E2 4E, 05, 05]
-1219A; [7C DA 55, 05, 05]
+1219A; [7C E2 55, 05, 05]
-1219B; [7C DA 5C, 05, 05]
+1219B; [7C E2 5C, 05, 05]
-1219C; [7C DA 63, 05, 05]
+1219C; [7C E2 63, 05, 05]
-1219D; [7C DA 6A, 05, 05]
+1219D; [7C E2 6A, 05, 05]
-1219E; [7C DA 71, 05, 05]
+1219E; [7C E2 71, 05, 05]
-1219F; [7C DA 78, 05, 05]
+1219F; [7C E2 78, 05, 05]
-121A0; [7C DA 7F, 05, 05]
+121A0; [7C E2 7F, 05, 05]
-121A1; [7C DA 86, 05, 05]
+121A1; [7C E2 86, 05, 05]
-121A2; [7C DA 8D, 05, 05]
+121A2; [7C E2 8D, 05, 05]
-121A3; [7C DA 94, 05, 05]
+121A3; [7C E2 94, 05, 05]
-121A4; [7C DA 9B, 05, 05]
+121A4; [7C E2 9B, 05, 05]
-121A5; [7C DA A2, 05, 05]
+121A5; [7C E2 A2, 05, 05]
-121A6; [7C DA A9, 05, 05]
+121A6; [7C E2 A9, 05, 05]
-121A7; [7C DA B0, 05, 05]
+121A7; [7C E2 B0, 05, 05]
-121A8; [7C DA B7, 05, 05]
+121A8; [7C E2 B7, 05, 05]
-121A9; [7C DA BE, 05, 05]
+121A9; [7C E2 BE, 05, 05]
-121AA; [7C DA C5, 05, 05]
+121AA; [7C E2 C5, 05, 05]
-121AB; [7C DA CC, 05, 05]
+121AB; [7C E2 CC, 05, 05]
-121AC; [7C DA D3, 05, 05]
+121AC; [7C E2 D3, 05, 05]
-121AD; [7C DA DA, 05, 05]
+121AD; [7C E2 DA, 05, 05]
-121AE; [7C DA E1, 05, 05]
+121AE; [7C E2 E1, 05, 05]
-121AF; [7C DA E8, 05, 05]
+121AF; [7C E2 E8, 05, 05]
-121B0; [7C DA EF, 05, 05]
+121B0; [7C E2 EF, 05, 05]
-121B1; [7C DA F6, 05, 05]
+121B1; [7C E2 F6, 05, 05]
-121B2; [7C DA FD, 05, 05]
+121B2; [7C E2 FD, 05, 05]
-121B3; [7C DB 06, 05, 05]
+121B3; [7C E3 06, 05, 05]
-121B4; [7C DB 0D, 05, 05]
+121B4; [7C E3 0D, 05, 05]
-121B5; [7C DB 14, 05, 05]
+121B5; [7C E3 14, 05, 05]
-121B6; [7C DB 1B, 05, 05]
+121B6; [7C E3 1B, 05, 05]
-121B7; [7C DB 22, 05, 05]
+121B7; [7C E3 22, 05, 05]
-121B8; [7C DB 29, 05, 05]
+121B8; [7C E3 29, 05, 05]
-121B9; [7C DB 30, 05, 05]
+121B9; [7C E3 30, 05, 05]
-121BA; [7C DB 37, 05, 05]
+121BA; [7C E3 37, 05, 05]
-121BB; [7C DB 3E, 05, 05]
+121BB; [7C E3 3E, 05, 05]
-121BC; [7C DB 45, 05, 05]
+121BC; [7C E3 45, 05, 05]
-121BD; [7C DB 4C, 05, 05]
+121BD; [7C E3 4C, 05, 05]
-121BE; [7C DB 53, 05, 05]
+121BE; [7C E3 53, 05, 05]
-121BF; [7C DB 5A, 05, 05]
+121BF; [7C E3 5A, 05, 05]
-121C0; [7C DB 61, 05, 05]
+121C0; [7C E3 61, 05, 05]
-121C1; [7C DB 68, 05, 05]
+121C1; [7C E3 68, 05, 05]
-121C2; [7C DB 6F, 05, 05]
+121C2; [7C E3 6F, 05, 05]
-121C3; [7C DB 76, 05, 05]
+121C3; [7C E3 76, 05, 05]
-121C4; [7C DB 7D, 05, 05]
+121C4; [7C E3 7D, 05, 05]
-121C5; [7C DB 84, 05, 05]
+121C5; [7C E3 84, 05, 05]
-121C6; [7C DB 8B, 05, 05]
+121C6; [7C E3 8B, 05, 05]
-121C7; [7C DB 92, 05, 05]
+121C7; [7C E3 92, 05, 05]
-121C8; [7C DB 99, 05, 05]
+121C8; [7C E3 99, 05, 05]
-121C9; [7C DB A0, 05, 05]
+121C9; [7C E3 A0, 05, 05]
-121CA; [7C DB A7, 05, 05]
+121CA; [7C E3 A7, 05, 05]
-121CB; [7C DB AE, 05, 05]
+121CB; [7C E3 AE, 05, 05]
-121CC; [7C DB B5, 05, 05]
+121CC; [7C E3 B5, 05, 05]
-121CD; [7C DB BC, 05, 05]
+121CD; [7C E3 BC, 05, 05]
-121CE; [7C DB C3, 05, 05]
+121CE; [7C E3 C3, 05, 05]
-121CF; [7C DB CA, 05, 05]
+121CF; [7C E3 CA, 05, 05]
-121D0; [7C DB D1, 05, 05]
+121D0; [7C E3 D1, 05, 05]
-121D1; [7C DB D8, 05, 05]
+121D1; [7C E3 D8, 05, 05]
-121D2; [7C DB DF, 05, 05]
+121D2; [7C E3 DF, 05, 05]
-121D3; [7C DB E6, 05, 05]
+121D3; [7C E3 E6, 05, 05]
-121D4; [7C DB ED, 05, 05]
+121D4; [7C E3 ED, 05, 05]
-121D5; [7C DB F4, 05, 05]
+121D5; [7C E3 F4, 05, 05]
-121D6; [7C DB FB, 05, 05]
+121D6; [7C E3 FB, 05, 05]
-121D7; [7C DC 04, 05, 05]
+121D7; [7C E4 04, 05, 05]
-121D8; [7C DC 0B, 05, 05]
+121D8; [7C E4 0B, 05, 05]
-121D9; [7C DC 12, 05, 05]
+121D9; [7C E4 12, 05, 05]
-121DA; [7C DC 19, 05, 05]
+121DA; [7C E4 19, 05, 05]
-121DB; [7C DC 20, 05, 05]
+121DB; [7C E4 20, 05, 05]
-121DC; [7C DC 27, 05, 05]
+121DC; [7C E4 27, 05, 05]
-121DD; [7C DC 2E, 05, 05]
+121DD; [7C E4 2E, 05, 05]
-121DE; [7C DC 35, 05, 05]
+121DE; [7C E4 35, 05, 05]
-121DF; [7C DC 3C, 05, 05]
+121DF; [7C E4 3C, 05, 05]
-121E0; [7C DC 43, 05, 05]
+121E0; [7C E4 43, 05, 05]
-121E1; [7C DC 4A, 05, 05]
+121E1; [7C E4 4A, 05, 05]
-121E2; [7C DC 51, 05, 05]
+121E2; [7C E4 51, 05, 05]
-121E3; [7C DC 58, 05, 05]
+121E3; [7C E4 58, 05, 05]
-121E4; [7C DC 5F, 05, 05]
+121E4; [7C E4 5F, 05, 05]
-121E5; [7C DC 66, 05, 05]
+121E5; [7C E4 66, 05, 05]
-121E6; [7C DC 6D, 05, 05]
+121E6; [7C E4 6D, 05, 05]
-121E7; [7C DC 74, 05, 05]
+121E7; [7C E4 74, 05, 05]
-121E8; [7C DC 7B, 05, 05]
+121E8; [7C E4 7B, 05, 05]
-121E9; [7C DC 82, 05, 05]
+121E9; [7C E4 82, 05, 05]
-121EA; [7C DC 89, 05, 05]
+121EA; [7C E4 89, 05, 05]
-121EB; [7C DC 90, 05, 05]
+121EB; [7C E4 90, 05, 05]
-121EC; [7C DC 97, 05, 05]
+121EC; [7C E4 97, 05, 05]
-121ED; [7C DC 9E, 05, 05]
+121ED; [7C E4 9E, 05, 05]
-121EE; [7C DC A5, 05, 05]
+121EE; [7C E4 A5, 05, 05]
-121EF; [7C DC AC, 05, 05]
+121EF; [7C E4 AC, 05, 05]
-121F0; [7C DC B3, 05, 05]
+121F0; [7C E4 B3, 05, 05]
-121F1; [7C DC BA, 05, 05]
+121F1; [7C E4 BA, 05, 05]
-121F2; [7C DC C1, 05, 05]
+121F2; [7C E4 C1, 05, 05]
-121F3; [7C DC C8, 05, 05]
+121F3; [7C E4 C8, 05, 05]
-121F4; [7C DC CF, 05, 05]
+121F4; [7C E4 CF, 05, 05]
-121F5; [7C DC D6, 05, 05]
+121F5; [7C E4 D6, 05, 05]
-121F6; [7C DC DD, 05, 05]
+121F6; [7C E4 DD, 05, 05]
-121F7; [7C DC E4, 05, 05]
+121F7; [7C E4 E4, 05, 05]
-121F8; [7C DC EB, 05, 05]
+121F8; [7C E4 EB, 05, 05]
-121F9; [7C DC F2, 05, 05]
+121F9; [7C E4 F2, 05, 05]
-121FA; [7C DC F9, 05, 05]
+121FA; [7C E4 F9, 05, 05]
-121FB; [7C DD 02, 05, 05]
+121FB; [7C E5 02, 05, 05]
-121FC; [7C DD 09, 05, 05]
+121FC; [7C E5 09, 05, 05]
-121FD; [7C DD 10, 05, 05]
+121FD; [7C E5 10, 05, 05]
-121FE; [7C DD 17, 05, 05]
+121FE; [7C E5 17, 05, 05]
-121FF; [7C DD 1E, 05, 05]
+121FF; [7C E5 1E, 05, 05]
-12200; [7C DD 25, 05, 05]
+12200; [7C E5 25, 05, 05]
-12201; [7C DD 2C, 05, 05]
+12201; [7C E5 2C, 05, 05]
-12202; [7C DD 33, 05, 05]
+12202; [7C E5 33, 05, 05]
-12203; [7C DD 3A, 05, 05]
+12203; [7C E5 3A, 05, 05]
-12204; [7C DD 41, 05, 05]
+12204; [7C E5 41, 05, 05]
-12205; [7C DD 48, 05, 05]
+12205; [7C E5 48, 05, 05]
-12206; [7C DD 4F, 05, 05]
+12206; [7C E5 4F, 05, 05]
-12207; [7C DD 56, 05, 05]
+12207; [7C E5 56, 05, 05]
-12208; [7C DD 5D, 05, 05]
+12208; [7C E5 5D, 05, 05]
-12209; [7C DD 64, 05, 05]
+12209; [7C E5 64, 05, 05]
-1220A; [7C DD 6B, 05, 05]
+1220A; [7C E5 6B, 05, 05]
-1220B; [7C DD 72, 05, 05]
+1220B; [7C E5 72, 05, 05]
-1220C; [7C DD 79, 05, 05]
+1220C; [7C E5 79, 05, 05]
-1220D; [7C DD 80, 05, 05]
+1220D; [7C E5 80, 05, 05]
-1220E; [7C DD 87, 05, 05]
+1220E; [7C E5 87, 05, 05]
-1220F; [7C DD 8E, 05, 05]
+1220F; [7C E5 8E, 05, 05]
-12210; [7C DD 95, 05, 05]
+12210; [7C E5 95, 05, 05]
-12211; [7C DD 9C, 05, 05]
+12211; [7C E5 9C, 05, 05]
-12212; [7C DD A3, 05, 05]
+12212; [7C E5 A3, 05, 05]
-12213; [7C DD AA, 05, 05]
+12213; [7C E5 AA, 05, 05]
-12214; [7C DD B1, 05, 05]
+12214; [7C E5 B1, 05, 05]
-12215; [7C DD B8, 05, 05]
+12215; [7C E5 B8, 05, 05]
-12216; [7C DD BF, 05, 05]
+12216; [7C E5 BF, 05, 05]
-12217; [7C DD C6, 05, 05]
+12217; [7C E5 C6, 05, 05]
-12218; [7C DD CD, 05, 05]
+12218; [7C E5 CD, 05, 05]
-12219; [7C DD D4, 05, 05]
+12219; [7C E5 D4, 05, 05]
-1221A; [7C DD DB, 05, 05]
+1221A; [7C E5 DB, 05, 05]
-1221B; [7C DD E2, 05, 05]
+1221B; [7C E5 E2, 05, 05]
-1221C; [7C DD E9, 05, 05]
+1221C; [7C E5 E9, 05, 05]
-1221D; [7C DD F0, 05, 05]
+1221D; [7C E5 F0, 05, 05]
-1221E; [7C DD F7, 05, 05]
+1221E; [7C E5 F7, 05, 05]
-1221F; [7C DD FE, 05, 05]
+1221F; [7C E5 FE, 05, 05]
-12220; [7C DE 07, 05, 05]
+12220; [7C E6 07, 05, 05]
-12221; [7C DE 0E, 05, 05]
+12221; [7C E6 0E, 05, 05]
-12222; [7C DE 15, 05, 05]
+12222; [7C E6 15, 05, 05]
-12223; [7C DE 1C, 05, 05]
+12223; [7C E6 1C, 05, 05]
-12224; [7C DE 23, 05, 05]
+12224; [7C E6 23, 05, 05]
-12225; [7C DE 2A, 05, 05]
+12225; [7C E6 2A, 05, 05]
-12226; [7C DE 31, 05, 05]
+12226; [7C E6 31, 05, 05]
-12227; [7C DE 38, 05, 05]
+12227; [7C E6 38, 05, 05]
-12228; [7C DE 3F, 05, 05]
+12228; [7C E6 3F, 05, 05]
-12229; [7C DE 46, 05, 05]
+12229; [7C E6 46, 05, 05]
-1222A; [7C DE 4D, 05, 05]
+1222A; [7C E6 4D, 05, 05]
-1222B; [7C DE 54, 05, 05]
+1222B; [7C E6 54, 05, 05]
-1222C; [7C DE 5B, 05, 05]
+1222C; [7C E6 5B, 05, 05]
-1222D; [7C DE 62, 05, 05]
+1222D; [7C E6 62, 05, 05]
-1222E; [7C DE 69, 05, 05]
+1222E; [7C E6 69, 05, 05]
-1222F; [7C DE 70, 05, 05]
+1222F; [7C E6 70, 05, 05]
-12230; [7C DE 77, 05, 05]
+12230; [7C E6 77, 05, 05]
-12231; [7C DE 7E, 05, 05]
+12231; [7C E6 7E, 05, 05]
-12232; [7C DE 85, 05, 05]
+12232; [7C E6 85, 05, 05]
-12233; [7C DE 8C, 05, 05]
+12233; [7C E6 8C, 05, 05]
-12234; [7C DE 93, 05, 05]
+12234; [7C E6 93, 05, 05]
-12235; [7C DE 9A, 05, 05]
+12235; [7C E6 9A, 05, 05]
-12236; [7C DE A1, 05, 05]
+12236; [7C E6 A1, 05, 05]
-12237; [7C DE A8, 05, 05]
+12237; [7C E6 A8, 05, 05]
-12238; [7C DE AF, 05, 05]
+12238; [7C E6 AF, 05, 05]
-12239; [7C DE B6, 05, 05]
+12239; [7C E6 B6, 05, 05]
-1223A; [7C DE BD, 05, 05]
+1223A; [7C E6 BD, 05, 05]
-1223B; [7C DE C4, 05, 05]
+1223B; [7C E6 C4, 05, 05]
-1223C; [7C DE CB, 05, 05]
+1223C; [7C E6 CB, 05, 05]
-1223D; [7C DE D2, 05, 05]
+1223D; [7C E6 D2, 05, 05]
-1223E; [7C DE D9, 05, 05]
+1223E; [7C E6 D9, 05, 05]
-1223F; [7C DE E0, 05, 05]
+1223F; [7C E6 E0, 05, 05]
-12240; [7C DE E7, 05, 05]
+12240; [7C E6 E7, 05, 05]
-12241; [7C DE EE, 05, 05]
+12241; [7C E6 EE, 05, 05]
-12242; [7C DE F5, 05, 05]
+12242; [7C E6 F5, 05, 05]
-12243; [7C DE FC, 05, 05]
+12243; [7C E6 FC, 05, 05]
-12244; [7C DF 05, 05, 05]
+12244; [7C E7 05, 05, 05]
-12245; [7C DF 0C, 05, 05]
+12245; [7C E7 0C, 05, 05]
-12246; [7C DF 13, 05, 05]
+12246; [7C E7 13, 05, 05]
-12247; [7C DF 1A, 05, 05]
+12247; [7C E7 1A, 05, 05]
-12248; [7C DF 21, 05, 05]
+12248; [7C E7 21, 05, 05]
-12249; [7C DF 28, 05, 05]
+12249; [7C E7 28, 05, 05]
-1224A; [7C DF 2F, 05, 05]
+1224A; [7C E7 2F, 05, 05]
-1224B; [7C DF 36, 05, 05]
+1224B; [7C E7 36, 05, 05]
-1224C; [7C DF 3D, 05, 05]
+1224C; [7C E7 3D, 05, 05]
-1224D; [7C DF 44, 05, 05]
+1224D; [7C E7 44, 05, 05]
-1224E; [7C DF 4B, 05, 05]
+1224E; [7C E7 4B, 05, 05]
-1224F; [7C DF 52, 05, 05]
+1224F; [7C E7 52, 05, 05]
-12250; [7C DF 59, 05, 05]
+12250; [7C E7 59, 05, 05]
-12251; [7C DF 60, 05, 05]
+12251; [7C E7 60, 05, 05]
-12252; [7C DF 67, 05, 05]
+12252; [7C E7 67, 05, 05]
-12253; [7C DF 6E, 05, 05]
+12253; [7C E7 6E, 05, 05]
-12254; [7C DF 75, 05, 05]
+12254; [7C E7 75, 05, 05]
-12255; [7C DF 7C, 05, 05]
+12255; [7C E7 7C, 05, 05]
-12256; [7C DF 83, 05, 05]
+12256; [7C E7 83, 05, 05]
-12257; [7C DF 8A, 05, 05]
+12257; [7C E7 8A, 05, 05]
-12258; [7C DF 91, 05, 05]
+12258; [7C E7 91, 05, 05]
-12259; [7C DF 98, 05, 05]
+12259; [7C E7 98, 05, 05]
-1225A; [7C DF 9F, 05, 05]
+1225A; [7C E7 9F, 05, 05]
-1225B; [7C DF A6, 05, 05]
+1225B; [7C E7 A6, 05, 05]
-1225C; [7C DF AD, 05, 05]
+1225C; [7C E7 AD, 05, 05]
-1225D; [7C DF B4, 05, 05]
+1225D; [7C E7 B4, 05, 05]
-1225E; [7C DF BB, 05, 05]
+1225E; [7C E7 BB, 05, 05]
-1225F; [7C DF C2, 05, 05]
+1225F; [7C E7 C2, 05, 05]
-12260; [7C DF C9, 05, 05]
+12260; [7C E7 C9, 05, 05]
-12261; [7C DF D0, 05, 05]
+12261; [7C E7 D0, 05, 05]
-12262; [7C DF D7, 05, 05]
+12262; [7C E7 D7, 05, 05]
-122D4; [7C DF DE, 05, 05]
+122D4; [7C E7 DE, 05, 05]
-122D5; [7C DF E5, 05, 05]
+122D5; [7C E7 E5, 05, 05]
-12263; [7C DF EC, 05, 05]
+12263; [7C E7 EC, 05, 05]
-12264; [7C DF F3, 05, 05]
+12264; [7C E7 F3, 05, 05]
-12265; [7C DF FA, 05, 05]
+12265; [7C E7 FA, 05, 05]
-12266; [7C E0 03, 05, 05]
+12266; [7C E8 03, 05, 05]
-12267; [7C E0 0A, 05, 05]
+12267; [7C E8 0A, 05, 05]
-12268; [7C E0 11, 05, 05]
+12268; [7C E8 11, 05, 05]
-12269; [7C E0 18, 05, 05]
+12269; [7C E8 18, 05, 05]
-1226A; [7C E0 1F, 05, 05]
+1226A; [7C E8 1F, 05, 05]
-1226B; [7C E0 26, 05, 05]
+1226B; [7C E8 26, 05, 05]
-1226C; [7C E0 2D, 05, 05]
+1226C; [7C E8 2D, 05, 05]
-1226D; [7C E0 34, 05, 05]
+1226D; [7C E8 34, 05, 05]
-1226E; [7C E0 3B, 05, 05]
+1226E; [7C E8 3B, 05, 05]
-1226F; [7C E0 42, 05, 05]
+1226F; [7C E8 42, 05, 05]
-12270; [7C E0 49, 05, 05]
+12270; [7C E8 49, 05, 05]
-12271; [7C E0 50, 05, 05]
+12271; [7C E8 50, 05, 05]
-12272; [7C E0 57, 05, 05]
+12272; [7C E8 57, 05, 05]
-12273; [7C E0 5E, 05, 05]
+12273; [7C E8 5E, 05, 05]
-12274; [7C E0 65, 05, 05]
+12274; [7C E8 65, 05, 05]
-12275; [7C E0 6C, 05, 05]
+12275; [7C E8 6C, 05, 05]
-12276; [7C E0 73, 05, 05]
+12276; [7C E8 73, 05, 05]
-12277; [7C E0 7A, 05, 05]
+12277; [7C E8 7A, 05, 05]
-12278; [7C E0 81, 05, 05]
+12278; [7C E8 81, 05, 05]
-12279; [7C E0 88, 05, 05]
+12279; [7C E8 88, 05, 05]
-1227A; [7C E0 8F, 05, 05]
+1227A; [7C E8 8F, 05, 05]
-1227B; [7C E0 96, 05, 05]
+1227B; [7C E8 96, 05, 05]
-1227C; [7C E0 9D, 05, 05]
+1227C; [7C E8 9D, 05, 05]
-1227D; [7C E0 A4, 05, 05]
+1227D; [7C E8 A4, 05, 05]
-1227E; [7C E0 AB, 05, 05]
+1227E; [7C E8 AB, 05, 05]
-1227F; [7C E0 B2, 05, 05]
+1227F; [7C E8 B2, 05, 05]
-12280; [7C E0 B9, 05, 05]
+12280; [7C E8 B9, 05, 05]
-12281; [7C E0 C0, 05, 05]
+12281; [7C E8 C0, 05, 05]
-12282; [7C E0 C7, 05, 05]
+12282; [7C E8 C7, 05, 05]
-12283; [7C E0 CE, 05, 05]
+12283; [7C E8 CE, 05, 05]
-12284; [7C E0 D5, 05, 05]
+12284; [7C E8 D5, 05, 05]
-12285; [7C E0 DC, 05, 05]
+12285; [7C E8 DC, 05, 05]
-12286; [7C E0 E3, 05, 05]
+12286; [7C E8 E3, 05, 05]
-12287; [7C E0 EA, 05, 05]
+12287; [7C E8 EA, 05, 05]
-12288; [7C E0 F1, 05, 05]
+12288; [7C E8 F1, 05, 05]
-12289; [7C E0 F8, 05, 05]
+12289; [7C E8 F8, 05, 05]
-1228A; [7C E0 FF, 05, 05]
+1228A; [7C E8 FF, 05, 05]
-1228B; [7C E1 08, 05, 05]
+1228B; [7C E9 08, 05, 05]
-1228C; [7C E1 0F, 05, 05]
+1228C; [7C E9 0F, 05, 05]
-1228D; [7C E1 16, 05, 05]
+1228D; [7C E9 16, 05, 05]
-1228E; [7C E1 1D, 05, 05]
+1228E; [7C E9 1D, 05, 05]
-1228F; [7C E1 24, 05, 05]
+1228F; [7C E9 24, 05, 05]
-12290; [7C E1 2B, 05, 05]
+12290; [7C E9 2B, 05, 05]
-12291; [7C E1 32, 05, 05]
+12291; [7C E9 32, 05, 05]
-12292; [7C E1 39, 05, 05]
+12292; [7C E9 39, 05, 05]
-12293; [7C E1 40, 05, 05]
+12293; [7C E9 40, 05, 05]
-12294; [7C E1 47, 05, 05]
+12294; [7C E9 47, 05, 05]
-12295; [7C E1 4E, 05, 05]
+12295; [7C E9 4E, 05, 05]
-12296; [7C E1 55, 05, 05]
+12296; [7C E9 55, 05, 05]
-12297; [7C E1 5C, 05, 05]
+12297; [7C E9 5C, 05, 05]
-12298; [7C E1 63, 05, 05]
+12298; [7C E9 63, 05, 05]
-12299; [7C E1 6A, 05, 05]
+12299; [7C E9 6A, 05, 05]
-1229A; [7C E1 71, 05, 05]
+1229A; [7C E9 71, 05, 05]
-1229B; [7C E1 78, 05, 05]
+1229B; [7C E9 78, 05, 05]
-1229C; [7C E1 7F, 05, 05]
+1229C; [7C E9 7F, 05, 05]
-1229D; [7C E1 86, 05, 05]
+1229D; [7C E9 86, 05, 05]
-1229E; [7C E1 8D, 05, 05]
+1229E; [7C E9 8D, 05, 05]
-1229F; [7C E1 94, 05, 05]
+1229F; [7C E9 94, 05, 05]
-122A0; [7C E1 9B, 05, 05]
+122A0; [7C E9 9B, 05, 05]
-122A1; [7C E1 A2, 05, 05]
+122A1; [7C E9 A2, 05, 05]
-122A2; [7C E1 A9, 05, 05]
+122A2; [7C E9 A9, 05, 05]
-122A3; [7C E1 B0, 05, 05]
+122A3; [7C E9 B0, 05, 05]
-122A4; [7C E1 B7, 05, 05]
+122A4; [7C E9 B7, 05, 05]
-122A5; [7C E1 BE, 05, 05]
+122A5; [7C E9 BE, 05, 05]
-122A6; [7C E1 C5, 05, 05]
+122A6; [7C E9 C5, 05, 05]
-122A7; [7C E1 CC, 05, 05]
+122A7; [7C E9 CC, 05, 05]
-122A8; [7C E1 D3, 05, 05]
+122A8; [7C E9 D3, 05, 05]
-122A9; [7C E1 DA, 05, 05]
+122A9; [7C E9 DA, 05, 05]
-122AA; [7C E1 E1, 05, 05]
+122AA; [7C E9 E1, 05, 05]
-122AB; [7C E1 E8, 05, 05]
+122AB; [7C E9 E8, 05, 05]
-122AC; [7C E1 EF, 05, 05]
+122AC; [7C E9 EF, 05, 05]
-122AD; [7C E1 F6, 05, 05]
+122AD; [7C E9 F6, 05, 05]
-122AE; [7C E1 FD, 05, 05]
+122AE; [7C E9 FD, 05, 05]
-122AF; [7C E2 06, 05, 05]
+122AF; [7C EA 06, 05, 05]
-122B0; [7C E2 0D, 05, 05]
+122B0; [7C EA 0D, 05, 05]
-122B1; [7C E2 14, 05, 05]
+122B1; [7C EA 14, 05, 05]
-122B2; [7C E2 1B, 05, 05]
+122B2; [7C EA 1B, 05, 05]
-122B3; [7C E2 22, 05, 05]
+122B3; [7C EA 22, 05, 05]
-122B4; [7C E2 29, 05, 05]
+122B4; [7C EA 29, 05, 05]
-122B5; [7C E2 30, 05, 05]
+122B5; [7C EA 30, 05, 05]
-122B6; [7C E2 37, 05, 05]
+122B6; [7C EA 37, 05, 05]
-122B7; [7C E2 3E, 05, 05]
+122B7; [7C EA 3E, 05, 05]
-122B8; [7C E2 45, 05, 05]
+122B8; [7C EA 45, 05, 05]
-122B9; [7C E2 4C, 05, 05]
+122B9; [7C EA 4C, 05, 05]
-122BA; [7C E2 53, 05, 05]
+122BA; [7C EA 53, 05, 05]
-122BB; [7C E2 5A, 05, 05]
+122BB; [7C EA 5A, 05, 05]
-122BC; [7C E2 61, 05, 05]
+122BC; [7C EA 61, 05, 05]
-122BD; [7C E2 68, 05, 05]
+122BD; [7C EA 68, 05, 05]
-122BE; [7C E2 6F, 05, 05]
+122BE; [7C EA 6F, 05, 05]
-122BF; [7C E2 76, 05, 05]
+122BF; [7C EA 76, 05, 05]
-122C0; [7C E2 7D, 05, 05]
+122C0; [7C EA 7D, 05, 05]
-122C1; [7C E2 84, 05, 05]
+122C1; [7C EA 84, 05, 05]
-122C2; [7C E2 8B, 05, 05]
+122C2; [7C EA 8B, 05, 05]
-122C3; [7C E2 92, 05, 05]
+122C3; [7C EA 92, 05, 05]
-122C4; [7C E2 99, 05, 05]
+122C4; [7C EA 99, 05, 05]
-122C5; [7C E2 A0, 05, 05]
+122C5; [7C EA A0, 05, 05]
-122C6; [7C E2 A7, 05, 05]
+122C6; [7C EA A7, 05, 05]
-122C7; [7C E2 AE, 05, 05]
+122C7; [7C EA AE, 05, 05]
-122C8; [7C E2 B5, 05, 05]
+122C8; [7C EA B5, 05, 05]
-122C9; [7C E2 BC, 05, 05]
+122C9; [7C EA BC, 05, 05]
-122CA; [7C E2 C3, 05, 05]
+122CA; [7C EA C3, 05, 05]
-122CB; [7C E2 CA, 05, 05]
+122CB; [7C EA CA, 05, 05]
-122CC; [7C E2 D1, 05, 05]
+122CC; [7C EA D1, 05, 05]
-122CD; [7C E2 D8, 05, 05]
+122CD; [7C EA D8, 05, 05]
-122CE; [7C E2 DF, 05, 05]
+122CE; [7C EA DF, 05, 05]
-122CF; [7C E2 E6, 05, 05]
+122CF; [7C EA E6, 05, 05]
-122D0; [7C E2 ED, 05, 05]
+122D0; [7C EA ED, 05, 05]
-122D1; [7C E2 F4, 05, 05]
+122D1; [7C EA F4, 05, 05]
-122D2; [7C E2 FB, 05, 05]
+122D2; [7C EA FB, 05, 05]
-122D3; [7C E3 04, 05, 05]
+122D3; [7C EB 04, 05, 05]
-122D6; [7C E3 0B, 05, 05]
+122D6; [7C EB 0B, 05, 05]
-122D7; [7C E3 12, 05, 05]
+122D7; [7C EB 12, 05, 05]
-122D8; [7C E3 19, 05, 05]
+122D8; [7C EB 19, 05, 05]
-122D9; [7C E3 20, 05, 05]
+122D9; [7C EB 20, 05, 05]
-122DA; [7C E3 27, 05, 05]
+122DA; [7C EB 27, 05, 05]
-122DB; [7C E3 2E, 05, 05]
+122DB; [7C EB 2E, 05, 05]
-122DC; [7C E3 35, 05, 05]
+122DC; [7C EB 35, 05, 05]
-122DD; [7C E3 3C, 05, 05]
+122DD; [7C EB 3C, 05, 05]
-122DE; [7C E3 43, 05, 05]
+122DE; [7C EB 43, 05, 05]
-122DF; [7C E3 4A, 05, 05]
+122DF; [7C EB 4A, 05, 05]
-122E0; [7C E3 51, 05, 05]
+122E0; [7C EB 51, 05, 05]
-122E1; [7C E3 58, 05, 05]
+122E1; [7C EB 58, 05, 05]
-122E2; [7C E3 5F, 05, 05]
+122E2; [7C EB 5F, 05, 05]
-122E3; [7C E3 66, 05, 05]
+122E3; [7C EB 66, 05, 05]
-122E4; [7C E3 6D, 05, 05]
+122E4; [7C EB 6D, 05, 05]
-122E5; [7C E3 74, 05, 05]
+122E5; [7C EB 74, 05, 05]
-122E6; [7C E3 7B, 05, 05]
+122E6; [7C EB 7B, 05, 05]
-122E7; [7C E3 82, 05, 05]
+122E7; [7C EB 82, 05, 05]
-122E8; [7C E3 89, 05, 05]
+122E8; [7C EB 89, 05, 05]
-122E9; [7C E3 90, 05, 05]
+122E9; [7C EB 90, 05, 05]
-122EA; [7C E3 97, 05, 05]
+122EA; [7C EB 97, 05, 05]
-122EB; [7C E3 9E, 05, 05]
+122EB; [7C EB 9E, 05, 05]
-122EC; [7C E3 A5, 05, 05]
+122EC; [7C EB A5, 05, 05]
-122ED; [7C E3 AC, 05, 05]
+122ED; [7C EB AC, 05, 05]
-122EE; [7C E3 B3, 05, 05]
+122EE; [7C EB B3, 05, 05]
-122EF; [7C E3 BA, 05, 05]
+122EF; [7C EB BA, 05, 05]
-122F0; [7C E3 C1, 05, 05]
+122F0; [7C EB C1, 05, 05]
-122F1; [7C E3 C8, 05, 05]
+122F1; [7C EB C8, 05, 05]
-122F2; [7C E3 CF, 05, 05]
+122F2; [7C EB CF, 05, 05]
-122F3; [7C E3 D6, 05, 05]
+122F3; [7C EB D6, 05, 05]
-122F4; [7C E3 DD, 05, 05]
+122F4; [7C EB DD, 05, 05]
-122F5; [7C E3 E4, 05, 05]
+122F5; [7C EB E4, 05, 05]
-122F6; [7C E3 EB, 05, 05]
+122F6; [7C EB EB, 05, 05]
-122F7; [7C E3 F2, 05, 05]
+122F7; [7C EB F2, 05, 05]
-122F8; [7C E3 F9, 05, 05]
+122F8; [7C EB F9, 05, 05]
-122F9; [7C E4 02, 05, 05]
+122F9; [7C EC 02, 05, 05]
-122FA; [7C E4 09, 05, 05]
+122FA; [7C EC 09, 05, 05]
-122FB; [7C E4 10, 05, 05]
+122FB; [7C EC 10, 05, 05]
-122FC; [7C E4 17, 05, 05]
+122FC; [7C EC 17, 05, 05]
-122FD; [7C E4 1E, 05, 05]
+122FD; [7C EC 1E, 05, 05]
-122FE; [7C E4 25, 05, 05]
+122FE; [7C EC 25, 05, 05]
-122FF; [7C E4 2C, 05, 05]
+122FF; [7C EC 2C, 05, 05]
-12300; [7C E4 33, 05, 05]
+12300; [7C EC 33, 05, 05]
-12301; [7C E4 3A, 05, 05]
+12301; [7C EC 3A, 05, 05]
-12302; [7C E4 41, 05, 05]
+12302; [7C EC 41, 05, 05]
-12303; [7C E4 48, 05, 05]
+12303; [7C EC 48, 05, 05]
-12304; [7C E4 4F, 05, 05]
+12304; [7C EC 4F, 05, 05]
-12305; [7C E4 56, 05, 05]
+12305; [7C EC 56, 05, 05]
-12306; [7C E4 5D, 05, 05]
+12306; [7C EC 5D, 05, 05]
-12307; [7C E4 64, 05, 05]
+12307; [7C EC 64, 05, 05]
-12308; [7C E4 6B, 05, 05]
+12308; [7C EC 6B, 05, 05]
-12309; [7C E4 72, 05, 05]
+12309; [7C EC 72, 05, 05]
-1230A; [7C E4 79, 05, 05]
+1230A; [7C EC 79, 05, 05]
-1230B; [7C E4 80, 05, 05]
+1230B; [7C EC 80, 05, 05]
-1230C; [7C E4 87, 05, 05]
+1230C; [7C EC 87, 05, 05]
-1230D; [7C E4 8E, 05, 05]
+1230D; [7C EC 8E, 05, 05]
-1230E; [7C E4 95, 05, 05]
+1230E; [7C EC 95, 05, 05]
-1230F; [7C E4 9C, 05, 05]
+1230F; [7C EC 9C, 05, 05]
-12310; [7C E4 A3, 05, 05]
+12310; [7C EC A3, 05, 05]
-12311; [7C E4 AA, 05, 05]
+12311; [7C EC AA, 05, 05]
-12312; [7C E4 B1, 05, 05]
+12312; [7C EC B1, 05, 05]
-12313; [7C E4 B8, 05, 05]
+12313; [7C EC B8, 05, 05]
-12314; [7C E4 BF, 05, 05]
+12314; [7C EC BF, 05, 05]
-12315; [7C E4 C6, 05, 05]
+12315; [7C EC C6, 05, 05]
-12316; [7C E4 CD, 05, 05]
+12316; [7C EC CD, 05, 05]
-12317; [7C E4 D4, 05, 05]
+12317; [7C EC D4, 05, 05]
-12318; [7C E4 DB, 05, 05]
+12318; [7C EC DB, 05, 05]
-12319; [7C E4 E2, 05, 05]
+12319; [7C EC E2, 05, 05]
-1231A; [7C E4 E9, 05, 05]
+1231A; [7C EC E9, 05, 05]
-1231B; [7C E4 F0, 05, 05]
+1231B; [7C EC F0, 05, 05]
-1231C; [7C E4 F7, 05, 05]
+1231C; [7C EC F7, 05, 05]
-1231D; [7C E4 FE, 05, 05]
+1231D; [7C EC FE, 05, 05]
-1231E; [7C E5 07, 05, 05]
+1231E; [7C ED 07, 05, 05]
-1231F; [7C E5 0E, 05, 05]
+1231F; [7C ED 0E, 05, 05]
-12320; [7C E5 15, 05, 05]
+12320; [7C ED 15, 05, 05]
-12321; [7C E5 1C, 05, 05]
+12321; [7C ED 1C, 05, 05]
-12322; [7C E5 23, 05, 05]
+12322; [7C ED 23, 05, 05]
-12323; [7C E5 2A, 05, 05]
+12323; [7C ED 2A, 05, 05]
-12324; [7C E5 31, 05, 05]
+12324; [7C ED 31, 05, 05]
-12325; [7C E5 38, 05, 05]
+12325; [7C ED 38, 05, 05]
-12326; [7C E5 3F, 05, 05]
+12326; [7C ED 3F, 05, 05]
-12327; [7C E5 46, 05, 05]
+12327; [7C ED 46, 05, 05]
-12328; [7C E5 4D, 05, 05]
+12328; [7C ED 4D, 05, 05]
-12329; [7C E5 54, 05, 05]
+12329; [7C ED 54, 05, 05]
-1232A; [7C E5 5B, 05, 05]
+1232A; [7C ED 5B, 05, 05]
-1232B; [7C E5 62, 05, 05]
+1232B; [7C ED 62, 05, 05]
-1232C; [7C E5 69, 05, 05]
+1232C; [7C ED 69, 05, 05]
-1232D; [7C E5 70, 05, 05]
+1232D; [7C ED 70, 05, 05]
-1232E; [7C E5 77, 05, 05]
+1232E; [7C ED 77, 05, 05]
-1232F; [7C E5 7E, 05, 05]
+1232F; [7C ED 7E, 05, 05]
-12330; [7C E5 85, 05, 05]
+12330; [7C ED 85, 05, 05]
-12331; [7C E5 8C, 05, 05]
+12331; [7C ED 8C, 05, 05]
-12332; [7C E5 93, 05, 05]
+12332; [7C ED 93, 05, 05]
-12333; [7C E5 9A, 05, 05]
+12333; [7C ED 9A, 05, 05]
-12334; [7C E5 A1, 05, 05]
+12334; [7C ED A1, 05, 05]
-12335; [7C E5 A8, 05, 05]
+12335; [7C ED A8, 05, 05]
-12336; [7C E5 AF, 05, 05]
+12336; [7C ED AF, 05, 05]
-12337; [7C E5 B6, 05, 05]
+12337; [7C ED B6, 05, 05]
-12338; [7C E5 BD, 05, 05]
+12338; [7C ED BD, 05, 05]
-12339; [7C E5 C4, 05, 05]
+12339; [7C ED C4, 05, 05]
-1233A; [7C E5 CB, 05, 05]
+1233A; [7C ED CB, 05, 05]
-1233B; [7C E5 D2, 05, 05]
+1233B; [7C ED D2, 05, 05]
-1233C; [7C E5 D9, 05, 05]
+1233C; [7C ED D9, 05, 05]
-1233D; [7C E5 E0, 05, 05]
+1233D; [7C ED E0, 05, 05]
-1233E; [7C E5 E7, 05, 05]
+1233E; [7C ED E7, 05, 05]
-1233F; [7C E5 EE, 05, 05]
+1233F; [7C ED EE, 05, 05]
-12340; [7C E5 F5, 05, 05]
+12340; [7C ED F5, 05, 05]
-12341; [7C E5 FC, 05, 05]
+12341; [7C ED FC, 05, 05]
-12342; [7C E6 05, 05, 05]
+12342; [7C EE 05, 05, 05]
-12343; [7C E6 0C, 05, 05]
+12343; [7C EE 0C, 05, 05]
-12344; [7C E6 13, 05, 05]
+12344; [7C EE 13, 05, 05]
-12345; [7C E6 1A, 05, 05]
+12345; [7C EE 1A, 05, 05]
-12346; [7C E6 21, 05, 05]
+12346; [7C EE 21, 05, 05]
-12347; [7C E6 28, 05, 05]
+12347; [7C EE 28, 05, 05]
-12348; [7C E6 2F, 05, 05]
+12348; [7C EE 2F, 05, 05]
-12349; [7C E6 36, 05, 05]
+12349; [7C EE 36, 05, 05]
-1234A; [7C E6 3D, 05, 05]
+1234A; [7C EE 3D, 05, 05]
-1234B; [7C E6 44, 05, 05]
+1234B; [7C EE 44, 05, 05]
-1234C; [7C E6 4B, 05, 05]
+1234C; [7C EE 4B, 05, 05]
-1234D; [7C E6 52, 05, 05]
+1234D; [7C EE 52, 05, 05]
-1234E; [7C E6 59, 05, 05]
+1234E; [7C EE 59, 05, 05]
-1234F; [7C E6 60, 05, 05]
+1234F; [7C EE 60, 05, 05]
-12350; [7C E6 67, 05, 05]
+12350; [7C EE 67, 05, 05]
-12351; [7C E6 6E, 05, 05]
+12351; [7C EE 6E, 05, 05]
-12352; [7C E6 75, 05, 05]
+12352; [7C EE 75, 05, 05]
-12353; [7C E6 7C, 05, 05]
+12353; [7C EE 7C, 05, 05]
-12354; [7C E6 83, 05, 05]
+12354; [7C EE 83, 05, 05]
-12355; [7C E6 8A, 05, 05]
+12355; [7C EE 8A, 05, 05]
-12356; [7C E6 91, 05, 05]
+12356; [7C EE 91, 05, 05]
-12357; [7C E6 98, 05, 05]
+12357; [7C EE 98, 05, 05]
-12358; [7C E6 9F, 05, 05]
+12358; [7C EE 9F, 05, 05]
-12359; [7C E6 A6, 05, 05]
+12359; [7C EE A6, 05, 05]
-1235A; [7C E6 AD, 05, 05]
+1235A; [7C EE AD, 05, 05]
-1235B; [7C E6 B4, 05, 05]
+1235B; [7C EE B4, 05, 05]
-1235C; [7C E6 BB, 05, 05]
+1235C; [7C EE BB, 05, 05]
-1235D; [7C E6 C2, 05, 05]
+1235D; [7C EE C2, 05, 05]
-1235E; [7C E6 C9, 05, 05]
+1235E; [7C EE C9, 05, 05]
-1235F; [7C E6 D0, 05, 05]
+1235F; [7C EE D0, 05, 05]
-12360; [7C E6 D7, 05, 05]
+12360; [7C EE D7, 05, 05]
-12361; [7C E6 DE, 05, 05]
+12361; [7C EE DE, 05, 05]
-12362; [7C E6 E5, 05, 05]
+12362; [7C EE E5, 05, 05]
-12363; [7C E6 EC, 05, 05]
+12363; [7C EE EC, 05, 05]
-12364; [7C E6 F3, 05, 05]
+12364; [7C EE F3, 05, 05]
-12365; [7C E6 FA, 05, 05]
+12365; [7C EE FA, 05, 05]
-12366; [7C E7 03, 05, 05]
+12366; [7C EF 03, 05, 05]
-12367; [7C E7 0A, 05, 05]
+12367; [7C EF 0A, 05, 05]
-12368; [7C E7 11, 05, 05]
+12368; [7C EF 11, 05, 05]
-12369; [7C E7 18, 05, 05]
+12369; [7C EF 18, 05, 05]
-1236A; [7C E7 1F, 05, 05]
+1236A; [7C EF 1F, 05, 05]
-1236B; [7C E7 26, 05, 05]
+1236B; [7C EF 26, 05, 05]
-1236C; [7C E7 2D, 05, 05]
+1236C; [7C EF 2D, 05, 05]
-1236D; [7C E7 34, 05, 05]
+1236D; [7C EF 34, 05, 05]
-1236E; [7C E7 3B, 05, 05]
+1236E; [7C EF 3B, 05, 05]
-1236F; [7C E7 42, 05, 05]
+1236F; [7C EF 42, 05, 05]
-12370; [7C E7 49, 05, 05]
+12370; [7C EF 49, 05, 05]
-12371; [7C E7 50, 05, 05]
+12371; [7C EF 50, 05, 05]
-12372; [7C E7 57, 05, 05]
+12372; [7C EF 57, 05, 05]
-12373; [7C E7 5E, 05, 05]
+12373; [7C EF 5E, 05, 05]
-12374; [7C E7 65, 05, 05]
+12374; [7C EF 65, 05, 05]
-12375; [7C E7 6C, 05, 05]
+12375; [7C EF 6C, 05, 05]
-12376; [7C E7 73, 05, 05]
+12376; [7C EF 73, 05, 05]
-12377; [7C E7 7A, 05, 05]
+12377; [7C EF 7A, 05, 05]
-12378; [7C E7 81, 05, 05]
+12378; [7C EF 81, 05, 05]
-12379; [7C E7 88, 05, 05]
+12379; [7C EF 88, 05, 05]
-1237A; [7C E7 8F, 05, 05]
+1237A; [7C EF 8F, 05, 05]
-1237B; [7C E7 96, 05, 05]
+1237B; [7C EF 96, 05, 05]
-1237C; [7C E7 9D, 05, 05]
+1237C; [7C EF 9D, 05, 05]
-1237D; [7C E7 A4, 05, 05]
+1237D; [7C EF A4, 05, 05]
-1237E; [7C E7 AB, 05, 05]
+1237E; [7C EF AB, 05, 05]
-1237F; [7C E7 B2, 05, 05]
+1237F; [7C EF B2, 05, 05]
-12380; [7C E7 B9, 05, 05]
+12380; [7C EF B9, 05, 05]
-12381; [7C E7 C0, 05, 05]
+12381; [7C EF C0, 05, 05]
-12382; [7C E7 C7, 05, 05]
+12382; [7C EF C7, 05, 05]
-12383; [7C E7 CE, 05, 05]
+12383; [7C EF CE, 05, 05]
-12384; [7C E7 D5, 05, 05]
+12384; [7C EF D5, 05, 05]
-12385; [7C E7 DC, 05, 05]
+12385; [7C EF DC, 05, 05]
-12386; [7C E7 E3, 05, 05]
+12386; [7C EF E3, 05, 05]
-12387; [7C E7 EA, 05, 05]
+12387; [7C EF EA, 05, 05]
-12388; [7C E7 F1, 05, 05]
+12388; [7C EF F1, 05, 05]
-12389; [7C E7 F8, 05, 05]
+12389; [7C EF F8, 05, 05]
-1238A; [7C E7 FF, 05, 05]
+1238A; [7C EF FF, 05, 05]
-1238B; [7C E8 08, 05, 05]
+1238B; [7C F0 08, 05, 05]
-1238C; [7C E8 0F, 05, 05]
+1238C; [7C F0 0F, 05, 05]
-1238D; [7C E8 16, 05, 05]
+1238D; [7C F0 16, 05, 05]
-1238E; [7C E8 1D, 05, 05]
+1238E; [7C F0 1D, 05, 05]
-1238F; [7C E8 24, 05, 05]
+1238F; [7C F0 24, 05, 05]
-12390; [7C E8 2B, 05, 05]
+12390; [7C F0 2B, 05, 05]
-12391; [7C E8 32, 05, 05]
+12391; [7C F0 32, 05, 05]
-12392; [7C E8 39, 05, 05]
+12392; [7C F0 39, 05, 05]
-12393; [7C E8 40, 05, 05]
+12393; [7C F0 40, 05, 05]
-12394; [7C E8 47, 05, 05]
+12394; [7C F0 47, 05, 05]
-12395; [7C E8 4E, 05, 05]
+12395; [7C F0 4E, 05, 05]
-12396; [7C E8 55, 05, 05]
+12396; [7C F0 55, 05, 05]
-12397; [7C E8 5C, 05, 05]
+12397; [7C F0 5C, 05, 05]
-12398; [7C E8 63, 05, 05]
+12398; [7C F0 63, 05, 05]
-12399; [7C E8 6A, 05, 05]
+12399; [7C F0 6A, 05, 05]
-12480; [7C E8 71, 05, 05]
+12480; [7C F0 71, 05, 05]
-12481; [7C E8 78, 05, 05]
+12481; [7C F0 78, 05, 05]
-12482; [7C E8 7F, 05, 05]
+12482; [7C F0 7F, 05, 05]
-12483; [7C E8 86, 05, 05]
+12483; [7C F0 86, 05, 05]
-12484; [7C E8 8D, 05, 05]
+12484; [7C F0 8D, 05, 05]
-12485; [7C E8 94, 05, 05]
+12485; [7C F0 94, 05, 05]
-12486; [7C E8 9B, 05, 05]
+12486; [7C F0 9B, 05, 05]
-12487; [7C E8 A2, 05, 05]
+12487; [7C F0 A2, 05, 05]
-12488; [7C E8 A9, 05, 05]
+12488; [7C F0 A9, 05, 05]
-12489; [7C E8 B0, 05, 05]
+12489; [7C F0 B0, 05, 05]
-1248A; [7C E8 B7, 05, 05]
+1248A; [7C F0 B7, 05, 05]
-1248B; [7C E8 BE, 05, 05]
+1248B; [7C F0 BE, 05, 05]
-1248C; [7C E8 C5, 05, 05]
+1248C; [7C F0 C5, 05, 05]
-1248D; [7C E8 CC, 05, 05]
+1248D; [7C F0 CC, 05, 05]
-1248E; [7C E8 D3, 05, 05]
+1248E; [7C F0 D3, 05, 05]
-1248F; [7C E8 DA, 05, 05]
+1248F; [7C F0 DA, 05, 05]
-12490; [7C E8 E1, 05, 05]
+12490; [7C F0 E1, 05, 05]
-12491; [7C E8 E8, 05, 05]
+12491; [7C F0 E8, 05, 05]
-12492; [7C E8 EF, 05, 05]
+12492; [7C F0 EF, 05, 05]
-12493; [7C E8 F6, 05, 05]
+12493; [7C F0 F6, 05, 05]
-12494; [7C E8 FD, 05, 05]
+12494; [7C F0 FD, 05, 05]
-12495; [7C E9 06, 05, 05]
+12495; [7C F1 06, 05, 05]
-12496; [7C E9 0D, 05, 05]
+12496; [7C F1 0D, 05, 05]
-12497; [7C E9 14, 05, 05]
+12497; [7C F1 14, 05, 05]
-12498; [7C E9 1B, 05, 05]
+12498; [7C F1 1B, 05, 05]
-12499; [7C E9 22, 05, 05]
+12499; [7C F1 22, 05, 05]
-1249A; [7C E9 29, 05, 05]
+1249A; [7C F1 29, 05, 05]
-1249B; [7C E9 30, 05, 05]
+1249B; [7C F1 30, 05, 05]
-1249C; [7C E9 37, 05, 05]
+1249C; [7C F1 37, 05, 05]
-1249D; [7C E9 3E, 05, 05]
+1249D; [7C F1 3E, 05, 05]
-1249E; [7C E9 45, 05, 05]
+1249E; [7C F1 45, 05, 05]
-1249F; [7C E9 4C, 05, 05]
+1249F; [7C F1 4C, 05, 05]
-124A0; [7C E9 53, 05, 05]
+124A0; [7C F1 53, 05, 05]
-124A1; [7C E9 5A, 05, 05]
+124A1; [7C F1 5A, 05, 05]
-124A2; [7C E9 61, 05, 05]
+124A2; [7C F1 61, 05, 05]
-124A3; [7C E9 68, 05, 05]
+124A3; [7C F1 68, 05, 05]
-124A4; [7C E9 6F, 05, 05]
+124A4; [7C F1 6F, 05, 05]
-124A5; [7C E9 76, 05, 05]
+124A5; [7C F1 76, 05, 05]
-124A6; [7C E9 7D, 05, 05]
+124A6; [7C F1 7D, 05, 05]
-124A7; [7C E9 84, 05, 05]
+124A7; [7C F1 84, 05, 05]
-124A8; [7C E9 8B, 05, 05]
+124A8; [7C F1 8B, 05, 05]
-124A9; [7C E9 92, 05, 05]
+124A9; [7C F1 92, 05, 05]
-124AA; [7C E9 99, 05, 05]
+124AA; [7C F1 99, 05, 05]
-124AB; [7C E9 A0, 05, 05]
+124AB; [7C F1 A0, 05, 05]
-124AC; [7C E9 A7, 05, 05]
+124AC; [7C F1 A7, 05, 05]
-124AD; [7C E9 AE, 05, 05]
+124AD; [7C F1 AE, 05, 05]
-124AE; [7C E9 B5, 05, 05]
+124AE; [7C F1 B5, 05, 05]
-124AF; [7C E9 BC, 05, 05]
+124AF; [7C F1 BC, 05, 05]
-124B0; [7C E9 C3, 05, 05]
+124B0; [7C F1 C3, 05, 05]
-124B1; [7C E9 CA, 05, 05]
+124B1; [7C F1 CA, 05, 05]
-124B2; [7C E9 D1, 05, 05]
+124B2; [7C F1 D1, 05, 05]
-124B3; [7C E9 D8, 05, 05]
+124B3; [7C F1 D8, 05, 05]
-124B4; [7C E9 DF, 05, 05]
+124B4; [7C F1 DF, 05, 05]
-124B5; [7C E9 E6, 05, 05]
+124B5; [7C F1 E6, 05, 05]
-124B6; [7C E9 ED, 05, 05]
+124B6; [7C F1 ED, 05, 05]
-124B7; [7C E9 F4, 05, 05]
+124B7; [7C F1 F4, 05, 05]
-124B8; [7C E9 FB, 05, 05]
+124B8; [7C F1 FB, 05, 05]
-124B9; [7C EA 04, 05, 05]
+124B9; [7C F2 04, 05, 05]
-124BA; [7C EA 0B, 05, 05]
+124BA; [7C F2 0B, 05, 05]
-124BB; [7C EA 12, 05, 05]
+124BB; [7C F2 12, 05, 05]
-124BC; [7C EA 19, 05, 05]
+124BC; [7C F2 19, 05, 05]
-124BD; [7C EA 20, 05, 05]
+124BD; [7C F2 20, 05, 05]
-124BE; [7C EA 27, 05, 05]
+124BE; [7C F2 27, 05, 05]
-124BF; [7C EA 2E, 05, 05]
+124BF; [7C F2 2E, 05, 05]
-124C0; [7C EA 35, 05, 05]
+124C0; [7C F2 35, 05, 05]
-124C1; [7C EA 3C, 05, 05]
+124C1; [7C F2 3C, 05, 05]
-124C2; [7C EA 43, 05, 05]
+124C2; [7C F2 43, 05, 05]
-124C3; [7C EA 4A, 05, 05]
+124C3; [7C F2 4A, 05, 05]
-124C4; [7C EA 51, 05, 05]
+124C4; [7C F2 51, 05, 05]
-124C5; [7C EA 58, 05, 05]
+124C5; [7C F2 58, 05, 05]
-124C6; [7C EA 5F, 05, 05]
+124C6; [7C F2 5F, 05, 05]
-124C7; [7C EA 66, 05, 05]
+124C7; [7C F2 66, 05, 05]
-124C8; [7C EA 6D, 05, 05]
+124C8; [7C F2 6D, 05, 05]
-124C9; [7C EA 74, 05, 05]
+124C9; [7C F2 74, 05, 05]
-124CA; [7C EA 7B, 05, 05]
+124CA; [7C F2 7B, 05, 05]
-124CB; [7C EA 82, 05, 05]
+124CB; [7C F2 82, 05, 05]
-124CC; [7C EA 89, 05, 05]
+124CC; [7C F2 89, 05, 05]
-124CD; [7C EA 90, 05, 05]
+124CD; [7C F2 90, 05, 05]
-124CE; [7C EA 97, 05, 05]
+124CE; [7C F2 97, 05, 05]
-124CF; [7C EA 9E, 05, 05]
+124CF; [7C F2 9E, 05, 05]
-124D0; [7C EA A5, 05, 05]
+124D0; [7C F2 A5, 05, 05]
-124D1; [7C EA AC, 05, 05]
+124D1; [7C F2 AC, 05, 05]
-124D2; [7C EA B3, 05, 05]
+124D2; [7C F2 B3, 05, 05]
-124D3; [7C EA BA, 05, 05]
+124D3; [7C F2 BA, 05, 05]
-124D4; [7C EA C1, 05, 05]
+124D4; [7C F2 C1, 05, 05]
-124D5; [7C EA C8, 05, 05]
+124D5; [7C F2 C8, 05, 05]
-124D6; [7C EA CF, 05, 05]
+124D6; [7C F2 CF, 05, 05]
-124D7; [7C EA D6, 05, 05]
+124D7; [7C F2 D6, 05, 05]
-124D8; [7C EA DD, 05, 05]
+124D8; [7C F2 DD, 05, 05]
-124D9; [7C EA E4, 05, 05]
+124D9; [7C F2 E4, 05, 05]
-124DA; [7C EA EB, 05, 05]
+124DA; [7C F2 EB, 05, 05]
-124DB; [7C EA F2, 05, 05]
+124DB; [7C F2 F2, 05, 05]
-124DC; [7C EA F9, 05, 05]
+124DC; [7C F2 F9, 05, 05]
-124DD; [7C EB 02, 05, 05]
+124DD; [7C F3 02, 05, 05]
-124DE; [7C EB 09, 05, 05]
+124DE; [7C F3 09, 05, 05]
-124DF; [7C EB 10, 05, 05]
+124DF; [7C F3 10, 05, 05]
-124E0; [7C EB 17, 05, 05]
+124E0; [7C F3 17, 05, 05]
-124E1; [7C EB 1E, 05, 05]
+124E1; [7C F3 1E, 05, 05]
-124E2; [7C EB 25, 05, 05]
+124E2; [7C F3 25, 05, 05]
-124E3; [7C EB 2C, 05, 05]
+124E3; [7C F3 2C, 05, 05]
-124E4; [7C EB 33, 05, 05]
+124E4; [7C F3 33, 05, 05]
-124E5; [7C EB 3A, 05, 05]
+124E5; [7C F3 3A, 05, 05]
-124E6; [7C EB 41, 05, 05]
+124E6; [7C F3 41, 05, 05]
-124E7; [7C EB 48, 05, 05]
+124E7; [7C F3 48, 05, 05]
-124E8; [7C EB 4F, 05, 05]
+124E8; [7C F3 4F, 05, 05]
-124E9; [7C EB 56, 05, 05]
+124E9; [7C F3 56, 05, 05]
-124EA; [7C EB 5D, 05, 05]
+124EA; [7C F3 5D, 05, 05]
-124EB; [7C EB 64, 05, 05]
+124EB; [7C F3 64, 05, 05]
-124EC; [7C EB 6B, 05, 05]
+124EC; [7C F3 6B, 05, 05]
-124ED; [7C EB 72, 05, 05]
+124ED; [7C F3 72, 05, 05]
-124EE; [7C EB 79, 05, 05]
+124EE; [7C F3 79, 05, 05]
-124EF; [7C EB 80, 05, 05]
+124EF; [7C F3 80, 05, 05]
-124F0; [7C EB 87, 05, 05]
+124F0; [7C F3 87, 05, 05]
-124F1; [7C EB 8E, 05, 05]
+124F1; [7C F3 8E, 05, 05]
-124F2; [7C EB 95, 05, 05]
+124F2; [7C F3 95, 05, 05]
-124F3; [7C EB 9C, 05, 05]
+124F3; [7C F3 9C, 05, 05]
-124F4; [7C EB A3, 05, 05]
+124F4; [7C F3 A3, 05, 05]
-124F5; [7C EB AA, 05, 05]
+124F5; [7C F3 AA, 05, 05]
-124F6; [7C EB B1, 05, 05]
+124F6; [7C F3 B1, 05, 05]
-124F7; [7C EB B8, 05, 05]
+124F7; [7C F3 B8, 05, 05]
-124F8; [7C EB BF, 05, 05]
+124F8; [7C F3 BF, 05, 05]
-124F9; [7C EB C6, 05, 05]
+124F9; [7C F3 C6, 05, 05]
-124FA; [7C EB CD, 05, 05]
+124FA; [7C F3 CD, 05, 05]
-124FB; [7C EB D4, 05, 05]
+124FB; [7C F3 D4, 05, 05]
-124FC; [7C EB DB, 05, 05]
+124FC; [7C F3 DB, 05, 05]
-124FD; [7C EB E2, 05, 05]
+124FD; [7C F3 E2, 05, 05]
-124FE; [7C EB E9, 05, 05]
+124FE; [7C F3 E9, 05, 05]
-124FF; [7C EB F0, 05, 05]
+124FF; [7C F3 F0, 05, 05]
-12500; [7C EB F7, 05, 05]
+12500; [7C F3 F7, 05, 05]
-12501; [7C EB FE, 05, 05]
+12501; [7C F3 FE, 05, 05]
-12502; [7C EC 07, 05, 05]
+12502; [7C F4 07, 05, 05]
-12503; [7C EC 0E, 05, 05]
+12503; [7C F4 0E, 05, 05]
-12504; [7C EC 15, 05, 05]
+12504; [7C F4 15, 05, 05]
-12505; [7C EC 1C, 05, 05]
+12505; [7C F4 1C, 05, 05]
-12506; [7C EC 23, 05, 05]
+12506; [7C F4 23, 05, 05]
-12507; [7C EC 2A, 05, 05]
+12507; [7C F4 2A, 05, 05]
-12508; [7C EC 31, 05, 05]
+12508; [7C F4 31, 05, 05]
-12509; [7C EC 38, 05, 05]
+12509; [7C F4 38, 05, 05]
-1250A; [7C EC 3F, 05, 05]
+1250A; [7C F4 3F, 05, 05]
-1250B; [7C EC 46, 05, 05]
+1250B; [7C F4 46, 05, 05]
-1250C; [7C EC 4D, 05, 05]
+1250C; [7C F4 4D, 05, 05]
-1250D; [7C EC 54, 05, 05]
+1250D; [7C F4 54, 05, 05]
-1250E; [7C EC 5B, 05, 05]
+1250E; [7C F4 5B, 05, 05]
-1250F; [7C EC 62, 05, 05]
+1250F; [7C F4 62, 05, 05]
-12510; [7C EC 69, 05, 05]
+12510; [7C F4 69, 05, 05]
-12511; [7C EC 70, 05, 05]
+12511; [7C F4 70, 05, 05]
-12512; [7C EC 77, 05, 05]
+12512; [7C F4 77, 05, 05]
-12513; [7C EC 7E, 05, 05]
+12513; [7C F4 7E, 05, 05]
-12514; [7C EC 85, 05, 05]
+12514; [7C F4 85, 05, 05]
-12515; [7C EC 8C, 05, 05]
+12515; [7C F4 8C, 05, 05]
-12516; [7C EC 93, 05, 05]
+12516; [7C F4 93, 05, 05]
-12517; [7C EC 9A, 05, 05]
+12517; [7C F4 9A, 05, 05]
-12518; [7C EC A1, 05, 05]
+12518; [7C F4 A1, 05, 05]
-12519; [7C EC A8, 05, 05]
+12519; [7C F4 A8, 05, 05]
-1251A; [7C EC AF, 05, 05]
+1251A; [7C F4 AF, 05, 05]
-1251B; [7C EC B6, 05, 05]
+1251B; [7C F4 B6, 05, 05]
-1251C; [7C EC BD, 05, 05]
+1251C; [7C F4 BD, 05, 05]
-1251D; [7C EC C4, 05, 05]
+1251D; [7C F4 C4, 05, 05]
-1251E; [7C EC CB, 05, 05]
+1251E; [7C F4 CB, 05, 05]
-1251F; [7C EC D2, 05, 05]
+1251F; [7C F4 D2, 05, 05]
-12520; [7C EC D9, 05, 05]
+12520; [7C F4 D9, 05, 05]
-12521; [7C EC E0, 05, 05]
+12521; [7C F4 E0, 05, 05]
-12522; [7C EC E7, 05, 05]
+12522; [7C F4 E7, 05, 05]
-12523; [7C EC EE, 05, 05]
+12523; [7C F4 EE, 05, 05]
-12524; [7C EC F5, 05, 05]
+12524; [7C F4 F5, 05, 05]
-12525; [7C EC FC, 05, 05]
+12525; [7C F4 FC, 05, 05]
-12526; [7C ED 05, 05, 05]
+12526; [7C F5 05, 05, 05]
-12527; [7C ED 0C, 05, 05]
+12527; [7C F5 0C, 05, 05]
-12528; [7C ED 13, 05, 05]
+12528; [7C F5 13, 05, 05]
-12529; [7C ED 1A, 05, 05]
+12529; [7C F5 1A, 05, 05]
-1252A; [7C ED 21, 05, 05]
+1252A; [7C F5 21, 05, 05]
-1252B; [7C ED 28, 05, 05]
+1252B; [7C F5 28, 05, 05]
-1252C; [7C ED 2F, 05, 05]
+1252C; [7C F5 2F, 05, 05]
-1252D; [7C ED 36, 05, 05]
+1252D; [7C F5 36, 05, 05]
-1252E; [7C ED 3D, 05, 05]
+1252E; [7C F5 3D, 05, 05]
-1252F; [7C ED 44, 05, 05]
+1252F; [7C F5 44, 05, 05]
-12530; [7C ED 4B, 05, 05]
+12530; [7C F5 4B, 05, 05]
-12531; [7C ED 52, 05, 05]
+12531; [7C F5 52, 05, 05]
-12532; [7C ED 59, 05, 05]
+12532; [7C F5 59, 05, 05]
-12533; [7C ED 60, 05, 05]
+12533; [7C F5 60, 05, 05]
-12534; [7C ED 67, 05, 05]
+12534; [7C F5 67, 05, 05]
-12535; [7C ED 6E, 05, 05]
+12535; [7C F5 6E, 05, 05]
-12536; [7C ED 75, 05, 05]
+12536; [7C F5 75, 05, 05]
-12537; [7C ED 7C, 05, 05]
+12537; [7C F5 7C, 05, 05]
-12538; [7C ED 83, 05, 05]
+12538; [7C F5 83, 05, 05]
-12539; [7C ED 8A, 05, 05]
+12539; [7C F5 8A, 05, 05]
-1253A; [7C ED 91, 05, 05]
+1253A; [7C F5 91, 05, 05]
-1253B; [7C ED 98, 05, 05]
+1253B; [7C F5 98, 05, 05]
-1253C; [7C ED 9F, 05, 05]
+1253C; [7C F5 9F, 05, 05]
-1253D; [7C ED A6, 05, 05]
+1253D; [7C F5 A6, 05, 05]
-1253E; [7C ED AD, 05, 05]
+1253E; [7C F5 AD, 05, 05]
-1253F; [7C ED B4, 05, 05]
+1253F; [7C F5 B4, 05, 05]
-12540; [7C ED BB, 05, 05]
+12540; [7C F5 BB, 05, 05]
-12541; [7C ED C2, 05, 05]
+12541; [7C F5 C2, 05, 05]
-12542; [7C ED C9, 05, 05]
+12542; [7C F5 C9, 05, 05]
-12543; [7C ED D0, 05, 05]
+12543; [7C F5 D0, 05, 05]
FDD1 13153; [7D 04 02, 05, 05] # Egyptian Hieroglyphs first primary starts new lead byte (compressible)
@@ -64014,20 +65424,22 @@ FFFF; [EF FF, 05, 05] # Special HIGHEST primary, for ranges
# HOMELESS COLLATION ELEMENTS
FDD0 0041; [, 90, 20]
FDD0 0042; [, 96, 20]
-FDD0 0043; [, A0, 20]
-FDD0 0044; [, A8, 20]
-FDD0 0045; [, AA, 20]
-FDD0 0046; [, AE, 2E]
-FDD0 0047; [, B0, 2E]
-FDD0 0048; [, B2, 20]
-FDD0 0049; [, E5 A4, 1E]
-FDD0 004A; [, E8 80, 20]
-FDD0 004B; [, E8 80, 2E]
-FDD0 004C; [, EB 3B, 10]
-FDD0 004D; [, EB 3B, 1E]
-FDD0 004E; [, EB 3B, 2C]
-FDD0 004F; [, F0 F1, 20]
-FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
+FDD0 0043; [, 9E, 20]
+FDD0 0044; [, A0, 20]
+FDD0 0045; [, A2, 20]
+FDD0 0046; [, A8, 20]
+FDD0 0047; [, AA, 20]
+FDD0 0048; [, AE, 2E]
+FDD0 0049; [, B0, 2E]
+FDD0 004A; [, B2, 20]
+FDD0 004B; [, E5 A4, 1E]
+FDD0 004C; [, E8 80, 20]
+FDD0 004D; [, E8 80, 2E]
+FDD0 004E; [, EB 3B, 10]
+FDD0 004F; [, EB 3B, 1E]
+FDD0 0050; [, EB 3B, 2C]
+FDD0 0051; [, F0 F1, 20]
+FDD0 0052; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
# VALUES BASED ON UCA
[first tertiary ignorable [,,]] # CONSTRUCTED
@@ -64038,11 +65450,11 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[first secondary ignorable [,, 3D 02]] # CONSTRUCTED
[last secondary ignorable [,, 3D 02]] # CONSTRUCTED
[first secondary in primary non-ignorable [X, 05, X]] # U+0009 <CHARACTER TABULATION>
-[last secondary in primary non-ignorable [X, 7C, X]] # U+16AE RUNIC LETTER O
+[last secondary in primary non-ignorable [X, 7C, X]] # U+A7D9 LATIN SMALL LETTER SIGMOID S
[first primary ignorable [, 82, 05]] # U+0332 COMBINING LOW LINE
[last primary ignorable [, FB DB, 05]] # U+00B7 MIDDLE DOT
[first variable [03 04, 05, 05]] # U+0009 <CHARACTER TABULATION>
-[last variable [0B 80 5D, 05, 05]] # U+10A7F OLD SOUTH ARABIAN NUMERIC INDICATOR
+[last variable [0B 94 5D, 05, 05]] # U+10A7F OLD SOUTH ARABIAN NUMERIC INDICATOR
[variable top = 0B FF FF FF]
[first regular [0C 04, 05, 05]] # U+0060 GRAVE ACCENT
[last regular [7D B2 F4, 05, 05]] # U+18CD5 KHITAN SMALL SCRIPT CHARACTER-18CD5
@@ -64054,29 +65466,30 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
# Reordering Tokens => Top Bytes
[reorderingTokens Adlm 78=69 ]
[reorderingTokens Aghb 7C=53 ]
-[reorderingTokens Ahom 71=28 ]
-[reorderingTokens Arab 66=1091 ]
+[reorderingTokens Ahom 71=35 ]
+[reorderingTokens Arab 66=1123 ]
[reorderingTokens Armi 7C=23 ]
[reorderingTokens Armn 64=85 ]
[reorderingTokens Avst 7C=55 ]
-[reorderingTokens Bali 76=61 ]
+[reorderingTokens Bali 76=62 ]
[reorderingTokens Bamu 78=640 ]
[reorderingTokens Bass 78=31 ]
[reorderingTokens Batk 75=39 ]
[reorderingTokens Beng 69=56 ]
[reorderingTokens Bhks 71=48 ]
[reorderingTokens Bopo 7B=76 ]
-[reorderingTokens Brah 71=54 ]
+[reorderingTokens Brah 71=57 ]
[reorderingTokens Bugi 75=24 ]
[reorderingTokens Buhd 75=19 ]
[reorderingTokens CURRENCY 0D=1 ]
[reorderingTokens Cakm 75=39 ]
-[reorderingTokens Cans 76=708 ]
+[reorderingTokens Cans 77=724 ]
[reorderingTokens Cari 7B=50 ]
[reorderingTokens Cham 76=53 ]
[reorderingTokens Cher 76=173 ]
[reorderingTokens Chrs 7C=22 ]
[reorderingTokens Copt 60=122 ]
+[reorderingTokens Cpmn 7C=98 ]
[reorderingTokens Cprt 7C=56 ]
[reorderingTokens Cyrl 61=387 ]
[reorderingTokens DIGIT 0E=1 0F=1 10=1 11=1 12=1 13=1 14=1 15=1 16=1 17=1 18=1 19=1 1A=1 1B=1 1C=1 1D=1 1E=1 1F=1 20=1 21=1 22=1 23=1 24=1 25=1 26=1 27=1 28=1 ]
@@ -64088,10 +65501,10 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Egyp 7D=1072 ]
[reorderingTokens Elba 7C=41 ]
[reorderingTokens Elym 7C=24 ]
-[reorderingTokens Ethi 67=454 ]
+[reorderingTokens Ethi 67=482 ]
[reorderingTokens FIELD-SEPARATOR 02=1 ]
[reorderingTokens Geor 63=174 ]
-[reorderingTokens Glag 62=95 ]
+[reorderingTokens Glag 62=97 ]
[reorderingTokens Gong 71=42 ]
[reorderingTokens Gonm 71=49 ]
[reorderingTokens Goth 7B=26 ]
@@ -64116,17 +65529,17 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Ital 7B=36 ]
[reorderingTokens Java 76=48 ]
[reorderingTokens Kali 75=29 ]
-[reorderingTokens Kana 7A=683 ]
+[reorderingTokens Kana 7A=687 ]
[reorderingTokens Khar 71=38 ]
[reorderingTokens Khmr 75=54 ]
[reorderingTokens Khoj 71=44 ]
[reorderingTokens Kits 7D=1 ]
-[reorderingTokens Knda 6F=57 ]
+[reorderingTokens Knda 6F=58 ]
[reorderingTokens Kthi 71=46 ]
[reorderingTokens LEVEL-SEPARATOR 01=1 ]
[reorderingTokens Lana 76=54 ]
[reorderingTokens Laoo 73=280 ]
-[reorderingTokens Latn 29=2256 2A=2256 2B=2256 2C=2256 2D=2256 2E=2256 2F=2256 30=2256 31=2256 32=2256 33=2256 34=2256 35=2256 36=2256 37=2256 38=2256 39=2256 3A=2256 3B=2256 3C=2256 3D=2256 3E=2256 3F=2256 40=2256 41=2256 42=2256 43=2256 44=2256 45=2256 46=2256 47=2256 48=2256 49=2256 4A=2256 4B=2256 4C=2256 4D=2256 4E=2256 4F=2256 50=2256 51=2256 52=2256 53=2256 54=2256 55=2256 56=2256 57=2256 58=2256 59=2256 5A=2256 5B=2256 5C=2256 5D=2256 ]
+[reorderingTokens Latn 29=2354 2A=2354 2B=2354 2C=2354 2D=2354 2E=2354 2F=2354 30=2354 31=2354 32=2354 33=2354 34=2354 35=2354 36=2354 37=2354 38=2354 39=2354 3A=2354 3B=2354 3C=2354 3D=2354 3E=2354 3F=2354 40=2354 41=2354 42=2354 43=2354 44=2354 45=2354 46=2354 47=2354 48=2354 49=2354 4A=2354 4B=2354 4C=2354 4D=2354 4E=2354 4F=2354 50=2354 51=2354 52=2354 53=2354 54=2354 55=2354 56=2354 57=2354 58=2354 59=2354 5A=2354 5B=2354 5C=2354 5D=2354 ]
[reorderingTokens Lepc 75=40 ]
[reorderingTokens Limb 75=32 ]
[reorderingTokens Lina 7C=342 ]
@@ -64156,12 +65569,13 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Newa 71=61 ]
[reorderingTokens Nkoo 67=34 ]
[reorderingTokens Nshu 7D=1 ]
-[reorderingTokens Ogam 76=27 ]
+[reorderingTokens Ogam 77=27 ]
[reorderingTokens Olck 76=31 ]
[reorderingTokens Orkh 77=74 ]
[reorderingTokens Orya 6C=54 ]
[reorderingTokens Osge 76=73 ]
[reorderingTokens Osma 7C=31 ]
+[reorderingTokens Ougr 7C=19 ]
[reorderingTokens PUNCTUATION 05=1 06=1 07=1 08=1 09=1 0A=1 0B=1 ]
[reorderingTokens Palm 7C=24 ]
[reorderingTokens Pauc 7B=58 ]
@@ -64202,15 +65616,18 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
[reorderingTokens Taml 6D=39 ]
[reorderingTokens Tang 7D=1 ]
[reorderingTokens Tavt 73=301 ]
-[reorderingTokens Telu 6E=57 ]
+[reorderingTokens Telu 6E=58 ]
[reorderingTokens Tfng 67=58 ]
-[reorderingTokens Tglg 75=18 ]
+[reorderingTokens Tglg 75=20 ]
[reorderingTokens Thaa 67=40 ]
[reorderingTokens Thai 72=286 ]
[reorderingTokens Tibt 74=51 ]
[reorderingTokens Tirh 71=52 ]
+[reorderingTokens Tnsa 7C=80 ]
+[reorderingTokens Toto 7B=31 ]
[reorderingTokens Ugar 7C=31 ]
[reorderingTokens Vaii 78=287 ]
+[reorderingTokens Vith 7C=71 ]
[reorderingTokens Wara 7B=66 ]
[reorderingTokens Wcho 7B=45 ]
[reorderingTokens Xpeo 7C=45 ]
@@ -64222,24 +65639,24 @@ FDD0 0050; [, , 3D 02] # CONSTRUCTED FAKE SECONDARY-IGNORABLE
# General Categories => Top Byte
[categories Cc 03{SPACE}=6 ]
-[categories Lm 0C{SYMBOL}=24 0D{CURRENCY}=33 29{Latn}=12 2A{Latn}=12 2B{Latn}=12 2C{Latn}=12 2D{Latn}=12 2E{Latn}=12 2F{Latn}=12 30{Latn}=12 31{Latn}=12 32{Latn}=12 33{Latn}=12 34{Latn}=12 35{Latn}=12 36{Latn}=12 37{Latn}=12 38{Latn}=12 39{Latn}=12 3A{Latn}=12 3B{Latn}=12 3C{Latn}=12 3D{Latn}=12 3E{Latn}=12 3F{Latn}=12 40{Latn}=12 41{Latn}=12 42{Latn}=12 43{Latn}=12 44{Latn}=12 45{Latn}=12 46{Latn}=12 47{Latn}=12 48{Latn}=12 49{Latn}=12 4A{Latn}=12 4B{Latn}=12 4C{Latn}=12 4D{Latn}=12 4E{Latn}=12 4F{Latn}=12 50{Latn}=12 51{Latn}=12 52{Latn}=12 53{Latn}=12 54{Latn}=12 55{Latn}=12 56{Latn}=12 57{Latn}=12 58{Latn}=12 59{Latn}=12 5A{Latn}=12 5B{Latn}=12 5C{Latn}=12 5D{Latn}=12 61{Cyrl}=2 64{Armn}=1 65{Hebr Phnx Samr}=1 66{Arab}=2 67{Syrc Mand Thaa Nkoo Tfng Ethi}=2 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=7 78{Vaii Bamu Bass Mend Medf Adlm}=2 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=27 ]
+[categories Lm 0C{SYMBOL}=37 0D{CURRENCY}=35 29{Latn}=13 2A{Latn}=13 2B{Latn}=13 2C{Latn}=13 2D{Latn}=13 2E{Latn}=13 2F{Latn}=13 30{Latn}=13 31{Latn}=13 32{Latn}=13 33{Latn}=13 34{Latn}=13 35{Latn}=13 36{Latn}=13 37{Latn}=13 38{Latn}=13 39{Latn}=13 3A{Latn}=13 3B{Latn}=13 3C{Latn}=13 3D{Latn}=13 3E{Latn}=13 3F{Latn}=13 40{Latn}=13 41{Latn}=13 42{Latn}=13 43{Latn}=13 44{Latn}=13 45{Latn}=13 46{Latn}=13 47{Latn}=13 48{Latn}=13 49{Latn}=13 4A{Latn}=13 4B{Latn}=13 4C{Latn}=13 4D{Latn}=13 4E{Latn}=13 4F{Latn}=13 50{Latn}=13 51{Latn}=13 52{Latn}=13 53{Latn}=13 54{Latn}=13 55{Latn}=13 56{Latn}=13 57{Latn}=13 58{Latn}=13 59{Latn}=13 5A{Latn}=13 5B{Latn}=13 5C{Latn}=13 5D{Latn}=13 61{Cyrl}=2 64{Armn}=1 65{Hebr Phnx Samr}=1 66{Arab}=3 67{Syrc Mand Thaa Nkoo Tfng Ethi}=2 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge}=7 78{Vaii Bamu Bass Mend Medf Adlm}=2 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Toto Wcho Lyci Cari Lydi Ital Goth}=27 ]
[categories Lo 68{Deva}=11 7A{Hira Hrkt Kana}=2 ]
-[categories Mc 68{Deva}=10 69{Beng}=10 6A{Guru}=3 6B{Gujr}=6 6C{Orya}=10 6D{Taml}=14 6E{Telu}=4 6F{Knda}=7 70{Mlym}=13 71{Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks}=152 74{Tibt Zanb Soyo}=2 75{Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr}=84 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=31 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=55 ]
-[categories Mn 29{Latn}=51 2A{Latn}=51 2B{Latn}=51 2C{Latn}=51 2D{Latn}=51 2E{Latn}=51 2F{Latn}=51 30{Latn}=51 31{Latn}=51 32{Latn}=51 33{Latn}=51 34{Latn}=51 35{Latn}=51 36{Latn}=51 37{Latn}=51 38{Latn}=51 39{Latn}=51 3A{Latn}=51 3B{Latn}=51 3C{Latn}=51 3D{Latn}=51 3E{Latn}=51 3F{Latn}=51 40{Latn}=51 41{Latn}=51 42{Latn}=51 43{Latn}=51 44{Latn}=51 45{Latn}=51 46{Latn}=51 47{Latn}=51 48{Latn}=51 49{Latn}=51 4A{Latn}=51 4B{Latn}=51 4C{Latn}=51 4D{Latn}=51 4E{Latn}=51 4F{Latn}=51 50{Latn}=51 51{Latn}=51 52{Latn}=51 53{Latn}=51 54{Latn}=51 55{Latn}=51 56{Latn}=51 57{Latn}=51 58{Latn}=51 59{Latn}=51 5A{Latn}=51 5B{Latn}=51 5C{Latn}=51 5D{Latn}=51 61{Cyrl}=42 62{Glag Perm}=43 65{Hebr Phnx Samr}=3 67{Syrc Mand Thaa Nkoo Tfng Ethi}=11 68{Deva}=16 69{Beng}=7 6A{Guru}=9 6B{Gujr}=10 6C{Orya}=9 6D{Taml}=2 6E{Telu}=15 6F{Knda}=17 70{Mlym}=9 71{Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks}=171 72{Thai}=10 73{Laoo Tavt}=19 74{Tibt Zanb Soyo}=120 75{Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr}=134 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=53 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=5 ]
-[categories Nd 0E{DIGIT}=1 0F{DIGIT}=1 13{DIGIT}=72 15{DIGIT}=126 17{DIGIT}=101 19{DIGIT}=88 1B{DIGIT}=84 1D{DIGIT}=76 1F{DIGIT}=73 21{DIGIT}=74 23{DIGIT}=73 25{DIGIT}=73 ]
-[categories Nl 10{DIGIT}=6 11{DIGIT}=43 12{DIGIT}=17 13{DIGIT}=1 15{DIGIT}=12 17{DIGIT}=16 19{DIGIT}=16 1B{DIGIT}=17 1D{DIGIT}=18 1F{DIGIT}=10 21{DIGIT}=10 23{DIGIT}=9 25{DIGIT}=11 77{Runr Hung Orkh}=3 78{Vaii Bamu Bass Mend Medf Adlm}=10 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Wcho Lyci Cari Lydi Ital Goth}=2 ]
+[categories Mc 68{Deva}=10 69{Beng}=10 6A{Guru}=3 6B{Gujr}=6 6C{Orya}=10 6D{Taml}=14 6E{Telu}=4 6F{Knda}=7 70{Mlym}=13 71{Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks}=152 74{Tibt Zanb Soyo}=2 75{Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr}=86 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge}=31 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Toto Wcho Lyci Cari Lydi Ital Goth}=55 ]
+[categories Mn 29{Latn}=54 2A{Latn}=54 2B{Latn}=54 2C{Latn}=54 2D{Latn}=54 2E{Latn}=54 2F{Latn}=54 30{Latn}=54 31{Latn}=54 32{Latn}=54 33{Latn}=54 34{Latn}=54 35{Latn}=54 36{Latn}=54 37{Latn}=54 38{Latn}=54 39{Latn}=54 3A{Latn}=54 3B{Latn}=54 3C{Latn}=54 3D{Latn}=54 3E{Latn}=54 3F{Latn}=54 40{Latn}=54 41{Latn}=54 42{Latn}=54 43{Latn}=54 44{Latn}=54 45{Latn}=54 46{Latn}=54 47{Latn}=54 48{Latn}=54 49{Latn}=54 4A{Latn}=54 4B{Latn}=54 4C{Latn}=54 4D{Latn}=54 4E{Latn}=54 4F{Latn}=54 50{Latn}=54 51{Latn}=54 52{Latn}=54 53{Latn}=54 54{Latn}=54 55{Latn}=54 56{Latn}=54 57{Latn}=54 58{Latn}=54 59{Latn}=54 5A{Latn}=54 5B{Latn}=54 5C{Latn}=54 5D{Latn}=54 61{Cyrl}=42 62{Glag Perm}=43 65{Hebr Phnx Samr}=3 67{Syrc Mand Thaa Nkoo Tfng Ethi}=11 68{Deva}=16 69{Beng}=7 6A{Guru}=9 6B{Gujr}=10 6C{Orya}=9 6D{Taml}=2 6E{Telu}=15 6F{Knda}=17 70{Mlym}=9 71{Sinh Mtei Sylo Saur Kthi Mahj Shrd Khoj Sind Mult Gran Newa Tirh Sidd Modi Takr Diak Nand Dogr Ahom Gonm Gong Sund Brah Khar Bhks}=175 72{Thai}=10 73{Laoo Tavt}=19 74{Tibt Zanb Soyo}=120 75{Marc Lepc Phag Limb Tglg Hano Buhd Tagb Bugi Maka Batk Rjng Kali Mymr Rohg Cakm Khmr}=133 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge}=53 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Toto Wcho Lyci Cari Lydi Ital Goth}=5 ]
+[categories Nd 0E{DIGIT}=1 0F{DIGIT}=1 13{DIGIT}=73 15{DIGIT}=127 17{DIGIT}=102 19{DIGIT}=89 1B{DIGIT}=85 1D{DIGIT}=77 1F{DIGIT}=74 21{DIGIT}=75 23{DIGIT}=74 25{DIGIT}=74 ]
+[categories Nl 10{DIGIT}=6 11{DIGIT}=43 12{DIGIT}=17 13{DIGIT}=1 15{DIGIT}=12 17{DIGIT}=16 19{DIGIT}=16 1B{DIGIT}=17 1D{DIGIT}=18 1F{DIGIT}=10 21{DIGIT}=10 23{DIGIT}=9 25{DIGIT}=11 77{Cans Ogam Runr Hung Orkh}=3 78{Vaii Bamu Bass Mend Medf Adlm}=10 7B{Bopo Yiii Lisu Plrd Wara Pauc Hmng Hmnp Toto Wcho Lyci Cari Lydi Ital Goth}=2 ]
[categories No 10{DIGIT}=125 11{DIGIT}=182 12{DIGIT}=122 13{DIGIT}=9 15{DIGIT}=59 17{DIGIT}=39 19{DIGIT}=37 1B{DIGIT}=33 1D{DIGIT}=32 1F{DIGIT}=23 21{DIGIT}=23 23{DIGIT}=23 25{DIGIT}=22 ]
[categories Pc 05{PUNCTUATION}=7 0A{PUNCTUATION}=3 ]
-[categories Pd 05{PUNCTUATION}=23 0A{PUNCTUATION}=1 0B{PUNCTUATION}=1 ]
-[categories Pe 09{PUNCTUATION}=42 0A{PUNCTUATION}=31 ]
+[categories Pd 05{PUNCTUATION}=24 0B{PUNCTUATION}=2 ]
+[categories Pe 09{PUNCTUATION}=41 0A{PUNCTUATION}=36 ]
[categories Pf 09{PUNCTUATION}=4 0A{PUNCTUATION}=6 ]
[categories Pi 05{PUNCTUATION}=1 09{PUNCTUATION}=6 0A{PUNCTUATION}=6 ]
-[categories Po 05{PUNCTUATION}=6 06{PUNCTUATION}=4 07{PUNCTUATION}=111 08{PUNCTUATION}=8 09{PUNCTUATION}=158 0A{PUNCTUATION}=87 0B{PUNCTUATION}=212 ]
-[categories Ps 09{PUNCTUATION}=183 0A{PUNCTUATION}=41 ]
-[categories Sc 0D{CURRENCY}=61 ]
-[categories Sk 0C{SYMBOL}=89 0D{CURRENCY}=5 ]
+[categories Po 05{PUNCTUATION}=6 06{PUNCTUATION}=4 07{PUNCTUATION}=113 08{PUNCTUATION}=8 09{PUNCTUATION}=167 0A{PUNCTUATION}=78 0B{PUNCTUATION}=222 ]
+[categories Ps 09{PUNCTUATION}=182 0A{PUNCTUATION}=46 ]
+[categories Sc 0D{CURRENCY}=62 ]
+[categories Sk 0C{SYMBOL}=91 0D{CURRENCY}=5 ]
[categories Sm 0C{SYMBOL}=947 ]
-[categories So 0C{SYMBOL}=2691 0D{CURRENCY}=2645 15{DIGIT}=1 17{DIGIT}=3 19{DIGIT}=1 1B{DIGIT}=1 1D{DIGIT}=1 1F{DIGIT}=1 21{DIGIT}=1 23{DIGIT}=1 29{Latn}=77 2A{Latn}=77 2B{Latn}=77 2C{Latn}=77 2D{Latn}=77 2E{Latn}=77 2F{Latn}=77 30{Latn}=77 31{Latn}=77 32{Latn}=77 33{Latn}=77 34{Latn}=77 35{Latn}=77 36{Latn}=77 37{Latn}=77 38{Latn}=77 39{Latn}=77 3A{Latn}=77 3B{Latn}=77 3C{Latn}=77 3D{Latn}=77 3E{Latn}=77 3F{Latn}=77 40{Latn}=77 41{Latn}=77 42{Latn}=77 43{Latn}=77 44{Latn}=77 45{Latn}=77 46{Latn}=77 47{Latn}=77 48{Latn}=77 49{Latn}=77 4A{Latn}=77 4B{Latn}=77 4C{Latn}=77 4D{Latn}=77 4E{Latn}=77 4F{Latn}=77 50{Latn}=77 51{Latn}=77 52{Latn}=77 53{Latn}=77 54{Latn}=77 55{Latn}=77 56{Latn}=77 57{Latn}=77 58{Latn}=77 59{Latn}=77 5A{Latn}=77 5B{Latn}=77 5C{Latn}=77 5D{Latn}=77 66{Arab}=2 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge Cans Ogam}=2 7C{Dsrt Shaw Dupl Osma Elba Aghb Sora Mroo Linb Lina Cprt Sarb Narb Avst Palm Nbat Hatr Armi Prti Phli Phlp Elym Mani Sogo Sogd Yezi Chrs Ugar Xpeo Xsux}=1 E5{TRAILING}=1 E6{TRAILING}=1 E7{TRAILING}=1 E8{TRAILING}=1 E9{TRAILING}=1 EA{TRAILING}=1 EB{TRAILING}=1 EC{TRAILING}=1 ED{TRAILING}=1 EE{TRAILING}=1 EF{TRAILING}=1 ]
+[categories So 0C{SYMBOL}=2661 0D{CURRENCY}=2849 15{DIGIT}=1 17{DIGIT}=3 19{DIGIT}=1 1B{DIGIT}=1 1D{DIGIT}=1 1F{DIGIT}=1 21{DIGIT}=1 23{DIGIT}=1 29{Latn}=77 2A{Latn}=77 2B{Latn}=77 2C{Latn}=77 2D{Latn}=77 2E{Latn}=77 2F{Latn}=77 30{Latn}=77 31{Latn}=77 32{Latn}=77 33{Latn}=77 34{Latn}=77 35{Latn}=77 36{Latn}=77 37{Latn}=77 38{Latn}=77 39{Latn}=77 3A{Latn}=77 3B{Latn}=77 3C{Latn}=77 3D{Latn}=77 3E{Latn}=77 3F{Latn}=77 40{Latn}=77 41{Latn}=77 42{Latn}=77 43{Latn}=77 44{Latn}=77 45{Latn}=77 46{Latn}=77 47{Latn}=77 48{Latn}=77 49{Latn}=77 4A{Latn}=77 4B{Latn}=77 4C{Latn}=77 4D{Latn}=77 4E{Latn}=77 4F{Latn}=77 50{Latn}=77 51{Latn}=77 52{Latn}=77 53{Latn}=77 54{Latn}=77 55{Latn}=77 56{Latn}=77 57{Latn}=77 58{Latn}=77 59{Latn}=77 5A{Latn}=77 5B{Latn}=77 5C{Latn}=77 5D{Latn}=77 66{Arab}=2 76{Tale Talu Lana Cham Bali Java Mong Olck Cher Osge}=2 7C{Dsrt Shaw Dupl Osma Elba Aghb Vith Sora Mroo Tnsa Linb Lina Cprt Cpmn Sarb Narb Avst Palm Nbat Hatr Armi Prti Phli Phlp Elym Mani Sogo Sogd Ougr Yezi Chrs Ugar Xpeo Xsux}=1 E5{TRAILING}=1 E6{TRAILING}=1 E7{TRAILING}=1 E8{TRAILING}=1 E9{TRAILING}=1 EA{TRAILING}=1 EB{TRAILING}=1 EC{TRAILING}=1 ED{TRAILING}=1 EE{TRAILING}=1 EF{TRAILING}=1 ]
[categories Zl 03{SPACE}=1 ]
[categories Zp 03{SPACE}=1 ]
[categories Zs 03{SPACE}=1 04{SPACE}=17 05{PUNCTUATION}=6 0C{SYMBOL}=29 60{Grek Copt}=1 ]
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt b/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
index 7144fb8935c..a1a34d6bb6f 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
@@ -1,6 +1,6 @@
-# NormalizationCorrections-13.0.0.txt
-# Date: 2019-09-09, 19:50:00 GMT [KW, LI]
-# © 2019 Unicode®, Inc.
+# NormalizationCorrections-14.0.0.txt
+# Date: 2021-03-16, 22:07:00 GMT [KW, LI]
+# © 2021 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt b/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
index d5f13978ec6..7f45760cf95 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
@@ -1,6 +1,6 @@
-# NormalizationTest-13.0.0.txt
-# Date: 2019-09-08, 23:31:12 GMT
-# © 2019 Unicode®, Inc.
+# NormalizationTest-14.0.0.txt
+# Date: 2021-05-28, 21:49:12 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -2409,6 +2409,9 @@
A69C;A69C;A69C;044A;044A;
A69D;A69D;A69D;044C;044C;
A770;A770;A770;A76F;A76F;
+A7F2;A7F2;A7F2;0043;0043;
+A7F3;A7F3;A7F3;0046;0046;
+A7F4;A7F4;A7F4;0051;0051;
A7F8;A7F8;A7F8;0126;0126;
A7F9;A7F9;A7F9;0153;0153;
AB5C;AB5C;AB5C;A727;A727;
@@ -15127,6 +15130,62 @@ FFEB;FFEB;FFEB;2192;2192;
FFEC;FFEC;FFEC;2193;2193;
FFED;FFED;FFED;25A0;25A0;
FFEE;FFEE;FFEE;25CB;25CB;
+10781;10781;10781;02D0;02D0;
+10782;10782;10782;02D1;02D1;
+10783;10783;10783;00E6;00E6;
+10784;10784;10784;0299;0299;
+10785;10785;10785;0253;0253;
+10787;10787;10787;02A3;02A3;
+10788;10788;10788;AB66;AB66;
+10789;10789;10789;02A5;02A5;
+1078A;1078A;1078A;02A4;02A4;
+1078B;1078B;1078B;0256;0256;
+1078C;1078C;1078C;0257;0257;
+1078D;1078D;1078D;1D91;1D91;
+1078E;1078E;1078E;0258;0258;
+1078F;1078F;1078F;025E;025E;
+10790;10790;10790;02A9;02A9;
+10791;10791;10791;0264;0264;
+10792;10792;10792;0262;0262;
+10793;10793;10793;0260;0260;
+10794;10794;10794;029B;029B;
+10795;10795;10795;0127;0127;
+10796;10796;10796;029C;029C;
+10797;10797;10797;0267;0267;
+10798;10798;10798;0284;0284;
+10799;10799;10799;02AA;02AA;
+1079A;1079A;1079A;02AB;02AB;
+1079B;1079B;1079B;026C;026C;
+1079C;1079C;1079C;1DF04;1DF04;
+1079D;1079D;1079D;A78E;A78E;
+1079E;1079E;1079E;026E;026E;
+1079F;1079F;1079F;1DF05;1DF05;
+107A0;107A0;107A0;028E;028E;
+107A1;107A1;107A1;1DF06;1DF06;
+107A2;107A2;107A2;00F8;00F8;
+107A3;107A3;107A3;0276;0276;
+107A4;107A4;107A4;0277;0277;
+107A5;107A5;107A5;0071;0071;
+107A6;107A6;107A6;027A;027A;
+107A7;107A7;107A7;1DF08;1DF08;
+107A8;107A8;107A8;027D;027D;
+107A9;107A9;107A9;027E;027E;
+107AA;107AA;107AA;0280;0280;
+107AB;107AB;107AB;02A8;02A8;
+107AC;107AC;107AC;02A6;02A6;
+107AD;107AD;107AD;AB67;AB67;
+107AE;107AE;107AE;02A7;02A7;
+107AF;107AF;107AF;0288;0288;
+107B0;107B0;107B0;2C71;2C71;
+107B2;107B2;107B2;028F;028F;
+107B3;107B3;107B3;02A1;02A1;
+107B4;107B4;107B4;02A2;02A2;
+107B5;107B5;107B5;0298;0298;
+107B6;107B6;107B6;01C0;01C0;
+107B7;107B7;107B7;01C1;01C1;
+107B8;107B8;107B8;01C2;01C2;
+107B9;107B9;107B9;1DF0A;1DF0A;
+107BA;107BA;107BA;1DF1E;1DF1E;
1109A;1109A;11099 110BA;1109A;11099 110BA;
1109C;1109C;1109B 110BA;1109C;1109B 110BA;
110AB;110AB;110A5 110BA;110AB;110A5 110BA;
@@ -17025,66 +17084,66 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0314 0315 0300 05AE 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;
0061 035C 0315 0300 0315 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;
0061 0315 035C 0315 0300 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;
-0061 059A 0316 302A 0316 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;
-0061 0316 059A 0316 302A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;
-0061 059A 0316 302A 0317 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;
-0061 0317 059A 0316 302A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;
-0061 059A 0316 302A 0318 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;
-0061 0318 059A 0316 302A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;
-0061 059A 0316 302A 0319 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;
-0061 0319 059A 0316 302A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;
+0061 059A 0316 1DFA 0316 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 0316 059A 0062;
+0061 0316 059A 0316 1DFA 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 0316 059A 0062;0061 1DFA 0316 0316 059A 0062;
+0061 059A 0316 1DFA 0317 0062;0061 1DFA 0316 0317 059A 0062;0061 1DFA 0316 0317 059A 0062;0061 1DFA 0316 0317 059A 0062;0061 1DFA 0316 0317 059A 0062;
+0061 0317 059A 0316 1DFA 0062;0061 1DFA 0317 0316 059A 0062;0061 1DFA 0317 0316 059A 0062;0061 1DFA 0317 0316 059A 0062;0061 1DFA 0317 0316 059A 0062;
+0061 059A 0316 1DFA 0318 0062;0061 1DFA 0316 0318 059A 0062;0061 1DFA 0316 0318 059A 0062;0061 1DFA 0316 0318 059A 0062;0061 1DFA 0316 0318 059A 0062;
+0061 0318 059A 0316 1DFA 0062;0061 1DFA 0318 0316 059A 0062;0061 1DFA 0318 0316 059A 0062;0061 1DFA 0318 0316 059A 0062;0061 1DFA 0318 0316 059A 0062;
+0061 059A 0316 1DFA 0319 0062;0061 1DFA 0316 0319 059A 0062;0061 1DFA 0316 0319 059A 0062;0061 1DFA 0316 0319 059A 0062;0061 1DFA 0316 0319 059A 0062;
+0061 0319 059A 0316 1DFA 0062;0061 1DFA 0319 0316 059A 0062;0061 1DFA 0319 0316 059A 0062;0061 1DFA 0319 0316 059A 0062;0061 1DFA 0319 0316 059A 0062;
0061 035C 0315 0300 031A 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062;
0061 031A 035C 0315 0300 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062;
-0061 302A 031B 1DCE 031B 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;
-0061 031B 302A 031B 1DCE 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;
-0061 059A 0316 302A 031C 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;
-0061 031C 059A 0316 302A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;
-0061 059A 0316 302A 031D 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;
-0061 031D 059A 0316 302A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;
-0061 059A 0316 302A 031E 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;
-0061 031E 059A 0316 302A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;
-0061 059A 0316 302A 031F 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;
-0061 031F 059A 0316 302A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;
-0061 059A 0316 302A 0320 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;
-0061 0320 059A 0316 302A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;
+0061 1DFA 031B 1DCE 031B 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062;
+0061 031B 1DFA 031B 1DCE 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062;0061 1DCE 031B 031B 1DFA 0062;
+0061 059A 0316 1DFA 031C 0062;0061 1DFA 0316 031C 059A 0062;0061 1DFA 0316 031C 059A 0062;0061 1DFA 0316 031C 059A 0062;0061 1DFA 0316 031C 059A 0062;
+0061 031C 059A 0316 1DFA 0062;0061 1DFA 031C 0316 059A 0062;0061 1DFA 031C 0316 059A 0062;0061 1DFA 031C 0316 059A 0062;0061 1DFA 031C 0316 059A 0062;
+0061 059A 0316 1DFA 031D 0062;0061 1DFA 0316 031D 059A 0062;0061 1DFA 0316 031D 059A 0062;0061 1DFA 0316 031D 059A 0062;0061 1DFA 0316 031D 059A 0062;
+0061 031D 059A 0316 1DFA 0062;0061 1DFA 031D 0316 059A 0062;0061 1DFA 031D 0316 059A 0062;0061 1DFA 031D 0316 059A 0062;0061 1DFA 031D 0316 059A 0062;
+0061 059A 0316 1DFA 031E 0062;0061 1DFA 0316 031E 059A 0062;0061 1DFA 0316 031E 059A 0062;0061 1DFA 0316 031E 059A 0062;0061 1DFA 0316 031E 059A 0062;
+0061 031E 059A 0316 1DFA 0062;0061 1DFA 031E 0316 059A 0062;0061 1DFA 031E 0316 059A 0062;0061 1DFA 031E 0316 059A 0062;0061 1DFA 031E 0316 059A 0062;
+0061 059A 0316 1DFA 031F 0062;0061 1DFA 0316 031F 059A 0062;0061 1DFA 0316 031F 059A 0062;0061 1DFA 0316 031F 059A 0062;0061 1DFA 0316 031F 059A 0062;
+0061 031F 059A 0316 1DFA 0062;0061 1DFA 031F 0316 059A 0062;0061 1DFA 031F 0316 059A 0062;0061 1DFA 031F 0316 059A 0062;0061 1DFA 031F 0316 059A 0062;
+0061 059A 0316 1DFA 0320 0062;0061 1DFA 0316 0320 059A 0062;0061 1DFA 0316 0320 059A 0062;0061 1DFA 0316 0320 059A 0062;0061 1DFA 0316 0320 059A 0062;
+0061 0320 059A 0316 1DFA 0062;0061 1DFA 0320 0316 059A 0062;0061 1DFA 0320 0316 059A 0062;0061 1DFA 0320 0316 059A 0062;0061 1DFA 0320 0316 059A 0062;
0061 1DCE 0321 0F74 0321 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;
0061 0321 1DCE 0321 0F74 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;
0061 1DCE 0321 0F74 0322 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062;
0061 0322 1DCE 0321 0F74 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062;
-0061 059A 0316 302A 0323 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;
-0061 0323 059A 0316 302A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062;
-0061 059A 0316 302A 0324 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;
-0061 0324 059A 0316 302A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;
-0061 059A 0316 302A 0325 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;
-0061 0325 059A 0316 302A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062;
-0061 059A 0316 302A 0326 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;
-0061 0326 059A 0316 302A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;
+0061 059A 0316 1DFA 0323 0062;0061 1DFA 0316 0323 059A 0062;0061 1DFA 0316 0323 059A 0062;0061 1DFA 0316 0323 059A 0062;0061 1DFA 0316 0323 059A 0062;
+0061 0323 059A 0316 1DFA 0062;1EA1 1DFA 0316 059A 0062;0061 1DFA 0323 0316 059A 0062;1EA1 1DFA 0316 059A 0062;0061 1DFA 0323 0316 059A 0062;
+0061 059A 0316 1DFA 0324 0062;0061 1DFA 0316 0324 059A 0062;0061 1DFA 0316 0324 059A 0062;0061 1DFA 0316 0324 059A 0062;0061 1DFA 0316 0324 059A 0062;
+0061 0324 059A 0316 1DFA 0062;0061 1DFA 0324 0316 059A 0062;0061 1DFA 0324 0316 059A 0062;0061 1DFA 0324 0316 059A 0062;0061 1DFA 0324 0316 059A 0062;
+0061 059A 0316 1DFA 0325 0062;0061 1DFA 0316 0325 059A 0062;0061 1DFA 0316 0325 059A 0062;0061 1DFA 0316 0325 059A 0062;0061 1DFA 0316 0325 059A 0062;
+0061 0325 059A 0316 1DFA 0062;1E01 1DFA 0316 059A 0062;0061 1DFA 0325 0316 059A 0062;1E01 1DFA 0316 059A 0062;0061 1DFA 0325 0316 059A 0062;
+0061 059A 0316 1DFA 0326 0062;0061 1DFA 0316 0326 059A 0062;0061 1DFA 0316 0326 059A 0062;0061 1DFA 0316 0326 059A 0062;0061 1DFA 0316 0326 059A 0062;
+0061 0326 059A 0316 1DFA 0062;0061 1DFA 0326 0316 059A 0062;0061 1DFA 0326 0316 059A 0062;0061 1DFA 0326 0316 059A 0062;0061 1DFA 0326 0316 059A 0062;
0061 1DCE 0321 0F74 0327 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062;
0061 0327 1DCE 0321 0F74 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062;
0061 1DCE 0321 0F74 0328 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062;
0061 0328 1DCE 0321 0F74 0062;0105 0F74 0321 1DCE 0062;0061 0F74 0328 0321 1DCE 0062;0105 0F74 0321 1DCE 0062;0061 0F74 0328 0321 1DCE 0062;
-0061 059A 0316 302A 0329 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;
-0061 0329 059A 0316 302A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;
-0061 059A 0316 302A 032A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;
-0061 032A 059A 0316 302A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;
-0061 059A 0316 302A 032B 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;
-0061 032B 059A 0316 302A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;
-0061 059A 0316 302A 032C 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;
-0061 032C 059A 0316 302A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;
-0061 059A 0316 302A 032D 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;
-0061 032D 059A 0316 302A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;
-0061 059A 0316 302A 032E 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;
-0061 032E 059A 0316 302A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;
-0061 059A 0316 302A 032F 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;
-0061 032F 059A 0316 302A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;
-0061 059A 0316 302A 0330 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;
-0061 0330 059A 0316 302A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;
-0061 059A 0316 302A 0331 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;
-0061 0331 059A 0316 302A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;
-0061 059A 0316 302A 0332 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;
-0061 0332 059A 0316 302A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;
-0061 059A 0316 302A 0333 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;
-0061 0333 059A 0316 302A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;
+0061 059A 0316 1DFA 0329 0062;0061 1DFA 0316 0329 059A 0062;0061 1DFA 0316 0329 059A 0062;0061 1DFA 0316 0329 059A 0062;0061 1DFA 0316 0329 059A 0062;
+0061 0329 059A 0316 1DFA 0062;0061 1DFA 0329 0316 059A 0062;0061 1DFA 0329 0316 059A 0062;0061 1DFA 0329 0316 059A 0062;0061 1DFA 0329 0316 059A 0062;
+0061 059A 0316 1DFA 032A 0062;0061 1DFA 0316 032A 059A 0062;0061 1DFA 0316 032A 059A 0062;0061 1DFA 0316 032A 059A 0062;0061 1DFA 0316 032A 059A 0062;
+0061 032A 059A 0316 1DFA 0062;0061 1DFA 032A 0316 059A 0062;0061 1DFA 032A 0316 059A 0062;0061 1DFA 032A 0316 059A 0062;0061 1DFA 032A 0316 059A 0062;
+0061 059A 0316 1DFA 032B 0062;0061 1DFA 0316 032B 059A 0062;0061 1DFA 0316 032B 059A 0062;0061 1DFA 0316 032B 059A 0062;0061 1DFA 0316 032B 059A 0062;
+0061 032B 059A 0316 1DFA 0062;0061 1DFA 032B 0316 059A 0062;0061 1DFA 032B 0316 059A 0062;0061 1DFA 032B 0316 059A 0062;0061 1DFA 032B 0316 059A 0062;
+0061 059A 0316 1DFA 032C 0062;0061 1DFA 0316 032C 059A 0062;0061 1DFA 0316 032C 059A 0062;0061 1DFA 0316 032C 059A 0062;0061 1DFA 0316 032C 059A 0062;
+0061 032C 059A 0316 1DFA 0062;0061 1DFA 032C 0316 059A 0062;0061 1DFA 032C 0316 059A 0062;0061 1DFA 032C 0316 059A 0062;0061 1DFA 032C 0316 059A 0062;
+0061 059A 0316 1DFA 032D 0062;0061 1DFA 0316 032D 059A 0062;0061 1DFA 0316 032D 059A 0062;0061 1DFA 0316 032D 059A 0062;0061 1DFA 0316 032D 059A 0062;
+0061 032D 059A 0316 1DFA 0062;0061 1DFA 032D 0316 059A 0062;0061 1DFA 032D 0316 059A 0062;0061 1DFA 032D 0316 059A 0062;0061 1DFA 032D 0316 059A 0062;
+0061 059A 0316 1DFA 032E 0062;0061 1DFA 0316 032E 059A 0062;0061 1DFA 0316 032E 059A 0062;0061 1DFA 0316 032E 059A 0062;0061 1DFA 0316 032E 059A 0062;
+0061 032E 059A 0316 1DFA 0062;0061 1DFA 032E 0316 059A 0062;0061 1DFA 032E 0316 059A 0062;0061 1DFA 032E 0316 059A 0062;0061 1DFA 032E 0316 059A 0062;
+0061 059A 0316 1DFA 032F 0062;0061 1DFA 0316 032F 059A 0062;0061 1DFA 0316 032F 059A 0062;0061 1DFA 0316 032F 059A 0062;0061 1DFA 0316 032F 059A 0062;
+0061 032F 059A 0316 1DFA 0062;0061 1DFA 032F 0316 059A 0062;0061 1DFA 032F 0316 059A 0062;0061 1DFA 032F 0316 059A 0062;0061 1DFA 032F 0316 059A 0062;
+0061 059A 0316 1DFA 0330 0062;0061 1DFA 0316 0330 059A 0062;0061 1DFA 0316 0330 059A 0062;0061 1DFA 0316 0330 059A 0062;0061 1DFA 0316 0330 059A 0062;
+0061 0330 059A 0316 1DFA 0062;0061 1DFA 0330 0316 059A 0062;0061 1DFA 0330 0316 059A 0062;0061 1DFA 0330 0316 059A 0062;0061 1DFA 0330 0316 059A 0062;
+0061 059A 0316 1DFA 0331 0062;0061 1DFA 0316 0331 059A 0062;0061 1DFA 0316 0331 059A 0062;0061 1DFA 0316 0331 059A 0062;0061 1DFA 0316 0331 059A 0062;
+0061 0331 059A 0316 1DFA 0062;0061 1DFA 0331 0316 059A 0062;0061 1DFA 0331 0316 059A 0062;0061 1DFA 0331 0316 059A 0062;0061 1DFA 0331 0316 059A 0062;
+0061 059A 0316 1DFA 0332 0062;0061 1DFA 0316 0332 059A 0062;0061 1DFA 0316 0332 059A 0062;0061 1DFA 0316 0332 059A 0062;0061 1DFA 0316 0332 059A 0062;
+0061 0332 059A 0316 1DFA 0062;0061 1DFA 0332 0316 059A 0062;0061 1DFA 0332 0316 059A 0062;0061 1DFA 0332 0316 059A 0062;0061 1DFA 0332 0316 059A 0062;
+0061 059A 0316 1DFA 0333 0062;0061 1DFA 0316 0333 059A 0062;0061 1DFA 0316 0333 059A 0062;0061 1DFA 0316 0333 059A 0062;0061 1DFA 0316 0333 059A 0062;
+0061 0333 059A 0316 1DFA 0062;0061 1DFA 0333 0316 059A 0062;0061 1DFA 0333 0316 059A 0062;0061 1DFA 0333 0316 059A 0062;0061 1DFA 0333 0316 059A 0062;
0061 16FF0 0334 0334 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;
0061 0334 16FF0 0334 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;0061 0334 0334 16FF0 0062;
0061 16FF0 0334 0335 0062;0061 0334 0335 16FF0 0062;0061 0334 0335 16FF0 0062;0061 0334 0335 16FF0 0062;0061 0334 0335 16FF0 0062;
@@ -17095,14 +17154,14 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0337 16FF0 0334 0062;0061 0337 0334 16FF0 0062;0061 0337 0334 16FF0 0062;0061 0337 0334 16FF0 0062;0061 0337 0334 16FF0 0062;
0061 16FF0 0334 0338 0062;0061 0334 0338 16FF0 0062;0061 0334 0338 16FF0 0062;0061 0334 0338 16FF0 0062;0061 0334 0338 16FF0 0062;
0061 0338 16FF0 0334 0062;0061 0338 0334 16FF0 0062;0061 0338 0334 16FF0 0062;0061 0338 0334 16FF0 0062;0061 0338 0334 16FF0 0062;
-0061 059A 0316 302A 0339 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;
-0061 0339 059A 0316 302A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;
-0061 059A 0316 302A 033A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;
-0061 033A 059A 0316 302A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;
-0061 059A 0316 302A 033B 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;
-0061 033B 059A 0316 302A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;
-0061 059A 0316 302A 033C 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;
-0061 033C 059A 0316 302A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;
+0061 059A 0316 1DFA 0339 0062;0061 1DFA 0316 0339 059A 0062;0061 1DFA 0316 0339 059A 0062;0061 1DFA 0316 0339 059A 0062;0061 1DFA 0316 0339 059A 0062;
+0061 0339 059A 0316 1DFA 0062;0061 1DFA 0339 0316 059A 0062;0061 1DFA 0339 0316 059A 0062;0061 1DFA 0339 0316 059A 0062;0061 1DFA 0339 0316 059A 0062;
+0061 059A 0316 1DFA 033A 0062;0061 1DFA 0316 033A 059A 0062;0061 1DFA 0316 033A 059A 0062;0061 1DFA 0316 033A 059A 0062;0061 1DFA 0316 033A 059A 0062;
+0061 033A 059A 0316 1DFA 0062;0061 1DFA 033A 0316 059A 0062;0061 1DFA 033A 0316 059A 0062;0061 1DFA 033A 0316 059A 0062;0061 1DFA 033A 0316 059A 0062;
+0061 059A 0316 1DFA 033B 0062;0061 1DFA 0316 033B 059A 0062;0061 1DFA 0316 033B 059A 0062;0061 1DFA 0316 033B 059A 0062;0061 1DFA 0316 033B 059A 0062;
+0061 033B 059A 0316 1DFA 0062;0061 1DFA 033B 0316 059A 0062;0061 1DFA 033B 0316 059A 0062;0061 1DFA 033B 0316 059A 0062;0061 1DFA 033B 0316 059A 0062;
+0061 059A 0316 1DFA 033C 0062;0061 1DFA 0316 033C 059A 0062;0061 1DFA 0316 033C 059A 0062;0061 1DFA 0316 033C 059A 0062;0061 1DFA 0316 033C 059A 0062;
+0061 033C 059A 0316 1DFA 0062;0061 1DFA 033C 0316 059A 0062;0061 1DFA 033C 0316 059A 0062;0061 1DFA 033C 0316 059A 0062;0061 1DFA 033C 0316 059A 0062;
0061 0315 0300 05AE 033D 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062;
0061 033D 0315 0300 05AE 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;
0061 0315 0300 05AE 033E 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062;
@@ -17123,44 +17182,44 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0345 0345 035D 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;
0061 0315 0300 05AE 0346 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062;
0061 0346 0315 0300 05AE 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;
-0061 059A 0316 302A 0347 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;
-0061 0347 059A 0316 302A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;
-0061 059A 0316 302A 0348 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;
-0061 0348 059A 0316 302A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;
-0061 059A 0316 302A 0349 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;
-0061 0349 059A 0316 302A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;
+0061 059A 0316 1DFA 0347 0062;0061 1DFA 0316 0347 059A 0062;0061 1DFA 0316 0347 059A 0062;0061 1DFA 0316 0347 059A 0062;0061 1DFA 0316 0347 059A 0062;
+0061 0347 059A 0316 1DFA 0062;0061 1DFA 0347 0316 059A 0062;0061 1DFA 0347 0316 059A 0062;0061 1DFA 0347 0316 059A 0062;0061 1DFA 0347 0316 059A 0062;
+0061 059A 0316 1DFA 0348 0062;0061 1DFA 0316 0348 059A 0062;0061 1DFA 0316 0348 059A 0062;0061 1DFA 0316 0348 059A 0062;0061 1DFA 0316 0348 059A 0062;
+0061 0348 059A 0316 1DFA 0062;0061 1DFA 0348 0316 059A 0062;0061 1DFA 0348 0316 059A 0062;0061 1DFA 0348 0316 059A 0062;0061 1DFA 0348 0316 059A 0062;
+0061 059A 0316 1DFA 0349 0062;0061 1DFA 0316 0349 059A 0062;0061 1DFA 0316 0349 059A 0062;0061 1DFA 0316 0349 059A 0062;0061 1DFA 0316 0349 059A 0062;
+0061 0349 059A 0316 1DFA 0062;0061 1DFA 0349 0316 059A 0062;0061 1DFA 0349 0316 059A 0062;0061 1DFA 0349 0316 059A 0062;0061 1DFA 0349 0316 059A 0062;
0061 0315 0300 05AE 034A 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062;
0061 034A 0315 0300 05AE 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;
0061 0315 0300 05AE 034B 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062;
0061 034B 0315 0300 05AE 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;
0061 0315 0300 05AE 034C 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062;
0061 034C 0315 0300 05AE 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;
-0061 059A 0316 302A 034D 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;
-0061 034D 059A 0316 302A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;
-0061 059A 0316 302A 034E 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;
-0061 034E 059A 0316 302A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;
+0061 059A 0316 1DFA 034D 0062;0061 1DFA 0316 034D 059A 0062;0061 1DFA 0316 034D 059A 0062;0061 1DFA 0316 034D 059A 0062;0061 1DFA 0316 034D 059A 0062;
+0061 034D 059A 0316 1DFA 0062;0061 1DFA 034D 0316 059A 0062;0061 1DFA 034D 0316 059A 0062;0061 1DFA 034D 0316 059A 0062;0061 1DFA 034D 0316 059A 0062;
+0061 059A 0316 1DFA 034E 0062;0061 1DFA 0316 034E 059A 0062;0061 1DFA 0316 034E 059A 0062;0061 1DFA 0316 034E 059A 0062;0061 1DFA 0316 034E 059A 0062;
+0061 034E 059A 0316 1DFA 0062;0061 1DFA 034E 0316 059A 0062;0061 1DFA 034E 0316 059A 0062;0061 1DFA 034E 0316 059A 0062;0061 1DFA 034E 0316 059A 0062;
0061 0315 0300 05AE 0350 0062;00E0 05AE 0350 0315 0062;0061 05AE 0300 0350 0315 0062;00E0 05AE 0350 0315 0062;0061 05AE 0300 0350 0315 0062;
0061 0350 0315 0300 05AE 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062;
0061 0315 0300 05AE 0351 0062;00E0 05AE 0351 0315 0062;0061 05AE 0300 0351 0315 0062;00E0 05AE 0351 0315 0062;0061 05AE 0300 0351 0315 0062;
0061 0351 0315 0300 05AE 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062;
0061 0315 0300 05AE 0352 0062;00E0 05AE 0352 0315 0062;0061 05AE 0300 0352 0315 0062;00E0 05AE 0352 0315 0062;0061 05AE 0300 0352 0315 0062;
0061 0352 0315 0300 05AE 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062;
-0061 059A 0316 302A 0353 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062;
-0061 0353 059A 0316 302A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062;
-0061 059A 0316 302A 0354 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062;
-0061 0354 059A 0316 302A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062;
-0061 059A 0316 302A 0355 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062;
-0061 0355 059A 0316 302A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062;
-0061 059A 0316 302A 0356 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062;
-0061 0356 059A 0316 302A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;
+0061 059A 0316 1DFA 0353 0062;0061 1DFA 0316 0353 059A 0062;0061 1DFA 0316 0353 059A 0062;0061 1DFA 0316 0353 059A 0062;0061 1DFA 0316 0353 059A 0062;
+0061 0353 059A 0316 1DFA 0062;0061 1DFA 0353 0316 059A 0062;0061 1DFA 0353 0316 059A 0062;0061 1DFA 0353 0316 059A 0062;0061 1DFA 0353 0316 059A 0062;
+0061 059A 0316 1DFA 0354 0062;0061 1DFA 0316 0354 059A 0062;0061 1DFA 0316 0354 059A 0062;0061 1DFA 0316 0354 059A 0062;0061 1DFA 0316 0354 059A 0062;
+0061 0354 059A 0316 1DFA 0062;0061 1DFA 0354 0316 059A 0062;0061 1DFA 0354 0316 059A 0062;0061 1DFA 0354 0316 059A 0062;0061 1DFA 0354 0316 059A 0062;
+0061 059A 0316 1DFA 0355 0062;0061 1DFA 0316 0355 059A 0062;0061 1DFA 0316 0355 059A 0062;0061 1DFA 0316 0355 059A 0062;0061 1DFA 0316 0355 059A 0062;
+0061 0355 059A 0316 1DFA 0062;0061 1DFA 0355 0316 059A 0062;0061 1DFA 0355 0316 059A 0062;0061 1DFA 0355 0316 059A 0062;0061 1DFA 0355 0316 059A 0062;
+0061 059A 0316 1DFA 0356 0062;0061 1DFA 0316 0356 059A 0062;0061 1DFA 0316 0356 059A 0062;0061 1DFA 0316 0356 059A 0062;0061 1DFA 0316 0356 059A 0062;
+0061 0356 059A 0316 1DFA 0062;0061 1DFA 0356 0316 059A 0062;0061 1DFA 0356 0316 059A 0062;0061 1DFA 0356 0316 059A 0062;0061 1DFA 0356 0316 059A 0062;
0061 0315 0300 05AE 0357 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062;
0061 0357 0315 0300 05AE 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;
0061 035C 0315 0300 0358 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062;
0061 0358 035C 0315 0300 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062;
-0061 059A 0316 302A 0359 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;
-0061 0359 059A 0316 302A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;
-0061 059A 0316 302A 035A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;
-0061 035A 059A 0316 302A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;
+0061 059A 0316 1DFA 0359 0062;0061 1DFA 0316 0359 059A 0062;0061 1DFA 0316 0359 059A 0062;0061 1DFA 0316 0359 059A 0062;0061 1DFA 0316 0359 059A 0062;
+0061 0359 059A 0316 1DFA 0062;0061 1DFA 0359 0316 059A 0062;0061 1DFA 0359 0316 059A 0062;0061 1DFA 0359 0316 059A 0062;0061 1DFA 0359 0316 059A 0062;
+0061 059A 0316 1DFA 035A 0062;0061 1DFA 0316 035A 059A 0062;0061 1DFA 0316 035A 059A 0062;0061 1DFA 0316 035A 059A 0062;0061 1DFA 0316 035A 059A 0062;
+0061 035A 059A 0316 1DFA 0062;0061 1DFA 035A 0316 059A 0062;0061 1DFA 035A 0316 059A 0062;0061 1DFA 035A 0316 059A 0062;0061 1DFA 035A 0316 059A 0062;
0061 0315 0300 05AE 035B 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062;
0061 035B 0315 0300 05AE 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;
0061 035D 035C 0315 035C 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;
@@ -17213,8 +17272,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0486 0315 0300 05AE 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;
0061 0315 0300 05AE 0487 0062;00E0 05AE 0487 0315 0062;0061 05AE 0300 0487 0315 0062;00E0 05AE 0487 0315 0062;0061 05AE 0300 0487 0315 0062;
0061 0487 0315 0300 05AE 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062;
-0061 059A 0316 302A 0591 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;
-0061 0591 059A 0316 302A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;
+0061 059A 0316 1DFA 0591 0062;0061 1DFA 0316 0591 059A 0062;0061 1DFA 0316 0591 059A 0062;0061 1DFA 0316 0591 059A 0062;0061 1DFA 0316 0591 059A 0062;
+0061 0591 059A 0316 1DFA 0062;0061 1DFA 0591 0316 059A 0062;0061 1DFA 0591 0316 059A 0062;0061 1DFA 0591 0316 059A 0062;0061 1DFA 0591 0316 059A 0062;
0061 0315 0300 05AE 0592 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062;
0061 0592 0315 0300 05AE 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;
0061 0315 0300 05AE 0593 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062;
@@ -17223,8 +17282,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0594 0315 0300 05AE 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;
0061 0315 0300 05AE 0595 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062;
0061 0595 0315 0300 05AE 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;
-0061 059A 0316 302A 0596 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;
-0061 0596 059A 0316 302A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;
+0061 059A 0316 1DFA 0596 0062;0061 1DFA 0316 0596 059A 0062;0061 1DFA 0316 0596 059A 0062;0061 1DFA 0316 0596 059A 0062;0061 1DFA 0316 0596 059A 0062;
+0061 0596 059A 0316 1DFA 0062;0061 1DFA 0596 0316 059A 0062;0061 1DFA 0596 0316 059A 0062;0061 1DFA 0596 0316 059A 0062;0061 1DFA 0596 0316 059A 0062;
0061 0315 0300 05AE 0597 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062;
0061 0597 0315 0300 05AE 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;
0061 0315 0300 05AE 0598 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062;
@@ -17233,8 +17292,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0599 0315 0300 05AE 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;
0061 302E 059A 0316 059A 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;
0061 059A 302E 059A 0316 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;
-0061 059A 0316 302A 059B 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;
-0061 059B 059A 0316 302A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;
+0061 059A 0316 1DFA 059B 0062;0061 1DFA 0316 059B 059A 0062;0061 1DFA 0316 059B 059A 0062;0061 1DFA 0316 059B 059A 0062;0061 1DFA 0316 059B 059A 0062;
+0061 059B 059A 0316 1DFA 0062;0061 1DFA 059B 0316 059A 0062;0061 1DFA 059B 0316 059A 0062;0061 1DFA 059B 0316 059A 0062;0061 1DFA 059B 0316 059A 0062;
0061 0315 0300 05AE 059C 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062;
0061 059C 0315 0300 05AE 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;
0061 0315 0300 05AE 059D 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062;
@@ -17247,24 +17306,24 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 05A0 0315 0300 05AE 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;
0061 0315 0300 05AE 05A1 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062;
0061 05A1 0315 0300 05AE 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;
-0061 059A 0316 302A 05A2 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;
-0061 05A2 059A 0316 302A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;
-0061 059A 0316 302A 05A3 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;
-0061 05A3 059A 0316 302A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;
-0061 059A 0316 302A 05A4 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;
-0061 05A4 059A 0316 302A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;
-0061 059A 0316 302A 05A5 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;
-0061 05A5 059A 0316 302A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;
-0061 059A 0316 302A 05A6 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;
-0061 05A6 059A 0316 302A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;
-0061 059A 0316 302A 05A7 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;
-0061 05A7 059A 0316 302A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;
+0061 059A 0316 1DFA 05A2 0062;0061 1DFA 0316 05A2 059A 0062;0061 1DFA 0316 05A2 059A 0062;0061 1DFA 0316 05A2 059A 0062;0061 1DFA 0316 05A2 059A 0062;
+0061 05A2 059A 0316 1DFA 0062;0061 1DFA 05A2 0316 059A 0062;0061 1DFA 05A2 0316 059A 0062;0061 1DFA 05A2 0316 059A 0062;0061 1DFA 05A2 0316 059A 0062;
+0061 059A 0316 1DFA 05A3 0062;0061 1DFA 0316 05A3 059A 0062;0061 1DFA 0316 05A3 059A 0062;0061 1DFA 0316 05A3 059A 0062;0061 1DFA 0316 05A3 059A 0062;
+0061 05A3 059A 0316 1DFA 0062;0061 1DFA 05A3 0316 059A 0062;0061 1DFA 05A3 0316 059A 0062;0061 1DFA 05A3 0316 059A 0062;0061 1DFA 05A3 0316 059A 0062;
+0061 059A 0316 1DFA 05A4 0062;0061 1DFA 0316 05A4 059A 0062;0061 1DFA 0316 05A4 059A 0062;0061 1DFA 0316 05A4 059A 0062;0061 1DFA 0316 05A4 059A 0062;
+0061 05A4 059A 0316 1DFA 0062;0061 1DFA 05A4 0316 059A 0062;0061 1DFA 05A4 0316 059A 0062;0061 1DFA 05A4 0316 059A 0062;0061 1DFA 05A4 0316 059A 0062;
+0061 059A 0316 1DFA 05A5 0062;0061 1DFA 0316 05A5 059A 0062;0061 1DFA 0316 05A5 059A 0062;0061 1DFA 0316 05A5 059A 0062;0061 1DFA 0316 05A5 059A 0062;
+0061 05A5 059A 0316 1DFA 0062;0061 1DFA 05A5 0316 059A 0062;0061 1DFA 05A5 0316 059A 0062;0061 1DFA 05A5 0316 059A 0062;0061 1DFA 05A5 0316 059A 0062;
+0061 059A 0316 1DFA 05A6 0062;0061 1DFA 0316 05A6 059A 0062;0061 1DFA 0316 05A6 059A 0062;0061 1DFA 0316 05A6 059A 0062;0061 1DFA 0316 05A6 059A 0062;
+0061 05A6 059A 0316 1DFA 0062;0061 1DFA 05A6 0316 059A 0062;0061 1DFA 05A6 0316 059A 0062;0061 1DFA 05A6 0316 059A 0062;0061 1DFA 05A6 0316 059A 0062;
+0061 059A 0316 1DFA 05A7 0062;0061 1DFA 0316 05A7 059A 0062;0061 1DFA 0316 05A7 059A 0062;0061 1DFA 0316 05A7 059A 0062;0061 1DFA 0316 05A7 059A 0062;
+0061 05A7 059A 0316 1DFA 0062;0061 1DFA 05A7 0316 059A 0062;0061 1DFA 05A7 0316 059A 0062;0061 1DFA 05A7 0316 059A 0062;0061 1DFA 05A7 0316 059A 0062;
0061 0315 0300 05AE 05A8 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062;
0061 05A8 0315 0300 05AE 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;
0061 0315 0300 05AE 05A9 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062;
0061 05A9 0315 0300 05AE 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;
-0061 059A 0316 302A 05AA 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;
-0061 05AA 059A 0316 302A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;
+0061 059A 0316 1DFA 05AA 0062;0061 1DFA 0316 05AA 059A 0062;0061 1DFA 0316 05AA 059A 0062;0061 1DFA 0316 05AA 059A 0062;0061 1DFA 0316 05AA 059A 0062;
+0061 05AA 059A 0316 1DFA 0062;0061 1DFA 05AA 0316 059A 0062;0061 1DFA 05AA 0316 059A 0062;0061 1DFA 05AA 0316 059A 0062;0061 1DFA 05AA 0316 059A 0062;
0061 0315 0300 05AE 05AB 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062;
0061 05AB 0315 0300 05AE 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;
0061 0315 0300 05AE 05AC 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062;
@@ -17311,8 +17370,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 05C2 FB1E 05C2 05C1 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;
0061 0315 0300 05AE 05C4 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062;
0061 05C4 0315 0300 05AE 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;
-0061 059A 0316 302A 05C5 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;
-0061 05C5 059A 0316 302A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;
+0061 059A 0316 1DFA 05C5 0062;0061 1DFA 0316 05C5 059A 0062;0061 1DFA 0316 05C5 059A 0062;0061 1DFA 0316 05C5 059A 0062;0061 1DFA 0316 05C5 059A 0062;
+0061 05C5 059A 0316 1DFA 0062;0061 1DFA 05C5 0316 059A 0062;0061 1DFA 05C5 0316 059A 0062;0061 1DFA 05C5 0316 059A 0062;0061 1DFA 05C5 0316 059A 0062;
0061 05B9 05B8 05B7 05C7 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;
0061 05C7 05B9 05B8 05B7 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;
0061 0315 0300 05AE 0610 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062;
@@ -17357,10 +17416,10 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0653 0315 0300 05AE 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;
0061 0315 0300 05AE 0654 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062;
0061 0654 0315 0300 05AE 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;
-0061 059A 0316 302A 0655 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;
-0061 0655 059A 0316 302A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;
-0061 059A 0316 302A 0656 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062;
-0061 0656 059A 0316 302A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062;
+0061 059A 0316 1DFA 0655 0062;0061 1DFA 0316 0655 059A 0062;0061 1DFA 0316 0655 059A 0062;0061 1DFA 0316 0655 059A 0062;0061 1DFA 0316 0655 059A 0062;
+0061 0655 059A 0316 1DFA 0062;0061 1DFA 0655 0316 059A 0062;0061 1DFA 0655 0316 059A 0062;0061 1DFA 0655 0316 059A 0062;0061 1DFA 0655 0316 059A 0062;
+0061 059A 0316 1DFA 0656 0062;0061 1DFA 0316 0656 059A 0062;0061 1DFA 0316 0656 059A 0062;0061 1DFA 0316 0656 059A 0062;0061 1DFA 0316 0656 059A 0062;
+0061 0656 059A 0316 1DFA 0062;0061 1DFA 0656 0316 059A 0062;0061 1DFA 0656 0316 059A 0062;0061 1DFA 0656 0316 059A 0062;0061 1DFA 0656 0316 059A 0062;
0061 0315 0300 05AE 0657 0062;00E0 05AE 0657 0315 0062;0061 05AE 0300 0657 0315 0062;00E0 05AE 0657 0315 0062;0061 05AE 0300 0657 0315 0062;
0061 0657 0315 0300 05AE 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;
0061 0315 0300 05AE 0658 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062;
@@ -17371,14 +17430,14 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 065A 0315 0300 05AE 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;
0061 0315 0300 05AE 065B 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062;
0061 065B 0315 0300 05AE 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;
-0061 059A 0316 302A 065C 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;
-0061 065C 059A 0316 302A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;
+0061 059A 0316 1DFA 065C 0062;0061 1DFA 0316 065C 059A 0062;0061 1DFA 0316 065C 059A 0062;0061 1DFA 0316 065C 059A 0062;0061 1DFA 0316 065C 059A 0062;
+0061 065C 059A 0316 1DFA 0062;0061 1DFA 065C 0316 059A 0062;0061 1DFA 065C 0316 059A 0062;0061 1DFA 065C 0316 059A 0062;0061 1DFA 065C 0316 059A 0062;
0061 0315 0300 05AE 065D 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062;
0061 065D 0315 0300 05AE 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;
0061 0315 0300 05AE 065E 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062;
0061 065E 0315 0300 05AE 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;
-0061 059A 0316 302A 065F 0062;0061 302A 0316 065F 059A 0062;0061 302A 0316 065F 059A 0062;0061 302A 0316 065F 059A 0062;0061 302A 0316 065F 059A 0062;
-0061 065F 059A 0316 302A 0062;0061 302A 065F 0316 059A 0062;0061 302A 065F 0316 059A 0062;0061 302A 065F 0316 059A 0062;0061 302A 065F 0316 059A 0062;
+0061 059A 0316 1DFA 065F 0062;0061 1DFA 0316 065F 059A 0062;0061 1DFA 0316 065F 059A 0062;0061 1DFA 0316 065F 059A 0062;0061 1DFA 0316 065F 059A 0062;
+0061 065F 059A 0316 1DFA 0062;0061 1DFA 065F 0316 059A 0062;0061 1DFA 065F 0316 059A 0062;0061 1DFA 065F 0316 059A 0062;0061 1DFA 065F 0316 059A 0062;
0061 0711 0670 0652 0670 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;
0061 0670 0711 0670 0652 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;
0061 0315 0300 05AE 06D6 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062;
@@ -17403,74 +17462,74 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 06E1 0315 0300 05AE 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;
0061 0315 0300 05AE 06E2 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062;
0061 06E2 0315 0300 05AE 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;
-0061 059A 0316 302A 06E3 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;
-0061 06E3 059A 0316 302A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;
+0061 059A 0316 1DFA 06E3 0062;0061 1DFA 0316 06E3 059A 0062;0061 1DFA 0316 06E3 059A 0062;0061 1DFA 0316 06E3 059A 0062;0061 1DFA 0316 06E3 059A 0062;
+0061 06E3 059A 0316 1DFA 0062;0061 1DFA 06E3 0316 059A 0062;0061 1DFA 06E3 0316 059A 0062;0061 1DFA 06E3 0316 059A 0062;0061 1DFA 06E3 0316 059A 0062;
0061 0315 0300 05AE 06E4 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062;
0061 06E4 0315 0300 05AE 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;
0061 0315 0300 05AE 06E7 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062;
0061 06E7 0315 0300 05AE 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;
0061 0315 0300 05AE 06E8 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062;
0061 06E8 0315 0300 05AE 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;
-0061 059A 0316 302A 06EA 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;
-0061 06EA 059A 0316 302A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;
+0061 059A 0316 1DFA 06EA 0062;0061 1DFA 0316 06EA 059A 0062;0061 1DFA 0316 06EA 059A 0062;0061 1DFA 0316 06EA 059A 0062;0061 1DFA 0316 06EA 059A 0062;
+0061 06EA 059A 0316 1DFA 0062;0061 1DFA 06EA 0316 059A 0062;0061 1DFA 06EA 0316 059A 0062;0061 1DFA 06EA 0316 059A 0062;0061 1DFA 06EA 0316 059A 0062;
0061 0315 0300 05AE 06EB 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062;
0061 06EB 0315 0300 05AE 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;
0061 0315 0300 05AE 06EC 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062;
0061 06EC 0315 0300 05AE 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;
-0061 059A 0316 302A 06ED 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;
-0061 06ED 059A 0316 302A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;
+0061 059A 0316 1DFA 06ED 0062;0061 1DFA 0316 06ED 059A 0062;0061 1DFA 0316 06ED 059A 0062;0061 1DFA 0316 06ED 059A 0062;0061 1DFA 0316 06ED 059A 0062;
+0061 06ED 059A 0316 1DFA 0062;0061 1DFA 06ED 0316 059A 0062;0061 1DFA 06ED 0316 059A 0062;0061 1DFA 06ED 0316 059A 0062;0061 1DFA 06ED 0316 059A 0062;
0061 0C55 0711 0670 0711 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;
0061 0711 0C55 0711 0670 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;
0061 0315 0300 05AE 0730 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062;
0061 0730 0315 0300 05AE 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;
-0061 059A 0316 302A 0731 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;
-0061 0731 059A 0316 302A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;
+0061 059A 0316 1DFA 0731 0062;0061 1DFA 0316 0731 059A 0062;0061 1DFA 0316 0731 059A 0062;0061 1DFA 0316 0731 059A 0062;0061 1DFA 0316 0731 059A 0062;
+0061 0731 059A 0316 1DFA 0062;0061 1DFA 0731 0316 059A 0062;0061 1DFA 0731 0316 059A 0062;0061 1DFA 0731 0316 059A 0062;0061 1DFA 0731 0316 059A 0062;
0061 0315 0300 05AE 0732 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062;
0061 0732 0315 0300 05AE 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;
0061 0315 0300 05AE 0733 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062;
0061 0733 0315 0300 05AE 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;
-0061 059A 0316 302A 0734 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;
-0061 0734 059A 0316 302A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;
+0061 059A 0316 1DFA 0734 0062;0061 1DFA 0316 0734 059A 0062;0061 1DFA 0316 0734 059A 0062;0061 1DFA 0316 0734 059A 0062;0061 1DFA 0316 0734 059A 0062;
+0061 0734 059A 0316 1DFA 0062;0061 1DFA 0734 0316 059A 0062;0061 1DFA 0734 0316 059A 0062;0061 1DFA 0734 0316 059A 0062;0061 1DFA 0734 0316 059A 0062;
0061 0315 0300 05AE 0735 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062;
0061 0735 0315 0300 05AE 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;
0061 0315 0300 05AE 0736 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062;
0061 0736 0315 0300 05AE 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;
-0061 059A 0316 302A 0737 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;
-0061 0737 059A 0316 302A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;
-0061 059A 0316 302A 0738 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;
-0061 0738 059A 0316 302A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;
-0061 059A 0316 302A 0739 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;
-0061 0739 059A 0316 302A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;
+0061 059A 0316 1DFA 0737 0062;0061 1DFA 0316 0737 059A 0062;0061 1DFA 0316 0737 059A 0062;0061 1DFA 0316 0737 059A 0062;0061 1DFA 0316 0737 059A 0062;
+0061 0737 059A 0316 1DFA 0062;0061 1DFA 0737 0316 059A 0062;0061 1DFA 0737 0316 059A 0062;0061 1DFA 0737 0316 059A 0062;0061 1DFA 0737 0316 059A 0062;
+0061 059A 0316 1DFA 0738 0062;0061 1DFA 0316 0738 059A 0062;0061 1DFA 0316 0738 059A 0062;0061 1DFA 0316 0738 059A 0062;0061 1DFA 0316 0738 059A 0062;
+0061 0738 059A 0316 1DFA 0062;0061 1DFA 0738 0316 059A 0062;0061 1DFA 0738 0316 059A 0062;0061 1DFA 0738 0316 059A 0062;0061 1DFA 0738 0316 059A 0062;
+0061 059A 0316 1DFA 0739 0062;0061 1DFA 0316 0739 059A 0062;0061 1DFA 0316 0739 059A 0062;0061 1DFA 0316 0739 059A 0062;0061 1DFA 0316 0739 059A 0062;
+0061 0739 059A 0316 1DFA 0062;0061 1DFA 0739 0316 059A 0062;0061 1DFA 0739 0316 059A 0062;0061 1DFA 0739 0316 059A 0062;0061 1DFA 0739 0316 059A 0062;
0061 0315 0300 05AE 073A 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062;
0061 073A 0315 0300 05AE 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;
-0061 059A 0316 302A 073B 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;
-0061 073B 059A 0316 302A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;
-0061 059A 0316 302A 073C 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;
-0061 073C 059A 0316 302A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;
+0061 059A 0316 1DFA 073B 0062;0061 1DFA 0316 073B 059A 0062;0061 1DFA 0316 073B 059A 0062;0061 1DFA 0316 073B 059A 0062;0061 1DFA 0316 073B 059A 0062;
+0061 073B 059A 0316 1DFA 0062;0061 1DFA 073B 0316 059A 0062;0061 1DFA 073B 0316 059A 0062;0061 1DFA 073B 0316 059A 0062;0061 1DFA 073B 0316 059A 0062;
+0061 059A 0316 1DFA 073C 0062;0061 1DFA 0316 073C 059A 0062;0061 1DFA 0316 073C 059A 0062;0061 1DFA 0316 073C 059A 0062;0061 1DFA 0316 073C 059A 0062;
+0061 073C 059A 0316 1DFA 0062;0061 1DFA 073C 0316 059A 0062;0061 1DFA 073C 0316 059A 0062;0061 1DFA 073C 0316 059A 0062;0061 1DFA 073C 0316 059A 0062;
0061 0315 0300 05AE 073D 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062;
0061 073D 0315 0300 05AE 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;
-0061 059A 0316 302A 073E 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;
-0061 073E 059A 0316 302A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;
+0061 059A 0316 1DFA 073E 0062;0061 1DFA 0316 073E 059A 0062;0061 1DFA 0316 073E 059A 0062;0061 1DFA 0316 073E 059A 0062;0061 1DFA 0316 073E 059A 0062;
+0061 073E 059A 0316 1DFA 0062;0061 1DFA 073E 0316 059A 0062;0061 1DFA 073E 0316 059A 0062;0061 1DFA 073E 0316 059A 0062;0061 1DFA 073E 0316 059A 0062;
0061 0315 0300 05AE 073F 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062;
0061 073F 0315 0300 05AE 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;
0061 0315 0300 05AE 0740 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062;
0061 0740 0315 0300 05AE 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;
0061 0315 0300 05AE 0741 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062;
0061 0741 0315 0300 05AE 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;
-0061 059A 0316 302A 0742 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;
-0061 0742 059A 0316 302A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;
+0061 059A 0316 1DFA 0742 0062;0061 1DFA 0316 0742 059A 0062;0061 1DFA 0316 0742 059A 0062;0061 1DFA 0316 0742 059A 0062;0061 1DFA 0316 0742 059A 0062;
+0061 0742 059A 0316 1DFA 0062;0061 1DFA 0742 0316 059A 0062;0061 1DFA 0742 0316 059A 0062;0061 1DFA 0742 0316 059A 0062;0061 1DFA 0742 0316 059A 0062;
0061 0315 0300 05AE 0743 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062;
0061 0743 0315 0300 05AE 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;
-0061 059A 0316 302A 0744 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;
-0061 0744 059A 0316 302A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;
+0061 059A 0316 1DFA 0744 0062;0061 1DFA 0316 0744 059A 0062;0061 1DFA 0316 0744 059A 0062;0061 1DFA 0316 0744 059A 0062;0061 1DFA 0316 0744 059A 0062;
+0061 0744 059A 0316 1DFA 0062;0061 1DFA 0744 0316 059A 0062;0061 1DFA 0744 0316 059A 0062;0061 1DFA 0744 0316 059A 0062;0061 1DFA 0744 0316 059A 0062;
0061 0315 0300 05AE 0745 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062;
0061 0745 0315 0300 05AE 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;
-0061 059A 0316 302A 0746 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;
-0061 0746 059A 0316 302A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;
+0061 059A 0316 1DFA 0746 0062;0061 1DFA 0316 0746 059A 0062;0061 1DFA 0316 0746 059A 0062;0061 1DFA 0316 0746 059A 0062;0061 1DFA 0316 0746 059A 0062;
+0061 0746 059A 0316 1DFA 0062;0061 1DFA 0746 0316 059A 0062;0061 1DFA 0746 0316 059A 0062;0061 1DFA 0746 0316 059A 0062;0061 1DFA 0746 0316 059A 0062;
0061 0315 0300 05AE 0747 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062;
0061 0747 0315 0300 05AE 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;
-0061 059A 0316 302A 0748 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;
-0061 0748 059A 0316 302A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;
+0061 059A 0316 1DFA 0748 0062;0061 1DFA 0316 0748 059A 0062;0061 1DFA 0316 0748 059A 0062;0061 1DFA 0316 0748 059A 0062;0061 1DFA 0316 0748 059A 0062;
+0061 0748 059A 0316 1DFA 0062;0061 1DFA 0748 0316 059A 0062;0061 1DFA 0748 0316 059A 0062;0061 1DFA 0748 0316 059A 0062;0061 1DFA 0748 0316 059A 0062;
0061 0315 0300 05AE 0749 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062;
0061 0749 0315 0300 05AE 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;
0061 0315 0300 05AE 074A 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062;
@@ -17489,12 +17548,12 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 07F0 0315 0300 05AE 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;
0061 0315 0300 05AE 07F1 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062;
0061 07F1 0315 0300 05AE 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;
-0061 059A 0316 302A 07F2 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;
-0061 07F2 059A 0316 302A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;
+0061 059A 0316 1DFA 07F2 0062;0061 1DFA 0316 07F2 059A 0062;0061 1DFA 0316 07F2 059A 0062;0061 1DFA 0316 07F2 059A 0062;0061 1DFA 0316 07F2 059A 0062;
+0061 07F2 059A 0316 1DFA 0062;0061 1DFA 07F2 0316 059A 0062;0061 1DFA 07F2 0316 059A 0062;0061 1DFA 07F2 0316 059A 0062;0061 1DFA 07F2 0316 059A 0062;
0061 0315 0300 05AE 07F3 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062;
0061 07F3 0315 0300 05AE 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;
-0061 059A 0316 302A 07FD 0062;0061 302A 0316 07FD 059A 0062;0061 302A 0316 07FD 059A 0062;0061 302A 0316 07FD 059A 0062;0061 302A 0316 07FD 059A 0062;
-0061 07FD 059A 0316 302A 0062;0061 302A 07FD 0316 059A 0062;0061 302A 07FD 0316 059A 0062;0061 302A 07FD 0316 059A 0062;0061 302A 07FD 0316 059A 0062;
+0061 059A 0316 1DFA 07FD 0062;0061 1DFA 0316 07FD 059A 0062;0061 1DFA 0316 07FD 059A 0062;0061 1DFA 0316 07FD 059A 0062;0061 1DFA 0316 07FD 059A 0062;
+0061 07FD 059A 0316 1DFA 0062;0061 1DFA 07FD 0316 059A 0062;0061 1DFA 07FD 0316 059A 0062;0061 1DFA 07FD 0316 059A 0062;0061 1DFA 07FD 0316 059A 0062;
0061 0315 0300 05AE 0816 0062;00E0 05AE 0816 0315 0062;0061 05AE 0300 0816 0315 0062;00E0 05AE 0816 0315 0062;0061 05AE 0300 0816 0315 0062;
0061 0816 0315 0300 05AE 0062;0061 05AE 0816 0300 0315 0062;0061 05AE 0816 0300 0315 0062;0061 05AE 0816 0300 0315 0062;0061 05AE 0816 0300 0315 0062;
0061 0315 0300 05AE 0817 0062;00E0 05AE 0817 0315 0062;0061 05AE 0300 0817 0315 0062;00E0 05AE 0817 0315 0062;0061 05AE 0300 0817 0315 0062;
@@ -17537,14 +17596,48 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 082C 0315 0300 05AE 0062;0061 05AE 082C 0300 0315 0062;0061 05AE 082C 0300 0315 0062;0061 05AE 082C 0300 0315 0062;0061 05AE 082C 0300 0315 0062;
0061 0315 0300 05AE 082D 0062;00E0 05AE 082D 0315 0062;0061 05AE 0300 082D 0315 0062;00E0 05AE 082D 0315 0062;0061 05AE 0300 082D 0315 0062;
0061 082D 0315 0300 05AE 0062;0061 05AE 082D 0300 0315 0062;0061 05AE 082D 0300 0315 0062;0061 05AE 082D 0300 0315 0062;0061 05AE 082D 0300 0315 0062;
-0061 059A 0316 302A 0859 0062;0061 302A 0316 0859 059A 0062;0061 302A 0316 0859 059A 0062;0061 302A 0316 0859 059A 0062;0061 302A 0316 0859 059A 0062;
-0061 0859 059A 0316 302A 0062;0061 302A 0859 0316 059A 0062;0061 302A 0859 0316 059A 0062;0061 302A 0859 0316 059A 0062;0061 302A 0859 0316 059A 0062;
-0061 059A 0316 302A 085A 0062;0061 302A 0316 085A 059A 0062;0061 302A 0316 085A 059A 0062;0061 302A 0316 085A 059A 0062;0061 302A 0316 085A 059A 0062;
-0061 085A 059A 0316 302A 0062;0061 302A 085A 0316 059A 0062;0061 302A 085A 0316 059A 0062;0061 302A 085A 0316 059A 0062;0061 302A 085A 0316 059A 0062;
-0061 059A 0316 302A 085B 0062;0061 302A 0316 085B 059A 0062;0061 302A 0316 085B 059A 0062;0061 302A 0316 085B 059A 0062;0061 302A 0316 085B 059A 0062;
-0061 085B 059A 0316 302A 0062;0061 302A 085B 0316 059A 0062;0061 302A 085B 0316 059A 0062;0061 302A 085B 0316 059A 0062;0061 302A 085B 0316 059A 0062;
-0061 059A 0316 302A 08D3 0062;0061 302A 0316 08D3 059A 0062;0061 302A 0316 08D3 059A 0062;0061 302A 0316 08D3 059A 0062;0061 302A 0316 08D3 059A 0062;
-0061 08D3 059A 0316 302A 0062;0061 302A 08D3 0316 059A 0062;0061 302A 08D3 0316 059A 0062;0061 302A 08D3 0316 059A 0062;0061 302A 08D3 0316 059A 0062;
+0061 059A 0316 1DFA 0859 0062;0061 1DFA 0316 0859 059A 0062;0061 1DFA 0316 0859 059A 0062;0061 1DFA 0316 0859 059A 0062;0061 1DFA 0316 0859 059A 0062;
+0061 0859 059A 0316 1DFA 0062;0061 1DFA 0859 0316 059A 0062;0061 1DFA 0859 0316 059A 0062;0061 1DFA 0859 0316 059A 0062;0061 1DFA 0859 0316 059A 0062;
+0061 059A 0316 1DFA 085A 0062;0061 1DFA 0316 085A 059A 0062;0061 1DFA 0316 085A 059A 0062;0061 1DFA 0316 085A 059A 0062;0061 1DFA 0316 085A 059A 0062;
+0061 085A 059A 0316 1DFA 0062;0061 1DFA 085A 0316 059A 0062;0061 1DFA 085A 0316 059A 0062;0061 1DFA 085A 0316 059A 0062;0061 1DFA 085A 0316 059A 0062;
+0061 059A 0316 1DFA 085B 0062;0061 1DFA 0316 085B 059A 0062;0061 1DFA 0316 085B 059A 0062;0061 1DFA 0316 085B 059A 0062;0061 1DFA 0316 085B 059A 0062;
+0061 085B 059A 0316 1DFA 0062;0061 1DFA 085B 0316 059A 0062;0061 1DFA 085B 0316 059A 0062;0061 1DFA 085B 0316 059A 0062;0061 1DFA 085B 0316 059A 0062;
+0061 0315 0300 05AE 0898 0062;00E0 05AE 0898 0315 0062;0061 05AE 0300 0898 0315 0062;00E0 05AE 0898 0315 0062;0061 05AE 0300 0898 0315 0062;
+0061 0898 0315 0300 05AE 0062;0061 05AE 0898 0300 0315 0062;0061 05AE 0898 0300 0315 0062;0061 05AE 0898 0300 0315 0062;0061 05AE 0898 0300 0315 0062;
+0061 059A 0316 1DFA 0899 0062;0061 1DFA 0316 0899 059A 0062;0061 1DFA 0316 0899 059A 0062;0061 1DFA 0316 0899 059A 0062;0061 1DFA 0316 0899 059A 0062;
+0061 0899 059A 0316 1DFA 0062;0061 1DFA 0899 0316 059A 0062;0061 1DFA 0899 0316 059A 0062;0061 1DFA 0899 0316 059A 0062;0061 1DFA 0899 0316 059A 0062;
+0061 059A 0316 1DFA 089A 0062;0061 1DFA 0316 089A 059A 0062;0061 1DFA 0316 089A 059A 0062;0061 1DFA 0316 089A 059A 0062;0061 1DFA 0316 089A 059A 0062;
+0061 089A 059A 0316 1DFA 0062;0061 1DFA 089A 0316 059A 0062;0061 1DFA 089A 0316 059A 0062;0061 1DFA 089A 0316 059A 0062;0061 1DFA 089A 0316 059A 0062;
+0061 059A 0316 1DFA 089B 0062;0061 1DFA 0316 089B 059A 0062;0061 1DFA 0316 089B 059A 0062;0061 1DFA 0316 089B 059A 0062;0061 1DFA 0316 089B 059A 0062;
+0061 089B 059A 0316 1DFA 0062;0061 1DFA 089B 0316 059A 0062;0061 1DFA 089B 0316 059A 0062;0061 1DFA 089B 0316 059A 0062;0061 1DFA 089B 0316 059A 0062;
+0061 0315 0300 05AE 089C 0062;00E0 05AE 089C 0315 0062;0061 05AE 0300 089C 0315 0062;00E0 05AE 089C 0315 0062;0061 05AE 0300 089C 0315 0062;
+0061 089C 0315 0300 05AE 0062;0061 05AE 089C 0300 0315 0062;0061 05AE 089C 0300 0315 0062;0061 05AE 089C 0300 0315 0062;0061 05AE 089C 0300 0315 0062;
+0061 0315 0300 05AE 089D 0062;00E0 05AE 089D 0315 0062;0061 05AE 0300 089D 0315 0062;00E0 05AE 089D 0315 0062;0061 05AE 0300 089D 0315 0062;
+0061 089D 0315 0300 05AE 0062;0061 05AE 089D 0300 0315 0062;0061 05AE 089D 0300 0315 0062;0061 05AE 089D 0300 0315 0062;0061 05AE 089D 0300 0315 0062;
+0061 0315 0300 05AE 089E 0062;00E0 05AE 089E 0315 0062;0061 05AE 0300 089E 0315 0062;00E0 05AE 089E 0315 0062;0061 05AE 0300 089E 0315 0062;
+0061 089E 0315 0300 05AE 0062;0061 05AE 089E 0300 0315 0062;0061 05AE 089E 0300 0315 0062;0061 05AE 089E 0300 0315 0062;0061 05AE 089E 0300 0315 0062;
+0061 0315 0300 05AE 089F 0062;00E0 05AE 089F 0315 0062;0061 05AE 0300 089F 0315 0062;00E0 05AE 089F 0315 0062;0061 05AE 0300 089F 0315 0062;
+0061 089F 0315 0300 05AE 0062;0061 05AE 089F 0300 0315 0062;0061 05AE 089F 0300 0315 0062;0061 05AE 089F 0300 0315 0062;0061 05AE 089F 0300 0315 0062;
+0061 0315 0300 05AE 08CA 0062;00E0 05AE 08CA 0315 0062;0061 05AE 0300 08CA 0315 0062;00E0 05AE 08CA 0315 0062;0061 05AE 0300 08CA 0315 0062;
+0061 08CA 0315 0300 05AE 0062;0061 05AE 08CA 0300 0315 0062;0061 05AE 08CA 0300 0315 0062;0061 05AE 08CA 0300 0315 0062;0061 05AE 08CA 0300 0315 0062;
+0061 0315 0300 05AE 08CB 0062;00E0 05AE 08CB 0315 0062;0061 05AE 0300 08CB 0315 0062;00E0 05AE 08CB 0315 0062;0061 05AE 0300 08CB 0315 0062;
+0061 08CB 0315 0300 05AE 0062;0061 05AE 08CB 0300 0315 0062;0061 05AE 08CB 0300 0315 0062;0061 05AE 08CB 0300 0315 0062;0061 05AE 08CB 0300 0315 0062;
+0061 0315 0300 05AE 08CC 0062;00E0 05AE 08CC 0315 0062;0061 05AE 0300 08CC 0315 0062;00E0 05AE 08CC 0315 0062;0061 05AE 0300 08CC 0315 0062;
+0061 08CC 0315 0300 05AE 0062;0061 05AE 08CC 0300 0315 0062;0061 05AE 08CC 0300 0315 0062;0061 05AE 08CC 0300 0315 0062;0061 05AE 08CC 0300 0315 0062;
+0061 0315 0300 05AE 08CD 0062;00E0 05AE 08CD 0315 0062;0061 05AE 0300 08CD 0315 0062;00E0 05AE 08CD 0315 0062;0061 05AE 0300 08CD 0315 0062;
+0061 08CD 0315 0300 05AE 0062;0061 05AE 08CD 0300 0315 0062;0061 05AE 08CD 0300 0315 0062;0061 05AE 08CD 0300 0315 0062;0061 05AE 08CD 0300 0315 0062;
+0061 0315 0300 05AE 08CE 0062;00E0 05AE 08CE 0315 0062;0061 05AE 0300 08CE 0315 0062;00E0 05AE 08CE 0315 0062;0061 05AE 0300 08CE 0315 0062;
+0061 08CE 0315 0300 05AE 0062;0061 05AE 08CE 0300 0315 0062;0061 05AE 08CE 0300 0315 0062;0061 05AE 08CE 0300 0315 0062;0061 05AE 08CE 0300 0315 0062;
+0061 059A 0316 1DFA 08CF 0062;0061 1DFA 0316 08CF 059A 0062;0061 1DFA 0316 08CF 059A 0062;0061 1DFA 0316 08CF 059A 0062;0061 1DFA 0316 08CF 059A 0062;
+0061 08CF 059A 0316 1DFA 0062;0061 1DFA 08CF 0316 059A 0062;0061 1DFA 08CF 0316 059A 0062;0061 1DFA 08CF 0316 059A 0062;0061 1DFA 08CF 0316 059A 0062;
+0061 059A 0316 1DFA 08D0 0062;0061 1DFA 0316 08D0 059A 0062;0061 1DFA 0316 08D0 059A 0062;0061 1DFA 0316 08D0 059A 0062;0061 1DFA 0316 08D0 059A 0062;
+0061 08D0 059A 0316 1DFA 0062;0061 1DFA 08D0 0316 059A 0062;0061 1DFA 08D0 0316 059A 0062;0061 1DFA 08D0 0316 059A 0062;0061 1DFA 08D0 0316 059A 0062;
+0061 059A 0316 1DFA 08D1 0062;0061 1DFA 0316 08D1 059A 0062;0061 1DFA 0316 08D1 059A 0062;0061 1DFA 0316 08D1 059A 0062;0061 1DFA 0316 08D1 059A 0062;
+0061 08D1 059A 0316 1DFA 0062;0061 1DFA 08D1 0316 059A 0062;0061 1DFA 08D1 0316 059A 0062;0061 1DFA 08D1 0316 059A 0062;0061 1DFA 08D1 0316 059A 0062;
+0061 059A 0316 1DFA 08D2 0062;0061 1DFA 0316 08D2 059A 0062;0061 1DFA 0316 08D2 059A 0062;0061 1DFA 0316 08D2 059A 0062;0061 1DFA 0316 08D2 059A 0062;
+0061 08D2 059A 0316 1DFA 0062;0061 1DFA 08D2 0316 059A 0062;0061 1DFA 08D2 0316 059A 0062;0061 1DFA 08D2 0316 059A 0062;0061 1DFA 08D2 0316 059A 0062;
+0061 059A 0316 1DFA 08D3 0062;0061 1DFA 0316 08D3 059A 0062;0061 1DFA 0316 08D3 059A 0062;0061 1DFA 0316 08D3 059A 0062;0061 1DFA 0316 08D3 059A 0062;
+0061 08D3 059A 0316 1DFA 0062;0061 1DFA 08D3 0316 059A 0062;0061 1DFA 08D3 0316 059A 0062;0061 1DFA 08D3 0316 059A 0062;0061 1DFA 08D3 0316 059A 0062;
0061 0315 0300 05AE 08D4 0062;00E0 05AE 08D4 0315 0062;0061 05AE 0300 08D4 0315 0062;00E0 05AE 08D4 0315 0062;0061 05AE 0300 08D4 0315 0062;
0061 08D4 0315 0300 05AE 0062;0061 05AE 08D4 0300 0315 0062;0061 05AE 08D4 0300 0315 0062;0061 05AE 08D4 0300 0315 0062;0061 05AE 08D4 0300 0315 0062;
0061 0315 0300 05AE 08D5 0062;00E0 05AE 08D5 0315 0062;0061 05AE 0300 08D5 0315 0062;00E0 05AE 08D5 0315 0062;0061 05AE 0300 08D5 0315 0062;
@@ -17573,32 +17666,32 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 08E0 0315 0300 05AE 0062;0061 05AE 08E0 0300 0315 0062;0061 05AE 08E0 0300 0315 0062;0061 05AE 08E0 0300 0315 0062;0061 05AE 08E0 0300 0315 0062;
0061 0315 0300 05AE 08E1 0062;00E0 05AE 08E1 0315 0062;0061 05AE 0300 08E1 0315 0062;00E0 05AE 08E1 0315 0062;0061 05AE 0300 08E1 0315 0062;
0061 08E1 0315 0300 05AE 0062;0061 05AE 08E1 0300 0315 0062;0061 05AE 08E1 0300 0315 0062;0061 05AE 08E1 0300 0315 0062;0061 05AE 08E1 0300 0315 0062;
-0061 059A 0316 302A 08E3 0062;0061 302A 0316 08E3 059A 0062;0061 302A 0316 08E3 059A 0062;0061 302A 0316 08E3 059A 0062;0061 302A 0316 08E3 059A 0062;
-0061 08E3 059A 0316 302A 0062;0061 302A 08E3 0316 059A 0062;0061 302A 08E3 0316 059A 0062;0061 302A 08E3 0316 059A 0062;0061 302A 08E3 0316 059A 0062;
+0061 059A 0316 1DFA 08E3 0062;0061 1DFA 0316 08E3 059A 0062;0061 1DFA 0316 08E3 059A 0062;0061 1DFA 0316 08E3 059A 0062;0061 1DFA 0316 08E3 059A 0062;
+0061 08E3 059A 0316 1DFA 0062;0061 1DFA 08E3 0316 059A 0062;0061 1DFA 08E3 0316 059A 0062;0061 1DFA 08E3 0316 059A 0062;0061 1DFA 08E3 0316 059A 0062;
0061 0315 0300 05AE 08E4 0062;00E0 05AE 08E4 0315 0062;0061 05AE 0300 08E4 0315 0062;00E0 05AE 08E4 0315 0062;0061 05AE 0300 08E4 0315 0062;
0061 08E4 0315 0300 05AE 0062;0061 05AE 08E4 0300 0315 0062;0061 05AE 08E4 0300 0315 0062;0061 05AE 08E4 0300 0315 0062;0061 05AE 08E4 0300 0315 0062;
0061 0315 0300 05AE 08E5 0062;00E0 05AE 08E5 0315 0062;0061 05AE 0300 08E5 0315 0062;00E0 05AE 08E5 0315 0062;0061 05AE 0300 08E5 0315 0062;
0061 08E5 0315 0300 05AE 0062;0061 05AE 08E5 0300 0315 0062;0061 05AE 08E5 0300 0315 0062;0061 05AE 08E5 0300 0315 0062;0061 05AE 08E5 0300 0315 0062;
-0061 059A 0316 302A 08E6 0062;0061 302A 0316 08E6 059A 0062;0061 302A 0316 08E6 059A 0062;0061 302A 0316 08E6 059A 0062;0061 302A 0316 08E6 059A 0062;
-0061 08E6 059A 0316 302A 0062;0061 302A 08E6 0316 059A 0062;0061 302A 08E6 0316 059A 0062;0061 302A 08E6 0316 059A 0062;0061 302A 08E6 0316 059A 0062;
+0061 059A 0316 1DFA 08E6 0062;0061 1DFA 0316 08E6 059A 0062;0061 1DFA 0316 08E6 059A 0062;0061 1DFA 0316 08E6 059A 0062;0061 1DFA 0316 08E6 059A 0062;
+0061 08E6 059A 0316 1DFA 0062;0061 1DFA 08E6 0316 059A 0062;0061 1DFA 08E6 0316 059A 0062;0061 1DFA 08E6 0316 059A 0062;0061 1DFA 08E6 0316 059A 0062;
0061 0315 0300 05AE 08E7 0062;00E0 05AE 08E7 0315 0062;0061 05AE 0300 08E7 0315 0062;00E0 05AE 08E7 0315 0062;0061 05AE 0300 08E7 0315 0062;
0061 08E7 0315 0300 05AE 0062;0061 05AE 08E7 0300 0315 0062;0061 05AE 08E7 0300 0315 0062;0061 05AE 08E7 0300 0315 0062;0061 05AE 08E7 0300 0315 0062;
0061 0315 0300 05AE 08E8 0062;00E0 05AE 08E8 0315 0062;0061 05AE 0300 08E8 0315 0062;00E0 05AE 08E8 0315 0062;0061 05AE 0300 08E8 0315 0062;
0061 08E8 0315 0300 05AE 0062;0061 05AE 08E8 0300 0315 0062;0061 05AE 08E8 0300 0315 0062;0061 05AE 08E8 0300 0315 0062;0061 05AE 08E8 0300 0315 0062;
-0061 059A 0316 302A 08E9 0062;0061 302A 0316 08E9 059A 0062;0061 302A 0316 08E9 059A 0062;0061 302A 0316 08E9 059A 0062;0061 302A 0316 08E9 059A 0062;
-0061 08E9 059A 0316 302A 0062;0061 302A 08E9 0316 059A 0062;0061 302A 08E9 0316 059A 0062;0061 302A 08E9 0316 059A 0062;0061 302A 08E9 0316 059A 0062;
+0061 059A 0316 1DFA 08E9 0062;0061 1DFA 0316 08E9 059A 0062;0061 1DFA 0316 08E9 059A 0062;0061 1DFA 0316 08E9 059A 0062;0061 1DFA 0316 08E9 059A 0062;
+0061 08E9 059A 0316 1DFA 0062;0061 1DFA 08E9 0316 059A 0062;0061 1DFA 08E9 0316 059A 0062;0061 1DFA 08E9 0316 059A 0062;0061 1DFA 08E9 0316 059A 0062;
0061 0315 0300 05AE 08EA 0062;00E0 05AE 08EA 0315 0062;0061 05AE 0300 08EA 0315 0062;00E0 05AE 08EA 0315 0062;0061 05AE 0300 08EA 0315 0062;
0061 08EA 0315 0300 05AE 0062;0061 05AE 08EA 0300 0315 0062;0061 05AE 08EA 0300 0315 0062;0061 05AE 08EA 0300 0315 0062;0061 05AE 08EA 0300 0315 0062;
0061 0315 0300 05AE 08EB 0062;00E0 05AE 08EB 0315 0062;0061 05AE 0300 08EB 0315 0062;00E0 05AE 08EB 0315 0062;0061 05AE 0300 08EB 0315 0062;
0061 08EB 0315 0300 05AE 0062;0061 05AE 08EB 0300 0315 0062;0061 05AE 08EB 0300 0315 0062;0061 05AE 08EB 0300 0315 0062;0061 05AE 08EB 0300 0315 0062;
0061 0315 0300 05AE 08EC 0062;00E0 05AE 08EC 0315 0062;0061 05AE 0300 08EC 0315 0062;00E0 05AE 08EC 0315 0062;0061 05AE 0300 08EC 0315 0062;
0061 08EC 0315 0300 05AE 0062;0061 05AE 08EC 0300 0315 0062;0061 05AE 08EC 0300 0315 0062;0061 05AE 08EC 0300 0315 0062;0061 05AE 08EC 0300 0315 0062;
-0061 059A 0316 302A 08ED 0062;0061 302A 0316 08ED 059A 0062;0061 302A 0316 08ED 059A 0062;0061 302A 0316 08ED 059A 0062;0061 302A 0316 08ED 059A 0062;
-0061 08ED 059A 0316 302A 0062;0061 302A 08ED 0316 059A 0062;0061 302A 08ED 0316 059A 0062;0061 302A 08ED 0316 059A 0062;0061 302A 08ED 0316 059A 0062;
-0061 059A 0316 302A 08EE 0062;0061 302A 0316 08EE 059A 0062;0061 302A 0316 08EE 059A 0062;0061 302A 0316 08EE 059A 0062;0061 302A 0316 08EE 059A 0062;
-0061 08EE 059A 0316 302A 0062;0061 302A 08EE 0316 059A 0062;0061 302A 08EE 0316 059A 0062;0061 302A 08EE 0316 059A 0062;0061 302A 08EE 0316 059A 0062;
-0061 059A 0316 302A 08EF 0062;0061 302A 0316 08EF 059A 0062;0061 302A 0316 08EF 059A 0062;0061 302A 0316 08EF 059A 0062;0061 302A 0316 08EF 059A 0062;
-0061 08EF 059A 0316 302A 0062;0061 302A 08EF 0316 059A 0062;0061 302A 08EF 0316 059A 0062;0061 302A 08EF 0316 059A 0062;0061 302A 08EF 0316 059A 0062;
+0061 059A 0316 1DFA 08ED 0062;0061 1DFA 0316 08ED 059A 0062;0061 1DFA 0316 08ED 059A 0062;0061 1DFA 0316 08ED 059A 0062;0061 1DFA 0316 08ED 059A 0062;
+0061 08ED 059A 0316 1DFA 0062;0061 1DFA 08ED 0316 059A 0062;0061 1DFA 08ED 0316 059A 0062;0061 1DFA 08ED 0316 059A 0062;0061 1DFA 08ED 0316 059A 0062;
+0061 059A 0316 1DFA 08EE 0062;0061 1DFA 0316 08EE 059A 0062;0061 1DFA 0316 08EE 059A 0062;0061 1DFA 0316 08EE 059A 0062;0061 1DFA 0316 08EE 059A 0062;
+0061 08EE 059A 0316 1DFA 0062;0061 1DFA 08EE 0316 059A 0062;0061 1DFA 08EE 0316 059A 0062;0061 1DFA 08EE 0316 059A 0062;0061 1DFA 08EE 0316 059A 0062;
+0061 059A 0316 1DFA 08EF 0062;0061 1DFA 0316 08EF 059A 0062;0061 1DFA 0316 08EF 059A 0062;0061 1DFA 0316 08EF 059A 0062;0061 1DFA 0316 08EF 059A 0062;
+0061 08EF 059A 0316 1DFA 0062;0061 1DFA 08EF 0316 059A 0062;0061 1DFA 08EF 0316 059A 0062;0061 1DFA 08EF 0316 059A 0062;0061 1DFA 08EF 0316 059A 0062;
0061 064C 064B FB1E 08F0 0062;0061 FB1E 064B 08F0 064C 0062;0061 FB1E 064B 08F0 064C 0062;0061 FB1E 064B 08F0 064C 0062;0061 FB1E 064B 08F0 064C 0062;
0061 08F0 064C 064B FB1E 0062;0061 FB1E 08F0 064B 064C 0062;0061 FB1E 08F0 064B 064C 0062;0061 FB1E 08F0 064B 064C 0062;0061 FB1E 08F0 064B 064C 0062;
0061 064D 064C 064B 08F1 0062;0061 064B 064C 08F1 064D 0062;0061 064B 064C 08F1 064D 0062;0061 064B 064C 08F1 064D 0062;0061 064B 064C 08F1 064D 0062;
@@ -17611,16 +17704,16 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 08F4 0315 0300 05AE 0062;0061 05AE 08F4 0300 0315 0062;0061 05AE 08F4 0300 0315 0062;0061 05AE 08F4 0300 0315 0062;0061 05AE 08F4 0300 0315 0062;
0061 0315 0300 05AE 08F5 0062;00E0 05AE 08F5 0315 0062;0061 05AE 0300 08F5 0315 0062;00E0 05AE 08F5 0315 0062;0061 05AE 0300 08F5 0315 0062;
0061 08F5 0315 0300 05AE 0062;0061 05AE 08F5 0300 0315 0062;0061 05AE 08F5 0300 0315 0062;0061 05AE 08F5 0300 0315 0062;0061 05AE 08F5 0300 0315 0062;
-0061 059A 0316 302A 08F6 0062;0061 302A 0316 08F6 059A 0062;0061 302A 0316 08F6 059A 0062;0061 302A 0316 08F6 059A 0062;0061 302A 0316 08F6 059A 0062;
-0061 08F6 059A 0316 302A 0062;0061 302A 08F6 0316 059A 0062;0061 302A 08F6 0316 059A 0062;0061 302A 08F6 0316 059A 0062;0061 302A 08F6 0316 059A 0062;
+0061 059A 0316 1DFA 08F6 0062;0061 1DFA 0316 08F6 059A 0062;0061 1DFA 0316 08F6 059A 0062;0061 1DFA 0316 08F6 059A 0062;0061 1DFA 0316 08F6 059A 0062;
+0061 08F6 059A 0316 1DFA 0062;0061 1DFA 08F6 0316 059A 0062;0061 1DFA 08F6 0316 059A 0062;0061 1DFA 08F6 0316 059A 0062;0061 1DFA 08F6 0316 059A 0062;
0061 0315 0300 05AE 08F7 0062;00E0 05AE 08F7 0315 0062;0061 05AE 0300 08F7 0315 0062;00E0 05AE 08F7 0315 0062;0061 05AE 0300 08F7 0315 0062;
0061 08F7 0315 0300 05AE 0062;0061 05AE 08F7 0300 0315 0062;0061 05AE 08F7 0300 0315 0062;0061 05AE 08F7 0300 0315 0062;0061 05AE 08F7 0300 0315 0062;
0061 0315 0300 05AE 08F8 0062;00E0 05AE 08F8 0315 0062;0061 05AE 0300 08F8 0315 0062;00E0 05AE 08F8 0315 0062;0061 05AE 0300 08F8 0315 0062;
0061 08F8 0315 0300 05AE 0062;0061 05AE 08F8 0300 0315 0062;0061 05AE 08F8 0300 0315 0062;0061 05AE 08F8 0300 0315 0062;0061 05AE 08F8 0300 0315 0062;
-0061 059A 0316 302A 08F9 0062;0061 302A 0316 08F9 059A 0062;0061 302A 0316 08F9 059A 0062;0061 302A 0316 08F9 059A 0062;0061 302A 0316 08F9 059A 0062;
-0061 08F9 059A 0316 302A 0062;0061 302A 08F9 0316 059A 0062;0061 302A 08F9 0316 059A 0062;0061 302A 08F9 0316 059A 0062;0061 302A 08F9 0316 059A 0062;
-0061 059A 0316 302A 08FA 0062;0061 302A 0316 08FA 059A 0062;0061 302A 0316 08FA 059A 0062;0061 302A 0316 08FA 059A 0062;0061 302A 0316 08FA 059A 0062;
-0061 08FA 059A 0316 302A 0062;0061 302A 08FA 0316 059A 0062;0061 302A 08FA 0316 059A 0062;0061 302A 08FA 0316 059A 0062;0061 302A 08FA 0316 059A 0062;
+0061 059A 0316 1DFA 08F9 0062;0061 1DFA 0316 08F9 059A 0062;0061 1DFA 0316 08F9 059A 0062;0061 1DFA 0316 08F9 059A 0062;0061 1DFA 0316 08F9 059A 0062;
+0061 08F9 059A 0316 1DFA 0062;0061 1DFA 08F9 0316 059A 0062;0061 1DFA 08F9 0316 059A 0062;0061 1DFA 08F9 0316 059A 0062;0061 1DFA 08F9 0316 059A 0062;
+0061 059A 0316 1DFA 08FA 0062;0061 1DFA 0316 08FA 059A 0062;0061 1DFA 0316 08FA 059A 0062;0061 1DFA 0316 08FA 059A 0062;0061 1DFA 0316 08FA 059A 0062;
+0061 08FA 059A 0316 1DFA 0062;0061 1DFA 08FA 0316 059A 0062;0061 1DFA 08FA 0316 059A 0062;0061 1DFA 08FA 0316 059A 0062;0061 1DFA 08FA 0316 059A 0062;
0061 0315 0300 05AE 08FB 0062;00E0 05AE 08FB 0315 0062;0061 05AE 0300 08FB 0315 0062;00E0 05AE 08FB 0315 0062;0061 05AE 0300 08FB 0315 0062;
0061 08FB 0315 0300 05AE 0062;0061 05AE 08FB 0300 0315 0062;0061 05AE 08FB 0300 0315 0062;0061 05AE 08FB 0300 0315 0062;0061 05AE 08FB 0300 0315 0062;
0061 0315 0300 05AE 08FC 0062;00E0 05AE 08FC 0315 0062;0061 05AE 0300 08FC 0315 0062;00E0 05AE 08FC 0315 0062;0061 05AE 0300 08FC 0315 0062;
@@ -17637,8 +17730,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 094D 05B0 094D 3099 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;
0061 0315 0300 05AE 0951 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062;
0061 0951 0315 0300 05AE 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;
-0061 059A 0316 302A 0952 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;
-0061 0952 059A 0316 302A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;
+0061 059A 0316 1DFA 0952 0062;0061 1DFA 0316 0952 059A 0062;0061 1DFA 0316 0952 059A 0062;0061 1DFA 0316 0952 059A 0062;0061 1DFA 0316 0952 059A 0062;
+0061 0952 059A 0316 1DFA 0062;0061 1DFA 0952 0316 059A 0062;0061 1DFA 0952 0316 059A 0062;0061 1DFA 0952 0316 059A 0062;0061 1DFA 0952 0316 059A 0062;
0061 0315 0300 05AE 0953 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062;
0061 0953 0315 0300 05AE 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;
0061 0315 0300 05AE 0954 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062;
@@ -17663,6 +17756,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0B4D 05B0 094D 3099 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;
0061 05B0 094D 3099 0BCD 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;
0061 0BCD 05B0 094D 3099 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;
+0061 3099 093C 16FF0 0C3C 0062;0061 16FF0 093C 0C3C 3099 0062;0061 16FF0 093C 0C3C 3099 0062;0061 16FF0 093C 0C3C 3099 0062;0061 16FF0 093C 0C3C 3099 0062;
+0061 0C3C 3099 093C 16FF0 0062;0061 16FF0 0C3C 093C 3099 0062;0061 16FF0 0C3C 093C 3099 0062;0061 16FF0 0C3C 093C 3099 0062;0061 16FF0 0C3C 093C 3099 0062;
0061 05B0 094D 3099 0C4D 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;
0061 0C4D 05B0 094D 3099 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;
0061 0C56 0C55 0711 0C55 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;
@@ -17709,16 +17804,16 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0ECA 0F71 0EC8 0EB8 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;
0061 0F71 0EC8 0EB8 0ECB 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;
0061 0ECB 0F71 0EC8 0EB8 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;
-0061 059A 0316 302A 0F18 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;
-0061 0F18 059A 0316 302A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;
-0061 059A 0316 302A 0F19 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;
-0061 0F19 059A 0316 302A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;
-0061 059A 0316 302A 0F35 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;
-0061 0F35 059A 0316 302A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;
-0061 059A 0316 302A 0F37 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;
-0061 0F37 059A 0316 302A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;
-0061 302A 031B 1DCE 0F39 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062;
-0061 0F39 302A 031B 1DCE 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062;
+0061 059A 0316 1DFA 0F18 0062;0061 1DFA 0316 0F18 059A 0062;0061 1DFA 0316 0F18 059A 0062;0061 1DFA 0316 0F18 059A 0062;0061 1DFA 0316 0F18 059A 0062;
+0061 0F18 059A 0316 1DFA 0062;0061 1DFA 0F18 0316 059A 0062;0061 1DFA 0F18 0316 059A 0062;0061 1DFA 0F18 0316 059A 0062;0061 1DFA 0F18 0316 059A 0062;
+0061 059A 0316 1DFA 0F19 0062;0061 1DFA 0316 0F19 059A 0062;0061 1DFA 0316 0F19 059A 0062;0061 1DFA 0316 0F19 059A 0062;0061 1DFA 0316 0F19 059A 0062;
+0061 0F19 059A 0316 1DFA 0062;0061 1DFA 0F19 0316 059A 0062;0061 1DFA 0F19 0316 059A 0062;0061 1DFA 0F19 0316 059A 0062;0061 1DFA 0F19 0316 059A 0062;
+0061 059A 0316 1DFA 0F35 0062;0061 1DFA 0316 0F35 059A 0062;0061 1DFA 0316 0F35 059A 0062;0061 1DFA 0316 0F35 059A 0062;0061 1DFA 0316 0F35 059A 0062;
+0061 0F35 059A 0316 1DFA 0062;0061 1DFA 0F35 0316 059A 0062;0061 1DFA 0F35 0316 059A 0062;0061 1DFA 0F35 0316 059A 0062;0061 1DFA 0F35 0316 059A 0062;
+0061 059A 0316 1DFA 0F37 0062;0061 1DFA 0316 0F37 059A 0062;0061 1DFA 0316 0F37 059A 0062;0061 1DFA 0316 0F37 059A 0062;0061 1DFA 0316 0F37 059A 0062;
+0061 0F37 059A 0316 1DFA 0062;0061 1DFA 0F37 0316 059A 0062;0061 1DFA 0F37 0316 059A 0062;0061 1DFA 0F37 0316 059A 0062;0061 1DFA 0F37 0316 059A 0062;
+0061 1DFA 031B 1DCE 0F39 0062;0061 1DCE 031B 0F39 1DFA 0062;0061 1DCE 031B 0F39 1DFA 0062;0061 1DCE 031B 0F39 1DFA 0062;0061 1DCE 031B 0F39 1DFA 0062;
+0061 0F39 1DFA 031B 1DCE 0062;0061 1DCE 0F39 031B 1DFA 0062;0061 1DCE 0F39 031B 1DFA 0062;0061 1DCE 0F39 031B 1DFA 0062;0061 1DCE 0F39 031B 1DFA 0062;
0061 0F72 0F71 0EC8 0F71 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;
0061 0F71 0F72 0F71 0EC8 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;
0061 0F74 0F72 0F71 0F72 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;
@@ -17745,16 +17840,16 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 0F86 0315 0300 05AE 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;
0061 0315 0300 05AE 0F87 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062;
0061 0F87 0315 0300 05AE 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;
-0061 059A 0316 302A 0FC6 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;
-0061 0FC6 059A 0316 302A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;
+0061 059A 0316 1DFA 0FC6 0062;0061 1DFA 0316 0FC6 059A 0062;0061 1DFA 0316 0FC6 059A 0062;0061 1DFA 0316 0FC6 059A 0062;0061 1DFA 0316 0FC6 059A 0062;
+0061 0FC6 059A 0316 1DFA 0062;0061 1DFA 0FC6 0316 059A 0062;0061 1DFA 0FC6 0316 059A 0062;0061 1DFA 0FC6 0316 059A 0062;0061 1DFA 0FC6 0316 059A 0062;
0061 3099 093C 16FF0 1037 0062;0061 16FF0 093C 1037 3099 0062;0061 16FF0 093C 1037 3099 0062;0061 16FF0 093C 1037 3099 0062;0061 16FF0 093C 1037 3099 0062;
0061 1037 3099 093C 16FF0 0062;0061 16FF0 1037 093C 3099 0062;0061 16FF0 1037 093C 3099 0062;0061 16FF0 1037 093C 3099 0062;0061 16FF0 1037 093C 3099 0062;
0061 05B0 094D 3099 1039 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;
0061 1039 05B0 094D 3099 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;
0061 05B0 094D 3099 103A 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;
0061 103A 05B0 094D 3099 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062;
-0061 059A 0316 302A 108D 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062;
-0061 108D 059A 0316 302A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062;
+0061 059A 0316 1DFA 108D 0062;0061 1DFA 0316 108D 059A 0062;0061 1DFA 0316 108D 059A 0062;0061 1DFA 0316 108D 059A 0062;0061 1DFA 0316 108D 059A 0062;
+0061 108D 059A 0316 1DFA 0062;0061 1DFA 108D 0316 059A 0062;0061 1DFA 108D 0316 059A 0062;0061 1DFA 108D 0316 059A 0062;0061 1DFA 108D 0316 059A 0062;
0061 0315 0300 05AE 135D 0062;00E0 05AE 135D 0315 0062;0061 05AE 0300 135D 0315 0062;00E0 05AE 135D 0315 0062;0061 05AE 0300 135D 0315 0062;
0061 135D 0315 0300 05AE 0062;0061 05AE 135D 0300 0315 0062;0061 05AE 135D 0300 0315 0062;0061 05AE 135D 0300 0315 0062;0061 05AE 135D 0300 0315 0062;
0061 0315 0300 05AE 135E 0062;00E0 05AE 135E 0315 0062;0061 05AE 0300 135E 0315 0062;00E0 05AE 135E 0315 0062;0061 05AE 0300 135E 0315 0062;
@@ -17763,6 +17858,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 135F 0315 0300 05AE 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;
0061 05B0 094D 3099 1714 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;
0061 1714 05B0 094D 3099 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;
+0061 05B0 094D 3099 1715 0062;0061 3099 094D 1715 05B0 0062;0061 3099 094D 1715 05B0 0062;0061 3099 094D 1715 05B0 0062;0061 3099 094D 1715 05B0 0062;
+0061 1715 05B0 094D 3099 0062;0061 3099 1715 094D 05B0 0062;0061 3099 1715 094D 05B0 0062;0061 3099 1715 094D 05B0 0062;0061 3099 1715 094D 05B0 0062;
0061 05B0 094D 3099 1734 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;
0061 1734 05B0 094D 3099 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062;
0061 05B0 094D 3099 17D2 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;
@@ -17775,12 +17872,12 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1939 302E 059A 0316 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062;
0061 0315 0300 05AE 193A 0062;00E0 05AE 193A 0315 0062;0061 05AE 0300 193A 0315 0062;00E0 05AE 193A 0315 0062;0061 05AE 0300 193A 0315 0062;
0061 193A 0315 0300 05AE 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;
-0061 059A 0316 302A 193B 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;
-0061 193B 059A 0316 302A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;
+0061 059A 0316 1DFA 193B 0062;0061 1DFA 0316 193B 059A 0062;0061 1DFA 0316 193B 059A 0062;0061 1DFA 0316 193B 059A 0062;0061 1DFA 0316 193B 059A 0062;
+0061 193B 059A 0316 1DFA 0062;0061 1DFA 193B 0316 059A 0062;0061 1DFA 193B 0316 059A 0062;0061 1DFA 193B 0316 059A 0062;0061 1DFA 193B 0316 059A 0062;
0061 0315 0300 05AE 1A17 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062;
0061 1A17 0315 0300 05AE 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;
-0061 059A 0316 302A 1A18 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;
-0061 1A18 059A 0316 302A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;
+0061 059A 0316 1DFA 1A18 0062;0061 1DFA 0316 1A18 059A 0062;0061 1DFA 0316 1A18 059A 0062;0061 1DFA 0316 1A18 059A 0062;0061 1DFA 0316 1A18 059A 0062;
+0061 1A18 059A 0316 1DFA 0062;0061 1DFA 1A18 0316 059A 0062;0061 1DFA 1A18 0316 059A 0062;0061 1DFA 1A18 0316 059A 0062;0061 1DFA 1A18 0316 059A 0062;
0061 05B0 094D 3099 1A60 0062;0061 3099 094D 1A60 05B0 0062;0061 3099 094D 1A60 05B0 0062;0061 3099 094D 1A60 05B0 0062;0061 3099 094D 1A60 05B0 0062;
0061 1A60 05B0 094D 3099 0062;0061 3099 1A60 094D 05B0 0062;0061 3099 1A60 094D 05B0 0062;0061 3099 1A60 094D 05B0 0062;0061 3099 1A60 094D 05B0 0062;
0061 0315 0300 05AE 1A75 0062;00E0 05AE 1A75 0315 0062;0061 05AE 0300 1A75 0315 0062;00E0 05AE 1A75 0315 0062;0061 05AE 0300 1A75 0315 0062;
@@ -17799,8 +17896,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1A7B 0315 0300 05AE 0062;0061 05AE 1A7B 0300 0315 0062;0061 05AE 1A7B 0300 0315 0062;0061 05AE 1A7B 0300 0315 0062;0061 05AE 1A7B 0300 0315 0062;
0061 0315 0300 05AE 1A7C 0062;00E0 05AE 1A7C 0315 0062;0061 05AE 0300 1A7C 0315 0062;00E0 05AE 1A7C 0315 0062;0061 05AE 0300 1A7C 0315 0062;
0061 1A7C 0315 0300 05AE 0062;0061 05AE 1A7C 0300 0315 0062;0061 05AE 1A7C 0300 0315 0062;0061 05AE 1A7C 0300 0315 0062;0061 05AE 1A7C 0300 0315 0062;
-0061 059A 0316 302A 1A7F 0062;0061 302A 0316 1A7F 059A 0062;0061 302A 0316 1A7F 059A 0062;0061 302A 0316 1A7F 059A 0062;0061 302A 0316 1A7F 059A 0062;
-0061 1A7F 059A 0316 302A 0062;0061 302A 1A7F 0316 059A 0062;0061 302A 1A7F 0316 059A 0062;0061 302A 1A7F 0316 059A 0062;0061 302A 1A7F 0316 059A 0062;
+0061 059A 0316 1DFA 1A7F 0062;0061 1DFA 0316 1A7F 059A 0062;0061 1DFA 0316 1A7F 059A 0062;0061 1DFA 0316 1A7F 059A 0062;0061 1DFA 0316 1A7F 059A 0062;
+0061 1A7F 059A 0316 1DFA 0062;0061 1DFA 1A7F 0316 059A 0062;0061 1DFA 1A7F 0316 059A 0062;0061 1DFA 1A7F 0316 059A 0062;0061 1DFA 1A7F 0316 059A 0062;
0061 0315 0300 05AE 1AB0 0062;00E0 05AE 1AB0 0315 0062;0061 05AE 0300 1AB0 0315 0062;00E0 05AE 1AB0 0315 0062;0061 05AE 0300 1AB0 0315 0062;
0061 1AB0 0315 0300 05AE 0062;0061 05AE 1AB0 0300 0315 0062;0061 05AE 1AB0 0300 0315 0062;0061 05AE 1AB0 0300 0315 0062;0061 05AE 1AB0 0300 0315 0062;
0061 0315 0300 05AE 1AB1 0062;00E0 05AE 1AB1 0315 0062;0061 05AE 0300 1AB1 0315 0062;00E0 05AE 1AB1 0315 0062;0061 05AE 0300 1AB1 0315 0062;
@@ -17811,36 +17908,64 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1AB3 0315 0300 05AE 0062;0061 05AE 1AB3 0300 0315 0062;0061 05AE 1AB3 0300 0315 0062;0061 05AE 1AB3 0300 0315 0062;0061 05AE 1AB3 0300 0315 0062;
0061 0315 0300 05AE 1AB4 0062;00E0 05AE 1AB4 0315 0062;0061 05AE 0300 1AB4 0315 0062;00E0 05AE 1AB4 0315 0062;0061 05AE 0300 1AB4 0315 0062;
0061 1AB4 0315 0300 05AE 0062;0061 05AE 1AB4 0300 0315 0062;0061 05AE 1AB4 0300 0315 0062;0061 05AE 1AB4 0300 0315 0062;0061 05AE 1AB4 0300 0315 0062;
-0061 059A 0316 302A 1AB5 0062;0061 302A 0316 1AB5 059A 0062;0061 302A 0316 1AB5 059A 0062;0061 302A 0316 1AB5 059A 0062;0061 302A 0316 1AB5 059A 0062;
-0061 1AB5 059A 0316 302A 0062;0061 302A 1AB5 0316 059A 0062;0061 302A 1AB5 0316 059A 0062;0061 302A 1AB5 0316 059A 0062;0061 302A 1AB5 0316 059A 0062;
-0061 059A 0316 302A 1AB6 0062;0061 302A 0316 1AB6 059A 0062;0061 302A 0316 1AB6 059A 0062;0061 302A 0316 1AB6 059A 0062;0061 302A 0316 1AB6 059A 0062;
-0061 1AB6 059A 0316 302A 0062;0061 302A 1AB6 0316 059A 0062;0061 302A 1AB6 0316 059A 0062;0061 302A 1AB6 0316 059A 0062;0061 302A 1AB6 0316 059A 0062;
-0061 059A 0316 302A 1AB7 0062;0061 302A 0316 1AB7 059A 0062;0061 302A 0316 1AB7 059A 0062;0061 302A 0316 1AB7 059A 0062;0061 302A 0316 1AB7 059A 0062;
-0061 1AB7 059A 0316 302A 0062;0061 302A 1AB7 0316 059A 0062;0061 302A 1AB7 0316 059A 0062;0061 302A 1AB7 0316 059A 0062;0061 302A 1AB7 0316 059A 0062;
-0061 059A 0316 302A 1AB8 0062;0061 302A 0316 1AB8 059A 0062;0061 302A 0316 1AB8 059A 0062;0061 302A 0316 1AB8 059A 0062;0061 302A 0316 1AB8 059A 0062;
-0061 1AB8 059A 0316 302A 0062;0061 302A 1AB8 0316 059A 0062;0061 302A 1AB8 0316 059A 0062;0061 302A 1AB8 0316 059A 0062;0061 302A 1AB8 0316 059A 0062;
-0061 059A 0316 302A 1AB9 0062;0061 302A 0316 1AB9 059A 0062;0061 302A 0316 1AB9 059A 0062;0061 302A 0316 1AB9 059A 0062;0061 302A 0316 1AB9 059A 0062;
-0061 1AB9 059A 0316 302A 0062;0061 302A 1AB9 0316 059A 0062;0061 302A 1AB9 0316 059A 0062;0061 302A 1AB9 0316 059A 0062;0061 302A 1AB9 0316 059A 0062;
-0061 059A 0316 302A 1ABA 0062;0061 302A 0316 1ABA 059A 0062;0061 302A 0316 1ABA 059A 0062;0061 302A 0316 1ABA 059A 0062;0061 302A 0316 1ABA 059A 0062;
-0061 1ABA 059A 0316 302A 0062;0061 302A 1ABA 0316 059A 0062;0061 302A 1ABA 0316 059A 0062;0061 302A 1ABA 0316 059A 0062;0061 302A 1ABA 0316 059A 0062;
+0061 059A 0316 1DFA 1AB5 0062;0061 1DFA 0316 1AB5 059A 0062;0061 1DFA 0316 1AB5 059A 0062;0061 1DFA 0316 1AB5 059A 0062;0061 1DFA 0316 1AB5 059A 0062;
+0061 1AB5 059A 0316 1DFA 0062;0061 1DFA 1AB5 0316 059A 0062;0061 1DFA 1AB5 0316 059A 0062;0061 1DFA 1AB5 0316 059A 0062;0061 1DFA 1AB5 0316 059A 0062;
+0061 059A 0316 1DFA 1AB6 0062;0061 1DFA 0316 1AB6 059A 0062;0061 1DFA 0316 1AB6 059A 0062;0061 1DFA 0316 1AB6 059A 0062;0061 1DFA 0316 1AB6 059A 0062;
+0061 1AB6 059A 0316 1DFA 0062;0061 1DFA 1AB6 0316 059A 0062;0061 1DFA 1AB6 0316 059A 0062;0061 1DFA 1AB6 0316 059A 0062;0061 1DFA 1AB6 0316 059A 0062;
+0061 059A 0316 1DFA 1AB7 0062;0061 1DFA 0316 1AB7 059A 0062;0061 1DFA 0316 1AB7 059A 0062;0061 1DFA 0316 1AB7 059A 0062;0061 1DFA 0316 1AB7 059A 0062;
+0061 1AB7 059A 0316 1DFA 0062;0061 1DFA 1AB7 0316 059A 0062;0061 1DFA 1AB7 0316 059A 0062;0061 1DFA 1AB7 0316 059A 0062;0061 1DFA 1AB7 0316 059A 0062;
+0061 059A 0316 1DFA 1AB8 0062;0061 1DFA 0316 1AB8 059A 0062;0061 1DFA 0316 1AB8 059A 0062;0061 1DFA 0316 1AB8 059A 0062;0061 1DFA 0316 1AB8 059A 0062;
+0061 1AB8 059A 0316 1DFA 0062;0061 1DFA 1AB8 0316 059A 0062;0061 1DFA 1AB8 0316 059A 0062;0061 1DFA 1AB8 0316 059A 0062;0061 1DFA 1AB8 0316 059A 0062;
+0061 059A 0316 1DFA 1AB9 0062;0061 1DFA 0316 1AB9 059A 0062;0061 1DFA 0316 1AB9 059A 0062;0061 1DFA 0316 1AB9 059A 0062;0061 1DFA 0316 1AB9 059A 0062;
+0061 1AB9 059A 0316 1DFA 0062;0061 1DFA 1AB9 0316 059A 0062;0061 1DFA 1AB9 0316 059A 0062;0061 1DFA 1AB9 0316 059A 0062;0061 1DFA 1AB9 0316 059A 0062;
+0061 059A 0316 1DFA 1ABA 0062;0061 1DFA 0316 1ABA 059A 0062;0061 1DFA 0316 1ABA 059A 0062;0061 1DFA 0316 1ABA 059A 0062;0061 1DFA 0316 1ABA 059A 0062;
+0061 1ABA 059A 0316 1DFA 0062;0061 1DFA 1ABA 0316 059A 0062;0061 1DFA 1ABA 0316 059A 0062;0061 1DFA 1ABA 0316 059A 0062;0061 1DFA 1ABA 0316 059A 0062;
0061 0315 0300 05AE 1ABB 0062;00E0 05AE 1ABB 0315 0062;0061 05AE 0300 1ABB 0315 0062;00E0 05AE 1ABB 0315 0062;0061 05AE 0300 1ABB 0315 0062;
0061 1ABB 0315 0300 05AE 0062;0061 05AE 1ABB 0300 0315 0062;0061 05AE 1ABB 0300 0315 0062;0061 05AE 1ABB 0300 0315 0062;0061 05AE 1ABB 0300 0315 0062;
0061 0315 0300 05AE 1ABC 0062;00E0 05AE 1ABC 0315 0062;0061 05AE 0300 1ABC 0315 0062;00E0 05AE 1ABC 0315 0062;0061 05AE 0300 1ABC 0315 0062;
0061 1ABC 0315 0300 05AE 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;0061 05AE 1ABC 0300 0315 0062;
-0061 059A 0316 302A 1ABD 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;0061 302A 0316 1ABD 059A 0062;
-0061 1ABD 059A 0316 302A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062;0061 302A 1ABD 0316 059A 0062;
-0061 059A 0316 302A 1ABF 0062;0061 302A 0316 1ABF 059A 0062;0061 302A 0316 1ABF 059A 0062;0061 302A 0316 1ABF 059A 0062;0061 302A 0316 1ABF 059A 0062;
-0061 1ABF 059A 0316 302A 0062;0061 302A 1ABF 0316 059A 0062;0061 302A 1ABF 0316 059A 0062;0061 302A 1ABF 0316 059A 0062;0061 302A 1ABF 0316 059A 0062;
-0061 059A 0316 302A 1AC0 0062;0061 302A 0316 1AC0 059A 0062;0061 302A 0316 1AC0 059A 0062;0061 302A 0316 1AC0 059A 0062;0061 302A 0316 1AC0 059A 0062;
-0061 1AC0 059A 0316 302A 0062;0061 302A 1AC0 0316 059A 0062;0061 302A 1AC0 0316 059A 0062;0061 302A 1AC0 0316 059A 0062;0061 302A 1AC0 0316 059A 0062;
+0061 059A 0316 1DFA 1ABD 0062;0061 1DFA 0316 1ABD 059A 0062;0061 1DFA 0316 1ABD 059A 0062;0061 1DFA 0316 1ABD 059A 0062;0061 1DFA 0316 1ABD 059A 0062;
+0061 1ABD 059A 0316 1DFA 0062;0061 1DFA 1ABD 0316 059A 0062;0061 1DFA 1ABD 0316 059A 0062;0061 1DFA 1ABD 0316 059A 0062;0061 1DFA 1ABD 0316 059A 0062;
+0061 059A 0316 1DFA 1ABF 0062;0061 1DFA 0316 1ABF 059A 0062;0061 1DFA 0316 1ABF 059A 0062;0061 1DFA 0316 1ABF 059A 0062;0061 1DFA 0316 1ABF 059A 0062;
+0061 1ABF 059A 0316 1DFA 0062;0061 1DFA 1ABF 0316 059A 0062;0061 1DFA 1ABF 0316 059A 0062;0061 1DFA 1ABF 0316 059A 0062;0061 1DFA 1ABF 0316 059A 0062;
+0061 059A 0316 1DFA 1AC0 0062;0061 1DFA 0316 1AC0 059A 0062;0061 1DFA 0316 1AC0 059A 0062;0061 1DFA 0316 1AC0 059A 0062;0061 1DFA 0316 1AC0 059A 0062;
+0061 1AC0 059A 0316 1DFA 0062;0061 1DFA 1AC0 0316 059A 0062;0061 1DFA 1AC0 0316 059A 0062;0061 1DFA 1AC0 0316 059A 0062;0061 1DFA 1AC0 0316 059A 0062;
+0061 0315 0300 05AE 1AC1 0062;00E0 05AE 1AC1 0315 0062;0061 05AE 0300 1AC1 0315 0062;00E0 05AE 1AC1 0315 0062;0061 05AE 0300 1AC1 0315 0062;
+0061 1AC1 0315 0300 05AE 0062;0061 05AE 1AC1 0300 0315 0062;0061 05AE 1AC1 0300 0315 0062;0061 05AE 1AC1 0300 0315 0062;0061 05AE 1AC1 0300 0315 0062;
+0061 0315 0300 05AE 1AC2 0062;00E0 05AE 1AC2 0315 0062;0061 05AE 0300 1AC2 0315 0062;00E0 05AE 1AC2 0315 0062;0061 05AE 0300 1AC2 0315 0062;
+0061 1AC2 0315 0300 05AE 0062;0061 05AE 1AC2 0300 0315 0062;0061 05AE 1AC2 0300 0315 0062;0061 05AE 1AC2 0300 0315 0062;0061 05AE 1AC2 0300 0315 0062;
+0061 059A 0316 1DFA 1AC3 0062;0061 1DFA 0316 1AC3 059A 0062;0061 1DFA 0316 1AC3 059A 0062;0061 1DFA 0316 1AC3 059A 0062;0061 1DFA 0316 1AC3 059A 0062;
+0061 1AC3 059A 0316 1DFA 0062;0061 1DFA 1AC3 0316 059A 0062;0061 1DFA 1AC3 0316 059A 0062;0061 1DFA 1AC3 0316 059A 0062;0061 1DFA 1AC3 0316 059A 0062;
+0061 059A 0316 1DFA 1AC4 0062;0061 1DFA 0316 1AC4 059A 0062;0061 1DFA 0316 1AC4 059A 0062;0061 1DFA 0316 1AC4 059A 0062;0061 1DFA 0316 1AC4 059A 0062;
+0061 1AC4 059A 0316 1DFA 0062;0061 1DFA 1AC4 0316 059A 0062;0061 1DFA 1AC4 0316 059A 0062;0061 1DFA 1AC4 0316 059A 0062;0061 1DFA 1AC4 0316 059A 0062;
+0061 0315 0300 05AE 1AC5 0062;00E0 05AE 1AC5 0315 0062;0061 05AE 0300 1AC5 0315 0062;00E0 05AE 1AC5 0315 0062;0061 05AE 0300 1AC5 0315 0062;
+0061 1AC5 0315 0300 05AE 0062;0061 05AE 1AC5 0300 0315 0062;0061 05AE 1AC5 0300 0315 0062;0061 05AE 1AC5 0300 0315 0062;0061 05AE 1AC5 0300 0315 0062;
+0061 0315 0300 05AE 1AC6 0062;00E0 05AE 1AC6 0315 0062;0061 05AE 0300 1AC6 0315 0062;00E0 05AE 1AC6 0315 0062;0061 05AE 0300 1AC6 0315 0062;
+0061 1AC6 0315 0300 05AE 0062;0061 05AE 1AC6 0300 0315 0062;0061 05AE 1AC6 0300 0315 0062;0061 05AE 1AC6 0300 0315 0062;0061 05AE 1AC6 0300 0315 0062;
+0061 0315 0300 05AE 1AC7 0062;00E0 05AE 1AC7 0315 0062;0061 05AE 0300 1AC7 0315 0062;00E0 05AE 1AC7 0315 0062;0061 05AE 0300 1AC7 0315 0062;
+0061 1AC7 0315 0300 05AE 0062;0061 05AE 1AC7 0300 0315 0062;0061 05AE 1AC7 0300 0315 0062;0061 05AE 1AC7 0300 0315 0062;0061 05AE 1AC7 0300 0315 0062;
+0061 0315 0300 05AE 1AC8 0062;00E0 05AE 1AC8 0315 0062;0061 05AE 0300 1AC8 0315 0062;00E0 05AE 1AC8 0315 0062;0061 05AE 0300 1AC8 0315 0062;
+0061 1AC8 0315 0300 05AE 0062;0061 05AE 1AC8 0300 0315 0062;0061 05AE 1AC8 0300 0315 0062;0061 05AE 1AC8 0300 0315 0062;0061 05AE 1AC8 0300 0315 0062;
+0061 0315 0300 05AE 1AC9 0062;00E0 05AE 1AC9 0315 0062;0061 05AE 0300 1AC9 0315 0062;00E0 05AE 1AC9 0315 0062;0061 05AE 0300 1AC9 0315 0062;
+0061 1AC9 0315 0300 05AE 0062;0061 05AE 1AC9 0300 0315 0062;0061 05AE 1AC9 0300 0315 0062;0061 05AE 1AC9 0300 0315 0062;0061 05AE 1AC9 0300 0315 0062;
+0061 059A 0316 1DFA 1ACA 0062;0061 1DFA 0316 1ACA 059A 0062;0061 1DFA 0316 1ACA 059A 0062;0061 1DFA 0316 1ACA 059A 0062;0061 1DFA 0316 1ACA 059A 0062;
+0061 1ACA 059A 0316 1DFA 0062;0061 1DFA 1ACA 0316 059A 0062;0061 1DFA 1ACA 0316 059A 0062;0061 1DFA 1ACA 0316 059A 0062;0061 1DFA 1ACA 0316 059A 0062;
+0061 0315 0300 05AE 1ACB 0062;00E0 05AE 1ACB 0315 0062;0061 05AE 0300 1ACB 0315 0062;00E0 05AE 1ACB 0315 0062;0061 05AE 0300 1ACB 0315 0062;
+0061 1ACB 0315 0300 05AE 0062;0061 05AE 1ACB 0300 0315 0062;0061 05AE 1ACB 0300 0315 0062;0061 05AE 1ACB 0300 0315 0062;0061 05AE 1ACB 0300 0315 0062;
+0061 0315 0300 05AE 1ACC 0062;00E0 05AE 1ACC 0315 0062;0061 05AE 0300 1ACC 0315 0062;00E0 05AE 1ACC 0315 0062;0061 05AE 0300 1ACC 0315 0062;
+0061 1ACC 0315 0300 05AE 0062;0061 05AE 1ACC 0300 0315 0062;0061 05AE 1ACC 0300 0315 0062;0061 05AE 1ACC 0300 0315 0062;0061 05AE 1ACC 0300 0315 0062;
+0061 0315 0300 05AE 1ACD 0062;00E0 05AE 1ACD 0315 0062;0061 05AE 0300 1ACD 0315 0062;00E0 05AE 1ACD 0315 0062;0061 05AE 0300 1ACD 0315 0062;
+0061 1ACD 0315 0300 05AE 0062;0061 05AE 1ACD 0300 0315 0062;0061 05AE 1ACD 0300 0315 0062;0061 05AE 1ACD 0300 0315 0062;0061 05AE 1ACD 0300 0315 0062;
+0061 0315 0300 05AE 1ACE 0062;00E0 05AE 1ACE 0315 0062;0061 05AE 0300 1ACE 0315 0062;00E0 05AE 1ACE 0315 0062;0061 05AE 0300 1ACE 0315 0062;
+0061 1ACE 0315 0300 05AE 0062;0061 05AE 1ACE 0300 0315 0062;0061 05AE 1ACE 0300 0315 0062;0061 05AE 1ACE 0300 0315 0062;0061 05AE 1ACE 0300 0315 0062;
0061 3099 093C 16FF0 1B34 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;0061 16FF0 093C 1B34 3099 0062;
0061 1B34 3099 093C 16FF0 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;0061 16FF0 1B34 093C 3099 0062;
0061 05B0 094D 3099 1B44 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;
0061 1B44 05B0 094D 3099 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;
0061 0315 0300 05AE 1B6B 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062;
0061 1B6B 0315 0300 05AE 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;
-0061 059A 0316 302A 1B6C 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;
-0061 1B6C 059A 0316 302A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;
+0061 059A 0316 1DFA 1B6C 0062;0061 1DFA 0316 1B6C 059A 0062;0061 1DFA 0316 1B6C 059A 0062;0061 1DFA 0316 1B6C 059A 0062;0061 1DFA 0316 1B6C 059A 0062;
+0061 1B6C 059A 0316 1DFA 0062;0061 1DFA 1B6C 0316 059A 0062;0061 1DFA 1B6C 0316 059A 0062;0061 1DFA 1B6C 0316 059A 0062;0061 1DFA 1B6C 0316 059A 0062;
0061 0315 0300 05AE 1B6D 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062;
0061 1B6D 0315 0300 05AE 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;
0061 0315 0300 05AE 1B6E 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062;
@@ -17875,28 +18000,28 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1CD2 0315 0300 05AE 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;0061 05AE 1CD2 0300 0315 0062;
0061 16FF0 0334 1CD4 0062;0061 0334 1CD4 16FF0 0062;0061 0334 1CD4 16FF0 0062;0061 0334 1CD4 16FF0 0062;0061 0334 1CD4 16FF0 0062;
0061 1CD4 16FF0 0334 0062;0061 1CD4 0334 16FF0 0062;0061 1CD4 0334 16FF0 0062;0061 1CD4 0334 16FF0 0062;0061 1CD4 0334 16FF0 0062;
-0061 059A 0316 302A 1CD5 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;0061 302A 0316 1CD5 059A 0062;
-0061 1CD5 059A 0316 302A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062;0061 302A 1CD5 0316 059A 0062;
-0061 059A 0316 302A 1CD6 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;0061 302A 0316 1CD6 059A 0062;
-0061 1CD6 059A 0316 302A 0062;0061 302A 1CD6 0316 059A 0062;0061 302A 1CD6 0316 059A 0062;0061 302A 1CD6 0316 059A 0062;0061 302A 1CD6 0316 059A 0062;
-0061 059A 0316 302A 1CD7 0062;0061 302A 0316 1CD7 059A 0062;0061 302A 0316 1CD7 059A 0062;0061 302A 0316 1CD7 059A 0062;0061 302A 0316 1CD7 059A 0062;
-0061 1CD7 059A 0316 302A 0062;0061 302A 1CD7 0316 059A 0062;0061 302A 1CD7 0316 059A 0062;0061 302A 1CD7 0316 059A 0062;0061 302A 1CD7 0316 059A 0062;
-0061 059A 0316 302A 1CD8 0062;0061 302A 0316 1CD8 059A 0062;0061 302A 0316 1CD8 059A 0062;0061 302A 0316 1CD8 059A 0062;0061 302A 0316 1CD8 059A 0062;
-0061 1CD8 059A 0316 302A 0062;0061 302A 1CD8 0316 059A 0062;0061 302A 1CD8 0316 059A 0062;0061 302A 1CD8 0316 059A 0062;0061 302A 1CD8 0316 059A 0062;
-0061 059A 0316 302A 1CD9 0062;0061 302A 0316 1CD9 059A 0062;0061 302A 0316 1CD9 059A 0062;0061 302A 0316 1CD9 059A 0062;0061 302A 0316 1CD9 059A 0062;
-0061 1CD9 059A 0316 302A 0062;0061 302A 1CD9 0316 059A 0062;0061 302A 1CD9 0316 059A 0062;0061 302A 1CD9 0316 059A 0062;0061 302A 1CD9 0316 059A 0062;
+0061 059A 0316 1DFA 1CD5 0062;0061 1DFA 0316 1CD5 059A 0062;0061 1DFA 0316 1CD5 059A 0062;0061 1DFA 0316 1CD5 059A 0062;0061 1DFA 0316 1CD5 059A 0062;
+0061 1CD5 059A 0316 1DFA 0062;0061 1DFA 1CD5 0316 059A 0062;0061 1DFA 1CD5 0316 059A 0062;0061 1DFA 1CD5 0316 059A 0062;0061 1DFA 1CD5 0316 059A 0062;
+0061 059A 0316 1DFA 1CD6 0062;0061 1DFA 0316 1CD6 059A 0062;0061 1DFA 0316 1CD6 059A 0062;0061 1DFA 0316 1CD6 059A 0062;0061 1DFA 0316 1CD6 059A 0062;
+0061 1CD6 059A 0316 1DFA 0062;0061 1DFA 1CD6 0316 059A 0062;0061 1DFA 1CD6 0316 059A 0062;0061 1DFA 1CD6 0316 059A 0062;0061 1DFA 1CD6 0316 059A 0062;
+0061 059A 0316 1DFA 1CD7 0062;0061 1DFA 0316 1CD7 059A 0062;0061 1DFA 0316 1CD7 059A 0062;0061 1DFA 0316 1CD7 059A 0062;0061 1DFA 0316 1CD7 059A 0062;
+0061 1CD7 059A 0316 1DFA 0062;0061 1DFA 1CD7 0316 059A 0062;0061 1DFA 1CD7 0316 059A 0062;0061 1DFA 1CD7 0316 059A 0062;0061 1DFA 1CD7 0316 059A 0062;
+0061 059A 0316 1DFA 1CD8 0062;0061 1DFA 0316 1CD8 059A 0062;0061 1DFA 0316 1CD8 059A 0062;0061 1DFA 0316 1CD8 059A 0062;0061 1DFA 0316 1CD8 059A 0062;
+0061 1CD8 059A 0316 1DFA 0062;0061 1DFA 1CD8 0316 059A 0062;0061 1DFA 1CD8 0316 059A 0062;0061 1DFA 1CD8 0316 059A 0062;0061 1DFA 1CD8 0316 059A 0062;
+0061 059A 0316 1DFA 1CD9 0062;0061 1DFA 0316 1CD9 059A 0062;0061 1DFA 0316 1CD9 059A 0062;0061 1DFA 0316 1CD9 059A 0062;0061 1DFA 0316 1CD9 059A 0062;
+0061 1CD9 059A 0316 1DFA 0062;0061 1DFA 1CD9 0316 059A 0062;0061 1DFA 1CD9 0316 059A 0062;0061 1DFA 1CD9 0316 059A 0062;0061 1DFA 1CD9 0316 059A 0062;
0061 0315 0300 05AE 1CDA 0062;00E0 05AE 1CDA 0315 0062;0061 05AE 0300 1CDA 0315 0062;00E0 05AE 1CDA 0315 0062;0061 05AE 0300 1CDA 0315 0062;
0061 1CDA 0315 0300 05AE 0062;0061 05AE 1CDA 0300 0315 0062;0061 05AE 1CDA 0300 0315 0062;0061 05AE 1CDA 0300 0315 0062;0061 05AE 1CDA 0300 0315 0062;
0061 0315 0300 05AE 1CDB 0062;00E0 05AE 1CDB 0315 0062;0061 05AE 0300 1CDB 0315 0062;00E0 05AE 1CDB 0315 0062;0061 05AE 0300 1CDB 0315 0062;
0061 1CDB 0315 0300 05AE 0062;0061 05AE 1CDB 0300 0315 0062;0061 05AE 1CDB 0300 0315 0062;0061 05AE 1CDB 0300 0315 0062;0061 05AE 1CDB 0300 0315 0062;
-0061 059A 0316 302A 1CDC 0062;0061 302A 0316 1CDC 059A 0062;0061 302A 0316 1CDC 059A 0062;0061 302A 0316 1CDC 059A 0062;0061 302A 0316 1CDC 059A 0062;
-0061 1CDC 059A 0316 302A 0062;0061 302A 1CDC 0316 059A 0062;0061 302A 1CDC 0316 059A 0062;0061 302A 1CDC 0316 059A 0062;0061 302A 1CDC 0316 059A 0062;
-0061 059A 0316 302A 1CDD 0062;0061 302A 0316 1CDD 059A 0062;0061 302A 0316 1CDD 059A 0062;0061 302A 0316 1CDD 059A 0062;0061 302A 0316 1CDD 059A 0062;
-0061 1CDD 059A 0316 302A 0062;0061 302A 1CDD 0316 059A 0062;0061 302A 1CDD 0316 059A 0062;0061 302A 1CDD 0316 059A 0062;0061 302A 1CDD 0316 059A 0062;
-0061 059A 0316 302A 1CDE 0062;0061 302A 0316 1CDE 059A 0062;0061 302A 0316 1CDE 059A 0062;0061 302A 0316 1CDE 059A 0062;0061 302A 0316 1CDE 059A 0062;
-0061 1CDE 059A 0316 302A 0062;0061 302A 1CDE 0316 059A 0062;0061 302A 1CDE 0316 059A 0062;0061 302A 1CDE 0316 059A 0062;0061 302A 1CDE 0316 059A 0062;
-0061 059A 0316 302A 1CDF 0062;0061 302A 0316 1CDF 059A 0062;0061 302A 0316 1CDF 059A 0062;0061 302A 0316 1CDF 059A 0062;0061 302A 0316 1CDF 059A 0062;
-0061 1CDF 059A 0316 302A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062;0061 302A 1CDF 0316 059A 0062;
+0061 059A 0316 1DFA 1CDC 0062;0061 1DFA 0316 1CDC 059A 0062;0061 1DFA 0316 1CDC 059A 0062;0061 1DFA 0316 1CDC 059A 0062;0061 1DFA 0316 1CDC 059A 0062;
+0061 1CDC 059A 0316 1DFA 0062;0061 1DFA 1CDC 0316 059A 0062;0061 1DFA 1CDC 0316 059A 0062;0061 1DFA 1CDC 0316 059A 0062;0061 1DFA 1CDC 0316 059A 0062;
+0061 059A 0316 1DFA 1CDD 0062;0061 1DFA 0316 1CDD 059A 0062;0061 1DFA 0316 1CDD 059A 0062;0061 1DFA 0316 1CDD 059A 0062;0061 1DFA 0316 1CDD 059A 0062;
+0061 1CDD 059A 0316 1DFA 0062;0061 1DFA 1CDD 0316 059A 0062;0061 1DFA 1CDD 0316 059A 0062;0061 1DFA 1CDD 0316 059A 0062;0061 1DFA 1CDD 0316 059A 0062;
+0061 059A 0316 1DFA 1CDE 0062;0061 1DFA 0316 1CDE 059A 0062;0061 1DFA 0316 1CDE 059A 0062;0061 1DFA 0316 1CDE 059A 0062;0061 1DFA 0316 1CDE 059A 0062;
+0061 1CDE 059A 0316 1DFA 0062;0061 1DFA 1CDE 0316 059A 0062;0061 1DFA 1CDE 0316 059A 0062;0061 1DFA 1CDE 0316 059A 0062;0061 1DFA 1CDE 0316 059A 0062;
+0061 059A 0316 1DFA 1CDF 0062;0061 1DFA 0316 1CDF 059A 0062;0061 1DFA 0316 1CDF 059A 0062;0061 1DFA 0316 1CDF 059A 0062;0061 1DFA 0316 1CDF 059A 0062;
+0061 1CDF 059A 0316 1DFA 0062;0061 1DFA 1CDF 0316 059A 0062;0061 1DFA 1CDF 0316 059A 0062;0061 1DFA 1CDF 0316 059A 0062;0061 1DFA 1CDF 0316 059A 0062;
0061 0315 0300 05AE 1CE0 0062;00E0 05AE 1CE0 0315 0062;0061 05AE 0300 1CE0 0315 0062;00E0 05AE 1CE0 0315 0062;0061 05AE 0300 1CE0 0315 0062;
0061 1CE0 0315 0300 05AE 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;0061 05AE 1CE0 0300 0315 0062;
0061 16FF0 0334 1CE2 0062;0061 0334 1CE2 16FF0 0062;0061 0334 1CE2 16FF0 0062;0061 0334 1CE2 16FF0 0062;0061 0334 1CE2 16FF0 0062;
@@ -17913,8 +18038,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1CE7 16FF0 0334 0062;0061 1CE7 0334 16FF0 0062;0061 1CE7 0334 16FF0 0062;0061 1CE7 0334 16FF0 0062;0061 1CE7 0334 16FF0 0062;
0061 16FF0 0334 1CE8 0062;0061 0334 1CE8 16FF0 0062;0061 0334 1CE8 16FF0 0062;0061 0334 1CE8 16FF0 0062;0061 0334 1CE8 16FF0 0062;
0061 1CE8 16FF0 0334 0062;0061 1CE8 0334 16FF0 0062;0061 1CE8 0334 16FF0 0062;0061 1CE8 0334 16FF0 0062;0061 1CE8 0334 16FF0 0062;
-0061 059A 0316 302A 1CED 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062;0061 302A 0316 1CED 059A 0062;
-0061 1CED 059A 0316 302A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062;0061 302A 1CED 0316 059A 0062;
+0061 059A 0316 1DFA 1CED 0062;0061 1DFA 0316 1CED 059A 0062;0061 1DFA 0316 1CED 059A 0062;0061 1DFA 0316 1CED 059A 0062;0061 1DFA 0316 1CED 059A 0062;
+0061 1CED 059A 0316 1DFA 0062;0061 1DFA 1CED 0316 059A 0062;0061 1DFA 1CED 0316 059A 0062;0061 1DFA 1CED 0316 059A 0062;0061 1DFA 1CED 0316 059A 0062;
0061 0315 0300 05AE 1CF4 0062;00E0 05AE 1CF4 0315 0062;0061 05AE 0300 1CF4 0315 0062;00E0 05AE 1CF4 0315 0062;0061 05AE 0300 1CF4 0315 0062;
0061 1CF4 0315 0300 05AE 0062;0061 05AE 1CF4 0300 0315 0062;0061 05AE 1CF4 0300 0315 0062;0061 05AE 1CF4 0300 0315 0062;0061 05AE 1CF4 0300 0315 0062;
0061 0315 0300 05AE 1CF8 0062;00E0 05AE 1CF8 0315 0062;0061 05AE 0300 1CF8 0315 0062;00E0 05AE 1CF8 0315 0062;0061 05AE 0300 1CF8 0315 0062;
@@ -17925,8 +18050,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1DC0 0315 0300 05AE 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;
0061 0315 0300 05AE 1DC1 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062;
0061 1DC1 0315 0300 05AE 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;
-0061 059A 0316 302A 1DC2 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;
-0061 1DC2 059A 0316 302A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;
+0061 059A 0316 1DFA 1DC2 0062;0061 1DFA 0316 1DC2 059A 0062;0061 1DFA 0316 1DC2 059A 0062;0061 1DFA 0316 1DC2 059A 0062;0061 1DFA 0316 1DC2 059A 0062;
+0061 1DC2 059A 0316 1DFA 0062;0061 1DFA 1DC2 0316 059A 0062;0061 1DFA 1DC2 0316 059A 0062;0061 1DFA 1DC2 0316 059A 0062;0061 1DFA 1DC2 0316 059A 0062;
0061 0315 0300 05AE 1DC3 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062;
0061 1DC3 0315 0300 05AE 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;
0061 0315 0300 05AE 1DC4 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062;
@@ -17941,8 +18066,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1DC8 0315 0300 05AE 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;
0061 0315 0300 05AE 1DC9 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062;
0061 1DC9 0315 0300 05AE 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;
-0061 059A 0316 302A 1DCA 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;
-0061 1DCA 059A 0316 302A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;
+0061 059A 0316 1DFA 1DCA 0062;0061 1DFA 0316 1DCA 059A 0062;0061 1DFA 0316 1DCA 059A 0062;0061 1DFA 0316 1DCA 059A 0062;0061 1DFA 0316 1DCA 059A 0062;
+0061 1DCA 059A 0316 1DFA 0062;0061 1DFA 1DCA 0316 059A 0062;0061 1DFA 1DCA 0316 059A 0062;0061 1DFA 1DCA 0316 059A 0062;0061 1DFA 1DCA 0316 059A 0062;
0061 0315 0300 05AE 1DCB 0062;00E0 05AE 1DCB 0315 0062;0061 05AE 0300 1DCB 0315 0062;00E0 05AE 1DCB 0315 0062;0061 05AE 0300 1DCB 0315 0062;
0061 1DCB 0315 0300 05AE 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062;
0061 0315 0300 05AE 1DCC 0062;00E0 05AE 1DCC 0315 0062;0061 05AE 0300 1DCC 0315 0062;00E0 05AE 1DCC 0315 0062;0061 05AE 0300 1DCC 0315 0062;
@@ -17951,8 +18076,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1DCD 0345 035D 035C 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062;
0061 031B 1DCE 0321 1DCE 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;
0061 1DCE 031B 1DCE 0321 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;
-0061 059A 0316 302A 1DCF 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062;
-0061 1DCF 059A 0316 302A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062;
+0061 059A 0316 1DFA 1DCF 0062;0061 1DFA 0316 1DCF 059A 0062;0061 1DFA 0316 1DCF 059A 0062;0061 1DFA 0316 1DCF 059A 0062;0061 1DFA 0316 1DCF 059A 0062;
+0061 1DCF 059A 0316 1DFA 0062;0061 1DFA 1DCF 0316 059A 0062;0061 1DFA 1DCF 0316 059A 0062;0061 1DFA 1DCF 0316 059A 0062;0061 1DFA 1DCF 0316 059A 0062;
0061 1DCE 0321 0F74 1DD0 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062;
0061 1DD0 1DCE 0321 0F74 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062;
0061 0315 0300 05AE 1DD1 0062;00E0 05AE 1DD1 0315 0062;0061 05AE 0300 1DD1 0315 0062;00E0 05AE 1DD1 0315 0062;0061 05AE 0300 1DD1 0315 0062;
@@ -18035,18 +18160,20 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1DF7 0300 05AE 1D16D 0062;00E0 1D16D 1DF7 05AE 0062;0061 1D16D 1DF7 05AE 0300 0062;00E0 1D16D 1DF7 05AE 0062;0061 1D16D 1DF7 05AE 0300 0062;
0061 0300 05AE 1D16D 1DF8 0062;00E0 1D16D 05AE 1DF8 0062;0061 1D16D 05AE 1DF8 0300 0062;00E0 1D16D 05AE 1DF8 0062;0061 1D16D 05AE 1DF8 0300 0062;
0061 1DF8 0300 05AE 1D16D 0062;00E0 1D16D 1DF8 05AE 0062;0061 1D16D 1DF8 05AE 0300 0062;00E0 1D16D 1DF8 05AE 0062;0061 1D16D 1DF8 05AE 0300 0062;
-0061 059A 0316 302A 1DF9 0062;0061 302A 0316 1DF9 059A 0062;0061 302A 0316 1DF9 059A 0062;0061 302A 0316 1DF9 059A 0062;0061 302A 0316 1DF9 059A 0062;
-0061 1DF9 059A 0316 302A 0062;0061 302A 1DF9 0316 059A 0062;0061 302A 1DF9 0316 059A 0062;0061 302A 1DF9 0316 059A 0062;0061 302A 1DF9 0316 059A 0062;
+0061 059A 0316 1DFA 1DF9 0062;0061 1DFA 0316 1DF9 059A 0062;0061 1DFA 0316 1DF9 059A 0062;0061 1DFA 0316 1DF9 059A 0062;0061 1DFA 0316 1DF9 059A 0062;
+0061 1DF9 059A 0316 1DFA 0062;0061 1DFA 1DF9 0316 059A 0062;0061 1DFA 1DF9 0316 059A 0062;0061 1DFA 1DF9 0316 059A 0062;0061 1DFA 1DF9 0316 059A 0062;
+0061 0316 1DFA 031B 1DFA 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062;
+0061 1DFA 0316 1DFA 031B 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062;0061 031B 1DFA 1DFA 0316 0062;
0061 0315 0300 05AE 1DFB 0062;00E0 05AE 1DFB 0315 0062;0061 05AE 0300 1DFB 0315 0062;00E0 05AE 1DFB 0315 0062;0061 05AE 0300 1DFB 0315 0062;
0061 1DFB 0315 0300 05AE 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062;0061 05AE 1DFB 0300 0315 0062;
0061 035D 035C 0315 1DFC 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062;0061 0315 035C 1DFC 035D 0062;
0061 1DFC 035D 035C 0315 0062;0061 0315 1DFC 035C 035D 0062;0061 0315 1DFC 035C 035D 0062;0061 0315 1DFC 035C 035D 0062;0061 0315 1DFC 035C 035D 0062;
-0061 059A 0316 302A 1DFD 0062;0061 302A 0316 1DFD 059A 0062;0061 302A 0316 1DFD 059A 0062;0061 302A 0316 1DFD 059A 0062;0061 302A 0316 1DFD 059A 0062;
-0061 1DFD 059A 0316 302A 0062;0061 302A 1DFD 0316 059A 0062;0061 302A 1DFD 0316 059A 0062;0061 302A 1DFD 0316 059A 0062;0061 302A 1DFD 0316 059A 0062;
+0061 059A 0316 1DFA 1DFD 0062;0061 1DFA 0316 1DFD 059A 0062;0061 1DFA 0316 1DFD 059A 0062;0061 1DFA 0316 1DFD 059A 0062;0061 1DFA 0316 1DFD 059A 0062;
+0061 1DFD 059A 0316 1DFA 0062;0061 1DFA 1DFD 0316 059A 0062;0061 1DFA 1DFD 0316 059A 0062;0061 1DFA 1DFD 0316 059A 0062;0061 1DFA 1DFD 0316 059A 0062;
0061 0315 0300 05AE 1DFE 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062;
0061 1DFE 0315 0300 05AE 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;
-0061 059A 0316 302A 1DFF 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;
-0061 1DFF 059A 0316 302A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;
+0061 059A 0316 1DFA 1DFF 0062;0061 1DFA 0316 1DFF 059A 0062;0061 1DFA 0316 1DFF 059A 0062;0061 1DFA 0316 1DFF 059A 0062;0061 1DFA 0316 1DFF 059A 0062;
+0061 1DFF 059A 0316 1DFA 0062;0061 1DFA 1DFF 0316 059A 0062;0061 1DFA 1DFF 0316 059A 0062;0061 1DFA 1DFF 0316 059A 0062;0061 1DFA 1DFF 0316 059A 0062;
0061 0315 0300 05AE 20D0 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062;
0061 20D0 0315 0300 05AE 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;
0061 0315 0300 05AE 20D1 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062;
@@ -18081,22 +18208,22 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 20E6 16FF0 0334 0062;0061 20E6 0334 16FF0 0062;0061 20E6 0334 16FF0 0062;0061 20E6 0334 16FF0 0062;0061 20E6 0334 16FF0 0062;
0061 0315 0300 05AE 20E7 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062;
0061 20E7 0315 0300 05AE 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;
-0061 059A 0316 302A 20E8 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;
-0061 20E8 059A 0316 302A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;
+0061 059A 0316 1DFA 20E8 0062;0061 1DFA 0316 20E8 059A 0062;0061 1DFA 0316 20E8 059A 0062;0061 1DFA 0316 20E8 059A 0062;0061 1DFA 0316 20E8 059A 0062;
+0061 20E8 059A 0316 1DFA 0062;0061 1DFA 20E8 0316 059A 0062;0061 1DFA 20E8 0316 059A 0062;0061 1DFA 20E8 0316 059A 0062;0061 1DFA 20E8 0316 059A 0062;
0061 0315 0300 05AE 20E9 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062;
0061 20E9 0315 0300 05AE 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;
0061 16FF0 0334 20EA 0062;0061 0334 20EA 16FF0 0062;0061 0334 20EA 16FF0 0062;0061 0334 20EA 16FF0 0062;0061 0334 20EA 16FF0 0062;
0061 20EA 16FF0 0334 0062;0061 20EA 0334 16FF0 0062;0061 20EA 0334 16FF0 0062;0061 20EA 0334 16FF0 0062;0061 20EA 0334 16FF0 0062;
0061 16FF0 0334 20EB 0062;0061 0334 20EB 16FF0 0062;0061 0334 20EB 16FF0 0062;0061 0334 20EB 16FF0 0062;0061 0334 20EB 16FF0 0062;
0061 20EB 16FF0 0334 0062;0061 20EB 0334 16FF0 0062;0061 20EB 0334 16FF0 0062;0061 20EB 0334 16FF0 0062;0061 20EB 0334 16FF0 0062;
-0061 059A 0316 302A 20EC 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;
-0061 20EC 059A 0316 302A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;
-0061 059A 0316 302A 20ED 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;
-0061 20ED 059A 0316 302A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;
-0061 059A 0316 302A 20EE 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;
-0061 20EE 059A 0316 302A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;
-0061 059A 0316 302A 20EF 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;
-0061 20EF 059A 0316 302A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;
+0061 059A 0316 1DFA 20EC 0062;0061 1DFA 0316 20EC 059A 0062;0061 1DFA 0316 20EC 059A 0062;0061 1DFA 0316 20EC 059A 0062;0061 1DFA 0316 20EC 059A 0062;
+0061 20EC 059A 0316 1DFA 0062;0061 1DFA 20EC 0316 059A 0062;0061 1DFA 20EC 0316 059A 0062;0061 1DFA 20EC 0316 059A 0062;0061 1DFA 20EC 0316 059A 0062;
+0061 059A 0316 1DFA 20ED 0062;0061 1DFA 0316 20ED 059A 0062;0061 1DFA 0316 20ED 059A 0062;0061 1DFA 0316 20ED 059A 0062;0061 1DFA 0316 20ED 059A 0062;
+0061 20ED 059A 0316 1DFA 0062;0061 1DFA 20ED 0316 059A 0062;0061 1DFA 20ED 0316 059A 0062;0061 1DFA 20ED 0316 059A 0062;0061 1DFA 20ED 0316 059A 0062;
+0061 059A 0316 1DFA 20EE 0062;0061 1DFA 0316 20EE 059A 0062;0061 1DFA 0316 20EE 059A 0062;0061 1DFA 0316 20EE 059A 0062;0061 1DFA 0316 20EE 059A 0062;
+0061 20EE 059A 0316 1DFA 0062;0061 1DFA 20EE 0316 059A 0062;0061 1DFA 20EE 0316 059A 0062;0061 1DFA 20EE 0316 059A 0062;0061 1DFA 20EE 0316 059A 0062;
+0061 059A 0316 1DFA 20EF 0062;0061 1DFA 0316 20EF 059A 0062;0061 1DFA 0316 20EF 059A 0062;0061 1DFA 0316 20EF 059A 0062;0061 1DFA 0316 20EF 059A 0062;
+0061 20EF 059A 0316 1DFA 0062;0061 1DFA 20EF 0316 059A 0062;0061 1DFA 20EF 0316 059A 0062;0061 1DFA 20EF 0316 059A 0062;0061 1DFA 20EF 0316 059A 0062;
0061 0315 0300 05AE 20F0 0062;00E0 05AE 20F0 0315 0062;0061 05AE 0300 20F0 0315 0062;00E0 05AE 20F0 0315 0062;0061 05AE 0300 20F0 0315 0062;
0061 20F0 0315 0300 05AE 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062;
0061 0315 0300 05AE 2CEF 0062;00E0 05AE 2CEF 0315 0062;0061 05AE 0300 2CEF 0315 0062;00E0 05AE 2CEF 0315 0062;0061 05AE 0300 2CEF 0315 0062;
@@ -18171,8 +18298,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 2DFE 0315 0300 05AE 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062;
0061 0315 0300 05AE 2DFF 0062;00E0 05AE 2DFF 0315 0062;0061 05AE 0300 2DFF 0315 0062;00E0 05AE 2DFF 0315 0062;0061 05AE 0300 2DFF 0315 0062;
0061 2DFF 0315 0300 05AE 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062;
-0061 0316 302A 031B 302A 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;
-0061 302A 0316 302A 031B 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;
+0061 0316 1DFA 031B 302A 0062;0061 031B 1DFA 302A 0316 0062;0061 031B 1DFA 302A 0316 0062;0061 031B 1DFA 302A 0316 0062;0061 031B 1DFA 302A 0316 0062;
+0061 302A 0316 1DFA 031B 0062;0061 031B 302A 1DFA 0316 0062;0061 031B 302A 1DFA 0316 0062;0061 031B 302A 1DFA 0316 0062;0061 031B 302A 1DFA 0316 0062;
0061 0300 05AE 1D16D 302B 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062;
0061 302B 0300 05AE 1D16D 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062;
0061 035C 0315 0300 302C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062;
@@ -18259,12 +18386,12 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 A8F0 0315 0300 05AE 0062;0061 05AE A8F0 0300 0315 0062;0061 05AE A8F0 0300 0315 0062;0061 05AE A8F0 0300 0315 0062;0061 05AE A8F0 0300 0315 0062;
0061 0315 0300 05AE A8F1 0062;00E0 05AE A8F1 0315 0062;0061 05AE 0300 A8F1 0315 0062;00E0 05AE A8F1 0315 0062;0061 05AE 0300 A8F1 0315 0062;
0061 A8F1 0315 0300 05AE 0062;0061 05AE A8F1 0300 0315 0062;0061 05AE A8F1 0300 0315 0062;0061 05AE A8F1 0300 0315 0062;0061 05AE A8F1 0300 0315 0062;
-0061 059A 0316 302A A92B 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062;
-0061 A92B 059A 0316 302A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062;
-0061 059A 0316 302A A92C 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062;
-0061 A92C 059A 0316 302A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062;
-0061 059A 0316 302A A92D 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062;
-0061 A92D 059A 0316 302A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;
+0061 059A 0316 1DFA A92B 0062;0061 1DFA 0316 A92B 059A 0062;0061 1DFA 0316 A92B 059A 0062;0061 1DFA 0316 A92B 059A 0062;0061 1DFA 0316 A92B 059A 0062;
+0061 A92B 059A 0316 1DFA 0062;0061 1DFA A92B 0316 059A 0062;0061 1DFA A92B 0316 059A 0062;0061 1DFA A92B 0316 059A 0062;0061 1DFA A92B 0316 059A 0062;
+0061 059A 0316 1DFA A92C 0062;0061 1DFA 0316 A92C 059A 0062;0061 1DFA 0316 A92C 059A 0062;0061 1DFA 0316 A92C 059A 0062;0061 1DFA 0316 A92C 059A 0062;
+0061 A92C 059A 0316 1DFA 0062;0061 1DFA A92C 0316 059A 0062;0061 1DFA A92C 0316 059A 0062;0061 1DFA A92C 0316 059A 0062;0061 1DFA A92C 0316 059A 0062;
+0061 059A 0316 1DFA A92D 0062;0061 1DFA 0316 A92D 059A 0062;0061 1DFA 0316 A92D 059A 0062;0061 1DFA 0316 A92D 059A 0062;0061 1DFA 0316 A92D 059A 0062;
+0061 A92D 059A 0316 1DFA 0062;0061 1DFA A92D 0316 059A 0062;0061 1DFA A92D 0316 059A 0062;0061 1DFA A92D 0316 059A 0062;0061 1DFA A92D 0316 059A 0062;
0061 05B0 094D 3099 A953 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;
0061 A953 05B0 094D 3099 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;
0061 3099 093C 16FF0 A9B3 0062;0061 16FF0 093C A9B3 3099 0062;0061 16FF0 093C A9B3 3099 0062;0061 16FF0 093C A9B3 3099 0062;0061 16FF0 093C A9B3 3099 0062;
@@ -18277,8 +18404,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 AAB2 0315 0300 05AE 0062;0061 05AE AAB2 0300 0315 0062;0061 05AE AAB2 0300 0315 0062;0061 05AE AAB2 0300 0315 0062;0061 05AE AAB2 0300 0315 0062;
0061 0315 0300 05AE AAB3 0062;00E0 05AE AAB3 0315 0062;0061 05AE 0300 AAB3 0315 0062;00E0 05AE AAB3 0315 0062;0061 05AE 0300 AAB3 0315 0062;
0061 AAB3 0315 0300 05AE 0062;0061 05AE AAB3 0300 0315 0062;0061 05AE AAB3 0300 0315 0062;0061 05AE AAB3 0300 0315 0062;0061 05AE AAB3 0300 0315 0062;
-0061 059A 0316 302A AAB4 0062;0061 302A 0316 AAB4 059A 0062;0061 302A 0316 AAB4 059A 0062;0061 302A 0316 AAB4 059A 0062;0061 302A 0316 AAB4 059A 0062;
-0061 AAB4 059A 0316 302A 0062;0061 302A AAB4 0316 059A 0062;0061 302A AAB4 0316 059A 0062;0061 302A AAB4 0316 059A 0062;0061 302A AAB4 0316 059A 0062;
+0061 059A 0316 1DFA AAB4 0062;0061 1DFA 0316 AAB4 059A 0062;0061 1DFA 0316 AAB4 059A 0062;0061 1DFA 0316 AAB4 059A 0062;0061 1DFA 0316 AAB4 059A 0062;
+0061 AAB4 059A 0316 1DFA 0062;0061 1DFA AAB4 0316 059A 0062;0061 1DFA AAB4 0316 059A 0062;0061 1DFA AAB4 0316 059A 0062;0061 1DFA AAB4 0316 059A 0062;
0061 0315 0300 05AE AAB7 0062;00E0 05AE AAB7 0315 0062;0061 05AE 0300 AAB7 0315 0062;00E0 05AE AAB7 0315 0062;0061 05AE 0300 AAB7 0315 0062;
0061 AAB7 0315 0300 05AE 0062;0061 05AE AAB7 0300 0315 0062;0061 05AE AAB7 0300 0315 0062;0061 05AE AAB7 0300 0315 0062;0061 05AE AAB7 0300 0315 0062;
0061 0315 0300 05AE AAB8 0062;00E0 05AE AAB8 0315 0062;0061 05AE 0300 AAB8 0315 0062;00E0 05AE AAB8 0315 0062;0061 05AE 0300 AAB8 0315 0062;
@@ -18309,28 +18436,28 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 FE25 0315 0300 05AE 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062;
0061 0315 0300 05AE FE26 0062;00E0 05AE FE26 0315 0062;0061 05AE 0300 FE26 0315 0062;00E0 05AE FE26 0315 0062;0061 05AE 0300 FE26 0315 0062;
0061 FE26 0315 0300 05AE 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062;
-0061 059A 0316 302A FE27 0062;0061 302A 0316 FE27 059A 0062;0061 302A 0316 FE27 059A 0062;0061 302A 0316 FE27 059A 0062;0061 302A 0316 FE27 059A 0062;
-0061 FE27 059A 0316 302A 0062;0061 302A FE27 0316 059A 0062;0061 302A FE27 0316 059A 0062;0061 302A FE27 0316 059A 0062;0061 302A FE27 0316 059A 0062;
-0061 059A 0316 302A FE28 0062;0061 302A 0316 FE28 059A 0062;0061 302A 0316 FE28 059A 0062;0061 302A 0316 FE28 059A 0062;0061 302A 0316 FE28 059A 0062;
-0061 FE28 059A 0316 302A 0062;0061 302A FE28 0316 059A 0062;0061 302A FE28 0316 059A 0062;0061 302A FE28 0316 059A 0062;0061 302A FE28 0316 059A 0062;
-0061 059A 0316 302A FE29 0062;0061 302A 0316 FE29 059A 0062;0061 302A 0316 FE29 059A 0062;0061 302A 0316 FE29 059A 0062;0061 302A 0316 FE29 059A 0062;
-0061 FE29 059A 0316 302A 0062;0061 302A FE29 0316 059A 0062;0061 302A FE29 0316 059A 0062;0061 302A FE29 0316 059A 0062;0061 302A FE29 0316 059A 0062;
-0061 059A 0316 302A FE2A 0062;0061 302A 0316 FE2A 059A 0062;0061 302A 0316 FE2A 059A 0062;0061 302A 0316 FE2A 059A 0062;0061 302A 0316 FE2A 059A 0062;
-0061 FE2A 059A 0316 302A 0062;0061 302A FE2A 0316 059A 0062;0061 302A FE2A 0316 059A 0062;0061 302A FE2A 0316 059A 0062;0061 302A FE2A 0316 059A 0062;
-0061 059A 0316 302A FE2B 0062;0061 302A 0316 FE2B 059A 0062;0061 302A 0316 FE2B 059A 0062;0061 302A 0316 FE2B 059A 0062;0061 302A 0316 FE2B 059A 0062;
-0061 FE2B 059A 0316 302A 0062;0061 302A FE2B 0316 059A 0062;0061 302A FE2B 0316 059A 0062;0061 302A FE2B 0316 059A 0062;0061 302A FE2B 0316 059A 0062;
-0061 059A 0316 302A FE2C 0062;0061 302A 0316 FE2C 059A 0062;0061 302A 0316 FE2C 059A 0062;0061 302A 0316 FE2C 059A 0062;0061 302A 0316 FE2C 059A 0062;
-0061 FE2C 059A 0316 302A 0062;0061 302A FE2C 0316 059A 0062;0061 302A FE2C 0316 059A 0062;0061 302A FE2C 0316 059A 0062;0061 302A FE2C 0316 059A 0062;
-0061 059A 0316 302A FE2D 0062;0061 302A 0316 FE2D 059A 0062;0061 302A 0316 FE2D 059A 0062;0061 302A 0316 FE2D 059A 0062;0061 302A 0316 FE2D 059A 0062;
-0061 FE2D 059A 0316 302A 0062;0061 302A FE2D 0316 059A 0062;0061 302A FE2D 0316 059A 0062;0061 302A FE2D 0316 059A 0062;0061 302A FE2D 0316 059A 0062;
+0061 059A 0316 1DFA FE27 0062;0061 1DFA 0316 FE27 059A 0062;0061 1DFA 0316 FE27 059A 0062;0061 1DFA 0316 FE27 059A 0062;0061 1DFA 0316 FE27 059A 0062;
+0061 FE27 059A 0316 1DFA 0062;0061 1DFA FE27 0316 059A 0062;0061 1DFA FE27 0316 059A 0062;0061 1DFA FE27 0316 059A 0062;0061 1DFA FE27 0316 059A 0062;
+0061 059A 0316 1DFA FE28 0062;0061 1DFA 0316 FE28 059A 0062;0061 1DFA 0316 FE28 059A 0062;0061 1DFA 0316 FE28 059A 0062;0061 1DFA 0316 FE28 059A 0062;
+0061 FE28 059A 0316 1DFA 0062;0061 1DFA FE28 0316 059A 0062;0061 1DFA FE28 0316 059A 0062;0061 1DFA FE28 0316 059A 0062;0061 1DFA FE28 0316 059A 0062;
+0061 059A 0316 1DFA FE29 0062;0061 1DFA 0316 FE29 059A 0062;0061 1DFA 0316 FE29 059A 0062;0061 1DFA 0316 FE29 059A 0062;0061 1DFA 0316 FE29 059A 0062;
+0061 FE29 059A 0316 1DFA 0062;0061 1DFA FE29 0316 059A 0062;0061 1DFA FE29 0316 059A 0062;0061 1DFA FE29 0316 059A 0062;0061 1DFA FE29 0316 059A 0062;
+0061 059A 0316 1DFA FE2A 0062;0061 1DFA 0316 FE2A 059A 0062;0061 1DFA 0316 FE2A 059A 0062;0061 1DFA 0316 FE2A 059A 0062;0061 1DFA 0316 FE2A 059A 0062;
+0061 FE2A 059A 0316 1DFA 0062;0061 1DFA FE2A 0316 059A 0062;0061 1DFA FE2A 0316 059A 0062;0061 1DFA FE2A 0316 059A 0062;0061 1DFA FE2A 0316 059A 0062;
+0061 059A 0316 1DFA FE2B 0062;0061 1DFA 0316 FE2B 059A 0062;0061 1DFA 0316 FE2B 059A 0062;0061 1DFA 0316 FE2B 059A 0062;0061 1DFA 0316 FE2B 059A 0062;
+0061 FE2B 059A 0316 1DFA 0062;0061 1DFA FE2B 0316 059A 0062;0061 1DFA FE2B 0316 059A 0062;0061 1DFA FE2B 0316 059A 0062;0061 1DFA FE2B 0316 059A 0062;
+0061 059A 0316 1DFA FE2C 0062;0061 1DFA 0316 FE2C 059A 0062;0061 1DFA 0316 FE2C 059A 0062;0061 1DFA 0316 FE2C 059A 0062;0061 1DFA 0316 FE2C 059A 0062;
+0061 FE2C 059A 0316 1DFA 0062;0061 1DFA FE2C 0316 059A 0062;0061 1DFA FE2C 0316 059A 0062;0061 1DFA FE2C 0316 059A 0062;0061 1DFA FE2C 0316 059A 0062;
+0061 059A 0316 1DFA FE2D 0062;0061 1DFA 0316 FE2D 059A 0062;0061 1DFA 0316 FE2D 059A 0062;0061 1DFA 0316 FE2D 059A 0062;0061 1DFA 0316 FE2D 059A 0062;
+0061 FE2D 059A 0316 1DFA 0062;0061 1DFA FE2D 0316 059A 0062;0061 1DFA FE2D 0316 059A 0062;0061 1DFA FE2D 0316 059A 0062;0061 1DFA FE2D 0316 059A 0062;
0061 0315 0300 05AE FE2E 0062;00E0 05AE FE2E 0315 0062;0061 05AE 0300 FE2E 0315 0062;00E0 05AE FE2E 0315 0062;0061 05AE 0300 FE2E 0315 0062;
0061 FE2E 0315 0300 05AE 0062;0061 05AE FE2E 0300 0315 0062;0061 05AE FE2E 0300 0315 0062;0061 05AE FE2E 0300 0315 0062;0061 05AE FE2E 0300 0315 0062;
0061 0315 0300 05AE FE2F 0062;00E0 05AE FE2F 0315 0062;0061 05AE 0300 FE2F 0315 0062;00E0 05AE FE2F 0315 0062;0061 05AE 0300 FE2F 0315 0062;
0061 FE2F 0315 0300 05AE 0062;0061 05AE FE2F 0300 0315 0062;0061 05AE FE2F 0300 0315 0062;0061 05AE FE2F 0300 0315 0062;0061 05AE FE2F 0300 0315 0062;
-0061 059A 0316 302A 101FD 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062;
-0061 101FD 059A 0316 302A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062;
-0061 059A 0316 302A 102E0 0062;0061 302A 0316 102E0 059A 0062;0061 302A 0316 102E0 059A 0062;0061 302A 0316 102E0 059A 0062;0061 302A 0316 102E0 059A 0062;
-0061 102E0 059A 0316 302A 0062;0061 302A 102E0 0316 059A 0062;0061 302A 102E0 0316 059A 0062;0061 302A 102E0 0316 059A 0062;0061 302A 102E0 0316 059A 0062;
+0061 059A 0316 1DFA 101FD 0062;0061 1DFA 0316 101FD 059A 0062;0061 1DFA 0316 101FD 059A 0062;0061 1DFA 0316 101FD 059A 0062;0061 1DFA 0316 101FD 059A 0062;
+0061 101FD 059A 0316 1DFA 0062;0061 1DFA 101FD 0316 059A 0062;0061 1DFA 101FD 0316 059A 0062;0061 1DFA 101FD 0316 059A 0062;0061 1DFA 101FD 0316 059A 0062;
+0061 059A 0316 1DFA 102E0 0062;0061 1DFA 0316 102E0 059A 0062;0061 1DFA 0316 102E0 059A 0062;0061 1DFA 0316 102E0 059A 0062;0061 1DFA 0316 102E0 059A 0062;
+0061 102E0 059A 0316 1DFA 0062;0061 1DFA 102E0 0316 059A 0062;0061 1DFA 102E0 0316 059A 0062;0061 1DFA 102E0 0316 059A 0062;0061 1DFA 102E0 0316 059A 0062;
0061 0315 0300 05AE 10376 0062;00E0 05AE 10376 0315 0062;0061 05AE 0300 10376 0315 0062;00E0 05AE 10376 0315 0062;0061 05AE 0300 10376 0315 0062;
0061 10376 0315 0300 05AE 0062;0061 05AE 10376 0300 0315 0062;0061 05AE 10376 0300 0315 0062;0061 05AE 10376 0300 0315 0062;0061 05AE 10376 0300 0315 0062;
0061 0315 0300 05AE 10377 0062;00E0 05AE 10377 0315 0062;0061 05AE 0300 10377 0315 0062;00E0 05AE 10377 0315 0062;0061 05AE 0300 10377 0315 0062;
@@ -18341,22 +18468,22 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 10379 0315 0300 05AE 0062;0061 05AE 10379 0300 0315 0062;0061 05AE 10379 0300 0315 0062;0061 05AE 10379 0300 0315 0062;0061 05AE 10379 0300 0315 0062;
0061 0315 0300 05AE 1037A 0062;00E0 05AE 1037A 0315 0062;0061 05AE 0300 1037A 0315 0062;00E0 05AE 1037A 0315 0062;0061 05AE 0300 1037A 0315 0062;
0061 1037A 0315 0300 05AE 0062;0061 05AE 1037A 0300 0315 0062;0061 05AE 1037A 0300 0315 0062;0061 05AE 1037A 0300 0315 0062;0061 05AE 1037A 0300 0315 0062;
-0061 059A 0316 302A 10A0D 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;
-0061 10A0D 059A 0316 302A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;
+0061 059A 0316 1DFA 10A0D 0062;0061 1DFA 0316 10A0D 059A 0062;0061 1DFA 0316 10A0D 059A 0062;0061 1DFA 0316 10A0D 059A 0062;0061 1DFA 0316 10A0D 059A 0062;
+0061 10A0D 059A 0316 1DFA 0062;0061 1DFA 10A0D 0316 059A 0062;0061 1DFA 10A0D 0316 059A 0062;0061 1DFA 10A0D 0316 059A 0062;0061 1DFA 10A0D 0316 059A 0062;
0061 0315 0300 05AE 10A0F 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062;
0061 10A0F 0315 0300 05AE 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;
0061 0315 0300 05AE 10A38 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062;
0061 10A38 0315 0300 05AE 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;
0061 16FF0 0334 10A39 0062;0061 0334 10A39 16FF0 0062;0061 0334 10A39 16FF0 0062;0061 0334 10A39 16FF0 0062;0061 0334 10A39 16FF0 0062;
0061 10A39 16FF0 0334 0062;0061 10A39 0334 16FF0 0062;0061 10A39 0334 16FF0 0062;0061 10A39 0334 16FF0 0062;0061 10A39 0334 16FF0 0062;
-0061 059A 0316 302A 10A3A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;
-0061 10A3A 059A 0316 302A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;
+0061 059A 0316 1DFA 10A3A 0062;0061 1DFA 0316 10A3A 059A 0062;0061 1DFA 0316 10A3A 059A 0062;0061 1DFA 0316 10A3A 059A 0062;0061 1DFA 0316 10A3A 059A 0062;
+0061 10A3A 059A 0316 1DFA 0062;0061 1DFA 10A3A 0316 059A 0062;0061 1DFA 10A3A 0316 059A 0062;0061 1DFA 10A3A 0316 059A 0062;0061 1DFA 10A3A 0316 059A 0062;
0061 05B0 094D 3099 10A3F 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;
0061 10A3F 05B0 094D 3099 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;
0061 0315 0300 05AE 10AE5 0062;00E0 05AE 10AE5 0315 0062;0061 05AE 0300 10AE5 0315 0062;00E0 05AE 10AE5 0315 0062;0061 05AE 0300 10AE5 0315 0062;
0061 10AE5 0315 0300 05AE 0062;0061 05AE 10AE5 0300 0315 0062;0061 05AE 10AE5 0300 0315 0062;0061 05AE 10AE5 0300 0315 0062;0061 05AE 10AE5 0300 0315 0062;
-0061 059A 0316 302A 10AE6 0062;0061 302A 0316 10AE6 059A 0062;0061 302A 0316 10AE6 059A 0062;0061 302A 0316 10AE6 059A 0062;0061 302A 0316 10AE6 059A 0062;
-0061 10AE6 059A 0316 302A 0062;0061 302A 10AE6 0316 059A 0062;0061 302A 10AE6 0316 059A 0062;0061 302A 10AE6 0316 059A 0062;0061 302A 10AE6 0316 059A 0062;
+0061 059A 0316 1DFA 10AE6 0062;0061 1DFA 0316 10AE6 059A 0062;0061 1DFA 0316 10AE6 059A 0062;0061 1DFA 0316 10AE6 059A 0062;0061 1DFA 0316 10AE6 059A 0062;
+0061 10AE6 059A 0316 1DFA 0062;0061 1DFA 10AE6 0316 059A 0062;0061 1DFA 10AE6 0316 059A 0062;0061 1DFA 10AE6 0316 059A 0062;0061 1DFA 10AE6 0316 059A 0062;
0061 0315 0300 05AE 10D24 0062;00E0 05AE 10D24 0315 0062;0061 05AE 0300 10D24 0315 0062;00E0 05AE 10D24 0315 0062;0061 05AE 0300 10D24 0315 0062;
0061 10D24 0315 0300 05AE 0062;0061 05AE 10D24 0300 0315 0062;0061 05AE 10D24 0300 0315 0062;0061 05AE 10D24 0300 0315 0062;0061 05AE 10D24 0300 0315 0062;
0061 0315 0300 05AE 10D25 0062;00E0 05AE 10D25 0315 0062;0061 05AE 0300 10D25 0315 0062;00E0 05AE 10D25 0315 0062;0061 05AE 0300 10D25 0315 0062;
@@ -18369,30 +18496,40 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 10EAB 0315 0300 05AE 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;0061 05AE 10EAB 0300 0315 0062;
0061 0315 0300 05AE 10EAC 0062;00E0 05AE 10EAC 0315 0062;0061 05AE 0300 10EAC 0315 0062;00E0 05AE 10EAC 0315 0062;0061 05AE 0300 10EAC 0315 0062;
0061 10EAC 0315 0300 05AE 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;0061 05AE 10EAC 0300 0315 0062;
-0061 059A 0316 302A 10F46 0062;0061 302A 0316 10F46 059A 0062;0061 302A 0316 10F46 059A 0062;0061 302A 0316 10F46 059A 0062;0061 302A 0316 10F46 059A 0062;
-0061 10F46 059A 0316 302A 0062;0061 302A 10F46 0316 059A 0062;0061 302A 10F46 0316 059A 0062;0061 302A 10F46 0316 059A 0062;0061 302A 10F46 0316 059A 0062;
-0061 059A 0316 302A 10F47 0062;0061 302A 0316 10F47 059A 0062;0061 302A 0316 10F47 059A 0062;0061 302A 0316 10F47 059A 0062;0061 302A 0316 10F47 059A 0062;
-0061 10F47 059A 0316 302A 0062;0061 302A 10F47 0316 059A 0062;0061 302A 10F47 0316 059A 0062;0061 302A 10F47 0316 059A 0062;0061 302A 10F47 0316 059A 0062;
+0061 059A 0316 1DFA 10F46 0062;0061 1DFA 0316 10F46 059A 0062;0061 1DFA 0316 10F46 059A 0062;0061 1DFA 0316 10F46 059A 0062;0061 1DFA 0316 10F46 059A 0062;
+0061 10F46 059A 0316 1DFA 0062;0061 1DFA 10F46 0316 059A 0062;0061 1DFA 10F46 0316 059A 0062;0061 1DFA 10F46 0316 059A 0062;0061 1DFA 10F46 0316 059A 0062;
+0061 059A 0316 1DFA 10F47 0062;0061 1DFA 0316 10F47 059A 0062;0061 1DFA 0316 10F47 059A 0062;0061 1DFA 0316 10F47 059A 0062;0061 1DFA 0316 10F47 059A 0062;
+0061 10F47 059A 0316 1DFA 0062;0061 1DFA 10F47 0316 059A 0062;0061 1DFA 10F47 0316 059A 0062;0061 1DFA 10F47 0316 059A 0062;0061 1DFA 10F47 0316 059A 0062;
0061 0315 0300 05AE 10F48 0062;00E0 05AE 10F48 0315 0062;0061 05AE 0300 10F48 0315 0062;00E0 05AE 10F48 0315 0062;0061 05AE 0300 10F48 0315 0062;
0061 10F48 0315 0300 05AE 0062;0061 05AE 10F48 0300 0315 0062;0061 05AE 10F48 0300 0315 0062;0061 05AE 10F48 0300 0315 0062;0061 05AE 10F48 0300 0315 0062;
0061 0315 0300 05AE 10F49 0062;00E0 05AE 10F49 0315 0062;0061 05AE 0300 10F49 0315 0062;00E0 05AE 10F49 0315 0062;0061 05AE 0300 10F49 0315 0062;
0061 10F49 0315 0300 05AE 0062;0061 05AE 10F49 0300 0315 0062;0061 05AE 10F49 0300 0315 0062;0061 05AE 10F49 0300 0315 0062;0061 05AE 10F49 0300 0315 0062;
0061 0315 0300 05AE 10F4A 0062;00E0 05AE 10F4A 0315 0062;0061 05AE 0300 10F4A 0315 0062;00E0 05AE 10F4A 0315 0062;0061 05AE 0300 10F4A 0315 0062;
0061 10F4A 0315 0300 05AE 0062;0061 05AE 10F4A 0300 0315 0062;0061 05AE 10F4A 0300 0315 0062;0061 05AE 10F4A 0300 0315 0062;0061 05AE 10F4A 0300 0315 0062;
-0061 059A 0316 302A 10F4B 0062;0061 302A 0316 10F4B 059A 0062;0061 302A 0316 10F4B 059A 0062;0061 302A 0316 10F4B 059A 0062;0061 302A 0316 10F4B 059A 0062;
-0061 10F4B 059A 0316 302A 0062;0061 302A 10F4B 0316 059A 0062;0061 302A 10F4B 0316 059A 0062;0061 302A 10F4B 0316 059A 0062;0061 302A 10F4B 0316 059A 0062;
+0061 059A 0316 1DFA 10F4B 0062;0061 1DFA 0316 10F4B 059A 0062;0061 1DFA 0316 10F4B 059A 0062;0061 1DFA 0316 10F4B 059A 0062;0061 1DFA 0316 10F4B 059A 0062;
+0061 10F4B 059A 0316 1DFA 0062;0061 1DFA 10F4B 0316 059A 0062;0061 1DFA 10F4B 0316 059A 0062;0061 1DFA 10F4B 0316 059A 0062;0061 1DFA 10F4B 0316 059A 0062;
0061 0315 0300 05AE 10F4C 0062;00E0 05AE 10F4C 0315 0062;0061 05AE 0300 10F4C 0315 0062;00E0 05AE 10F4C 0315 0062;0061 05AE 0300 10F4C 0315 0062;
0061 10F4C 0315 0300 05AE 0062;0061 05AE 10F4C 0300 0315 0062;0061 05AE 10F4C 0300 0315 0062;0061 05AE 10F4C 0300 0315 0062;0061 05AE 10F4C 0300 0315 0062;
-0061 059A 0316 302A 10F4D 0062;0061 302A 0316 10F4D 059A 0062;0061 302A 0316 10F4D 059A 0062;0061 302A 0316 10F4D 059A 0062;0061 302A 0316 10F4D 059A 0062;
-0061 10F4D 059A 0316 302A 0062;0061 302A 10F4D 0316 059A 0062;0061 302A 10F4D 0316 059A 0062;0061 302A 10F4D 0316 059A 0062;0061 302A 10F4D 0316 059A 0062;
-0061 059A 0316 302A 10F4E 0062;0061 302A 0316 10F4E 059A 0062;0061 302A 0316 10F4E 059A 0062;0061 302A 0316 10F4E 059A 0062;0061 302A 0316 10F4E 059A 0062;
-0061 10F4E 059A 0316 302A 0062;0061 302A 10F4E 0316 059A 0062;0061 302A 10F4E 0316 059A 0062;0061 302A 10F4E 0316 059A 0062;0061 302A 10F4E 0316 059A 0062;
-0061 059A 0316 302A 10F4F 0062;0061 302A 0316 10F4F 059A 0062;0061 302A 0316 10F4F 059A 0062;0061 302A 0316 10F4F 059A 0062;0061 302A 0316 10F4F 059A 0062;
-0061 10F4F 059A 0316 302A 0062;0061 302A 10F4F 0316 059A 0062;0061 302A 10F4F 0316 059A 0062;0061 302A 10F4F 0316 059A 0062;0061 302A 10F4F 0316 059A 0062;
-0061 059A 0316 302A 10F50 0062;0061 302A 0316 10F50 059A 0062;0061 302A 0316 10F50 059A 0062;0061 302A 0316 10F50 059A 0062;0061 302A 0316 10F50 059A 0062;
-0061 10F50 059A 0316 302A 0062;0061 302A 10F50 0316 059A 0062;0061 302A 10F50 0316 059A 0062;0061 302A 10F50 0316 059A 0062;0061 302A 10F50 0316 059A 0062;
+0061 059A 0316 1DFA 10F4D 0062;0061 1DFA 0316 10F4D 059A 0062;0061 1DFA 0316 10F4D 059A 0062;0061 1DFA 0316 10F4D 059A 0062;0061 1DFA 0316 10F4D 059A 0062;
+0061 10F4D 059A 0316 1DFA 0062;0061 1DFA 10F4D 0316 059A 0062;0061 1DFA 10F4D 0316 059A 0062;0061 1DFA 10F4D 0316 059A 0062;0061 1DFA 10F4D 0316 059A 0062;
+0061 059A 0316 1DFA 10F4E 0062;0061 1DFA 0316 10F4E 059A 0062;0061 1DFA 0316 10F4E 059A 0062;0061 1DFA 0316 10F4E 059A 0062;0061 1DFA 0316 10F4E 059A 0062;
+0061 10F4E 059A 0316 1DFA 0062;0061 1DFA 10F4E 0316 059A 0062;0061 1DFA 10F4E 0316 059A 0062;0061 1DFA 10F4E 0316 059A 0062;0061 1DFA 10F4E 0316 059A 0062;
+0061 059A 0316 1DFA 10F4F 0062;0061 1DFA 0316 10F4F 059A 0062;0061 1DFA 0316 10F4F 059A 0062;0061 1DFA 0316 10F4F 059A 0062;0061 1DFA 0316 10F4F 059A 0062;
+0061 10F4F 059A 0316 1DFA 0062;0061 1DFA 10F4F 0316 059A 0062;0061 1DFA 10F4F 0316 059A 0062;0061 1DFA 10F4F 0316 059A 0062;0061 1DFA 10F4F 0316 059A 0062;
+0061 059A 0316 1DFA 10F50 0062;0061 1DFA 0316 10F50 059A 0062;0061 1DFA 0316 10F50 059A 0062;0061 1DFA 0316 10F50 059A 0062;0061 1DFA 0316 10F50 059A 0062;
+0061 10F50 059A 0316 1DFA 0062;0061 1DFA 10F50 0316 059A 0062;0061 1DFA 10F50 0316 059A 0062;0061 1DFA 10F50 0316 059A 0062;0061 1DFA 10F50 0316 059A 0062;
+0061 0315 0300 05AE 10F82 0062;00E0 05AE 10F82 0315 0062;0061 05AE 0300 10F82 0315 0062;00E0 05AE 10F82 0315 0062;0061 05AE 0300 10F82 0315 0062;
+0061 10F82 0315 0300 05AE 0062;0061 05AE 10F82 0300 0315 0062;0061 05AE 10F82 0300 0315 0062;0061 05AE 10F82 0300 0315 0062;0061 05AE 10F82 0300 0315 0062;
+0061 059A 0316 1DFA 10F83 0062;0061 1DFA 0316 10F83 059A 0062;0061 1DFA 0316 10F83 059A 0062;0061 1DFA 0316 10F83 059A 0062;0061 1DFA 0316 10F83 059A 0062;
+0061 10F83 059A 0316 1DFA 0062;0061 1DFA 10F83 0316 059A 0062;0061 1DFA 10F83 0316 059A 0062;0061 1DFA 10F83 0316 059A 0062;0061 1DFA 10F83 0316 059A 0062;
+0061 0315 0300 05AE 10F84 0062;00E0 05AE 10F84 0315 0062;0061 05AE 0300 10F84 0315 0062;00E0 05AE 10F84 0315 0062;0061 05AE 0300 10F84 0315 0062;
+0061 10F84 0315 0300 05AE 0062;0061 05AE 10F84 0300 0315 0062;0061 05AE 10F84 0300 0315 0062;0061 05AE 10F84 0300 0315 0062;0061 05AE 10F84 0300 0315 0062;
+0061 059A 0316 1DFA 10F85 0062;0061 1DFA 0316 10F85 059A 0062;0061 1DFA 0316 10F85 059A 0062;0061 1DFA 0316 10F85 059A 0062;0061 1DFA 0316 10F85 059A 0062;
+0061 10F85 059A 0316 1DFA 0062;0061 1DFA 10F85 0316 059A 0062;0061 1DFA 10F85 0316 059A 0062;0061 1DFA 10F85 0316 059A 0062;0061 1DFA 10F85 0316 059A 0062;
0061 05B0 094D 3099 11046 0062;0061 3099 094D 11046 05B0 0062;0061 3099 094D 11046 05B0 0062;0061 3099 094D 11046 05B0 0062;0061 3099 094D 11046 05B0 0062;
0061 11046 05B0 094D 3099 0062;0061 3099 11046 094D 05B0 0062;0061 3099 11046 094D 05B0 0062;0061 3099 11046 094D 05B0 0062;0061 3099 11046 094D 05B0 0062;
+0061 05B0 094D 3099 11070 0062;0061 3099 094D 11070 05B0 0062;0061 3099 094D 11070 05B0 0062;0061 3099 094D 11070 05B0 0062;0061 3099 094D 11070 05B0 0062;
+0061 11070 05B0 094D 3099 0062;0061 3099 11070 094D 05B0 0062;0061 3099 11070 094D 05B0 0062;0061 3099 11070 094D 05B0 0062;0061 3099 11070 094D 05B0 0062;
0061 05B0 094D 3099 1107F 0062;0061 3099 094D 1107F 05B0 0062;0061 3099 094D 1107F 05B0 0062;0061 3099 094D 1107F 05B0 0062;0061 3099 094D 1107F 05B0 0062;
0061 1107F 05B0 094D 3099 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;0061 3099 1107F 094D 05B0 0062;
0061 05B0 094D 3099 110B9 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;0061 3099 094D 110B9 05B0 0062;
@@ -18533,10 +18670,10 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 16FF1 093C 16FF0 0334 0062;0061 0334 16FF1 16FF0 093C 0062;0061 0334 16FF1 16FF0 093C 0062;0061 0334 16FF1 16FF0 093C 0062;0061 0334 16FF1 16FF0 093C 0062;
0061 16FF0 0334 1BC9E 0062;0061 0334 1BC9E 16FF0 0062;0061 0334 1BC9E 16FF0 0062;0061 0334 1BC9E 16FF0 0062;0061 0334 1BC9E 16FF0 0062;
0061 1BC9E 16FF0 0334 0062;0061 1BC9E 0334 16FF0 0062;0061 1BC9E 0334 16FF0 0062;0061 1BC9E 0334 16FF0 0062;0061 1BC9E 0334 16FF0 0062;
-0061 302A 031B 1DCE 1D165 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;
-0061 1D165 302A 031B 1DCE 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;
-0061 302A 031B 1DCE 1D166 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;
-0061 1D166 302A 031B 1DCE 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;
+0061 1DFA 031B 1DCE 1D165 0062;0061 1DCE 031B 1D165 1DFA 0062;0061 1DCE 031B 1D165 1DFA 0062;0061 1DCE 031B 1D165 1DFA 0062;0061 1DCE 031B 1D165 1DFA 0062;
+0061 1D165 1DFA 031B 1DCE 0062;0061 1DCE 1D165 031B 1DFA 0062;0061 1DCE 1D165 031B 1DFA 0062;0061 1DCE 1D165 031B 1DFA 0062;0061 1DCE 1D165 031B 1DFA 0062;
+0061 1DFA 031B 1DCE 1D166 0062;0061 1DCE 031B 1D166 1DFA 0062;0061 1DCE 031B 1D166 1DFA 0062;0061 1DCE 031B 1D166 1DFA 0062;0061 1DCE 031B 1D166 1DFA 0062;
+0061 1D166 1DFA 031B 1DCE 0062;0061 1DCE 1D166 031B 1DFA 0062;0061 1DCE 1D166 031B 1DFA 0062;0061 1DCE 1D166 031B 1DFA 0062;0061 1DCE 1D166 031B 1DFA 0062;
0061 16FF0 0334 1D167 0062;0061 0334 1D167 16FF0 0062;0061 0334 1D167 16FF0 0062;0061 0334 1D167 16FF0 0062;0061 0334 1D167 16FF0 0062;
0061 1D167 16FF0 0334 0062;0061 1D167 0334 16FF0 0062;0061 1D167 0334 16FF0 0062;0061 1D167 0334 16FF0 0062;0061 1D167 0334 16FF0 0062;
0061 16FF0 0334 1D168 0062;0061 0334 1D168 16FF0 0062;0061 0334 1D168 16FF0 0062;0061 0334 1D168 16FF0 0062;0061 0334 1D168 16FF0 0062;
@@ -18545,32 +18682,32 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1D169 16FF0 0334 0062;0061 1D169 0334 16FF0 0062;0061 1D169 0334 16FF0 0062;0061 1D169 0334 16FF0 0062;0061 1D169 0334 16FF0 0062;
0061 05AE 1D16D 302E 1D16D 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;
0061 1D16D 05AE 1D16D 302E 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;
-0061 302A 031B 1DCE 1D16E 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;
-0061 1D16E 302A 031B 1DCE 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062;
-0061 302A 031B 1DCE 1D16F 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062;
-0061 1D16F 302A 031B 1DCE 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062;
-0061 302A 031B 1DCE 1D170 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062;
-0061 1D170 302A 031B 1DCE 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062;
-0061 302A 031B 1DCE 1D171 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062;
-0061 1D171 302A 031B 1DCE 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062;
-0061 302A 031B 1DCE 1D172 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062;
-0061 1D172 302A 031B 1DCE 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062;
-0061 059A 0316 302A 1D17B 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062;
-0061 1D17B 059A 0316 302A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062;
-0061 059A 0316 302A 1D17C 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062;
-0061 1D17C 059A 0316 302A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062;
-0061 059A 0316 302A 1D17D 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062;
-0061 1D17D 059A 0316 302A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062;
-0061 059A 0316 302A 1D17E 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062;
-0061 1D17E 059A 0316 302A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062;
-0061 059A 0316 302A 1D17F 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062;
-0061 1D17F 059A 0316 302A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062;
-0061 059A 0316 302A 1D180 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062;
-0061 1D180 059A 0316 302A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062;
-0061 059A 0316 302A 1D181 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062;
-0061 1D181 059A 0316 302A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062;
-0061 059A 0316 302A 1D182 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062;
-0061 1D182 059A 0316 302A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062;
+0061 1DFA 031B 1DCE 1D16E 0062;0061 1DCE 031B 1D16E 1DFA 0062;0061 1DCE 031B 1D16E 1DFA 0062;0061 1DCE 031B 1D16E 1DFA 0062;0061 1DCE 031B 1D16E 1DFA 0062;
+0061 1D16E 1DFA 031B 1DCE 0062;0061 1DCE 1D16E 031B 1DFA 0062;0061 1DCE 1D16E 031B 1DFA 0062;0061 1DCE 1D16E 031B 1DFA 0062;0061 1DCE 1D16E 031B 1DFA 0062;
+0061 1DFA 031B 1DCE 1D16F 0062;0061 1DCE 031B 1D16F 1DFA 0062;0061 1DCE 031B 1D16F 1DFA 0062;0061 1DCE 031B 1D16F 1DFA 0062;0061 1DCE 031B 1D16F 1DFA 0062;
+0061 1D16F 1DFA 031B 1DCE 0062;0061 1DCE 1D16F 031B 1DFA 0062;0061 1DCE 1D16F 031B 1DFA 0062;0061 1DCE 1D16F 031B 1DFA 0062;0061 1DCE 1D16F 031B 1DFA 0062;
+0061 1DFA 031B 1DCE 1D170 0062;0061 1DCE 031B 1D170 1DFA 0062;0061 1DCE 031B 1D170 1DFA 0062;0061 1DCE 031B 1D170 1DFA 0062;0061 1DCE 031B 1D170 1DFA 0062;
+0061 1D170 1DFA 031B 1DCE 0062;0061 1DCE 1D170 031B 1DFA 0062;0061 1DCE 1D170 031B 1DFA 0062;0061 1DCE 1D170 031B 1DFA 0062;0061 1DCE 1D170 031B 1DFA 0062;
+0061 1DFA 031B 1DCE 1D171 0062;0061 1DCE 031B 1D171 1DFA 0062;0061 1DCE 031B 1D171 1DFA 0062;0061 1DCE 031B 1D171 1DFA 0062;0061 1DCE 031B 1D171 1DFA 0062;
+0061 1D171 1DFA 031B 1DCE 0062;0061 1DCE 1D171 031B 1DFA 0062;0061 1DCE 1D171 031B 1DFA 0062;0061 1DCE 1D171 031B 1DFA 0062;0061 1DCE 1D171 031B 1DFA 0062;
+0061 1DFA 031B 1DCE 1D172 0062;0061 1DCE 031B 1D172 1DFA 0062;0061 1DCE 031B 1D172 1DFA 0062;0061 1DCE 031B 1D172 1DFA 0062;0061 1DCE 031B 1D172 1DFA 0062;
+0061 1D172 1DFA 031B 1DCE 0062;0061 1DCE 1D172 031B 1DFA 0062;0061 1DCE 1D172 031B 1DFA 0062;0061 1DCE 1D172 031B 1DFA 0062;0061 1DCE 1D172 031B 1DFA 0062;
+0061 059A 0316 1DFA 1D17B 0062;0061 1DFA 0316 1D17B 059A 0062;0061 1DFA 0316 1D17B 059A 0062;0061 1DFA 0316 1D17B 059A 0062;0061 1DFA 0316 1D17B 059A 0062;
+0061 1D17B 059A 0316 1DFA 0062;0061 1DFA 1D17B 0316 059A 0062;0061 1DFA 1D17B 0316 059A 0062;0061 1DFA 1D17B 0316 059A 0062;0061 1DFA 1D17B 0316 059A 0062;
+0061 059A 0316 1DFA 1D17C 0062;0061 1DFA 0316 1D17C 059A 0062;0061 1DFA 0316 1D17C 059A 0062;0061 1DFA 0316 1D17C 059A 0062;0061 1DFA 0316 1D17C 059A 0062;
+0061 1D17C 059A 0316 1DFA 0062;0061 1DFA 1D17C 0316 059A 0062;0061 1DFA 1D17C 0316 059A 0062;0061 1DFA 1D17C 0316 059A 0062;0061 1DFA 1D17C 0316 059A 0062;
+0061 059A 0316 1DFA 1D17D 0062;0061 1DFA 0316 1D17D 059A 0062;0061 1DFA 0316 1D17D 059A 0062;0061 1DFA 0316 1D17D 059A 0062;0061 1DFA 0316 1D17D 059A 0062;
+0061 1D17D 059A 0316 1DFA 0062;0061 1DFA 1D17D 0316 059A 0062;0061 1DFA 1D17D 0316 059A 0062;0061 1DFA 1D17D 0316 059A 0062;0061 1DFA 1D17D 0316 059A 0062;
+0061 059A 0316 1DFA 1D17E 0062;0061 1DFA 0316 1D17E 059A 0062;0061 1DFA 0316 1D17E 059A 0062;0061 1DFA 0316 1D17E 059A 0062;0061 1DFA 0316 1D17E 059A 0062;
+0061 1D17E 059A 0316 1DFA 0062;0061 1DFA 1D17E 0316 059A 0062;0061 1DFA 1D17E 0316 059A 0062;0061 1DFA 1D17E 0316 059A 0062;0061 1DFA 1D17E 0316 059A 0062;
+0061 059A 0316 1DFA 1D17F 0062;0061 1DFA 0316 1D17F 059A 0062;0061 1DFA 0316 1D17F 059A 0062;0061 1DFA 0316 1D17F 059A 0062;0061 1DFA 0316 1D17F 059A 0062;
+0061 1D17F 059A 0316 1DFA 0062;0061 1DFA 1D17F 0316 059A 0062;0061 1DFA 1D17F 0316 059A 0062;0061 1DFA 1D17F 0316 059A 0062;0061 1DFA 1D17F 0316 059A 0062;
+0061 059A 0316 1DFA 1D180 0062;0061 1DFA 0316 1D180 059A 0062;0061 1DFA 0316 1D180 059A 0062;0061 1DFA 0316 1D180 059A 0062;0061 1DFA 0316 1D180 059A 0062;
+0061 1D180 059A 0316 1DFA 0062;0061 1DFA 1D180 0316 059A 0062;0061 1DFA 1D180 0316 059A 0062;0061 1DFA 1D180 0316 059A 0062;0061 1DFA 1D180 0316 059A 0062;
+0061 059A 0316 1DFA 1D181 0062;0061 1DFA 0316 1D181 059A 0062;0061 1DFA 0316 1D181 059A 0062;0061 1DFA 0316 1D181 059A 0062;0061 1DFA 0316 1D181 059A 0062;
+0061 1D181 059A 0316 1DFA 0062;0061 1DFA 1D181 0316 059A 0062;0061 1DFA 1D181 0316 059A 0062;0061 1DFA 1D181 0316 059A 0062;0061 1DFA 1D181 0316 059A 0062;
+0061 059A 0316 1DFA 1D182 0062;0061 1DFA 0316 1D182 059A 0062;0061 1DFA 0316 1D182 059A 0062;0061 1DFA 0316 1D182 059A 0062;0061 1DFA 0316 1D182 059A 0062;
+0061 1D182 059A 0316 1DFA 0062;0061 1DFA 1D182 0316 059A 0062;0061 1DFA 1D182 0316 059A 0062;0061 1DFA 1D182 0316 059A 0062;0061 1DFA 1D182 0316 059A 0062;
0061 0315 0300 05AE 1D185 0062;00E0 05AE 1D185 0315 0062;0061 05AE 0300 1D185 0315 0062;00E0 05AE 1D185 0315 0062;0061 05AE 0300 1D185 0315 0062;
0061 1D185 0315 0300 05AE 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062;
0061 0315 0300 05AE 1D186 0062;00E0 05AE 1D186 0315 0062;0061 05AE 0300 1D186 0315 0062;00E0 05AE 1D186 0315 0062;0061 05AE 0300 1D186 0315 0062;
@@ -18581,10 +18718,10 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1D188 0315 0300 05AE 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062;
0061 0315 0300 05AE 1D189 0062;00E0 05AE 1D189 0315 0062;0061 05AE 0300 1D189 0315 0062;00E0 05AE 1D189 0315 0062;0061 05AE 0300 1D189 0315 0062;
0061 1D189 0315 0300 05AE 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062;
-0061 059A 0316 302A 1D18A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062;
-0061 1D18A 059A 0316 302A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062;
-0061 059A 0316 302A 1D18B 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062;
-0061 1D18B 059A 0316 302A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062;
+0061 059A 0316 1DFA 1D18A 0062;0061 1DFA 0316 1D18A 059A 0062;0061 1DFA 0316 1D18A 059A 0062;0061 1DFA 0316 1D18A 059A 0062;0061 1DFA 0316 1D18A 059A 0062;
+0061 1D18A 059A 0316 1DFA 0062;0061 1DFA 1D18A 0316 059A 0062;0061 1DFA 1D18A 0316 059A 0062;0061 1DFA 1D18A 0316 059A 0062;0061 1DFA 1D18A 0316 059A 0062;
+0061 059A 0316 1DFA 1D18B 0062;0061 1DFA 0316 1D18B 059A 0062;0061 1DFA 0316 1D18B 059A 0062;0061 1DFA 0316 1D18B 059A 0062;0061 1DFA 0316 1D18B 059A 0062;
+0061 1D18B 059A 0316 1DFA 0062;0061 1DFA 1D18B 0316 059A 0062;0061 1DFA 1D18B 0316 059A 0062;0061 1DFA 1D18B 0316 059A 0062;0061 1DFA 1D18B 0316 059A 0062;
0061 0315 0300 05AE 1D1AA 0062;00E0 05AE 1D1AA 0315 0062;0061 05AE 0300 1D1AA 0315 0062;00E0 05AE 1D1AA 0315 0062;0061 05AE 0300 1D1AA 0315 0062;
0061 1D1AA 0315 0300 05AE 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062;
0061 0315 0300 05AE 1D1AB 0062;00E0 05AE 1D1AB 0315 0062;0061 05AE 0300 1D1AB 0315 0062;00E0 05AE 1D1AB 0315 0062;0061 05AE 0300 1D1AB 0315 0062;
@@ -18689,6 +18826,8 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1E135 0315 0300 05AE 0062;0061 05AE 1E135 0300 0315 0062;0061 05AE 1E135 0300 0315 0062;0061 05AE 1E135 0300 0315 0062;0061 05AE 1E135 0300 0315 0062;
0061 0315 0300 05AE 1E136 0062;00E0 05AE 1E136 0315 0062;0061 05AE 0300 1E136 0315 0062;00E0 05AE 1E136 0315 0062;0061 05AE 0300 1E136 0315 0062;
0061 1E136 0315 0300 05AE 0062;0061 05AE 1E136 0300 0315 0062;0061 05AE 1E136 0300 0315 0062;0061 05AE 1E136 0300 0315 0062;0061 05AE 1E136 0300 0315 0062;
+0061 0315 0300 05AE 1E2AE 0062;00E0 05AE 1E2AE 0315 0062;0061 05AE 0300 1E2AE 0315 0062;00E0 05AE 1E2AE 0315 0062;0061 05AE 0300 1E2AE 0315 0062;
+0061 1E2AE 0315 0300 05AE 0062;0061 05AE 1E2AE 0300 0315 0062;0061 05AE 1E2AE 0300 0315 0062;0061 05AE 1E2AE 0300 0315 0062;0061 05AE 1E2AE 0300 0315 0062;
0061 0315 0300 05AE 1E2EC 0062;00E0 05AE 1E2EC 0315 0062;0061 05AE 0300 1E2EC 0315 0062;00E0 05AE 1E2EC 0315 0062;0061 05AE 0300 1E2EC 0315 0062;
0061 1E2EC 0315 0300 05AE 0062;0061 05AE 1E2EC 0300 0315 0062;0061 05AE 1E2EC 0300 0315 0062;0061 05AE 1E2EC 0300 0315 0062;0061 05AE 1E2EC 0300 0315 0062;
0061 0315 0300 05AE 1E2ED 0062;00E0 05AE 1E2ED 0315 0062;0061 05AE 0300 1E2ED 0315 0062;00E0 05AE 1E2ED 0315 0062;0061 05AE 0300 1E2ED 0315 0062;
@@ -18697,20 +18836,20 @@ FFEE;FFEE;FFEE;25CB;25CB;
0061 1E2EE 0315 0300 05AE 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062;0061 05AE 1E2EE 0300 0315 0062;
0061 0315 0300 05AE 1E2EF 0062;00E0 05AE 1E2EF 0315 0062;0061 05AE 0300 1E2EF 0315 0062;00E0 05AE 1E2EF 0315 0062;0061 05AE 0300 1E2EF 0315 0062;
0061 1E2EF 0315 0300 05AE 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062;0061 05AE 1E2EF 0300 0315 0062;
-0061 059A 0316 302A 1E8D0 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062;0061 302A 0316 1E8D0 059A 0062;
-0061 1E8D0 059A 0316 302A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062;0061 302A 1E8D0 0316 059A 0062;
-0061 059A 0316 302A 1E8D1 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062;0061 302A 0316 1E8D1 059A 0062;
-0061 1E8D1 059A 0316 302A 0062;0061 302A 1E8D1 0316 059A 0062;0061 302A 1E8D1 0316 059A 0062;0061 302A 1E8D1 0316 059A 0062;0061 302A 1E8D1 0316 059A 0062;
-0061 059A 0316 302A 1E8D2 0062;0061 302A 0316 1E8D2 059A 0062;0061 302A 0316 1E8D2 059A 0062;0061 302A 0316 1E8D2 059A 0062;0061 302A 0316 1E8D2 059A 0062;
-0061 1E8D2 059A 0316 302A 0062;0061 302A 1E8D2 0316 059A 0062;0061 302A 1E8D2 0316 059A 0062;0061 302A 1E8D2 0316 059A 0062;0061 302A 1E8D2 0316 059A 0062;
-0061 059A 0316 302A 1E8D3 0062;0061 302A 0316 1E8D3 059A 0062;0061 302A 0316 1E8D3 059A 0062;0061 302A 0316 1E8D3 059A 0062;0061 302A 0316 1E8D3 059A 0062;
-0061 1E8D3 059A 0316 302A 0062;0061 302A 1E8D3 0316 059A 0062;0061 302A 1E8D3 0316 059A 0062;0061 302A 1E8D3 0316 059A 0062;0061 302A 1E8D3 0316 059A 0062;
-0061 059A 0316 302A 1E8D4 0062;0061 302A 0316 1E8D4 059A 0062;0061 302A 0316 1E8D4 059A 0062;0061 302A 0316 1E8D4 059A 0062;0061 302A 0316 1E8D4 059A 0062;
-0061 1E8D4 059A 0316 302A 0062;0061 302A 1E8D4 0316 059A 0062;0061 302A 1E8D4 0316 059A 0062;0061 302A 1E8D4 0316 059A 0062;0061 302A 1E8D4 0316 059A 0062;
-0061 059A 0316 302A 1E8D5 0062;0061 302A 0316 1E8D5 059A 0062;0061 302A 0316 1E8D5 059A 0062;0061 302A 0316 1E8D5 059A 0062;0061 302A 0316 1E8D5 059A 0062;
-0061 1E8D5 059A 0316 302A 0062;0061 302A 1E8D5 0316 059A 0062;0061 302A 1E8D5 0316 059A 0062;0061 302A 1E8D5 0316 059A 0062;0061 302A 1E8D5 0316 059A 0062;
-0061 059A 0316 302A 1E8D6 0062;0061 302A 0316 1E8D6 059A 0062;0061 302A 0316 1E8D6 059A 0062;0061 302A 0316 1E8D6 059A 0062;0061 302A 0316 1E8D6 059A 0062;
-0061 1E8D6 059A 0316 302A 0062;0061 302A 1E8D6 0316 059A 0062;0061 302A 1E8D6 0316 059A 0062;0061 302A 1E8D6 0316 059A 0062;0061 302A 1E8D6 0316 059A 0062;
+0061 059A 0316 1DFA 1E8D0 0062;0061 1DFA 0316 1E8D0 059A 0062;0061 1DFA 0316 1E8D0 059A 0062;0061 1DFA 0316 1E8D0 059A 0062;0061 1DFA 0316 1E8D0 059A 0062;
+0061 1E8D0 059A 0316 1DFA 0062;0061 1DFA 1E8D0 0316 059A 0062;0061 1DFA 1E8D0 0316 059A 0062;0061 1DFA 1E8D0 0316 059A 0062;0061 1DFA 1E8D0 0316 059A 0062;
+0061 059A 0316 1DFA 1E8D1 0062;0061 1DFA 0316 1E8D1 059A 0062;0061 1DFA 0316 1E8D1 059A 0062;0061 1DFA 0316 1E8D1 059A 0062;0061 1DFA 0316 1E8D1 059A 0062;
+0061 1E8D1 059A 0316 1DFA 0062;0061 1DFA 1E8D1 0316 059A 0062;0061 1DFA 1E8D1 0316 059A 0062;0061 1DFA 1E8D1 0316 059A 0062;0061 1DFA 1E8D1 0316 059A 0062;
+0061 059A 0316 1DFA 1E8D2 0062;0061 1DFA 0316 1E8D2 059A 0062;0061 1DFA 0316 1E8D2 059A 0062;0061 1DFA 0316 1E8D2 059A 0062;0061 1DFA 0316 1E8D2 059A 0062;
+0061 1E8D2 059A 0316 1DFA 0062;0061 1DFA 1E8D2 0316 059A 0062;0061 1DFA 1E8D2 0316 059A 0062;0061 1DFA 1E8D2 0316 059A 0062;0061 1DFA 1E8D2 0316 059A 0062;
+0061 059A 0316 1DFA 1E8D3 0062;0061 1DFA 0316 1E8D3 059A 0062;0061 1DFA 0316 1E8D3 059A 0062;0061 1DFA 0316 1E8D3 059A 0062;0061 1DFA 0316 1E8D3 059A 0062;
+0061 1E8D3 059A 0316 1DFA 0062;0061 1DFA 1E8D3 0316 059A 0062;0061 1DFA 1E8D3 0316 059A 0062;0061 1DFA 1E8D3 0316 059A 0062;0061 1DFA 1E8D3 0316 059A 0062;
+0061 059A 0316 1DFA 1E8D4 0062;0061 1DFA 0316 1E8D4 059A 0062;0061 1DFA 0316 1E8D4 059A 0062;0061 1DFA 0316 1E8D4 059A 0062;0061 1DFA 0316 1E8D4 059A 0062;
+0061 1E8D4 059A 0316 1DFA 0062;0061 1DFA 1E8D4 0316 059A 0062;0061 1DFA 1E8D4 0316 059A 0062;0061 1DFA 1E8D4 0316 059A 0062;0061 1DFA 1E8D4 0316 059A 0062;
+0061 059A 0316 1DFA 1E8D5 0062;0061 1DFA 0316 1E8D5 059A 0062;0061 1DFA 0316 1E8D5 059A 0062;0061 1DFA 0316 1E8D5 059A 0062;0061 1DFA 0316 1E8D5 059A 0062;
+0061 1E8D5 059A 0316 1DFA 0062;0061 1DFA 1E8D5 0316 059A 0062;0061 1DFA 1E8D5 0316 059A 0062;0061 1DFA 1E8D5 0316 059A 0062;0061 1DFA 1E8D5 0316 059A 0062;
+0061 059A 0316 1DFA 1E8D6 0062;0061 1DFA 0316 1E8D6 059A 0062;0061 1DFA 0316 1E8D6 059A 0062;0061 1DFA 0316 1E8D6 059A 0062;0061 1DFA 0316 1E8D6 059A 0062;
+0061 1E8D6 059A 0316 1DFA 0062;0061 1DFA 1E8D6 0316 059A 0062;0061 1DFA 1E8D6 0316 059A 0062;0061 1DFA 1E8D6 0316 059A 0062;0061 1DFA 1E8D6 0316 059A 0062;
0061 0315 0300 05AE 1E944 0062;00E0 05AE 1E944 0315 0062;0061 05AE 0300 1E944 0315 0062;00E0 05AE 1E944 0315 0062;0061 05AE 0300 1E944 0315 0062;
0061 1E944 0315 0300 05AE 0062;0061 05AE 1E944 0300 0315 0062;0061 05AE 1E944 0300 0315 0062;0061 05AE 1E944 0300 0315 0062;0061 05AE 1E944 0300 0315 0062;
0061 0315 0300 05AE 1E945 0062;00E0 05AE 1E945 0315 0062;0061 05AE 0300 1E945 0315 0062;00E0 05AE 1E945 0315 0062;0061 05AE 0300 1E945 0315 0062;
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt b/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
index 2a1a5a1d6b1..1c2e968a8c4 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
@@ -1,6 +1,6 @@
-# SpecialCasing-13.0.0.txt
-# Date: 2019-09-08, 23:31:24 GMT
-# © 2019 Unicode®, Inc.
+# SpecialCasing-14.0.0.txt
+# Date: 2021-03-08, 19:35:55 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt b/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
index 9438712772c..69818a62619 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
@@ -1,10 +1,10 @@
# UCA_Rules_SHORT.txt
-# Date: 2020-02-12, 17:50:33 GMT
-# © 2020 Unicode®, Inc.
+# Date: 2021-08-17, 17:34:16 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
-# UCA Version: 13.0.0
-# UCD Version: 13.0.0
+# UCA Version: 14.0.0
+# UCD Version: 14.0.0
# For a description of the format and usage, see
# http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Data_Files
@@ -154,6 +154,23 @@
= ݉
= ݊
= ‎ߺ‎
+ = ࢐
+ = ࢑
+ = ࢘
+ = ࢙
+ = ࢚
+ = ࢛
+ = ࢜
+ = ࢝
+ = ࣊
+ = ࣋
+ = ࣌
+ = ࣍
+ = ࣎
+ = ࣏
+ = ࣐
+ = ࣑
+ = ࣒
= ࣓
= ࣔ
= ࣕ
@@ -198,6 +215,7 @@
= ᠌
= ᠍
= '\u180E'
+ = ᠏
= ᩿
= ᭫
= ᭬
@@ -345,6 +363,75 @@
= '\U0001BCA1'
= '\U0001BCA2'
= '\U0001BCA3'
+ = 𜼀
+ = 𜼁
+ = 𜼂
+ = 𜼃
+ = 𜼄
+ = 𜼅
+ = 𜼆
+ = 𜼇
+ = 𜼈
+ = 𜼉
+ = 𜼊
+ = 𜼋
+ = 𜼌
+ = 𜼍
+ = 𜼎
+ = 𜼏
+ = 𜼐
+ = 𜼑
+ = 𜼒
+ = 𜼓
+ = 𜼔
+ = 𜼕
+ = 𜼖
+ = 𜼗
+ = 𜼘
+ = 𜼙
+ = 𜼚
+ = 𜼛
+ = 𜼜
+ = 𜼝
+ = 𜼞
+ = 𜼟
+ = 𜼠
+ = 𜼡
+ = 𜼢
+ = 𜼣
+ = 𜼤
+ = 𜼥
+ = 𜼦
+ = 𜼧
+ = 𜼨
+ = 𜼩
+ = 𜼪
+ = 𜼫
+ = 𜼬
+ = 𜼭
+ = 𜼰
+ = 𜼱
+ = 𜼲
+ = 𜼳
+ = 𜼴
+ = 𜼵
+ = 𜼶
+ = 𜼷
+ = 𜼸
+ = 𜼹
+ = 𜼺
+ = 𜼻
+ = 𜼼
+ = 𜼽
+ = 𜼾
+ = 𜼿
+ = 𜽀
+ = 𜽁
+ = 𜽂
+ = 𜽃
+ = 𜽄
+ = 𜽅
+ = 𜽆
= 𝅥
= 𝅦
= 𝅧
@@ -921,6 +1008,14 @@
= ᪴
= ᪻
= ᪼
+ = ᫁
+ = ᫂
+ = ᫅
+ = ᫆
+ = ᫇
+ = ᫈
+ = ᫉
+ = ᫋
= ᷀
= ᷁
= ᷃
@@ -954,7 +1049,10 @@
= 𐽉
= 𐽊
= 𐽌
+ = 𐾂
+ = 𐾄
= 𛲝
+ = 𞊮
<< ̖
= ̗
= ̘
@@ -1000,10 +1098,14 @@
= ᪹
= ᪺
= ᪽
+ = ᫃
+ = ᫄
+ = ᫊
= ᷂
= ᷏
= ᷐
= ᷹
+ = ᷺
= ᷼
= ᷽
= ᷿
@@ -1021,6 +1123,8 @@
= 𐽎
= 𐽏
= 𐽐
+ = 𐾃
+ = 𐾅
<< ̶
= ̷
= ⃘
@@ -1158,6 +1262,8 @@
<<< ‎ﹿ‎
<<< ‎ﹾ‎
<< ٓ
+ = ࢞
+ = ࢟
= ૼ
= 𐺬
<< ٔ
@@ -1234,6 +1340,7 @@
= ૾
= ૿
= ଼
+ = ఼
= ಼
= ᬴
= ᯦
@@ -1523,6 +1630,7 @@
< ⹃
< ⸗
< ⹀
+ < ⹝
< 〜
< 〰
< ゠
@@ -1617,6 +1725,7 @@
<<< ﹗
<<< ︕
< ¡
+ < ⹓
< ՜
< ߹
< ᥄
@@ -1629,6 +1738,7 @@
<<< ︖
< ¿
< ⸮
+ < ⹔
< ՞
< ‎؟‎
< ‎܉‎
@@ -1731,6 +1841,7 @@
< 𖩯
< ᱾
< ᱿
+ < ‎؝‎
< ‎܀‎
< ߷
< ჻
@@ -1740,6 +1851,8 @@
< ᨟
< ᭚
< ᭛
+ < ᭽
+ < ᭾
< ꧁
< ꧂
< ꧃
@@ -1764,6 +1877,10 @@
< ‎𐽗‎
< ‎𐽘‎
< ‎𐽙‎
+ < ‎𐾆‎
+ < ‎𐾇‎
+ < ‎𐾈‎
+ < ‎𐾉‎
< 𑂾
< 𑂿
< 𑅀
@@ -1804,6 +1921,8 @@
< 𒑲
< 𒑳
< 𒑴
+ < 𒿱
+ < 𒿲
< ''
<<< '
< ‘
@@ -2073,6 +2192,14 @@
< ⸧
< ⸨
< ⸩
+ < ⹕
+ < ⹖
+ < ⹗
+ < ⹘
+ < ⹙
+ < ⹚
+ < ⹛
+ < ⹜
< 〈
<<< ︿
< 〉
@@ -2411,6 +2538,7 @@
< 𑗖
< 𑗗
< 𑙃
+ < 𑚹
< 𑠻
< 𑥅
< 𑧢
@@ -2554,6 +2682,19 @@
< ꞉
< ꞊
< ꭛
+ < 𚿰
+ < 𚿱
+ < 𚿲
+ < 𚿳
+ < 𚿵
+ < 𚿶
+ < 𚿷
+ < 𚿸
+ < 𚿹
+ < 𚿺
+ < 𚿻
+ < 𚿽
+ < 𚿾
< °
<<< ℃ / C
<<< ℉ / F
@@ -2567,7 +2708,27 @@
< ؏
< ۞
< ۩
+ < ﵀
+ < ﵁
+ < ﵂
+ < ﵃
+ < ﵄
+ < ﵅
+ < ﵆
+ < ﵇
+ < ﵈
+ < ﵉
+ < ﵊
+ < ﵋
+ < ﵌
+ < ﵍
+ < ﵎
+ < ﵏
+ < ﷏
< ﷽
+ < ﷾
+ < ﷿
+ < ‎࢈‎
< ‎﮲‎
< ‎﮳‎
< ‎﮴‎
@@ -2584,6 +2745,7 @@
< ‎﮿‎
< ‎﯀‎
< ‎﯁‎
+ < ‎﯂‎
< ߶
< ৺
< ୰
@@ -5666,6 +5828,122 @@
< 𖬿
< 𖭅
< 𞅏
+ < 𜽐
+ < 𜽑
+ < 𜽒
+ < 𜽓
+ < 𜽔
+ < 𜽕
+ < 𜽖
+ < 𜽗
+ < 𜽘
+ < 𜽙
+ < 𜽚
+ < 𜽛
+ < 𜽜
+ < 𜽝
+ < 𜽞
+ < 𜽟
+ < 𜽠
+ < 𜽡
+ < 𜽢
+ < 𜽣
+ < 𜽤
+ < 𜽥
+ < 𜽦
+ < 𜽧
+ < 𜽨
+ < 𜽩
+ < 𜽪
+ < 𜽫
+ < 𜽬
+ < 𜽭
+ < 𜽮
+ < 𜽯
+ < 𜽰
+ < 𜽱
+ < 𜽲
+ < 𜽳
+ < 𜽴
+ < 𜽵
+ < 𜽶
+ < 𜽷
+ < 𜽸
+ < 𜽹
+ < 𜽺
+ < 𜽻
+ < 𜽼
+ < 𜽽
+ < 𜽾
+ < 𜽿
+ < 𜾀
+ < 𜾁
+ < 𜾂
+ < 𜾃
+ < 𜾄
+ < 𜾅
+ < 𜾆
+ < 𜾇
+ < 𜾈
+ < 𜾉
+ < 𜾊
+ < 𜾋
+ < 𜾌
+ < 𜾍
+ < 𜾎
+ < 𜾏
+ < 𜾐
+ < 𜾑
+ < 𜾒
+ < 𜾓
+ < 𜾔
+ < 𜾕
+ < 𜾖
+ < 𜾗
+ < 𜾘
+ < 𜾙
+ < 𜾚
+ < 𜾛
+ < 𜾜
+ < 𜾝
+ < 𜾞
+ < 𜾟
+ < 𜾠
+ < 𜾡
+ < 𜾢
+ < 𜾣
+ < 𜾤
+ < 𜾥
+ < 𜾦
+ < 𜾧
+ < 𜾨
+ < 𜾩
+ < 𜾪
+ < 𜾫
+ < 𜾬
+ < 𜾭
+ < 𜾮
+ < 𜾯
+ < 𜾰
+ < 𜾱
+ < 𜾲
+ < 𜾳
+ < 𜾴
+ < 𜾵
+ < 𜾶
+ < 𜾷
+ < 𜾸
+ < 𜾹
+ < 𜾺
+ < 𜾻
+ < 𜾼
+ < 𜾽
+ < 𜾾
+ < 𜾿
+ < 𜿀
+ < 𜿁
+ < 𜿂
+ < 𜿃
< 𝀀
< 𝀁
< 𝀂
@@ -6095,6 +6373,8 @@
< 𝇦
< 𝇧
< 𝇨
+ < 𝇩
+ < 𝇪
< 𝈀
< 𝈁
< 𝈂
@@ -7390,6 +7670,7 @@
< 🥶
< 🥷
< 🥸
+ < 🥹
< 🥺
< 🥻
< 🥼
@@ -7472,6 +7753,7 @@
< 🧉
< 🧊
< 🧋
+ < 🧌
< 🧍
< 🧎
< 🧏
@@ -7531,6 +7813,8 @@
< 🩸
< 🩹
< 🩺
+ < 🩻
+ < 🩼
< 🪀
< 🪁
< 🪂
@@ -7563,6 +7847,10 @@
< 🪦
< 🪧
< 🪨
+ < 🪩
+ < 🪪
+ < 🪫
+ < 🪬
< 🪰
< 🪱
< 🪲
@@ -7570,9 +7858,16 @@
< 🪴
< 🪵
< 🪶
+ < 🪷
+ < 🪸
+ < 🪹
+ < 🪺
< 🫀
< 🫁
< 🫂
+ < 🫃
+ < 🫄
+ < 🫅
< 🫐
< 🫑
< 🫒
@@ -7580,6 +7875,24 @@
< 🫔
< 🫕
< 🫖
+ < 🫗
+ < 🫘
+ < 🫙
+ < 🫠
+ < 🫡
+ < 🫢
+ < 🫣
+ < 🫤
+ < 🫥
+ < 🫦
+ < 🫧
+ < 🫰
+ < 🫱
+ < 🫲
+ < 🫳
+ < 🫴
+ < 🫵
+ < 🫶
< 😀
< 😁
< 😂
@@ -7796,6 +8109,9 @@
< 🛕
< 🛖
< 🛗
+ < 🛝
+ < 🛞
+ < 🛟
< 🛠
< 🛡
< 🛢
@@ -8039,6 +8355,7 @@
< 🟩
< 🟪
< 🟫
+ < 🟰
< 🠀
< 🠁
< 🠂
@@ -8790,7 +9107,9 @@
< ㉿
< 
< ː
+ <<< 𐞁
< ˑ
+ <<< 𐞂
< ॱ
< ๆ
< ໆ
@@ -8881,6 +9200,7 @@
< ₽
< ₾
< ₿
+ < ⃀
< ₨
< ‎﷼‎
&[last regular] # TODO: digits & letters from here
@@ -9437,6 +9757,7 @@
= 𑵐
= 𑶠
= 𖩠
+ = 𖫀
= 𖭐
= 𖺀
= 𝋠
@@ -9556,6 +9877,7 @@
= 𒑏
= 𒑘
= 𖩡
+ = 𖫁
= 𖭑
= 𖺁
= 𝋡
@@ -9750,6 +10072,7 @@
= 𒑖
= 𒑙
= 𖩢
+ = 𖫂
= 𖭒
= 𖺂
= 𝋢
@@ -9909,6 +10232,7 @@
= 𒑑
= 𒑗
= 𖩣
+ = 𖫃
= 𖭓
= 𖺃
= 𝋣
@@ -10049,6 +10373,7 @@
= 𒑓
= 𒑩
= 𖩤
+ = 𖫄
= 𖭔
= 𖺄
= 𝋤
@@ -10183,6 +10508,7 @@
= 𒑕
= 𒑪
= 𖩥
+ = 𖫅
= 𖭕
= 𖺅
= 𝋥
@@ -10295,6 +10621,7 @@
= 𒑎
= 𒑫
= 𖩦
+ = 𖫆
= 𖭖
= 𖺆
= 𝋦
@@ -10402,6 +10729,7 @@
= 𒑃
= 𒑬
= 𖩧
+ = 𖫇
= 𖭗
= 𖺇
= 𝋧
@@ -10509,6 +10837,7 @@
= 𒑅
= 𒑭
= 𖩨
+ = 𖫈
= 𖭘
= 𖺈
= 𝋨
@@ -10617,6 +10946,7 @@
= 𒑉
= 𒑮
= 𖩩
+ = 𖫉
= 𖭙
= 𖺉
= 𝋩
@@ -10654,6 +10984,7 @@
<<< ͣ
<<< ᷲ / ̈
= ꞛ / ̈
+ <<< ꟁ / ̨
<<< ℀ / '/'c
<<< ℁ / '/'s
<<< ꜳ / a
@@ -10681,6 +11012,7 @@
<<< A
<<< A
<<< Ꞛ / ̈
+ <<< Ꟁ / ̨
<<< ⅍ / '/'S
<<< Ꜳ / A
<<< Ꜵ / O
@@ -10704,6 +11036,7 @@
= 🅐
<<< ª
= ᵃ
+ <<< 𐞀 / a
<<< ₐ
<<< ㏂ / '.'m'.'
<<< ᴬ
@@ -10719,6 +11052,7 @@
<<< Æ / E
<<< Ꜻ / V
<<< ᴭ / e
+ = 𐞃 / e
< ᴀ
< ⱥ
<<< Ⱥ
@@ -10783,6 +11117,7 @@
= 🅱
<<< ㏃ / q
< ʙ
+ <<< 𐞄
< ƀ
<<< Ƀ
< ᴯ
@@ -10793,6 +11128,7 @@
< ᶀ
< ɓ
<<< Ɓ
+ <<< 𐞅
< ƃ
<<< Ƃ
< ꞵ
@@ -10846,7 +11182,8 @@
<<< ㎝ / m
<<< ㎠ / ‎m𞴂‎
<<< ㎤ / ‎m𞴃‎
- <<< 🄲
+ <<< ꟲ
+ = 🄲
= 🅲
<<< ㏆ / ∕kg
<<< 🆑 / L
@@ -10859,6 +11196,7 @@
<<< Ꞓ
< ꞔ
<<< Ꞔ
+ < 𝼝
< ƈ
<<< Ƈ
< ɕ
@@ -10879,6 +11217,8 @@
<<< ꭦ / ʐ
<<< ʥ / ʑ
<<< ʤ / ʒ
+ <<< 𝼒 / 𝼘
+ <<< 𝼙 / ᶚ
<<< ⅆ
= 𝐝
= 𝑑
@@ -10919,6 +11259,10 @@
<<< Ⓓ
= 🅓
<<< ᵈ
+ <<< 𐞇 / z
+ <<< 𐞈 / ʐ
+ <<< 𐞉 / ʑ
+ <<< 𐞊 / ʒ
<<< 🆥
<<< ㍲ / a
<<< ㏈ / B
@@ -10945,9 +11289,12 @@
< ᶁ
< ɖ
<<< Ɖ
+ <<< 𐞋
< ɗ
<<< Ɗ
+ <<< 𐞌
< ᶑ
+ <<< 𐞍
< ƌ
<<< Ƌ
< ȡ
@@ -11019,6 +11366,7 @@
<<< ᵋ
< ᶓ
< ɘ
+ <<< 𐞎
< ɚ
< ɜ
<<< Ɜ
@@ -11028,8 +11376,10 @@
<<< ᵌ
< ɝ
< ɞ
+ <<< 𐞏
< ʚ
< ɤ
+ <<< 𐞑
< f
<<< f
<<< ᷫ
@@ -11072,12 +11422,15 @@
<<< Ⓕ
= 🅕
<<< ᶠ
+ <<< 𐞐 / ŋ
<<< ㎙ / m
- <<< 🄵
+ <<< ꟳ
+ = 🄵
= 🅵
<<< 🆓 / REE
<< ꝼ
<<< Ꝼ
+ << 𝼀 / ŋ
< ꜰ
< ꬵ
< ꞙ
@@ -11134,21 +11487,29 @@
<<< ㎓ / Hz
<<< ㎬ / Pa
<<< ㏉ / y
- << ᵹ
+ << ᫌ
+ = ᵹ
<<< Ᵹ
+ < ꟑ
+ <<< Ꟑ
< ɡ
<<< Ɡ
<<< ᶢ
+ < 𝼁
< ꬶ
< ɢ
<<< ᷛ
+ <<< 𐞒
< ǥ
<<< Ǥ
< ᶃ
< ɠ
<<< Ɠ
+ <<< 𐞓
< ʛ
+ <<< 𐞔
< ᵷ
+ < 𝼂
< ꝿ
<<< Ꝿ
< ɣ
@@ -11195,6 +11556,7 @@
= 🅗
<<< ʰ
<<< ꟸ / ̵
+ = 𐞕 / ̵
<<< ₕ
<<< ㏊ / a
<<< ㍱ / Pa
@@ -11209,6 +11571,7 @@
<<< 🅊 / V
<<< ㎐ / z
< ʜ
+ <<< 𐞖
< ƕ
<<< Ƕ
< ꞕ
@@ -11225,6 +11588,7 @@
<<< Ꜧ
<<< ꭜ
< ɧ
+ <<< 𐞗
< ʻ
< ʽ
< i
@@ -11298,6 +11662,7 @@
<<< ᶤ
< ᵻ
<<< ᶧ
+ < 𝼚
< ᶖ
< ꞽ
<<< Ꞽ
@@ -11355,6 +11720,7 @@
< ɟ
<<< ᶡ
< ʄ
+ <<< 𐞘
< k
<<< k
<<< ᷜ
@@ -11424,8 +11790,10 @@
<<< Ꝃ
< ꝅ
<<< Ꝅ
+ < 𝼃
< ʞ
<<< Ʞ
+ < 𝼐
< l
<<< ł / ̵
<<< l
@@ -11473,6 +11841,8 @@
<<< Ⓛ
= 🅛
<<< ˡ
+ <<< 𐞙 / s
+ <<< 𐞚 / z
<<< ₗ
<<< ㏐ / m
<<< ㏑ / n
@@ -11509,6 +11879,10 @@
< ꬹ
< ɬ
<<< Ɬ
+ <<< 𐞛
+ < 𝼄
+ <<< 𐞜
+ < 𝼓
< ꬷ
<<< ꭝ
< ᶅ
@@ -11516,13 +11890,21 @@
< ɭ
<<< ᶩ
< ꞎ
+ <<< 𐞝
+ < 𝼑
< ȴ
< ꝲ
< ɮ
+ <<< 𐞞
+ < 𝼅
+ <<< 𐞟
< ꞁ
<<< Ꞁ
< ƛ
< ʎ
+ <<< 𐞠
+ < 𝼆
+ <<< 𐞡
< m
<<< m
<<< ͫ
@@ -11677,13 +12059,15 @@
<<< Ŋ
<<< ᵑ
< ꬼ
+ < 𝼔
+ < 𝼇
< o
<<< ø / ̸
<<< o
<<< ͦ
<<< ᷳ / ̈
= ꞝ / ̈
- <<< ᷭ / 𐽐
+ <<< ᷭ / 𐾅
<<< ꝏ / o
<<< ℴ
= 𝐨
@@ -11721,6 +12105,7 @@
= 🅞
<<< º
= ᵒ
+ <<< 𐞢 / ̸
<<< ₒ
<<< ㍵ / V
<<< ᴼ
@@ -11734,6 +12119,7 @@
< ᴑ
< ꬽ
< ɶ
+ <<< 𐞣
< ᴔ
< ꭁ
< ꭂ
@@ -11742,6 +12128,7 @@
< ꭄ
< ᴓ
< ꬾ
+ < 𝼛
< ɔ
<<< Ɔ
<<< ᵓ
@@ -11763,6 +12150,7 @@
< ꝋ
<<< Ꝋ
< ɷ
+ <<< 𐞤
< ꞷ
<<< Ꞷ
< ȣ
@@ -11874,7 +12262,9 @@
= 𝚀
<<< Ⓠ
= 🅠
- <<< 🅀
+ <<< 𐞥
+ <<< ꟴ
+ = 🅀
= 🆀
< ꞯ
< ꝗ
@@ -11931,16 +12321,18 @@
<<< ᴿ
= 🅁
= 🆁
- << ꞃ
+ << ᫍ
+ = ꞃ
<<< Ꞃ
+ << ᷣ
+ = ꝛ
+ <<< Ꝛ
< ꭅ
< ʀ
<<< ᷢ
<<< Ʀ
+ <<< 𐞪
< ꭆ
- < ꝛ
- <<< ᷣ
- <<< Ꝛ
< ᴙ
< ɍ
<<< Ɍ
@@ -11949,6 +12341,9 @@
<<< ʴ
< ᴚ
< ɺ
+ <<< 𐞦
+ < 𝼈
+ <<< 𐞧
< ᶉ
< ɻ
<<< ʵ
@@ -11956,9 +12351,12 @@
< ɼ
< ɽ
<<< Ɽ
+ <<< 𐞨
< ꭉ
< ɾ
+ <<< 𐞩
< ᵳ
+ < 𝼖
< ɿ
< ꭇ
< ꭈ
@@ -11968,6 +12366,7 @@
< ʁ
<<< ʶ
< ꭨ
+ < 𝼕
< ꝵ
< ꝶ
< ꝝ
@@ -12025,9 +12424,11 @@
<<< ẞ / S
<< ſ
= ᷥ
- = ꞅ
<<< ſt / t
+ << ꞅ
<<< Ꞅ
+ << ꟙ
+ <<< Ꟙ
< ꜱ
< ꟊ
<<< Ꟊ
@@ -12036,8 +12437,12 @@
< ʂ
<<< Ʂ
<<< ᶳ
+ < 𝼞
+ <<< 𐞺
< ȿ
<<< Ȿ
+ < ꟗ
+ <<< Ꟗ
< ẜ
< ẝ
< ʃ
@@ -12046,10 +12451,12 @@
<<< ᶴ
< ꭍ
< ᶋ
+ < ᶘ
< ƪ
< ʅ
- < ᶘ
< ʆ
+ < 𝼋
+ < 𝼌
< t
<<< t
<<< ͭ
@@ -12058,6 +12465,8 @@
= ʦ / s
<<< ꭧ / ʂ
<<< ʧ / ʃ
+ <<< 𝼗 / ᶋ
+ <<< 𝼜 / ᶘ
<<< ꜩ / z
<<< 𝐭
= 𝑡
@@ -12093,14 +12502,19 @@
<<< Ⓣ
= 🅣
<<< ᵗ
+ <<< 𐞫 / ɕ
<<< ™ / m
+ <<< 𐞬 / s
+ <<< 𐞭 / ʂ
+ <<< 𐞮 / ʃ
<<< ₜ
<<< ᵀ
= 🅃
= 🆃
<<< ㎔ / Hz
<< ᵺ / h
- << ꞇ
+ << ᫎ
+ = ꞇ
<<< Ꞇ
< ᴛ
< ŧ
@@ -12114,16 +12528,19 @@
<<< Ƭ
< ʈ
<<< Ʈ
+ <<< 𐞯
+ < 𝼉
< ȶ
< ꝷ
< ʇ
<<< Ʇ
+ < 𝼍
< u
<<< u
<<< ͧ
<<< ᷴ / ̈
= ꞟ / ̈
- <<< ᷰ / 𐽐
+ <<< ᷰ / 𐾅
<<< 𝐮
= 𝑢
= 𝒖
@@ -12260,6 +12677,7 @@
<<< Ʋ
<<< ᶹ
< ⱱ
+ <<< 𐞰
< ⱴ
< ỽ
<<< Ỽ
@@ -12309,9 +12727,9 @@
<<< ㏝ / b
<<< 🅏 / C
= 🆏 / C
- < ᴡ
- < ꟃ
+ << ꟃ
<<< Ꟃ
+ < ᴡ
< ⱳ
<<< Ⱳ
< ʍ
@@ -12407,6 +12825,7 @@
<<< 🅈
= 🆈
< ʏ
+ <<< 𐞲
< ɏ
<<< Ɏ
< ƴ
@@ -12478,17 +12897,20 @@
< ᴣ
< ƹ
<<< Ƹ
+ < 𝼘
< ᶚ
< ƺ
< ʓ
< þ
<<< Þ
+ < ꟓ
< ꝥ
<<< Ꝥ
< ꝧ
<<< Ꝧ
< ƿ
<<< Ƿ
+ < ꟕ
< ꝩ
<<< Ꝩ
< ꭠ
@@ -12539,14 +12961,24 @@
< ꜥ
<<< Ꜥ
< ʡ
+ <<< 𐞳
< ʢ
+ <<< 𐞴
< ʖ
+ < 𝼎
< ǀ
+ <<< 𐞶
< ǁ
+ <<< 𐞷
< ǂ
+ <<< 𐞸
< ǃ
+ < 𝼊
+ <<< 𐞹
< ʗ
+ < 𝼏
< ʘ
+ <<< 𐞵
< ʬ
< ʭ
< α
@@ -13584,6 +14016,8 @@
<<< Ⱝ
< ⱞ
<<< Ⱞ
+ < ⱟ
+ <<< Ⱟ
< 𐍐
<<< 𐍶
< 𐍑
@@ -13980,7 +14414,14 @@
< ࠛ
< ‎ء‎
<<< ‎ٴ‎
+ = ‎ࢃ‎
+ = ‎ࢇ‎
+ <<< ‎ٵ‎ / ‎ا‎
+ <<< ‎ٶ‎ / ‎و‎
+ <<< ‎ٷ‎ / ‎ۇ‎
+ <<< ‎ٸ‎ / ‎ي‎
<<< ‎ﺀ‎
+ <<< ‎ﯝ‎ / ‎ۇ‎
<< ‎۽‎
< ‎آ‎
<<< ‎ﺂ‎
@@ -14046,8 +14487,26 @@
< ‎ࢩ‎
< ‎ࢬ‎
< ‎ا‎
- <<< ‎ࢭ‎
- <<< ‎ٵ‎ / ‎ء‎
+ <<< ‎ࡰ‎
+ = ‎ࡱ‎
+ = ‎ࡲ‎
+ = ‎ࡳ‎
+ = ‎ࡴ‎
+ = ‎ࡵ‎
+ = ‎ࡶ‎
+ = ‎ࡷ‎
+ = ‎ࡸ‎
+ = ‎ࡹ‎
+ = ‎ࡺ‎
+ = ‎ࡻ‎
+ = ‎ࡼ‎
+ = ‎ࡽ‎
+ = ‎ࡾ‎
+ = ‎ࡿ‎
+ = ‎ࢀ‎
+ = ‎ࢁ‎
+ = ‎ࢂ‎
+ = ‎ࢭ‎
<<< ‎𞸀‎
= ‎𞺀‎
<<< ‎ﺎ‎
@@ -14242,6 +14701,7 @@
<<< ‎ﭵ‎
<<< ‎ﭳ‎
<<< ‎ﭲ‎
+ < ‎ࢊ‎
< ‎چ‎
<<< ‎ﭼ‎
<<< ‎ﭽ‎
@@ -14570,6 +15030,8 @@
<<< ‎ﰨ‎ / ‎م‎
< ‎ڟ‎
< ‎ࢣ‎
+ < ‎ࢋ‎
+ < ‎ࢌ‎
< ‎ع‎
<<< ‎𞸏‎
= ‎𞸯‎
@@ -14702,6 +15164,7 @@
< ‎ڨ‎
< ‎ࣄ‎
< ‎ࢥ‎
+ < ‎ࢵ‎
< ‎ك‎
<<< ‎𞸊‎
= ‎𞸪‎
@@ -14755,6 +15218,7 @@
<<< ‎ﮓ‎
<<< ‎ﮒ‎
< ‎ࢰ‎
+ < ‎ࣈ‎
< ‎ڰ‎
< ‎ڱ‎
<<< ‎ﮜ‎
@@ -14770,6 +15234,7 @@
< ‎ڴ‎
< ‎ݢ‎
< ‎ػ‎
+ < ‎ࢍ‎
< ‎ؼ‎
< ‎ݣ‎
< ‎ݤ‎
@@ -14924,6 +15389,7 @@
< ‎ݧ‎
< ‎ݨ‎
< ‎ݩ‎
+ < ‎ࢉ‎
< ‎ه‎
<<< ‎𞸤‎
= ‎𞹤‎
@@ -14958,7 +15424,7 @@
<<< ‎ﮤ‎ / 𐺫
< ‎و‎
<<< ‎ۥ‎
- <<< ‎ٶ‎ / ‎ء‎
+ = ‎ࢄ‎
<<< ‎𞸅‎
= ‎𞺅‎
= ‎𞺥‎
@@ -14973,10 +15439,8 @@
<<< ‎ﯚ‎
<<< ‎ﯙ‎
< ‎ۇ‎
- <<< ‎ٷ‎ / ‎ء‎
<<< ‎ﯘ‎
<<< ‎ﯗ‎
- <<< ‎ﯝ‎ / ‎ء‎
< ‎ۈ‎
<<< ‎ﯜ‎
<<< ‎ﯛ‎
@@ -15001,7 +15465,8 @@
<<< ‎ﱝ‎ / ٰ
< ‎ي‎
<<< ‎ۦ‎
- <<< ‎ٸ‎ / ‎ء‎
+ = ‎ࢅ‎
+ = ‎ࢆ‎
<<< ‎𞸉‎
= ‎𞸩‎
= ‎𞹉‎
@@ -15037,6 +15502,7 @@
<<< ‎ﱙ‎ / ‎ى‎
<<< ‎ﱚ‎ / ‎ي‎
< ‎ی‎
+ <<< ‎ࣉ‎
<<< ‎ﯾ‎
<<< ‎ﯿ‎
<<< ‎ﯽ‎
@@ -15064,6 +15530,7 @@
<<< ‎ﮰ‎ / 𐺫
< ‎ݺ‎
< ‎ݻ‎
+ < ‎ࢎ‎
< ‎ܐ‎
< ‎ܒ‎
<< ‎ܭ‎
@@ -15310,7 +15777,9 @@
< ሞ
< ሟ
< ᎀ
+ < 𞟭
< ᎁ
+ < 𞟮
< ᎂ
< ᎃ
< ⶁ
@@ -15364,9 +15833,12 @@
< ቆ
< ቇ
< ቈ
+ < 𞟰
< ቊ
< ቋ
+ < 𞟱
< ቌ
+ < 𞟲
< ቍ
< ቐ
< ቑ
@@ -15389,7 +15861,9 @@
< ቦ
< ቧ
< ᎄ
+ < 𞟳
< ᎅ
+ < 𞟴
< ᎆ
< ᎇ
< ⶅ
@@ -15468,9 +15942,12 @@
< ኮ
< ኯ
< ኰ
+ < 𞟵
< ኲ
< ኳ
+ < 𞟶
< ኴ
+ < 𞟷
< ኵ
< ኸ
< ኹ
@@ -15479,10 +15956,14 @@
< ኼ
< ኽ
< ኾ
+ < 𞟨
< ዀ
+ < 𞟩
< ዂ
< ዃ
+ < 𞟪
< ዄ
+ < 𞟫
< ዅ
< ወ
< ዉ
@@ -15572,9 +16053,12 @@
< ጎ
< ጏ
< ጐ
+ < 𞟸
< ጒ
< ጓ
+ < 𞟹
< ጔ
+ < 𞟺
< ጕ
< ጘ
< ጙ
@@ -15654,7 +16138,9 @@
< ፎ
< ፏ
< ᎈ
+ < 𞟻
< ᎉ
+ < 𞟼
< ᎊ
< ᎋ
< ፐ
@@ -15666,7 +16152,9 @@
< ፖ
< ፗ
< ᎌ
+ < 𞟽
< ᎍ
+ < 𞟾
< ᎎ
< ᎏ
< ⶒ
@@ -15715,12 +16203,19 @@
< ⷌ
< ⷍ
< ⷎ
+ < 𞟠
< ⷐ
+ < 𞟡
< ⷑ
+ < 𞟢
< ⷒ
+ < 𞟣
< ⷓ
+ < 𞟤
< ⷔ
+ < 𞟥
< ⷕ
+ < 𞟦
< ⷖ
< ⷘ
< ⷙ
@@ -16192,6 +16687,7 @@
< ద
< ధ
< న
+ <<< ౝ / ్
< ప
< ఫ
< బ
@@ -16264,6 +16760,7 @@
< ದ
< ಧ
< ನ
+ <<< ೝ / ್
< ಪ
< ಫ
< ಬ
@@ -16684,6 +17181,7 @@
< 𑂲
< 𑂳
< 𑂴
+ < 𑃂
< 𑂵
< 𑂶
< 𑂷
@@ -17532,6 +18030,13 @@
< 𑜗
< 𑜘
< 𑜙
+ < 𑝀
+ < 𑝁
+ < 𑝂
+ < 𑝃
+ < 𑝄
+ < 𑝅
+ < 𑝆
< 𑜠
< 𑜡
< 𑜢
@@ -17720,8 +18225,10 @@
< 𑀌
< 𑀍
< 𑀎
+ < 𑁱
< 𑀏
< 𑀐
+ < 𑁲
< 𑀑
< 𑀒
< 𑀓
@@ -17761,6 +18268,7 @@
< 𑀄
< 𑀴
< 𑀵
+ < 𑁵
< 𑀶
< 𑀷
< 𑀸
@@ -17773,12 +18281,15 @@
< 𑀿
< 𑁀
< 𑁁
+ < 𑁳
< 𑁂
< 𑁃
+ < 𑁴
< 𑁄
< 𑁅
< 𑁆
< 𑁿
+ < 𑁰
< ‎𐨀‎
< 𐨁
< 𐨂
@@ -18565,6 +19076,8 @@
< ᜊ
< ᜋ
< ᜌ
+ < ᜍ
+ < ᜟ
< ᜎ
< ᜏ
< ᜐ
@@ -18572,6 +19085,7 @@
< ᜒ
< ᜓ
< ᜔
+ < ᜕
< ᜠ
< ᜡ
< ᜢ
@@ -18948,12 +19462,12 @@
< ႅ
< ဲ
< ႝ
+ < ႆ
< ဴ
< ၢ
< ၧ
< ၨ
< ꧥ
- < ႆ
< ္
< ်
< ၣ
@@ -19422,6 +19936,7 @@
< ᬘ
< ᬙ
< ᬚ
+ <<< ᭌ / ᭄ᬜ
< ᬛ
< ᬜ
< ᬝ
@@ -20647,6 +21162,22 @@
< ᣳ
< ᣴ
< ᣵ
+ < 𑪰
+ < 𑪱
+ < 𑪲
+ < 𑪳
+ < 𑪴
+ < 𑪵
+ < 𑪶
+ < 𑪷
+ < 𑪸
+ < 𑪹
+ < 𑪺
+ < 𑪻
+ < 𑪼
+ < 𑪽
+ < 𑪾
+ < 𑪿
< ᚁ
< ᚂ
< ᚃ
@@ -23032,6 +23563,7 @@
<<< ㋳
<<< ㍎ / ーど
<<< ㍏ / ーる
+ < 𛄠
< ゅ
<<< ゆ
<<< ュ
@@ -23040,6 +23572,7 @@
<<< ユ
<<< ㋴
<<< ㍐ / あん
+ < 𛄡
< ょ
<<< よ
<<< ョ
@@ -23091,6 +23624,8 @@
<<< 𛅤
<<< ヰ
<<< ㋼
+ < 𛄟
+ <<< 𛄢
< 𛅑
<<< ゑ
<<< 𛅥
@@ -25091,6 +25626,36 @@
< 𞄺
< 𞄻
< 𞅎
+ < 𞊐
+ < 𞊑
+ < 𞊒
+ < 𞊓
+ < 𞊔
+ < 𞊕
+ < 𞊖
+ < 𞊗
+ < 𞊘
+ < 𞊙
+ < 𞊚
+ < 𞊛
+ < 𞊜
+ < 𞊝
+ < 𞊞
+ < 𞊟
+ < 𞊠
+ < 𞊡
+ < 𞊢
+ < 𞊣
+ < 𞊤
+ < 𞊥
+ < 𞊦
+ < 𞊧
+ < 𞊨
+ < 𞊩
+ < 𞊪
+ < 𞊫
+ < 𞊬
+ < 𞊭
< 𞋀
< 𞋁
< 𞋂
@@ -25690,6 +26255,76 @@
< 𐕡
< 𐕢
< 𐕣
+ < 𐖗
+ <<< 𐕰
+ < 𐖘
+ <<< 𐕱
+ < 𐖙
+ <<< 𐕲
+ < 𐖚
+ <<< 𐕳
+ < 𐖛
+ <<< 𐕴
+ < 𐖜
+ <<< 𐕵
+ < 𐖝
+ <<< 𐕶
+ < 𐖞
+ <<< 𐕷
+ < 𐖟
+ <<< 𐕸
+ < 𐖠
+ <<< 𐕹
+ < 𐖡
+ <<< 𐕺
+ < 𐖣
+ <<< 𐕼
+ < 𐖤
+ <<< 𐕽
+ < 𐖥
+ <<< 𐕾
+ < 𐖦
+ <<< 𐕿
+ < 𐖧
+ <<< 𐖀
+ < 𐖨
+ <<< 𐖁
+ < 𐖩
+ <<< 𐖂
+ < 𐖪
+ <<< 𐖃
+ < 𐖫
+ <<< 𐖄
+ < 𐖬
+ <<< 𐖅
+ < 𐖭
+ <<< 𐖆
+ < 𐖮
+ <<< 𐖇
+ < 𐖯
+ <<< 𐖈
+ < 𐖰
+ <<< 𐖉
+ < 𐖱
+ <<< 𐖊
+ < 𐖳
+ <<< 𐖌
+ < 𐖴
+ <<< 𐖍
+ < 𐖵
+ <<< 𐖎
+ < 𐖶
+ <<< 𐖏
+ < 𐖷
+ <<< 𐖐
+ < 𐖸
+ <<< 𐖑
+ < 𐖹
+ <<< 𐖒
+ < 𐖻
+ <<< 𐖔
+ < 𐖼
+ <<< 𐖕
< 𑃐
< 𑃑
< 𑃒
@@ -25746,6 +26381,85 @@
< 𖩜
< 𖩝
< 𖩞
+ < 𖩰
+ < 𖩱
+ < 𖩲
+ < 𖩳
+ < 𖩴
+ < 𖩵
+ < 𖩶
+ < 𖩷
+ < 𖩸
+ < 𖩹
+ < 𖩺
+ < 𖩻
+ < 𖩼
+ < 𖩽
+ < 𖩾
+ < 𖩿
+ < 𖪀
+ < 𖪁
+ < 𖪂
+ < 𖪃
+ < 𖪄
+ < 𖪅
+ < 𖪆
+ < 𖪇
+ < 𖪈
+ < 𖪉
+ < 𖪊
+ < 𖪋
+ < 𖪌
+ < 𖪍
+ < 𖪎
+ < 𖪏
+ < 𖪐
+ < 𖪑
+ < 𖪒
+ < 𖪓
+ < 𖪔
+ < 𖪕
+ < 𖪖
+ < 𖪗
+ < 𖪘
+ < 𖪙
+ < 𖪚
+ < 𖪛
+ < 𖪜
+ < 𖪝
+ < 𖪞
+ < 𖪟
+ < 𖪠
+ < 𖪡
+ < 𖪢
+ < 𖪣
+ < 𖪤
+ < 𖪥
+ < 𖪦
+ < 𖪧
+ < 𖪨
+ < 𖪩
+ < 𖪪
+ < 𖪫
+ < 𖪬
+ < 𖪭
+ < 𖪮
+ < 𖪯
+ < 𖪰
+ < 𖪱
+ < 𖪲
+ < 𖪳
+ < 𖪴
+ < 𖪵
+ < 𖪶
+ < 𖪷
+ < 𖪸
+ < 𖪹
+ < 𖪺
+ < 𖪻
+ < 𖪼
+ < 𖪽
+ < 𖪾
< 𐀀
< 𐀁
< 𐀂
@@ -26353,6 +27067,103 @@
< ‎𐠸‎
< ‎𐠼‎
< ‎𐠿‎
+ < 𒾐
+ < 𒾑
+ < 𒾒
+ < 𒾓
+ < 𒾔
+ < 𒾕
+ < 𒾖
+ < 𒾗
+ < 𒾘
+ < 𒾙
+ < 𒾚
+ < 𒾛
+ < 𒾜
+ < 𒾝
+ < 𒾞
+ < 𒾟
+ < 𒾠
+ < 𒾡
+ < 𒾢
+ < 𒾣
+ < 𒾤
+ < 𒾥
+ < 𒾦
+ < 𒾧
+ < 𒾨
+ < 𒾩
+ < 𒾪
+ < 𒾫
+ < 𒾬
+ < 𒾭
+ < 𒾮
+ < 𒾯
+ < 𒾰
+ < 𒾱
+ < 𒾲
+ < 𒾳
+ < 𒾴
+ < 𒾵
+ < 𒾶
+ < 𒾷
+ < 𒾸
+ < 𒾹
+ < 𒾺
+ < 𒾻
+ < 𒾼
+ < 𒾽
+ < 𒾾
+ < 𒾿
+ < 𒿀
+ < 𒿁
+ < 𒿂
+ < 𒿃
+ < 𒿄
+ < 𒿅
+ < 𒿆
+ < 𒿇
+ < 𒿈
+ < 𒿉
+ < 𒿊
+ < 𒿋
+ < 𒿌
+ < 𒿍
+ < 𒿎
+ < 𒿏
+ < 𒿐
+ < 𒿑
+ < 𒿒
+ < 𒿓
+ < 𒿔
+ < 𒿕
+ < 𒿖
+ < 𒿗
+ < 𒿘
+ < 𒿙
+ < 𒿚
+ < 𒿛
+ < 𒿜
+ < 𒿝
+ < 𒿞
+ < 𒿟
+ < 𒿠
+ < 𒿡
+ < 𒿢
+ < 𒿣
+ < 𒿤
+ < 𒿥
+ < 𒿦
+ < 𒿧
+ < 𒿨
+ < 𒿩
+ < 𒿪
+ < 𒿫
+ < 𒿬
+ < 𒿭
+ < 𒿮
+ < 𒿯
+ < 𒿰
< ‎𐩠‎
< ‎𐩡‎
< ‎𐩢‎
@@ -26733,6 +27544,24 @@
< ‎𐽂‎
< ‎𐽃‎
< ‎𐽄‎
+ < ‎𐽰‎
+ < ‎𐽱‎
+ < ‎𐽲‎
+ < ‎𐽳‎
+ < ‎𐽴‎
+ < ‎𐽵‎
+ < ‎𐽶‎
+ < ‎𐽷‎
+ < ‎𐽸‎
+ < ‎𐽹‎
+ < ‎𐽺‎
+ < ‎𐽻‎
+ < ‎𐽼‎
+ < ‎𐽽‎
+ < ‎𐽾‎
+ < ‎𐽿‎
+ < ‎𐾀‎
+ < ‎𐾁‎
< ‎𐺀‎
< ‎𐺁‎
< ‎𐺂‎
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt b/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
index e22f967bbab..b5abef7ed43 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
@@ -1525,6 +1525,7 @@
061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;;
061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;;
+061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;;
061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;;
@@ -2089,6 +2090,47 @@
0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;;
0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;;
086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;;
+0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;;
+0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;;
+0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;;
+0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;;
+0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;;
+0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;;
+0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;;
+087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING;Lo;0;AL;;;;;N;;;;;
+087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING;Lo;0;AL;;;;;N;;;;;
+0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING;Lo;0;AL;;;;;N;;;;;
+0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;;
+0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;;
+0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;;
+0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;;
+0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;;
+0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;;
+0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;;
+0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;;
+088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;;
+088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;;
+0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;;
+0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;;
+0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;;
+0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;;
+089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;;
+089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;;
+089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;;
+089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;;
+089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;;
+089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;;
08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
@@ -2110,6 +2152,7 @@
08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;;
08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;;
@@ -2128,6 +2171,17 @@
08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
+08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;;
+08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;;
+08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;;
+08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;;
+08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;;
+08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;;
+08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;;
+08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;;
+08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;;
08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;
08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
@@ -2786,6 +2840,7 @@
0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
@@ -2806,6 +2861,7 @@
0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;;
0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;;
0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;;
+0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;;
0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
@@ -2901,6 +2957,7 @@
0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;;
0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
@@ -5258,6 +5315,7 @@
170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
+170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;;
170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
@@ -5265,6 +5323,8 @@
1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;;
+171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;;
1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
@@ -5285,7 +5345,7 @@
1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
-1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
+1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;;
1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
@@ -5455,6 +5515,7 @@
180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;;
1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -6059,6 +6120,20 @@
1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;;
1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;;
1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;;
+1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;;
+1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;;
+1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;;
+1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;;
+1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;;
+1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;;
+1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;;
+1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;;
1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;;
1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;;
1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;;
@@ -6135,6 +6210,7 @@
1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
+1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;;
1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -6180,6 +6256,8 @@
1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
+1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;;
+1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;;
1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;;
1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;;
1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;;
@@ -6778,6 +6856,7 @@
1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;;
1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;;
1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;;
@@ -7457,6 +7536,7 @@
20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;;
20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;;
20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;;
+20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;;
20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
@@ -10300,6 +10380,7 @@
2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F;
2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
@@ -10347,6 +10428,7 @@
2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F
2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
@@ -10795,6 +10877,17 @@
2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;;
2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;;
2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;;
+2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;;
+2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;;
+2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;;
+2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;;
+2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -12204,7 +12297,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FFC;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FFF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -14149,6 +14242,8 @@ A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD;
A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC
A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF;
A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE
+A7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1;
+A7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0
A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3;
A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2
A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794;
@@ -14158,6 +14253,17 @@ A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8;
A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7
A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA;
A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9
+A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1;
+A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0
+A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;;
+A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;;
+A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7;
+A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6
+A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9;
+A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8
+A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L;<super> 0043;;;;N;;;;;
+A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L;<super> 0046;;;;N;;;;;
+A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L;<super> 0051;;;;N;;;;;
A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6;
A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5
A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
@@ -15794,6 +15900,7 @@ FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;;
FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;;
FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;;
FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;;
+FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;;
FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
@@ -16159,6 +16266,22 @@ FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;
FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;;
+FD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;;
+FD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;;
+FD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;;
+FD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;;
+FD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;;
+FD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;;
+FD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;;
+FD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;;
+FD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;;
+FD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;;
+FD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;;
FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
@@ -16277,6 +16400,7 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639
FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;;
FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
@@ -16291,6 +16415,8 @@ FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 06
FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;;
+FDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;;
FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
@@ -17798,6 +17924,76 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;;
10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;;
1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;;
+10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597;
+10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598;
+10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599;
+10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A;
+10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B;
+10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C;
+10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D;
+10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E;
+10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F;
+10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0;
+1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1;
+1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3;
+1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4;
+1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5;
+1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6;
+10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7;
+10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8;
+10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9;
+10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA;
+10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB;
+10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC;
+10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD;
+10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE;
+10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF;
+10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0;
+1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1;
+1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3;
+1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4;
+1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5;
+1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6;
+10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7;
+10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8;
+10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9;
+10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB;
+10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC;
+10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570
+10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571
+10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572
+1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573
+1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574
+1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575
+1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576
+1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577
+1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578
+105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579
+105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A
+105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C
+105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D
+105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E
+105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F
+105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580
+105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581
+105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582
+105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583
+105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584
+105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585
+105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586
+105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587
+105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588
+105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589
+105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A
+105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C
+105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D
+105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E
+105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F
+105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590
+105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591
+105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592
+105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594
+105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595
10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;;
10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;;
10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;;
@@ -18139,6 +18335,63 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;;
10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;;
10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;;
+10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;;
+10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L;<super> 02D0;;;;N;;;;;
+10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L;<super> 02D1;;;;N;;;;;
+10783;MODIFIER LETTER SMALL AE;Lm;0;L;<super> 00E6;;;;N;;;;;
+10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L;<super> 0299;;;;N;;;;;
+10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L;<super> 0253;;;;N;;;;;
+10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L;<super> 02A3;;;;N;;;;;
+10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L;<super> AB66;;;;N;;;;;
+10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L;<super> 02A5;;;;N;;;;;
+1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L;<super> 02A4;;;;N;;;;;
+1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L;<super> 0256;;;;N;;;;;
+1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L;<super> 0257;;;;N;;;;;
+1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L;<super> 1D91;;;;N;;;;;
+1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L;<super> 0258;;;;N;;;;;
+1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L;<super> 025E;;;;N;;;;;
+10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L;<super> 02A9;;;;N;;;;;
+10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L;<super> 0264;;;;N;;;;;
+10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L;<super> 0262;;;;N;;;;;
+10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L;<super> 0260;;;;N;;;;;
+10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L;<super> 029B;;;;N;;;;;
+10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L;<super> 0127;;;;N;;;;;
+10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L;<super> 029C;;;;N;;;;;
+10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L;<super> 0267;;;;N;;;;;
+10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L;<super> 0284;;;;N;;;;;
+10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L;<super> 02AA;;;;N;;;;;
+1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L;<super> 02AB;;;;N;;;;;
+1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L;<super> 026C;;;;N;;;;;
+1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L;<super> 1DF04;;;;N;;;;;
+1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L;<super> A78E;;;;N;;;;;
+1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L;<super> 026E;;;;N;;;;;
+1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L;<super> 1DF05;;;;N;;;;;
+107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L;<super> 028E;;;;N;;;;;
+107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L;<super> 1DF06;;;;N;;;;;
+107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L;<super> 00F8;;;;N;;;;;
+107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L;<super> 0276;;;;N;;;;;
+107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L;<super> 0277;;;;N;;;;;
+107A5;MODIFIER LETTER SMALL Q;Lm;0;L;<super> 0071;;;;N;;;;;
+107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L;<super> 027A;;;;N;;;;;
+107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;Lm;0;L;<super> 1DF08;;;;N;;;;;
+107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L;<super> 027D;;;;N;;;;;
+107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L;<super> 027E;;;;N;;;;;
+107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L;<super> 0280;;;;N;;;;;
+107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L;<super> 02A8;;;;N;;;;;
+107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L;<super> 02A6;;;;N;;;;;
+107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L;<super> AB67;;;;N;;;;;
+107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L;<super> 02A7;;;;N;;;;;
+107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L;<super> 0288;;;;N;;;;;
+107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L;<super> 2C71;;;;N;;;;;
+107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L;<super> 028F;;;;N;;;;;
+107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L;<super> 02A1;;;;N;;;;;
+107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L;<super> 02A2;;;;N;;;;;
+107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L;<super> 0298;;;;N;;;;;
+107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L;<super> 01C0;;;;N;;;;;
+107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L;<super> 01C1;;;;N;;;;;
+107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L;<super> 01C2;;;;N;;;;;
+107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L;<super> 1DF0A;;;;N;;;;;
+107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L;<super> 1DF1E;;;;N;;;;;
10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
@@ -19222,6 +19475,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;
10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;;
+10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;;
+10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;;
+10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;;
+10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;;
+10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;;
+10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;;
+10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;;
+10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;;
+10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;;
+10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;;
+10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;;
+10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;;
+10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;;
+10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;;
+10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;;
10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;;
10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
@@ -19381,6 +19660,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;;
+11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;;
+11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;;
+11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;;
+11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;;
1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;;
11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
@@ -19448,6 +19733,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;
110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;;
110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;
110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;
@@ -20385,6 +20671,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;;
+116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -20453,6 +20740,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;;
1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;;
1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;;
+11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;;
+11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;;
+11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;;
+11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;;
+11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;;
11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;;
11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;;
11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;;
@@ -20889,6 +21183,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;;
11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;;
11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;;
+11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;;
+11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;;
+11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;;
+11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;;
+11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;;
+11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;;
+11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;;
+11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;;
+11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;;
+11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;;
+11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;;
+11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;;
+11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;;
+11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;;
+11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;;
+11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;;
11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;;
11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;;
11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;;
@@ -22560,6 +22870,105 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;;
12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;;
12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;;
+12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;;
+12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;;
+12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;;
+12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;;
+12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;;
+12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;;
+12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;;
+12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;;
+12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;;
+12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;;
+12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;;
+12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;;
+12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;;
+12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;;
+12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;;
+12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;;
+12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;;
+12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;;
+12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;;
+12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;;
+12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;;
+12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;;
+12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;;
+12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;;
+12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;;
+12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;;
+12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;;
+12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;;
+12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;;
+12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;;
+12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;;
+12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;;
+12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;;
+12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;;
+12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;;
+12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;;
+12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;;
+12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;;
+12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;;
+12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;;
+12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;;
+12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;;
+12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;;
+12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;;
+12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;;
+12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;;
+12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;;
+12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;;
+12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;;
+12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;;
+12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;;
+12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;;
+12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;;
+12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;;
+12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;;
+12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;;
+12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;;
+12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;;
+12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;;
+12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;;
+12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;;
+12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;;
+12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;;
+12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;;
+12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;;
+12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;;
+12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;;
+12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;;
+12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;;
+12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;;
+12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;;
+12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;;
+12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;;
+12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;;
+12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;;
+12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;;
+12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;;
+12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;;
+12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;;
+12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;;
+12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;;
+12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;;
+12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;;
+12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;;
+12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;;
+12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;;
+12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;;
+12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;;
+12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;;
+12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;;
+12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;;
+12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;;
+12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;;
+12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;;
+12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;;
+12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;;
+12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;;
+12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;;
+12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;;
13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;;
13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;;
13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;;
@@ -24835,6 +25244,95 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
16A6E;MRO DANDA;Po;0;L;;;;;N;;;;;
16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;;
+16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;;
+16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;;
+16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;;
+16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;;
+16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;;
+16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;;
+16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;;
+16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;;
+16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;;
+16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;;
+16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;;
+16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;;
+16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;;
+16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;;
+16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;;
+16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;;
+16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;;
+16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;;
+16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;;
+16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;;
+16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;;
+16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;;
+16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;;
+16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;;
+16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;;
+16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;;
+16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;;
+16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;;
+16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;;
+16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;;
+16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;;
+16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;;
+16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;;
+16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;;
+16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;;
+16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;;
+16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;;
+16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;;
+16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;;
+16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;;
+16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;;
+16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;;
+16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;;
+16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;;
+16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;;
+16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;;
+16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;;
+16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;;
+16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;;
+16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;;
+16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;;
+16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;;
+16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;;
+16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;;
+16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;;
+16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;;
+16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;;
+16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;;
+16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;;
+16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;;
+16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;;
+16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;;
+16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;;
+16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;;
+16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;;
+16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;;
+16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;;
+16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;;
+16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;;
+16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;;
+16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;;
+16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;;
+16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;;
+16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;;
+16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;;
+16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;;
+16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;;
+16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;;
16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;;
16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;;
@@ -26487,6 +26985,19 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;;
18D00;<Tangut Ideograph Supplement, First>;Lo;0;L;;;;;N;;;;;
18D08;<Tangut Ideograph Supplement, Last>;Lo;0;L;;;;;N;;;;;
+1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;;
+1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;;
+1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;;
+1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;;
+1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;;
+1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;;
+1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;;
+1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;;
+1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;;
+1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;;
+1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;;
+1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;;
+1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;;
1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;;
@@ -26774,6 +27285,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;;
1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;;
1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;;
+1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;
+1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;;
+1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
+1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;;
1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;;
1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;;
1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;;
@@ -27324,6 +27839,191 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;;
1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;;
1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;;
+1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;;
+1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;;
+1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;;
+1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;;
+1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;;
+1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;;
+1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;;
+1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;;
+1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;;
+1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;;
+1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;;
+1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;;
+1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;;
+1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;;
+1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;;
+1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;;
+1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;;
+1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;;
+1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;;
+1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;;
+1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;;
+1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;;
+1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;;
+1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;;
+1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;;
+1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;Mn;0;NSM;;;;;N;;;;;
+1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;;
+1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;;
+1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;;
+1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;;
+1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;;
+1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;;
+1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;;
+1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;;
+1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;;
+1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;;
+1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;;
+1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;;
+1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;;
+1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;;
+1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;;
+1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;;
+1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;;
+1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;;
+1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;;
+1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;;
+1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;;
+1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;;
+1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;;
+1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;;
+1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;;
+1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;;
+1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;;
+1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;;
+1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;;
+1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;;
+1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;;
+1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;;
+1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;;
+1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;;
+1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;;
+1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;;
+1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;;
+1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;;
+1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;;
+1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;;
+1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;;
+1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;;
+1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;;
+1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;;
+1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;;
+1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;;
+1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;;
+1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;;
+1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;;
+1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;;
+1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;;
+1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;;
+1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;;
+1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;;
+1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;;
+1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;;
+1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;;
+1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;;
+1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;;
+1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;;
+1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;;
+1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;;
+1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;;
+1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;;
+1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;;
+1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;;
+1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;;
+1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;;
+1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;;
+1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;;
+1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;;
+1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;;
+1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;;
+1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;;
+1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;;
+1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;;
+1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;;
+1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;;
+1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;;
+1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;;
+1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;;
+1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;;
+1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;;
+1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;;
+1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;;
+1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;;
+1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;;
+1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;;
+1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;;
+1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;;
1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
@@ -27801,6 +28501,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;;
1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;;
1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;;
+1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;;
+1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;;
1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
@@ -29671,6 +30373,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;;
1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;;
1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;;
+1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;;
+1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;;
+1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;;
+1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;;
+1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;;
+1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;;
+1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;;
+1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;;
+1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;;
+1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;;
+1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;;
+1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;;
+1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
+1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;;
1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;;
1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;;
1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;;
@@ -29780,6 +30513,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;;
1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;;
+1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;;
+1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;;
+1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;;
+1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;;
+1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;;
+1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;;
+1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;;
+1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;;
+1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;;
+1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;;
+1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;;
+1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;;
+1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;;
+1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;;
+1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;;
+1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;;
+1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;;
+1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;;
+1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;;
+1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;;
+1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;;
+1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;;
+1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;;
+1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;;
+1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;;
+1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;;
+1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;;
+1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;;
+1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;;
+1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;;
1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;;
1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;;
1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;;
@@ -29839,6 +30603,34 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;;
+1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;;
+1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;;
+1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;;
+1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;;
+1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;;
+1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;;
+1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;;
+1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;;
+1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;;
+1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;;
+1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;;
+1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;;
+1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;;
+1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;;
+1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;;
+1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;;
+1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;;
+1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;;
+1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;;
+1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;;
+1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;;
+1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;;
+1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;;
+1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;;
+1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;;
+1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;;
+1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;;
+1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;;
1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;;
1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;;
1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;;
@@ -31886,6 +32678,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;
1F6D6;HUT;So;0;ON;;;;;N;;;;;
1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;;
+1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;;
+1F6DE;WHEEL;So;0;ON;;;;;N;;;;;
+1F6DF;RING BUOY;So;0;ON;;;;;N;;;;;
1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
@@ -32129,6 +32924,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;;
1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;;
1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;;
+1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;;
1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;;
@@ -32400,6 +33196,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
1F977;NINJA;So;0;ON;;;;;N;;;;;
1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;;
+1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;;
1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
1F97B;SARI;So;0;ON;;;;;N;;;;;
1F97C;LAB COAT;So;0;ON;;;;;N;;;;;
@@ -32482,6 +33279,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;;
1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;;
1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;;
+1F9CC;TROLL;So;0;ON;;;;;N;;;;;
1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;;
1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;;
1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;;
@@ -32639,6 +33437,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;
1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;
1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;;
+1FA7B;X-RAY;So;0;ON;;;;;N;;;;;
+1FA7C;CRUTCH;So;0;ON;;;;;N;;;;;
1FA80;YO-YO;So;0;ON;;;;;N;;;;;
1FA81;KITE;So;0;ON;;;;;N;;;;;
1FA82;PARACHUTE;So;0;ON;;;;;N;;;;;
@@ -32671,6 +33471,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;;
1FAA7;PLACARD;So;0;ON;;;;;N;;;;;
1FAA8;ROCK;So;0;ON;;;;;N;;;;;
+1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;;
+1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;;
+1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;;
+1FAAC;HAMSA;So;0;ON;;;;;N;;;;;
1FAB0;FLY;So;0;ON;;;;;N;;;;;
1FAB1;WORM;So;0;ON;;;;;N;;;;;
1FAB2;BEETLE;So;0;ON;;;;;N;;;;;
@@ -32678,9 +33482,16 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;;
1FAB5;WOOD;So;0;ON;;;;;N;;;;;
1FAB6;FEATHER;So;0;ON;;;;;N;;;;;
+1FAB7;LOTUS;So;0;ON;;;;;N;;;;;
+1FAB8;CORAL;So;0;ON;;;;;N;;;;;
+1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;;
+1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;;
1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;;
1FAC1;LUNGS;So;0;ON;;;;;N;;;;;
1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;;
+1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;;
+1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;;
+1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;;
1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;;
1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;;
1FAD2;OLIVE;So;0;ON;;;;;N;;;;;
@@ -32688,6 +33499,24 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FAD4;TAMALE;So;0;ON;;;;;N;;;;;
1FAD5;FONDUE;So;0;ON;;;;;N;;;;;
1FAD6;TEAPOT;So;0;ON;;;;;N;;;;;
+1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;;
+1FAD8;BEANS;So;0;ON;;;;;N;;;;;
+1FAD9;JAR;So;0;ON;;;;;N;;;;;
+1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;;
+1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;;
+1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;;
+1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;;
+1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;;
+1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;;
+1FAE6;BITING LIP;So;0;ON;;;;;N;;;;;
+1FAE7;BUBBLES;So;0;ON;;;;;N;;;;;
+1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;;
+1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;;
+1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;;
+1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;;
+1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;;
+1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;;
+1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;;
1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;;
1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;;
1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;;
@@ -32901,9 +33730,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
-2A6DD;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2A6DF;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
-2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
+2B738;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;;
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt b/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
index 9e7bd1ebc1b..1a24657e819 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
@@ -10,42 +10,342 @@
*
* created on: 2004may06
* created by: Markus W. Scherer
-*
+
* change log for Unicode updates
-*
-* For each new Unicode version, during the beta period,
-* I copy the change log for the previous version to the top of this file.
-* I adjust the versions, tickets, URLs, and paths.
-* I work my way through the steps listed in the log, top to bottom,
-* adjusting the log as necessary.
-* I report problems to the UTC and/or CLDR and/or ICU.
-* Before the data is final, I "turn the crank" several more times,
-* using appropriate subsets of the steps.
+
+For an overview, see https://unicode-org.github.io/icu/processes/unicode-update
---------------------------------------------------------------------------- ***
* New ISO 15924 script codes
-Starting with ICU 55, we do not add UScriptCode constants for new scripts any more
-until they are encoded in Unicode,
-or can be assumed to be encoded in the next Unicode version.
-Script enum constant names want to follow the Unicode script property value aliases,
-which are assigned only when the scripts are encoded.
-When we encode scripts early and guess wrong, then we have confusing enum constants
-and have sometimes added aliases.
+Normally, add new script codes as part of a Unicode update.
+See https://unicode-org.github.io/icu/processes/release/tasks/standards#update-script-code-enums
+and see the change logs below.
+
+---------------------------------------------------------------------------- ***
+
+Unicode 14.0 update for ICU 70
+
+https://www.unicode.org/versions/Unicode14.0.0/
+https://www.unicode.org/versions/beta-14.0.0.html
+https://www.unicode.org/Public/14.0.0/ucd/
+https://www.unicode.org/reports/uax-proposed-updates.html
+https://www.unicode.org/reports/tr44/tr44-27.html
+
+https://unicode-org.atlassian.net/browse/CLDR-14801
+https://unicode-org.atlassian.net/browse/ICU-21635
+
+* Command-line environment setup
+
+export UNICODE_DATA=~/unidata/uni14/20210903
+export CLDR_SRC=~/cldr/uni/src
+export ICU_ROOT=~/icu/uni
+export ICU_SRC=$ICU_ROOT/src
+export ICUDT=icudt70b
+export ICU4C_DATA_IN=$ICU_SRC/icu4c/source/data/in
+export ICU4C_UNIDATA=$ICU_SRC/icu4c/source/data/unidata
+export LD_LIBRARY_PATH=$ICU_ROOT/dbg/icu4c/lib
+
+*** Unicode version numbers
+- makedata.mak
+- uchar.h
+- com.ibm.icu.util.VersionInfo
+- com.ibm.icu.dev.test.lang.UCharacterTest.VERSION_
+
+- Run ICU4C "configure" _after_ updating the Unicode version number in uchar.h
+ so that the makefiles see the new version number.
+ cd $ICU_ROOT/dbg/icu4c
+ ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ../../../doconfig-clang-dbg.sh
+
+*** data files & enums & parser code
+
+* download files
+- same as for the early Unicode Tools setup and data refresh:
+ https://github.com/unicode-org/unicodetools/blob/main/docs/index.md
+ https://github.com/unicode-org/unicodetools/blob/main/docs/inputdata.md
+- mkdir -p $UNICODE_DATA
+- download Unicode files into $UNICODE_DATA
+ + subfolders: emoji, idna, security, ucd, uca
+ + inside ucd: extract Unihan.zip to "here" (.../ucd/Unihan/*.txt), delete Unihan.zip
+ + split Unihan into single-property files
+ ~/unitools/mine/src$ py/splitunihan.py $UNICODE_DATA/ucd/Unihan
+ + get GraphemeBreakTest-cldr.txt from $CLDR_SRC/common/properties/segments/GraphemeBreakTest.txt
+ or from the UCD/cldr/ output folder of the Unicode Tools:
+ Since Unicode 12/CLDR 35/ICU 64 CLDR uses modified break rules.
+ cp $CLDR_SRC/common/properties/segments/GraphemeBreakTest.txt icu4c/source/test/testdata
+ or
+ cp ~/unitools/mine/Generated/UCD/d19/cldr/GraphemeBreakTest-cldr-14.0.0d19.txt icu4c/source/test/testdata/GraphemeBreakTest.txt
+
+* for manual diffs and for Unicode Tools input data updates:
+ remove version suffixes from the file names
+ ~$ unidata/desuffixucd.py $UNICODE_DATA
+ (see https://github.com/unicode-org/unicodetools/blob/main/docs/inputdata.md)
+
+* process and/or copy files
+- $ICU_SRC/tools/unicode$ py/preparseucd.py $UNICODE_DATA $ICU_SRC
+ + This writes files (especially ppucd.txt) to the ICU4C unidata and testdata subfolders.
+ + For debugging, and tweaking how ppucd.txt is written,
+ the tool has an --only_ppucd option:
+ py/preparseucd.py $UNICODE_DATA --only_ppucd path/to/ppucd/outputfile
+
+- cp -v $UNICODE_DATA/security/confusables.txt $ICU4C_UNIDATA
+
+* new constants for new property values
+- preparseucd.py error:
+ ValueError: missing uchar.h enum constants for some property values:
+ [(u'blk', set([u'Toto', u'Tangsa', u'Cypro_Minoan', u'Arabic_Ext_B', u'Vithkuqi', u'Old_Uyghur', u'Latin_Ext_F', u'UCAS_Ext_A', u'Kana_Ext_B', u'Ethiopic_Ext_B', u'Latin_Ext_G', u'Znamenny_Music'])),
+ (u'jg', set([u'Vertical_Tail', u'Thin_Yeh'])),
+ (u'sc', set([u'Toto', u'Ougr', u'Vith', u'Tnsa', u'Cpmn']))]
+ = PropertyValueAliases.txt new property values (diff old & new .txt files)
+ ~/unidata$ diff -u uni13/20200304/ucd/PropertyValueAliases.txt uni14/20210609/ucd/PropertyValueAliases.txt | egrep '^[-+][a-zA-Z]'
+ +age; 14.0 ; V14_0
+ +blk; Arabic_Ext_B ; Arabic_Extended_B
+ +blk; Cypro_Minoan ; Cypro_Minoan
+ +blk; Ethiopic_Ext_B ; Ethiopic_Extended_B
+ +blk; Kana_Ext_B ; Kana_Extended_B
+ +blk; Latin_Ext_F ; Latin_Extended_F
+ +blk; Latin_Ext_G ; Latin_Extended_G
+ +blk; Old_Uyghur ; Old_Uyghur
+ +blk; Tangsa ; Tangsa
+ +blk; Toto ; Toto
+ +blk; UCAS_Ext_A ; Unified_Canadian_Aboriginal_Syllabics_Extended_A
+ +blk; Vithkuqi ; Vithkuqi
+ +blk; Znamenny_Music ; Znamenny_Musical_Notation
+ +jg ; Thin_Yeh ; Thin_Yeh
+ +jg ; Vertical_Tail ; Vertical_Tail
+ +sc ; Cpmn ; Cypro_Minoan
+ +sc ; Ougr ; Old_Uyghur
+ +sc ; Tnsa ; Tangsa
+ +sc ; Toto ; Toto
+ +sc ; Vith ; Vithkuqi
+ -> add new blocks to uchar.h before UBLOCK_COUNT
+ use long property names for enum constants,
+ for the trailing comment get the block start code point: diff old & new Blocks.txt
+ ~/unidata$ diff -u uni13/20200304/ucd/Blocks.txt uni14/20210609/ucd/Blocks.txt | egrep '^[-+][0-9A-Z]'
+ +0870..089F; Arabic Extended-B
+ +10570..105BF; Vithkuqi
+ +10780..107BF; Latin Extended-F
+ +10F70..10FAF; Old Uyghur
+ -11700..1173F; Ahom
+ +11700..1174F; Ahom
+ +11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A
+ +12F90..12FFF; Cypro-Minoan
+ +16A70..16ACF; Tangsa
+ -18D00..18D8F; Tangut Supplement
+ +18D00..18D7F; Tangut Supplement
+ +1AFF0..1AFFF; Kana Extended-B
+ +1CF00..1CFCF; Znamenny Musical Notation
+ +1DF00..1DFFF; Latin Extended-G
+ +1E290..1E2BF; Toto
+ +1E7E0..1E7FF; Ethiopic Extended-B
+ (ignore blocks whose end code point changed)
+ -> add new blocks to UCharacter.UnicodeBlock IDs
+ Eclipse find UBLOCK_([^ ]+) = ([0-9]+), (/.+)
+ replace public static final int \1_ID = \2; \3
+ -> add new blocks to UCharacter.UnicodeBlock objects
+ Eclipse find UBLOCK_([^ ]+) = [0-9]+, (/.+)
+ replace public static final UnicodeBlock \1 = new UnicodeBlock("\1", \1_ID); \2
+ -> add new scripts to uscript.h & com.ibm.icu.lang.UScript
+ Eclipse find USCRIPT_([^ ]+) *= ([0-9]+),(/.+)
+ replace public static final int \1 = \2; \3
+ -> for new scripts: fix expectedLong names in cintltst/cucdapi.c/TestUScriptCodeAPI()
+ and in com.ibm.icu.dev.test.lang.TestUScript.java
+ -> add new joining groups to uchar.h & UCharacter.JoiningGroup
+
+* update Script metadata: SCRIPT_PROPS[] in uscript_props.cpp & UScript.ScriptMetadata
+ (not strictly necessary for NOT_ENCODED scripts)
+ $ICU_SRC/tools/unicode$ py/parsescriptmetadata.py $ICU_SRC/icu4c/source/common/unicode/uscript.h $CLDR_SRC/common/properties/scriptMetadata.txt
+
+* build ICU
+ to make sure that there are no syntax errors
+
+ $ICU_ROOT/dbg/icu4c$ echo;echo; date; make -j7 tests &> out.txt ; tail -n 30 out.txt ; date
+
+* update spoof checker UnicodeSet initializers:
+ inclusionPat & recommendedPat in i18n/uspoof.cpp
+ INCLUSION & RECOMMENDED in SpoofChecker.java
+- make sure that the Unicode Tools tree contains the latest security data files
+- go to Unicode Tools org.unicode.text.tools.RecommendedSetGenerator
+- run the tool (no special environment variables needed)
+- copy & paste from the Console output into the .cpp & .java files
+
+* Bazel build process
+
+See https://unicode-org.github.io/icu/processes/unicode-update#bazel-build-process
+for an overview and for setup instructions.
+
+Consider running `bazelisk --version` outside of the $ICU_SRC folder
+to find out the latest `bazel` version, and
+copying that version number into the $ICU_SRC/.bazeliskrc config file.
+(Revert if you find incompatibilities, or, better, update our build & config files.)
+
+* generate data files
+
+- remember to define the environment variables
+ (see the start of the section for this Unicode version)
+- cd $ICU_SRC
+- optional but not necessary:
+ bazelisk clean
+- build/bootstrap/generate new files:
+ icu4c/source/data/unidata/generate.sh
+
+* update uts46test.cpp and UTS46Test.java if there are new characters that are equivalent to
+ sequences with non-LDH ASCII (that is, their decompositions contain '=' or similar)
+- grep IdnaMappingTable.txt or uts46.txt for "disallowed_STD3_valid" on non-ASCII characters
+- Unicode 6.0..14.0: U+2260, U+226E, U+226F
+- nothing new in this Unicode version, no test file to update
+
+* run & fix ICU4C tests
+- fix Unicode Tools class Segmenter to generate correct *BreakTest.txt files
+- update CLDR GraphemeBreakTest.txt
+ cd ~/unitools/mine/Generated
+ cp UCD/d22d/cldr/GraphemeBreakTest-cldr.txt $CLDR_SRC/common/properties/segments/GraphemeBreakTest.txt
+ cp UCD/d22d/cldr/GraphemeBreakTest-cldr.html $CLDR_SRC/common/properties/segments/GraphemeBreakTest.html
+ cp $CLDR_SRC/common/properties/segments/GraphemeBreakTest.txt $ICU_SRC/icu4c/source/test/testdata
+- Andy helps with RBBI & spoof check test failures
+
+* collation: CLDR collation root, UCA DUCET
+
+- UCA DUCET goes into Mark's Unicode tools,
+ and a tool-tailored version goes into CLDR, see
+ https://github.com/unicode-org/unicodetools/blob/main/docs/uca/index.md
+
+- update source/data/unidata/FractionalUCA.txt with FractionalUCA_SHORT.txt
+ cp -v $CLDR_SRC/common/uca/FractionalUCA_SHORT.txt $ICU4C_UNIDATA/FractionalUCA.txt
+- update source/data/unidata/UCARules.txt with UCA_Rules_SHORT.txt
+ cp -v $ICU4C_UNIDATA/UCARules.txt /tmp/UCARules-old.txt
+ (note removing the underscore before "Rules")
+ cp -v $CLDR_SRC/common/uca/UCA_Rules_SHORT.txt $ICU4C_UNIDATA/UCARules.txt
+- restore TODO diffs in UCARules.txt
+ meld /tmp/UCARules-old.txt $ICU4C_UNIDATA/UCARules.txt
+- update (ICU4C)/source/test/testdata/CollationTest_*.txt
+ and (ICU4J)/main/tests/collate/src/com/ibm/icu/dev/data/CollationTest_*.txt
+ from the CLDR root files (..._CLDR_..._SHORT.txt)
+ cp -v $CLDR_SRC/common/uca/CollationTest_CLDR_NON_IGNORABLE_SHORT.txt $ICU_SRC/icu4c/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
+ cp -v $CLDR_SRC/common/uca/CollationTest_CLDR_SHIFTED_SHORT.txt $ICU_SRC/icu4c/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
+ cp -v $ICU_SRC/icu4c/source/test/testdata/CollationTest_*.txt $ICU_SRC/icu4j/main/tests/collate/src/com/ibm/icu/dev/data
+- if CLDR common/uca/unihan-index.txt changes, then update
+ CLDR common/collation/root.xml <collation type="private-unihan">
+ and regenerate (or update in parallel) $ICU_SRC/icu4c/source/data/coll/root.txt
-Variant script codes like Latf and Aran that are not subject to separate encoding
-can be added at any time.
-(For example, Aran could be added as USCRIPT_ARABIC_NASTALIQ.)
+- generate data files, as above (generate.sh), now to pick up new collation data
+- update CollationFCD.java:
+ copy & paste the initializers of lcccIndex[] etc. from
+ ICU4C/source/i18n/collationfcd.cpp to
+ ICU4J/main/classes/collate/src/com/ibm/icu/impl/coll/CollationFCD.java
+- rebuild ICU4C (make clean, make check, as usual)
-We add script codes used in CLDR or in the spoof checker.
-This includes combination/alias codes like Hanb and Jamo.
-See http://unicode.org/reports/tr35/#unicode_script_subtag_validity
-and look for "alias" on http://unicode.org/iso15924/iso15924-codes.html
+* Unihan collators
+ https://github.com/unicode-org/unicodetools/blob/main/docs/unihan.md
+- run Unicode Tools GenerateUnihanCollators & GenerateUnihanCollatorFiles,
+ check CLDR diffs, copy to CLDR, test CLDR, ... as documented there
+- generate ICU zh collation data
+ instructions inspired by
+ https://github.com/unicode-org/icu/blob/main/tools/cldr/cldr-to-icu/README.txt and
+ https://github.com/unicode-org/icu/blob/main/icu4c/source/data/cldr-icu-readme.txt
+ + setup:
+ export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
+ (didn't work without setting JAVA_HOME,
+ nor with the Google default of /usr/local/buildtools/java/jdk
+ [Google security limitations in the XML parser])
+ export TOOLS_ROOT=~/icu/uni/src/tools
+ export CLDR_DIR=~/cldr/uni/src
+ export CLDR_DATA_DIR=~/cldr/uni/src
+ (pointing to the "raw" data, not cldr-staging/.../production should be ok for the relevant files)
+ cd "$TOOLS_ROOT/cldr/lib"
+ ./install-cldr-jars.sh "$CLDR_DIR"
+ + generate the files we need
+ cd "$TOOLS_ROOT/cldr/cldr-to-icu"
+ ant -f build-icu-data.xml -DoutDir=/tmp/icu -DoutputTypes=coll,transforms -DlocaleIdFilter='zh.*'
+ + diff
+ cd $ICU_SRC
+ meld icu4c/source/data/coll/zh.txt /tmp/icu/coll/zh.txt
+ meld icu4c/source/data/translit/Hani_Latn.txt /tmp/icu/translit/Hani_Latn.txt
+ + copy into the source tree
+ cd $ICU_SRC
+ cp /tmp/icu/coll/zh.txt icu4c/source/data/coll/zh.txt
+ cp /tmp/icu/translit/Hani_Latn.txt icu4c/source/data/translit/Hani_Latn.txt
+- rebuild ICU4C
-We add special Z* script codes like Zsye.
+* run & fix ICU4C tests, now with new CLDR collation root data
+- run all tests with the collation test data *_SHORT.txt or the full files
+ (the full ones have comments, useful for debugging)
+- note on intltest: if collate/UCAConformanceTest fails, then
+ utility/MultithreadTest/TestCollators will fail as well;
+ fix the conformance test before looking into the multi-thread test
-For new script codes see http://www.unicode.org/iso15924/codechanges.html
+* update Java data files
+- refresh just the UCD/UCA-related/derived files, just to be safe
+- see (ICU4C)/source/data/icu4j-readme.txt
+- mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
+- $ICU_ROOT/dbg/icu4c$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
+ NOTE: If you get the error "No rule to make target 'out/build/icudt70l/uprops.icu'",
+ you need to reconfigure with unicore data; see the "configure" line above.
+ output:
+ ...
+ make[1]: Entering directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data'
+ mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt70b
+ mkdir -p ./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt70b
+ LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH ../bin/icupkg ./out/tmp/icudt70l.dat ./out/icu4j/icudt70b.dat -s ./out/build/icudt70l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt70b
+ mv ./out/icu4j/"com/ibm/icu/impl/data/icudt70b/zoneinfo64.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt70b/metaZones.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt70b/timezoneTypes.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt70b/windowsZones.res" "./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt70b"
+ jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt70b/
+ mkdir -p /tmp/icu4j/main/shared/data
+ cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data
+ jar cf ./out/icu4j/icutzdata.jar -C ./out/icu4j/tzdata com/ibm/icu/impl/data/icudt70b/
+ mkdir -p /tmp/icu4j/main/shared/data
+ cp ./out/icu4j/icutzdata.jar /tmp/icu4j/main/shared/data
+ make[1]: Leaving directory '/usr/local/google/home/mscherer/icu/uni/dbg/icu4c/data'
+- copy the big-endian Unicode data files to another location,
+ separate from the other data files,
+ and then refresh ICU4J
+ cd $ICU_ROOT/dbg/icu4c/data/out/icu4j
+ mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/coll
+ mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/brkitr
+ cp -v com/ibm/icu/impl/data/$ICUDT/confusables.cfu /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
+ cp -v com/ibm/icu/impl/data/$ICUDT/*.icu /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
+ rm /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/cnvalias.icu
+ cp -v com/ibm/icu/impl/data/$ICUDT/*.nrm /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
+ cp -v com/ibm/icu/impl/data/$ICUDT/coll/* /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/coll
+ cp -v com/ibm/icu/impl/data/$ICUDT/brkitr/* /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT/brkitr
+ jar uvf $ICU_SRC/icu4j/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/$ICUDT
+
+* When refreshing all of ICU4J data from ICU4C
+- $ICU_ROOT/dbg/icu4c$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
+- cp /tmp/icu4j/main/shared/data/icudata.jar $ICU_SRC/icu4j/main/shared/data
+or
+- $ICU_ROOT/dbg/icu4c$ make ICU4J_ROOT=$ICU_SRC/icu4j icu4j-data-install
+
+* refresh Java test .txt files
+- copy new .txt files into ICU4J's main/tests/core/src/com/ibm/icu/dev/data/unicode
+ cd $ICU_SRC/icu4c/source/data/unidata
+ cp -v confusables.txt confusablesWholeScript.txt NormalizationCorrections.txt NormalizationTest.txt SpecialCasing.txt UnicodeData.txt $ICU_SRC/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode
+ cd ../../test/testdata
+ cp -v BidiCharacterTest.txt BidiTest.txt IdnaTestV2.txt $ICU_SRC/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode
+ cp -v $UNICODE_DATA/ucd/CompositionExclusions.txt $ICU_SRC/icu4j/main/tests/core/src/com/ibm/icu/dev/data/unicode
+
+* run & fix ICU4J tests
+
+*** API additions
+- send notice to icu-design about new born-@stable API (enum constants etc.)
+
+*** CLDR numbering systems
+- look for new sets of decimal digits (gc=ND & nv=4) and add to CLDR
+ for example:
+ ~/icu/mine/src$ egrep ';gc=Nd.+;nv=4' icu4c/source/data/unidata/ppucd.txt > /tmp/icu/nv4-13.txt
+ ~/icu/uni/src$ egrep ';gc=Nd.+;nv=4' icu4c/source/data/unidata/ppucd.txt > /tmp/icu/nv4-14.txt
+ ~/icu/uni/src$ diff -u /tmp/icu/nv4-13.txt /tmp/icu/nv4-14.txt
+ -->
+ +cp;16AC4;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT FOUR;nt=De;nv=4;SB=NU;WB=NU;-XIDS
+ Unicode 14:
+ tnsa 16AC0..16AC9 Tangsa
+ https://github.com/unicode-org/cldr/pull/1326
+
+*** merge the Unicode update branches back onto the trunk
+- do not merge the icudata.jar and testdata.jar,
+ instead rebuild them from merged & tested ICU4C
+- make sure that changes to Unicode tools are checked in:
+ https://github.com/unicode-org/unicodetools
---------------------------------------------------------------------------- ***
@@ -2313,7 +2613,7 @@ or
---------------------------------------------------------------------------- ***
-New script codes early in ICU 58: http://bugs.icu-project.org/trac/ticket/11764
+New script codes early in ICU 58: https://unicode-org.atlassian.net/browse/ICU-11764
Adding
- new scripts in Unicode 9: Adlm, Bhks, Marc, Newa, Osge
@@ -2341,7 +2641,7 @@ SRC_DATA_IN=$ICU_SRC_DIR/source/data/in
UNIDATA=$ICU_SRC_DIR/source/data/unidata
Adjust unicode/c/genprops/*builder.cpp for #ifndef/#ifdef changes in _data.h files,
-see http://bugs.icu-project.org/trac/ticket/12141
+see https://unicode-org.atlassian.net/browse/ICU-12141
make install, then icutools cmake & make, then
~/svn.icutools/trunk/dbg/unicode/c$ make && genprops/genprops $ICU_SRC_DIR
@@ -2372,7 +2672,7 @@ Generate Java data as usual, only update pnames.icu & uprops.icu.
---------------------------------------------------------------------------- ***
-Emoji properties added in ICU 57: http://bugs.icu-project.org/trac/ticket/11802
+Emoji properties added in ICU 57: https://unicode-org.atlassian.net/browse/ICU-11802
Edit preparseucd.py to add & parse new properties.
They share the UCD property namespace but are not listed in PropertyAliases.txt.
@@ -3453,7 +3753,7 @@ or
Future Unicode update
Tools simplified since the Unicode 6.1 update. See
-- http://site.icu-project.org/design/props/ppucd
+- https://icu.unicode.org/design/props/ppucd
- http://bugs.icu-project.org/trac/wiki/Markus/ReviewTicket8972
* Unicode version numbers
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/clean.sh b/Build/source/libs/icu/icu-src/source/data/unidata/clean.sh
new file mode 100755
index 00000000000..b3baffeb51b
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/clean.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# © 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# This script deletes files that generate.sh tries to regenerate.
+
+# Required environment variables:
+# - ICU_SRC - the root directory of ICU source. This directory contains the
+# `icu4c` directory.
+
+# We cannot just delete *_data.h because ucol_data.h is not a generated header file.
+rm $ICU_SRC/icu4c/source/common/norm2_nfc_data.h
+rm $ICU_SRC/icu4c/source/common/propname_data.h
+rm $ICU_SRC/icu4c/source/common/*_props_data.h
+rm $ICU_SRC/icu4c/source/data/in/*.icu
+rm $ICU_SRC/icu4c/source/data/in/*.nrm
+rm $ICU_SRC/icu4c/source/data/in/coll/*.icu
+# icu4c/source/i18n/collationfcd.cpp is generated by genuca;
+# probably hard to build genuca without depending on the old version.
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt b/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
index 3fdc45e7ff1..371612c607c 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
@@ -1,11 +1,11 @@
# confusables.txt
-# Date: 2020-02-13, 01:38:49 GMT
-# © 2020 Unicode®, Inc.
+# Date: 2021-05-29, 22:09:29 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Security Mechanisms for UTS #39
-# Version: 13.0.0
+# Version: 14.0.0
#
# For documentation and usage, see http://www.unicode.org/reports/tr39
#
@@ -593,7 +593,7 @@ FF40 ; 0027 ; MA #* ( ` → ' ) FULLWIDTH GRAVE ACCENT → APOSTROPHE # →‘
02B9 ; 0027 ; MA # ( ʹ → ' ) MODIFIER LETTER PRIME → APOSTROPHE #
0374 ; 0027 ; MA # ( ʹ → ' ) GREEK NUMERAL SIGN → APOSTROPHE # →′→
02C8 ; 0027 ; MA # ( ˈ → ' ) MODIFIER LETTER VERTICAL LINE → APOSTROPHE #
-02CA ; 0027 ; MA # ( ˊ → ' ) MODIFIER LETTER ACUTE ACCENT → APOSTROPHE # →΄→→ʹ→
+02CA ; 0027 ; MA # ( ˊ → ' ) MODIFIER LETTER ACUTE ACCENT → APOSTROPHE # →ʹ→→′→
02CB ; 0027 ; MA # ( ˋ → ' ) MODIFIER LETTER GRAVE ACCENT → APOSTROPHE # →`→→‘→
02F4 ; 0027 ; MA #* ( ˴ → ' ) MODIFIER LETTER MIDDLE GRAVE ACCENT → APOSTROPHE # →ˋ→→`→→‘→
02BB ; 0027 ; MA # ( ʻ → ' ) MODIFIER LETTER TURNED COMMA → APOSTROPHE # →‘→
@@ -1071,7 +1071,7 @@ A714 ; 02EB ; MA #* ( ꜔ → ˫ ) MODIFIER LETTER MID LEFT-STEM TONE BAR → MO
25CB ; 00B0 ; MA #* ( ○ → ° ) WHITE CIRCLE → DEGREE SIGN # →◦→→∘→
25E6 ; 00B0 ; MA #* ( ◦ → ° ) WHITE BULLET → DEGREE SIGN # →∘→
-235C ; 00B0 0332 ; MA #* ( ⍜ → °̲ ) APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR → DEGREE SIGN, COMBINING LOW LINE # →○̲→
+235C ; 00B0 0332 ; MA #* ( ⍜ → °̲ ) APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR → DEGREE SIGN, COMBINING LOW LINE # →○̲→→∘̲→
2364 ; 00B0 0308 ; MA #* ( ⍤ → °̈ ) APL FUNCTIONAL SYMBOL JOT DIAERESIS → DEGREE SIGN, COMBINING DIAERESIS # →◦̈→→∘̈→
@@ -2371,7 +2371,7 @@ A6B1 ; 2C75 ; MA # ( ꚱ → Ⱶ ) BAMUM LETTER NDAA → LATIN CAPITAL LETTER HA
A795 ; A727 ; MA # ( ꞕ → ꜧ ) LATIN SMALL LETTER H WITH PALATAL HOOK → LATIN SMALL LETTER HENG #
02DB ; 0069 ; MA #* ( ˛ → i ) OGONEK → LATIN SMALL LETTER I # →ͺ→→ι→→ι→
-2373 ; 0069 ; MA #* ( ⍳ → i ) APL FUNCTIONAL SYMBOL IOTA → LATIN SMALL LETTER I # →ɩ→
+2373 ; 0069 ; MA #* ( ⍳ → i ) APL FUNCTIONAL SYMBOL IOTA → LATIN SMALL LETTER I # →ι→
FF49 ; 0069 ; MA # ( i → i ) FULLWIDTH LATIN SMALL LETTER I → LATIN SMALL LETTER I # →і→
2170 ; 0069 ; MA # ( ⅰ → i ) SMALL ROMAN NUMERAL ONE → LATIN SMALL LETTER I #
2139 ; 0069 ; MA # ( ℹ → i ) INFORMATION SOURCE → LATIN SMALL LETTER I #
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/emoji-sequences.txt b/Build/source/libs/icu/icu-src/source/data/unidata/emoji-sequences.txt
new file mode 100644
index 00000000000..e8aa0fc97fd
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/emoji-sequences.txt
@@ -0,0 +1,1469 @@
+# emoji-sequences.txt
+# Date: 2021-08-26, 17:22:22 GMT
+# © 2021 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Emoji Sequence Data for UTS #51
+# Version: 14.0
+#
+# For documentation and usage, see http://www.unicode.org/reports/tr51
+#
+# Format:
+# code_point(s) ; type_field ; description # comments
+# Fields:
+# code_point(s): one or more code points in hex format, separated by spaces
+# type_field, one of the following:
+# Basic_Emoji
+# Emoji_Keycap_Sequence
+# RGI_Emoji_Flag_Sequence
+# RGI_Emoji_Tag_Sequence
+# RGI_Emoji_Modifier_Sequence
+# The type_field is a convenience for parsing the emoji sequence files, and is not intended to be maintained as a property.
+# short name: CLDR short name of sequence; characters may be escaped with \x{hex}.
+#
+# For the purpose of regular expressions, each of the type fields defines the name of
+# a binary property of strings. The short name of each property is the same as the long name.
+#
+# For the purpose of regular expressions, the property RGI_Emoji is defined as
+# a binary property of strings corresponding to ED-27 in UTS #51 Unicode Emoji.
+# That is, it is the union of the above properties plus RGI_Emoji_ZWJ_Sequence,
+# whose data is in emoji-zwj-sequences.txt.
+# The short name of RGI_Emoji is the same as the long name.
+#
+# Characters and sequences are listed in code point order. Users should be shown a more natural order.
+# See the CLDR collation order for Emoji.
+
+# ================================================
+
+# Basic_Emoji
+
+231A..231B ; Basic_Emoji ; watch # E0.6 [2] (⌚..⌛)
+23E9..23EC ; Basic_Emoji ; fast-forward button # E0.6 [4] (⏩..⏬)
+23F0 ; Basic_Emoji ; alarm clock # E0.6 [1] (⏰)
+23F3 ; Basic_Emoji ; hourglass not done # E0.6 [1] (⏳)
+25FD..25FE ; Basic_Emoji ; white medium-small square # E0.6 [2] (◽..◾)
+2614..2615 ; Basic_Emoji ; umbrella with rain drops # E0.6 [2] (☔..☕)
+2648..2653 ; Basic_Emoji ; Aries # E0.6 [12] (♈..♓)
+267F ; Basic_Emoji ; wheelchair symbol # E0.6 [1] (♿)
+2693 ; Basic_Emoji ; anchor # E0.6 [1] (⚓)
+26A1 ; Basic_Emoji ; high voltage # E0.6 [1] (⚡)
+26AA..26AB ; Basic_Emoji ; white circle # E0.6 [2] (⚪..⚫)
+26BD..26BE ; Basic_Emoji ; soccer ball # E0.6 [2] (⚽..⚾)
+26C4..26C5 ; Basic_Emoji ; snowman without snow # E0.6 [2] (⛄..⛅)
+26CE ; Basic_Emoji ; Ophiuchus # E0.6 [1] (⛎)
+26D4 ; Basic_Emoji ; no entry # E0.6 [1] (⛔)
+26EA ; Basic_Emoji ; church # E0.6 [1] (⛪)
+26F2..26F3 ; Basic_Emoji ; fountain # E0.6 [2] (⛲..⛳)
+26F5 ; Basic_Emoji ; sailboat # E0.6 [1] (⛵)
+26FA ; Basic_Emoji ; tent # E0.6 [1] (⛺)
+26FD ; Basic_Emoji ; fuel pump # E0.6 [1] (⛽)
+2705 ; Basic_Emoji ; check mark button # E0.6 [1] (✅)
+270A..270B ; Basic_Emoji ; raised fist # E0.6 [2] (✊..✋)
+2728 ; Basic_Emoji ; sparkles # E0.6 [1] (✨)
+274C ; Basic_Emoji ; cross mark # E0.6 [1] (❌)
+274E ; Basic_Emoji ; cross mark button # E0.6 [1] (❎)
+2753..2755 ; Basic_Emoji ; red question mark # E0.6 [3] (❓..❕)
+2757 ; Basic_Emoji ; red exclamation mark # E0.6 [1] (❗)
+2795..2797 ; Basic_Emoji ; plus # E0.6 [3] (➕..➗)
+27B0 ; Basic_Emoji ; curly loop # E0.6 [1] (➰)
+27BF ; Basic_Emoji ; double curly loop # E1.0 [1] (➿)
+2B1B..2B1C ; Basic_Emoji ; black large square # E0.6 [2] (⬛..⬜)
+2B50 ; Basic_Emoji ; star # E0.6 [1] (⭐)
+2B55 ; Basic_Emoji ; hollow red circle # E0.6 [1] (⭕)
+1F004 ; Basic_Emoji ; mahjong red dragon # E0.6 [1] (🀄)
+1F0CF ; Basic_Emoji ; joker # E0.6 [1] (🃏)
+1F18E ; Basic_Emoji ; AB button (blood type) # E0.6 [1] (🆎)
+1F191..1F19A ; Basic_Emoji ; CL button # E0.6 [10] (🆑..🆚)
+1F201 ; Basic_Emoji ; Japanese “here” button # E0.6 [1] (🈁)
+1F21A ; Basic_Emoji ; Japanese “free of charge” button # E0.6 [1] (🈚)
+1F22F ; Basic_Emoji ; Japanese “reserved” button # E0.6 [1] (🈯)
+1F232..1F236 ; Basic_Emoji ; Japanese “prohibited” button # E0.6 [5] (🈲..🈶)
+1F238..1F23A ; Basic_Emoji ; Japanese “application” button # E0.6 [3] (🈸..🈺)
+1F250..1F251 ; Basic_Emoji ; Japanese “bargain” button # E0.6 [2] (🉐..🉑)
+1F300..1F30C ; Basic_Emoji ; cyclone # E0.6 [13] (🌀..🌌)
+1F30D..1F30E ; Basic_Emoji ; globe showing Europe-Africa # E0.7 [2] (🌍..🌎)
+1F30F ; Basic_Emoji ; globe showing Asia-Australia # E0.6 [1] (🌏)
+1F310 ; Basic_Emoji ; globe with meridians # E1.0 [1] (🌐)
+1F311 ; Basic_Emoji ; new moon # E0.6 [1] (🌑)
+1F312 ; Basic_Emoji ; waxing crescent moon # E1.0 [1] (🌒)
+1F313..1F315 ; Basic_Emoji ; first quarter moon # E0.6 [3] (🌓..🌕)
+1F316..1F318 ; Basic_Emoji ; waning gibbous moon # E1.0 [3] (🌖..🌘)
+1F319 ; Basic_Emoji ; crescent moon # E0.6 [1] (🌙)
+1F31A ; Basic_Emoji ; new moon face # E1.0 [1] (🌚)
+1F31B ; Basic_Emoji ; first quarter moon face # E0.6 [1] (🌛)
+1F31C ; Basic_Emoji ; last quarter moon face # E0.7 [1] (🌜)
+1F31D..1F31E ; Basic_Emoji ; full moon face # E1.0 [2] (🌝..🌞)
+1F31F..1F320 ; Basic_Emoji ; glowing star # E0.6 [2] (🌟..🌠)
+1F32D..1F32F ; Basic_Emoji ; hot dog # E1.0 [3] (🌭..🌯)
+1F330..1F331 ; Basic_Emoji ; chestnut # E0.6 [2] (🌰..🌱)
+1F332..1F333 ; Basic_Emoji ; evergreen tree # E1.0 [2] (🌲..🌳)
+1F334..1F335 ; Basic_Emoji ; palm tree # E0.6 [2] (🌴..🌵)
+1F337..1F34A ; Basic_Emoji ; tulip # E0.6 [20] (🌷..🍊)
+1F34B ; Basic_Emoji ; lemon # E1.0 [1] (🍋)
+1F34C..1F34F ; Basic_Emoji ; banana # E0.6 [4] (🍌..🍏)
+1F350 ; Basic_Emoji ; pear # E1.0 [1] (🍐)
+1F351..1F37B ; Basic_Emoji ; peach # E0.6 [43] (🍑..🍻)
+1F37C ; Basic_Emoji ; baby bottle # E1.0 [1] (🍼)
+1F37E..1F37F ; Basic_Emoji ; bottle with popping cork # E1.0 [2] (🍾..🍿)
+1F380..1F393 ; Basic_Emoji ; ribbon # E0.6 [20] (🎀..🎓)
+1F3A0..1F3C4 ; Basic_Emoji ; carousel horse # E0.6 [37] (🎠..🏄)
+1F3C5 ; Basic_Emoji ; sports medal # E1.0 [1] (🏅)
+1F3C6 ; Basic_Emoji ; trophy # E0.6 [1] (🏆)
+1F3C7 ; Basic_Emoji ; horse racing # E1.0 [1] (🏇)
+1F3C8 ; Basic_Emoji ; american football # E0.6 [1] (🏈)
+1F3C9 ; Basic_Emoji ; rugby football # E1.0 [1] (🏉)
+1F3CA ; Basic_Emoji ; person swimming # E0.6 [1] (🏊)
+1F3CF..1F3D3 ; Basic_Emoji ; cricket game # E1.0 [5] (🏏..🏓)
+1F3E0..1F3E3 ; Basic_Emoji ; house # E0.6 [4] (🏠..🏣)
+1F3E4 ; Basic_Emoji ; post office # E1.0 [1] (🏤)
+1F3E5..1F3F0 ; Basic_Emoji ; hospital # E0.6 [12] (🏥..🏰)
+1F3F4 ; Basic_Emoji ; black flag # E1.0 [1] (🏴)
+1F3F8..1F407 ; Basic_Emoji ; badminton # E1.0 [16] (🏸..🐇)
+1F408 ; Basic_Emoji ; cat # E0.7 [1] (🐈)
+1F409..1F40B ; Basic_Emoji ; dragon # E1.0 [3] (🐉..🐋)
+1F40C..1F40E ; Basic_Emoji ; snail # E0.6 [3] (🐌..🐎)
+1F40F..1F410 ; Basic_Emoji ; ram # E1.0 [2] (🐏..🐐)
+1F411..1F412 ; Basic_Emoji ; ewe # E0.6 [2] (🐑..🐒)
+1F413 ; Basic_Emoji ; rooster # E1.0 [1] (🐓)
+1F414 ; Basic_Emoji ; chicken # E0.6 [1] (🐔)
+1F415 ; Basic_Emoji ; dog # E0.7 [1] (🐕)
+1F416 ; Basic_Emoji ; pig # E1.0 [1] (🐖)
+1F417..1F429 ; Basic_Emoji ; boar # E0.6 [19] (🐗..🐩)
+1F42A ; Basic_Emoji ; camel # E1.0 [1] (🐪)
+1F42B..1F43E ; Basic_Emoji ; two-hump camel # E0.6 [20] (🐫..🐾)
+1F440 ; Basic_Emoji ; eyes # E0.6 [1] (👀)
+1F442..1F464 ; Basic_Emoji ; ear # E0.6 [35] (👂..👤)
+1F465 ; Basic_Emoji ; busts in silhouette # E1.0 [1] (👥)
+1F466..1F46B ; Basic_Emoji ; boy # E0.6 [6] (👦..👫)
+1F46C..1F46D ; Basic_Emoji ; men holding hands # E1.0 [2] (👬..👭)
+1F46E..1F4AC ; Basic_Emoji ; police officer # E0.6 [63] (👮..💬)
+1F4AD ; Basic_Emoji ; thought balloon # E1.0 [1] (💭)
+1F4AE..1F4B5 ; Basic_Emoji ; white flower # E0.6 [8] (💮..💵)
+1F4B6..1F4B7 ; Basic_Emoji ; euro banknote # E1.0 [2] (💶..💷)
+1F4B8..1F4EB ; Basic_Emoji ; money with wings # E0.6 [52] (💸..📫)
+1F4EC..1F4ED ; Basic_Emoji ; open mailbox with raised flag # E0.7 [2] (📬..📭)
+1F4EE ; Basic_Emoji ; postbox # E0.6 [1] (📮)
+1F4EF ; Basic_Emoji ; postal horn # E1.0 [1] (📯)
+1F4F0..1F4F4 ; Basic_Emoji ; newspaper # E0.6 [5] (📰..📴)
+1F4F5 ; Basic_Emoji ; no mobile phones # E1.0 [1] (📵)
+1F4F6..1F4F7 ; Basic_Emoji ; antenna bars # E0.6 [2] (📶..📷)
+1F4F8 ; Basic_Emoji ; camera with flash # E1.0 [1] (📸)
+1F4F9..1F4FC ; Basic_Emoji ; video camera # E0.6 [4] (📹..📼)
+1F4FF..1F502 ; Basic_Emoji ; prayer beads # E1.0 [4] (📿..🔂)
+1F503 ; Basic_Emoji ; clockwise vertical arrows # E0.6 [1] (🔃)
+1F504..1F507 ; Basic_Emoji ; counterclockwise arrows button # E1.0 [4] (🔄..🔇)
+1F508 ; Basic_Emoji ; speaker low volume # E0.7 [1] (🔈)
+1F509 ; Basic_Emoji ; speaker medium volume # E1.0 [1] (🔉)
+1F50A..1F514 ; Basic_Emoji ; speaker high volume # E0.6 [11] (🔊..🔔)
+1F515 ; Basic_Emoji ; bell with slash # E1.0 [1] (🔕)
+1F516..1F52B ; Basic_Emoji ; bookmark # E0.6 [22] (🔖..🔫)
+1F52C..1F52D ; Basic_Emoji ; microscope # E1.0 [2] (🔬..🔭)
+1F52E..1F53D ; Basic_Emoji ; crystal ball # E0.6 [16] (🔮..🔽)
+1F54B..1F54E ; Basic_Emoji ; kaaba # E1.0 [4] (🕋..🕎)
+1F550..1F55B ; Basic_Emoji ; one o’clock # E0.6 [12] (🕐..🕛)
+1F55C..1F567 ; Basic_Emoji ; one-thirty # E0.7 [12] (🕜..🕧)
+1F57A ; Basic_Emoji ; man dancing # E3.0 [1] (🕺)
+1F595..1F596 ; Basic_Emoji ; middle finger # E1.0 [2] (🖕..🖖)
+1F5A4 ; Basic_Emoji ; black heart # E3.0 [1] (🖤)
+1F5FB..1F5FF ; Basic_Emoji ; mount fuji # E0.6 [5] (🗻..🗿)
+1F600 ; Basic_Emoji ; grinning face # E1.0 [1] (😀)
+1F601..1F606 ; Basic_Emoji ; beaming face with smiling eyes # E0.6 [6] (😁..😆)
+1F607..1F608 ; Basic_Emoji ; smiling face with halo # E1.0 [2] (😇..😈)
+1F609..1F60D ; Basic_Emoji ; winking face # E0.6 [5] (😉..😍)
+1F60E ; Basic_Emoji ; smiling face with sunglasses # E1.0 [1] (😎)
+1F60F ; Basic_Emoji ; smirking face # E0.6 [1] (😏)
+1F610 ; Basic_Emoji ; neutral face # E0.7 [1] (😐)
+1F611 ; Basic_Emoji ; expressionless face # E1.0 [1] (😑)
+1F612..1F614 ; Basic_Emoji ; unamused face # E0.6 [3] (😒..😔)
+1F615 ; Basic_Emoji ; confused face # E1.0 [1] (😕)
+1F616 ; Basic_Emoji ; confounded face # E0.6 [1] (😖)
+1F617 ; Basic_Emoji ; kissing face # E1.0 [1] (😗)
+1F618 ; Basic_Emoji ; face blowing a kiss # E0.6 [1] (😘)
+1F619 ; Basic_Emoji ; kissing face with smiling eyes # E1.0 [1] (😙)
+1F61A ; Basic_Emoji ; kissing face with closed eyes # E0.6 [1] (😚)
+1F61B ; Basic_Emoji ; face with tongue # E1.0 [1] (😛)
+1F61C..1F61E ; Basic_Emoji ; winking face with tongue # E0.6 [3] (😜..😞)
+1F61F ; Basic_Emoji ; worried face # E1.0 [1] (😟)
+1F620..1F625 ; Basic_Emoji ; angry face # E0.6 [6] (😠..😥)
+1F626..1F627 ; Basic_Emoji ; frowning face with open mouth # E1.0 [2] (😦..😧)
+1F628..1F62B ; Basic_Emoji ; fearful face # E0.6 [4] (😨..😫)
+1F62C ; Basic_Emoji ; grimacing face # E1.0 [1] (😬)
+1F62D ; Basic_Emoji ; loudly crying face # E0.6 [1] (😭)
+1F62E..1F62F ; Basic_Emoji ; face with open mouth # E1.0 [2] (😮..😯)
+1F630..1F633 ; Basic_Emoji ; anxious face with sweat # E0.6 [4] (😰..😳)
+1F634 ; Basic_Emoji ; sleeping face # E1.0 [1] (😴)
+1F635 ; Basic_Emoji ; face with crossed-out eyes # E0.6 [1] (😵)
+1F636 ; Basic_Emoji ; face without mouth # E1.0 [1] (😶)
+1F637..1F640 ; Basic_Emoji ; face with medical mask # E0.6 [10] (😷..🙀)
+1F641..1F644 ; Basic_Emoji ; slightly frowning face # E1.0 [4] (🙁..🙄)
+1F645..1F64F ; Basic_Emoji ; person gesturing NO # E0.6 [11] (🙅..🙏)
+1F680 ; Basic_Emoji ; rocket # E0.6 [1] (🚀)
+1F681..1F682 ; Basic_Emoji ; helicopter # E1.0 [2] (🚁..🚂)
+1F683..1F685 ; Basic_Emoji ; railway car # E0.6 [3] (🚃..🚅)
+1F686 ; Basic_Emoji ; train # E1.0 [1] (🚆)
+1F687 ; Basic_Emoji ; metro # E0.6 [1] (🚇)
+1F688 ; Basic_Emoji ; light rail # E1.0 [1] (🚈)
+1F689 ; Basic_Emoji ; station # E0.6 [1] (🚉)
+1F68A..1F68B ; Basic_Emoji ; tram # E1.0 [2] (🚊..🚋)
+1F68C ; Basic_Emoji ; bus # E0.6 [1] (🚌)
+1F68D ; Basic_Emoji ; oncoming bus # E0.7 [1] (🚍)
+1F68E ; Basic_Emoji ; trolleybus # E1.0 [1] (🚎)
+1F68F ; Basic_Emoji ; bus stop # E0.6 [1] (🚏)
+1F690 ; Basic_Emoji ; minibus # E1.0 [1] (🚐)
+1F691..1F693 ; Basic_Emoji ; ambulance # E0.6 [3] (🚑..🚓)
+1F694 ; Basic_Emoji ; oncoming police car # E0.7 [1] (🚔)
+1F695 ; Basic_Emoji ; taxi # E0.6 [1] (🚕)
+1F696 ; Basic_Emoji ; oncoming taxi # E1.0 [1] (🚖)
+1F697 ; Basic_Emoji ; automobile # E0.6 [1] (🚗)
+1F698 ; Basic_Emoji ; oncoming automobile # E0.7 [1] (🚘)
+1F699..1F69A ; Basic_Emoji ; sport utility vehicle # E0.6 [2] (🚙..🚚)
+1F69B..1F6A1 ; Basic_Emoji ; articulated lorry # E1.0 [7] (🚛..🚡)
+1F6A2 ; Basic_Emoji ; ship # E0.6 [1] (🚢)
+1F6A3 ; Basic_Emoji ; person rowing boat # E1.0 [1] (🚣)
+1F6A4..1F6A5 ; Basic_Emoji ; speedboat # E0.6 [2] (🚤..🚥)
+1F6A6 ; Basic_Emoji ; vertical traffic light # E1.0 [1] (🚦)
+1F6A7..1F6AD ; Basic_Emoji ; construction # E0.6 [7] (🚧..🚭)
+1F6AE..1F6B1 ; Basic_Emoji ; litter in bin sign # E1.0 [4] (🚮..🚱)
+1F6B2 ; Basic_Emoji ; bicycle # E0.6 [1] (🚲)
+1F6B3..1F6B5 ; Basic_Emoji ; no bicycles # E1.0 [3] (🚳..🚵)
+1F6B6 ; Basic_Emoji ; person walking # E0.6 [1] (🚶)
+1F6B7..1F6B8 ; Basic_Emoji ; no pedestrians # E1.0 [2] (🚷..🚸)
+1F6B9..1F6BE ; Basic_Emoji ; men’s room # E0.6 [6] (🚹..🚾)
+1F6BF ; Basic_Emoji ; shower # E1.0 [1] (🚿)
+1F6C0 ; Basic_Emoji ; person taking bath # E0.6 [1] (🛀)
+1F6C1..1F6C5 ; Basic_Emoji ; bathtub # E1.0 [5] (🛁..🛅)
+1F6CC ; Basic_Emoji ; person in bed # E1.0 [1] (🛌)
+1F6D0 ; Basic_Emoji ; place of worship # E1.0 [1] (🛐)
+1F6D1..1F6D2 ; Basic_Emoji ; stop sign # E3.0 [2] (🛑..🛒)
+1F6D5 ; Basic_Emoji ; hindu temple # E12.0 [1] (🛕)
+1F6D6..1F6D7 ; Basic_Emoji ; hut # E13.0 [2] (🛖..🛗)
+1F6DD..1F6DF ; Basic_Emoji ; playground slide # E14.0 [3] (🛝..🛟)
+1F6EB..1F6EC ; Basic_Emoji ; airplane departure # E1.0 [2] (🛫..🛬)
+1F6F4..1F6F6 ; Basic_Emoji ; kick scooter # E3.0 [3] (🛴..🛶)
+1F6F7..1F6F8 ; Basic_Emoji ; sled # E5.0 [2] (🛷..🛸)
+1F6F9 ; Basic_Emoji ; skateboard # E11.0 [1] (🛹)
+1F6FA ; Basic_Emoji ; auto rickshaw # E12.0 [1] (🛺)
+1F6FB..1F6FC ; Basic_Emoji ; pickup truck # E13.0 [2] (🛻..🛼)
+1F7E0..1F7EB ; Basic_Emoji ; orange circle # E12.0 [12] (🟠..🟫)
+1F7F0 ; Basic_Emoji ; heavy equals sign # E14.0 [1] (🟰)
+1F90C ; Basic_Emoji ; pinched fingers # E13.0 [1] (🤌)
+1F90D..1F90F ; Basic_Emoji ; white heart # E12.0 [3] (🤍..🤏)
+1F910..1F918 ; Basic_Emoji ; zipper-mouth face # E1.0 [9] (🤐..🤘)
+1F919..1F91E ; Basic_Emoji ; call me hand # E3.0 [6] (🤙..🤞)
+1F91F ; Basic_Emoji ; love-you gesture # E5.0 [1] (🤟)
+1F920..1F927 ; Basic_Emoji ; cowboy hat face # E3.0 [8] (🤠..🤧)
+1F928..1F92F ; Basic_Emoji ; face with raised eyebrow # E5.0 [8] (🤨..🤯)
+1F930 ; Basic_Emoji ; pregnant woman # E3.0 [1] (🤰)
+1F931..1F932 ; Basic_Emoji ; breast-feeding # E5.0 [2] (🤱..🤲)
+1F933..1F93A ; Basic_Emoji ; selfie # E3.0 [8] (🤳..🤺)
+1F93C..1F93E ; Basic_Emoji ; people wrestling # E3.0 [3] (🤼..🤾)
+1F93F ; Basic_Emoji ; diving mask # E12.0 [1] (🤿)
+1F940..1F945 ; Basic_Emoji ; wilted flower # E3.0 [6] (🥀..🥅)
+1F947..1F94B ; Basic_Emoji ; 1st place medal # E3.0 [5] (🥇..🥋)
+1F94C ; Basic_Emoji ; curling stone # E5.0 [1] (🥌)
+1F94D..1F94F ; Basic_Emoji ; lacrosse # E11.0 [3] (🥍..🥏)
+1F950..1F95E ; Basic_Emoji ; croissant # E3.0 [15] (🥐..🥞)
+1F95F..1F96B ; Basic_Emoji ; dumpling # E5.0 [13] (🥟..🥫)
+1F96C..1F970 ; Basic_Emoji ; leafy green # E11.0 [5] (🥬..🥰)
+1F971 ; Basic_Emoji ; yawning face # E12.0 [1] (🥱)
+1F972 ; Basic_Emoji ; smiling face with tear # E13.0 [1] (🥲)
+1F973..1F976 ; Basic_Emoji ; partying face # E11.0 [4] (🥳..🥶)
+1F977..1F978 ; Basic_Emoji ; ninja # E13.0 [2] (🥷..🥸)
+1F979 ; Basic_Emoji ; face holding back tears # E14.0 [1] (🥹)
+1F97A ; Basic_Emoji ; pleading face # E11.0 [1] (🥺)
+1F97B ; Basic_Emoji ; sari # E12.0 [1] (🥻)
+1F97C..1F97F ; Basic_Emoji ; lab coat # E11.0 [4] (🥼..🥿)
+1F980..1F984 ; Basic_Emoji ; crab # E1.0 [5] (🦀..🦄)
+1F985..1F991 ; Basic_Emoji ; eagle # E3.0 [13] (🦅..🦑)
+1F992..1F997 ; Basic_Emoji ; giraffe # E5.0 [6] (🦒..🦗)
+1F998..1F9A2 ; Basic_Emoji ; kangaroo # E11.0 [11] (🦘..🦢)
+1F9A3..1F9A4 ; Basic_Emoji ; mammoth # E13.0 [2] (🦣..🦤)
+1F9A5..1F9AA ; Basic_Emoji ; sloth # E12.0 [6] (🦥..🦪)
+1F9AB..1F9AD ; Basic_Emoji ; beaver # E13.0 [3] (🦫..🦭)
+1F9AE..1F9AF ; Basic_Emoji ; guide dog # E12.0 [2] (🦮..🦯)
+1F9B0..1F9B9 ; Basic_Emoji ; red hair # E11.0 [10] (🦰..🦹)
+1F9BA..1F9BF ; Basic_Emoji ; safety vest # E12.0 [6] (🦺..🦿)
+1F9C0 ; Basic_Emoji ; cheese wedge # E1.0 [1] (🧀)
+1F9C1..1F9C2 ; Basic_Emoji ; cupcake # E11.0 [2] (🧁..🧂)
+1F9C3..1F9CA ; Basic_Emoji ; beverage box # E12.0 [8] (🧃..🧊)
+1F9CB ; Basic_Emoji ; bubble tea # E13.0 [1] (🧋)
+1F9CC ; Basic_Emoji ; troll # E14.0 [1] (🧌)
+1F9CD..1F9CF ; Basic_Emoji ; person standing # E12.0 [3] (🧍..🧏)
+1F9D0..1F9E6 ; Basic_Emoji ; face with monocle # E5.0 [23] (🧐..🧦)
+1F9E7..1F9FF ; Basic_Emoji ; red envelope # E11.0 [25] (🧧..🧿)
+1FA70..1FA73 ; Basic_Emoji ; ballet shoes # E12.0 [4] (🩰..🩳)
+1FA74 ; Basic_Emoji ; thong sandal # E13.0 [1] (🩴)
+1FA78..1FA7A ; Basic_Emoji ; drop of blood # E12.0 [3] (🩸..🩺)
+1FA7B..1FA7C ; Basic_Emoji ; x-ray # E14.0 [2] (🩻..🩼)
+1FA80..1FA82 ; Basic_Emoji ; yo-yo # E12.0 [3] (🪀..🪂)
+1FA83..1FA86 ; Basic_Emoji ; boomerang # E13.0 [4] (🪃..🪆)
+1FA90..1FA95 ; Basic_Emoji ; ringed planet # E12.0 [6] (🪐..🪕)
+1FA96..1FAA8 ; Basic_Emoji ; military helmet # E13.0 [19] (🪖..🪨)
+1FAA9..1FAAC ; Basic_Emoji ; mirror ball # E14.0 [4] (🪩..🪬)
+1FAB0..1FAB6 ; Basic_Emoji ; fly # E13.0 [7] (🪰..🪶)
+1FAB7..1FABA ; Basic_Emoji ; lotus # E14.0 [4] (🪷..🪺)
+1FAC0..1FAC2 ; Basic_Emoji ; anatomical heart # E13.0 [3] (🫀..🫂)
+1FAC3..1FAC5 ; Basic_Emoji ; pregnant man # E14.0 [3] (🫃..🫅)
+1FAD0..1FAD6 ; Basic_Emoji ; blueberries # E13.0 [7] (🫐..🫖)
+1FAD7..1FAD9 ; Basic_Emoji ; pouring liquid # E14.0 [3] (🫗..🫙)
+1FAE0..1FAE7 ; Basic_Emoji ; melting face # E14.0 [8] (🫠..🫧)
+1FAF0..1FAF6 ; Basic_Emoji ; hand with index finger and thumb crossed # E14.0 [7] (🫰..🫶)
+00A9 FE0F ; Basic_Emoji ; copyright # E0.6 [1] (©️)
+00AE FE0F ; Basic_Emoji ; registered # E0.6 [1] (®️)
+203C FE0F ; Basic_Emoji ; double exclamation mark # E0.6 [1] (‼️)
+2049 FE0F ; Basic_Emoji ; exclamation question mark # E0.6 [1] (⁉️)
+2122 FE0F ; Basic_Emoji ; trade mark # E0.6 [1] (™️)
+2139 FE0F ; Basic_Emoji ; information # E0.6 [1] (ℹ️)
+2194 FE0F ; Basic_Emoji ; left-right arrow # E0.6 [1] (↔️)
+2195 FE0F ; Basic_Emoji ; up-down arrow # E0.6 [1] (↕️)
+2196 FE0F ; Basic_Emoji ; up-left arrow # E0.6 [1] (↖️)
+2197 FE0F ; Basic_Emoji ; up-right arrow # E0.6 [1] (↗️)
+2198 FE0F ; Basic_Emoji ; down-right arrow # E0.6 [1] (↘️)
+2199 FE0F ; Basic_Emoji ; down-left arrow # E0.6 [1] (↙️)
+21A9 FE0F ; Basic_Emoji ; right arrow curving left # E0.6 [1] (↩️)
+21AA FE0F ; Basic_Emoji ; left arrow curving right # E0.6 [1] (↪️)
+2328 FE0F ; Basic_Emoji ; keyboard # E1.0 [1] (⌨️)
+23CF FE0F ; Basic_Emoji ; eject button # E1.0 [1] (⏏️)
+23ED FE0F ; Basic_Emoji ; next track button # E0.7 [1] (⏭️)
+23EE FE0F ; Basic_Emoji ; last track button # E0.7 [1] (⏮️)
+23EF FE0F ; Basic_Emoji ; play or pause button # E1.0 [1] (⏯️)
+23F1 FE0F ; Basic_Emoji ; stopwatch # E1.0 [1] (⏱️)
+23F2 FE0F ; Basic_Emoji ; timer clock # E1.0 [1] (⏲️)
+23F8 FE0F ; Basic_Emoji ; pause button # E0.7 [1] (⏸️)
+23F9 FE0F ; Basic_Emoji ; stop button # E0.7 [1] (⏹️)
+23FA FE0F ; Basic_Emoji ; record button # E0.7 [1] (⏺️)
+24C2 FE0F ; Basic_Emoji ; circled M # E0.6 [1] (Ⓜ️)
+25AA FE0F ; Basic_Emoji ; black small square # E0.6 [1] (▪️)
+25AB FE0F ; Basic_Emoji ; white small square # E0.6 [1] (▫️)
+25B6 FE0F ; Basic_Emoji ; play button # E0.6 [1] (▶️)
+25C0 FE0F ; Basic_Emoji ; reverse button # E0.6 [1] (◀️)
+25FB FE0F ; Basic_Emoji ; white medium square # E0.6 [1] (◻️)
+25FC FE0F ; Basic_Emoji ; black medium square # E0.6 [1] (◼️)
+2600 FE0F ; Basic_Emoji ; sun # E0.6 [1] (☀️)
+2601 FE0F ; Basic_Emoji ; cloud # E0.6 [1] (☁️)
+2602 FE0F ; Basic_Emoji ; umbrella # E0.7 [1] (☂️)
+2603 FE0F ; Basic_Emoji ; snowman # E0.7 [1] (☃️)
+2604 FE0F ; Basic_Emoji ; comet # E1.0 [1] (☄️)
+260E FE0F ; Basic_Emoji ; telephone # E0.6 [1] (☎️)
+2611 FE0F ; Basic_Emoji ; check box with check # E0.6 [1] (☑️)
+2618 FE0F ; Basic_Emoji ; shamrock # E1.0 [1] (☘️)
+261D FE0F ; Basic_Emoji ; index pointing up # E0.6 [1] (☝️)
+2620 FE0F ; Basic_Emoji ; skull and crossbones # E1.0 [1] (☠️)
+2622 FE0F ; Basic_Emoji ; radioactive # E1.0 [1] (☢️)
+2623 FE0F ; Basic_Emoji ; biohazard # E1.0 [1] (☣️)
+2626 FE0F ; Basic_Emoji ; orthodox cross # E1.0 [1] (☦️)
+262A FE0F ; Basic_Emoji ; star and crescent # E0.7 [1] (☪️)
+262E FE0F ; Basic_Emoji ; peace symbol # E1.0 [1] (☮️)
+262F FE0F ; Basic_Emoji ; yin yang # E0.7 [1] (☯️)
+2638 FE0F ; Basic_Emoji ; wheel of dharma # E0.7 [1] (☸️)
+2639 FE0F ; Basic_Emoji ; frowning face # E0.7 [1] (☹️)
+263A FE0F ; Basic_Emoji ; smiling face # E0.6 [1] (☺️)
+2640 FE0F ; Basic_Emoji ; female sign # E4.0 [1] (♀️)
+2642 FE0F ; Basic_Emoji ; male sign # E4.0 [1] (♂️)
+265F FE0F ; Basic_Emoji ; chess pawn # E11.0 [1] (♟️)
+2660 FE0F ; Basic_Emoji ; spade suit # E0.6 [1] (♠️)
+2663 FE0F ; Basic_Emoji ; club suit # E0.6 [1] (♣️)
+2665 FE0F ; Basic_Emoji ; heart suit # E0.6 [1] (♥️)
+2666 FE0F ; Basic_Emoji ; diamond suit # E0.6 [1] (♦️)
+2668 FE0F ; Basic_Emoji ; hot springs # E0.6 [1] (♨️)
+267B FE0F ; Basic_Emoji ; recycling symbol # E0.6 [1] (♻️)
+267E FE0F ; Basic_Emoji ; infinity # E11.0 [1] (♾️)
+2692 FE0F ; Basic_Emoji ; hammer and pick # E1.0 [1] (⚒️)
+2694 FE0F ; Basic_Emoji ; crossed swords # E1.0 [1] (⚔️)
+2695 FE0F ; Basic_Emoji ; medical symbol # E4.0 [1] (⚕️)
+2696 FE0F ; Basic_Emoji ; balance scale # E1.0 [1] (⚖️)
+2697 FE0F ; Basic_Emoji ; alembic # E1.0 [1] (⚗️)
+2699 FE0F ; Basic_Emoji ; gear # E1.0 [1] (⚙️)
+269B FE0F ; Basic_Emoji ; atom symbol # E1.0 [1] (⚛️)
+269C FE0F ; Basic_Emoji ; fleur-de-lis # E1.0 [1] (⚜️)
+26A0 FE0F ; Basic_Emoji ; warning # E0.6 [1] (⚠️)
+26A7 FE0F ; Basic_Emoji ; transgender symbol # E13.0 [1] (⚧️)
+26B0 FE0F ; Basic_Emoji ; coffin # E1.0 [1] (⚰️)
+26B1 FE0F ; Basic_Emoji ; funeral urn # E1.0 [1] (⚱️)
+26C8 FE0F ; Basic_Emoji ; cloud with lightning and rain # E0.7 [1] (⛈️)
+26CF FE0F ; Basic_Emoji ; pick # E0.7 [1] (⛏️)
+26D1 FE0F ; Basic_Emoji ; rescue worker’s helmet # E0.7 [1] (⛑️)
+26D3 FE0F ; Basic_Emoji ; chains # E0.7 [1] (⛓️)
+26E9 FE0F ; Basic_Emoji ; shinto shrine # E0.7 [1] (⛩️)
+26F0 FE0F ; Basic_Emoji ; mountain # E0.7 [1] (⛰️)
+26F1 FE0F ; Basic_Emoji ; umbrella on ground # E0.7 [1] (⛱️)
+26F4 FE0F ; Basic_Emoji ; ferry # E0.7 [1] (⛴️)
+26F7 FE0F ; Basic_Emoji ; skier # E0.7 [1] (⛷️)
+26F8 FE0F ; Basic_Emoji ; ice skate # E0.7 [1] (⛸️)
+26F9 FE0F ; Basic_Emoji ; person bouncing ball # E0.7 [1] (⛹️)
+2702 FE0F ; Basic_Emoji ; scissors # E0.6 [1] (✂️)
+2708 FE0F ; Basic_Emoji ; airplane # E0.6 [1] (✈️)
+2709 FE0F ; Basic_Emoji ; envelope # E0.6 [1] (✉️)
+270C FE0F ; Basic_Emoji ; victory hand # E0.6 [1] (✌️)
+270D FE0F ; Basic_Emoji ; writing hand # E0.7 [1] (✍️)
+270F FE0F ; Basic_Emoji ; pencil # E0.6 [1] (✏️)
+2712 FE0F ; Basic_Emoji ; black nib # E0.6 [1] (✒️)
+2714 FE0F ; Basic_Emoji ; check mark # E0.6 [1] (✔️)
+2716 FE0F ; Basic_Emoji ; multiply # E0.6 [1] (✖️)
+271D FE0F ; Basic_Emoji ; latin cross # E0.7 [1] (✝️)
+2721 FE0F ; Basic_Emoji ; star of David # E0.7 [1] (✡️)
+2733 FE0F ; Basic_Emoji ; eight-spoked asterisk # E0.6 [1] (✳️)
+2734 FE0F ; Basic_Emoji ; eight-pointed star # E0.6 [1] (✴️)
+2744 FE0F ; Basic_Emoji ; snowflake # E0.6 [1] (❄️)
+2747 FE0F ; Basic_Emoji ; sparkle # E0.6 [1] (❇️)
+2763 FE0F ; Basic_Emoji ; heart exclamation # E1.0 [1] (❣️)
+2764 FE0F ; Basic_Emoji ; red heart # E0.6 [1] (❤️)
+27A1 FE0F ; Basic_Emoji ; right arrow # E0.6 [1] (➡️)
+2934 FE0F ; Basic_Emoji ; right arrow curving up # E0.6 [1] (⤴️)
+2935 FE0F ; Basic_Emoji ; right arrow curving down # E0.6 [1] (⤵️)
+2B05 FE0F ; Basic_Emoji ; left arrow # E0.6 [1] (⬅️)
+2B06 FE0F ; Basic_Emoji ; up arrow # E0.6 [1] (⬆️)
+2B07 FE0F ; Basic_Emoji ; down arrow # E0.6 [1] (⬇️)
+3030 FE0F ; Basic_Emoji ; wavy dash # E0.6 [1] (〰️)
+303D FE0F ; Basic_Emoji ; part alternation mark # E0.6 [1] (〽️)
+3297 FE0F ; Basic_Emoji ; Japanese “congratulations” button # E0.6 [1] (㊗️)
+3299 FE0F ; Basic_Emoji ; Japanese “secret” button # E0.6 [1] (㊙️)
+1F170 FE0F ; Basic_Emoji ; A button (blood type) # E0.6 [1] (🅰️)
+1F171 FE0F ; Basic_Emoji ; B button (blood type) # E0.6 [1] (🅱️)
+1F17E FE0F ; Basic_Emoji ; O button (blood type) # E0.6 [1] (🅾️)
+1F17F FE0F ; Basic_Emoji ; P button # E0.6 [1] (🅿️)
+1F202 FE0F ; Basic_Emoji ; Japanese “service charge” button # E0.6 [1] (🈂️)
+1F237 FE0F ; Basic_Emoji ; Japanese “monthly amount” button # E0.6 [1] (🈷️)
+1F321 FE0F ; Basic_Emoji ; thermometer # E0.7 [1] (🌡️)
+1F324 FE0F ; Basic_Emoji ; sun behind small cloud # E0.7 [1] (🌤️)
+1F325 FE0F ; Basic_Emoji ; sun behind large cloud # E0.7 [1] (🌥️)
+1F326 FE0F ; Basic_Emoji ; sun behind rain cloud # E0.7 [1] (🌦️)
+1F327 FE0F ; Basic_Emoji ; cloud with rain # E0.7 [1] (🌧️)
+1F328 FE0F ; Basic_Emoji ; cloud with snow # E0.7 [1] (🌨️)
+1F329 FE0F ; Basic_Emoji ; cloud with lightning # E0.7 [1] (🌩️)
+1F32A FE0F ; Basic_Emoji ; tornado # E0.7 [1] (🌪️)
+1F32B FE0F ; Basic_Emoji ; fog # E0.7 [1] (🌫️)
+1F32C FE0F ; Basic_Emoji ; wind face # E0.7 [1] (🌬️)
+1F336 FE0F ; Basic_Emoji ; hot pepper # E0.7 [1] (🌶️)
+1F37D FE0F ; Basic_Emoji ; fork and knife with plate # E0.7 [1] (🍽️)
+1F396 FE0F ; Basic_Emoji ; military medal # E0.7 [1] (🎖️)
+1F397 FE0F ; Basic_Emoji ; reminder ribbon # E0.7 [1] (🎗️)
+1F399 FE0F ; Basic_Emoji ; studio microphone # E0.7 [1] (🎙️)
+1F39A FE0F ; Basic_Emoji ; level slider # E0.7 [1] (🎚️)
+1F39B FE0F ; Basic_Emoji ; control knobs # E0.7 [1] (🎛️)
+1F39E FE0F ; Basic_Emoji ; film frames # E0.7 [1] (🎞️)
+1F39F FE0F ; Basic_Emoji ; admission tickets # E0.7 [1] (🎟️)
+1F3CB FE0F ; Basic_Emoji ; person lifting weights # E0.7 [1] (🏋️)
+1F3CC FE0F ; Basic_Emoji ; person golfing # E0.7 [1] (🏌️)
+1F3CD FE0F ; Basic_Emoji ; motorcycle # E0.7 [1] (🏍️)
+1F3CE FE0F ; Basic_Emoji ; racing car # E0.7 [1] (🏎️)
+1F3D4 FE0F ; Basic_Emoji ; snow-capped mountain # E0.7 [1] (🏔️)
+1F3D5 FE0F ; Basic_Emoji ; camping # E0.7 [1] (🏕️)
+1F3D6 FE0F ; Basic_Emoji ; beach with umbrella # E0.7 [1] (🏖️)
+1F3D7 FE0F ; Basic_Emoji ; building construction # E0.7 [1] (🏗️)
+1F3D8 FE0F ; Basic_Emoji ; houses # E0.7 [1] (🏘️)
+1F3D9 FE0F ; Basic_Emoji ; cityscape # E0.7 [1] (🏙️)
+1F3DA FE0F ; Basic_Emoji ; derelict house # E0.7 [1] (🏚️)
+1F3DB FE0F ; Basic_Emoji ; classical building # E0.7 [1] (🏛️)
+1F3DC FE0F ; Basic_Emoji ; desert # E0.7 [1] (🏜️)
+1F3DD FE0F ; Basic_Emoji ; desert island # E0.7 [1] (🏝️)
+1F3DE FE0F ; Basic_Emoji ; national park # E0.7 [1] (🏞️)
+1F3DF FE0F ; Basic_Emoji ; stadium # E0.7 [1] (🏟️)
+1F3F3 FE0F ; Basic_Emoji ; white flag # E0.7 [1] (🏳️)
+1F3F5 FE0F ; Basic_Emoji ; rosette # E0.7 [1] (🏵️)
+1F3F7 FE0F ; Basic_Emoji ; label # E0.7 [1] (🏷️)
+1F43F FE0F ; Basic_Emoji ; chipmunk # E0.7 [1] (🐿️)
+1F441 FE0F ; Basic_Emoji ; eye # E0.7 [1] (👁️)
+1F4FD FE0F ; Basic_Emoji ; film projector # E0.7 [1] (📽️)
+1F549 FE0F ; Basic_Emoji ; om # E0.7 [1] (🕉️)
+1F54A FE0F ; Basic_Emoji ; dove # E0.7 [1] (🕊️)
+1F56F FE0F ; Basic_Emoji ; candle # E0.7 [1] (🕯️)
+1F570 FE0F ; Basic_Emoji ; mantelpiece clock # E0.7 [1] (🕰️)
+1F573 FE0F ; Basic_Emoji ; hole # E0.7 [1] (🕳️)
+1F574 FE0F ; Basic_Emoji ; person in suit levitating # E0.7 [1] (🕴️)
+1F575 FE0F ; Basic_Emoji ; detective # E0.7 [1] (🕵️)
+1F576 FE0F ; Basic_Emoji ; sunglasses # E0.7 [1] (🕶️)
+1F577 FE0F ; Basic_Emoji ; spider # E0.7 [1] (🕷️)
+1F578 FE0F ; Basic_Emoji ; spider web # E0.7 [1] (🕸️)
+1F579 FE0F ; Basic_Emoji ; joystick # E0.7 [1] (🕹️)
+1F587 FE0F ; Basic_Emoji ; linked paperclips # E0.7 [1] (🖇️)
+1F58A FE0F ; Basic_Emoji ; pen # E0.7 [1] (🖊️)
+1F58B FE0F ; Basic_Emoji ; fountain pen # E0.7 [1] (🖋️)
+1F58C FE0F ; Basic_Emoji ; paintbrush # E0.7 [1] (🖌️)
+1F58D FE0F ; Basic_Emoji ; crayon # E0.7 [1] (🖍️)
+1F590 FE0F ; Basic_Emoji ; hand with fingers splayed # E0.7 [1] (🖐️)
+1F5A5 FE0F ; Basic_Emoji ; desktop computer # E0.7 [1] (🖥️)
+1F5A8 FE0F ; Basic_Emoji ; printer # E0.7 [1] (🖨️)
+1F5B1 FE0F ; Basic_Emoji ; computer mouse # E0.7 [1] (🖱️)
+1F5B2 FE0F ; Basic_Emoji ; trackball # E0.7 [1] (🖲️)
+1F5BC FE0F ; Basic_Emoji ; framed picture # E0.7 [1] (🖼️)
+1F5C2 FE0F ; Basic_Emoji ; card index dividers # E0.7 [1] (🗂️)
+1F5C3 FE0F ; Basic_Emoji ; card file box # E0.7 [1] (🗃️)
+1F5C4 FE0F ; Basic_Emoji ; file cabinet # E0.7 [1] (🗄️)
+1F5D1 FE0F ; Basic_Emoji ; wastebasket # E0.7 [1] (🗑️)
+1F5D2 FE0F ; Basic_Emoji ; spiral notepad # E0.7 [1] (🗒️)
+1F5D3 FE0F ; Basic_Emoji ; spiral calendar # E0.7 [1] (🗓️)
+1F5DC FE0F ; Basic_Emoji ; clamp # E0.7 [1] (🗜️)
+1F5DD FE0F ; Basic_Emoji ; old key # E0.7 [1] (🗝️)
+1F5DE FE0F ; Basic_Emoji ; rolled-up newspaper # E0.7 [1] (🗞️)
+1F5E1 FE0F ; Basic_Emoji ; dagger # E0.7 [1] (🗡️)
+1F5E3 FE0F ; Basic_Emoji ; speaking head # E0.7 [1] (🗣️)
+1F5E8 FE0F ; Basic_Emoji ; left speech bubble # E2.0 [1] (🗨️)
+1F5EF FE0F ; Basic_Emoji ; right anger bubble # E0.7 [1] (🗯️)
+1F5F3 FE0F ; Basic_Emoji ; ballot box with ballot # E0.7 [1] (🗳️)
+1F5FA FE0F ; Basic_Emoji ; world map # E0.7 [1] (🗺️)
+1F6CB FE0F ; Basic_Emoji ; couch and lamp # E0.7 [1] (🛋️)
+1F6CD FE0F ; Basic_Emoji ; shopping bags # E0.7 [1] (🛍️)
+1F6CE FE0F ; Basic_Emoji ; bellhop bell # E0.7 [1] (🛎️)
+1F6CF FE0F ; Basic_Emoji ; bed # E0.7 [1] (🛏️)
+1F6E0 FE0F ; Basic_Emoji ; hammer and wrench # E0.7 [1] (🛠️)
+1F6E1 FE0F ; Basic_Emoji ; shield # E0.7 [1] (🛡️)
+1F6E2 FE0F ; Basic_Emoji ; oil drum # E0.7 [1] (🛢️)
+1F6E3 FE0F ; Basic_Emoji ; motorway # E0.7 [1] (🛣️)
+1F6E4 FE0F ; Basic_Emoji ; railway track # E0.7 [1] (🛤️)
+1F6E5 FE0F ; Basic_Emoji ; motor boat # E0.7 [1] (🛥️)
+1F6E9 FE0F ; Basic_Emoji ; small airplane # E0.7 [1] (🛩️)
+1F6F0 FE0F ; Basic_Emoji ; satellite # E0.7 [1] (🛰️)
+1F6F3 FE0F ; Basic_Emoji ; passenger ship # E0.7 [1] (🛳️)
+
+# Total elements: 1366
+
+# ================================================
+
+# Emoji_Keycap_Sequence
+
+0023 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: \x{23} # E0.6 [1] (#️⃣)
+002A FE0F 20E3; Emoji_Keycap_Sequence ; keycap: * # E2.0 [1] (*️⃣)
+0030 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 0 # E0.6 [1] (0️⃣)
+0031 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 1 # E0.6 [1] (1️⃣)
+0032 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 2 # E0.6 [1] (2️⃣)
+0033 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 3 # E0.6 [1] (3️⃣)
+0034 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 4 # E0.6 [1] (4️⃣)
+0035 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 5 # E0.6 [1] (5️⃣)
+0036 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 6 # E0.6 [1] (6️⃣)
+0037 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 7 # E0.6 [1] (7️⃣)
+0038 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 8 # E0.6 [1] (8️⃣)
+0039 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 9 # E0.6 [1] (9️⃣)
+
+# Total elements: 12
+
+# ================================================
+
+# RGI_Emoji_Flag_Sequence: This list does not include deprecated or macroregion flags, except for UN and EU.
+# See Annex B of TR51 for more information.
+
+1F1E6 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Ascension Island # E2.0 [1] (🇦🇨)
+1F1E6 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Andorra # E2.0 [1] (🇦🇩)
+1F1E6 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: United Arab Emirates # E2.0 [1] (🇦🇪)
+1F1E6 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Afghanistan # E2.0 [1] (🇦🇫)
+1F1E6 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Antigua & Barbuda # E2.0 [1] (🇦🇬)
+1F1E6 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Anguilla # E2.0 [1] (🇦🇮)
+1F1E6 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Albania # E2.0 [1] (🇦🇱)
+1F1E6 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Armenia # E2.0 [1] (🇦🇲)
+1F1E6 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Angola # E2.0 [1] (🇦🇴)
+1F1E6 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Antarctica # E2.0 [1] (🇦🇶)
+1F1E6 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Argentina # E2.0 [1] (🇦🇷)
+1F1E6 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: American Samoa # E2.0 [1] (🇦🇸)
+1F1E6 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Austria # E2.0 [1] (🇦🇹)
+1F1E6 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Australia # E2.0 [1] (🇦🇺)
+1F1E6 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Aruba # E2.0 [1] (🇦🇼)
+1F1E6 1F1FD ; RGI_Emoji_Flag_Sequence ; flag: Åland Islands # E2.0 [1] (🇦🇽)
+1F1E6 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Azerbaijan # E2.0 [1] (🇦🇿)
+1F1E7 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Bosnia & Herzegovina # E2.0 [1] (🇧🇦)
+1F1E7 1F1E7 ; RGI_Emoji_Flag_Sequence ; flag: Barbados # E2.0 [1] (🇧🇧)
+1F1E7 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Bangladesh # E2.0 [1] (🇧🇩)
+1F1E7 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Belgium # E2.0 [1] (🇧🇪)
+1F1E7 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Burkina Faso # E2.0 [1] (🇧🇫)
+1F1E7 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Bulgaria # E2.0 [1] (🇧🇬)
+1F1E7 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Bahrain # E2.0 [1] (🇧🇭)
+1F1E7 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Burundi # E2.0 [1] (🇧🇮)
+1F1E7 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Benin # E2.0 [1] (🇧🇯)
+1F1E7 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: St. Barthélemy # E2.0 [1] (🇧🇱)
+1F1E7 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Bermuda # E2.0 [1] (🇧🇲)
+1F1E7 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Brunei # E2.0 [1] (🇧🇳)
+1F1E7 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Bolivia # E2.0 [1] (🇧🇴)
+1F1E7 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Caribbean Netherlands # E2.0 [1] (🇧🇶)
+1F1E7 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Brazil # E2.0 [1] (🇧🇷)
+1F1E7 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Bahamas # E2.0 [1] (🇧🇸)
+1F1E7 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Bhutan # E2.0 [1] (🇧🇹)
+1F1E7 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Bouvet Island # E2.0 [1] (🇧🇻)
+1F1E7 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Botswana # E2.0 [1] (🇧🇼)
+1F1E7 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Belarus # E2.0 [1] (🇧🇾)
+1F1E7 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Belize # E2.0 [1] (🇧🇿)
+1F1E8 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Canada # E2.0 [1] (🇨🇦)
+1F1E8 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Cocos (Keeling) Islands # E2.0 [1] (🇨🇨)
+1F1E8 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Congo - Kinshasa # E2.0 [1] (🇨🇩)
+1F1E8 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Central African Republic # E2.0 [1] (🇨🇫)
+1F1E8 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Congo - Brazzaville # E2.0 [1] (🇨🇬)
+1F1E8 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Switzerland # E2.0 [1] (🇨🇭)
+1F1E8 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Côte d’Ivoire # E2.0 [1] (🇨🇮)
+1F1E8 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Cook Islands # E2.0 [1] (🇨🇰)
+1F1E8 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Chile # E2.0 [1] (🇨🇱)
+1F1E8 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Cameroon # E2.0 [1] (🇨🇲)
+1F1E8 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: China # E0.6 [1] (🇨🇳)
+1F1E8 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Colombia # E2.0 [1] (🇨🇴)
+1F1E8 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Clipperton Island # E2.0 [1] (🇨🇵)
+1F1E8 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Costa Rica # E2.0 [1] (🇨🇷)
+1F1E8 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Cuba # E2.0 [1] (🇨🇺)
+1F1E8 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Cape Verde # E2.0 [1] (🇨🇻)
+1F1E8 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Curaçao # E2.0 [1] (🇨🇼)
+1F1E8 1F1FD ; RGI_Emoji_Flag_Sequence ; flag: Christmas Island # E2.0 [1] (🇨🇽)
+1F1E8 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Cyprus # E2.0 [1] (🇨🇾)
+1F1E8 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Czechia # E2.0 [1] (🇨🇿)
+1F1E9 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Germany # E0.6 [1] (🇩🇪)
+1F1E9 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Diego Garcia # E2.0 [1] (🇩🇬)
+1F1E9 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Djibouti # E2.0 [1] (🇩🇯)
+1F1E9 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Denmark # E2.0 [1] (🇩🇰)
+1F1E9 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Dominica # E2.0 [1] (🇩🇲)
+1F1E9 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Dominican Republic # E2.0 [1] (🇩🇴)
+1F1E9 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Algeria # E2.0 [1] (🇩🇿)
+1F1EA 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Ceuta & Melilla # E2.0 [1] (🇪🇦)
+1F1EA 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Ecuador # E2.0 [1] (🇪🇨)
+1F1EA 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Estonia # E2.0 [1] (🇪🇪)
+1F1EA 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Egypt # E2.0 [1] (🇪🇬)
+1F1EA 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Western Sahara # E2.0 [1] (🇪🇭)
+1F1EA 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Eritrea # E2.0 [1] (🇪🇷)
+1F1EA 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Spain # E0.6 [1] (🇪🇸)
+1F1EA 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Ethiopia # E2.0 [1] (🇪🇹)
+1F1EA 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: European Union # E2.0 [1] (🇪🇺)
+1F1EB 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Finland # E2.0 [1] (🇫🇮)
+1F1EB 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Fiji # E2.0 [1] (🇫🇯)
+1F1EB 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Falkland Islands # E2.0 [1] (🇫🇰)
+1F1EB 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Micronesia # E2.0 [1] (🇫🇲)
+1F1EB 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Faroe Islands # E2.0 [1] (🇫🇴)
+1F1EB 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: France # E0.6 [1] (🇫🇷)
+1F1EC 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Gabon # E2.0 [1] (🇬🇦)
+1F1EC 1F1E7 ; RGI_Emoji_Flag_Sequence ; flag: United Kingdom # E0.6 [1] (🇬🇧)
+1F1EC 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Grenada # E2.0 [1] (🇬🇩)
+1F1EC 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Georgia # E2.0 [1] (🇬🇪)
+1F1EC 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: French Guiana # E2.0 [1] (🇬🇫)
+1F1EC 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Guernsey # E2.0 [1] (🇬🇬)
+1F1EC 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Ghana # E2.0 [1] (🇬🇭)
+1F1EC 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Gibraltar # E2.0 [1] (🇬🇮)
+1F1EC 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Greenland # E2.0 [1] (🇬🇱)
+1F1EC 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Gambia # E2.0 [1] (🇬🇲)
+1F1EC 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Guinea # E2.0 [1] (🇬🇳)
+1F1EC 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Guadeloupe # E2.0 [1] (🇬🇵)
+1F1EC 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Equatorial Guinea # E2.0 [1] (🇬🇶)
+1F1EC 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Greece # E2.0 [1] (🇬🇷)
+1F1EC 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: South Georgia & South Sandwich Islands # E2.0 [1] (🇬🇸)
+1F1EC 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Guatemala # E2.0 [1] (🇬🇹)
+1F1EC 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Guam # E2.0 [1] (🇬🇺)
+1F1EC 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Guinea-Bissau # E2.0 [1] (🇬🇼)
+1F1EC 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Guyana # E2.0 [1] (🇬🇾)
+1F1ED 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Hong Kong SAR China # E2.0 [1] (🇭🇰)
+1F1ED 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Heard & McDonald Islands # E2.0 [1] (🇭🇲)
+1F1ED 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Honduras # E2.0 [1] (🇭🇳)
+1F1ED 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Croatia # E2.0 [1] (🇭🇷)
+1F1ED 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Haiti # E2.0 [1] (🇭🇹)
+1F1ED 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Hungary # E2.0 [1] (🇭🇺)
+1F1EE 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Canary Islands # E2.0 [1] (🇮🇨)
+1F1EE 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Indonesia # E2.0 [1] (🇮🇩)
+1F1EE 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Ireland # E2.0 [1] (🇮🇪)
+1F1EE 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Israel # E2.0 [1] (🇮🇱)
+1F1EE 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Isle of Man # E2.0 [1] (🇮🇲)
+1F1EE 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: India # E2.0 [1] (🇮🇳)
+1F1EE 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: British Indian Ocean Territory # E2.0 [1] (🇮🇴)
+1F1EE 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Iraq # E2.0 [1] (🇮🇶)
+1F1EE 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Iran # E2.0 [1] (🇮🇷)
+1F1EE 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Iceland # E2.0 [1] (🇮🇸)
+1F1EE 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Italy # E0.6 [1] (🇮🇹)
+1F1EF 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Jersey # E2.0 [1] (🇯🇪)
+1F1EF 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Jamaica # E2.0 [1] (🇯🇲)
+1F1EF 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Jordan # E2.0 [1] (🇯🇴)
+1F1EF 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Japan # E0.6 [1] (🇯🇵)
+1F1F0 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Kenya # E2.0 [1] (🇰🇪)
+1F1F0 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Kyrgyzstan # E2.0 [1] (🇰🇬)
+1F1F0 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Cambodia # E2.0 [1] (🇰🇭)
+1F1F0 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Kiribati # E2.0 [1] (🇰🇮)
+1F1F0 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Comoros # E2.0 [1] (🇰🇲)
+1F1F0 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: St. Kitts & Nevis # E2.0 [1] (🇰🇳)
+1F1F0 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: North Korea # E2.0 [1] (🇰🇵)
+1F1F0 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: South Korea # E0.6 [1] (🇰🇷)
+1F1F0 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Kuwait # E2.0 [1] (🇰🇼)
+1F1F0 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Cayman Islands # E2.0 [1] (🇰🇾)
+1F1F0 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Kazakhstan # E2.0 [1] (🇰🇿)
+1F1F1 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Laos # E2.0 [1] (🇱🇦)
+1F1F1 1F1E7 ; RGI_Emoji_Flag_Sequence ; flag: Lebanon # E2.0 [1] (🇱🇧)
+1F1F1 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: St. Lucia # E2.0 [1] (🇱🇨)
+1F1F1 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Liechtenstein # E2.0 [1] (🇱🇮)
+1F1F1 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Sri Lanka # E2.0 [1] (🇱🇰)
+1F1F1 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Liberia # E2.0 [1] (🇱🇷)
+1F1F1 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Lesotho # E2.0 [1] (🇱🇸)
+1F1F1 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Lithuania # E2.0 [1] (🇱🇹)
+1F1F1 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Luxembourg # E2.0 [1] (🇱🇺)
+1F1F1 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Latvia # E2.0 [1] (🇱🇻)
+1F1F1 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Libya # E2.0 [1] (🇱🇾)
+1F1F2 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Morocco # E2.0 [1] (🇲🇦)
+1F1F2 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Monaco # E2.0 [1] (🇲🇨)
+1F1F2 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Moldova # E2.0 [1] (🇲🇩)
+1F1F2 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Montenegro # E2.0 [1] (🇲🇪)
+1F1F2 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: St. Martin # E2.0 [1] (🇲🇫)
+1F1F2 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Madagascar # E2.0 [1] (🇲🇬)
+1F1F2 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Marshall Islands # E2.0 [1] (🇲🇭)
+1F1F2 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: North Macedonia # E2.0 [1] (🇲🇰)
+1F1F2 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Mali # E2.0 [1] (🇲🇱)
+1F1F2 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Myanmar (Burma) # E2.0 [1] (🇲🇲)
+1F1F2 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Mongolia # E2.0 [1] (🇲🇳)
+1F1F2 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Macao SAR China # E2.0 [1] (🇲🇴)
+1F1F2 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Northern Mariana Islands # E2.0 [1] (🇲🇵)
+1F1F2 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Martinique # E2.0 [1] (🇲🇶)
+1F1F2 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Mauritania # E2.0 [1] (🇲🇷)
+1F1F2 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Montserrat # E2.0 [1] (🇲🇸)
+1F1F2 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Malta # E2.0 [1] (🇲🇹)
+1F1F2 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Mauritius # E2.0 [1] (🇲🇺)
+1F1F2 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Maldives # E2.0 [1] (🇲🇻)
+1F1F2 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Malawi # E2.0 [1] (🇲🇼)
+1F1F2 1F1FD ; RGI_Emoji_Flag_Sequence ; flag: Mexico # E2.0 [1] (🇲🇽)
+1F1F2 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Malaysia # E2.0 [1] (🇲🇾)
+1F1F2 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Mozambique # E2.0 [1] (🇲🇿)
+1F1F3 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Namibia # E2.0 [1] (🇳🇦)
+1F1F3 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: New Caledonia # E2.0 [1] (🇳🇨)
+1F1F3 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Niger # E2.0 [1] (🇳🇪)
+1F1F3 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Norfolk Island # E2.0 [1] (🇳🇫)
+1F1F3 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Nigeria # E2.0 [1] (🇳🇬)
+1F1F3 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Nicaragua # E2.0 [1] (🇳🇮)
+1F1F3 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Netherlands # E2.0 [1] (🇳🇱)
+1F1F3 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Norway # E2.0 [1] (🇳🇴)
+1F1F3 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Nepal # E2.0 [1] (🇳🇵)
+1F1F3 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Nauru # E2.0 [1] (🇳🇷)
+1F1F3 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Niue # E2.0 [1] (🇳🇺)
+1F1F3 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: New Zealand # E2.0 [1] (🇳🇿)
+1F1F4 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Oman # E2.0 [1] (🇴🇲)
+1F1F5 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Panama # E2.0 [1] (🇵🇦)
+1F1F5 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Peru # E2.0 [1] (🇵🇪)
+1F1F5 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: French Polynesia # E2.0 [1] (🇵🇫)
+1F1F5 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Papua New Guinea # E2.0 [1] (🇵🇬)
+1F1F5 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Philippines # E2.0 [1] (🇵🇭)
+1F1F5 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Pakistan # E2.0 [1] (🇵🇰)
+1F1F5 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Poland # E2.0 [1] (🇵🇱)
+1F1F5 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: St. Pierre & Miquelon # E2.0 [1] (🇵🇲)
+1F1F5 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Pitcairn Islands # E2.0 [1] (🇵🇳)
+1F1F5 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Puerto Rico # E2.0 [1] (🇵🇷)
+1F1F5 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Palestinian Territories # E2.0 [1] (🇵🇸)
+1F1F5 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Portugal # E2.0 [1] (🇵🇹)
+1F1F5 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Palau # E2.0 [1] (🇵🇼)
+1F1F5 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Paraguay # E2.0 [1] (🇵🇾)
+1F1F6 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Qatar # E2.0 [1] (🇶🇦)
+1F1F7 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Réunion # E2.0 [1] (🇷🇪)
+1F1F7 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Romania # E2.0 [1] (🇷🇴)
+1F1F7 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Serbia # E2.0 [1] (🇷🇸)
+1F1F7 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Russia # E0.6 [1] (🇷🇺)
+1F1F7 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Rwanda # E2.0 [1] (🇷🇼)
+1F1F8 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Saudi Arabia # E2.0 [1] (🇸🇦)
+1F1F8 1F1E7 ; RGI_Emoji_Flag_Sequence ; flag: Solomon Islands # E2.0 [1] (🇸🇧)
+1F1F8 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Seychelles # E2.0 [1] (🇸🇨)
+1F1F8 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Sudan # E2.0 [1] (🇸🇩)
+1F1F8 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Sweden # E2.0 [1] (🇸🇪)
+1F1F8 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Singapore # E2.0 [1] (🇸🇬)
+1F1F8 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: St. Helena # E2.0 [1] (🇸🇭)
+1F1F8 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Slovenia # E2.0 [1] (🇸🇮)
+1F1F8 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Svalbard & Jan Mayen # E2.0 [1] (🇸🇯)
+1F1F8 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Slovakia # E2.0 [1] (🇸🇰)
+1F1F8 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Sierra Leone # E2.0 [1] (🇸🇱)
+1F1F8 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: San Marino # E2.0 [1] (🇸🇲)
+1F1F8 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Senegal # E2.0 [1] (🇸🇳)
+1F1F8 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Somalia # E2.0 [1] (🇸🇴)
+1F1F8 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Suriname # E2.0 [1] (🇸🇷)
+1F1F8 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: South Sudan # E2.0 [1] (🇸🇸)
+1F1F8 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: São Tomé & Príncipe # E2.0 [1] (🇸🇹)
+1F1F8 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: El Salvador # E2.0 [1] (🇸🇻)
+1F1F8 1F1FD ; RGI_Emoji_Flag_Sequence ; flag: Sint Maarten # E2.0 [1] (🇸🇽)
+1F1F8 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Syria # E2.0 [1] (🇸🇾)
+1F1F8 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Eswatini # E2.0 [1] (🇸🇿)
+1F1F9 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Tristan da Cunha # E2.0 [1] (🇹🇦)
+1F1F9 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Turks & Caicos Islands # E2.0 [1] (🇹🇨)
+1F1F9 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Chad # E2.0 [1] (🇹🇩)
+1F1F9 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: French Southern Territories # E2.0 [1] (🇹🇫)
+1F1F9 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Togo # E2.0 [1] (🇹🇬)
+1F1F9 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Thailand # E2.0 [1] (🇹🇭)
+1F1F9 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Tajikistan # E2.0 [1] (🇹🇯)
+1F1F9 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Tokelau # E2.0 [1] (🇹🇰)
+1F1F9 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Timor-Leste # E2.0 [1] (🇹🇱)
+1F1F9 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Turkmenistan # E2.0 [1] (🇹🇲)
+1F1F9 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Tunisia # E2.0 [1] (🇹🇳)
+1F1F9 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Tonga # E2.0 [1] (🇹🇴)
+1F1F9 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Turkey # E2.0 [1] (🇹🇷)
+1F1F9 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Trinidad & Tobago # E2.0 [1] (🇹🇹)
+1F1F9 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Tuvalu # E2.0 [1] (🇹🇻)
+1F1F9 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Taiwan # E2.0 [1] (🇹🇼)
+1F1F9 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Tanzania # E2.0 [1] (🇹🇿)
+1F1FA 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Ukraine # E2.0 [1] (🇺🇦)
+1F1FA 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Uganda # E2.0 [1] (🇺🇬)
+1F1FA 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: U.S. Outlying Islands # E2.0 [1] (🇺🇲)
+1F1FA 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: United Nations # E4.0 [1] (🇺🇳)
+1F1FA 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: United States # E0.6 [1] (🇺🇸)
+1F1FA 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Uruguay # E2.0 [1] (🇺🇾)
+1F1FA 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Uzbekistan # E2.0 [1] (🇺🇿)
+1F1FB 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Vatican City # E2.0 [1] (🇻🇦)
+1F1FB 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: St. Vincent & Grenadines # E2.0 [1] (🇻🇨)
+1F1FB 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Venezuela # E2.0 [1] (🇻🇪)
+1F1FB 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: British Virgin Islands # E2.0 [1] (🇻🇬)
+1F1FB 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: U.S. Virgin Islands # E2.0 [1] (🇻🇮)
+1F1FB 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Vietnam # E2.0 [1] (🇻🇳)
+1F1FB 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Vanuatu # E2.0 [1] (🇻🇺)
+1F1FC 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Wallis & Futuna # E2.0 [1] (🇼🇫)
+1F1FC 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Samoa # E2.0 [1] (🇼🇸)
+1F1FD 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Kosovo # E2.0 [1] (🇽🇰)
+1F1FE 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Yemen # E2.0 [1] (🇾🇪)
+1F1FE 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Mayotte # E2.0 [1] (🇾🇹)
+1F1FF 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: South Africa # E2.0 [1] (🇿🇦)
+1F1FF 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Zambia # E2.0 [1] (🇿🇲)
+1F1FF 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Zimbabwe # E2.0 [1] (🇿🇼)
+
+# Total elements: 258
+
+# ================================================
+
+# RGI_Emoji_Tag_Sequence: See Annex C of TR51 for more information.
+
+1F3F4 E0067 E0062 E0065 E006E E0067 E007F; RGI_Emoji_Tag_Sequence; flag: England # E5.0 [1] (🏴󠁧󠁢󠁥󠁮󠁧󠁿)
+1F3F4 E0067 E0062 E0073 E0063 E0074 E007F; RGI_Emoji_Tag_Sequence; flag: Scotland # E5.0 [1] (🏴󠁧󠁢󠁳󠁣󠁴󠁿)
+1F3F4 E0067 E0062 E0077 E006C E0073 E007F; RGI_Emoji_Tag_Sequence; flag: Wales # E5.0 [1] (🏴󠁧󠁢󠁷󠁬󠁳󠁿)
+
+# Total elements: 3
+
+# ================================================
+
+# RGI_Emoji_Modifier_Sequence
+
+261D 1F3FB ; RGI_Emoji_Modifier_Sequence ; index pointing up: light skin tone # E1.0 [1] (☝🏻)
+261D 1F3FC ; RGI_Emoji_Modifier_Sequence ; index pointing up: medium-light skin tone # E1.0 [1] (☝🏼)
+261D 1F3FD ; RGI_Emoji_Modifier_Sequence ; index pointing up: medium skin tone # E1.0 [1] (☝🏽)
+261D 1F3FE ; RGI_Emoji_Modifier_Sequence ; index pointing up: medium-dark skin tone # E1.0 [1] (☝🏾)
+261D 1F3FF ; RGI_Emoji_Modifier_Sequence ; index pointing up: dark skin tone # E1.0 [1] (☝🏿)
+26F9 1F3FB ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: light skin tone # E2.0 [1] (⛹🏻)
+26F9 1F3FC ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: medium-light skin tone # E2.0 [1] (⛹🏼)
+26F9 1F3FD ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: medium skin tone # E2.0 [1] (⛹🏽)
+26F9 1F3FE ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: medium-dark skin tone # E2.0 [1] (⛹🏾)
+26F9 1F3FF ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: dark skin tone # E2.0 [1] (⛹🏿)
+270A 1F3FB ; RGI_Emoji_Modifier_Sequence ; raised fist: light skin tone # E1.0 [1] (✊🏻)
+270A 1F3FC ; RGI_Emoji_Modifier_Sequence ; raised fist: medium-light skin tone # E1.0 [1] (✊🏼)
+270A 1F3FD ; RGI_Emoji_Modifier_Sequence ; raised fist: medium skin tone # E1.0 [1] (✊🏽)
+270A 1F3FE ; RGI_Emoji_Modifier_Sequence ; raised fist: medium-dark skin tone # E1.0 [1] (✊🏾)
+270A 1F3FF ; RGI_Emoji_Modifier_Sequence ; raised fist: dark skin tone # E1.0 [1] (✊🏿)
+270B 1F3FB ; RGI_Emoji_Modifier_Sequence ; raised hand: light skin tone # E1.0 [1] (✋🏻)
+270B 1F3FC ; RGI_Emoji_Modifier_Sequence ; raised hand: medium-light skin tone # E1.0 [1] (✋🏼)
+270B 1F3FD ; RGI_Emoji_Modifier_Sequence ; raised hand: medium skin tone # E1.0 [1] (✋🏽)
+270B 1F3FE ; RGI_Emoji_Modifier_Sequence ; raised hand: medium-dark skin tone # E1.0 [1] (✋🏾)
+270B 1F3FF ; RGI_Emoji_Modifier_Sequence ; raised hand: dark skin tone # E1.0 [1] (✋🏿)
+270C 1F3FB ; RGI_Emoji_Modifier_Sequence ; victory hand: light skin tone # E1.0 [1] (✌🏻)
+270C 1F3FC ; RGI_Emoji_Modifier_Sequence ; victory hand: medium-light skin tone # E1.0 [1] (✌🏼)
+270C 1F3FD ; RGI_Emoji_Modifier_Sequence ; victory hand: medium skin tone # E1.0 [1] (✌🏽)
+270C 1F3FE ; RGI_Emoji_Modifier_Sequence ; victory hand: medium-dark skin tone # E1.0 [1] (✌🏾)
+270C 1F3FF ; RGI_Emoji_Modifier_Sequence ; victory hand: dark skin tone # E1.0 [1] (✌🏿)
+270D 1F3FB ; RGI_Emoji_Modifier_Sequence ; writing hand: light skin tone # E1.0 [1] (✍🏻)
+270D 1F3FC ; RGI_Emoji_Modifier_Sequence ; writing hand: medium-light skin tone # E1.0 [1] (✍🏼)
+270D 1F3FD ; RGI_Emoji_Modifier_Sequence ; writing hand: medium skin tone # E1.0 [1] (✍🏽)
+270D 1F3FE ; RGI_Emoji_Modifier_Sequence ; writing hand: medium-dark skin tone # E1.0 [1] (✍🏾)
+270D 1F3FF ; RGI_Emoji_Modifier_Sequence ; writing hand: dark skin tone # E1.0 [1] (✍🏿)
+1F385 1F3FB ; RGI_Emoji_Modifier_Sequence ; Santa Claus: light skin tone # E1.0 [1] (🎅🏻)
+1F385 1F3FC ; RGI_Emoji_Modifier_Sequence ; Santa Claus: medium-light skin tone # E1.0 [1] (🎅🏼)
+1F385 1F3FD ; RGI_Emoji_Modifier_Sequence ; Santa Claus: medium skin tone # E1.0 [1] (🎅🏽)
+1F385 1F3FE ; RGI_Emoji_Modifier_Sequence ; Santa Claus: medium-dark skin tone # E1.0 [1] (🎅🏾)
+1F385 1F3FF ; RGI_Emoji_Modifier_Sequence ; Santa Claus: dark skin tone # E1.0 [1] (🎅🏿)
+1F3C2 1F3FB ; RGI_Emoji_Modifier_Sequence ; snowboarder: light skin tone # E1.0 [1] (🏂🏻)
+1F3C2 1F3FC ; RGI_Emoji_Modifier_Sequence ; snowboarder: medium-light skin tone # E1.0 [1] (🏂🏼)
+1F3C2 1F3FD ; RGI_Emoji_Modifier_Sequence ; snowboarder: medium skin tone # E1.0 [1] (🏂🏽)
+1F3C2 1F3FE ; RGI_Emoji_Modifier_Sequence ; snowboarder: medium-dark skin tone # E1.0 [1] (🏂🏾)
+1F3C2 1F3FF ; RGI_Emoji_Modifier_Sequence ; snowboarder: dark skin tone # E1.0 [1] (🏂🏿)
+1F3C3 1F3FB ; RGI_Emoji_Modifier_Sequence ; person running: light skin tone # E1.0 [1] (🏃🏻)
+1F3C3 1F3FC ; RGI_Emoji_Modifier_Sequence ; person running: medium-light skin tone # E1.0 [1] (🏃🏼)
+1F3C3 1F3FD ; RGI_Emoji_Modifier_Sequence ; person running: medium skin tone # E1.0 [1] (🏃🏽)
+1F3C3 1F3FE ; RGI_Emoji_Modifier_Sequence ; person running: medium-dark skin tone # E1.0 [1] (🏃🏾)
+1F3C3 1F3FF ; RGI_Emoji_Modifier_Sequence ; person running: dark skin tone # E1.0 [1] (🏃🏿)
+1F3C4 1F3FB ; RGI_Emoji_Modifier_Sequence ; person surfing: light skin tone # E1.0 [1] (🏄🏻)
+1F3C4 1F3FC ; RGI_Emoji_Modifier_Sequence ; person surfing: medium-light skin tone # E1.0 [1] (🏄🏼)
+1F3C4 1F3FD ; RGI_Emoji_Modifier_Sequence ; person surfing: medium skin tone # E1.0 [1] (🏄🏽)
+1F3C4 1F3FE ; RGI_Emoji_Modifier_Sequence ; person surfing: medium-dark skin tone # E1.0 [1] (🏄🏾)
+1F3C4 1F3FF ; RGI_Emoji_Modifier_Sequence ; person surfing: dark skin tone # E1.0 [1] (🏄🏿)
+1F3C7 1F3FB ; RGI_Emoji_Modifier_Sequence ; horse racing: light skin tone # E1.0 [1] (🏇🏻)
+1F3C7 1F3FC ; RGI_Emoji_Modifier_Sequence ; horse racing: medium-light skin tone # E1.0 [1] (🏇🏼)
+1F3C7 1F3FD ; RGI_Emoji_Modifier_Sequence ; horse racing: medium skin tone # E1.0 [1] (🏇🏽)
+1F3C7 1F3FE ; RGI_Emoji_Modifier_Sequence ; horse racing: medium-dark skin tone # E1.0 [1] (🏇🏾)
+1F3C7 1F3FF ; RGI_Emoji_Modifier_Sequence ; horse racing: dark skin tone # E1.0 [1] (🏇🏿)
+1F3CA 1F3FB ; RGI_Emoji_Modifier_Sequence ; person swimming: light skin tone # E1.0 [1] (🏊🏻)
+1F3CA 1F3FC ; RGI_Emoji_Modifier_Sequence ; person swimming: medium-light skin tone # E1.0 [1] (🏊🏼)
+1F3CA 1F3FD ; RGI_Emoji_Modifier_Sequence ; person swimming: medium skin tone # E1.0 [1] (🏊🏽)
+1F3CA 1F3FE ; RGI_Emoji_Modifier_Sequence ; person swimming: medium-dark skin tone # E1.0 [1] (🏊🏾)
+1F3CA 1F3FF ; RGI_Emoji_Modifier_Sequence ; person swimming: dark skin tone # E1.0 [1] (🏊🏿)
+1F3CB 1F3FB ; RGI_Emoji_Modifier_Sequence ; person lifting weights: light skin tone # E2.0 [1] (🏋🏻)
+1F3CB 1F3FC ; RGI_Emoji_Modifier_Sequence ; person lifting weights: medium-light skin tone # E2.0 [1] (🏋🏼)
+1F3CB 1F3FD ; RGI_Emoji_Modifier_Sequence ; person lifting weights: medium skin tone # E2.0 [1] (🏋🏽)
+1F3CB 1F3FE ; RGI_Emoji_Modifier_Sequence ; person lifting weights: medium-dark skin tone # E2.0 [1] (🏋🏾)
+1F3CB 1F3FF ; RGI_Emoji_Modifier_Sequence ; person lifting weights: dark skin tone # E2.0 [1] (🏋🏿)
+1F3CC 1F3FB ; RGI_Emoji_Modifier_Sequence ; person golfing: light skin tone # E4.0 [1] (🏌🏻)
+1F3CC 1F3FC ; RGI_Emoji_Modifier_Sequence ; person golfing: medium-light skin tone # E4.0 [1] (🏌🏼)
+1F3CC 1F3FD ; RGI_Emoji_Modifier_Sequence ; person golfing: medium skin tone # E4.0 [1] (🏌🏽)
+1F3CC 1F3FE ; RGI_Emoji_Modifier_Sequence ; person golfing: medium-dark skin tone # E4.0 [1] (🏌🏾)
+1F3CC 1F3FF ; RGI_Emoji_Modifier_Sequence ; person golfing: dark skin tone # E4.0 [1] (🏌🏿)
+1F442 1F3FB ; RGI_Emoji_Modifier_Sequence ; ear: light skin tone # E1.0 [1] (👂🏻)
+1F442 1F3FC ; RGI_Emoji_Modifier_Sequence ; ear: medium-light skin tone # E1.0 [1] (👂🏼)
+1F442 1F3FD ; RGI_Emoji_Modifier_Sequence ; ear: medium skin tone # E1.0 [1] (👂🏽)
+1F442 1F3FE ; RGI_Emoji_Modifier_Sequence ; ear: medium-dark skin tone # E1.0 [1] (👂🏾)
+1F442 1F3FF ; RGI_Emoji_Modifier_Sequence ; ear: dark skin tone # E1.0 [1] (👂🏿)
+1F443 1F3FB ; RGI_Emoji_Modifier_Sequence ; nose: light skin tone # E1.0 [1] (👃🏻)
+1F443 1F3FC ; RGI_Emoji_Modifier_Sequence ; nose: medium-light skin tone # E1.0 [1] (👃🏼)
+1F443 1F3FD ; RGI_Emoji_Modifier_Sequence ; nose: medium skin tone # E1.0 [1] (👃🏽)
+1F443 1F3FE ; RGI_Emoji_Modifier_Sequence ; nose: medium-dark skin tone # E1.0 [1] (👃🏾)
+1F443 1F3FF ; RGI_Emoji_Modifier_Sequence ; nose: dark skin tone # E1.0 [1] (👃🏿)
+1F446 1F3FB ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: light skin tone # E1.0 [1] (👆🏻)
+1F446 1F3FC ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: medium-light skin tone # E1.0 [1] (👆🏼)
+1F446 1F3FD ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: medium skin tone # E1.0 [1] (👆🏽)
+1F446 1F3FE ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: medium-dark skin tone # E1.0 [1] (👆🏾)
+1F446 1F3FF ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: dark skin tone # E1.0 [1] (👆🏿)
+1F447 1F3FB ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: light skin tone # E1.0 [1] (👇🏻)
+1F447 1F3FC ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: medium-light skin tone # E1.0 [1] (👇🏼)
+1F447 1F3FD ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: medium skin tone # E1.0 [1] (👇🏽)
+1F447 1F3FE ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: medium-dark skin tone # E1.0 [1] (👇🏾)
+1F447 1F3FF ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: dark skin tone # E1.0 [1] (👇🏿)
+1F448 1F3FB ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: light skin tone # E1.0 [1] (👈🏻)
+1F448 1F3FC ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: medium-light skin tone # E1.0 [1] (👈🏼)
+1F448 1F3FD ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: medium skin tone # E1.0 [1] (👈🏽)
+1F448 1F3FE ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: medium-dark skin tone # E1.0 [1] (👈🏾)
+1F448 1F3FF ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: dark skin tone # E1.0 [1] (👈🏿)
+1F449 1F3FB ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: light skin tone # E1.0 [1] (👉🏻)
+1F449 1F3FC ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: medium-light skin tone # E1.0 [1] (👉🏼)
+1F449 1F3FD ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: medium skin tone # E1.0 [1] (👉🏽)
+1F449 1F3FE ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: medium-dark skin tone # E1.0 [1] (👉🏾)
+1F449 1F3FF ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: dark skin tone # E1.0 [1] (👉🏿)
+1F44A 1F3FB ; RGI_Emoji_Modifier_Sequence ; oncoming fist: light skin tone # E1.0 [1] (👊🏻)
+1F44A 1F3FC ; RGI_Emoji_Modifier_Sequence ; oncoming fist: medium-light skin tone # E1.0 [1] (👊🏼)
+1F44A 1F3FD ; RGI_Emoji_Modifier_Sequence ; oncoming fist: medium skin tone # E1.0 [1] (👊🏽)
+1F44A 1F3FE ; RGI_Emoji_Modifier_Sequence ; oncoming fist: medium-dark skin tone # E1.0 [1] (👊🏾)
+1F44A 1F3FF ; RGI_Emoji_Modifier_Sequence ; oncoming fist: dark skin tone # E1.0 [1] (👊🏿)
+1F44B 1F3FB ; RGI_Emoji_Modifier_Sequence ; waving hand: light skin tone # E1.0 [1] (👋🏻)
+1F44B 1F3FC ; RGI_Emoji_Modifier_Sequence ; waving hand: medium-light skin tone # E1.0 [1] (👋🏼)
+1F44B 1F3FD ; RGI_Emoji_Modifier_Sequence ; waving hand: medium skin tone # E1.0 [1] (👋🏽)
+1F44B 1F3FE ; RGI_Emoji_Modifier_Sequence ; waving hand: medium-dark skin tone # E1.0 [1] (👋🏾)
+1F44B 1F3FF ; RGI_Emoji_Modifier_Sequence ; waving hand: dark skin tone # E1.0 [1] (👋🏿)
+1F44C 1F3FB ; RGI_Emoji_Modifier_Sequence ; OK hand: light skin tone # E1.0 [1] (👌🏻)
+1F44C 1F3FC ; RGI_Emoji_Modifier_Sequence ; OK hand: medium-light skin tone # E1.0 [1] (👌🏼)
+1F44C 1F3FD ; RGI_Emoji_Modifier_Sequence ; OK hand: medium skin tone # E1.0 [1] (👌🏽)
+1F44C 1F3FE ; RGI_Emoji_Modifier_Sequence ; OK hand: medium-dark skin tone # E1.0 [1] (👌🏾)
+1F44C 1F3FF ; RGI_Emoji_Modifier_Sequence ; OK hand: dark skin tone # E1.0 [1] (👌🏿)
+1F44D 1F3FB ; RGI_Emoji_Modifier_Sequence ; thumbs up: light skin tone # E1.0 [1] (👍🏻)
+1F44D 1F3FC ; RGI_Emoji_Modifier_Sequence ; thumbs up: medium-light skin tone # E1.0 [1] (👍🏼)
+1F44D 1F3FD ; RGI_Emoji_Modifier_Sequence ; thumbs up: medium skin tone # E1.0 [1] (👍🏽)
+1F44D 1F3FE ; RGI_Emoji_Modifier_Sequence ; thumbs up: medium-dark skin tone # E1.0 [1] (👍🏾)
+1F44D 1F3FF ; RGI_Emoji_Modifier_Sequence ; thumbs up: dark skin tone # E1.0 [1] (👍🏿)
+1F44E 1F3FB ; RGI_Emoji_Modifier_Sequence ; thumbs down: light skin tone # E1.0 [1] (👎🏻)
+1F44E 1F3FC ; RGI_Emoji_Modifier_Sequence ; thumbs down: medium-light skin tone # E1.0 [1] (👎🏼)
+1F44E 1F3FD ; RGI_Emoji_Modifier_Sequence ; thumbs down: medium skin tone # E1.0 [1] (👎🏽)
+1F44E 1F3FE ; RGI_Emoji_Modifier_Sequence ; thumbs down: medium-dark skin tone # E1.0 [1] (👎🏾)
+1F44E 1F3FF ; RGI_Emoji_Modifier_Sequence ; thumbs down: dark skin tone # E1.0 [1] (👎🏿)
+1F44F 1F3FB ; RGI_Emoji_Modifier_Sequence ; clapping hands: light skin tone # E1.0 [1] (👏🏻)
+1F44F 1F3FC ; RGI_Emoji_Modifier_Sequence ; clapping hands: medium-light skin tone # E1.0 [1] (👏🏼)
+1F44F 1F3FD ; RGI_Emoji_Modifier_Sequence ; clapping hands: medium skin tone # E1.0 [1] (👏🏽)
+1F44F 1F3FE ; RGI_Emoji_Modifier_Sequence ; clapping hands: medium-dark skin tone # E1.0 [1] (👏🏾)
+1F44F 1F3FF ; RGI_Emoji_Modifier_Sequence ; clapping hands: dark skin tone # E1.0 [1] (👏🏿)
+1F450 1F3FB ; RGI_Emoji_Modifier_Sequence ; open hands: light skin tone # E1.0 [1] (👐🏻)
+1F450 1F3FC ; RGI_Emoji_Modifier_Sequence ; open hands: medium-light skin tone # E1.0 [1] (👐🏼)
+1F450 1F3FD ; RGI_Emoji_Modifier_Sequence ; open hands: medium skin tone # E1.0 [1] (👐🏽)
+1F450 1F3FE ; RGI_Emoji_Modifier_Sequence ; open hands: medium-dark skin tone # E1.0 [1] (👐🏾)
+1F450 1F3FF ; RGI_Emoji_Modifier_Sequence ; open hands: dark skin tone # E1.0 [1] (👐🏿)
+1F466 1F3FB ; RGI_Emoji_Modifier_Sequence ; boy: light skin tone # E1.0 [1] (👦🏻)
+1F466 1F3FC ; RGI_Emoji_Modifier_Sequence ; boy: medium-light skin tone # E1.0 [1] (👦🏼)
+1F466 1F3FD ; RGI_Emoji_Modifier_Sequence ; boy: medium skin tone # E1.0 [1] (👦🏽)
+1F466 1F3FE ; RGI_Emoji_Modifier_Sequence ; boy: medium-dark skin tone # E1.0 [1] (👦🏾)
+1F466 1F3FF ; RGI_Emoji_Modifier_Sequence ; boy: dark skin tone # E1.0 [1] (👦🏿)
+1F467 1F3FB ; RGI_Emoji_Modifier_Sequence ; girl: light skin tone # E1.0 [1] (👧🏻)
+1F467 1F3FC ; RGI_Emoji_Modifier_Sequence ; girl: medium-light skin tone # E1.0 [1] (👧🏼)
+1F467 1F3FD ; RGI_Emoji_Modifier_Sequence ; girl: medium skin tone # E1.0 [1] (👧🏽)
+1F467 1F3FE ; RGI_Emoji_Modifier_Sequence ; girl: medium-dark skin tone # E1.0 [1] (👧🏾)
+1F467 1F3FF ; RGI_Emoji_Modifier_Sequence ; girl: dark skin tone # E1.0 [1] (👧🏿)
+1F468 1F3FB ; RGI_Emoji_Modifier_Sequence ; man: light skin tone # E1.0 [1] (👨🏻)
+1F468 1F3FC ; RGI_Emoji_Modifier_Sequence ; man: medium-light skin tone # E1.0 [1] (👨🏼)
+1F468 1F3FD ; RGI_Emoji_Modifier_Sequence ; man: medium skin tone # E1.0 [1] (👨🏽)
+1F468 1F3FE ; RGI_Emoji_Modifier_Sequence ; man: medium-dark skin tone # E1.0 [1] (👨🏾)
+1F468 1F3FF ; RGI_Emoji_Modifier_Sequence ; man: dark skin tone # E1.0 [1] (👨🏿)
+1F469 1F3FB ; RGI_Emoji_Modifier_Sequence ; woman: light skin tone # E1.0 [1] (👩🏻)
+1F469 1F3FC ; RGI_Emoji_Modifier_Sequence ; woman: medium-light skin tone # E1.0 [1] (👩🏼)
+1F469 1F3FD ; RGI_Emoji_Modifier_Sequence ; woman: medium skin tone # E1.0 [1] (👩🏽)
+1F469 1F3FE ; RGI_Emoji_Modifier_Sequence ; woman: medium-dark skin tone # E1.0 [1] (👩🏾)
+1F469 1F3FF ; RGI_Emoji_Modifier_Sequence ; woman: dark skin tone # E1.0 [1] (👩🏿)
+1F46B 1F3FB ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: light skin tone # E12.0 [1] (👫🏻)
+1F46B 1F3FC ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: medium-light skin tone # E12.0 [1] (👫🏼)
+1F46B 1F3FD ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: medium skin tone # E12.0 [1] (👫🏽)
+1F46B 1F3FE ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: medium-dark skin tone # E12.0 [1] (👫🏾)
+1F46B 1F3FF ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: dark skin tone # E12.0 [1] (👫🏿)
+1F46C 1F3FB ; RGI_Emoji_Modifier_Sequence ; men holding hands: light skin tone # E12.0 [1] (👬🏻)
+1F46C 1F3FC ; RGI_Emoji_Modifier_Sequence ; men holding hands: medium-light skin tone # E12.0 [1] (👬🏼)
+1F46C 1F3FD ; RGI_Emoji_Modifier_Sequence ; men holding hands: medium skin tone # E12.0 [1] (👬🏽)
+1F46C 1F3FE ; RGI_Emoji_Modifier_Sequence ; men holding hands: medium-dark skin tone # E12.0 [1] (👬🏾)
+1F46C 1F3FF ; RGI_Emoji_Modifier_Sequence ; men holding hands: dark skin tone # E12.0 [1] (👬🏿)
+1F46D 1F3FB ; RGI_Emoji_Modifier_Sequence ; women holding hands: light skin tone # E12.0 [1] (👭🏻)
+1F46D 1F3FC ; RGI_Emoji_Modifier_Sequence ; women holding hands: medium-light skin tone # E12.0 [1] (👭🏼)
+1F46D 1F3FD ; RGI_Emoji_Modifier_Sequence ; women holding hands: medium skin tone # E12.0 [1] (👭🏽)
+1F46D 1F3FE ; RGI_Emoji_Modifier_Sequence ; women holding hands: medium-dark skin tone # E12.0 [1] (👭🏾)
+1F46D 1F3FF ; RGI_Emoji_Modifier_Sequence ; women holding hands: dark skin tone # E12.0 [1] (👭🏿)
+1F46E 1F3FB ; RGI_Emoji_Modifier_Sequence ; police officer: light skin tone # E1.0 [1] (👮🏻)
+1F46E 1F3FC ; RGI_Emoji_Modifier_Sequence ; police officer: medium-light skin tone # E1.0 [1] (👮🏼)
+1F46E 1F3FD ; RGI_Emoji_Modifier_Sequence ; police officer: medium skin tone # E1.0 [1] (👮🏽)
+1F46E 1F3FE ; RGI_Emoji_Modifier_Sequence ; police officer: medium-dark skin tone # E1.0 [1] (👮🏾)
+1F46E 1F3FF ; RGI_Emoji_Modifier_Sequence ; police officer: dark skin tone # E1.0 [1] (👮🏿)
+1F470 1F3FB ; RGI_Emoji_Modifier_Sequence ; person with veil: light skin tone # E1.0 [1] (👰🏻)
+1F470 1F3FC ; RGI_Emoji_Modifier_Sequence ; person with veil: medium-light skin tone # E1.0 [1] (👰🏼)
+1F470 1F3FD ; RGI_Emoji_Modifier_Sequence ; person with veil: medium skin tone # E1.0 [1] (👰🏽)
+1F470 1F3FE ; RGI_Emoji_Modifier_Sequence ; person with veil: medium-dark skin tone # E1.0 [1] (👰🏾)
+1F470 1F3FF ; RGI_Emoji_Modifier_Sequence ; person with veil: dark skin tone # E1.0 [1] (👰🏿)
+1F471 1F3FB ; RGI_Emoji_Modifier_Sequence ; person: light skin tone, blond hair # E1.0 [1] (👱🏻)
+1F471 1F3FC ; RGI_Emoji_Modifier_Sequence ; person: medium-light skin tone, blond hair # E1.0 [1] (👱🏼)
+1F471 1F3FD ; RGI_Emoji_Modifier_Sequence ; person: medium skin tone, blond hair # E1.0 [1] (👱🏽)
+1F471 1F3FE ; RGI_Emoji_Modifier_Sequence ; person: medium-dark skin tone, blond hair # E1.0 [1] (👱🏾)
+1F471 1F3FF ; RGI_Emoji_Modifier_Sequence ; person: dark skin tone, blond hair # E1.0 [1] (👱🏿)
+1F472 1F3FB ; RGI_Emoji_Modifier_Sequence ; person with skullcap: light skin tone # E1.0 [1] (👲🏻)
+1F472 1F3FC ; RGI_Emoji_Modifier_Sequence ; person with skullcap: medium-light skin tone # E1.0 [1] (👲🏼)
+1F472 1F3FD ; RGI_Emoji_Modifier_Sequence ; person with skullcap: medium skin tone # E1.0 [1] (👲🏽)
+1F472 1F3FE ; RGI_Emoji_Modifier_Sequence ; person with skullcap: medium-dark skin tone # E1.0 [1] (👲🏾)
+1F472 1F3FF ; RGI_Emoji_Modifier_Sequence ; person with skullcap: dark skin tone # E1.0 [1] (👲🏿)
+1F473 1F3FB ; RGI_Emoji_Modifier_Sequence ; person wearing turban: light skin tone # E1.0 [1] (👳🏻)
+1F473 1F3FC ; RGI_Emoji_Modifier_Sequence ; person wearing turban: medium-light skin tone # E1.0 [1] (👳🏼)
+1F473 1F3FD ; RGI_Emoji_Modifier_Sequence ; person wearing turban: medium skin tone # E1.0 [1] (👳🏽)
+1F473 1F3FE ; RGI_Emoji_Modifier_Sequence ; person wearing turban: medium-dark skin tone # E1.0 [1] (👳🏾)
+1F473 1F3FF ; RGI_Emoji_Modifier_Sequence ; person wearing turban: dark skin tone # E1.0 [1] (👳🏿)
+1F474 1F3FB ; RGI_Emoji_Modifier_Sequence ; old man: light skin tone # E1.0 [1] (👴🏻)
+1F474 1F3FC ; RGI_Emoji_Modifier_Sequence ; old man: medium-light skin tone # E1.0 [1] (👴🏼)
+1F474 1F3FD ; RGI_Emoji_Modifier_Sequence ; old man: medium skin tone # E1.0 [1] (👴🏽)
+1F474 1F3FE ; RGI_Emoji_Modifier_Sequence ; old man: medium-dark skin tone # E1.0 [1] (👴🏾)
+1F474 1F3FF ; RGI_Emoji_Modifier_Sequence ; old man: dark skin tone # E1.0 [1] (👴🏿)
+1F475 1F3FB ; RGI_Emoji_Modifier_Sequence ; old woman: light skin tone # E1.0 [1] (👵🏻)
+1F475 1F3FC ; RGI_Emoji_Modifier_Sequence ; old woman: medium-light skin tone # E1.0 [1] (👵🏼)
+1F475 1F3FD ; RGI_Emoji_Modifier_Sequence ; old woman: medium skin tone # E1.0 [1] (👵🏽)
+1F475 1F3FE ; RGI_Emoji_Modifier_Sequence ; old woman: medium-dark skin tone # E1.0 [1] (👵🏾)
+1F475 1F3FF ; RGI_Emoji_Modifier_Sequence ; old woman: dark skin tone # E1.0 [1] (👵🏿)
+1F476 1F3FB ; RGI_Emoji_Modifier_Sequence ; baby: light skin tone # E1.0 [1] (👶🏻)
+1F476 1F3FC ; RGI_Emoji_Modifier_Sequence ; baby: medium-light skin tone # E1.0 [1] (👶🏼)
+1F476 1F3FD ; RGI_Emoji_Modifier_Sequence ; baby: medium skin tone # E1.0 [1] (👶🏽)
+1F476 1F3FE ; RGI_Emoji_Modifier_Sequence ; baby: medium-dark skin tone # E1.0 [1] (👶🏾)
+1F476 1F3FF ; RGI_Emoji_Modifier_Sequence ; baby: dark skin tone # E1.0 [1] (👶🏿)
+1F477 1F3FB ; RGI_Emoji_Modifier_Sequence ; construction worker: light skin tone # E1.0 [1] (👷🏻)
+1F477 1F3FC ; RGI_Emoji_Modifier_Sequence ; construction worker: medium-light skin tone # E1.0 [1] (👷🏼)
+1F477 1F3FD ; RGI_Emoji_Modifier_Sequence ; construction worker: medium skin tone # E1.0 [1] (👷🏽)
+1F477 1F3FE ; RGI_Emoji_Modifier_Sequence ; construction worker: medium-dark skin tone # E1.0 [1] (👷🏾)
+1F477 1F3FF ; RGI_Emoji_Modifier_Sequence ; construction worker: dark skin tone # E1.0 [1] (👷🏿)
+1F478 1F3FB ; RGI_Emoji_Modifier_Sequence ; princess: light skin tone # E1.0 [1] (👸🏻)
+1F478 1F3FC ; RGI_Emoji_Modifier_Sequence ; princess: medium-light skin tone # E1.0 [1] (👸🏼)
+1F478 1F3FD ; RGI_Emoji_Modifier_Sequence ; princess: medium skin tone # E1.0 [1] (👸🏽)
+1F478 1F3FE ; RGI_Emoji_Modifier_Sequence ; princess: medium-dark skin tone # E1.0 [1] (👸🏾)
+1F478 1F3FF ; RGI_Emoji_Modifier_Sequence ; princess: dark skin tone # E1.0 [1] (👸🏿)
+1F47C 1F3FB ; RGI_Emoji_Modifier_Sequence ; baby angel: light skin tone # E1.0 [1] (👼🏻)
+1F47C 1F3FC ; RGI_Emoji_Modifier_Sequence ; baby angel: medium-light skin tone # E1.0 [1] (👼🏼)
+1F47C 1F3FD ; RGI_Emoji_Modifier_Sequence ; baby angel: medium skin tone # E1.0 [1] (👼🏽)
+1F47C 1F3FE ; RGI_Emoji_Modifier_Sequence ; baby angel: medium-dark skin tone # E1.0 [1] (👼🏾)
+1F47C 1F3FF ; RGI_Emoji_Modifier_Sequence ; baby angel: dark skin tone # E1.0 [1] (👼🏿)
+1F481 1F3FB ; RGI_Emoji_Modifier_Sequence ; person tipping hand: light skin tone # E1.0 [1] (💁🏻)
+1F481 1F3FC ; RGI_Emoji_Modifier_Sequence ; person tipping hand: medium-light skin tone # E1.0 [1] (💁🏼)
+1F481 1F3FD ; RGI_Emoji_Modifier_Sequence ; person tipping hand: medium skin tone # E1.0 [1] (💁🏽)
+1F481 1F3FE ; RGI_Emoji_Modifier_Sequence ; person tipping hand: medium-dark skin tone # E1.0 [1] (💁🏾)
+1F481 1F3FF ; RGI_Emoji_Modifier_Sequence ; person tipping hand: dark skin tone # E1.0 [1] (💁🏿)
+1F482 1F3FB ; RGI_Emoji_Modifier_Sequence ; guard: light skin tone # E1.0 [1] (💂🏻)
+1F482 1F3FC ; RGI_Emoji_Modifier_Sequence ; guard: medium-light skin tone # E1.0 [1] (💂🏼)
+1F482 1F3FD ; RGI_Emoji_Modifier_Sequence ; guard: medium skin tone # E1.0 [1] (💂🏽)
+1F482 1F3FE ; RGI_Emoji_Modifier_Sequence ; guard: medium-dark skin tone # E1.0 [1] (💂🏾)
+1F482 1F3FF ; RGI_Emoji_Modifier_Sequence ; guard: dark skin tone # E1.0 [1] (💂🏿)
+1F483 1F3FB ; RGI_Emoji_Modifier_Sequence ; woman dancing: light skin tone # E1.0 [1] (💃🏻)
+1F483 1F3FC ; RGI_Emoji_Modifier_Sequence ; woman dancing: medium-light skin tone # E1.0 [1] (💃🏼)
+1F483 1F3FD ; RGI_Emoji_Modifier_Sequence ; woman dancing: medium skin tone # E1.0 [1] (💃🏽)
+1F483 1F3FE ; RGI_Emoji_Modifier_Sequence ; woman dancing: medium-dark skin tone # E1.0 [1] (💃🏾)
+1F483 1F3FF ; RGI_Emoji_Modifier_Sequence ; woman dancing: dark skin tone # E1.0 [1] (💃🏿)
+1F485 1F3FB ; RGI_Emoji_Modifier_Sequence ; nail polish: light skin tone # E1.0 [1] (💅🏻)
+1F485 1F3FC ; RGI_Emoji_Modifier_Sequence ; nail polish: medium-light skin tone # E1.0 [1] (💅🏼)
+1F485 1F3FD ; RGI_Emoji_Modifier_Sequence ; nail polish: medium skin tone # E1.0 [1] (💅🏽)
+1F485 1F3FE ; RGI_Emoji_Modifier_Sequence ; nail polish: medium-dark skin tone # E1.0 [1] (💅🏾)
+1F485 1F3FF ; RGI_Emoji_Modifier_Sequence ; nail polish: dark skin tone # E1.0 [1] (💅🏿)
+1F486 1F3FB ; RGI_Emoji_Modifier_Sequence ; person getting massage: light skin tone # E1.0 [1] (💆🏻)
+1F486 1F3FC ; RGI_Emoji_Modifier_Sequence ; person getting massage: medium-light skin tone # E1.0 [1] (💆🏼)
+1F486 1F3FD ; RGI_Emoji_Modifier_Sequence ; person getting massage: medium skin tone # E1.0 [1] (💆🏽)
+1F486 1F3FE ; RGI_Emoji_Modifier_Sequence ; person getting massage: medium-dark skin tone # E1.0 [1] (💆🏾)
+1F486 1F3FF ; RGI_Emoji_Modifier_Sequence ; person getting massage: dark skin tone # E1.0 [1] (💆🏿)
+1F487 1F3FB ; RGI_Emoji_Modifier_Sequence ; person getting haircut: light skin tone # E1.0 [1] (💇🏻)
+1F487 1F3FC ; RGI_Emoji_Modifier_Sequence ; person getting haircut: medium-light skin tone # E1.0 [1] (💇🏼)
+1F487 1F3FD ; RGI_Emoji_Modifier_Sequence ; person getting haircut: medium skin tone # E1.0 [1] (💇🏽)
+1F487 1F3FE ; RGI_Emoji_Modifier_Sequence ; person getting haircut: medium-dark skin tone # E1.0 [1] (💇🏾)
+1F487 1F3FF ; RGI_Emoji_Modifier_Sequence ; person getting haircut: dark skin tone # E1.0 [1] (💇🏿)
+1F48F 1F3FB ; RGI_Emoji_Modifier_Sequence ; kiss: light skin tone # E13.1 [1] (💏🏻)
+1F48F 1F3FC ; RGI_Emoji_Modifier_Sequence ; kiss: medium-light skin tone # E13.1 [1] (💏🏼)
+1F48F 1F3FD ; RGI_Emoji_Modifier_Sequence ; kiss: medium skin tone # E13.1 [1] (💏🏽)
+1F48F 1F3FE ; RGI_Emoji_Modifier_Sequence ; kiss: medium-dark skin tone # E13.1 [1] (💏🏾)
+1F48F 1F3FF ; RGI_Emoji_Modifier_Sequence ; kiss: dark skin tone # E13.1 [1] (💏🏿)
+1F491 1F3FB ; RGI_Emoji_Modifier_Sequence ; couple with heart: light skin tone # E13.1 [1] (💑🏻)
+1F491 1F3FC ; RGI_Emoji_Modifier_Sequence ; couple with heart: medium-light skin tone # E13.1 [1] (💑🏼)
+1F491 1F3FD ; RGI_Emoji_Modifier_Sequence ; couple with heart: medium skin tone # E13.1 [1] (💑🏽)
+1F491 1F3FE ; RGI_Emoji_Modifier_Sequence ; couple with heart: medium-dark skin tone # E13.1 [1] (💑🏾)
+1F491 1F3FF ; RGI_Emoji_Modifier_Sequence ; couple with heart: dark skin tone # E13.1 [1] (💑🏿)
+1F4AA 1F3FB ; RGI_Emoji_Modifier_Sequence ; flexed biceps: light skin tone # E1.0 [1] (💪🏻)
+1F4AA 1F3FC ; RGI_Emoji_Modifier_Sequence ; flexed biceps: medium-light skin tone # E1.0 [1] (💪🏼)
+1F4AA 1F3FD ; RGI_Emoji_Modifier_Sequence ; flexed biceps: medium skin tone # E1.0 [1] (💪🏽)
+1F4AA 1F3FE ; RGI_Emoji_Modifier_Sequence ; flexed biceps: medium-dark skin tone # E1.0 [1] (💪🏾)
+1F4AA 1F3FF ; RGI_Emoji_Modifier_Sequence ; flexed biceps: dark skin tone # E1.0 [1] (💪🏿)
+1F574 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: light skin tone # E4.0 [1] (🕴🏻)
+1F574 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: medium-light skin tone # E4.0 [1] (🕴🏼)
+1F574 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: medium skin tone # E4.0 [1] (🕴🏽)
+1F574 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: medium-dark skin tone # E4.0 [1] (🕴🏾)
+1F574 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: dark skin tone # E4.0 [1] (🕴🏿)
+1F575 1F3FB ; RGI_Emoji_Modifier_Sequence ; detective: light skin tone # E2.0 [1] (🕵🏻)
+1F575 1F3FC ; RGI_Emoji_Modifier_Sequence ; detective: medium-light skin tone # E2.0 [1] (🕵🏼)
+1F575 1F3FD ; RGI_Emoji_Modifier_Sequence ; detective: medium skin tone # E2.0 [1] (🕵🏽)
+1F575 1F3FE ; RGI_Emoji_Modifier_Sequence ; detective: medium-dark skin tone # E2.0 [1] (🕵🏾)
+1F575 1F3FF ; RGI_Emoji_Modifier_Sequence ; detective: dark skin tone # E2.0 [1] (🕵🏿)
+1F57A 1F3FB ; RGI_Emoji_Modifier_Sequence ; man dancing: light skin tone # E3.0 [1] (🕺🏻)
+1F57A 1F3FC ; RGI_Emoji_Modifier_Sequence ; man dancing: medium-light skin tone # E3.0 [1] (🕺🏼)
+1F57A 1F3FD ; RGI_Emoji_Modifier_Sequence ; man dancing: medium skin tone # E3.0 [1] (🕺🏽)
+1F57A 1F3FE ; RGI_Emoji_Modifier_Sequence ; man dancing: medium-dark skin tone # E3.0 [1] (🕺🏾)
+1F57A 1F3FF ; RGI_Emoji_Modifier_Sequence ; man dancing: dark skin tone # E3.0 [1] (🕺🏿)
+1F590 1F3FB ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: light skin tone # E1.0 [1] (🖐🏻)
+1F590 1F3FC ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: medium-light skin tone # E1.0 [1] (🖐🏼)
+1F590 1F3FD ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: medium skin tone # E1.0 [1] (🖐🏽)
+1F590 1F3FE ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: medium-dark skin tone # E1.0 [1] (🖐🏾)
+1F590 1F3FF ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: dark skin tone # E1.0 [1] (🖐🏿)
+1F595 1F3FB ; RGI_Emoji_Modifier_Sequence ; middle finger: light skin tone # E1.0 [1] (🖕🏻)
+1F595 1F3FC ; RGI_Emoji_Modifier_Sequence ; middle finger: medium-light skin tone # E1.0 [1] (🖕🏼)
+1F595 1F3FD ; RGI_Emoji_Modifier_Sequence ; middle finger: medium skin tone # E1.0 [1] (🖕🏽)
+1F595 1F3FE ; RGI_Emoji_Modifier_Sequence ; middle finger: medium-dark skin tone # E1.0 [1] (🖕🏾)
+1F595 1F3FF ; RGI_Emoji_Modifier_Sequence ; middle finger: dark skin tone # E1.0 [1] (🖕🏿)
+1F596 1F3FB ; RGI_Emoji_Modifier_Sequence ; vulcan salute: light skin tone # E1.0 [1] (🖖🏻)
+1F596 1F3FC ; RGI_Emoji_Modifier_Sequence ; vulcan salute: medium-light skin tone # E1.0 [1] (🖖🏼)
+1F596 1F3FD ; RGI_Emoji_Modifier_Sequence ; vulcan salute: medium skin tone # E1.0 [1] (🖖🏽)
+1F596 1F3FE ; RGI_Emoji_Modifier_Sequence ; vulcan salute: medium-dark skin tone # E1.0 [1] (🖖🏾)
+1F596 1F3FF ; RGI_Emoji_Modifier_Sequence ; vulcan salute: dark skin tone # E1.0 [1] (🖖🏿)
+1F645 1F3FB ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: light skin tone # E1.0 [1] (🙅🏻)
+1F645 1F3FC ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: medium-light skin tone # E1.0 [1] (🙅🏼)
+1F645 1F3FD ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: medium skin tone # E1.0 [1] (🙅🏽)
+1F645 1F3FE ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: medium-dark skin tone # E1.0 [1] (🙅🏾)
+1F645 1F3FF ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: dark skin tone # E1.0 [1] (🙅🏿)
+1F646 1F3FB ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: light skin tone # E1.0 [1] (🙆🏻)
+1F646 1F3FC ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: medium-light skin tone # E1.0 [1] (🙆🏼)
+1F646 1F3FD ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: medium skin tone # E1.0 [1] (🙆🏽)
+1F646 1F3FE ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: medium-dark skin tone # E1.0 [1] (🙆🏾)
+1F646 1F3FF ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: dark skin tone # E1.0 [1] (🙆🏿)
+1F647 1F3FB ; RGI_Emoji_Modifier_Sequence ; person bowing: light skin tone # E1.0 [1] (🙇🏻)
+1F647 1F3FC ; RGI_Emoji_Modifier_Sequence ; person bowing: medium-light skin tone # E1.0 [1] (🙇🏼)
+1F647 1F3FD ; RGI_Emoji_Modifier_Sequence ; person bowing: medium skin tone # E1.0 [1] (🙇🏽)
+1F647 1F3FE ; RGI_Emoji_Modifier_Sequence ; person bowing: medium-dark skin tone # E1.0 [1] (🙇🏾)
+1F647 1F3FF ; RGI_Emoji_Modifier_Sequence ; person bowing: dark skin tone # E1.0 [1] (🙇🏿)
+1F64B 1F3FB ; RGI_Emoji_Modifier_Sequence ; person raising hand: light skin tone # E1.0 [1] (🙋🏻)
+1F64B 1F3FC ; RGI_Emoji_Modifier_Sequence ; person raising hand: medium-light skin tone # E1.0 [1] (🙋🏼)
+1F64B 1F3FD ; RGI_Emoji_Modifier_Sequence ; person raising hand: medium skin tone # E1.0 [1] (🙋🏽)
+1F64B 1F3FE ; RGI_Emoji_Modifier_Sequence ; person raising hand: medium-dark skin tone # E1.0 [1] (🙋🏾)
+1F64B 1F3FF ; RGI_Emoji_Modifier_Sequence ; person raising hand: dark skin tone # E1.0 [1] (🙋🏿)
+1F64C 1F3FB ; RGI_Emoji_Modifier_Sequence ; raising hands: light skin tone # E1.0 [1] (🙌🏻)
+1F64C 1F3FC ; RGI_Emoji_Modifier_Sequence ; raising hands: medium-light skin tone # E1.0 [1] (🙌🏼)
+1F64C 1F3FD ; RGI_Emoji_Modifier_Sequence ; raising hands: medium skin tone # E1.0 [1] (🙌🏽)
+1F64C 1F3FE ; RGI_Emoji_Modifier_Sequence ; raising hands: medium-dark skin tone # E1.0 [1] (🙌🏾)
+1F64C 1F3FF ; RGI_Emoji_Modifier_Sequence ; raising hands: dark skin tone # E1.0 [1] (🙌🏿)
+1F64D 1F3FB ; RGI_Emoji_Modifier_Sequence ; person frowning: light skin tone # E1.0 [1] (🙍🏻)
+1F64D 1F3FC ; RGI_Emoji_Modifier_Sequence ; person frowning: medium-light skin tone # E1.0 [1] (🙍🏼)
+1F64D 1F3FD ; RGI_Emoji_Modifier_Sequence ; person frowning: medium skin tone # E1.0 [1] (🙍🏽)
+1F64D 1F3FE ; RGI_Emoji_Modifier_Sequence ; person frowning: medium-dark skin tone # E1.0 [1] (🙍🏾)
+1F64D 1F3FF ; RGI_Emoji_Modifier_Sequence ; person frowning: dark skin tone # E1.0 [1] (🙍🏿)
+1F64E 1F3FB ; RGI_Emoji_Modifier_Sequence ; person pouting: light skin tone # E1.0 [1] (🙎🏻)
+1F64E 1F3FC ; RGI_Emoji_Modifier_Sequence ; person pouting: medium-light skin tone # E1.0 [1] (🙎🏼)
+1F64E 1F3FD ; RGI_Emoji_Modifier_Sequence ; person pouting: medium skin tone # E1.0 [1] (🙎🏽)
+1F64E 1F3FE ; RGI_Emoji_Modifier_Sequence ; person pouting: medium-dark skin tone # E1.0 [1] (🙎🏾)
+1F64E 1F3FF ; RGI_Emoji_Modifier_Sequence ; person pouting: dark skin tone # E1.0 [1] (🙎🏿)
+1F64F 1F3FB ; RGI_Emoji_Modifier_Sequence ; folded hands: light skin tone # E1.0 [1] (🙏🏻)
+1F64F 1F3FC ; RGI_Emoji_Modifier_Sequence ; folded hands: medium-light skin tone # E1.0 [1] (🙏🏼)
+1F64F 1F3FD ; RGI_Emoji_Modifier_Sequence ; folded hands: medium skin tone # E1.0 [1] (🙏🏽)
+1F64F 1F3FE ; RGI_Emoji_Modifier_Sequence ; folded hands: medium-dark skin tone # E1.0 [1] (🙏🏾)
+1F64F 1F3FF ; RGI_Emoji_Modifier_Sequence ; folded hands: dark skin tone # E1.0 [1] (🙏🏿)
+1F6A3 1F3FB ; RGI_Emoji_Modifier_Sequence ; person rowing boat: light skin tone # E1.0 [1] (🚣🏻)
+1F6A3 1F3FC ; RGI_Emoji_Modifier_Sequence ; person rowing boat: medium-light skin tone # E1.0 [1] (🚣🏼)
+1F6A3 1F3FD ; RGI_Emoji_Modifier_Sequence ; person rowing boat: medium skin tone # E1.0 [1] (🚣🏽)
+1F6A3 1F3FE ; RGI_Emoji_Modifier_Sequence ; person rowing boat: medium-dark skin tone # E1.0 [1] (🚣🏾)
+1F6A3 1F3FF ; RGI_Emoji_Modifier_Sequence ; person rowing boat: dark skin tone # E1.0 [1] (🚣🏿)
+1F6B4 1F3FB ; RGI_Emoji_Modifier_Sequence ; person biking: light skin tone # E1.0 [1] (🚴🏻)
+1F6B4 1F3FC ; RGI_Emoji_Modifier_Sequence ; person biking: medium-light skin tone # E1.0 [1] (🚴🏼)
+1F6B4 1F3FD ; RGI_Emoji_Modifier_Sequence ; person biking: medium skin tone # E1.0 [1] (🚴🏽)
+1F6B4 1F3FE ; RGI_Emoji_Modifier_Sequence ; person biking: medium-dark skin tone # E1.0 [1] (🚴🏾)
+1F6B4 1F3FF ; RGI_Emoji_Modifier_Sequence ; person biking: dark skin tone # E1.0 [1] (🚴🏿)
+1F6B5 1F3FB ; RGI_Emoji_Modifier_Sequence ; person mountain biking: light skin tone # E1.0 [1] (🚵🏻)
+1F6B5 1F3FC ; RGI_Emoji_Modifier_Sequence ; person mountain biking: medium-light skin tone # E1.0 [1] (🚵🏼)
+1F6B5 1F3FD ; RGI_Emoji_Modifier_Sequence ; person mountain biking: medium skin tone # E1.0 [1] (🚵🏽)
+1F6B5 1F3FE ; RGI_Emoji_Modifier_Sequence ; person mountain biking: medium-dark skin tone # E1.0 [1] (🚵🏾)
+1F6B5 1F3FF ; RGI_Emoji_Modifier_Sequence ; person mountain biking: dark skin tone # E1.0 [1] (🚵🏿)
+1F6B6 1F3FB ; RGI_Emoji_Modifier_Sequence ; person walking: light skin tone # E1.0 [1] (🚶🏻)
+1F6B6 1F3FC ; RGI_Emoji_Modifier_Sequence ; person walking: medium-light skin tone # E1.0 [1] (🚶🏼)
+1F6B6 1F3FD ; RGI_Emoji_Modifier_Sequence ; person walking: medium skin tone # E1.0 [1] (🚶🏽)
+1F6B6 1F3FE ; RGI_Emoji_Modifier_Sequence ; person walking: medium-dark skin tone # E1.0 [1] (🚶🏾)
+1F6B6 1F3FF ; RGI_Emoji_Modifier_Sequence ; person walking: dark skin tone # E1.0 [1] (🚶🏿)
+1F6C0 1F3FB ; RGI_Emoji_Modifier_Sequence ; person taking bath: light skin tone # E1.0 [1] (🛀🏻)
+1F6C0 1F3FC ; RGI_Emoji_Modifier_Sequence ; person taking bath: medium-light skin tone # E1.0 [1] (🛀🏼)
+1F6C0 1F3FD ; RGI_Emoji_Modifier_Sequence ; person taking bath: medium skin tone # E1.0 [1] (🛀🏽)
+1F6C0 1F3FE ; RGI_Emoji_Modifier_Sequence ; person taking bath: medium-dark skin tone # E1.0 [1] (🛀🏾)
+1F6C0 1F3FF ; RGI_Emoji_Modifier_Sequence ; person taking bath: dark skin tone # E1.0 [1] (🛀🏿)
+1F6CC 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in bed: light skin tone # E4.0 [1] (🛌🏻)
+1F6CC 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in bed: medium-light skin tone # E4.0 [1] (🛌🏼)
+1F6CC 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in bed: medium skin tone # E4.0 [1] (🛌🏽)
+1F6CC 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in bed: medium-dark skin tone # E4.0 [1] (🛌🏾)
+1F6CC 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in bed: dark skin tone # E4.0 [1] (🛌🏿)
+1F90C 1F3FB ; RGI_Emoji_Modifier_Sequence ; pinched fingers: light skin tone # E13.0 [1] (🤌🏻)
+1F90C 1F3FC ; RGI_Emoji_Modifier_Sequence ; pinched fingers: medium-light skin tone # E13.0 [1] (🤌🏼)
+1F90C 1F3FD ; RGI_Emoji_Modifier_Sequence ; pinched fingers: medium skin tone # E13.0 [1] (🤌🏽)
+1F90C 1F3FE ; RGI_Emoji_Modifier_Sequence ; pinched fingers: medium-dark skin tone # E13.0 [1] (🤌🏾)
+1F90C 1F3FF ; RGI_Emoji_Modifier_Sequence ; pinched fingers: dark skin tone # E13.0 [1] (🤌🏿)
+1F90F 1F3FB ; RGI_Emoji_Modifier_Sequence ; pinching hand: light skin tone # E12.0 [1] (🤏🏻)
+1F90F 1F3FC ; RGI_Emoji_Modifier_Sequence ; pinching hand: medium-light skin tone # E12.0 [1] (🤏🏼)
+1F90F 1F3FD ; RGI_Emoji_Modifier_Sequence ; pinching hand: medium skin tone # E12.0 [1] (🤏🏽)
+1F90F 1F3FE ; RGI_Emoji_Modifier_Sequence ; pinching hand: medium-dark skin tone # E12.0 [1] (🤏🏾)
+1F90F 1F3FF ; RGI_Emoji_Modifier_Sequence ; pinching hand: dark skin tone # E12.0 [1] (🤏🏿)
+1F918 1F3FB ; RGI_Emoji_Modifier_Sequence ; sign of the horns: light skin tone # E1.0 [1] (🤘🏻)
+1F918 1F3FC ; RGI_Emoji_Modifier_Sequence ; sign of the horns: medium-light skin tone # E1.0 [1] (🤘🏼)
+1F918 1F3FD ; RGI_Emoji_Modifier_Sequence ; sign of the horns: medium skin tone # E1.0 [1] (🤘🏽)
+1F918 1F3FE ; RGI_Emoji_Modifier_Sequence ; sign of the horns: medium-dark skin tone # E1.0 [1] (🤘🏾)
+1F918 1F3FF ; RGI_Emoji_Modifier_Sequence ; sign of the horns: dark skin tone # E1.0 [1] (🤘🏿)
+1F919 1F3FB ; RGI_Emoji_Modifier_Sequence ; call me hand: light skin tone # E3.0 [1] (🤙🏻)
+1F919 1F3FC ; RGI_Emoji_Modifier_Sequence ; call me hand: medium-light skin tone # E3.0 [1] (🤙🏼)
+1F919 1F3FD ; RGI_Emoji_Modifier_Sequence ; call me hand: medium skin tone # E3.0 [1] (🤙🏽)
+1F919 1F3FE ; RGI_Emoji_Modifier_Sequence ; call me hand: medium-dark skin tone # E3.0 [1] (🤙🏾)
+1F919 1F3FF ; RGI_Emoji_Modifier_Sequence ; call me hand: dark skin tone # E3.0 [1] (🤙🏿)
+1F91A 1F3FB ; RGI_Emoji_Modifier_Sequence ; raised back of hand: light skin tone # E3.0 [1] (🤚🏻)
+1F91A 1F3FC ; RGI_Emoji_Modifier_Sequence ; raised back of hand: medium-light skin tone # E3.0 [1] (🤚🏼)
+1F91A 1F3FD ; RGI_Emoji_Modifier_Sequence ; raised back of hand: medium skin tone # E3.0 [1] (🤚🏽)
+1F91A 1F3FE ; RGI_Emoji_Modifier_Sequence ; raised back of hand: medium-dark skin tone # E3.0 [1] (🤚🏾)
+1F91A 1F3FF ; RGI_Emoji_Modifier_Sequence ; raised back of hand: dark skin tone # E3.0 [1] (🤚🏿)
+1F91B 1F3FB ; RGI_Emoji_Modifier_Sequence ; left-facing fist: light skin tone # E3.0 [1] (🤛🏻)
+1F91B 1F3FC ; RGI_Emoji_Modifier_Sequence ; left-facing fist: medium-light skin tone # E3.0 [1] (🤛🏼)
+1F91B 1F3FD ; RGI_Emoji_Modifier_Sequence ; left-facing fist: medium skin tone # E3.0 [1] (🤛🏽)
+1F91B 1F3FE ; RGI_Emoji_Modifier_Sequence ; left-facing fist: medium-dark skin tone # E3.0 [1] (🤛🏾)
+1F91B 1F3FF ; RGI_Emoji_Modifier_Sequence ; left-facing fist: dark skin tone # E3.0 [1] (🤛🏿)
+1F91C 1F3FB ; RGI_Emoji_Modifier_Sequence ; right-facing fist: light skin tone # E3.0 [1] (🤜🏻)
+1F91C 1F3FC ; RGI_Emoji_Modifier_Sequence ; right-facing fist: medium-light skin tone # E3.0 [1] (🤜🏼)
+1F91C 1F3FD ; RGI_Emoji_Modifier_Sequence ; right-facing fist: medium skin tone # E3.0 [1] (🤜🏽)
+1F91C 1F3FE ; RGI_Emoji_Modifier_Sequence ; right-facing fist: medium-dark skin tone # E3.0 [1] (🤜🏾)
+1F91C 1F3FF ; RGI_Emoji_Modifier_Sequence ; right-facing fist: dark skin tone # E3.0 [1] (🤜🏿)
+1F91D 1F3FB ; RGI_Emoji_Modifier_Sequence ; handshake: light skin tone # E3.0 [1] (🤝🏻)
+1F91D 1F3FC ; RGI_Emoji_Modifier_Sequence ; handshake: medium-light skin tone # E3.0 [1] (🤝🏼)
+1F91D 1F3FD ; RGI_Emoji_Modifier_Sequence ; handshake: medium skin tone # E3.0 [1] (🤝🏽)
+1F91D 1F3FE ; RGI_Emoji_Modifier_Sequence ; handshake: medium-dark skin tone # E3.0 [1] (🤝🏾)
+1F91D 1F3FF ; RGI_Emoji_Modifier_Sequence ; handshake: dark skin tone # E3.0 [1] (🤝🏿)
+1F91E 1F3FB ; RGI_Emoji_Modifier_Sequence ; crossed fingers: light skin tone # E3.0 [1] (🤞🏻)
+1F91E 1F3FC ; RGI_Emoji_Modifier_Sequence ; crossed fingers: medium-light skin tone # E3.0 [1] (🤞🏼)
+1F91E 1F3FD ; RGI_Emoji_Modifier_Sequence ; crossed fingers: medium skin tone # E3.0 [1] (🤞🏽)
+1F91E 1F3FE ; RGI_Emoji_Modifier_Sequence ; crossed fingers: medium-dark skin tone # E3.0 [1] (🤞🏾)
+1F91E 1F3FF ; RGI_Emoji_Modifier_Sequence ; crossed fingers: dark skin tone # E3.0 [1] (🤞🏿)
+1F91F 1F3FB ; RGI_Emoji_Modifier_Sequence ; love-you gesture: light skin tone # E5.0 [1] (🤟🏻)
+1F91F 1F3FC ; RGI_Emoji_Modifier_Sequence ; love-you gesture: medium-light skin tone # E5.0 [1] (🤟🏼)
+1F91F 1F3FD ; RGI_Emoji_Modifier_Sequence ; love-you gesture: medium skin tone # E5.0 [1] (🤟🏽)
+1F91F 1F3FE ; RGI_Emoji_Modifier_Sequence ; love-you gesture: medium-dark skin tone # E5.0 [1] (🤟🏾)
+1F91F 1F3FF ; RGI_Emoji_Modifier_Sequence ; love-you gesture: dark skin tone # E5.0 [1] (🤟🏿)
+1F926 1F3FB ; RGI_Emoji_Modifier_Sequence ; person facepalming: light skin tone # E3.0 [1] (🤦🏻)
+1F926 1F3FC ; RGI_Emoji_Modifier_Sequence ; person facepalming: medium-light skin tone # E3.0 [1] (🤦🏼)
+1F926 1F3FD ; RGI_Emoji_Modifier_Sequence ; person facepalming: medium skin tone # E3.0 [1] (🤦🏽)
+1F926 1F3FE ; RGI_Emoji_Modifier_Sequence ; person facepalming: medium-dark skin tone # E3.0 [1] (🤦🏾)
+1F926 1F3FF ; RGI_Emoji_Modifier_Sequence ; person facepalming: dark skin tone # E3.0 [1] (🤦🏿)
+1F930 1F3FB ; RGI_Emoji_Modifier_Sequence ; pregnant woman: light skin tone # E3.0 [1] (🤰🏻)
+1F930 1F3FC ; RGI_Emoji_Modifier_Sequence ; pregnant woman: medium-light skin tone # E3.0 [1] (🤰🏼)
+1F930 1F3FD ; RGI_Emoji_Modifier_Sequence ; pregnant woman: medium skin tone # E3.0 [1] (🤰🏽)
+1F930 1F3FE ; RGI_Emoji_Modifier_Sequence ; pregnant woman: medium-dark skin tone # E3.0 [1] (🤰🏾)
+1F930 1F3FF ; RGI_Emoji_Modifier_Sequence ; pregnant woman: dark skin tone # E3.0 [1] (🤰🏿)
+1F931 1F3FB ; RGI_Emoji_Modifier_Sequence ; breast-feeding: light skin tone # E5.0 [1] (🤱🏻)
+1F931 1F3FC ; RGI_Emoji_Modifier_Sequence ; breast-feeding: medium-light skin tone # E5.0 [1] (🤱🏼)
+1F931 1F3FD ; RGI_Emoji_Modifier_Sequence ; breast-feeding: medium skin tone # E5.0 [1] (🤱🏽)
+1F931 1F3FE ; RGI_Emoji_Modifier_Sequence ; breast-feeding: medium-dark skin tone # E5.0 [1] (🤱🏾)
+1F931 1F3FF ; RGI_Emoji_Modifier_Sequence ; breast-feeding: dark skin tone # E5.0 [1] (🤱🏿)
+1F932 1F3FB ; RGI_Emoji_Modifier_Sequence ; palms up together: light skin tone # E5.0 [1] (🤲🏻)
+1F932 1F3FC ; RGI_Emoji_Modifier_Sequence ; palms up together: medium-light skin tone # E5.0 [1] (🤲🏼)
+1F932 1F3FD ; RGI_Emoji_Modifier_Sequence ; palms up together: medium skin tone # E5.0 [1] (🤲🏽)
+1F932 1F3FE ; RGI_Emoji_Modifier_Sequence ; palms up together: medium-dark skin tone # E5.0 [1] (🤲🏾)
+1F932 1F3FF ; RGI_Emoji_Modifier_Sequence ; palms up together: dark skin tone # E5.0 [1] (🤲🏿)
+1F933 1F3FB ; RGI_Emoji_Modifier_Sequence ; selfie: light skin tone # E3.0 [1] (🤳🏻)
+1F933 1F3FC ; RGI_Emoji_Modifier_Sequence ; selfie: medium-light skin tone # E3.0 [1] (🤳🏼)
+1F933 1F3FD ; RGI_Emoji_Modifier_Sequence ; selfie: medium skin tone # E3.0 [1] (🤳🏽)
+1F933 1F3FE ; RGI_Emoji_Modifier_Sequence ; selfie: medium-dark skin tone # E3.0 [1] (🤳🏾)
+1F933 1F3FF ; RGI_Emoji_Modifier_Sequence ; selfie: dark skin tone # E3.0 [1] (🤳🏿)
+1F934 1F3FB ; RGI_Emoji_Modifier_Sequence ; prince: light skin tone # E3.0 [1] (🤴🏻)
+1F934 1F3FC ; RGI_Emoji_Modifier_Sequence ; prince: medium-light skin tone # E3.0 [1] (🤴🏼)
+1F934 1F3FD ; RGI_Emoji_Modifier_Sequence ; prince: medium skin tone # E3.0 [1] (🤴🏽)
+1F934 1F3FE ; RGI_Emoji_Modifier_Sequence ; prince: medium-dark skin tone # E3.0 [1] (🤴🏾)
+1F934 1F3FF ; RGI_Emoji_Modifier_Sequence ; prince: dark skin tone # E3.0 [1] (🤴🏿)
+1F935 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: light skin tone # E3.0 [1] (🤵🏻)
+1F935 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: medium-light skin tone # E3.0 [1] (🤵🏼)
+1F935 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: medium skin tone # E3.0 [1] (🤵🏽)
+1F935 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: medium-dark skin tone # E3.0 [1] (🤵🏾)
+1F935 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: dark skin tone # E3.0 [1] (🤵🏿)
+1F936 1F3FB ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: light skin tone # E3.0 [1] (🤶🏻)
+1F936 1F3FC ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: medium-light skin tone # E3.0 [1] (🤶🏼)
+1F936 1F3FD ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: medium skin tone # E3.0 [1] (🤶🏽)
+1F936 1F3FE ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: medium-dark skin tone # E3.0 [1] (🤶🏾)
+1F936 1F3FF ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: dark skin tone # E3.0 [1] (🤶🏿)
+1F937 1F3FB ; RGI_Emoji_Modifier_Sequence ; person shrugging: light skin tone # E3.0 [1] (🤷🏻)
+1F937 1F3FC ; RGI_Emoji_Modifier_Sequence ; person shrugging: medium-light skin tone # E3.0 [1] (🤷🏼)
+1F937 1F3FD ; RGI_Emoji_Modifier_Sequence ; person shrugging: medium skin tone # E3.0 [1] (🤷🏽)
+1F937 1F3FE ; RGI_Emoji_Modifier_Sequence ; person shrugging: medium-dark skin tone # E3.0 [1] (🤷🏾)
+1F937 1F3FF ; RGI_Emoji_Modifier_Sequence ; person shrugging: dark skin tone # E3.0 [1] (🤷🏿)
+1F938 1F3FB ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: light skin tone # E3.0 [1] (🤸🏻)
+1F938 1F3FC ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: medium-light skin tone # E3.0 [1] (🤸🏼)
+1F938 1F3FD ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: medium skin tone # E3.0 [1] (🤸🏽)
+1F938 1F3FE ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: medium-dark skin tone # E3.0 [1] (🤸🏾)
+1F938 1F3FF ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: dark skin tone # E3.0 [1] (🤸🏿)
+1F939 1F3FB ; RGI_Emoji_Modifier_Sequence ; person juggling: light skin tone # E3.0 [1] (🤹🏻)
+1F939 1F3FC ; RGI_Emoji_Modifier_Sequence ; person juggling: medium-light skin tone # E3.0 [1] (🤹🏼)
+1F939 1F3FD ; RGI_Emoji_Modifier_Sequence ; person juggling: medium skin tone # E3.0 [1] (🤹🏽)
+1F939 1F3FE ; RGI_Emoji_Modifier_Sequence ; person juggling: medium-dark skin tone # E3.0 [1] (🤹🏾)
+1F939 1F3FF ; RGI_Emoji_Modifier_Sequence ; person juggling: dark skin tone # E3.0 [1] (🤹🏿)
+1F93D 1F3FB ; RGI_Emoji_Modifier_Sequence ; person playing water polo: light skin tone # E3.0 [1] (🤽🏻)
+1F93D 1F3FC ; RGI_Emoji_Modifier_Sequence ; person playing water polo: medium-light skin tone # E3.0 [1] (🤽🏼)
+1F93D 1F3FD ; RGI_Emoji_Modifier_Sequence ; person playing water polo: medium skin tone # E3.0 [1] (🤽🏽)
+1F93D 1F3FE ; RGI_Emoji_Modifier_Sequence ; person playing water polo: medium-dark skin tone # E3.0 [1] (🤽🏾)
+1F93D 1F3FF ; RGI_Emoji_Modifier_Sequence ; person playing water polo: dark skin tone # E3.0 [1] (🤽🏿)
+1F93E 1F3FB ; RGI_Emoji_Modifier_Sequence ; person playing handball: light skin tone # E3.0 [1] (🤾🏻)
+1F93E 1F3FC ; RGI_Emoji_Modifier_Sequence ; person playing handball: medium-light skin tone # E3.0 [1] (🤾🏼)
+1F93E 1F3FD ; RGI_Emoji_Modifier_Sequence ; person playing handball: medium skin tone # E3.0 [1] (🤾🏽)
+1F93E 1F3FE ; RGI_Emoji_Modifier_Sequence ; person playing handball: medium-dark skin tone # E3.0 [1] (🤾🏾)
+1F93E 1F3FF ; RGI_Emoji_Modifier_Sequence ; person playing handball: dark skin tone # E3.0 [1] (🤾🏿)
+1F977 1F3FB ; RGI_Emoji_Modifier_Sequence ; ninja: light skin tone # E13.0 [1] (🥷🏻)
+1F977 1F3FC ; RGI_Emoji_Modifier_Sequence ; ninja: medium-light skin tone # E13.0 [1] (🥷🏼)
+1F977 1F3FD ; RGI_Emoji_Modifier_Sequence ; ninja: medium skin tone # E13.0 [1] (🥷🏽)
+1F977 1F3FE ; RGI_Emoji_Modifier_Sequence ; ninja: medium-dark skin tone # E13.0 [1] (🥷🏾)
+1F977 1F3FF ; RGI_Emoji_Modifier_Sequence ; ninja: dark skin tone # E13.0 [1] (🥷🏿)
+1F9B5 1F3FB ; RGI_Emoji_Modifier_Sequence ; leg: light skin tone # E11.0 [1] (🦵🏻)
+1F9B5 1F3FC ; RGI_Emoji_Modifier_Sequence ; leg: medium-light skin tone # E11.0 [1] (🦵🏼)
+1F9B5 1F3FD ; RGI_Emoji_Modifier_Sequence ; leg: medium skin tone # E11.0 [1] (🦵🏽)
+1F9B5 1F3FE ; RGI_Emoji_Modifier_Sequence ; leg: medium-dark skin tone # E11.0 [1] (🦵🏾)
+1F9B5 1F3FF ; RGI_Emoji_Modifier_Sequence ; leg: dark skin tone # E11.0 [1] (🦵🏿)
+1F9B6 1F3FB ; RGI_Emoji_Modifier_Sequence ; foot: light skin tone # E11.0 [1] (🦶🏻)
+1F9B6 1F3FC ; RGI_Emoji_Modifier_Sequence ; foot: medium-light skin tone # E11.0 [1] (🦶🏼)
+1F9B6 1F3FD ; RGI_Emoji_Modifier_Sequence ; foot: medium skin tone # E11.0 [1] (🦶🏽)
+1F9B6 1F3FE ; RGI_Emoji_Modifier_Sequence ; foot: medium-dark skin tone # E11.0 [1] (🦶🏾)
+1F9B6 1F3FF ; RGI_Emoji_Modifier_Sequence ; foot: dark skin tone # E11.0 [1] (🦶🏿)
+1F9B8 1F3FB ; RGI_Emoji_Modifier_Sequence ; superhero: light skin tone # E11.0 [1] (🦸🏻)
+1F9B8 1F3FC ; RGI_Emoji_Modifier_Sequence ; superhero: medium-light skin tone # E11.0 [1] (🦸🏼)
+1F9B8 1F3FD ; RGI_Emoji_Modifier_Sequence ; superhero: medium skin tone # E11.0 [1] (🦸🏽)
+1F9B8 1F3FE ; RGI_Emoji_Modifier_Sequence ; superhero: medium-dark skin tone # E11.0 [1] (🦸🏾)
+1F9B8 1F3FF ; RGI_Emoji_Modifier_Sequence ; superhero: dark skin tone # E11.0 [1] (🦸🏿)
+1F9B9 1F3FB ; RGI_Emoji_Modifier_Sequence ; supervillain: light skin tone # E11.0 [1] (🦹🏻)
+1F9B9 1F3FC ; RGI_Emoji_Modifier_Sequence ; supervillain: medium-light skin tone # E11.0 [1] (🦹🏼)
+1F9B9 1F3FD ; RGI_Emoji_Modifier_Sequence ; supervillain: medium skin tone # E11.0 [1] (🦹🏽)
+1F9B9 1F3FE ; RGI_Emoji_Modifier_Sequence ; supervillain: medium-dark skin tone # E11.0 [1] (🦹🏾)
+1F9B9 1F3FF ; RGI_Emoji_Modifier_Sequence ; supervillain: dark skin tone # E11.0 [1] (🦹🏿)
+1F9BB 1F3FB ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: light skin tone # E12.0 [1] (🦻🏻)
+1F9BB 1F3FC ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: medium-light skin tone # E12.0 [1] (🦻🏼)
+1F9BB 1F3FD ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: medium skin tone # E12.0 [1] (🦻🏽)
+1F9BB 1F3FE ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: medium-dark skin tone # E12.0 [1] (🦻🏾)
+1F9BB 1F3FF ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: dark skin tone # E12.0 [1] (🦻🏿)
+1F9CD 1F3FB ; RGI_Emoji_Modifier_Sequence ; person standing: light skin tone # E12.0 [1] (🧍🏻)
+1F9CD 1F3FC ; RGI_Emoji_Modifier_Sequence ; person standing: medium-light skin tone # E12.0 [1] (🧍🏼)
+1F9CD 1F3FD ; RGI_Emoji_Modifier_Sequence ; person standing: medium skin tone # E12.0 [1] (🧍🏽)
+1F9CD 1F3FE ; RGI_Emoji_Modifier_Sequence ; person standing: medium-dark skin tone # E12.0 [1] (🧍🏾)
+1F9CD 1F3FF ; RGI_Emoji_Modifier_Sequence ; person standing: dark skin tone # E12.0 [1] (🧍🏿)
+1F9CE 1F3FB ; RGI_Emoji_Modifier_Sequence ; person kneeling: light skin tone # E12.0 [1] (🧎🏻)
+1F9CE 1F3FC ; RGI_Emoji_Modifier_Sequence ; person kneeling: medium-light skin tone # E12.0 [1] (🧎🏼)
+1F9CE 1F3FD ; RGI_Emoji_Modifier_Sequence ; person kneeling: medium skin tone # E12.0 [1] (🧎🏽)
+1F9CE 1F3FE ; RGI_Emoji_Modifier_Sequence ; person kneeling: medium-dark skin tone # E12.0 [1] (🧎🏾)
+1F9CE 1F3FF ; RGI_Emoji_Modifier_Sequence ; person kneeling: dark skin tone # E12.0 [1] (🧎🏿)
+1F9CF 1F3FB ; RGI_Emoji_Modifier_Sequence ; deaf person: light skin tone # E12.0 [1] (🧏🏻)
+1F9CF 1F3FC ; RGI_Emoji_Modifier_Sequence ; deaf person: medium-light skin tone # E12.0 [1] (🧏🏼)
+1F9CF 1F3FD ; RGI_Emoji_Modifier_Sequence ; deaf person: medium skin tone # E12.0 [1] (🧏🏽)
+1F9CF 1F3FE ; RGI_Emoji_Modifier_Sequence ; deaf person: medium-dark skin tone # E12.0 [1] (🧏🏾)
+1F9CF 1F3FF ; RGI_Emoji_Modifier_Sequence ; deaf person: dark skin tone # E12.0 [1] (🧏🏿)
+1F9D1 1F3FB ; RGI_Emoji_Modifier_Sequence ; person: light skin tone # E5.0 [1] (🧑🏻)
+1F9D1 1F3FC ; RGI_Emoji_Modifier_Sequence ; person: medium-light skin tone # E5.0 [1] (🧑🏼)
+1F9D1 1F3FD ; RGI_Emoji_Modifier_Sequence ; person: medium skin tone # E5.0 [1] (🧑🏽)
+1F9D1 1F3FE ; RGI_Emoji_Modifier_Sequence ; person: medium-dark skin tone # E5.0 [1] (🧑🏾)
+1F9D1 1F3FF ; RGI_Emoji_Modifier_Sequence ; person: dark skin tone # E5.0 [1] (🧑🏿)
+1F9D2 1F3FB ; RGI_Emoji_Modifier_Sequence ; child: light skin tone # E5.0 [1] (🧒🏻)
+1F9D2 1F3FC ; RGI_Emoji_Modifier_Sequence ; child: medium-light skin tone # E5.0 [1] (🧒🏼)
+1F9D2 1F3FD ; RGI_Emoji_Modifier_Sequence ; child: medium skin tone # E5.0 [1] (🧒🏽)
+1F9D2 1F3FE ; RGI_Emoji_Modifier_Sequence ; child: medium-dark skin tone # E5.0 [1] (🧒🏾)
+1F9D2 1F3FF ; RGI_Emoji_Modifier_Sequence ; child: dark skin tone # E5.0 [1] (🧒🏿)
+1F9D3 1F3FB ; RGI_Emoji_Modifier_Sequence ; older person: light skin tone # E5.0 [1] (🧓🏻)
+1F9D3 1F3FC ; RGI_Emoji_Modifier_Sequence ; older person: medium-light skin tone # E5.0 [1] (🧓🏼)
+1F9D3 1F3FD ; RGI_Emoji_Modifier_Sequence ; older person: medium skin tone # E5.0 [1] (🧓🏽)
+1F9D3 1F3FE ; RGI_Emoji_Modifier_Sequence ; older person: medium-dark skin tone # E5.0 [1] (🧓🏾)
+1F9D3 1F3FF ; RGI_Emoji_Modifier_Sequence ; older person: dark skin tone # E5.0 [1] (🧓🏿)
+1F9D4 1F3FB ; RGI_Emoji_Modifier_Sequence ; person: light skin tone, beard # E5.0 [1] (🧔🏻)
+1F9D4 1F3FC ; RGI_Emoji_Modifier_Sequence ; person: medium-light skin tone, beard # E5.0 [1] (🧔🏼)
+1F9D4 1F3FD ; RGI_Emoji_Modifier_Sequence ; person: medium skin tone, beard # E5.0 [1] (🧔🏽)
+1F9D4 1F3FE ; RGI_Emoji_Modifier_Sequence ; person: medium-dark skin tone, beard # E5.0 [1] (🧔🏾)
+1F9D4 1F3FF ; RGI_Emoji_Modifier_Sequence ; person: dark skin tone, beard # E5.0 [1] (🧔🏿)
+1F9D5 1F3FB ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: light skin tone # E5.0 [1] (🧕🏻)
+1F9D5 1F3FC ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: medium-light skin tone # E5.0 [1] (🧕🏼)
+1F9D5 1F3FD ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: medium skin tone # E5.0 [1] (🧕🏽)
+1F9D5 1F3FE ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: medium-dark skin tone # E5.0 [1] (🧕🏾)
+1F9D5 1F3FF ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: dark skin tone # E5.0 [1] (🧕🏿)
+1F9D6 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in steamy room: light skin tone # E5.0 [1] (🧖🏻)
+1F9D6 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in steamy room: medium-light skin tone # E5.0 [1] (🧖🏼)
+1F9D6 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in steamy room: medium skin tone # E5.0 [1] (🧖🏽)
+1F9D6 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in steamy room: medium-dark skin tone # E5.0 [1] (🧖🏾)
+1F9D6 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in steamy room: dark skin tone # E5.0 [1] (🧖🏿)
+1F9D7 1F3FB ; RGI_Emoji_Modifier_Sequence ; person climbing: light skin tone # E5.0 [1] (🧗🏻)
+1F9D7 1F3FC ; RGI_Emoji_Modifier_Sequence ; person climbing: medium-light skin tone # E5.0 [1] (🧗🏼)
+1F9D7 1F3FD ; RGI_Emoji_Modifier_Sequence ; person climbing: medium skin tone # E5.0 [1] (🧗🏽)
+1F9D7 1F3FE ; RGI_Emoji_Modifier_Sequence ; person climbing: medium-dark skin tone # E5.0 [1] (🧗🏾)
+1F9D7 1F3FF ; RGI_Emoji_Modifier_Sequence ; person climbing: dark skin tone # E5.0 [1] (🧗🏿)
+1F9D8 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in lotus position: light skin tone # E5.0 [1] (🧘🏻)
+1F9D8 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in lotus position: medium-light skin tone # E5.0 [1] (🧘🏼)
+1F9D8 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in lotus position: medium skin tone # E5.0 [1] (🧘🏽)
+1F9D8 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in lotus position: medium-dark skin tone # E5.0 [1] (🧘🏾)
+1F9D8 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in lotus position: dark skin tone # E5.0 [1] (🧘🏿)
+1F9D9 1F3FB ; RGI_Emoji_Modifier_Sequence ; mage: light skin tone # E5.0 [1] (🧙🏻)
+1F9D9 1F3FC ; RGI_Emoji_Modifier_Sequence ; mage: medium-light skin tone # E5.0 [1] (🧙🏼)
+1F9D9 1F3FD ; RGI_Emoji_Modifier_Sequence ; mage: medium skin tone # E5.0 [1] (🧙🏽)
+1F9D9 1F3FE ; RGI_Emoji_Modifier_Sequence ; mage: medium-dark skin tone # E5.0 [1] (🧙🏾)
+1F9D9 1F3FF ; RGI_Emoji_Modifier_Sequence ; mage: dark skin tone # E5.0 [1] (🧙🏿)
+1F9DA 1F3FB ; RGI_Emoji_Modifier_Sequence ; fairy: light skin tone # E5.0 [1] (🧚🏻)
+1F9DA 1F3FC ; RGI_Emoji_Modifier_Sequence ; fairy: medium-light skin tone # E5.0 [1] (🧚🏼)
+1F9DA 1F3FD ; RGI_Emoji_Modifier_Sequence ; fairy: medium skin tone # E5.0 [1] (🧚🏽)
+1F9DA 1F3FE ; RGI_Emoji_Modifier_Sequence ; fairy: medium-dark skin tone # E5.0 [1] (🧚🏾)
+1F9DA 1F3FF ; RGI_Emoji_Modifier_Sequence ; fairy: dark skin tone # E5.0 [1] (🧚🏿)
+1F9DB 1F3FB ; RGI_Emoji_Modifier_Sequence ; vampire: light skin tone # E5.0 [1] (🧛🏻)
+1F9DB 1F3FC ; RGI_Emoji_Modifier_Sequence ; vampire: medium-light skin tone # E5.0 [1] (🧛🏼)
+1F9DB 1F3FD ; RGI_Emoji_Modifier_Sequence ; vampire: medium skin tone # E5.0 [1] (🧛🏽)
+1F9DB 1F3FE ; RGI_Emoji_Modifier_Sequence ; vampire: medium-dark skin tone # E5.0 [1] (🧛🏾)
+1F9DB 1F3FF ; RGI_Emoji_Modifier_Sequence ; vampire: dark skin tone # E5.0 [1] (🧛🏿)
+1F9DC 1F3FB ; RGI_Emoji_Modifier_Sequence ; merperson: light skin tone # E5.0 [1] (🧜🏻)
+1F9DC 1F3FC ; RGI_Emoji_Modifier_Sequence ; merperson: medium-light skin tone # E5.0 [1] (🧜🏼)
+1F9DC 1F3FD ; RGI_Emoji_Modifier_Sequence ; merperson: medium skin tone # E5.0 [1] (🧜🏽)
+1F9DC 1F3FE ; RGI_Emoji_Modifier_Sequence ; merperson: medium-dark skin tone # E5.0 [1] (🧜🏾)
+1F9DC 1F3FF ; RGI_Emoji_Modifier_Sequence ; merperson: dark skin tone # E5.0 [1] (🧜🏿)
+1F9DD 1F3FB ; RGI_Emoji_Modifier_Sequence ; elf: light skin tone # E5.0 [1] (🧝🏻)
+1F9DD 1F3FC ; RGI_Emoji_Modifier_Sequence ; elf: medium-light skin tone # E5.0 [1] (🧝🏼)
+1F9DD 1F3FD ; RGI_Emoji_Modifier_Sequence ; elf: medium skin tone # E5.0 [1] (🧝🏽)
+1F9DD 1F3FE ; RGI_Emoji_Modifier_Sequence ; elf: medium-dark skin tone # E5.0 [1] (🧝🏾)
+1F9DD 1F3FF ; RGI_Emoji_Modifier_Sequence ; elf: dark skin tone # E5.0 [1] (🧝🏿)
+1FAC3 1F3FB ; RGI_Emoji_Modifier_Sequence ; pregnant man: light skin tone # E14.0 [1] (🫃🏻)
+1FAC3 1F3FC ; RGI_Emoji_Modifier_Sequence ; pregnant man: medium-light skin tone # E14.0 [1] (🫃🏼)
+1FAC3 1F3FD ; RGI_Emoji_Modifier_Sequence ; pregnant man: medium skin tone # E14.0 [1] (🫃🏽)
+1FAC3 1F3FE ; RGI_Emoji_Modifier_Sequence ; pregnant man: medium-dark skin tone # E14.0 [1] (🫃🏾)
+1FAC3 1F3FF ; RGI_Emoji_Modifier_Sequence ; pregnant man: dark skin tone # E14.0 [1] (🫃🏿)
+1FAC4 1F3FB ; RGI_Emoji_Modifier_Sequence ; pregnant person: light skin tone # E14.0 [1] (🫄🏻)
+1FAC4 1F3FC ; RGI_Emoji_Modifier_Sequence ; pregnant person: medium-light skin tone # E14.0 [1] (🫄🏼)
+1FAC4 1F3FD ; RGI_Emoji_Modifier_Sequence ; pregnant person: medium skin tone # E14.0 [1] (🫄🏽)
+1FAC4 1F3FE ; RGI_Emoji_Modifier_Sequence ; pregnant person: medium-dark skin tone # E14.0 [1] (🫄🏾)
+1FAC4 1F3FF ; RGI_Emoji_Modifier_Sequence ; pregnant person: dark skin tone # E14.0 [1] (🫄🏿)
+1FAC5 1F3FB ; RGI_Emoji_Modifier_Sequence ; person with crown: light skin tone # E14.0 [1] (🫅🏻)
+1FAC5 1F3FC ; RGI_Emoji_Modifier_Sequence ; person with crown: medium-light skin tone # E14.0 [1] (🫅🏼)
+1FAC5 1F3FD ; RGI_Emoji_Modifier_Sequence ; person with crown: medium skin tone # E14.0 [1] (🫅🏽)
+1FAC5 1F3FE ; RGI_Emoji_Modifier_Sequence ; person with crown: medium-dark skin tone # E14.0 [1] (🫅🏾)
+1FAC5 1F3FF ; RGI_Emoji_Modifier_Sequence ; person with crown: dark skin tone # E14.0 [1] (🫅🏿)
+1FAF0 1F3FB ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: light skin tone # E14.0 [1] (🫰🏻)
+1FAF0 1F3FC ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: medium-light skin tone #E14.0 [1] (🫰🏼)
+1FAF0 1F3FD ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: medium skin tone # E14.0 [1] (🫰🏽)
+1FAF0 1F3FE ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: medium-dark skin tone #E14.0 [1] (🫰🏾)
+1FAF0 1F3FF ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: dark skin tone # E14.0 [1] (🫰🏿)
+1FAF1 1F3FB ; RGI_Emoji_Modifier_Sequence ; rightwards hand: light skin tone # E14.0 [1] (🫱🏻)
+1FAF1 1F3FC ; RGI_Emoji_Modifier_Sequence ; rightwards hand: medium-light skin tone # E14.0 [1] (🫱🏼)
+1FAF1 1F3FD ; RGI_Emoji_Modifier_Sequence ; rightwards hand: medium skin tone # E14.0 [1] (🫱🏽)
+1FAF1 1F3FE ; RGI_Emoji_Modifier_Sequence ; rightwards hand: medium-dark skin tone # E14.0 [1] (🫱🏾)
+1FAF1 1F3FF ; RGI_Emoji_Modifier_Sequence ; rightwards hand: dark skin tone # E14.0 [1] (🫱🏿)
+1FAF2 1F3FB ; RGI_Emoji_Modifier_Sequence ; leftwards hand: light skin tone # E14.0 [1] (🫲🏻)
+1FAF2 1F3FC ; RGI_Emoji_Modifier_Sequence ; leftwards hand: medium-light skin tone # E14.0 [1] (🫲🏼)
+1FAF2 1F3FD ; RGI_Emoji_Modifier_Sequence ; leftwards hand: medium skin tone # E14.0 [1] (🫲🏽)
+1FAF2 1F3FE ; RGI_Emoji_Modifier_Sequence ; leftwards hand: medium-dark skin tone # E14.0 [1] (🫲🏾)
+1FAF2 1F3FF ; RGI_Emoji_Modifier_Sequence ; leftwards hand: dark skin tone # E14.0 [1] (🫲🏿)
+1FAF3 1F3FB ; RGI_Emoji_Modifier_Sequence ; palm down hand: light skin tone # E14.0 [1] (🫳🏻)
+1FAF3 1F3FC ; RGI_Emoji_Modifier_Sequence ; palm down hand: medium-light skin tone # E14.0 [1] (🫳🏼)
+1FAF3 1F3FD ; RGI_Emoji_Modifier_Sequence ; palm down hand: medium skin tone # E14.0 [1] (🫳🏽)
+1FAF3 1F3FE ; RGI_Emoji_Modifier_Sequence ; palm down hand: medium-dark skin tone # E14.0 [1] (🫳🏾)
+1FAF3 1F3FF ; RGI_Emoji_Modifier_Sequence ; palm down hand: dark skin tone # E14.0 [1] (🫳🏿)
+1FAF4 1F3FB ; RGI_Emoji_Modifier_Sequence ; palm up hand: light skin tone # E14.0 [1] (🫴🏻)
+1FAF4 1F3FC ; RGI_Emoji_Modifier_Sequence ; palm up hand: medium-light skin tone # E14.0 [1] (🫴🏼)
+1FAF4 1F3FD ; RGI_Emoji_Modifier_Sequence ; palm up hand: medium skin tone # E14.0 [1] (🫴🏽)
+1FAF4 1F3FE ; RGI_Emoji_Modifier_Sequence ; palm up hand: medium-dark skin tone # E14.0 [1] (🫴🏾)
+1FAF4 1F3FF ; RGI_Emoji_Modifier_Sequence ; palm up hand: dark skin tone # E14.0 [1] (🫴🏿)
+1FAF5 1F3FB ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: light skin tone # E14.0 [1] (🫵🏻)
+1FAF5 1F3FC ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: medium-light skin tone # E14.0 [1] (🫵🏼)
+1FAF5 1F3FD ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: medium skin tone # E14.0 [1] (🫵🏽)
+1FAF5 1F3FE ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: medium-dark skin tone # E14.0 [1] (🫵🏾)
+1FAF5 1F3FF ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: dark skin tone # E14.0 [1] (🫵🏿)
+1FAF6 1F3FB ; RGI_Emoji_Modifier_Sequence ; heart hands: light skin tone # E14.0 [1] (🫶🏻)
+1FAF6 1F3FC ; RGI_Emoji_Modifier_Sequence ; heart hands: medium-light skin tone # E14.0 [1] (🫶🏼)
+1FAF6 1F3FD ; RGI_Emoji_Modifier_Sequence ; heart hands: medium skin tone # E14.0 [1] (🫶🏽)
+1FAF6 1F3FE ; RGI_Emoji_Modifier_Sequence ; heart hands: medium-dark skin tone # E14.0 [1] (🫶🏾)
+1FAF6 1F3FF ; RGI_Emoji_Modifier_Sequence ; heart hands: dark skin tone # E14.0 [1] (🫶🏿)
+
+# Total elements: 645
+
+#EOF
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/emoji-zwj-sequences.txt b/Build/source/libs/icu/icu-src/source/data/unidata/emoji-zwj-sequences.txt
new file mode 100644
index 00000000000..1d64edcdc70
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/emoji-zwj-sequences.txt
@@ -0,0 +1,1410 @@
+# emoji-zwj-sequences.txt
+# Date: 2021-06-08, 05:19:16 GMT
+# © 2021 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Emoji ZWJ Sequences for UTS #51
+# Version: 14.0
+#
+# For documentation and usage, see http://www.unicode.org/reports/tr51
+#
+# Format:
+# code_point(s) ; type_field ; description # comments
+# Fields:
+# code_point(s): one or more code points in hex format, separated by spaces
+# type_field :RGI_Emoji_ZWJ_Sequence
+# The type_field is a convenience for parsing the emoji sequence files, and is not intended to be maintained as a property.
+# short name: CLDR short name of sequence; characters may be escaped with \x{hex}.
+#
+# For the purpose of regular expressions, the above type field defines the name of
+# a binary property of strings. The short name of the property is the same as the long name.
+#
+# Characters and sequences are listed in code point order. Users should be shown a more natural order.
+# See the CLDR collation order for Emoji.
+
+# ================================================
+
+# RGI_Emoji_ZWJ_Sequence: Family
+
+1F468 200D 2764 FE0F 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man # E2.0 [1] (👨‍❤️‍👨)
+1F468 200D 2764 FE0F 200D 1F48B 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; kiss: man, man # E2.0 [1] (👨‍❤️‍💋‍👨)
+1F468 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, boy # E4.0 [1] (👨‍👦)
+1F468 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, boy, boy # E4.0 [1] (👨‍👦‍👦)
+1F468 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, girl # E4.0 [1] (👨‍👧)
+1F468 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, girl, boy # E4.0 [1] (👨‍👧‍👦)
+1F468 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, girl, girl # E4.0 [1] (👨‍👧‍👧)
+1F468 200D 1F468 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, boy # E2.0 [1] (👨‍👨‍👦)
+1F468 200D 1F468 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, boy, boy # E2.0 [1] (👨‍👨‍👦‍👦)
+1F468 200D 1F468 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, girl # E2.0 [1] (👨‍👨‍👧)
+1F468 200D 1F468 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, girl, boy # E2.0 [1] (👨‍👨‍👧‍👦)
+1F468 200D 1F468 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, girl, girl # E2.0 [1] (👨‍👨‍👧‍👧)
+1F468 200D 1F469 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, boy # E2.0 [1] (👨‍👩‍👦)
+1F468 200D 1F469 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, boy, boy # E2.0 [1] (👨‍👩‍👦‍👦)
+1F468 200D 1F469 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, girl # E2.0 [1] (👨‍👩‍👧)
+1F468 200D 1F469 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, girl, boy # E2.0 [1] (👨‍👩‍👧‍👦)
+1F468 200D 1F469 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, girl, girl # E2.0 [1] (👨‍👩‍👧‍👧)
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone # E13.1 [1] (👨🏻‍❤️‍👨🏻)
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone, medium-light skin tone #E13.1[1] (👨🏻‍❤️‍👨🏼)
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone, medium skin tone # E13.1 [1] (👨🏻‍❤️‍👨🏽)
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone, medium-dark skin tone #E13.1[1] (👨🏻‍❤️‍👨🏾)
+1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone, dark skin tone # E13.1 [1] (👨🏻‍❤️‍👨🏿)
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏻)
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, medium-light skin tone #E13.1 [1] (👨🏻‍❤️‍💋‍👨🏼)
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, medium skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏽)
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, medium-dark skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏾)
+1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, dark skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏿)
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium-light skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏼)
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏽)
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium-dark skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏾)
+1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, dark skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏿)
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, light skin tone #E13.1[1] (👨🏼‍❤️‍👨🏻)
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone # E13.1 [1] (👨🏼‍❤️‍👨🏼)
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, medium skin tone #E13.1[1] (👨🏼‍❤️‍👨🏽)
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👨🏼‍❤️‍👨🏾)
+1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, dark skin tone #E13.1[1] (👨🏼‍❤️‍👨🏿)
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, light skin tone #E13.1 [1] (👨🏼‍❤️‍💋‍👨🏻)
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone # E13.1 [1] (👨🏼‍❤️‍💋‍👨🏼)
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, medium skin tone #E13.1 [1] (👨🏼‍❤️‍💋‍👨🏽)
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👨🏼‍❤️‍💋‍👨🏾)
+1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, dark skin tone # E13.1 [1] (👨🏼‍❤️‍💋‍👨🏿)
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, light skin tone # E12.0 [1] (👨🏼‍🤝‍👨🏻)
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, medium skin tone # E12.1 [1] (👨🏼‍🤝‍👨🏽)
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, medium-dark skin tone #E12.1 [1] (👨🏼‍🤝‍👨🏾)
+1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, dark skin tone # E12.1 [1] (👨🏼‍🤝‍👨🏿)
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, light skin tone # E13.1 [1] (👨🏽‍❤️‍👨🏻)
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, medium-light skin tone #E13.1[1] (👨🏽‍❤️‍👨🏼)
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone # E13.1 [1] (👨🏽‍❤️‍👨🏽)
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, medium-dark skin tone #E13.1[1] (👨🏽‍❤️‍👨🏾)
+1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, dark skin tone # E13.1 [1] (👨🏽‍❤️‍👨🏿)
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, light skin tone # E13.1 [1] (👨🏽‍❤️‍💋‍👨🏻)
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, medium-light skin tone #E13.1 [1] (👨🏽‍❤️‍💋‍👨🏼)
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone # E13.1 [1] (👨🏽‍❤️‍💋‍👨🏽)
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, medium-dark skin tone #E13.1 [1] (👨🏽‍❤️‍💋‍👨🏾)
+1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, dark skin tone # E13.1 [1] (👨🏽‍❤️‍💋‍👨🏿)
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, light skin tone # E12.0 [1] (👨🏽‍🤝‍👨🏻)
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, medium-light skin tone # E12.0 [1] (👨🏽‍🤝‍👨🏼)
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, medium-dark skin tone # E12.1 [1] (👨🏽‍🤝‍👨🏾)
+1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, dark skin tone # E12.1 [1] (👨🏽‍🤝‍👨🏿)
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, light skin tone #E13.1[1] (👨🏾‍❤️‍👨🏻)
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👨🏾‍❤️‍👨🏼)
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, medium skin tone #E13.1[1] (👨🏾‍❤️‍👨🏽)
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone # E13.1 [1] (👨🏾‍❤️‍👨🏾)
+1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, dark skin tone #E13.1[1] (👨🏾‍❤️‍👨🏿)
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, light skin tone # E13.1 [1] (👨🏾‍❤️‍💋‍👨🏻)
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👨🏾‍❤️‍💋‍👨🏼)
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, medium skin tone #E13.1 [1] (👨🏾‍❤️‍💋‍👨🏽)
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone # E13.1 [1] (👨🏾‍❤️‍💋‍👨🏾)
+1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, dark skin tone # E13.1 [1] (👨🏾‍❤️‍💋‍👨🏿)
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, light skin tone # E12.0 [1] (👨🏾‍🤝‍👨🏻)
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, medium-light skin tone #E12.0 [1] (👨🏾‍🤝‍👨🏼)
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, medium skin tone # E12.0 [1] (👨🏾‍🤝‍👨🏽)
+1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, dark skin tone # E12.1 [1] (👨🏾‍🤝‍👨🏿)
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, light skin tone # E13.1 [1] (👨🏿‍❤️‍👨🏻)
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, medium-light skin tone #E13.1[1] (👨🏿‍❤️‍👨🏼)
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, medium skin tone # E13.1 [1] (👨🏿‍❤️‍👨🏽)
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, medium-dark skin tone #E13.1[1] (👨🏿‍❤️‍👨🏾)
+1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone # E13.1 [1] (👨🏿‍❤️‍👨🏿)
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, light skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏻)
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, medium-light skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏼)
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, medium skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏽)
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, medium-dark skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏾)
+1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏿)
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, light skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏻)
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium-light skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏼)
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏽)
+1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium-dark skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏾)
+1F469 200D 2764 FE0F 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man # E2.0 [1] (👩‍❤️‍👨)
+1F469 200D 2764 FE0F 200D 1F469 ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman # E2.0 [1] (👩‍❤️‍👩)
+1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; kiss: woman, man # E2.0 [1] (👩‍❤️‍💋‍👨)
+1F469 200D 2764 FE0F 200D 1F48B 200D 1F469 ; RGI_Emoji_ZWJ_Sequence ; kiss: woman, woman # E2.0 [1] (👩‍❤️‍💋‍👩)
+1F469 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, boy # E4.0 [1] (👩‍👦)
+1F469 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, boy, boy # E4.0 [1] (👩‍👦‍👦)
+1F469 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: woman, girl # E4.0 [1] (👩‍👧)
+1F469 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, girl, boy # E4.0 [1] (👩‍👧‍👦)
+1F469 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: woman, girl, girl # E4.0 [1] (👩‍👧‍👧)
+1F469 200D 1F469 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, boy # E2.0 [1] (👩‍👩‍👦)
+1F469 200D 1F469 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, boy, boy # E2.0 [1] (👩‍👩‍👦‍👦)
+1F469 200D 1F469 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, girl # E2.0 [1] (👩‍👩‍👧)
+1F469 200D 1F469 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, girl, boy # E2.0 [1] (👩‍👩‍👧‍👦)
+1F469 200D 1F469 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, girl, girl # E2.0 [1] (👩‍👩‍👧‍👧)
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone # E13.1 [1] (👩🏻‍❤️‍👨🏻)
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone, medium-light skin tone #E13.1[1] (👩🏻‍❤️‍👨🏼)
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone, medium skin tone #E13.1 [1] (👩🏻‍❤️‍👨🏽)
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone, medium-dark skin tone #E13.1[1] (👩🏻‍❤️‍👨🏾)
+1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone, dark skin tone # E13.1 [1] (👩🏻‍❤️‍👨🏿)
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone # E13.1 [1] (👩🏻‍❤️‍👩🏻)
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone, medium-light skin tone #E13.1[1] (👩🏻‍❤️‍👩🏼)
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone, medium skin tone #E13.1[1] (👩🏻‍❤️‍👩🏽)
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone, medium-dark skin tone #E13.1[1] (👩🏻‍❤️‍👩🏾)
+1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone, dark skin tone #E13.1 [1] (👩🏻‍❤️‍👩🏿)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👨🏻)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone, medium-light skin tone #E13.1[1] (👩🏻‍❤️‍💋‍👨🏼)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone, medium skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👨🏽)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone, medium-dark skin tone #E13.1 [1] (👩🏻‍❤️‍💋‍👨🏾)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone, dark skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👨🏿)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👩🏻)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, medium-light skin tone #E13.1[1] (👩🏻‍❤️‍💋‍👩🏼)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, medium skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👩🏽)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, medium-dark skin tone #E13.1[1] (👩🏻‍❤️‍💋‍👩🏾)
+1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, dark skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👩🏿)
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium-light skin tone #E12.0[1] (👩🏻‍🤝‍👨🏼)
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium skin tone # E12.0 [1] (👩🏻‍🤝‍👨🏽)
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium-dark skin tone #E12.0[1] (👩🏻‍🤝‍👨🏾)
+1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, dark skin tone # E12.0 [1] (👩🏻‍🤝‍👨🏿)
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, medium-light skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏼)
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, medium skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏽)
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, medium-dark skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏾)
+1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, dark skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏿)
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍👨🏻)
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍👨🏼)
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍👨🏽)
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍👨🏾)
+1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, dark skin tone #E13.1[1] (👩🏼‍❤️‍👨🏿)
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍👩🏻)
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍👩🏼)
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍👩🏽)
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍👩🏾)
+1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone, dark skin tone #E13.1[1] (👩🏼‍❤️‍👩🏿)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👨🏻)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍💋‍👨🏼)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👨🏽)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👨🏾)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone, dark skin tone #E13.1 [1] (👩🏼‍❤️‍💋‍👨🏿)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏻)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍💋‍👩🏼)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏽)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏾)
+1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, dark skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏿)
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, light skin tone #E12.0[1] (👩🏼‍🤝‍👨🏻)
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, medium skin tone #E12.0[1] (👩🏼‍🤝‍👨🏽)
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, medium-dark skin tone #E12.0[1] (👩🏼‍🤝‍👨🏾)
+1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, dark skin tone #E12.0[1] (👩🏼‍🤝‍👨🏿)
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, light skin tone # E12.0 [1] (👩🏼‍🤝‍👩🏻)
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, medium skin tone # E12.1 [1] (👩🏼‍🤝‍👩🏽)
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, medium-dark skin tone #E12.1[1] (👩🏼‍🤝‍👩🏾)
+1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, dark skin tone # E12.1 [1] (👩🏼‍🤝‍👩🏿)
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, light skin tone #E13.1 [1] (👩🏽‍❤️‍👨🏻)
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍👨🏼)
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone # E13.1 [1] (👩🏽‍❤️‍👨🏽)
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍👨🏾)
+1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, dark skin tone #E13.1 [1] (👩🏽‍❤️‍👨🏿)
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone, light skin tone #E13.1[1] (👩🏽‍❤️‍👩🏻)
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍👩🏼)
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone # E13.1 [1] (👩🏽‍❤️‍👩🏽)
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍👩🏾)
+1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone, dark skin tone #E13.1[1] (👩🏽‍❤️‍👩🏿)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone, light skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👨🏻)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👨🏼)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👨🏽)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👨🏾)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone, dark skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👨🏿)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, light skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👩🏻)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👩🏼)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👩🏽)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👩🏾)
+1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, dark skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👩🏿)
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, light skin tone # E12.0 [1] (👩🏽‍🤝‍👨🏻)
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, medium-light skin tone #E12.0[1] (👩🏽‍🤝‍👨🏼)
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, medium-dark skin tone #E12.0[1] (👩🏽‍🤝‍👨🏾)
+1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, dark skin tone # E12.0 [1] (👩🏽‍🤝‍👨🏿)
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, light skin tone # E12.0 [1] (👩🏽‍🤝‍👩🏻)
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, medium-light skin tone # E12.0 [1] (👩🏽‍🤝‍👩🏼)
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, medium-dark skin tone # E12.1 [1] (👩🏽‍🤝‍👩🏾)
+1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, dark skin tone # E12.1 [1] (👩🏽‍🤝‍👩🏿)
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, light skin tone #E13.1[1] (👩🏾‍❤️‍👨🏻)
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍👨🏼)
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍👨🏽)
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍👨🏾)
+1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, dark skin tone #E13.1[1] (👩🏾‍❤️‍👨🏿)
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone, light skin tone #E13.1[1] (👩🏾‍❤️‍👩🏻)
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍👩🏼)
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍👩🏽)
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍👩🏾)
+1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone, dark skin tone #E13.1[1] (👩🏾‍❤️‍👩🏿)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone, light skin tone #E13.1 [1] (👩🏾‍❤️‍💋‍👨🏻)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👨🏼)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👨🏽)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍💋‍👨🏾)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone, dark skin tone #E13.1 [1] (👩🏾‍❤️‍💋‍👨🏿)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, light skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏻)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏼)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏽)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍💋‍👩🏾)
+1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, dark skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏿)
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, light skin tone #E12.0[1] (👩🏾‍🤝‍👨🏻)
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, medium-light skin tone #E12.0[1] (👩🏾‍🤝‍👨🏼)
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, medium skin tone #E12.0[1] (👩🏾‍🤝‍👨🏽)
+1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, dark skin tone #E12.0[1] (👩🏾‍🤝‍👨🏿)
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, light skin tone # E12.0 [1] (👩🏾‍🤝‍👩🏻)
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, medium-light skin tone #E12.0[1] (👩🏾‍🤝‍👩🏼)
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, medium skin tone # E12.0 [1] (👩🏾‍🤝‍👩🏽)
+1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, dark skin tone # E12.1 [1] (👩🏾‍🤝‍👩🏿)
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, light skin tone # E13.1 [1] (👩🏿‍❤️‍👨🏻)
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, medium-light skin tone #E13.1[1] (👩🏿‍❤️‍👨🏼)
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, medium skin tone #E13.1 [1] (👩🏿‍❤️‍👨🏽)
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, medium-dark skin tone #E13.1[1] (👩🏿‍❤️‍👨🏾)
+1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone # E13.1 [1] (👩🏿‍❤️‍👨🏿)
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone, light skin tone #E13.1 [1] (👩🏿‍❤️‍👩🏻)
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone, medium-light skin tone #E13.1[1] (👩🏿‍❤️‍👩🏼)
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone, medium skin tone #E13.1[1] (👩🏿‍❤️‍👩🏽)
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone, medium-dark skin tone #E13.1[1] (👩🏿‍❤️‍👩🏾)
+1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone # E13.1 [1] (👩🏿‍❤️‍👩🏿)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone, light skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👨🏻)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone, medium-light skin tone #E13.1 [1] (👩🏿‍❤️‍💋‍👨🏼)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone, medium skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👨🏽)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone, medium-dark skin tone #E13.1 [1] (👩🏿‍❤️‍💋‍👨🏾)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👨🏿)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, light skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👩🏻)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, medium-light skin tone #E13.1[1] (👩🏿‍❤️‍💋‍👩🏼)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, medium skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👩🏽)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, medium-dark skin tone #E13.1[1] (👩🏿‍❤️‍💋‍👩🏾)
+1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👩🏿)
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, light skin tone # E12.0 [1] (👩🏿‍🤝‍👨🏻)
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, medium-light skin tone #E12.0[1] (👩🏿‍🤝‍👨🏼)
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, medium skin tone # E12.0 [1] (👩🏿‍🤝‍👨🏽)
+1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, medium-dark skin tone #E12.0[1] (👩🏿‍🤝‍👨🏾)
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, light skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏻)
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium-light skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏼)
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏽)
+1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium-dark skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏾)
+1F9D1 200D 1F91D 200D 1F9D1 ; RGI_Emoji_ZWJ_Sequence ; people holding hands # E12.0 [1] (🧑‍🤝‍🧑)
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: person, person, light skin tone, medium-light skin tone #E13.1[1] (🧑🏻‍❤️‍💋‍🧑🏼)
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: person, person, light skin tone, medium skin tone #E13.1 [1] (🧑🏻‍❤️‍💋‍🧑🏽)
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: person, person, light skin tone, medium-dark skin tone #E13.1[1] (🧑🏻‍❤️‍💋‍🧑🏾)
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: person, person, light skin tone, dark skin tone # E13.1 [1] (🧑🏻‍❤️‍💋‍🧑🏿)
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, light skin tone, medium-light skin tone #E13.1[1] (🧑🏻‍❤️‍🧑🏼)
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, light skin tone, medium skin tone #E13.1[1] (🧑🏻‍❤️‍🧑🏽)
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, light skin tone, medium-dark skin tone #E13.1[1] (🧑🏻‍❤️‍🧑🏾)
+1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, light skin tone, dark skin tone #E13.1[1] (🧑🏻‍❤️‍🧑🏿)
+1F9D1 1F3FB 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: light skin tone # E13.0 [1] (🧑🏻‍🎄)
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone # E12.0 [1] (🧑🏻‍🤝‍🧑🏻)
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone, medium-light skin tone # E12.1 [1] (🧑🏻‍🤝‍🧑🏼)
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone, medium skin tone # E12.1 [1] (🧑🏻‍🤝‍🧑🏽)
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone, medium-dark skin tone # E12.1 [1] (🧑🏻‍🤝‍🧑🏾)
+1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone, dark skin tone # E12.1 [1] (🧑🏻‍🤝‍🧑🏿)
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-light skin tone, light skin tone #E13.1[1] (🧑🏼‍❤️‍💋‍🧑🏻)
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-light skin tone, medium skin tone #E13.1[1] (🧑🏼‍❤️‍💋‍🧑🏽)
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-light skin tone, medium-dark skin tone #E13.1[1] (🧑🏼‍❤️‍💋‍🧑🏾)
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-light skin tone, dark skin tone #E13.1[1] (🧑🏼‍❤️‍💋‍🧑🏿)
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-light skin tone, light skin tone #E13.1[1] (🧑🏼‍❤️‍🧑🏻)
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-light skin tone, medium skin tone #E13.1[1] (🧑🏼‍❤️‍🧑🏽)
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-light skin tone, medium-dark skin tone #E13.1[1] (🧑🏼‍❤️‍🧑🏾)
+1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-light skin tone, dark skin tone #E13.1[1] (🧑🏼‍❤️‍🧑🏿)
+1F9D1 1F3FC 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: medium-light skin tone # E13.0 [1] (🧑🏼‍🎄)
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone, light skin tone # E12.0 [1] (🧑🏼‍🤝‍🧑🏻)
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone # E12.0 [1] (🧑🏼‍🤝‍🧑🏼)
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone, medium skin tone # E12.1 [1] (🧑🏼‍🤝‍🧑🏽)
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone, medium-dark skin tone #E12.1[1] (🧑🏼‍🤝‍🧑🏾)
+1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone, dark skin tone # E12.1 [1] (🧑🏼‍🤝‍🧑🏿)
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium skin tone, light skin tone #E13.1 [1] (🧑🏽‍❤️‍💋‍🧑🏻)
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium skin tone, medium-light skin tone #E13.1[1] (🧑🏽‍❤️‍💋‍🧑🏼)
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium skin tone, medium-dark skin tone #E13.1[1] (🧑🏽‍❤️‍💋‍🧑🏾)
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium skin tone, dark skin tone # E13.1 [1] (🧑🏽‍❤️‍💋‍🧑🏿)
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium skin tone, light skin tone #E13.1[1] (🧑🏽‍❤️‍🧑🏻)
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium skin tone, medium-light skin tone #E13.1[1] (🧑🏽‍❤️‍🧑🏼)
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium skin tone, medium-dark skin tone #E13.1[1] (🧑🏽‍❤️‍🧑🏾)
+1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium skin tone, dark skin tone #E13.1[1] (🧑🏽‍❤️‍🧑🏿)
+1F9D1 1F3FD 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: medium skin tone # E13.0 [1] (🧑🏽‍🎄)
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone, light skin tone # E12.0 [1] (🧑🏽‍🤝‍🧑🏻)
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone, medium-light skin tone # E12.0 [1] (🧑🏽‍🤝‍🧑🏼)
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone # E12.0 [1] (🧑🏽‍🤝‍🧑🏽)
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone, medium-dark skin tone # E12.1 [1] (🧑🏽‍🤝‍🧑🏾)
+1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone, dark skin tone # E12.1 [1] (🧑🏽‍🤝‍🧑🏿)
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-dark skin tone, light skin tone #E13.1[1] (🧑🏾‍❤️‍💋‍🧑🏻)
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-dark skin tone, medium-light skin tone #E13.1[1] (🧑🏾‍❤️‍💋‍🧑🏼)
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-dark skin tone, medium skin tone #E13.1[1] (🧑🏾‍❤️‍💋‍🧑🏽)
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-dark skin tone, dark skin tone #E13.1[1] (🧑🏾‍❤️‍💋‍🧑🏿)
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-dark skin tone, light skin tone #E13.1[1] (🧑🏾‍❤️‍🧑🏻)
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-dark skin tone, medium-light skin tone #E13.1[1] (🧑🏾‍❤️‍🧑🏼)
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-dark skin tone, medium skin tone #E13.1[1] (🧑🏾‍❤️‍🧑🏽)
+1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-dark skin tone, dark skin tone #E13.1[1] (🧑🏾‍❤️‍🧑🏿)
+1F9D1 1F3FE 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: medium-dark skin tone # E13.0 [1] (🧑🏾‍🎄)
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone, light skin tone # E12.0 [1] (🧑🏾‍🤝‍🧑🏻)
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone, medium-light skin tone #E12.0[1] (🧑🏾‍🤝‍🧑🏼)
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone, medium skin tone # E12.0 [1] (🧑🏾‍🤝‍🧑🏽)
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone # E12.0 [1] (🧑🏾‍🤝‍🧑🏾)
+1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone, dark skin tone # E12.1 [1] (🧑🏾‍🤝‍🧑🏿)
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: person, person, dark skin tone, light skin tone # E13.1 [1] (🧑🏿‍❤️‍💋‍🧑🏻)
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: person, person, dark skin tone, medium-light skin tone #E13.1[1] (🧑🏿‍❤️‍💋‍🧑🏼)
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: person, person, dark skin tone, medium skin tone # E13.1 [1] (🧑🏿‍❤️‍💋‍🧑🏽)
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: person, person, dark skin tone, medium-dark skin tone #E13.1[1] (🧑🏿‍❤️‍💋‍🧑🏾)
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, dark skin tone, light skin tone #E13.1[1] (🧑🏿‍❤️‍🧑🏻)
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, dark skin tone, medium-light skin tone #E13.1[1] (🧑🏿‍❤️‍🧑🏼)
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, dark skin tone, medium skin tone #E13.1[1] (🧑🏿‍❤️‍🧑🏽)
+1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, dark skin tone, medium-dark skin tone #E13.1[1] (🧑🏿‍❤️‍🧑🏾)
+1F9D1 1F3FF 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: dark skin tone # E13.0 [1] (🧑🏿‍🎄)
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone, light skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏻)
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone, medium-light skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏼)
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone, medium skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏽)
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone, medium-dark skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏾)
+1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏿)
+1FAF1 1F3FB 200D 1FAF2 1F3FC ; RGI_Emoji_ZWJ_Sequence ; handshake: light skin tone, medium-light skin tone # E14.0 [1] (🫱🏻‍🫲🏼)
+1FAF1 1F3FB 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: light skin tone, medium skin tone # E14.0 [1] (🫱🏻‍🫲🏽)
+1FAF1 1F3FB 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: light skin tone, medium-dark skin tone # E14.0 [1] (🫱🏻‍🫲🏾)
+1FAF1 1F3FB 200D 1FAF2 1F3FF ; RGI_Emoji_ZWJ_Sequence ; handshake: light skin tone, dark skin tone # E14.0 [1] (🫱🏻‍🫲🏿)
+1FAF1 1F3FC 200D 1FAF2 1F3FB ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-light skin tone, light skin tone # E14.0 [1] (🫱🏼‍🫲🏻)
+1FAF1 1F3FC 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-light skin tone, medium skin tone # E14.0 [1] (🫱🏼‍🫲🏽)
+1FAF1 1F3FC 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-light skin tone, medium-dark skin tone # E14.0 [1] (🫱🏼‍🫲🏾)
+1FAF1 1F3FC 200D 1FAF2 1F3FF ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-light skin tone, dark skin tone # E14.0 [1] (🫱🏼‍🫲🏿)
+1FAF1 1F3FD 200D 1FAF2 1F3FB ; RGI_Emoji_ZWJ_Sequence ; handshake: medium skin tone, light skin tone # E14.0 [1] (🫱🏽‍🫲🏻)
+1FAF1 1F3FD 200D 1FAF2 1F3FC ; RGI_Emoji_ZWJ_Sequence ; handshake: medium skin tone, medium-light skin tone # E14.0 [1] (🫱🏽‍🫲🏼)
+1FAF1 1F3FD 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: medium skin tone, medium-dark skin tone # E14.0 [1] (🫱🏽‍🫲🏾)
+1FAF1 1F3FD 200D 1FAF2 1F3FF ; RGI_Emoji_ZWJ_Sequence ; handshake: medium skin tone, dark skin tone # E14.0 [1] (🫱🏽‍🫲🏿)
+1FAF1 1F3FE 200D 1FAF2 1F3FB ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-dark skin tone, light skin tone # E14.0 [1] (🫱🏾‍🫲🏻)
+1FAF1 1F3FE 200D 1FAF2 1F3FC ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-dark skin tone, medium-light skin tone # E14.0 [1] (🫱🏾‍🫲🏼)
+1FAF1 1F3FE 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-dark skin tone, medium skin tone # E14.0 [1] (🫱🏾‍🫲🏽)
+1FAF1 1F3FE 200D 1FAF2 1F3FF ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-dark skin tone, dark skin tone # E14.0 [1] (🫱🏾‍🫲🏿)
+1FAF1 1F3FF 200D 1FAF2 1F3FB ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, light skin tone # E14.0 [1] (🫱🏿‍🫲🏻)
+1FAF1 1F3FF 200D 1FAF2 1F3FC ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, medium-light skin tone # E14.0 [1] (🫱🏿‍🫲🏼)
+1FAF1 1F3FF 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, medium skin tone # E14.0 [1] (🫱🏿‍🫲🏽)
+1FAF1 1F3FF 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, medium-dark skin tone # E14.0 [1] (🫱🏿‍🫲🏾)
+
+# Total elements: 332
+
+# ================================================
+
+# RGI_Emoji_ZWJ_Sequence: Role
+
+1F468 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker # E4.0 [1] (👨‍⚕️)
+1F468 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge # E4.0 [1] (👨‍⚖️)
+1F468 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot # E4.0 [1] (👨‍✈️)
+1F468 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer # E4.0 [1] (👨‍🌾)
+1F468 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook # E4.0 [1] (👨‍🍳)
+1F468 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby # E13.0 [1] (👨‍🍼)
+1F468 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student # E4.0 [1] (👨‍🎓)
+1F468 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer # E4.0 [1] (👨‍🎤)
+1F468 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist # E4.0 [1] (👨‍🎨)
+1F468 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher # E4.0 [1] (👨‍🏫)
+1F468 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker # E4.0 [1] (👨‍🏭)
+1F468 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist # E4.0 [1] (👨‍💻)
+1F468 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker # E4.0 [1] (👨‍💼)
+1F468 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic # E4.0 [1] (👨‍🔧)
+1F468 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist # E4.0 [1] (👨‍🔬)
+1F468 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut # E4.0 [1] (👨‍🚀)
+1F468 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter # E4.0 [1] (👨‍🚒)
+1F468 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane # E12.0 [1] (👨‍🦯)
+1F468 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair # E12.0 [1] (👨‍🦼)
+1F468 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair # E12.0 [1] (👨‍🦽)
+1F468 1F3FB 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: light skin tone # E4.0 [1] (👨🏻‍⚕️)
+1F468 1F3FB 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: light skin tone # E4.0 [1] (👨🏻‍⚖️)
+1F468 1F3FB 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: light skin tone # E4.0 [1] (👨🏻‍✈️)
+1F468 1F3FB 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: light skin tone # E4.0 [1] (👨🏻‍🌾)
+1F468 1F3FB 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: light skin tone # E4.0 [1] (👨🏻‍🍳)
+1F468 1F3FB 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: light skin tone # E13.0 [1] (👨🏻‍🍼)
+1F468 1F3FB 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: light skin tone # E4.0 [1] (👨🏻‍🎓)
+1F468 1F3FB 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: light skin tone # E4.0 [1] (👨🏻‍🎤)
+1F468 1F3FB 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: light skin tone # E4.0 [1] (👨🏻‍🎨)
+1F468 1F3FB 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: light skin tone # E4.0 [1] (👨🏻‍🏫)
+1F468 1F3FB 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: light skin tone # E4.0 [1] (👨🏻‍🏭)
+1F468 1F3FB 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: light skin tone # E4.0 [1] (👨🏻‍💻)
+1F468 1F3FB 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: light skin tone # E4.0 [1] (👨🏻‍💼)
+1F468 1F3FB 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: light skin tone # E4.0 [1] (👨🏻‍🔧)
+1F468 1F3FB 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: light skin tone # E4.0 [1] (👨🏻‍🔬)
+1F468 1F3FB 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: light skin tone # E4.0 [1] (👨🏻‍🚀)
+1F468 1F3FB 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: light skin tone # E4.0 [1] (👨🏻‍🚒)
+1F468 1F3FB 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: light skin tone # E12.0 [1] (👨🏻‍🦯)
+1F468 1F3FB 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: light skin tone # E12.0 [1] (👨🏻‍🦼)
+1F468 1F3FB 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: light skin tone # E12.0 [1] (👨🏻‍🦽)
+1F468 1F3FC 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: medium-light skin tone # E4.0 [1] (👨🏼‍⚕️)
+1F468 1F3FC 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: medium-light skin tone # E4.0 [1] (👨🏼‍⚖️)
+1F468 1F3FC 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: medium-light skin tone # E4.0 [1] (👨🏼‍✈️)
+1F468 1F3FC 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: medium-light skin tone # E4.0 [1] (👨🏼‍🌾)
+1F468 1F3FC 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: medium-light skin tone # E4.0 [1] (👨🏼‍🍳)
+1F468 1F3FC 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: medium-light skin tone # E13.0 [1] (👨🏼‍🍼)
+1F468 1F3FC 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: medium-light skin tone # E4.0 [1] (👨🏼‍🎓)
+1F468 1F3FC 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: medium-light skin tone # E4.0 [1] (👨🏼‍🎤)
+1F468 1F3FC 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: medium-light skin tone # E4.0 [1] (👨🏼‍🎨)
+1F468 1F3FC 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: medium-light skin tone # E4.0 [1] (👨🏼‍🏫)
+1F468 1F3FC 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: medium-light skin tone # E4.0 [1] (👨🏼‍🏭)
+1F468 1F3FC 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: medium-light skin tone # E4.0 [1] (👨🏼‍💻)
+1F468 1F3FC 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: medium-light skin tone # E4.0 [1] (👨🏼‍💼)
+1F468 1F3FC 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: medium-light skin tone # E4.0 [1] (👨🏼‍🔧)
+1F468 1F3FC 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: medium-light skin tone # E4.0 [1] (👨🏼‍🔬)
+1F468 1F3FC 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: medium-light skin tone # E4.0 [1] (👨🏼‍🚀)
+1F468 1F3FC 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: medium-light skin tone # E4.0 [1] (👨🏼‍🚒)
+1F468 1F3FC 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: medium-light skin tone # E12.0 [1] (👨🏼‍🦯)
+1F468 1F3FC 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: medium-light skin tone # E12.0 [1] (👨🏼‍🦼)
+1F468 1F3FC 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: medium-light skin tone # E12.0 [1] (👨🏼‍🦽)
+1F468 1F3FD 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: medium skin tone # E4.0 [1] (👨🏽‍⚕️)
+1F468 1F3FD 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: medium skin tone # E4.0 [1] (👨🏽‍⚖️)
+1F468 1F3FD 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: medium skin tone # E4.0 [1] (👨🏽‍✈️)
+1F468 1F3FD 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: medium skin tone # E4.0 [1] (👨🏽‍🌾)
+1F468 1F3FD 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: medium skin tone # E4.0 [1] (👨🏽‍🍳)
+1F468 1F3FD 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: medium skin tone # E13.0 [1] (👨🏽‍🍼)
+1F468 1F3FD 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: medium skin tone # E4.0 [1] (👨🏽‍🎓)
+1F468 1F3FD 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: medium skin tone # E4.0 [1] (👨🏽‍🎤)
+1F468 1F3FD 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: medium skin tone # E4.0 [1] (👨🏽‍🎨)
+1F468 1F3FD 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: medium skin tone # E4.0 [1] (👨🏽‍🏫)
+1F468 1F3FD 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: medium skin tone # E4.0 [1] (👨🏽‍🏭)
+1F468 1F3FD 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: medium skin tone # E4.0 [1] (👨🏽‍💻)
+1F468 1F3FD 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: medium skin tone # E4.0 [1] (👨🏽‍💼)
+1F468 1F3FD 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: medium skin tone # E4.0 [1] (👨🏽‍🔧)
+1F468 1F3FD 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: medium skin tone # E4.0 [1] (👨🏽‍🔬)
+1F468 1F3FD 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: medium skin tone # E4.0 [1] (👨🏽‍🚀)
+1F468 1F3FD 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: medium skin tone # E4.0 [1] (👨🏽‍🚒)
+1F468 1F3FD 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: medium skin tone # E12.0 [1] (👨🏽‍🦯)
+1F468 1F3FD 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: medium skin tone # E12.0 [1] (👨🏽‍🦼)
+1F468 1F3FD 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: medium skin tone # E12.0 [1] (👨🏽‍🦽)
+1F468 1F3FE 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: medium-dark skin tone # E4.0 [1] (👨🏾‍⚕️)
+1F468 1F3FE 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: medium-dark skin tone # E4.0 [1] (👨🏾‍⚖️)
+1F468 1F3FE 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: medium-dark skin tone # E4.0 [1] (👨🏾‍✈️)
+1F468 1F3FE 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: medium-dark skin tone # E4.0 [1] (👨🏾‍🌾)
+1F468 1F3FE 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: medium-dark skin tone # E4.0 [1] (👨🏾‍🍳)
+1F468 1F3FE 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: medium-dark skin tone # E13.0 [1] (👨🏾‍🍼)
+1F468 1F3FE 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: medium-dark skin tone # E4.0 [1] (👨🏾‍🎓)
+1F468 1F3FE 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: medium-dark skin tone # E4.0 [1] (👨🏾‍🎤)
+1F468 1F3FE 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: medium-dark skin tone # E4.0 [1] (👨🏾‍🎨)
+1F468 1F3FE 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: medium-dark skin tone # E4.0 [1] (👨🏾‍🏫)
+1F468 1F3FE 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: medium-dark skin tone # E4.0 [1] (👨🏾‍🏭)
+1F468 1F3FE 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: medium-dark skin tone # E4.0 [1] (👨🏾‍💻)
+1F468 1F3FE 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: medium-dark skin tone # E4.0 [1] (👨🏾‍💼)
+1F468 1F3FE 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: medium-dark skin tone # E4.0 [1] (👨🏾‍🔧)
+1F468 1F3FE 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: medium-dark skin tone # E4.0 [1] (👨🏾‍🔬)
+1F468 1F3FE 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: medium-dark skin tone # E4.0 [1] (👨🏾‍🚀)
+1F468 1F3FE 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: medium-dark skin tone # E4.0 [1] (👨🏾‍🚒)
+1F468 1F3FE 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: medium-dark skin tone # E12.0 [1] (👨🏾‍🦯)
+1F468 1F3FE 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: medium-dark skin tone # E12.0 [1] (👨🏾‍🦼)
+1F468 1F3FE 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: medium-dark skin tone # E12.0 [1] (👨🏾‍🦽)
+1F468 1F3FF 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: dark skin tone # E4.0 [1] (👨🏿‍⚕️)
+1F468 1F3FF 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: dark skin tone # E4.0 [1] (👨🏿‍⚖️)
+1F468 1F3FF 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: dark skin tone # E4.0 [1] (👨🏿‍✈️)
+1F468 1F3FF 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: dark skin tone # E4.0 [1] (👨🏿‍🌾)
+1F468 1F3FF 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: dark skin tone # E4.0 [1] (👨🏿‍🍳)
+1F468 1F3FF 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: dark skin tone # E13.0 [1] (👨🏿‍🍼)
+1F468 1F3FF 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: dark skin tone # E4.0 [1] (👨🏿‍🎓)
+1F468 1F3FF 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: dark skin tone # E4.0 [1] (👨🏿‍🎤)
+1F468 1F3FF 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: dark skin tone # E4.0 [1] (👨🏿‍🎨)
+1F468 1F3FF 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: dark skin tone # E4.0 [1] (👨🏿‍🏫)
+1F468 1F3FF 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: dark skin tone # E4.0 [1] (👨🏿‍🏭)
+1F468 1F3FF 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: dark skin tone # E4.0 [1] (👨🏿‍💻)
+1F468 1F3FF 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: dark skin tone # E4.0 [1] (👨🏿‍💼)
+1F468 1F3FF 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: dark skin tone # E4.0 [1] (👨🏿‍🔧)
+1F468 1F3FF 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: dark skin tone # E4.0 [1] (👨🏿‍🔬)
+1F468 1F3FF 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: dark skin tone # E4.0 [1] (👨🏿‍🚀)
+1F468 1F3FF 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: dark skin tone # E4.0 [1] (👨🏿‍🚒)
+1F468 1F3FF 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: dark skin tone # E12.0 [1] (👨🏿‍🦯)
+1F468 1F3FF 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: dark skin tone # E12.0 [1] (👨🏿‍🦼)
+1F468 1F3FF 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: dark skin tone # E12.0 [1] (👨🏿‍🦽)
+1F469 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker # E4.0 [1] (👩‍⚕️)
+1F469 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge # E4.0 [1] (👩‍⚖️)
+1F469 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot # E4.0 [1] (👩‍✈️)
+1F469 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer # E4.0 [1] (👩‍🌾)
+1F469 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook # E4.0 [1] (👩‍🍳)
+1F469 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby # E13.0 [1] (👩‍🍼)
+1F469 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student # E4.0 [1] (👩‍🎓)
+1F469 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer # E4.0 [1] (👩‍🎤)
+1F469 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist # E4.0 [1] (👩‍🎨)
+1F469 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher # E4.0 [1] (👩‍🏫)
+1F469 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker # E4.0 [1] (👩‍🏭)
+1F469 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist # E4.0 [1] (👩‍💻)
+1F469 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker # E4.0 [1] (👩‍💼)
+1F469 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic # E4.0 [1] (👩‍🔧)
+1F469 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist # E4.0 [1] (👩‍🔬)
+1F469 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut # E4.0 [1] (👩‍🚀)
+1F469 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter # E4.0 [1] (👩‍🚒)
+1F469 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane # E12.0 [1] (👩‍🦯)
+1F469 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair # E12.0 [1] (👩‍🦼)
+1F469 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair # E12.0 [1] (👩‍🦽)
+1F469 1F3FB 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: light skin tone # E4.0 [1] (👩🏻‍⚕️)
+1F469 1F3FB 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: light skin tone # E4.0 [1] (👩🏻‍⚖️)
+1F469 1F3FB 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: light skin tone # E4.0 [1] (👩🏻‍✈️)
+1F469 1F3FB 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: light skin tone # E4.0 [1] (👩🏻‍🌾)
+1F469 1F3FB 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: light skin tone # E4.0 [1] (👩🏻‍🍳)
+1F469 1F3FB 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: light skin tone # E13.0 [1] (👩🏻‍🍼)
+1F469 1F3FB 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: light skin tone # E4.0 [1] (👩🏻‍🎓)
+1F469 1F3FB 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: light skin tone # E4.0 [1] (👩🏻‍🎤)
+1F469 1F3FB 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: light skin tone # E4.0 [1] (👩🏻‍🎨)
+1F469 1F3FB 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: light skin tone # E4.0 [1] (👩🏻‍🏫)
+1F469 1F3FB 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: light skin tone # E4.0 [1] (👩🏻‍🏭)
+1F469 1F3FB 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: light skin tone # E4.0 [1] (👩🏻‍💻)
+1F469 1F3FB 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: light skin tone # E4.0 [1] (👩🏻‍💼)
+1F469 1F3FB 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: light skin tone # E4.0 [1] (👩🏻‍🔧)
+1F469 1F3FB 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: light skin tone # E4.0 [1] (👩🏻‍🔬)
+1F469 1F3FB 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: light skin tone # E4.0 [1] (👩🏻‍🚀)
+1F469 1F3FB 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: light skin tone # E4.0 [1] (👩🏻‍🚒)
+1F469 1F3FB 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: light skin tone # E12.0 [1] (👩🏻‍🦯)
+1F469 1F3FB 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: light skin tone # E12.0 [1] (👩🏻‍🦼)
+1F469 1F3FB 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: light skin tone # E12.0 [1] (👩🏻‍🦽)
+1F469 1F3FC 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: medium-light skin tone # E4.0 [1] (👩🏼‍⚕️)
+1F469 1F3FC 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: medium-light skin tone # E4.0 [1] (👩🏼‍⚖️)
+1F469 1F3FC 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: medium-light skin tone # E4.0 [1] (👩🏼‍✈️)
+1F469 1F3FC 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: medium-light skin tone # E4.0 [1] (👩🏼‍🌾)
+1F469 1F3FC 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: medium-light skin tone # E4.0 [1] (👩🏼‍🍳)
+1F469 1F3FC 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: medium-light skin tone # E13.0 [1] (👩🏼‍🍼)
+1F469 1F3FC 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: medium-light skin tone # E4.0 [1] (👩🏼‍🎓)
+1F469 1F3FC 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: medium-light skin tone # E4.0 [1] (👩🏼‍🎤)
+1F469 1F3FC 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: medium-light skin tone # E4.0 [1] (👩🏼‍🎨)
+1F469 1F3FC 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: medium-light skin tone # E4.0 [1] (👩🏼‍🏫)
+1F469 1F3FC 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: medium-light skin tone # E4.0 [1] (👩🏼‍🏭)
+1F469 1F3FC 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: medium-light skin tone # E4.0 [1] (👩🏼‍💻)
+1F469 1F3FC 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: medium-light skin tone # E4.0 [1] (👩🏼‍💼)
+1F469 1F3FC 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: medium-light skin tone # E4.0 [1] (👩🏼‍🔧)
+1F469 1F3FC 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: medium-light skin tone # E4.0 [1] (👩🏼‍🔬)
+1F469 1F3FC 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: medium-light skin tone # E4.0 [1] (👩🏼‍🚀)
+1F469 1F3FC 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: medium-light skin tone # E4.0 [1] (👩🏼‍🚒)
+1F469 1F3FC 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: medium-light skin tone # E12.0 [1] (👩🏼‍🦯)
+1F469 1F3FC 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: medium-light skin tone # E12.0 [1] (👩🏼‍🦼)
+1F469 1F3FC 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: medium-light skin tone # E12.0 [1] (👩🏼‍🦽)
+1F469 1F3FD 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: medium skin tone # E4.0 [1] (👩🏽‍⚕️)
+1F469 1F3FD 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: medium skin tone # E4.0 [1] (👩🏽‍⚖️)
+1F469 1F3FD 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: medium skin tone # E4.0 [1] (👩🏽‍✈️)
+1F469 1F3FD 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: medium skin tone # E4.0 [1] (👩🏽‍🌾)
+1F469 1F3FD 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: medium skin tone # E4.0 [1] (👩🏽‍🍳)
+1F469 1F3FD 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: medium skin tone # E13.0 [1] (👩🏽‍🍼)
+1F469 1F3FD 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: medium skin tone # E4.0 [1] (👩🏽‍🎓)
+1F469 1F3FD 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: medium skin tone # E4.0 [1] (👩🏽‍🎤)
+1F469 1F3FD 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: medium skin tone # E4.0 [1] (👩🏽‍🎨)
+1F469 1F3FD 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: medium skin tone # E4.0 [1] (👩🏽‍🏫)
+1F469 1F3FD 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: medium skin tone # E4.0 [1] (👩🏽‍🏭)
+1F469 1F3FD 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: medium skin tone # E4.0 [1] (👩🏽‍💻)
+1F469 1F3FD 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: medium skin tone # E4.0 [1] (👩🏽‍💼)
+1F469 1F3FD 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: medium skin tone # E4.0 [1] (👩🏽‍🔧)
+1F469 1F3FD 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: medium skin tone # E4.0 [1] (👩🏽‍🔬)
+1F469 1F3FD 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: medium skin tone # E4.0 [1] (👩🏽‍🚀)
+1F469 1F3FD 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: medium skin tone # E4.0 [1] (👩🏽‍🚒)
+1F469 1F3FD 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: medium skin tone # E12.0 [1] (👩🏽‍🦯)
+1F469 1F3FD 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: medium skin tone # E12.0 [1] (👩🏽‍🦼)
+1F469 1F3FD 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: medium skin tone # E12.0 [1] (👩🏽‍🦽)
+1F469 1F3FE 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: medium-dark skin tone # E4.0 [1] (👩🏾‍⚕️)
+1F469 1F3FE 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: medium-dark skin tone # E4.0 [1] (👩🏾‍⚖️)
+1F469 1F3FE 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: medium-dark skin tone # E4.0 [1] (👩🏾‍✈️)
+1F469 1F3FE 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: medium-dark skin tone # E4.0 [1] (👩🏾‍🌾)
+1F469 1F3FE 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: medium-dark skin tone # E4.0 [1] (👩🏾‍🍳)
+1F469 1F3FE 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: medium-dark skin tone # E13.0 [1] (👩🏾‍🍼)
+1F469 1F3FE 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: medium-dark skin tone # E4.0 [1] (👩🏾‍🎓)
+1F469 1F3FE 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: medium-dark skin tone # E4.0 [1] (👩🏾‍🎤)
+1F469 1F3FE 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: medium-dark skin tone # E4.0 [1] (👩🏾‍🎨)
+1F469 1F3FE 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: medium-dark skin tone # E4.0 [1] (👩🏾‍🏫)
+1F469 1F3FE 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: medium-dark skin tone # E4.0 [1] (👩🏾‍🏭)
+1F469 1F3FE 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: medium-dark skin tone # E4.0 [1] (👩🏾‍💻)
+1F469 1F3FE 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: medium-dark skin tone # E4.0 [1] (👩🏾‍💼)
+1F469 1F3FE 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: medium-dark skin tone # E4.0 [1] (👩🏾‍🔧)
+1F469 1F3FE 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: medium-dark skin tone # E4.0 [1] (👩🏾‍🔬)
+1F469 1F3FE 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: medium-dark skin tone # E4.0 [1] (👩🏾‍🚀)
+1F469 1F3FE 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: medium-dark skin tone # E4.0 [1] (👩🏾‍🚒)
+1F469 1F3FE 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: medium-dark skin tone # E12.0 [1] (👩🏾‍🦯)
+1F469 1F3FE 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: medium-dark skin tone # E12.0 [1] (👩🏾‍🦼)
+1F469 1F3FE 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: medium-dark skin tone # E12.0 [1] (👩🏾‍🦽)
+1F469 1F3FF 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: dark skin tone # E4.0 [1] (👩🏿‍⚕️)
+1F469 1F3FF 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: dark skin tone # E4.0 [1] (👩🏿‍⚖️)
+1F469 1F3FF 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: dark skin tone # E4.0 [1] (👩🏿‍✈️)
+1F469 1F3FF 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: dark skin tone # E4.0 [1] (👩🏿‍🌾)
+1F469 1F3FF 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: dark skin tone # E4.0 [1] (👩🏿‍🍳)
+1F469 1F3FF 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: dark skin tone # E13.0 [1] (👩🏿‍🍼)
+1F469 1F3FF 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: dark skin tone # E4.0 [1] (👩🏿‍🎓)
+1F469 1F3FF 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: dark skin tone # E4.0 [1] (👩🏿‍🎤)
+1F469 1F3FF 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: dark skin tone # E4.0 [1] (👩🏿‍🎨)
+1F469 1F3FF 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: dark skin tone # E4.0 [1] (👩🏿‍🏫)
+1F469 1F3FF 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: dark skin tone # E4.0 [1] (👩🏿‍🏭)
+1F469 1F3FF 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: dark skin tone # E4.0 [1] (👩🏿‍💻)
+1F469 1F3FF 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: dark skin tone # E4.0 [1] (👩🏿‍💼)
+1F469 1F3FF 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: dark skin tone # E4.0 [1] (👩🏿‍🔧)
+1F469 1F3FF 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: dark skin tone # E4.0 [1] (👩🏿‍🔬)
+1F469 1F3FF 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: dark skin tone # E4.0 [1] (👩🏿‍🚀)
+1F469 1F3FF 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: dark skin tone # E4.0 [1] (👩🏿‍🚒)
+1F469 1F3FF 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: dark skin tone # E12.0 [1] (👩🏿‍🦯)
+1F469 1F3FF 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: dark skin tone # E12.0 [1] (👩🏿‍🦼)
+1F469 1F3FF 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: dark skin tone # E12.0 [1] (👩🏿‍🦽)
+1F9D1 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker # E12.1 [1] (🧑‍⚕️)
+1F9D1 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge # E12.1 [1] (🧑‍⚖️)
+1F9D1 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot # E12.1 [1] (🧑‍✈️)
+1F9D1 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer # E12.1 [1] (🧑‍🌾)
+1F9D1 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook # E12.1 [1] (🧑‍🍳)
+1F9D1 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby # E13.0 [1] (🧑‍🍼)
+1F9D1 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student # E12.1 [1] (🧑‍🎓)
+1F9D1 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer # E12.1 [1] (🧑‍🎤)
+1F9D1 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist # E12.1 [1] (🧑‍🎨)
+1F9D1 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher # E12.1 [1] (🧑‍🏫)
+1F9D1 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker # E12.1 [1] (🧑‍🏭)
+1F9D1 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist # E12.1 [1] (🧑‍💻)
+1F9D1 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker # E12.1 [1] (🧑‍💼)
+1F9D1 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic # E12.1 [1] (🧑‍🔧)
+1F9D1 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist # E12.1 [1] (🧑‍🔬)
+1F9D1 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut # E12.1 [1] (🧑‍🚀)
+1F9D1 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter # E12.1 [1] (🧑‍🚒)
+1F9D1 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane # E12.1 [1] (🧑‍🦯)
+1F9D1 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair # E12.1 [1] (🧑‍🦼)
+1F9D1 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair # E12.1 [1] (🧑‍🦽)
+1F9D1 1F3FB 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: light skin tone # E12.1 [1] (🧑🏻‍⚕️)
+1F9D1 1F3FB 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: light skin tone # E12.1 [1] (🧑🏻‍⚖️)
+1F9D1 1F3FB 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: light skin tone # E12.1 [1] (🧑🏻‍✈️)
+1F9D1 1F3FB 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: light skin tone # E12.1 [1] (🧑🏻‍🌾)
+1F9D1 1F3FB 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: light skin tone # E12.1 [1] (🧑🏻‍🍳)
+1F9D1 1F3FB 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: light skin tone # E13.0 [1] (🧑🏻‍🍼)
+1F9D1 1F3FB 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: light skin tone # E12.1 [1] (🧑🏻‍🎓)
+1F9D1 1F3FB 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: light skin tone # E12.1 [1] (🧑🏻‍🎤)
+1F9D1 1F3FB 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: light skin tone # E12.1 [1] (🧑🏻‍🎨)
+1F9D1 1F3FB 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: light skin tone # E12.1 [1] (🧑🏻‍🏫)
+1F9D1 1F3FB 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: light skin tone # E12.1 [1] (🧑🏻‍🏭)
+1F9D1 1F3FB 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: light skin tone # E12.1 [1] (🧑🏻‍💻)
+1F9D1 1F3FB 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: light skin tone # E12.1 [1] (🧑🏻‍💼)
+1F9D1 1F3FB 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: light skin tone # E12.1 [1] (🧑🏻‍🔧)
+1F9D1 1F3FB 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: light skin tone # E12.1 [1] (🧑🏻‍🔬)
+1F9D1 1F3FB 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: light skin tone # E12.1 [1] (🧑🏻‍🚀)
+1F9D1 1F3FB 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: light skin tone # E12.1 [1] (🧑🏻‍🚒)
+1F9D1 1F3FB 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: light skin tone # E12.1 [1] (🧑🏻‍🦯)
+1F9D1 1F3FB 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: light skin tone # E12.1 [1] (🧑🏻‍🦼)
+1F9D1 1F3FB 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: light skin tone # E12.1 [1] (🧑🏻‍🦽)
+1F9D1 1F3FC 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: medium-light skin tone # E12.1 [1] (🧑🏼‍⚕️)
+1F9D1 1F3FC 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: medium-light skin tone # E12.1 [1] (🧑🏼‍⚖️)
+1F9D1 1F3FC 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: medium-light skin tone # E12.1 [1] (🧑🏼‍✈️)
+1F9D1 1F3FC 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: medium-light skin tone # E12.1 [1] (🧑🏼‍🌾)
+1F9D1 1F3FC 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: medium-light skin tone # E12.1 [1] (🧑🏼‍🍳)
+1F9D1 1F3FC 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: medium-light skin tone # E13.0 [1] (🧑🏼‍🍼)
+1F9D1 1F3FC 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: medium-light skin tone # E12.1 [1] (🧑🏼‍🎓)
+1F9D1 1F3FC 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: medium-light skin tone # E12.1 [1] (🧑🏼‍🎤)
+1F9D1 1F3FC 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: medium-light skin tone # E12.1 [1] (🧑🏼‍🎨)
+1F9D1 1F3FC 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: medium-light skin tone # E12.1 [1] (🧑🏼‍🏫)
+1F9D1 1F3FC 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: medium-light skin tone # E12.1 [1] (🧑🏼‍🏭)
+1F9D1 1F3FC 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: medium-light skin tone # E12.1 [1] (🧑🏼‍💻)
+1F9D1 1F3FC 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: medium-light skin tone # E12.1 [1] (🧑🏼‍💼)
+1F9D1 1F3FC 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: medium-light skin tone # E12.1 [1] (🧑🏼‍🔧)
+1F9D1 1F3FC 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: medium-light skin tone # E12.1 [1] (🧑🏼‍🔬)
+1F9D1 1F3FC 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: medium-light skin tone # E12.1 [1] (🧑🏼‍🚀)
+1F9D1 1F3FC 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: medium-light skin tone # E12.1 [1] (🧑🏼‍🚒)
+1F9D1 1F3FC 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: medium-light skin tone # E12.1 [1] (🧑🏼‍🦯)
+1F9D1 1F3FC 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: medium-light skin tone # E12.1 [1] (🧑🏼‍🦼)
+1F9D1 1F3FC 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: medium-light skin tone # E12.1 [1] (🧑🏼‍🦽)
+1F9D1 1F3FD 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: medium skin tone # E12.1 [1] (🧑🏽‍⚕️)
+1F9D1 1F3FD 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: medium skin tone # E12.1 [1] (🧑🏽‍⚖️)
+1F9D1 1F3FD 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: medium skin tone # E12.1 [1] (🧑🏽‍✈️)
+1F9D1 1F3FD 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: medium skin tone # E12.1 [1] (🧑🏽‍🌾)
+1F9D1 1F3FD 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: medium skin tone # E12.1 [1] (🧑🏽‍🍳)
+1F9D1 1F3FD 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: medium skin tone # E13.0 [1] (🧑🏽‍🍼)
+1F9D1 1F3FD 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: medium skin tone # E12.1 [1] (🧑🏽‍🎓)
+1F9D1 1F3FD 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: medium skin tone # E12.1 [1] (🧑🏽‍🎤)
+1F9D1 1F3FD 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: medium skin tone # E12.1 [1] (🧑🏽‍🎨)
+1F9D1 1F3FD 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: medium skin tone # E12.1 [1] (🧑🏽‍🏫)
+1F9D1 1F3FD 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: medium skin tone # E12.1 [1] (🧑🏽‍🏭)
+1F9D1 1F3FD 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: medium skin tone # E12.1 [1] (🧑🏽‍💻)
+1F9D1 1F3FD 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: medium skin tone # E12.1 [1] (🧑🏽‍💼)
+1F9D1 1F3FD 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: medium skin tone # E12.1 [1] (🧑🏽‍🔧)
+1F9D1 1F3FD 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: medium skin tone # E12.1 [1] (🧑🏽‍🔬)
+1F9D1 1F3FD 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: medium skin tone # E12.1 [1] (🧑🏽‍🚀)
+1F9D1 1F3FD 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: medium skin tone # E12.1 [1] (🧑🏽‍🚒)
+1F9D1 1F3FD 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: medium skin tone # E12.1 [1] (🧑🏽‍🦯)
+1F9D1 1F3FD 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: medium skin tone # E12.1 [1] (🧑🏽‍🦼)
+1F9D1 1F3FD 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: medium skin tone # E12.1 [1] (🧑🏽‍🦽)
+1F9D1 1F3FE 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: medium-dark skin tone # E12.1 [1] (🧑🏾‍⚕️)
+1F9D1 1F3FE 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: medium-dark skin tone # E12.1 [1] (🧑🏾‍⚖️)
+1F9D1 1F3FE 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: medium-dark skin tone # E12.1 [1] (🧑🏾‍✈️)
+1F9D1 1F3FE 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: medium-dark skin tone # E12.1 [1] (🧑🏾‍🌾)
+1F9D1 1F3FE 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: medium-dark skin tone # E12.1 [1] (🧑🏾‍🍳)
+1F9D1 1F3FE 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: medium-dark skin tone # E13.0 [1] (🧑🏾‍🍼)
+1F9D1 1F3FE 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: medium-dark skin tone # E12.1 [1] (🧑🏾‍🎓)
+1F9D1 1F3FE 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: medium-dark skin tone # E12.1 [1] (🧑🏾‍🎤)
+1F9D1 1F3FE 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: medium-dark skin tone # E12.1 [1] (🧑🏾‍🎨)
+1F9D1 1F3FE 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: medium-dark skin tone # E12.1 [1] (🧑🏾‍🏫)
+1F9D1 1F3FE 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: medium-dark skin tone # E12.1 [1] (🧑🏾‍🏭)
+1F9D1 1F3FE 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: medium-dark skin tone # E12.1 [1] (🧑🏾‍💻)
+1F9D1 1F3FE 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: medium-dark skin tone # E12.1 [1] (🧑🏾‍💼)
+1F9D1 1F3FE 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: medium-dark skin tone # E12.1 [1] (🧑🏾‍🔧)
+1F9D1 1F3FE 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: medium-dark skin tone # E12.1 [1] (🧑🏾‍🔬)
+1F9D1 1F3FE 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: medium-dark skin tone # E12.1 [1] (🧑🏾‍🚀)
+1F9D1 1F3FE 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: medium-dark skin tone # E12.1 [1] (🧑🏾‍🚒)
+1F9D1 1F3FE 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: medium-dark skin tone # E12.1 [1] (🧑🏾‍🦯)
+1F9D1 1F3FE 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: medium-dark skin tone # E12.1 [1] (🧑🏾‍🦼)
+1F9D1 1F3FE 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: medium-dark skin tone # E12.1 [1] (🧑🏾‍🦽)
+1F9D1 1F3FF 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: dark skin tone # E12.1 [1] (🧑🏿‍⚕️)
+1F9D1 1F3FF 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: dark skin tone # E12.1 [1] (🧑🏿‍⚖️)
+1F9D1 1F3FF 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: dark skin tone # E12.1 [1] (🧑🏿‍✈️)
+1F9D1 1F3FF 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: dark skin tone # E12.1 [1] (🧑🏿‍🌾)
+1F9D1 1F3FF 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: dark skin tone # E12.1 [1] (🧑🏿‍🍳)
+1F9D1 1F3FF 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: dark skin tone # E13.0 [1] (🧑🏿‍🍼)
+1F9D1 1F3FF 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: dark skin tone # E12.1 [1] (🧑🏿‍🎓)
+1F9D1 1F3FF 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: dark skin tone # E12.1 [1] (🧑🏿‍🎤)
+1F9D1 1F3FF 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: dark skin tone # E12.1 [1] (🧑🏿‍🎨)
+1F9D1 1F3FF 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: dark skin tone # E12.1 [1] (🧑🏿‍🏫)
+1F9D1 1F3FF 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: dark skin tone # E12.1 [1] (🧑🏿‍🏭)
+1F9D1 1F3FF 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: dark skin tone # E12.1 [1] (🧑🏿‍💻)
+1F9D1 1F3FF 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: dark skin tone # E12.1 [1] (🧑🏿‍💼)
+1F9D1 1F3FF 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: dark skin tone # E12.1 [1] (🧑🏿‍🔧)
+1F9D1 1F3FF 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: dark skin tone # E12.1 [1] (🧑🏿‍🔬)
+1F9D1 1F3FF 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: dark skin tone # E12.1 [1] (🧑🏿‍🚀)
+1F9D1 1F3FF 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: dark skin tone # E12.1 [1] (🧑🏿‍🚒)
+1F9D1 1F3FF 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: dark skin tone # E12.1 [1] (🧑🏿‍🦯)
+1F9D1 1F3FF 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: dark skin tone # E12.1 [1] (🧑🏿‍🦼)
+1F9D1 1F3FF 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: dark skin tone # E12.1 [1] (🧑🏿‍🦽)
+
+# Total elements: 360
+
+# ================================================
+
+# RGI_Emoji_ZWJ_Sequence: Gendered
+
+26F9 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: light skin tone # E4.0 [1] (⛹🏻‍♀️)
+26F9 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: light skin tone # E4.0 [1] (⛹🏻‍♂️)
+26F9 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: medium-light skin tone # E4.0 [1] (⛹🏼‍♀️)
+26F9 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: medium-light skin tone # E4.0 [1] (⛹🏼‍♂️)
+26F9 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: medium skin tone # E4.0 [1] (⛹🏽‍♀️)
+26F9 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: medium skin tone # E4.0 [1] (⛹🏽‍♂️)
+26F9 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: medium-dark skin tone # E4.0 [1] (⛹🏾‍♀️)
+26F9 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: medium-dark skin tone # E4.0 [1] (⛹🏾‍♂️)
+26F9 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: dark skin tone # E4.0 [1] (⛹🏿‍♀️)
+26F9 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: dark skin tone # E4.0 [1] (⛹🏿‍♂️)
+26F9 FE0F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball # E4.0 [1] (⛹️‍♀️)
+26F9 FE0F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball # E4.0 [1] (⛹️‍♂️)
+1F3C3 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running # E4.0 [1] (🏃‍♀️)
+1F3C3 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running # E4.0 [1] (🏃‍♂️)
+1F3C3 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: light skin tone # E4.0 [1] (🏃🏻‍♀️)
+1F3C3 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: light skin tone # E4.0 [1] (🏃🏻‍♂️)
+1F3C3 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: medium-light skin tone # E4.0 [1] (🏃🏼‍♀️)
+1F3C3 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: medium-light skin tone # E4.0 [1] (🏃🏼‍♂️)
+1F3C3 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: medium skin tone # E4.0 [1] (🏃🏽‍♀️)
+1F3C3 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: medium skin tone # E4.0 [1] (🏃🏽‍♂️)
+1F3C3 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: medium-dark skin tone # E4.0 [1] (🏃🏾‍♀️)
+1F3C3 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: medium-dark skin tone # E4.0 [1] (🏃🏾‍♂️)
+1F3C3 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: dark skin tone # E4.0 [1] (🏃🏿‍♀️)
+1F3C3 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: dark skin tone # E4.0 [1] (🏃🏿‍♂️)
+1F3C4 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing # E4.0 [1] (🏄‍♀️)
+1F3C4 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing # E4.0 [1] (🏄‍♂️)
+1F3C4 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: light skin tone # E4.0 [1] (🏄🏻‍♀️)
+1F3C4 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: light skin tone # E4.0 [1] (🏄🏻‍♂️)
+1F3C4 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: medium-light skin tone # E4.0 [1] (🏄🏼‍♀️)
+1F3C4 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: medium-light skin tone # E4.0 [1] (🏄🏼‍♂️)
+1F3C4 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: medium skin tone # E4.0 [1] (🏄🏽‍♀️)
+1F3C4 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: medium skin tone # E4.0 [1] (🏄🏽‍♂️)
+1F3C4 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: medium-dark skin tone # E4.0 [1] (🏄🏾‍♀️)
+1F3C4 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: medium-dark skin tone # E4.0 [1] (🏄🏾‍♂️)
+1F3C4 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: dark skin tone # E4.0 [1] (🏄🏿‍♀️)
+1F3C4 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: dark skin tone # E4.0 [1] (🏄🏿‍♂️)
+1F3CA 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming # E4.0 [1] (🏊‍♀️)
+1F3CA 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming # E4.0 [1] (🏊‍♂️)
+1F3CA 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: light skin tone # E4.0 [1] (🏊🏻‍♀️)
+1F3CA 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: light skin tone # E4.0 [1] (🏊🏻‍♂️)
+1F3CA 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: medium-light skin tone # E4.0 [1] (🏊🏼‍♀️)
+1F3CA 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: medium-light skin tone # E4.0 [1] (🏊🏼‍♂️)
+1F3CA 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: medium skin tone # E4.0 [1] (🏊🏽‍♀️)
+1F3CA 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: medium skin tone # E4.0 [1] (🏊🏽‍♂️)
+1F3CA 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: medium-dark skin tone # E4.0 [1] (🏊🏾‍♀️)
+1F3CA 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: medium-dark skin tone # E4.0 [1] (🏊🏾‍♂️)
+1F3CA 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: dark skin tone # E4.0 [1] (🏊🏿‍♀️)
+1F3CA 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: dark skin tone # E4.0 [1] (🏊🏿‍♂️)
+1F3CB 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: light skin tone # E4.0 [1] (🏋🏻‍♀️)
+1F3CB 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: light skin tone # E4.0 [1] (🏋🏻‍♂️)
+1F3CB 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: medium-light skin tone # E4.0 [1] (🏋🏼‍♀️)
+1F3CB 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: medium-light skin tone # E4.0 [1] (🏋🏼‍♂️)
+1F3CB 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: medium skin tone # E4.0 [1] (🏋🏽‍♀️)
+1F3CB 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: medium skin tone # E4.0 [1] (🏋🏽‍♂️)
+1F3CB 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: medium-dark skin tone # E4.0 [1] (🏋🏾‍♀️)
+1F3CB 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: medium-dark skin tone # E4.0 [1] (🏋🏾‍♂️)
+1F3CB 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: dark skin tone # E4.0 [1] (🏋🏿‍♀️)
+1F3CB 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: dark skin tone # E4.0 [1] (🏋🏿‍♂️)
+1F3CB FE0F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights # E4.0 [1] (🏋️‍♀️)
+1F3CB FE0F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights # E4.0 [1] (🏋️‍♂️)
+1F3CC 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: light skin tone # E4.0 [1] (🏌🏻‍♀️)
+1F3CC 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: light skin tone # E4.0 [1] (🏌🏻‍♂️)
+1F3CC 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: medium-light skin tone # E4.0 [1] (🏌🏼‍♀️)
+1F3CC 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: medium-light skin tone # E4.0 [1] (🏌🏼‍♂️)
+1F3CC 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: medium skin tone # E4.0 [1] (🏌🏽‍♀️)
+1F3CC 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: medium skin tone # E4.0 [1] (🏌🏽‍♂️)
+1F3CC 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: medium-dark skin tone # E4.0 [1] (🏌🏾‍♀️)
+1F3CC 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: medium-dark skin tone # E4.0 [1] (🏌🏾‍♂️)
+1F3CC 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: dark skin tone # E4.0 [1] (🏌🏿‍♀️)
+1F3CC 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: dark skin tone # E4.0 [1] (🏌🏿‍♂️)
+1F3CC FE0F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing # E4.0 [1] (🏌️‍♀️)
+1F3CC FE0F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing # E4.0 [1] (🏌️‍♂️)
+1F46E 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer # E4.0 [1] (👮‍♀️)
+1F46E 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer # E4.0 [1] (👮‍♂️)
+1F46E 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: light skin tone # E4.0 [1] (👮🏻‍♀️)
+1F46E 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: light skin tone # E4.0 [1] (👮🏻‍♂️)
+1F46E 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: medium-light skin tone # E4.0 [1] (👮🏼‍♀️)
+1F46E 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: medium-light skin tone # E4.0 [1] (👮🏼‍♂️)
+1F46E 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: medium skin tone # E4.0 [1] (👮🏽‍♀️)
+1F46E 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: medium skin tone # E4.0 [1] (👮🏽‍♂️)
+1F46E 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: medium-dark skin tone # E4.0 [1] (👮🏾‍♀️)
+1F46E 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: medium-dark skin tone # E4.0 [1] (👮🏾‍♂️)
+1F46E 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: dark skin tone # E4.0 [1] (👮🏿‍♀️)
+1F46E 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: dark skin tone # E4.0 [1] (👮🏿‍♂️)
+1F46F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears # E4.0 [1] (👯‍♀️)
+1F46F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears # E4.0 [1] (👯‍♂️)
+1F470 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil # E13.0 [1] (👰‍♀️)
+1F470 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil # E13.0 [1] (👰‍♂️)
+1F470 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: light skin tone # E13.0 [1] (👰🏻‍♀️)
+1F470 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: light skin tone # E13.0 [1] (👰🏻‍♂️)
+1F470 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: medium-light skin tone # E13.0 [1] (👰🏼‍♀️)
+1F470 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: medium-light skin tone # E13.0 [1] (👰🏼‍♂️)
+1F470 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: medium skin tone # E13.0 [1] (👰🏽‍♀️)
+1F470 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: medium skin tone # E13.0 [1] (👰🏽‍♂️)
+1F470 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: medium-dark skin tone # E13.0 [1] (👰🏾‍♀️)
+1F470 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: medium-dark skin tone # E13.0 [1] (👰🏾‍♂️)
+1F470 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: dark skin tone # E13.0 [1] (👰🏿‍♀️)
+1F470 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: dark skin tone # E13.0 [1] (👰🏿‍♂️)
+1F471 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: blond hair # E4.0 [1] (👱‍♀️)
+1F471 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: blond hair # E4.0 [1] (👱‍♂️)
+1F471 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, blond hair # E4.0 [1] (👱🏻‍♀️)
+1F471 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, blond hair # E4.0 [1] (👱🏻‍♂️)
+1F471 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, blond hair # E4.0 [1] (👱🏼‍♀️)
+1F471 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, blond hair # E4.0 [1] (👱🏼‍♂️)
+1F471 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, blond hair # E4.0 [1] (👱🏽‍♀️)
+1F471 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, blond hair # E4.0 [1] (👱🏽‍♂️)
+1F471 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, blond hair # E4.0 [1] (👱🏾‍♀️)
+1F471 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, blond hair # E4.0 [1] (👱🏾‍♂️)
+1F471 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, blond hair # E4.0 [1] (👱🏿‍♀️)
+1F471 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, blond hair # E4.0 [1] (👱🏿‍♂️)
+1F473 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban # E4.0 [1] (👳‍♀️)
+1F473 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban # E4.0 [1] (👳‍♂️)
+1F473 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: light skin tone # E4.0 [1] (👳🏻‍♀️)
+1F473 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: light skin tone # E4.0 [1] (👳🏻‍♂️)
+1F473 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: medium-light skin tone # E4.0 [1] (👳🏼‍♀️)
+1F473 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: medium-light skin tone # E4.0 [1] (👳🏼‍♂️)
+1F473 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: medium skin tone # E4.0 [1] (👳🏽‍♀️)
+1F473 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: medium skin tone # E4.0 [1] (👳🏽‍♂️)
+1F473 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: medium-dark skin tone # E4.0 [1] (👳🏾‍♀️)
+1F473 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: medium-dark skin tone # E4.0 [1] (👳🏾‍♂️)
+1F473 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: dark skin tone # E4.0 [1] (👳🏿‍♀️)
+1F473 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: dark skin tone # E4.0 [1] (👳🏿‍♂️)
+1F477 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker # E4.0 [1] (👷‍♀️)
+1F477 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker # E4.0 [1] (👷‍♂️)
+1F477 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: light skin tone # E4.0 [1] (👷🏻‍♀️)
+1F477 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: light skin tone # E4.0 [1] (👷🏻‍♂️)
+1F477 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: medium-light skin tone # E4.0 [1] (👷🏼‍♀️)
+1F477 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: medium-light skin tone # E4.0 [1] (👷🏼‍♂️)
+1F477 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: medium skin tone # E4.0 [1] (👷🏽‍♀️)
+1F477 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: medium skin tone # E4.0 [1] (👷🏽‍♂️)
+1F477 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: medium-dark skin tone # E4.0 [1] (👷🏾‍♀️)
+1F477 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: medium-dark skin tone # E4.0 [1] (👷🏾‍♂️)
+1F477 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: dark skin tone # E4.0 [1] (👷🏿‍♀️)
+1F477 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: dark skin tone # E4.0 [1] (👷🏿‍♂️)
+1F481 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand # E4.0 [1] (💁‍♀️)
+1F481 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand # E4.0 [1] (💁‍♂️)
+1F481 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: light skin tone # E4.0 [1] (💁🏻‍♀️)
+1F481 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: light skin tone # E4.0 [1] (💁🏻‍♂️)
+1F481 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: medium-light skin tone # E4.0 [1] (💁🏼‍♀️)
+1F481 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: medium-light skin tone # E4.0 [1] (💁🏼‍♂️)
+1F481 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: medium skin tone # E4.0 [1] (💁🏽‍♀️)
+1F481 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: medium skin tone # E4.0 [1] (💁🏽‍♂️)
+1F481 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: medium-dark skin tone # E4.0 [1] (💁🏾‍♀️)
+1F481 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: medium-dark skin tone # E4.0 [1] (💁🏾‍♂️)
+1F481 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: dark skin tone # E4.0 [1] (💁🏿‍♀️)
+1F481 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: dark skin tone # E4.0 [1] (💁🏿‍♂️)
+1F482 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard # E4.0 [1] (💂‍♀️)
+1F482 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard # E4.0 [1] (💂‍♂️)
+1F482 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: light skin tone # E4.0 [1] (💂🏻‍♀️)
+1F482 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: light skin tone # E4.0 [1] (💂🏻‍♂️)
+1F482 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: medium-light skin tone # E4.0 [1] (💂🏼‍♀️)
+1F482 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: medium-light skin tone # E4.0 [1] (💂🏼‍♂️)
+1F482 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: medium skin tone # E4.0 [1] (💂🏽‍♀️)
+1F482 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: medium skin tone # E4.0 [1] (💂🏽‍♂️)
+1F482 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: medium-dark skin tone # E4.0 [1] (💂🏾‍♀️)
+1F482 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: medium-dark skin tone # E4.0 [1] (💂🏾‍♂️)
+1F482 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: dark skin tone # E4.0 [1] (💂🏿‍♀️)
+1F482 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: dark skin tone # E4.0 [1] (💂🏿‍♂️)
+1F486 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage # E4.0 [1] (💆‍♀️)
+1F486 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage # E4.0 [1] (💆‍♂️)
+1F486 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: light skin tone # E4.0 [1] (💆🏻‍♀️)
+1F486 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: light skin tone # E4.0 [1] (💆🏻‍♂️)
+1F486 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: medium-light skin tone # E4.0 [1] (💆🏼‍♀️)
+1F486 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: medium-light skin tone # E4.0 [1] (💆🏼‍♂️)
+1F486 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: medium skin tone # E4.0 [1] (💆🏽‍♀️)
+1F486 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: medium skin tone # E4.0 [1] (💆🏽‍♂️)
+1F486 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: medium-dark skin tone # E4.0 [1] (💆🏾‍♀️)
+1F486 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: medium-dark skin tone # E4.0 [1] (💆🏾‍♂️)
+1F486 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: dark skin tone # E4.0 [1] (💆🏿‍♀️)
+1F486 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: dark skin tone # E4.0 [1] (💆🏿‍♂️)
+1F487 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut # E4.0 [1] (💇‍♀️)
+1F487 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut # E4.0 [1] (💇‍♂️)
+1F487 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: light skin tone # E4.0 [1] (💇🏻‍♀️)
+1F487 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: light skin tone # E4.0 [1] (💇🏻‍♂️)
+1F487 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: medium-light skin tone # E4.0 [1] (💇🏼‍♀️)
+1F487 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: medium-light skin tone # E4.0 [1] (💇🏼‍♂️)
+1F487 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: medium skin tone # E4.0 [1] (💇🏽‍♀️)
+1F487 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: medium skin tone # E4.0 [1] (💇🏽‍♂️)
+1F487 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: medium-dark skin tone # E4.0 [1] (💇🏾‍♀️)
+1F487 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: medium-dark skin tone # E4.0 [1] (💇🏾‍♂️)
+1F487 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: dark skin tone # E4.0 [1] (💇🏿‍♀️)
+1F487 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: dark skin tone # E4.0 [1] (💇🏿‍♂️)
+1F575 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: light skin tone # E4.0 [1] (🕵🏻‍♀️)
+1F575 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: light skin tone # E4.0 [1] (🕵🏻‍♂️)
+1F575 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: medium-light skin tone # E4.0 [1] (🕵🏼‍♀️)
+1F575 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: medium-light skin tone # E4.0 [1] (🕵🏼‍♂️)
+1F575 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: medium skin tone # E4.0 [1] (🕵🏽‍♀️)
+1F575 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: medium skin tone # E4.0 [1] (🕵🏽‍♂️)
+1F575 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: medium-dark skin tone # E4.0 [1] (🕵🏾‍♀️)
+1F575 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: medium-dark skin tone # E4.0 [1] (🕵🏾‍♂️)
+1F575 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: dark skin tone # E4.0 [1] (🕵🏿‍♀️)
+1F575 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: dark skin tone # E4.0 [1] (🕵🏿‍♂️)
+1F575 FE0F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective # E4.0 [1] (🕵️‍♀️)
+1F575 FE0F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective # E4.0 [1] (🕵️‍♂️)
+1F645 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO # E4.0 [1] (🙅‍♀️)
+1F645 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO # E4.0 [1] (🙅‍♂️)
+1F645 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: light skin tone # E4.0 [1] (🙅🏻‍♀️)
+1F645 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: light skin tone # E4.0 [1] (🙅🏻‍♂️)
+1F645 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: medium-light skin tone # E4.0 [1] (🙅🏼‍♀️)
+1F645 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: medium-light skin tone # E4.0 [1] (🙅🏼‍♂️)
+1F645 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: medium skin tone # E4.0 [1] (🙅🏽‍♀️)
+1F645 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: medium skin tone # E4.0 [1] (🙅🏽‍♂️)
+1F645 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: medium-dark skin tone # E4.0 [1] (🙅🏾‍♀️)
+1F645 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: medium-dark skin tone # E4.0 [1] (🙅🏾‍♂️)
+1F645 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: dark skin tone # E4.0 [1] (🙅🏿‍♀️)
+1F645 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: dark skin tone # E4.0 [1] (🙅🏿‍♂️)
+1F646 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK # E4.0 [1] (🙆‍♀️)
+1F646 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK # E4.0 [1] (🙆‍♂️)
+1F646 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: light skin tone # E4.0 [1] (🙆🏻‍♀️)
+1F646 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: light skin tone # E4.0 [1] (🙆🏻‍♂️)
+1F646 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: medium-light skin tone # E4.0 [1] (🙆🏼‍♀️)
+1F646 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: medium-light skin tone # E4.0 [1] (🙆🏼‍♂️)
+1F646 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: medium skin tone # E4.0 [1] (🙆🏽‍♀️)
+1F646 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: medium skin tone # E4.0 [1] (🙆🏽‍♂️)
+1F646 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: medium-dark skin tone # E4.0 [1] (🙆🏾‍♀️)
+1F646 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: medium-dark skin tone # E4.0 [1] (🙆🏾‍♂️)
+1F646 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: dark skin tone # E4.0 [1] (🙆🏿‍♀️)
+1F646 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: dark skin tone # E4.0 [1] (🙆🏿‍♂️)
+1F647 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing # E4.0 [1] (🙇‍♀️)
+1F647 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing # E4.0 [1] (🙇‍♂️)
+1F647 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: light skin tone # E4.0 [1] (🙇🏻‍♀️)
+1F647 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: light skin tone # E4.0 [1] (🙇🏻‍♂️)
+1F647 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: medium-light skin tone # E4.0 [1] (🙇🏼‍♀️)
+1F647 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: medium-light skin tone # E4.0 [1] (🙇🏼‍♂️)
+1F647 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: medium skin tone # E4.0 [1] (🙇🏽‍♀️)
+1F647 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: medium skin tone # E4.0 [1] (🙇🏽‍♂️)
+1F647 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: medium-dark skin tone # E4.0 [1] (🙇🏾‍♀️)
+1F647 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: medium-dark skin tone # E4.0 [1] (🙇🏾‍♂️)
+1F647 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: dark skin tone # E4.0 [1] (🙇🏿‍♀️)
+1F647 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: dark skin tone # E4.0 [1] (🙇🏿‍♂️)
+1F64B 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand # E4.0 [1] (🙋‍♀️)
+1F64B 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand # E4.0 [1] (🙋‍♂️)
+1F64B 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: light skin tone # E4.0 [1] (🙋🏻‍♀️)
+1F64B 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: light skin tone # E4.0 [1] (🙋🏻‍♂️)
+1F64B 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: medium-light skin tone # E4.0 [1] (🙋🏼‍♀️)
+1F64B 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: medium-light skin tone # E4.0 [1] (🙋🏼‍♂️)
+1F64B 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: medium skin tone # E4.0 [1] (🙋🏽‍♀️)
+1F64B 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: medium skin tone # E4.0 [1] (🙋🏽‍♂️)
+1F64B 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: medium-dark skin tone # E4.0 [1] (🙋🏾‍♀️)
+1F64B 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: medium-dark skin tone # E4.0 [1] (🙋🏾‍♂️)
+1F64B 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: dark skin tone # E4.0 [1] (🙋🏿‍♀️)
+1F64B 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: dark skin tone # E4.0 [1] (🙋🏿‍♂️)
+1F64D 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning # E4.0 [1] (🙍‍♀️)
+1F64D 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning # E4.0 [1] (🙍‍♂️)
+1F64D 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: light skin tone # E4.0 [1] (🙍🏻‍♀️)
+1F64D 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: light skin tone # E4.0 [1] (🙍🏻‍♂️)
+1F64D 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: medium-light skin tone # E4.0 [1] (🙍🏼‍♀️)
+1F64D 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: medium-light skin tone # E4.0 [1] (🙍🏼‍♂️)
+1F64D 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: medium skin tone # E4.0 [1] (🙍🏽‍♀️)
+1F64D 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: medium skin tone # E4.0 [1] (🙍🏽‍♂️)
+1F64D 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: medium-dark skin tone # E4.0 [1] (🙍🏾‍♀️)
+1F64D 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: medium-dark skin tone # E4.0 [1] (🙍🏾‍♂️)
+1F64D 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: dark skin tone # E4.0 [1] (🙍🏿‍♀️)
+1F64D 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: dark skin tone # E4.0 [1] (🙍🏿‍♂️)
+1F64E 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting # E4.0 [1] (🙎‍♀️)
+1F64E 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting # E4.0 [1] (🙎‍♂️)
+1F64E 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: light skin tone # E4.0 [1] (🙎🏻‍♀️)
+1F64E 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: light skin tone # E4.0 [1] (🙎🏻‍♂️)
+1F64E 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: medium-light skin tone # E4.0 [1] (🙎🏼‍♀️)
+1F64E 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: medium-light skin tone # E4.0 [1] (🙎🏼‍♂️)
+1F64E 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: medium skin tone # E4.0 [1] (🙎🏽‍♀️)
+1F64E 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: medium skin tone # E4.0 [1] (🙎🏽‍♂️)
+1F64E 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: medium-dark skin tone # E4.0 [1] (🙎🏾‍♀️)
+1F64E 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: medium-dark skin tone # E4.0 [1] (🙎🏾‍♂️)
+1F64E 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: dark skin tone # E4.0 [1] (🙎🏿‍♀️)
+1F64E 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: dark skin tone # E4.0 [1] (🙎🏿‍♂️)
+1F6A3 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat # E4.0 [1] (🚣‍♀️)
+1F6A3 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat # E4.0 [1] (🚣‍♂️)
+1F6A3 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: light skin tone # E4.0 [1] (🚣🏻‍♀️)
+1F6A3 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: light skin tone # E4.0 [1] (🚣🏻‍♂️)
+1F6A3 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: medium-light skin tone # E4.0 [1] (🚣🏼‍♀️)
+1F6A3 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: medium-light skin tone # E4.0 [1] (🚣🏼‍♂️)
+1F6A3 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: medium skin tone # E4.0 [1] (🚣🏽‍♀️)
+1F6A3 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: medium skin tone # E4.0 [1] (🚣🏽‍♂️)
+1F6A3 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: medium-dark skin tone # E4.0 [1] (🚣🏾‍♀️)
+1F6A3 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: medium-dark skin tone # E4.0 [1] (🚣🏾‍♂️)
+1F6A3 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: dark skin tone # E4.0 [1] (🚣🏿‍♀️)
+1F6A3 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: dark skin tone # E4.0 [1] (🚣🏿‍♂️)
+1F6B4 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking # E4.0 [1] (🚴‍♀️)
+1F6B4 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking # E4.0 [1] (🚴‍♂️)
+1F6B4 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: light skin tone # E4.0 [1] (🚴🏻‍♀️)
+1F6B4 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: light skin tone # E4.0 [1] (🚴🏻‍♂️)
+1F6B4 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: medium-light skin tone # E4.0 [1] (🚴🏼‍♀️)
+1F6B4 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: medium-light skin tone # E4.0 [1] (🚴🏼‍♂️)
+1F6B4 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: medium skin tone # E4.0 [1] (🚴🏽‍♀️)
+1F6B4 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: medium skin tone # E4.0 [1] (🚴🏽‍♂️)
+1F6B4 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: medium-dark skin tone # E4.0 [1] (🚴🏾‍♀️)
+1F6B4 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: medium-dark skin tone # E4.0 [1] (🚴🏾‍♂️)
+1F6B4 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: dark skin tone # E4.0 [1] (🚴🏿‍♀️)
+1F6B4 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: dark skin tone # E4.0 [1] (🚴🏿‍♂️)
+1F6B5 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking # E4.0 [1] (🚵‍♀️)
+1F6B5 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking # E4.0 [1] (🚵‍♂️)
+1F6B5 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: light skin tone # E4.0 [1] (🚵🏻‍♀️)
+1F6B5 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: light skin tone # E4.0 [1] (🚵🏻‍♂️)
+1F6B5 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: medium-light skin tone # E4.0 [1] (🚵🏼‍♀️)
+1F6B5 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: medium-light skin tone # E4.0 [1] (🚵🏼‍♂️)
+1F6B5 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: medium skin tone # E4.0 [1] (🚵🏽‍♀️)
+1F6B5 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: medium skin tone # E4.0 [1] (🚵🏽‍♂️)
+1F6B5 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: medium-dark skin tone # E4.0 [1] (🚵🏾‍♀️)
+1F6B5 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: medium-dark skin tone # E4.0 [1] (🚵🏾‍♂️)
+1F6B5 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: dark skin tone # E4.0 [1] (🚵🏿‍♀️)
+1F6B5 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: dark skin tone # E4.0 [1] (🚵🏿‍♂️)
+1F6B6 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking # E4.0 [1] (🚶‍♀️)
+1F6B6 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking # E4.0 [1] (🚶‍♂️)
+1F6B6 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: light skin tone # E4.0 [1] (🚶🏻‍♀️)
+1F6B6 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: light skin tone # E4.0 [1] (🚶🏻‍♂️)
+1F6B6 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: medium-light skin tone # E4.0 [1] (🚶🏼‍♀️)
+1F6B6 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: medium-light skin tone # E4.0 [1] (🚶🏼‍♂️)
+1F6B6 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: medium skin tone # E4.0 [1] (🚶🏽‍♀️)
+1F6B6 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: medium skin tone # E4.0 [1] (🚶🏽‍♂️)
+1F6B6 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: medium-dark skin tone # E4.0 [1] (🚶🏾‍♀️)
+1F6B6 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: medium-dark skin tone # E4.0 [1] (🚶🏾‍♂️)
+1F6B6 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: dark skin tone # E4.0 [1] (🚶🏿‍♀️)
+1F6B6 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: dark skin tone # E4.0 [1] (🚶🏿‍♂️)
+1F926 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming # E4.0 [1] (🤦‍♀️)
+1F926 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming # E4.0 [1] (🤦‍♂️)
+1F926 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: light skin tone # E4.0 [1] (🤦🏻‍♀️)
+1F926 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: light skin tone # E4.0 [1] (🤦🏻‍♂️)
+1F926 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: medium-light skin tone # E4.0 [1] (🤦🏼‍♀️)
+1F926 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: medium-light skin tone # E4.0 [1] (🤦🏼‍♂️)
+1F926 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: medium skin tone # E4.0 [1] (🤦🏽‍♀️)
+1F926 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: medium skin tone # E4.0 [1] (🤦🏽‍♂️)
+1F926 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: medium-dark skin tone # E4.0 [1] (🤦🏾‍♀️)
+1F926 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: medium-dark skin tone # E4.0 [1] (🤦🏾‍♂️)
+1F926 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: dark skin tone # E4.0 [1] (🤦🏿‍♀️)
+1F926 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: dark skin tone # E4.0 [1] (🤦🏿‍♂️)
+1F935 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo # E13.0 [1] (🤵‍♀️)
+1F935 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo # E13.0 [1] (🤵‍♂️)
+1F935 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: light skin tone # E13.0 [1] (🤵🏻‍♀️)
+1F935 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: light skin tone # E13.0 [1] (🤵🏻‍♂️)
+1F935 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: medium-light skin tone # E13.0 [1] (🤵🏼‍♀️)
+1F935 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: medium-light skin tone # E13.0 [1] (🤵🏼‍♂️)
+1F935 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: medium skin tone # E13.0 [1] (🤵🏽‍♀️)
+1F935 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: medium skin tone # E13.0 [1] (🤵🏽‍♂️)
+1F935 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: medium-dark skin tone # E13.0 [1] (🤵🏾‍♀️)
+1F935 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: medium-dark skin tone # E13.0 [1] (🤵🏾‍♂️)
+1F935 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: dark skin tone # E13.0 [1] (🤵🏿‍♀️)
+1F935 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: dark skin tone # E13.0 [1] (🤵🏿‍♂️)
+1F937 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging # E4.0 [1] (🤷‍♀️)
+1F937 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging # E4.0 [1] (🤷‍♂️)
+1F937 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: light skin tone # E4.0 [1] (🤷🏻‍♀️)
+1F937 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: light skin tone # E4.0 [1] (🤷🏻‍♂️)
+1F937 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: medium-light skin tone # E4.0 [1] (🤷🏼‍♀️)
+1F937 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: medium-light skin tone # E4.0 [1] (🤷🏼‍♂️)
+1F937 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: medium skin tone # E4.0 [1] (🤷🏽‍♀️)
+1F937 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: medium skin tone # E4.0 [1] (🤷🏽‍♂️)
+1F937 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: medium-dark skin tone # E4.0 [1] (🤷🏾‍♀️)
+1F937 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: medium-dark skin tone # E4.0 [1] (🤷🏾‍♂️)
+1F937 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: dark skin tone # E4.0 [1] (🤷🏿‍♀️)
+1F937 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: dark skin tone # E4.0 [1] (🤷🏿‍♂️)
+1F938 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling # E4.0 [1] (🤸‍♀️)
+1F938 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling # E4.0 [1] (🤸‍♂️)
+1F938 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: light skin tone # E4.0 [1] (🤸🏻‍♀️)
+1F938 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: light skin tone # E4.0 [1] (🤸🏻‍♂️)
+1F938 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: medium-light skin tone # E4.0 [1] (🤸🏼‍♀️)
+1F938 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: medium-light skin tone # E4.0 [1] (🤸🏼‍♂️)
+1F938 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: medium skin tone # E4.0 [1] (🤸🏽‍♀️)
+1F938 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: medium skin tone # E4.0 [1] (🤸🏽‍♂️)
+1F938 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: medium-dark skin tone # E4.0 [1] (🤸🏾‍♀️)
+1F938 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: medium-dark skin tone # E4.0 [1] (🤸🏾‍♂️)
+1F938 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: dark skin tone # E4.0 [1] (🤸🏿‍♀️)
+1F938 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: dark skin tone # E4.0 [1] (🤸🏿‍♂️)
+1F939 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling # E4.0 [1] (🤹‍♀️)
+1F939 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling # E4.0 [1] (🤹‍♂️)
+1F939 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: light skin tone # E4.0 [1] (🤹🏻‍♀️)
+1F939 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: light skin tone # E4.0 [1] (🤹🏻‍♂️)
+1F939 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: medium-light skin tone # E4.0 [1] (🤹🏼‍♀️)
+1F939 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: medium-light skin tone # E4.0 [1] (🤹🏼‍♂️)
+1F939 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: medium skin tone # E4.0 [1] (🤹🏽‍♀️)
+1F939 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: medium skin tone # E4.0 [1] (🤹🏽‍♂️)
+1F939 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: medium-dark skin tone # E4.0 [1] (🤹🏾‍♀️)
+1F939 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: medium-dark skin tone # E4.0 [1] (🤹🏾‍♂️)
+1F939 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: dark skin tone # E4.0 [1] (🤹🏿‍♀️)
+1F939 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: dark skin tone # E4.0 [1] (🤹🏿‍♂️)
+1F93C 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women wrestling # E4.0 [1] (🤼‍♀️)
+1F93C 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men wrestling # E4.0 [1] (🤼‍♂️)
+1F93D 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo # E4.0 [1] (🤽‍♀️)
+1F93D 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo # E4.0 [1] (🤽‍♂️)
+1F93D 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: light skin tone # E4.0 [1] (🤽🏻‍♀️)
+1F93D 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: light skin tone # E4.0 [1] (🤽🏻‍♂️)
+1F93D 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: medium-light skin tone # E4.0 [1] (🤽🏼‍♀️)
+1F93D 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: medium-light skin tone # E4.0 [1] (🤽🏼‍♂️)
+1F93D 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: medium skin tone # E4.0 [1] (🤽🏽‍♀️)
+1F93D 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: medium skin tone # E4.0 [1] (🤽🏽‍♂️)
+1F93D 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: medium-dark skin tone # E4.0 [1] (🤽🏾‍♀️)
+1F93D 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: medium-dark skin tone # E4.0 [1] (🤽🏾‍♂️)
+1F93D 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: dark skin tone # E4.0 [1] (🤽🏿‍♀️)
+1F93D 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: dark skin tone # E4.0 [1] (🤽🏿‍♂️)
+1F93E 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball # E4.0 [1] (🤾‍♀️)
+1F93E 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball # E4.0 [1] (🤾‍♂️)
+1F93E 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: light skin tone # E4.0 [1] (🤾🏻‍♀️)
+1F93E 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: light skin tone # E4.0 [1] (🤾🏻‍♂️)
+1F93E 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: medium-light skin tone # E4.0 [1] (🤾🏼‍♀️)
+1F93E 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: medium-light skin tone # E4.0 [1] (🤾🏼‍♂️)
+1F93E 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: medium skin tone # E4.0 [1] (🤾🏽‍♀️)
+1F93E 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: medium skin tone # E4.0 [1] (🤾🏽‍♂️)
+1F93E 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: medium-dark skin tone # E4.0 [1] (🤾🏾‍♀️)
+1F93E 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: medium-dark skin tone # E4.0 [1] (🤾🏾‍♂️)
+1F93E 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: dark skin tone # E4.0 [1] (🤾🏿‍♀️)
+1F93E 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: dark skin tone # E4.0 [1] (🤾🏿‍♂️)
+1F9B8 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero # E11.0 [1] (🦸‍♀️)
+1F9B8 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero # E11.0 [1] (🦸‍♂️)
+1F9B8 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: light skin tone # E11.0 [1] (🦸🏻‍♀️)
+1F9B8 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: light skin tone # E11.0 [1] (🦸🏻‍♂️)
+1F9B8 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: medium-light skin tone # E11.0 [1] (🦸🏼‍♀️)
+1F9B8 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: medium-light skin tone # E11.0 [1] (🦸🏼‍♂️)
+1F9B8 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: medium skin tone # E11.0 [1] (🦸🏽‍♀️)
+1F9B8 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: medium skin tone # E11.0 [1] (🦸🏽‍♂️)
+1F9B8 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: medium-dark skin tone # E11.0 [1] (🦸🏾‍♀️)
+1F9B8 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: medium-dark skin tone # E11.0 [1] (🦸🏾‍♂️)
+1F9B8 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: dark skin tone # E11.0 [1] (🦸🏿‍♀️)
+1F9B8 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: dark skin tone # E11.0 [1] (🦸🏿‍♂️)
+1F9B9 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain # E11.0 [1] (🦹‍♀️)
+1F9B9 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain # E11.0 [1] (🦹‍♂️)
+1F9B9 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: light skin tone # E11.0 [1] (🦹🏻‍♀️)
+1F9B9 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: light skin tone # E11.0 [1] (🦹🏻‍♂️)
+1F9B9 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: medium-light skin tone # E11.0 [1] (🦹🏼‍♀️)
+1F9B9 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: medium-light skin tone # E11.0 [1] (🦹🏼‍♂️)
+1F9B9 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: medium skin tone # E11.0 [1] (🦹🏽‍♀️)
+1F9B9 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: medium skin tone # E11.0 [1] (🦹🏽‍♂️)
+1F9B9 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: medium-dark skin tone # E11.0 [1] (🦹🏾‍♀️)
+1F9B9 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: medium-dark skin tone # E11.0 [1] (🦹🏾‍♂️)
+1F9B9 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: dark skin tone # E11.0 [1] (🦹🏿‍♀️)
+1F9B9 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: dark skin tone # E11.0 [1] (🦹🏿‍♂️)
+1F9CD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing # E12.0 [1] (🧍‍♀️)
+1F9CD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing # E12.0 [1] (🧍‍♂️)
+1F9CD 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: light skin tone # E12.0 [1] (🧍🏻‍♀️)
+1F9CD 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: light skin tone # E12.0 [1] (🧍🏻‍♂️)
+1F9CD 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: medium-light skin tone # E12.0 [1] (🧍🏼‍♀️)
+1F9CD 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: medium-light skin tone # E12.0 [1] (🧍🏼‍♂️)
+1F9CD 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: medium skin tone # E12.0 [1] (🧍🏽‍♀️)
+1F9CD 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: medium skin tone # E12.0 [1] (🧍🏽‍♂️)
+1F9CD 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: medium-dark skin tone # E12.0 [1] (🧍🏾‍♀️)
+1F9CD 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: medium-dark skin tone # E12.0 [1] (🧍🏾‍♂️)
+1F9CD 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: dark skin tone # E12.0 [1] (🧍🏿‍♀️)
+1F9CD 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: dark skin tone # E12.0 [1] (🧍🏿‍♂️)
+1F9CE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling # E12.0 [1] (🧎‍♀️)
+1F9CE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling # E12.0 [1] (🧎‍♂️)
+1F9CE 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: light skin tone # E12.0 [1] (🧎🏻‍♀️)
+1F9CE 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: light skin tone # E12.0 [1] (🧎🏻‍♂️)
+1F9CE 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: medium-light skin tone # E12.0 [1] (🧎🏼‍♀️)
+1F9CE 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: medium-light skin tone # E12.0 [1] (🧎🏼‍♂️)
+1F9CE 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: medium skin tone # E12.0 [1] (🧎🏽‍♀️)
+1F9CE 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: medium skin tone # E12.0 [1] (🧎🏽‍♂️)
+1F9CE 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: medium-dark skin tone # E12.0 [1] (🧎🏾‍♀️)
+1F9CE 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: medium-dark skin tone # E12.0 [1] (🧎🏾‍♂️)
+1F9CE 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: dark skin tone # E12.0 [1] (🧎🏿‍♀️)
+1F9CE 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: dark skin tone # E12.0 [1] (🧎🏿‍♂️)
+1F9CF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman # E12.0 [1] (🧏‍♀️)
+1F9CF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man # E12.0 [1] (🧏‍♂️)
+1F9CF 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: light skin tone # E12.0 [1] (🧏🏻‍♀️)
+1F9CF 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: light skin tone # E12.0 [1] (🧏🏻‍♂️)
+1F9CF 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: medium-light skin tone # E12.0 [1] (🧏🏼‍♀️)
+1F9CF 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: medium-light skin tone # E12.0 [1] (🧏🏼‍♂️)
+1F9CF 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: medium skin tone # E12.0 [1] (🧏🏽‍♀️)
+1F9CF 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: medium skin tone # E12.0 [1] (🧏🏽‍♂️)
+1F9CF 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: medium-dark skin tone # E12.0 [1] (🧏🏾‍♀️)
+1F9CF 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: medium-dark skin tone # E12.0 [1] (🧏🏾‍♂️)
+1F9CF 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: dark skin tone # E12.0 [1] (🧏🏿‍♀️)
+1F9CF 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: dark skin tone # E12.0 [1] (🧏🏿‍♂️)
+1F9D4 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: beard # E13.1 [1] (🧔‍♀️)
+1F9D4 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: beard # E13.1 [1] (🧔‍♂️)
+1F9D4 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, beard # E13.1 [1] (🧔🏻‍♀️)
+1F9D4 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, beard # E13.1 [1] (🧔🏻‍♂️)
+1F9D4 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, beard # E13.1 [1] (🧔🏼‍♀️)
+1F9D4 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, beard # E13.1 [1] (🧔🏼‍♂️)
+1F9D4 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, beard # E13.1 [1] (🧔🏽‍♀️)
+1F9D4 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, beard # E13.1 [1] (🧔🏽‍♂️)
+1F9D4 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, beard # E13.1 [1] (🧔🏾‍♀️)
+1F9D4 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, beard # E13.1 [1] (🧔🏾‍♂️)
+1F9D4 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, beard # E13.1 [1] (🧔🏿‍♀️)
+1F9D4 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, beard # E13.1 [1] (🧔🏿‍♂️)
+1F9D6 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room # E5.0 [1] (🧖‍♀️)
+1F9D6 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room # E5.0 [1] (🧖‍♂️)
+1F9D6 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: light skin tone # E5.0 [1] (🧖🏻‍♀️)
+1F9D6 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: light skin tone # E5.0 [1] (🧖🏻‍♂️)
+1F9D6 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: medium-light skin tone # E5.0 [1] (🧖🏼‍♀️)
+1F9D6 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: medium-light skin tone # E5.0 [1] (🧖🏼‍♂️)
+1F9D6 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: medium skin tone # E5.0 [1] (🧖🏽‍♀️)
+1F9D6 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: medium skin tone # E5.0 [1] (🧖🏽‍♂️)
+1F9D6 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: medium-dark skin tone # E5.0 [1] (🧖🏾‍♀️)
+1F9D6 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: medium-dark skin tone # E5.0 [1] (🧖🏾‍♂️)
+1F9D6 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: dark skin tone # E5.0 [1] (🧖🏿‍♀️)
+1F9D6 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: dark skin tone # E5.0 [1] (🧖🏿‍♂️)
+1F9D7 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing # E5.0 [1] (🧗‍♀️)
+1F9D7 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing # E5.0 [1] (🧗‍♂️)
+1F9D7 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: light skin tone # E5.0 [1] (🧗🏻‍♀️)
+1F9D7 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: light skin tone # E5.0 [1] (🧗🏻‍♂️)
+1F9D7 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: medium-light skin tone # E5.0 [1] (🧗🏼‍♀️)
+1F9D7 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: medium-light skin tone # E5.0 [1] (🧗🏼‍♂️)
+1F9D7 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: medium skin tone # E5.0 [1] (🧗🏽‍♀️)
+1F9D7 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: medium skin tone # E5.0 [1] (🧗🏽‍♂️)
+1F9D7 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: medium-dark skin tone # E5.0 [1] (🧗🏾‍♀️)
+1F9D7 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: medium-dark skin tone # E5.0 [1] (🧗🏾‍♂️)
+1F9D7 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: dark skin tone # E5.0 [1] (🧗🏿‍♀️)
+1F9D7 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: dark skin tone # E5.0 [1] (🧗🏿‍♂️)
+1F9D8 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position # E5.0 [1] (🧘‍♀️)
+1F9D8 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position # E5.0 [1] (🧘‍♂️)
+1F9D8 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: light skin tone # E5.0 [1] (🧘🏻‍♀️)
+1F9D8 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: light skin tone # E5.0 [1] (🧘🏻‍♂️)
+1F9D8 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: medium-light skin tone # E5.0 [1] (🧘🏼‍♀️)
+1F9D8 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: medium-light skin tone # E5.0 [1] (🧘🏼‍♂️)
+1F9D8 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: medium skin tone # E5.0 [1] (🧘🏽‍♀️)
+1F9D8 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: medium skin tone # E5.0 [1] (🧘🏽‍♂️)
+1F9D8 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: medium-dark skin tone # E5.0 [1] (🧘🏾‍♀️)
+1F9D8 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: medium-dark skin tone # E5.0 [1] (🧘🏾‍♂️)
+1F9D8 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: dark skin tone # E5.0 [1] (🧘🏿‍♀️)
+1F9D8 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: dark skin tone # E5.0 [1] (🧘🏿‍♂️)
+1F9D9 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage # E5.0 [1] (🧙‍♀️)
+1F9D9 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage # E5.0 [1] (🧙‍♂️)
+1F9D9 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: light skin tone # E5.0 [1] (🧙🏻‍♀️)
+1F9D9 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: light skin tone # E5.0 [1] (🧙🏻‍♂️)
+1F9D9 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: medium-light skin tone # E5.0 [1] (🧙🏼‍♀️)
+1F9D9 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: medium-light skin tone # E5.0 [1] (🧙🏼‍♂️)
+1F9D9 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: medium skin tone # E5.0 [1] (🧙🏽‍♀️)
+1F9D9 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: medium skin tone # E5.0 [1] (🧙🏽‍♂️)
+1F9D9 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: medium-dark skin tone # E5.0 [1] (🧙🏾‍♀️)
+1F9D9 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: medium-dark skin tone # E5.0 [1] (🧙🏾‍♂️)
+1F9D9 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: dark skin tone # E5.0 [1] (🧙🏿‍♀️)
+1F9D9 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: dark skin tone # E5.0 [1] (🧙🏿‍♂️)
+1F9DA 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy # E5.0 [1] (🧚‍♀️)
+1F9DA 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy # E5.0 [1] (🧚‍♂️)
+1F9DA 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: light skin tone # E5.0 [1] (🧚🏻‍♀️)
+1F9DA 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: light skin tone # E5.0 [1] (🧚🏻‍♂️)
+1F9DA 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: medium-light skin tone # E5.0 [1] (🧚🏼‍♀️)
+1F9DA 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: medium-light skin tone # E5.0 [1] (🧚🏼‍♂️)
+1F9DA 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: medium skin tone # E5.0 [1] (🧚🏽‍♀️)
+1F9DA 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: medium skin tone # E5.0 [1] (🧚🏽‍♂️)
+1F9DA 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: medium-dark skin tone # E5.0 [1] (🧚🏾‍♀️)
+1F9DA 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: medium-dark skin tone # E5.0 [1] (🧚🏾‍♂️)
+1F9DA 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: dark skin tone # E5.0 [1] (🧚🏿‍♀️)
+1F9DA 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: dark skin tone # E5.0 [1] (🧚🏿‍♂️)
+1F9DB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire # E5.0 [1] (🧛‍♀️)
+1F9DB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire # E5.0 [1] (🧛‍♂️)
+1F9DB 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: light skin tone # E5.0 [1] (🧛🏻‍♀️)
+1F9DB 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: light skin tone # E5.0 [1] (🧛🏻‍♂️)
+1F9DB 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: medium-light skin tone # E5.0 [1] (🧛🏼‍♀️)
+1F9DB 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: medium-light skin tone # E5.0 [1] (🧛🏼‍♂️)
+1F9DB 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: medium skin tone # E5.0 [1] (🧛🏽‍♀️)
+1F9DB 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: medium skin tone # E5.0 [1] (🧛🏽‍♂️)
+1F9DB 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: medium-dark skin tone # E5.0 [1] (🧛🏾‍♀️)
+1F9DB 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: medium-dark skin tone # E5.0 [1] (🧛🏾‍♂️)
+1F9DB 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: dark skin tone # E5.0 [1] (🧛🏿‍♀️)
+1F9DB 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: dark skin tone # E5.0 [1] (🧛🏿‍♂️)
+1F9DC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid # E5.0 [1] (🧜‍♀️)
+1F9DC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman # E5.0 [1] (🧜‍♂️)
+1F9DC 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: light skin tone # E5.0 [1] (🧜🏻‍♀️)
+1F9DC 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: light skin tone # E5.0 [1] (🧜🏻‍♂️)
+1F9DC 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: medium-light skin tone # E5.0 [1] (🧜🏼‍♀️)
+1F9DC 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: medium-light skin tone # E5.0 [1] (🧜🏼‍♂️)
+1F9DC 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: medium skin tone # E5.0 [1] (🧜🏽‍♀️)
+1F9DC 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: medium skin tone # E5.0 [1] (🧜🏽‍♂️)
+1F9DC 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: medium-dark skin tone # E5.0 [1] (🧜🏾‍♀️)
+1F9DC 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: medium-dark skin tone # E5.0 [1] (🧜🏾‍♂️)
+1F9DC 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: dark skin tone # E5.0 [1] (🧜🏿‍♀️)
+1F9DC 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: dark skin tone # E5.0 [1] (🧜🏿‍♂️)
+1F9DD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf # E5.0 [1] (🧝‍♀️)
+1F9DD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf # E5.0 [1] (🧝‍♂️)
+1F9DD 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: light skin tone # E5.0 [1] (🧝🏻‍♀️)
+1F9DD 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: light skin tone # E5.0 [1] (🧝🏻‍♂️)
+1F9DD 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: medium-light skin tone # E5.0 [1] (🧝🏼‍♀️)
+1F9DD 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: medium-light skin tone # E5.0 [1] (🧝🏼‍♂️)
+1F9DD 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: medium skin tone # E5.0 [1] (🧝🏽‍♀️)
+1F9DD 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: medium skin tone # E5.0 [1] (🧝🏽‍♂️)
+1F9DD 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: medium-dark skin tone # E5.0 [1] (🧝🏾‍♀️)
+1F9DD 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: medium-dark skin tone # E5.0 [1] (🧝🏾‍♂️)
+1F9DD 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: dark skin tone # E5.0 [1] (🧝🏿‍♀️)
+1F9DD 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: dark skin tone # E5.0 [1] (🧝🏿‍♂️)
+1F9DE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman genie # E5.0 [1] (🧞‍♀️)
+1F9DE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man genie # E5.0 [1] (🧞‍♂️)
+1F9DF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman zombie # E5.0 [1] (🧟‍♀️)
+1F9DF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man zombie # E5.0 [1] (🧟‍♂️)
+
+# Total elements: 572
+
+# ================================================
+
+# RGI_Emoji_ZWJ_Sequence: Hair
+
+1F468 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: red hair # E11.0 [1] (👨‍🦰)
+1F468 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: curly hair # E11.0 [1] (👨‍🦱)
+1F468 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: bald # E11.0 [1] (👨‍🦲)
+1F468 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: white hair # E11.0 [1] (👨‍🦳)
+1F468 1F3FB 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, red hair # E11.0 [1] (👨🏻‍🦰)
+1F468 1F3FB 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, curly hair # E11.0 [1] (👨🏻‍🦱)
+1F468 1F3FB 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, bald # E11.0 [1] (👨🏻‍🦲)
+1F468 1F3FB 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, white hair # E11.0 [1] (👨🏻‍🦳)
+1F468 1F3FC 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, red hair # E11.0 [1] (👨🏼‍🦰)
+1F468 1F3FC 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, curly hair # E11.0 [1] (👨🏼‍🦱)
+1F468 1F3FC 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, bald # E11.0 [1] (👨🏼‍🦲)
+1F468 1F3FC 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, white hair # E11.0 [1] (👨🏼‍🦳)
+1F468 1F3FD 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, red hair # E11.0 [1] (👨🏽‍🦰)
+1F468 1F3FD 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, curly hair # E11.0 [1] (👨🏽‍🦱)
+1F468 1F3FD 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, bald # E11.0 [1] (👨🏽‍🦲)
+1F468 1F3FD 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, white hair # E11.0 [1] (👨🏽‍🦳)
+1F468 1F3FE 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, red hair # E11.0 [1] (👨🏾‍🦰)
+1F468 1F3FE 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, curly hair # E11.0 [1] (👨🏾‍🦱)
+1F468 1F3FE 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, bald # E11.0 [1] (👨🏾‍🦲)
+1F468 1F3FE 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, white hair # E11.0 [1] (👨🏾‍🦳)
+1F468 1F3FF 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, red hair # E11.0 [1] (👨🏿‍🦰)
+1F468 1F3FF 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, curly hair # E11.0 [1] (👨🏿‍🦱)
+1F468 1F3FF 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, bald # E11.0 [1] (👨🏿‍🦲)
+1F468 1F3FF 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, white hair # E11.0 [1] (👨🏿‍🦳)
+1F469 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: red hair # E11.0 [1] (👩‍🦰)
+1F469 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: curly hair # E11.0 [1] (👩‍🦱)
+1F469 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: bald # E11.0 [1] (👩‍🦲)
+1F469 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: white hair # E11.0 [1] (👩‍🦳)
+1F469 1F3FB 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, red hair # E11.0 [1] (👩🏻‍🦰)
+1F469 1F3FB 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, curly hair # E11.0 [1] (👩🏻‍🦱)
+1F469 1F3FB 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, bald # E11.0 [1] (👩🏻‍🦲)
+1F469 1F3FB 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, white hair # E11.0 [1] (👩🏻‍🦳)
+1F469 1F3FC 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, red hair # E11.0 [1] (👩🏼‍🦰)
+1F469 1F3FC 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, curly hair # E11.0 [1] (👩🏼‍🦱)
+1F469 1F3FC 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, bald # E11.0 [1] (👩🏼‍🦲)
+1F469 1F3FC 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, white hair # E11.0 [1] (👩🏼‍🦳)
+1F469 1F3FD 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, red hair # E11.0 [1] (👩🏽‍🦰)
+1F469 1F3FD 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, curly hair # E11.0 [1] (👩🏽‍🦱)
+1F469 1F3FD 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, bald # E11.0 [1] (👩🏽‍🦲)
+1F469 1F3FD 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, white hair # E11.0 [1] (👩🏽‍🦳)
+1F469 1F3FE 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, red hair # E11.0 [1] (👩🏾‍🦰)
+1F469 1F3FE 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, curly hair # E11.0 [1] (👩🏾‍🦱)
+1F469 1F3FE 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, bald # E11.0 [1] (👩🏾‍🦲)
+1F469 1F3FE 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, white hair # E11.0 [1] (👩🏾‍🦳)
+1F469 1F3FF 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, red hair # E11.0 [1] (👩🏿‍🦰)
+1F469 1F3FF 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, curly hair # E11.0 [1] (👩🏿‍🦱)
+1F469 1F3FF 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, bald # E11.0 [1] (👩🏿‍🦲)
+1F469 1F3FF 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, white hair # E11.0 [1] (👩🏿‍🦳)
+1F9D1 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: red hair # E12.1 [1] (🧑‍🦰)
+1F9D1 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: curly hair # E12.1 [1] (🧑‍🦱)
+1F9D1 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: bald # E12.1 [1] (🧑‍🦲)
+1F9D1 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: white hair # E12.1 [1] (🧑‍🦳)
+1F9D1 1F3FB 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: light skin tone, red hair # E12.1 [1] (🧑🏻‍🦰)
+1F9D1 1F3FB 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: light skin tone, curly hair # E12.1 [1] (🧑🏻‍🦱)
+1F9D1 1F3FB 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: light skin tone, bald # E12.1 [1] (🧑🏻‍🦲)
+1F9D1 1F3FB 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: light skin tone, white hair # E12.1 [1] (🧑🏻‍🦳)
+1F9D1 1F3FC 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: medium-light skin tone, red hair # E12.1 [1] (🧑🏼‍🦰)
+1F9D1 1F3FC 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: medium-light skin tone, curly hair # E12.1 [1] (🧑🏼‍🦱)
+1F9D1 1F3FC 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: medium-light skin tone, bald # E12.1 [1] (🧑🏼‍🦲)
+1F9D1 1F3FC 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: medium-light skin tone, white hair # E12.1 [1] (🧑🏼‍🦳)
+1F9D1 1F3FD 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: medium skin tone, red hair # E12.1 [1] (🧑🏽‍🦰)
+1F9D1 1F3FD 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: medium skin tone, curly hair # E12.1 [1] (🧑🏽‍🦱)
+1F9D1 1F3FD 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: medium skin tone, bald # E12.1 [1] (🧑🏽‍🦲)
+1F9D1 1F3FD 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: medium skin tone, white hair # E12.1 [1] (🧑🏽‍🦳)
+1F9D1 1F3FE 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: medium-dark skin tone, red hair # E12.1 [1] (🧑🏾‍🦰)
+1F9D1 1F3FE 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: medium-dark skin tone, curly hair # E12.1 [1] (🧑🏾‍🦱)
+1F9D1 1F3FE 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: medium-dark skin tone, bald # E12.1 [1] (🧑🏾‍🦲)
+1F9D1 1F3FE 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: medium-dark skin tone, white hair # E12.1 [1] (🧑🏾‍🦳)
+1F9D1 1F3FF 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: dark skin tone, red hair # E12.1 [1] (🧑🏿‍🦰)
+1F9D1 1F3FF 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: dark skin tone, curly hair # E12.1 [1] (🧑🏿‍🦱)
+1F9D1 1F3FF 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: dark skin tone, bald # E12.1 [1] (🧑🏿‍🦲)
+1F9D1 1F3FF 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: dark skin tone, white hair # E12.1 [1] (🧑🏿‍🦳)
+
+# Total elements: 72
+
+# ================================================
+
+# RGI_Emoji_ZWJ_Sequence: Other
+
+2764 FE0F 200D 1F525 ; RGI_Emoji_ZWJ_Sequence ; heart on fire # E13.1 [1] (❤️‍🔥)
+2764 FE0F 200D 1FA79 ; RGI_Emoji_ZWJ_Sequence ; mending heart # E13.1 [1] (❤️‍🩹)
+1F3F3 FE0F 200D 26A7 FE0F ; RGI_Emoji_ZWJ_Sequence ; transgender flag # E13.0 [1] (🏳️‍⚧️)
+1F3F3 FE0F 200D 1F308 ; RGI_Emoji_ZWJ_Sequence ; rainbow flag # E4.0 [1] (🏳️‍🌈)
+1F3F4 200D 2620 FE0F ; RGI_Emoji_ZWJ_Sequence ; pirate flag # E11.0 [1] (🏴‍☠️)
+1F408 200D 2B1B ; RGI_Emoji_ZWJ_Sequence ; black cat # E13.0 [1] (🐈‍⬛)
+1F415 200D 1F9BA ; RGI_Emoji_ZWJ_Sequence ; service dog # E12.0 [1] (🐕‍🦺)
+1F43B 200D 2744 FE0F ; RGI_Emoji_ZWJ_Sequence ; polar bear # E13.0 [1] (🐻‍❄️)
+1F441 FE0F 200D 1F5E8 FE0F ; RGI_Emoji_ZWJ_Sequence ; eye in speech bubble # E2.0 [1] (👁️‍🗨️)
+1F62E 200D 1F4A8 ; RGI_Emoji_ZWJ_Sequence ; face exhaling # E13.1 [1] (😮‍💨)
+1F635 200D 1F4AB ; RGI_Emoji_ZWJ_Sequence ; face with spiral eyes # E13.1 [1] (😵‍💫)
+1F636 200D 1F32B FE0F ; RGI_Emoji_ZWJ_Sequence ; face in clouds # E13.1 [1] (😶‍🌫️)
+1F9D1 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus # E13.0 [1] (🧑‍🎄)
+
+# Total elements: 13
+
+#EOF
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/generate.sh b/Build/source/libs/icu/icu-src/source/data/unidata/generate.sh
new file mode 100755
index 00000000000..9782cd14d2e
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/generate.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# © 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# This script runs Bazel to create (generate) header files and binary data files
+# with Unicode character/script/collation data that are
+# needed for bootstrapping the ICU4C build to integrate the data.
+
+# Required environment variables:
+# - ICU_SRC - the root directory of ICU source. This directory contains the
+# `icu4c` directory.
+
+ICU4C_COMMON=$ICU_SRC/icu4c/source/common
+ICU4C_DATA_IN=$ICU_SRC/icu4c/source/data/in
+ICU4C_NORM2=$ICU_SRC/icu4c/source/data/unidata/norm2
+
+# Delete the files from the source tree that we need to generate,
+# to make extra sure that we do not depend on their old versions for generating new ones.
+# We cannot just delete *_data.h because ucol_data.h is not a generated header file.
+rm $ICU_SRC/icu4c/source/common/norm2_nfc_data.h
+rm $ICU_SRC/icu4c/source/common/propname_data.h
+rm $ICU_SRC/icu4c/source/common/*_props_data.h
+rm $ICU4C_DATA_IN/*.icu
+rm $ICU4C_DATA_IN/*.nrm
+rm $ICU4C_DATA_IN/coll/*.icu
+# icu4c/source/i18n/collationfcd.cpp is generated by genuca;
+# probably hard to build genuca without depending on the old version.
+
+# Exit this shell script when a command fails.
+set -e
+
+# Generate normalization data files directly into the source tree.
+bazelisk run //icu4c/source/tools/gennorm2 -- -o $ICU4C_COMMON/norm2_nfc_data.h -s $ICU4C_NORM2 nfc.txt --csource
+bazelisk run //icu4c/source/tools/gennorm2 -- -o $ICU4C_DATA_IN/nfc.nrm -s $ICU4C_NORM2 nfc.txt
+bazelisk run //icu4c/source/tools/gennorm2 -- -o $ICU4C_DATA_IN/nfkc.nrm -s $ICU4C_NORM2 nfc.txt nfkc.txt
+bazelisk run //icu4c/source/tools/gennorm2 -- -o $ICU4C_DATA_IN/nfkc_cf.nrm -s $ICU4C_NORM2 nfc.txt nfkc.txt nfkc_cf.txt
+bazelisk run //icu4c/source/tools/gennorm2 -- -o $ICU4C_DATA_IN/uts46.nrm -s $ICU4C_NORM2 nfc.txt uts46.txt
+
+# genprops writes several files directly into the source tree.
+bazelisk run //tools/unicode/c/genprops $ICU_SRC/icu4c
+
+# genuca also writes several files directly into the source tree.
+# We run it twice for different versions of the CLDR root sort order.
+bazelisk run //tools/unicode/c/genuca -- --hanOrder implicit $ICU_SRC/icu4c
+bazelisk run //tools/unicode/c/genuca -- --hanOrder radical-stroke $ICU_SRC/icu4c
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/BUILD b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/BUILD
new file mode 100644
index 00000000000..049e19bd41a
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/BUILD
@@ -0,0 +1,13 @@
+# © 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# This Bazel build file is needed to declare targets for the files used as
+# inputs to binary executables that are a part of other Bazel genrule targets.
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+exports_files([
+ "nfc.txt", "nfkc.txt", "nfkc_cf.txt", "uts46.txt",
+])
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
index 638b5feffcd..c9168ad4c50 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
@@ -9,7 +9,7 @@
#
# Complete data for Unicode NFC normalization.
-* Unicode 13.0.0
+* Unicode 14.0.0
# Canonical_Combining_Class (ccc) values
0300..0314:230
@@ -132,7 +132,11 @@
0825..0827:230
0829..082D:230
0859..085B:220
-08D3:220
+0898:230
+0899..089B:220
+089C..089F:230
+08CA..08CE:230
+08CF..08D3:220
08D4..08E1:230
08E3:220
08E4..08E5:230
@@ -164,6 +168,7 @@
0B3C:7
0B4D:9
0BCD:9
+0C3C:7
0C4D:9
0C55:84
0C56:91
@@ -195,7 +200,7 @@
1039..103A:9
108D:220
135D..135F:230
-1714:9
+1714..1715:9
1734:9
17D2:9
17DD:230
@@ -213,6 +218,11 @@
1ABB..1ABC:230
1ABD:220
1ABF..1AC0:220
+1AC1..1AC2:230
+1AC3..1AC4:220
+1AC5..1AC9:230
+1ACA:220
+1ACB..1ACE:230
1B34:7
1B44:9
1B6B:230
@@ -245,6 +255,7 @@
1DF6:232
1DF7..1DF8:228
1DF9:220
+1DFA:218
1DFB:230
1DFC:233
1DFD:220
@@ -314,7 +325,12 @@ FE2E..FE2F:230
10F4B:220
10F4C:230
10F4D..10F50:220
+10F82:230
+10F83:220
+10F84:230
+10F85:220
11046:9
+11070:9
1107F:9
110B9:9
110BA:7
@@ -373,6 +389,7 @@ FE2E..FE2F:230
1E023..1E024:230
1E026..1E02A:230
1E130..1E136:230
+1E2AE:230
1E2EC..1E2EF:230
1E8D0..1E8D6:220
1E944..1E949:230
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
index 675cd107aaa..566468419a2 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
@@ -13,7 +13,7 @@
# to NFKC one-way mappings.
# Use this file as the second gennorm2 input file after nfc.txt.
-* Unicode 13.0.0
+* Unicode 14.0.0
00A0>0020
00A8>0020 0308
@@ -1367,6 +1367,9 @@
A69C>044A
A69D>044C
A770>A76F
+A7F2>0043
+A7F3>0046
+A7F4>0051
A7F8>0126
A7F9>0153
AB5C>A727
@@ -2419,6 +2422,62 @@ FFEB>2192
FFEC>2193
FFED>25A0
FFEE>25CB
+10781>02D0
+10782>02D1
+10783>00E6
+10784>0299
+10785>0253
+10787>02A3
+10788>AB66
+10789>02A5
+1078A>02A4
+1078B>0256
+1078C>0257
+1078D>1D91
+1078E>0258
+1078F>025E
+10790>02A9
+10791>0264
+10792>0262
+10793>0260
+10794>029B
+10795>0127
+10796>029C
+10797>0267
+10798>0284
+10799>02AA
+1079A>02AB
+1079B>026C
+1079C>1DF04
+1079D>A78E
+1079E>026E
+1079F>1DF05
+107A0>028E
+107A1>1DF06
+107A2>00F8
+107A3>0276
+107A4>0277
+107A5>0071
+107A6>027A
+107A7>1DF08
+107A8>027D
+107A9>027E
+107AA>0280
+107AB>02A8
+107AC>02A6
+107AD>AB67
+107AE>02A7
+107AF>0288
+107B0>2C71
+107B2>028F
+107B3>02A1
+107B4>02A2
+107B5>0298
+107B6>01C0
+107B7>01C1
+107B8>01C2
+107B9>1DF0A
+107BA>1DF1E
1D400>0041
1D401>0042
1D402>0043
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
index 21c441f945b..fe677510e60 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
@@ -12,7 +12,7 @@
# and reformatted into syntax for the gennorm2 Normalizer2 data generator tool.
# Use this file as the third gennorm2 input file after nfc.txt and nfkc.txt.
-* Unicode 13.0.0
+* Unicode 14.0.0
0041>0061
0042>0062
@@ -639,7 +639,7 @@
13FC>13F4
13FD>13F5
17B4..17B5>
-180B..180E>
+180B..180F>
1C80>0432
1C81>0434
1C82>043E
@@ -1433,6 +1433,7 @@
2C2C>2C5C
2C2D>2C5D
2C2E>2C5E
+2C2F>2C5F
2C60>2C61
2C62>026B
2C63>1D7D
@@ -2454,12 +2455,19 @@ A7B8>A7B9
A7BA>A7BB
A7BC>A7BD
A7BE>A7BF
+A7C0>A7C1
A7C2>A7C3
A7C4>A794
A7C5>0282
A7C6>1D8E
A7C7>A7C8
A7C9>A7CA
+A7D0>A7D1
+A7D6>A7D7
+A7D8>A7D9
+A7F2>0063
+A7F3>0066
+A7F4>0071
A7F5>A7F6
A7F8>0127
A7F9>0153
@@ -3960,6 +3968,97 @@ FFF0..FFF8>
104D1>104F9
104D2>104FA
104D3>104FB
+10570>10597
+10571>10598
+10572>10599
+10573>1059A
+10574>1059B
+10575>1059C
+10576>1059D
+10577>1059E
+10578>1059F
+10579>105A0
+1057A>105A1
+1057C>105A3
+1057D>105A4
+1057E>105A5
+1057F>105A6
+10580>105A7
+10581>105A8
+10582>105A9
+10583>105AA
+10584>105AB
+10585>105AC
+10586>105AD
+10587>105AE
+10588>105AF
+10589>105B0
+1058A>105B1
+1058C>105B3
+1058D>105B4
+1058E>105B5
+1058F>105B6
+10590>105B7
+10591>105B8
+10592>105B9
+10594>105BB
+10595>105BC
+10781>02D0
+10782>02D1
+10783>00E6
+10784>0299
+10785>0253
+10787>02A3
+10788>AB66
+10789>02A5
+1078A>02A4
+1078B>0256
+1078C>0257
+1078D>1D91
+1078E>0258
+1078F>025E
+10790>02A9
+10791>0264
+10792>0262
+10793>0260
+10794>029B
+10795>0127
+10796>029C
+10797>0267
+10798>0284
+10799>02AA
+1079A>02AB
+1079B>026C
+1079C>1DF04
+1079D>A78E
+1079E>026E
+1079F>1DF05
+107A0>028E
+107A1>1DF06
+107A2>00F8
+107A3>0276
+107A4>0277
+107A5>0071
+107A6>027A
+107A7>1DF08
+107A8>027D
+107A9>027E
+107AA>0280
+107AB>02A8
+107AC>02A6
+107AD>AB67
+107AE>02A7
+107AF>0288
+107B0>2C71
+107B2>028F
+107B3>02A1
+107B4>02A2
+107B5>0298
+107B6>01C0
+107B7>01C1
+107B8>01C2
+107B9>1DF0A
+107BA>1DF1E
10C80>10CC0
10C81>10CC1
10C82>10CC2
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
index 06f7beab684..a96f08b55a0 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
@@ -1,12 +1,12 @@
# Original file:
# IdnaMappingTable.txt
-# Date: 2019-11-07, 13:44:35 GMT
-# © 2019 Unicode®, Inc.
+# Date: 2021-07-10, 00:49:51 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode IDNA Compatible Preprocessing for UTS #46
-# Version: 13.0.0
+# Version: 14.0.0
#
# For documentation and usage, see http://www.unicode.org/reports/tr46
@@ -923,7 +923,7 @@
# 0616..061A valid # 5.1 ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH..ARABIC SMALL KASRA
# 061B valid # 1.1 ARABIC SEMICOLON
061C >FFFD # 6.3 ARABIC LETTER MARK
-061D >FFFD # NA <reserved-061D>
+# 061D valid # 14.0 ARABIC END OF TEXT MARK
# 061E valid # 4.1 ARABIC TRIPLE DOT PUNCTUATION MARK
# 061F valid # 1.1 ARABIC QUESTION MARK
# 0620 valid # 6.0 ARABIC LETTER KASHMIRI YEH
@@ -988,16 +988,23 @@
# 085E valid # 6.0 MANDAIC PUNCTUATION
085F >FFFD # NA <reserved-085F>
# 0860..086A valid # 10.0 SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
-086B..089F >FFFD # NA <reserved-086B>..<reserved-089F>
+086B..086F >FFFD # NA <reserved-086B>..<reserved-086F>
+# 0870..0887 valid # 14.0 ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT
+# 0888 valid # 14.0 ARABIC RAISED ROUND DOT
+# 0889..088E valid # 14.0 ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL
+088F >FFFD # NA <reserved-088F>
+0890..0891 >FFFD # 14.0 ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE
+0892..0897 >FFFD # NA <reserved-0892>..<reserved-0897>
+# 0898..089F valid # 14.0 ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA
# 08A0 valid # 6.1 ARABIC LETTER BEH WITH SMALL V BELOW
# 08A1 valid # 7.0 ARABIC LETTER BEH WITH HAMZA ABOVE
# 08A2..08AC valid # 6.1 ARABIC LETTER JEEM WITH TWO DOTS ABOVE..ARABIC LETTER ROHINGYA YEH
# 08AD..08B2 valid # 7.0 ARABIC LETTER LOW ALEF..ARABIC LETTER ZAIN WITH INVERTED V ABOVE
# 08B3..08B4 valid # 8.0 ARABIC LETTER AIN WITH THREE DOTS BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B5 >FFFD # NA <reserved-08B5>
+# 08B5 valid # 14.0 ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE
# 08B6..08BD valid # 9.0 ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
# 08BE..08C7 valid # 13.0 ARABIC LETTER PEH WITH SMALL V..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
-08C8..08D2 >FFFD # NA <reserved-08C8>..<reserved-08D2>
+# 08C8..08D2 valid # 14.0 ARABIC LETTER GRAF..ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW
# 08D3 valid # 11.0 ARABIC SMALL LOW WAW
# 08D4..08E1 valid # 9.0 ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
08E2 >FFFD # 9.0 ARABIC DISPUTED END OF AYAH
@@ -1233,7 +1240,8 @@
# 0C2A..0C33 valid # 1.1 TELUGU LETTER PA..TELUGU LETTER LLA
# 0C34 valid # 7.0 TELUGU LETTER LLLA
# 0C35..0C39 valid # 1.1 TELUGU LETTER VA..TELUGU LETTER HA
-0C3A..0C3C >FFFD # NA <reserved-0C3A>..<reserved-0C3C>
+0C3A..0C3B >FFFD # NA <reserved-0C3A>..<reserved-0C3B>
+# 0C3C valid # 14.0 TELUGU SIGN NUKTA
# 0C3D valid # 5.1 TELUGU SIGN AVAGRAHA
# 0C3E..0C44 valid # 1.1 TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN VOCALIC RR
0C45 >FFFD # NA <reserved-0C45>
@@ -1245,7 +1253,9 @@
0C57 >FFFD # NA <reserved-0C57>
# 0C58..0C59 valid # 5.1 TELUGU LETTER TSA..TELUGU LETTER DZA
# 0C5A valid # 8.0 TELUGU LETTER RRRA
-0C5B..0C5F >FFFD # NA <reserved-0C5B>..<reserved-0C5F>
+0C5B..0C5C >FFFD # NA <reserved-0C5B>..<reserved-0C5C>
+# 0C5D valid # 14.0 TELUGU LETTER NAKAARA POLLU
+0C5E..0C5F >FFFD # NA <reserved-0C5E>..<reserved-0C5F>
# 0C60..0C61 valid # 1.1 TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
# 0C62..0C63 valid # 5.1 TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
0C64..0C65 >FFFD # NA <reserved-0C64>..<reserved-0C65>
@@ -1275,7 +1285,8 @@
# 0CCA..0CCD valid # 1.1 KANNADA VOWEL SIGN O..KANNADA SIGN VIRAMA
0CCE..0CD4 >FFFD # NA <reserved-0CCE>..<reserved-0CD4>
# 0CD5..0CD6 valid # 1.1 KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
-0CD7..0CDD >FFFD # NA <reserved-0CD7>..<reserved-0CDD>
+0CD7..0CDC >FFFD # NA <reserved-0CD7>..<reserved-0CDC>
+# 0CDD valid # 14.0 KANNADA LETTER NAKAARA POLLU
# 0CDE valid # 1.1 KANNADA LETTER FA
0CDF >FFFD # NA <reserved-0CDF>
# 0CE0..0CE1 valid # 1.1 KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
@@ -1594,9 +1605,11 @@
# 16F1..16F8 valid # 7.0 RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
16F9..16FF >FFFD # NA <reserved-16F9>..<reserved-16FF>
# 1700..170C valid # 3.2 TAGALOG LETTER A..TAGALOG LETTER YA
-170D >FFFD # NA <reserved-170D>
+# 170D valid # 14.0 TAGALOG LETTER RA
# 170E..1714 valid # 3.2 TAGALOG LETTER LA..TAGALOG SIGN VIRAMA
-1715..171F >FFFD # NA <reserved-1715>..<reserved-171F>
+# 1715 valid # 14.0 TAGALOG SIGN PAMUDPOD
+1716..171E >FFFD # NA <reserved-1716>..<reserved-171E>
+# 171F valid # 14.0 TAGALOG LETTER ARCHAIC RA
# 1720..1734 valid # 3.2 HANUNOO LETTER A..HANUNOO SIGN PAMUDPOD
# 1735..1736 valid # 3.2 PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
1737..173F >FFFD # NA <reserved-1737>..<reserved-173F>
@@ -1626,7 +1639,7 @@
# 1807..180A valid # 3.0 MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
180B..180D > # 3.0 MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
180E >FFFD # 3.0 MONGOLIAN VOWEL SEPARATOR
-180F >FFFD # NA <reserved-180F>
+180F > # 14.0 MONGOLIAN FREE VARIATION SELECTOR FOUR
# 1810..1819 valid # 3.0 MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
181A..181F >FFFD # NA <reserved-181A>..<reserved-181F>
# 1820..1877 valid # 3.0 MONGOLIAN LETTER A..MONGOLIAN LETTER MANCHU ZHA
@@ -1679,14 +1692,17 @@
# 1AB0..1ABD valid # 7.0 COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
# 1ABE valid # 7.0 COMBINING PARENTHESES OVERLAY
# 1ABF..1AC0 valid # 13.0 COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
-1AC1..1AFF >FFFD # NA <reserved-1AC1>..<reserved-1AFF>
+# 1AC1..1ACE valid # 14.0 COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING LATIN SMALL LETTER INSULAR T
+1ACF..1AFF >FFFD # NA <reserved-1ACF>..<reserved-1AFF>
# 1B00..1B4B valid # 5.0 BALINESE SIGN ULU RICEM..BALINESE LETTER ASYURA SASAK
-1B4C..1B4F >FFFD # NA <reserved-1B4C>..<reserved-1B4F>
+# 1B4C valid # 14.0 BALINESE LETTER ARCHAIC JNYA
+1B4D..1B4F >FFFD # NA <reserved-1B4D>..<reserved-1B4F>
# 1B50..1B59 valid # 5.0 BALINESE DIGIT ZERO..BALINESE DIGIT NINE
# 1B5A..1B6A valid # 5.0 BALINESE PANTI..BALINESE MUSICAL SYMBOL DANG GEDE
# 1B6B..1B73 valid # 5.0 BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
# 1B74..1B7C valid # 5.0 BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
-1B7D..1B7F >FFFD # NA <reserved-1B7D>..<reserved-1B7F>
+# 1B7D..1B7E valid # 14.0 BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG
+1B7F >FFFD # NA <reserved-1B7F>
# 1B80..1BAA valid # 5.1 SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PAMAAEH
# 1BAB..1BAD valid # 6.1 SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
# 1BAE..1BB9 valid # 5.1 SUNDANESE LETTER KHA..SUNDANESE DIGIT NINE
@@ -1877,7 +1893,7 @@
# 1DCB..1DE6 valid # 5.1 COMBINING BREVE-MACRON..COMBINING LATIN SMALL LETTER Z
# 1DE7..1DF5 valid # 7.0 COMBINING LATIN SMALL LETTER ALPHA..COMBINING UP TACK ABOVE
# 1DF6..1DF9 valid # 10.0 COMBINING KAVYKA ABOVE RIGHT..COMBINING WIDE INVERTED BRIDGE BELOW
-1DFA >FFFD # NA <reserved-1DFA>
+# 1DFA valid # 14.0 COMBINING DOT BELOW LEFT
# 1DFB valid # 9.0 COMBINING DELETION MARK
# 1DFC valid # 6.0 COMBINING DOUBLE INVERTED BREVE BELOW
# 1DFD valid # 5.2 COMBINING ALMOST EQUAL TO BELOW
@@ -2427,7 +2443,8 @@
# 20BB..20BD valid # 7.0 NORDIC MARK SIGN..RUBLE SIGN
# 20BE valid # 8.0 LARI SIGN
# 20BF valid # 10.0 BITCOIN SIGN
-20C0..20CF >FFFD # NA <reserved-20C0>..<reserved-20CF>
+# 20C0 valid # 14.0 SOM SIGN
+20C1..20CF >FFFD # NA <reserved-20C1>..<reserved-20CF>
# 20D0..20E1 valid # 1.1 COMBINING LEFT HARPOON ABOVE..COMBINING LEFT RIGHT ARROW ABOVE
# 20E2..20E3 valid # 3.0 COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING KEYCAP
# 20E4..20EA valid # 3.2 COMBINING ENCLOSING UPWARD POINTING TRIANGLE..COMBINING LEFTWARDS ARROW OVERLAY
@@ -2861,9 +2878,9 @@
2C2C >2C5C # 4.1 GLAGOLITIC CAPITAL LETTER SHTAPIC
2C2D >2C5D # 4.1 GLAGOLITIC CAPITAL LETTER TROKUTASTI A
2C2E >2C5E # 4.1 GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
-2C2F >FFFD # NA <reserved-2C2F>
+2C2F >2C5F # 14.0 GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI
# 2C30..2C5E valid # 4.1 GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
-2C5F >FFFD # NA <reserved-2C5F>
+# 2C5F valid # 14.0 GLAGOLITIC SMALL LETTER CAUDATE CHRIVI
2C60 >2C61 # 5.0 LATIN CAPITAL LETTER L WITH DOUBLE BAR
# 2C61 valid # 5.0 LATIN SMALL LETTER L WITH DOUBLE BAR
2C62 >026B # 5.0 LATIN CAPITAL LETTER L WITH MIDDLE TILDE
@@ -3046,7 +3063,8 @@
# 2E4A..2E4E valid # 11.0 DOTTED SOLIDUS..PUNCTUS ELEVATUS MARK
# 2E4F valid # 12.0 CORNISH VERSE DIVIDER
# 2E50..2E52 valid # 13.0 CROSS PATTY WITH RIGHT CROSSBAR..TIRONIAN SIGN CAPITAL ET
-2E53..2E7F >FFFD # NA <reserved-2E53>..<reserved-2E7F>
+# 2E53..2E5D valid # 14.0 MEDIEVAL EXCLAMATION MARK..OBLIQUE HYPHEN
+2E5E..2E7F >FFFD # NA <reserved-2E5E>..<reserved-2E7F>
# 2E80..2E99 valid # 3.0 CJK RADICAL REPEAT..CJK RADICAL RAP
2E9A >FFFD # NA <reserved-2E9A>
# 2E9B..2E9E valid # 3.0 CJK RADICAL CHOKE..CJK RADICAL DEATH
@@ -3941,7 +3959,7 @@
# 9FD6..9FEA valid # 10.0 CJK UNIFIED IDEOGRAPH-9FD6..CJK UNIFIED IDEOGRAPH-9FEA
# 9FEB..9FEF valid # 11.0 CJK UNIFIED IDEOGRAPH-9FEB..CJK UNIFIED IDEOGRAPH-9FEF
# 9FF0..9FFC valid # 13.0 CJK UNIFIED IDEOGRAPH-9FF0..CJK UNIFIED IDEOGRAPH-9FFC
-9FFD..9FFF >FFFD # NA <reserved-9FFD>..<reserved-9FFF>
+# 9FFD..9FFF valid # 14.0 CJK UNIFIED IDEOGRAPH-9FFD..CJK UNIFIED IDEOGRAPH-9FFF
# A000..A48C valid # 3.0 YI SYLLABLE IT..YI SYLLABLE YYR
A48D..A48F >FFFD # NA <reserved-A48D>..<reserved-A48F>
# A490..A4A1 valid # 3.0 YI RADICAL QOT..YI RADICAL GA
@@ -4198,7 +4216,8 @@ A7BC >A7BD # 12.0 LATIN CAPITAL LETTER GLOTTAL I
# A7BD valid # 12.0 LATIN SMALL LETTER GLOTTAL I
A7BE >A7BF # 12.0 LATIN CAPITAL LETTER GLOTTAL U
# A7BF valid # 12.0 LATIN SMALL LETTER GLOTTAL U
-A7C0..A7C1 >FFFD # NA <reserved-A7C0>..<reserved-A7C1>
+A7C0 >A7C1 # 14.0 LATIN CAPITAL LETTER OLD POLISH O
+# A7C1 valid # 14.0 LATIN SMALL LETTER OLD POLISH O
A7C2 >A7C3 # 12.0 LATIN CAPITAL LETTER ANGLICANA W
# A7C3 valid # 12.0 LATIN SMALL LETTER ANGLICANA W
A7C4 >A794 # 12.0 LATIN CAPITAL LETTER C WITH PALATAL HOOK
@@ -4208,7 +4227,21 @@ A7C7 >A7C8 # 13.0 LATIN CAPITAL LETTER D WITH SHORT
# A7C8 valid # 13.0 LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
A7C9 >A7CA # 13.0 LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
# A7CA valid # 13.0 LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
-A7CB..A7F4 >FFFD # NA <reserved-A7CB>..<reserved-A7F4>
+A7CB..A7CF >FFFD # NA <reserved-A7CB>..<reserved-A7CF>
+A7D0 >A7D1 # 14.0 LATIN CAPITAL LETTER CLOSED INSULAR G
+# A7D1 valid # 14.0 LATIN SMALL LETTER CLOSED INSULAR G
+A7D2 >FFFD # NA <reserved-A7D2>
+# A7D3 valid # 14.0 LATIN SMALL LETTER DOUBLE THORN
+A7D4 >FFFD # NA <reserved-A7D4>
+# A7D5 valid # 14.0 LATIN SMALL LETTER DOUBLE WYNN
+A7D6 >A7D7 # 14.0 LATIN CAPITAL LETTER MIDDLE SCOTS S
+# A7D7 valid # 14.0 LATIN SMALL LETTER MIDDLE SCOTS S
+A7D8 >A7D9 # 14.0 LATIN CAPITAL LETTER SIGMOID S
+# A7D9 valid # 14.0 LATIN SMALL LETTER SIGMOID S
+A7DA..A7F1 >FFFD # NA <reserved-A7DA>..<reserved-A7F1>
+A7F2 >0063 # 14.0 MODIFIER LETTER CAPITAL C
+A7F3 >0066 # 14.0 MODIFIER LETTER CAPITAL F
+A7F4 >0071 # 14.0 MODIFIER LETTER CAPITAL Q
A7F5 >A7F6 # 13.0 LATIN CAPITAL LETTER REVERSED HALF H
# A7F6 valid # 13.0 LATIN SMALL LETTER REVERSED HALF H
# A7F7 valid # 7.0 LATIN EPIGRAPHIC LETTER SIDEWAYS I
@@ -4950,7 +4983,8 @@ FBAA..FBAD >06BE # 1.1 ARABIC LETTER HEH DOACHASHMEE ISO
FBAE..FBAF >06D2 # 1.1 ARABIC LETTER YEH BARREE ISOLATED FORM..ARABIC LETTER YEH BARREE FINAL FORM
FBB0..FBB1 >06D3 # 1.1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
# FBB2..FBC1 valid # 6.0 ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
-FBC2..FBD2 >FFFD # NA <reserved-FBC2>..<reserved-FBD2>
+# FBC2 valid # 14.0 ARABIC SYMBOL WASLA ABOVE
+FBC3..FBD2 >FFFD # NA <reserved-FBC3>..<reserved-FBD2>
FBD3..FBD6 >06AD # 1.1 ARABIC LETTER NG ISOLATED FORM..ARABIC LETTER NG MEDIAL FORM
FBD7..FBD8 >06C7 # 1.1 ARABIC LETTER U ISOLATED FORM..ARABIC LETTER U FINAL FORM
FBD9..FBDA >06C6 # 1.1 ARABIC LETTER OE ISOLATED FORM..ARABIC LETTER OE FINAL FORM
@@ -5288,7 +5322,7 @@ FD3A >0637 0645 # 1.1 ARABIC LIGATURE TAH WITH MEEM MED
FD3B >0638 0645 # 1.1 ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM
FD3C..FD3D >0627 064B # 1.1 ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
# FD3E..FD3F valid # 1.1 ORNATE LEFT PARENTHESIS..ORNATE RIGHT PARENTHESIS
-FD40..FD4F >FFFD # NA <reserved-FD40>..<reserved-FD4F>
+# FD40..FD4F valid # 14.0 ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH
FD50 >062A 062C 0645 #1.1 ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM
FD51..FD52 >062A 062D 062C #1.1 ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM..ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM
FD53 >062A 062D 0645 #1.1 ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM
@@ -5391,7 +5425,8 @@ FDC4 >0639 062C 0645 #1.1 ARABIC LIGATURE AIN WITH JEEM WITH
FDC5 >0635 0645 0645 #1.1 ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM
FDC6 >0633 062E 064A #1.1 ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM
FDC7 >0646 062C 064A #1.1 ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
-FDC8..FDCF >FFFD # NA <reserved-FDC8>..<reserved-FDCF>
+FDC8..FDCE >FFFD # NA <reserved-FDC8>..<reserved-FDCE>
+# FDCF valid # 14.0 ARABIC LIGATURE SALAAMUHU ALAYNAA
FDD0..FDEF >FFFD # 3.1 <noncharacter-FDD0>..<noncharacter-FDEF>
FDF0 >0635 0644 06D2 #1.1 ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM
FDF1 >0642 0644 06D2 #1.1 ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM
@@ -5407,7 +5442,7 @@ FDFA >0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647
FDFB >062C 0644 0020 062C 0644 0627 0644 0647 #1.1 ARABIC LIGATURE JALLAJALALOUHOU
FDFC >0631 06CC 0627 0644 #3.2 RIAL SIGN
# FDFD valid # 4.0 ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
-FDFE..FDFF >FFFD # NA <reserved-FDFE>..<reserved-FDFF>
+# FDFE..FDFF valid # 14.0 ARABIC LIGATURE SUBHAANAHU WA TAAALAA..ARABIC LIGATURE AZZA WA JALL
FE00..FE0F > # 3.2 VARIATION SELECTOR-1..VARIATION SELECTOR-16
FE10 >002C # 4.1 PRESENTATION FORM FOR VERTICAL COMMA
FE11 >3001 # 4.1 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA
@@ -5920,13 +5955,119 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 10530..10563valid # 7.0 CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
10564..1056E >FFFD # NA <reserved-10564>..<reserved-1056E>
# 1056F valid # 7.0 CAUCASIAN ALBANIAN CITATION MARK
-10570..105FF >FFFD # NA <reserved-10570>..<reserved-105FF>
+10570 >10597 # 14.0 VITHKUQI CAPITAL LETTER A
+10571 >10598 # 14.0 VITHKUQI CAPITAL LETTER BBE
+10572 >10599 # 14.0 VITHKUQI CAPITAL LETTER BE
+10573 >1059A # 14.0 VITHKUQI CAPITAL LETTER CE
+10574 >1059B # 14.0 VITHKUQI CAPITAL LETTER CHE
+10575 >1059C # 14.0 VITHKUQI CAPITAL LETTER DE
+10576 >1059D # 14.0 VITHKUQI CAPITAL LETTER DHE
+10577 >1059E # 14.0 VITHKUQI CAPITAL LETTER EI
+10578 >1059F # 14.0 VITHKUQI CAPITAL LETTER E
+10579 >105A0 # 14.0 VITHKUQI CAPITAL LETTER FE
+1057A >105A1 # 14.0 VITHKUQI CAPITAL LETTER GA
+1057B >FFFD # NA <reserved-1057B>
+1057C >105A3 # 14.0 VITHKUQI CAPITAL LETTER HA
+1057D >105A4 # 14.0 VITHKUQI CAPITAL LETTER HHA
+1057E >105A5 # 14.0 VITHKUQI CAPITAL LETTER I
+1057F >105A6 # 14.0 VITHKUQI CAPITAL LETTER IJE
+10580 >105A7 # 14.0 VITHKUQI CAPITAL LETTER JE
+10581 >105A8 # 14.0 VITHKUQI CAPITAL LETTER KA
+10582 >105A9 # 14.0 VITHKUQI CAPITAL LETTER LA
+10583 >105AA # 14.0 VITHKUQI CAPITAL LETTER LLA
+10584 >105AB # 14.0 VITHKUQI CAPITAL LETTER ME
+10585 >105AC # 14.0 VITHKUQI CAPITAL LETTER NE
+10586 >105AD # 14.0 VITHKUQI CAPITAL LETTER NJE
+10587 >105AE # 14.0 VITHKUQI CAPITAL LETTER O
+10588 >105AF # 14.0 VITHKUQI CAPITAL LETTER PE
+10589 >105B0 # 14.0 VITHKUQI CAPITAL LETTER QA
+1058A >105B1 # 14.0 VITHKUQI CAPITAL LETTER RE
+1058B >FFFD # NA <reserved-1058B>
+1058C >105B3 # 14.0 VITHKUQI CAPITAL LETTER SE
+1058D >105B4 # 14.0 VITHKUQI CAPITAL LETTER SHE
+1058E >105B5 # 14.0 VITHKUQI CAPITAL LETTER TE
+1058F >105B6 # 14.0 VITHKUQI CAPITAL LETTER THE
+10590 >105B7 # 14.0 VITHKUQI CAPITAL LETTER U
+10591 >105B8 # 14.0 VITHKUQI CAPITAL LETTER VE
+10592 >105B9 # 14.0 VITHKUQI CAPITAL LETTER XE
+10593 >FFFD # NA <reserved-10593>
+10594 >105BB # 14.0 VITHKUQI CAPITAL LETTER Y
+10595 >105BC # 14.0 VITHKUQI CAPITAL LETTER ZE
+10596 >FFFD # NA <reserved-10596>
+# 10597..105A1valid # 14.0 VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA
+105A2 >FFFD # NA <reserved-105A2>
+# 105A3..105B1valid # 14.0 VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE
+105B2 >FFFD # NA <reserved-105B2>
+# 105B3..105B9valid # 14.0 VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE
+105BA >FFFD # NA <reserved-105BA>
+# 105BB..105BCvalid # 14.0 VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE
+105BD..105FF >FFFD # NA <reserved-105BD>..<reserved-105FF>
# 10600..10736valid # 7.0 LINEAR A SIGN AB001..LINEAR A SIGN A664
10737..1073F >FFFD # NA <reserved-10737>..<reserved-1073F>
# 10740..10755valid # 7.0 LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
10756..1075F >FFFD # NA <reserved-10756>..<reserved-1075F>
# 10760..10767valid # 7.0 LINEAR A SIGN A800..LINEAR A SIGN A807
-10768..107FF >FFFD # NA <reserved-10768>..<reserved-107FF>
+10768..1077F >FFFD # NA <reserved-10768>..<reserved-1077F>
+# 10780 valid # 14.0 MODIFIER LETTER SMALL CAPITAL AA
+10781 >02D0 # 14.0 MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON
+10782 >02D1 # 14.0 MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON
+10783 >00E6 # 14.0 MODIFIER LETTER SMALL AE
+10784 >0299 # 14.0 MODIFIER LETTER SMALL CAPITAL B
+10785 >0253 # 14.0 MODIFIER LETTER SMALL B WITH HOOK
+10786 >FFFD # NA <reserved-10786>
+10787 >02A3 # 14.0 MODIFIER LETTER SMALL DZ DIGRAPH
+10788 >AB66 # 14.0 MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK
+10789 >02A5 # 14.0 MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL
+1078A >02A4 # 14.0 MODIFIER LETTER SMALL DEZH DIGRAPH
+1078B >0256 # 14.0 MODIFIER LETTER SMALL D WITH TAIL
+1078C >0257 # 14.0 MODIFIER LETTER SMALL D WITH HOOK
+1078D >1D91 # 14.0 MODIFIER LETTER SMALL D WITH HOOK AND TAIL
+1078E >0258 # 14.0 MODIFIER LETTER SMALL REVERSED E
+1078F >025E # 14.0 MODIFIER LETTER SMALL CLOSED REVERSED OPEN E
+10790 >02A9 # 14.0 MODIFIER LETTER SMALL FENG DIGRAPH
+10791 >0264 # 14.0 MODIFIER LETTER SMALL RAMS HORN
+10792 >0262 # 14.0 MODIFIER LETTER SMALL CAPITAL G
+10793 >0260 # 14.0 MODIFIER LETTER SMALL G WITH HOOK
+10794 >029B # 14.0 MODIFIER LETTER SMALL CAPITAL G WITH HOOK
+10795 >0127 # 14.0 MODIFIER LETTER SMALL H WITH STROKE
+10796 >029C # 14.0 MODIFIER LETTER SMALL CAPITAL H
+10797 >0267 # 14.0 MODIFIER LETTER SMALL HENG WITH HOOK
+10798 >0284 # 14.0 MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK
+10799 >02AA # 14.0 MODIFIER LETTER SMALL LS DIGRAPH
+1079A >02AB # 14.0 MODIFIER LETTER SMALL LZ DIGRAPH
+1079B >026C # 14.0 MODIFIER LETTER SMALL L WITH BELT
+1079C >1DF04 # 14.0 MODIFIER LETTER SMALL CAPITAL L WITH BELT
+1079D >A78E # 14.0 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT
+1079E >026E # 14.0 MODIFIER LETTER SMALL LEZH
+1079F >1DF05 # 14.0 MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK
+107A0 >028E # 14.0 MODIFIER LETTER SMALL TURNED Y
+107A1 >1DF06 # 14.0 MODIFIER LETTER SMALL TURNED Y WITH BELT
+107A2 >00F8 # 14.0 MODIFIER LETTER SMALL O WITH STROKE
+107A3 >0276 # 14.0 MODIFIER LETTER SMALL CAPITAL OE
+107A4 >0277 # 14.0 MODIFIER LETTER SMALL CLOSED OMEGA
+107A5 >0071 # 14.0 MODIFIER LETTER SMALL Q
+107A6 >027A # 14.0 MODIFIER LETTER SMALL TURNED R WITH LONG LEG
+107A7 >1DF08 # 14.0 MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK
+107A8 >027D # 14.0 MODIFIER LETTER SMALL R WITH TAIL
+107A9 >027E # 14.0 MODIFIER LETTER SMALL R WITH FISHHOOK
+107AA >0280 # 14.0 MODIFIER LETTER SMALL CAPITAL R
+107AB >02A8 # 14.0 MODIFIER LETTER SMALL TC DIGRAPH WITH CURL
+107AC >02A6 # 14.0 MODIFIER LETTER SMALL TS DIGRAPH
+107AD >AB67 # 14.0 MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK
+107AE >02A7 # 14.0 MODIFIER LETTER SMALL TESH DIGRAPH
+107AF >0288 # 14.0 MODIFIER LETTER SMALL T WITH RETROFLEX HOOK
+107B0 >2C71 # 14.0 MODIFIER LETTER SMALL V WITH RIGHT HOOK
+107B1 >FFFD # NA <reserved-107B1>
+107B2 >028F # 14.0 MODIFIER LETTER SMALL CAPITAL Y
+107B3 >02A1 # 14.0 MODIFIER LETTER GLOTTAL STOP WITH STROKE
+107B4 >02A2 # 14.0 MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE
+107B5 >0298 # 14.0 MODIFIER LETTER BILABIAL CLICK
+107B6 >01C0 # 14.0 MODIFIER LETTER DENTAL CLICK
+107B7 >01C1 # 14.0 MODIFIER LETTER LATERAL CLICK
+107B8 >01C2 # 14.0 MODIFIER LETTER ALVEOLAR CLICK
+107B9 >1DF0A # 14.0 MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK
+107BA >1DF1E # 14.0 MODIFIER LETTER SMALL S WITH CURL
+107BB..107FF >FFFD # NA <reserved-107BB>..<reserved-107FF>
# 10800..10805valid # 4.0 CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
10806..10807 >FFFD # NA <reserved-10806>..<reserved-10807>
# 10808 valid # 4.0 CYPRIOT SYLLABLE JO
@@ -6089,7 +6230,10 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
10F28..10F2F >FFFD # NA <reserved-10F28>..<reserved-10F2F>
# 10F30..10F50valid # 11.0 SOGDIAN LETTER ALEPH..SOGDIAN COMBINING STROKE BELOW
# 10F51..10F59valid # 11.0 SOGDIAN NUMBER ONE..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
-10F5A..10FAF >FFFD # NA <reserved-10F5A>..<reserved-10FAF>
+10F5A..10F6F >FFFD # NA <reserved-10F5A>..<reserved-10F6F>
+# 10F70..10F85valid # 14.0 OLD UYGHUR LETTER ALEPH..OLD UYGHUR COMBINING TWO DOTS BELOW
+# 10F86..10F89valid # 14.0 OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS
+10F8A..10FAF >FFFD # NA <reserved-10F8A>..<reserved-10FAF>
# 10FB0..10FC4valid # 13.0 CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
# 10FC5..10FCBvalid # 13.0 CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
10FCC..10FDF >FFFD # NA <reserved-10FCC>..<reserved-10FDF>
@@ -6100,13 +6244,15 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1104E..11051 >FFFD # NA <reserved-1104E>..<reserved-11051>
# 11052..11065valid # 6.0 BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
# 11066..1106Fvalid # 6.0 BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
-11070..1107E >FFFD # NA <reserved-11070>..<reserved-1107E>
+# 11070..11075valid # 14.0 BRAHMI SIGN OLD TAMIL VIRAMA..BRAHMI LETTER OLD TAMIL LLA
+11076..1107E >FFFD # NA <reserved-11076>..<reserved-1107E>
# 1107F valid # 7.0 BRAHMI NUMBER JOINER
# 11080..110BAvalid # 5.2 KAITHI SIGN CANDRABINDU..KAITHI SIGN NUKTA
# 110BB..110BCvalid # 5.2 KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
110BD >FFFD # 5.2 KAITHI NUMBER SIGN
# 110BE..110C1valid # 5.2 KAITHI SECTION MARK..KAITHI DOUBLE DANDA
-110C2..110CC >FFFD # NA <reserved-110C2>..<reserved-110CC>
+# 110C2 valid # 14.0 KAITHI VOWEL SIGN VOCALIC R
+110C3..110CC >FFFD # NA <reserved-110C3>..<reserved-110CC>
110CD >FFFD # 11.0 KAITHI NUMBER SIGN ABOVE
110CE..110CF >FFFD # NA <reserved-110CE>..<reserved-110CF>
# 110D0..110E8valid # 6.1 SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
@@ -6224,7 +6370,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1166D..1167F >FFFD # NA <reserved-1166D>..<reserved-1167F>
# 11680..116B7valid # 6.1 TAKRI LETTER A..TAKRI SIGN NUKTA
# 116B8 valid # 12.0 TAKRI LETTER ARCHAIC KHA
-116B9..116BF >FFFD # NA <reserved-116B9>..<reserved-116BF>
+# 116B9 valid # 14.0 TAKRI ABBREVIATION SIGN
+116BA..116BF >FFFD # NA <reserved-116BA>..<reserved-116BF>
# 116C0..116C9valid # 6.1 TAKRI DIGIT ZERO..TAKRI DIGIT NINE
116CA..116FF >FFFD # NA <reserved-116CA>..<reserved-116FF>
# 11700..11719valid # 8.0 AHOM LETTER KA..AHOM LETTER JHA
@@ -6234,7 +6381,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1172C..1172F >FFFD # NA <reserved-1172C>..<reserved-1172F>
# 11730..11739valid # 8.0 AHOM DIGIT ZERO..AHOM DIGIT NINE
# 1173A..1173Fvalid # 8.0 AHOM NUMBER TEN..AHOM SYMBOL VI
-11740..117FF >FFFD # NA <reserved-11740>..<reserved-117FF>
+# 11740..11746valid # 14.0 AHOM LETTER CA..AHOM LETTER LLA
+11747..117FF >FFFD # NA <reserved-11747>..<reserved-117FF>
# 11800..1183Avalid # 11.0 DOGRA LETTER A..DOGRA SIGN NUKTA
# 1183B valid # 11.0 DOGRA ABBREVIATION SIGN
1183C..1189F >FFFD # NA <reserved-1183C>..<reserved-1189F>
@@ -6309,7 +6457,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 11A9A..11A9Cvalid # 10.0 SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
# 11A9D valid # 11.0 SOYOMBO MARK PLUTA
# 11A9E..11AA2valid # 10.0 SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
-11AA3..11ABF >FFFD # NA <reserved-11AA3>..<reserved-11ABF>
+11AA3..11AAF >FFFD # NA <reserved-11AA3>..<reserved-11AAF>
+# 11AB0..11ABFvalid # 14.0 CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA
# 11AC0..11AF8valid # 7.0 PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
11AF9..11BFF >FFFD # NA <reserved-11AF9>..<reserved-11BFF>
# 11C00..11C08valid # 9.0 BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
@@ -6374,7 +6523,10 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 12474 valid # 7.0 CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
12475..1247F >FFFD # NA <reserved-12475>..<reserved-1247F>
# 12480..12543valid # 8.0 CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
-12544..12FFF >FFFD # NA <reserved-12544>..<reserved-12FFF>
+12544..12F8F >FFFD # NA <reserved-12544>..<reserved-12F8F>
+# 12F90..12FF0valid # 14.0 CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114
+# 12FF1..12FF2valid # 14.0 CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302
+12FF3..12FFF >FFFD # NA <reserved-12FF3>..<reserved-12FFF>
# 13000..1342Evalid # 5.2 EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
1342F >FFFD # NA <reserved-1342F>
13430..13438 >FFFD # 12.0 EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT
@@ -6388,7 +6540,10 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 16A60..16A69valid # 7.0 MRO DIGIT ZERO..MRO DIGIT NINE
16A6A..16A6D >FFFD # NA <reserved-16A6A>..<reserved-16A6D>
# 16A6E..16A6Fvalid # 7.0 MRO DANDA..MRO DOUBLE DANDA
-16A70..16ACF >FFFD # NA <reserved-16A70>..<reserved-16ACF>
+# 16A70..16ABEvalid # 14.0 TANGSA LETTER OZ..TANGSA LETTER ZA
+16ABF >FFFD # NA <reserved-16ABF>
+# 16AC0..16AC9valid # 14.0 TANGSA DIGIT ZERO..TANGSA DIGIT NINE
+16ACA..16ACF >FFFD # NA <reserved-16ACA>..<reserved-16ACF>
# 16AD0..16AEDvalid # 7.0 BASSA VAH LETTER ENNI..BASSA VAH LETTER I
16AEE..16AEF >FFFD # NA <reserved-16AEE>..<reserved-16AEF>
# 16AF0..16AF4valid # 7.0 BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
@@ -6467,10 +6622,17 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 18AF3..18CD5valid # 13.0 TANGUT COMPONENT-756..KHITAN SMALL SCRIPT CHARACTER-18CD5
18CD6..18CFF >FFFD # NA <reserved-18CD6>..<reserved-18CFF>
# 18D00..18D08valid # 13.0 TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
-18D09..1AFFF >FFFD # NA <reserved-18D09>..<reserved-1AFFF>
+18D09..1AFEF >FFFD # NA <reserved-18D09>..<reserved-1AFEF>
+# 1AFF0..1AFF3valid # 14.0 KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5
+1AFF4 >FFFD # NA <reserved-1AFF4>
+# 1AFF5..1AFFBvalid # 14.0 KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5
+1AFFC >FFFD # NA <reserved-1AFFC>
+# 1AFFD..1AFFEvalid # 14.0 KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8
+1AFFF >FFFD # NA <reserved-1AFFF>
# 1B000..1B001valid # 6.0 KATAKANA LETTER ARCHAIC E..HIRAGANA LETTER ARCHAIC YE
# 1B002..1B11Evalid # 10.0 HENTAIGANA LETTER A-1..HENTAIGANA LETTER N-MU-MO-2
-1B11F..1B14F >FFFD # NA <reserved-1B11F>..<reserved-1B14F>
+# 1B11F..1B122valid # 14.0 HIRAGANA LETTER ARCHAIC WU..KATAKANA LETTER ARCHAIC WU
+1B123..1B14F >FFFD # NA <reserved-1B123>..<reserved-1B14F>
# 1B150..1B152valid # 12.0 HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B153..1B163 >FFFD # NA <reserved-1B153>..<reserved-1B163>
# 1B164..1B167valid # 12.0 KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -6489,7 +6651,13 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1BC9D..1BC9Evalid # 7.0 DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
# 1BC9F valid # 7.0 DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1BCA0..1BCA3 > # 7.0 SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
-1BCA4..1CFFF >FFFD # NA <reserved-1BCA4>..<reserved-1CFFF>
+1BCA4..1CEFF >FFFD # NA <reserved-1BCA4>..<reserved-1CEFF>
+# 1CF00..1CF2Dvalid # 14.0 ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT
+1CF2E..1CF2F >FFFD # NA <reserved-1CF2E>..<reserved-1CF2F>
+# 1CF30..1CF46valid # 14.0 ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG
+1CF47..1CF4F >FFFD # NA <reserved-1CF47>..<reserved-1CF4F>
+# 1CF50..1CFC3valid # 14.0 ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK
+1CFC4..1CFFF >FFFD # NA <reserved-1CFC4>..<reserved-1CFFF>
# 1D000..1D0F5valid # 3.1 BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
1D0F6..1D0FF >FFFD # NA <reserved-1D0F6>..<reserved-1D0FF>
# 1D100..1D126valid # 3.1 MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
@@ -6514,7 +6682,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1D1C0 >1D1BA 1D165 1D16F #3.1 MUSICAL SYMBOL FUSA BLACK
# 1D1C1..1D1DDvalid # 3.1 MUSICAL SYMBOL LONGA PERFECTA REST..MUSICAL SYMBOL PES SUBPUNCTIS
# 1D1DE..1D1E8valid # 8.0 MUSICAL SYMBOL KIEVAN C CLEF..MUSICAL SYMBOL KIEVAN FLAT SIGN
-1D1E9..1D1FF >FFFD # NA <reserved-1D1E9>..<reserved-1D1FF>
+# 1D1E9..1D1EAvalid # 14.0 MUSICAL SYMBOL SORI..MUSICAL SYMBOL KORON
+1D1EB..1D1FF >FFFD # NA <reserved-1D1EB>..<reserved-1D1FF>
# 1D200..1D245valid # 4.1 GREEK VOCAL NOTATION SYMBOL-1..GREEK MUSICAL LEIMMA
1D246..1D2DF >FFFD # NA <reserved-1D246>..<reserved-1D2DF>
# 1D2E0..1D2F3valid # 11.0 MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
@@ -7547,7 +7716,9 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1DA9B..1DA9Fvalid # 8.0 SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
1DAA0 >FFFD # NA <reserved-1DAA0>
# 1DAA1..1DAAFvalid # 8.0 SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
-1DAB0..1DFFF >FFFD # NA <reserved-1DAB0>..<reserved-1DFFF>
+1DAB0..1DEFF >FFFD # NA <reserved-1DAB0>..<reserved-1DEFF>
+# 1DF00..1DF1Evalid # 14.0 LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER S WITH CURL
+1DF1F..1DFFF >FFFD # NA <reserved-1DF1F>..<reserved-1DFFF>
# 1E000..1E006valid # 9.0 COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
1E007 >FFFD # NA <reserved-1E007>
# 1E008..1E018valid # 9.0 COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
@@ -7566,11 +7737,21 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1E14A..1E14D >FFFD # NA <reserved-1E14A>..<reserved-1E14D>
# 1E14E valid # 12.0 NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
# 1E14F valid # 12.0 NYIAKENG PUACHUE HMONG CIRCLED CA
-1E150..1E2BF >FFFD # NA <reserved-1E150>..<reserved-1E2BF>
+1E150..1E28F >FFFD # NA <reserved-1E150>..<reserved-1E28F>
+# 1E290..1E2AEvalid # 14.0 TOTO LETTER PA..TOTO SIGN RISING TONE
+1E2AF..1E2BF >FFFD # NA <reserved-1E2AF>..<reserved-1E2BF>
# 1E2C0..1E2F9valid # 12.0 WANCHO LETTER AA..WANCHO DIGIT NINE
1E2FA..1E2FE >FFFD # NA <reserved-1E2FA>..<reserved-1E2FE>
# 1E2FF valid # 12.0 WANCHO NGUN SIGN
-1E300..1E7FF >FFFD # NA <reserved-1E300>..<reserved-1E7FF>
+1E300..1E7DF >FFFD # NA <reserved-1E300>..<reserved-1E7DF>
+# 1E7E0..1E7E6valid # 14.0 ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO
+1E7E7 >FFFD # NA <reserved-1E7E7>
+# 1E7E8..1E7EBvalid # 14.0 ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE
+1E7EC >FFFD # NA <reserved-1E7EC>
+# 1E7ED..1E7EEvalid # 14.0 ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE
+1E7EF >FFFD # NA <reserved-1E7EF>
+# 1E7F0..1E7FEvalid # 14.0 ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE
+1E7FF >FFFD # NA <reserved-1E7FF>
# 1E800..1E8C4valid # 7.0 MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
1E8C5..1E8C6 >FFFD # NA <reserved-1E8C5>..<reserved-1E8C6>
# 1E8C7..1E8CFvalid # 7.0 MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
@@ -8049,7 +8230,8 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F6D3..1F6D4valid # 10.0 STUPA..PAGODA
# 1F6D5 valid # 12.0 HINDU TEMPLE
# 1F6D6..1F6D7valid # 13.0 HUT..ELEVATOR
-1F6D8..1F6DF >FFFD # NA <reserved-1F6D8>..<reserved-1F6DF>
+1F6D8..1F6DC >FFFD # NA <reserved-1F6D8>..<reserved-1F6DC>
+# 1F6DD..1F6DFvalid # 14.0 PLAYGROUND SLIDE..RING BUOY
# 1F6E0..1F6ECvalid # 7.0 HAMMER AND WRENCH..AIRPLANE ARRIVING
1F6ED..1F6EF >FFFD # NA <reserved-1F6ED>..<reserved-1F6EF>
# 1F6F0..1F6F3valid # 7.0 SATELLITE..PASSENGER SHIP
@@ -8065,7 +8247,9 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F7D5..1F7D8valid # 11.0 CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7D9..1F7DF >FFFD # NA <reserved-1F7D9>..<reserved-1F7DF>
# 1F7E0..1F7EBvalid # 12.0 LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
-1F7EC..1F7FF >FFFD # NA <reserved-1F7EC>..<reserved-1F7FF>
+1F7EC..1F7EF >FFFD # NA <reserved-1F7EC>..<reserved-1F7EF>
+# 1F7F0 valid # 14.0 HEAVY EQUALS SIGN
+1F7F1..1F7FF >FFFD # NA <reserved-1F7F1>..<reserved-1F7FF>
# 1F800..1F80Bvalid # 7.0 LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
1F80C..1F80F >FFFD # NA <reserved-1F80C>..<reserved-1F80F>
# 1F810..1F847valid # 7.0 LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
@@ -8100,7 +8284,7 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F972 valid # 13.0 SMILING FACE WITH TEAR
# 1F973..1F976valid # 11.0 FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
# 1F977..1F978valid # 13.0 NINJA..DISGUISED FACE
-1F979 >FFFD # NA <reserved-1F979>
+# 1F979 valid # 14.0 FACE HOLDING BACK TEARS
# 1F97A valid # 11.0 FACE WITH PLEADING EYES
# 1F97B valid # 12.0 SARI
# 1F97C..1F97Fvalid # 11.0 LAB COAT..FLAT SHOE
@@ -8118,7 +8302,7 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1F9C1..1F9C2valid # 11.0 CUPCAKE..SALT SHAKER
# 1F9C3..1F9CAvalid # 12.0 BEVERAGE BOX..ICE CUBE
# 1F9CB valid # 13.0 BUBBLE TEA
-1F9CC >FFFD # NA <reserved-1F9CC>
+# 1F9CC valid # 14.0 TROLL
# 1F9CD..1F9CFvalid # 12.0 STANDING PERSON..DEAF PERSON
# 1F9D0..1F9E6valid # 10.0 FACE WITH MONOCLE..SOCKS
# 1F9E7..1F9FFvalid # 11.0 RED GIFT ENVELOPE..NAZAR AMULET
@@ -8130,19 +8314,28 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
# 1FA74 valid # 13.0 THONG SANDAL
1FA75..1FA77 >FFFD # NA <reserved-1FA75>..<reserved-1FA77>
# 1FA78..1FA7Avalid # 12.0 DROP OF BLOOD..STETHOSCOPE
-1FA7B..1FA7F >FFFD # NA <reserved-1FA7B>..<reserved-1FA7F>
+# 1FA7B..1FA7Cvalid # 14.0 X-RAY..CRUTCH
+1FA7D..1FA7F >FFFD # NA <reserved-1FA7D>..<reserved-1FA7F>
# 1FA80..1FA82valid # 12.0 YO-YO..PARACHUTE
# 1FA83..1FA86valid # 13.0 BOOMERANG..NESTING DOLLS
1FA87..1FA8F >FFFD # NA <reserved-1FA87>..<reserved-1FA8F>
# 1FA90..1FA95valid # 12.0 RINGED PLANET..BANJO
# 1FA96..1FAA8valid # 13.0 MILITARY HELMET..ROCK
-1FAA9..1FAAF >FFFD # NA <reserved-1FAA9>..<reserved-1FAAF>
+# 1FAA9..1FAACvalid # 14.0 MIRROR BALL..HAMSA
+1FAAD..1FAAF >FFFD # NA <reserved-1FAAD>..<reserved-1FAAF>
# 1FAB0..1FAB6valid # 13.0 FLY..FEATHER
-1FAB7..1FABF >FFFD # NA <reserved-1FAB7>..<reserved-1FABF>
+# 1FAB7..1FABAvalid # 14.0 LOTUS..NEST WITH EGGS
+1FABB..1FABF >FFFD # NA <reserved-1FABB>..<reserved-1FABF>
# 1FAC0..1FAC2valid # 13.0 ANATOMICAL HEART..PEOPLE HUGGING
-1FAC3..1FACF >FFFD # NA <reserved-1FAC3>..<reserved-1FACF>
+# 1FAC3..1FAC5valid # 14.0 PREGNANT MAN..PERSON WITH CROWN
+1FAC6..1FACF >FFFD # NA <reserved-1FAC6>..<reserved-1FACF>
# 1FAD0..1FAD6valid # 13.0 BLUEBERRIES..TEAPOT
-1FAD7..1FAFF >FFFD # NA <reserved-1FAD7>..<reserved-1FAFF>
+# 1FAD7..1FAD9valid # 14.0 POURING LIQUID..JAR
+1FADA..1FADF >FFFD # NA <reserved-1FADA>..<reserved-1FADF>
+# 1FAE0..1FAE7valid # 14.0 MELTING FACE..BUBBLES
+1FAE8..1FAEF >FFFD # NA <reserved-1FAE8>..<reserved-1FAEF>
+# 1FAF0..1FAF6valid # 14.0 HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS
+1FAF7..1FAFF >FFFD # NA <reserved-1FAF7>..<reserved-1FAFF>
# 1FB00..1FB92valid # 13.0 BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
1FB93 >FFFD # NA <reserved-1FB93>
# 1FB94..1FBCAvalid # 13.0 LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
@@ -8161,9 +8354,11 @@ FFFE..FFFF >FFFD # 1.1 <noncharacter-FFFE>..<noncharacte
1FFFE..1FFFF >FFFD # 2.0 <noncharacter-1FFFE>..<noncharacter-1FFFF>
# 20000..2A6D6valid # 3.1 CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
# 2A6D7..2A6DDvalid # 13.0 CJK UNIFIED IDEOGRAPH-2A6D7..CJK UNIFIED IDEOGRAPH-2A6DD
-2A6DE..2A6FF >FFFD # NA <reserved-2A6DE>..<reserved-2A6FF>
+# 2A6DE..2A6DFvalid # 14.0 CJK UNIFIED IDEOGRAPH-2A6DE..CJK UNIFIED IDEOGRAPH-2A6DF
+2A6E0..2A6FF >FFFD # NA <reserved-2A6E0>..<reserved-2A6FF>
# 2A700..2B734valid # 5.2 CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
-2B735..2B73F >FFFD # NA <reserved-2B735>..<reserved-2B73F>
+# 2B735..2B738valid # 14.0 CJK UNIFIED IDEOGRAPH-2B735..CJK UNIFIED IDEOGRAPH-2B738
+2B739..2B73F >FFFD # NA <reserved-2B739>..<reserved-2B73F>
# 2B740..2B81Dvalid # 6.0 CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B81E..2B81F >FFFD # NA <reserved-2B81E>..<reserved-2B81F>
# 2B820..2CEA1valid # 8.0 CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
diff --git a/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt b/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
index 3e2d55cb212..f0a0fd79f7f 100644
--- a/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
+++ b/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
@@ -1,12 +1,13 @@
# Preparsed UCD generated by ICU preparseucd.py
# Copyright (C) 1991 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
-ucd;13.0.0
+ucd;14.0.0
property;Catalog;age;Age
property;Binary;AHex;ASCII_Hex_Digit
property;Binary;;alnum
property;Binary;Alpha;Alphabetic
+property;Binary;Basic_Emoji;Basic_Emoji
property;Enumerated;bc;Bidi_Class
property;Binary;Bidi_C;Bidi_Control
property;Binary;Bidi_M;Bidi_Mirrored
@@ -38,6 +39,7 @@ property;Binary;EBase;Emoji_Modifier_Base
property;Binary;EComp;Emoji_Component
property;Binary;EMod;Emoji_Modifier
property;Binary;Emoji;Emoji
+property;Binary;Emoji_Keycap_Sequence;Emoji_Keycap_Sequence
property;Binary;EPres;Emoji_Presentation
property;Miscellaneous;EqUIdeo;Equivalent_Unified_Ideograph
property;Binary;Ext;Extender
@@ -91,6 +93,11 @@ property;Binary;PCM;Prepended_Concatenation_Mark
property;Binary;;print
property;Binary;QMark;Quotation_Mark
property;Binary;Radical;Radical
+property;Binary;RGI_Emoji;RGI_Emoji
+property;Binary;RGI_Emoji_Flag_Sequence;RGI_Emoji_Flag_Sequence
+property;Binary;RGI_Emoji_Modifier_Sequence;RGI_Emoji_Modifier_Sequence
+property;Binary;RGI_Emoji_Tag_Sequence;RGI_Emoji_Tag_Sequence
+property;Binary;RGI_Emoji_ZWJ_Sequence;RGI_Emoji_ZWJ_Sequence
property;Binary;RI;Regional_Indicator
property;Enumerated;SB;Sentence_Break
property;Catalog;sc;Script
@@ -126,6 +133,7 @@ value;age;11.0;V11_0
value;age;12.0;V12_0
value;age;12.1;V12_1
value;age;13.0;V13_0
+value;age;14.0;V14_0
value;age;2.0;V2_0
value;age;2.1;V2_1
value;age;3.0;V3_0
@@ -179,6 +187,7 @@ value;blk;Ancient_Greek_Numbers;Ancient_Greek_Numbers
value;blk;Ancient_Symbols;Ancient_Symbols
value;blk;Arabic;Arabic
value;blk;Arabic_Ext_A;Arabic_Extended_A
+value;blk;Arabic_Ext_B;Arabic_Extended_B
value;blk;Arabic_Math;Arabic_Mathematical_Alphabetic_Symbols
value;blk;Arabic_PF_A;Arabic_Presentation_Forms_A;Arabic_Presentation_Forms-A
value;blk;Arabic_PF_B;Arabic_Presentation_Forms_B
@@ -234,6 +243,7 @@ value;blk;Cuneiform;Cuneiform
value;blk;Cuneiform_Numbers;Cuneiform_Numbers_And_Punctuation
value;blk;Currency_Symbols;Currency_Symbols
value;blk;Cypriot_Syllabary;Cypriot_Syllabary
+value;blk;Cypro_Minoan;Cypro_Minoan
value;blk;Cyrillic;Cyrillic
value;blk;Cyrillic_Ext_A;Cyrillic_Extended_A
value;blk;Cyrillic_Ext_B;Cyrillic_Extended_B
@@ -264,6 +274,7 @@ value;blk;Enclosed_Ideographic_Sup;Enclosed_Ideographic_Supplement
value;blk;Ethiopic;Ethiopic
value;blk;Ethiopic_Ext;Ethiopic_Extended
value;blk;Ethiopic_Ext_A;Ethiopic_Extended_A
+value;blk;Ethiopic_Ext_B;Ethiopic_Extended_B
value;blk;Ethiopic_Sup;Ethiopic_Supplement
value;blk;Geometric_Shapes;Geometric_Shapes
value;blk;Geometric_Shapes_Ext;Geometric_Shapes_Extended
@@ -303,6 +314,7 @@ value;blk;Jamo_Ext_B;Hangul_Jamo_Extended_B
value;blk;Javanese;Javanese
value;blk;Kaithi;Kaithi
value;blk;Kana_Ext_A;Kana_Extended_A
+value;blk;Kana_Ext_B;Kana_Extended_B
value;blk;Kana_Sup;Kana_Supplement
value;blk;Kanbun;Kanbun
value;blk;Kangxi;Kangxi_Radicals
@@ -324,6 +336,8 @@ value;blk;Latin_Ext_B;Latin_Extended_B
value;blk;Latin_Ext_C;Latin_Extended_C
value;blk;Latin_Ext_D;Latin_Extended_D
value;blk;Latin_Ext_E;Latin_Extended_E
+value;blk;Latin_Ext_F;Latin_Extended_F
+value;blk;Latin_Ext_G;Latin_Extended_G
value;blk;Lepcha;Lepcha
value;blk;Letterlike_Symbols;Letterlike_Symbols
value;blk;Limbu;Limbu
@@ -390,6 +404,7 @@ value;blk;Old_Persian;Old_Persian
value;blk;Old_Sogdian;Old_Sogdian
value;blk;Old_South_Arabian;Old_South_Arabian
value;blk;Old_Turkic;Old_Turkic
+value;blk;Old_Uyghur;Old_Uyghur
value;blk;Oriya;Oriya
value;blk;Ornamental_Dingbats;Ornamental_Dingbats
value;blk;Osage;Osage
@@ -451,6 +466,7 @@ value;blk;Tai_Xuan_Jing;Tai_Xuan_Jing_Symbols
value;blk;Takri;Takri
value;blk;Tamil;Tamil
value;blk;Tamil_Sup;Tamil_Supplement
+value;blk;Tangsa;Tangsa
value;blk;Tangut;Tangut
value;blk;Tangut_Components;Tangut_Components
value;blk;Tangut_Sup;Tangut_Supplement
@@ -460,15 +476,18 @@ value;blk;Thai;Thai
value;blk;Tibetan;Tibetan
value;blk;Tifinagh;Tifinagh
value;blk;Tirhuta;Tirhuta
+value;blk;Toto;Toto
value;blk;Transport_And_Map;Transport_And_Map_Symbols
value;blk;UCAS;Unified_Canadian_Aboriginal_Syllabics;Canadian_Syllabics
value;blk;UCAS_Ext;Unified_Canadian_Aboriginal_Syllabics_Extended
+value;blk;UCAS_Ext_A;Unified_Canadian_Aboriginal_Syllabics_Extended_A
value;blk;Ugaritic;Ugaritic
value;blk;VS;Variation_Selectors
value;blk;VS_Sup;Variation_Selectors_Supplement
value;blk;Vai;Vai
value;blk;Vedic_Ext;Vedic_Extensions
value;blk;Vertical_Forms;Vertical_Forms
+value;blk;Vithkuqi;Vithkuqi
value;blk;Wancho;Wancho
value;blk;Warang_Citi;Warang_Citi
value;blk;Yezidi;Yezidi
@@ -476,6 +495,7 @@ value;blk;Yi_Radicals;Yi_Radicals
value;blk;Yi_Syllables;Yi_Syllables
value;blk;Yijing;Yijing_Hexagram_Symbols
value;blk;Zanabazar_Square;Zanabazar_Square
+value;blk;Znamenny_Music;Znamenny_Musical_Notation
value;bpt;c;Close
value;bpt;n;None
value;bpt;o;Open
@@ -807,6 +827,8 @@ value;jg;Taw;Taw
value;jg;Teh_Marbuta;Teh_Marbuta
value;jg;Teh_Marbuta_Goal;Hamza_On_Heh_Goal
value;jg;Teth;Teth
+value;jg;Thin_Yeh;Thin_Yeh
+value;jg;Vertical_Tail;Vertical_Tail
value;jg;Waw;Waw
value;jg;Yeh;Yeh
value;jg;Yeh_Barree;Yeh_Barree
@@ -979,6 +1001,7 @@ value;sc;Cher;Cherokee
value;sc;Chrs;Chorasmian
value;sc;Cirt;Cirt
value;sc;Copt;Coptic;Qaac
+value;sc;Cpmn;Cypro_Minoan
value;sc;Cprt;Cypriot
value;sc;Cyrl;Cyrillic
value;sc;Cyrs;Cyrs
@@ -1077,6 +1100,7 @@ value;sc;Orkh;Old_Turkic
value;sc;Orya;Oriya
value;sc;Osge;Osage
value;sc;Osma;Osmanya
+value;sc;Ougr;Old_Uyghur
value;sc;Palm;Palmyrene
value;sc;Pauc;Pau_Cin_Hau
value;sc;Perm;Old_Permic
@@ -1126,9 +1150,12 @@ value;sc;Thaa;Thaana
value;sc;Thai;Thai
value;sc;Tibt;Tibetan
value;sc;Tirh;Tirhuta
+value;sc;Tnsa;Tangsa
+value;sc;Toto;Toto
value;sc;Ugar;Ugaritic
value;sc;Vaii;Vai
value;sc;Visp;Visp
+value;sc;Vith;Vithkuqi
value;sc;Wara;Warang_Citi
value;sc;Wcho;Wancho
value;sc;Wole;Wole
@@ -1279,7 +1306,9 @@ cp;0027;bc=ON;CI;gc=Po;lb=QU;na=APOSTROPHE;Pat_Syn;QMark;SB=CL;WB=SQ
cp;0028;bc=ON;Bidi_M;bmg=0029;bpb=0029;bpt=o;gc=Ps;lb=OP;na=LEFT PARENTHESIS;Pat_Syn;SB=CL
cp;0029;bc=ON;Bidi_M;bmg=0028;bpb=0028;bpt=c;gc=Pe;lb=CP;na=RIGHT PARENTHESIS;Pat_Syn;SB=CL
cp;002A;bc=ON;EComp;Emoji;gc=Po;na=ASTERISK;Pat_Syn
+# ASCII math operator
cp;002B;bc=ES;gc=Sm;lb=PR;Math;na=PLUS SIGN;Pat_Syn
+# ASCII punctuation
cp;002C;bc=CS;gc=Po;lb=IS;na=COMMA;Pat_Syn;SB=SC;Term;WB=MN
cp;002D;bc=ES;Dash;gc=Pd;Hyphen;InSC=Consonant_Placeholder;lb=HY;na=HYPHEN-MINUS;Pat_Syn;SB=SC
cp;002E;bc=CS;CI;gc=Po;lb=IS;na=FULL STOP;Pat_Syn;SB=AT;STerm;Term;WB=MB
@@ -1295,12 +1324,14 @@ cp;0036;AHex;bc=EN;EComp;Emoji;gc=Nd;Hex;IDC;InSC=Number;lb=NU;na=DIGIT SIX;nt=D
cp;0037;AHex;bc=EN;EComp;Emoji;gc=Nd;Hex;IDC;InSC=Number;lb=NU;na=DIGIT SEVEN;nt=De;nv=7;SB=NU;WB=NU;XIDC
cp;0038;AHex;bc=EN;EComp;Emoji;gc=Nd;Hex;IDC;InSC=Number;lb=NU;na=DIGIT EIGHT;nt=De;nv=8;SB=NU;WB=NU;XIDC
cp;0039;AHex;bc=EN;EComp;Emoji;gc=Nd;Hex;IDC;InSC=Number;lb=NU;na=DIGIT NINE;nt=De;nv=9;SB=NU;WB=NU;XIDC
-# ASCII punctuation and symbols
+# ASCII punctuation
cp;003A;bc=CS;CI;gc=Po;lb=IS;na=COLON;Pat_Syn;SB=SC;Term;WB=ML
cp;003B;bc=ON;gc=Po;lb=IS;na=SEMICOLON;Pat_Syn;Term;WB=MN
+# ASCII mathematical operators
cp;003C;bc=ON;Bidi_M;bmg=003E;gc=Sm;Math;na=LESS-THAN SIGN;Pat_Syn
cp;003D;bc=ON;gc=Sm;Math;na=EQUALS SIGN;Pat_Syn
cp;003E;bc=ON;Bidi_M;bmg=003C;gc=Sm;Math;na=GREATER-THAN SIGN;Pat_Syn
+# ASCII punctuation
cp;003F;bc=ON;gc=Po;lb=EX;na=QUESTION MARK;Pat_Syn;SB=ST;STerm;Term
cp;0040;bc=ON;gc=Po;na=COMMERCIAL AT;Pat_Syn
# Uppercase Latin alphabet
@@ -1372,145 +1403,145 @@ cp;007E;bc=ON;gc=Sm;Math;na=TILDE;Pat_Syn
# Control character
cp;007F;bc=BN;ea=N;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=DELETE,abbreviation=DEL
-block;0080..00FF;age=1.1;blk=Latin_1_Sup;gc=Ll;Gr_Base;lb=AL;NFKD_QC=N;sc=Zyyy;WB=LE
+block;0080..00FF;age=1.1;blk=Latin_1_Sup;gc=Ll;Gr_Base;lb=AL;NFKD_QC=N;sc=Latn;WB=LE
# 0080..00FF C1 Controls and Latin-1 Supplement (Latin-1 Supplement)
# C1 controls
-cp;0080;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=figment=PADDING CHARACTER,abbreviation=PAD;NFKD_QC=Y;WB=XX
-cp;0081;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=figment=HIGH OCTET PRESET,abbreviation=HOP;NFKD_QC=Y;WB=XX
-cp;0082;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=BREAK PERMITTED HERE,abbreviation=BPH;NFKD_QC=Y;WB=XX
-cp;0083;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=NO BREAK HERE,abbreviation=NBH;NFKD_QC=Y;WB=XX
-cp;0084;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=INDEX,abbreviation=IND;NFKD_QC=Y;WB=XX
-cp;0085;bc=B;gc=Cc;GCB=CN;-Gr_Base;lb=NL;Name_Alias=control=NEXT LINE,abbreviation=NEL;NFKD_QC=Y;Pat_WS;SB=SE;WB=NL;WSpace
-cp;0086;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=START OF SELECTED AREA,abbreviation=SSA;NFKD_QC=Y;WB=XX
-cp;0087;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=END OF SELECTED AREA,abbreviation=ESA;NFKD_QC=Y;WB=XX
-cp;0088;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=CHARACTER TABULATION SET,control=HORIZONTAL TABULATION SET,abbreviation=HTS;NFKD_QC=Y;WB=XX
-cp;0089;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=CHARACTER TABULATION WITH JUSTIFICATION,control=HORIZONTAL TABULATION WITH JUSTIFICATION,abbreviation=HTJ;NFKD_QC=Y;WB=XX
-cp;008A;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=LINE TABULATION SET,control=VERTICAL TABULATION SET,abbreviation=VTS;NFKD_QC=Y;WB=XX
-cp;008B;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PARTIAL LINE FORWARD,control=PARTIAL LINE DOWN,abbreviation=PLD;NFKD_QC=Y;WB=XX
-cp;008C;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PARTIAL LINE BACKWARD,control=PARTIAL LINE UP,abbreviation=PLU;NFKD_QC=Y;WB=XX
-cp;008D;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=REVERSE LINE FEED,control=REVERSE INDEX,abbreviation=RI;NFKD_QC=Y;WB=XX
-cp;008E;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=SINGLE SHIFT TWO,control=SINGLE-SHIFT-2,abbreviation=SS2;NFKD_QC=Y;WB=XX
-cp;008F;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=SINGLE SHIFT THREE,control=SINGLE-SHIFT-3,abbreviation=SS3;NFKD_QC=Y;WB=XX
-cp;0090;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=DEVICE CONTROL STRING,abbreviation=DCS;NFKD_QC=Y;WB=XX
-cp;0091;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PRIVATE USE ONE,control=PRIVATE USE-1,abbreviation=PU1;NFKD_QC=Y;WB=XX
-cp;0092;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PRIVATE USE TWO,control=PRIVATE USE-2,abbreviation=PU2;NFKD_QC=Y;WB=XX
-cp;0093;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=SET TRANSMIT STATE,abbreviation=STS;NFKD_QC=Y;WB=XX
-cp;0094;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=CANCEL CHARACTER,abbreviation=CCH;NFKD_QC=Y;WB=XX
-cp;0095;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=MESSAGE WAITING,abbreviation=MW;NFKD_QC=Y;WB=XX
-cp;0096;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=START OF GUARDED AREA,control=START OF PROTECTED AREA,abbreviation=SPA;NFKD_QC=Y;WB=XX
-cp;0097;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=END OF GUARDED AREA,control=END OF PROTECTED AREA,abbreviation=EPA;NFKD_QC=Y;WB=XX
-cp;0098;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=START OF STRING,abbreviation=SOS;NFKD_QC=Y;WB=XX
-cp;0099;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=figment=SINGLE GRAPHIC CHARACTER INTRODUCER,abbreviation=SGC;NFKD_QC=Y;WB=XX
-cp;009A;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=SINGLE CHARACTER INTRODUCER,abbreviation=SCI;NFKD_QC=Y;WB=XX
-cp;009B;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=CONTROL SEQUENCE INTRODUCER,abbreviation=CSI;NFKD_QC=Y;WB=XX
-cp;009C;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=STRING TERMINATOR,abbreviation=ST;NFKD_QC=Y;WB=XX
-cp;009D;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=OPERATING SYSTEM COMMAND,abbreviation=OSC;NFKD_QC=Y;WB=XX
-cp;009E;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PRIVACY MESSAGE,abbreviation=PM;NFKD_QC=Y;WB=XX
-cp;009F;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=APPLICATION PROGRAM COMMAND,abbreviation=APC;NFKD_QC=Y;WB=XX
+cp;0080;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=figment=PADDING CHARACTER,abbreviation=PAD;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0081;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=figment=HIGH OCTET PRESET,abbreviation=HOP;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0082;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=BREAK PERMITTED HERE,abbreviation=BPH;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0083;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=NO BREAK HERE,abbreviation=NBH;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0084;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=INDEX,abbreviation=IND;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0085;bc=B;gc=Cc;GCB=CN;-Gr_Base;lb=NL;Name_Alias=control=NEXT LINE,abbreviation=NEL;NFKD_QC=Y;Pat_WS;SB=SE;sc=Zyyy;WB=NL;WSpace
+cp;0086;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=START OF SELECTED AREA,abbreviation=SSA;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0087;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=END OF SELECTED AREA,abbreviation=ESA;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0088;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=CHARACTER TABULATION SET,control=HORIZONTAL TABULATION SET,abbreviation=HTS;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0089;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=CHARACTER TABULATION WITH JUSTIFICATION,control=HORIZONTAL TABULATION WITH JUSTIFICATION,abbreviation=HTJ;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;008A;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=LINE TABULATION SET,control=VERTICAL TABULATION SET,abbreviation=VTS;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;008B;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PARTIAL LINE FORWARD,control=PARTIAL LINE DOWN,abbreviation=PLD;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;008C;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PARTIAL LINE BACKWARD,control=PARTIAL LINE UP,abbreviation=PLU;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;008D;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=REVERSE LINE FEED,control=REVERSE INDEX,abbreviation=RI;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;008E;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=SINGLE SHIFT TWO,control=SINGLE-SHIFT-2,abbreviation=SS2;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;008F;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=SINGLE SHIFT THREE,control=SINGLE-SHIFT-3,abbreviation=SS3;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0090;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=DEVICE CONTROL STRING,abbreviation=DCS;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0091;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PRIVATE USE ONE,control=PRIVATE USE-1,abbreviation=PU1;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0092;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PRIVATE USE TWO,control=PRIVATE USE-2,abbreviation=PU2;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0093;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=SET TRANSMIT STATE,abbreviation=STS;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0094;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=CANCEL CHARACTER,abbreviation=CCH;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0095;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=MESSAGE WAITING,abbreviation=MW;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0096;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=START OF GUARDED AREA,control=START OF PROTECTED AREA,abbreviation=SPA;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0097;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=END OF GUARDED AREA,control=END OF PROTECTED AREA,abbreviation=EPA;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0098;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=START OF STRING,abbreviation=SOS;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;0099;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=figment=SINGLE GRAPHIC CHARACTER INTRODUCER,abbreviation=SGC;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;009A;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=SINGLE CHARACTER INTRODUCER,abbreviation=SCI;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;009B;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=CONTROL SEQUENCE INTRODUCER,abbreviation=CSI;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;009C;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=STRING TERMINATOR,abbreviation=ST;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;009D;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=OPERATING SYSTEM COMMAND,abbreviation=OSC;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;009E;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=PRIVACY MESSAGE,abbreviation=PM;NFKD_QC=Y;sc=Zyyy;WB=XX
+cp;009F;bc=BN;gc=Cc;GCB=CN;-Gr_Base;lb=CM;Name_Alias=control=APPLICATION PROGRAM COMMAND,abbreviation=APC;NFKD_QC=Y;sc=Zyyy;WB=XX
# Latin-1 punctuation and symbols
-cp;00A0;bc=CS;CWKCF;dm=0020;dt=Nb;gc=Zs;InSC=Consonant_Placeholder;lb=GL;na=NO-BREAK SPACE;Name_Alias=abbreviation=NBSP;NFKC_CF=0020;NFKC_QC=N;SB=SP;WB=XX;WSpace
-cp;00A1;bc=ON;ea=A;gc=Po;lb=OP;na=INVERTED EXCLAMATION MARK;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00A2;bc=ET;ea=Na;gc=Sc;lb=PO;na=CENT SIGN;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00A3;bc=ET;ea=Na;gc=Sc;lb=PR;na=POUND SIGN;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00A4;bc=ET;ea=A;gc=Sc;lb=PR;na=CURRENCY SIGN;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00A5;bc=ET;ea=Na;gc=Sc;lb=PR;na=YEN SIGN;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00A6;bc=ON;ea=Na;gc=So;na=BROKEN BAR;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00A7;bc=ON;ea=A;gc=Po;lb=AI;na=SECTION SIGN;NFKD_QC=Y;Pat_Syn;vo=U;WB=XX
-cp;00A8;bc=ON;CI;CWKCF;Dia;dm=0020 0308;dt=Com;ea=A;gc=Sk;lb=AI;na=DIAERESIS;NFKC_CF=0020 0308;NFKC_QC=N;WB=XX
-cp;00A9;bc=ON;Emoji;ExtPict;gc=So;na=COPYRIGHT SIGN;NFKD_QC=Y;Pat_Syn;vo=U;WB=XX
-cp;00AA;Alpha;Cased;CWKCF;dm=0061;dt=Sup;ea=A;gc=Lo;IDC;IDS;lb=AI;Lower;na=FEMININE ORDINAL INDICATOR;NFKC_CF=0061;NFKC_QC=N;SB=LO;sc=Latn;XIDC;XIDS
-cp;00AB;bc=ON;Bidi_M;bmg=00BB;gc=Pi;lb=QU;na=LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;NFKD_QC=Y;Pat_Syn;QMark;SB=CL;WB=XX
-cp;00AC;bc=ON;ea=Na;gc=Sm;Math;na=NOT SIGN;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00AD;bc=BN;CI;CWKCF;DI;ea=A;gc=Cf;GCB=CN;-Gr_Base;Hyphen;jt=T;lb=BA;na=SOFT HYPHEN;Name_Alias=abbreviation=SHY;NFKC_CF=;NFKD_QC=Y;SB=FO;WB=FO
-cp;00AE;bc=ON;ea=A;Emoji;ExtPict;gc=So;na=REGISTERED SIGN;NFKD_QC=Y;Pat_Syn;vo=U;WB=XX
-cp;00AF;bc=ON;CI;CWKCF;Dia;dm=0020 0304;dt=Com;ea=Na;gc=Sk;na=MACRON;NFKC_CF=0020 0304;NFKC_QC=N;WB=XX
-cp;00B0;bc=ET;ea=A;gc=So;lb=PO;na=DEGREE SIGN;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00B1;bc=ET;ea=A;gc=Sm;lb=PR;Math;na=PLUS-MINUS SIGN;NFKD_QC=Y;Pat_Syn;vo=U;WB=XX
-cp;00B2;bc=EN;CWKCF;dm=0032;dt=Sup;ea=A;gc=No;InSC=Syllable_Modifier;lb=AI;na=SUPERSCRIPT TWO;NFKC_CF=0032;NFKC_QC=N;nt=Di;nv=2;WB=XX
-cp;00B3;bc=EN;CWKCF;dm=0033;dt=Sup;ea=A;gc=No;InSC=Syllable_Modifier;lb=AI;na=SUPERSCRIPT THREE;NFKC_CF=0033;NFKC_QC=N;nt=Di;nv=3;WB=XX
-cp;00B4;bc=ON;CI;CWKCF;Dia;dm=0020 0301;dt=Com;ea=A;gc=Sk;lb=BB;na=ACUTE ACCENT;NFKC_CF=0020 0301;NFKC_QC=N;WB=XX
-cp;00B5;Alpha;Cased;cf=03BC;CWCF;CWCM;CWKCF;CWT;CWU;dm=03BC;dt=Com;IDC;IDS;Lower;na=MICRO SIGN;NFKC_CF=03BC;NFKC_QC=N;SB=LO;scf=03BC;stc=039C;suc=039C;XIDC;XIDS
-cp;00B6;bc=ON;ea=A;gc=Po;lb=AI;na=PILCROW SIGN;NFKD_QC=Y;Pat_Syn;WB=XX
-cp;00B7;bc=ON;CI;Dia;ea=A;Ext;gc=Po;IDC;lb=AI;na=MIDDLE DOT;NFKD_QC=Y;WB=ML;XIDC
-cp;00B8;bc=ON;CI;CWKCF;Dia;dm=0020 0327;dt=Com;ea=A;gc=Sk;lb=AI;na=CEDILLA;NFKC_CF=0020 0327;NFKC_QC=N;WB=XX
-cp;00B9;bc=EN;CWKCF;dm=0031;dt=Sup;ea=A;gc=No;lb=AI;na=SUPERSCRIPT ONE;NFKC_CF=0031;NFKC_QC=N;nt=Di;nv=1;WB=XX
-cp;00BA;Alpha;Cased;CWKCF;dm=006F;dt=Sup;ea=A;gc=Lo;IDC;IDS;lb=AI;Lower;na=MASCULINE ORDINAL INDICATOR;NFKC_CF=006F;NFKC_QC=N;SB=LO;sc=Latn;XIDC;XIDS
-cp;00BB;bc=ON;Bidi_M;bmg=00AB;gc=Pf;lb=QU;na=RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;NFKD_QC=Y;Pat_Syn;QMark;SB=CL;WB=XX
+cp;00A0;bc=CS;CWKCF;dm=0020;dt=Nb;gc=Zs;InSC=Consonant_Placeholder;lb=GL;na=NO-BREAK SPACE;Name_Alias=abbreviation=NBSP;NFKC_CF=0020;NFKC_QC=N;SB=SP;sc=Zyyy;WB=XX;WSpace
+cp;00A1;bc=ON;ea=A;gc=Po;lb=OP;na=INVERTED EXCLAMATION MARK;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00A2;bc=ET;ea=Na;gc=Sc;lb=PO;na=CENT SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00A3;bc=ET;ea=Na;gc=Sc;lb=PR;na=POUND SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00A4;bc=ET;ea=A;gc=Sc;lb=PR;na=CURRENCY SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00A5;bc=ET;ea=Na;gc=Sc;lb=PR;na=YEN SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00A6;bc=ON;ea=Na;gc=So;na=BROKEN BAR;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00A7;bc=ON;ea=A;gc=Po;lb=AI;na=SECTION SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;vo=U;WB=XX
+cp;00A8;bc=ON;CI;CWKCF;Dia;dm=0020 0308;dt=Com;ea=A;gc=Sk;lb=AI;na=DIAERESIS;NFKC_CF=0020 0308;NFKC_QC=N;sc=Zyyy;WB=XX
+cp;00A9;bc=ON;Emoji;ExtPict;gc=So;na=COPYRIGHT SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;vo=U;WB=XX
+cp;00AA;Alpha;Cased;CWKCF;dm=0061;dt=Sup;ea=A;gc=Lo;IDC;IDS;lb=AI;Lower;na=FEMININE ORDINAL INDICATOR;NFKC_CF=0061;NFKC_QC=N;SB=LO;XIDC;XIDS
+cp;00AB;bc=ON;Bidi_M;bmg=00BB;gc=Pi;lb=QU;na=LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;NFKD_QC=Y;Pat_Syn;QMark;SB=CL;sc=Zyyy;WB=XX
+cp;00AC;bc=ON;ea=Na;gc=Sm;Math;na=NOT SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00AD;bc=BN;CI;CWKCF;DI;ea=A;gc=Cf;GCB=CN;-Gr_Base;Hyphen;jt=T;lb=BA;na=SOFT HYPHEN;Name_Alias=abbreviation=SHY;NFKC_CF=;NFKD_QC=Y;SB=FO;sc=Zyyy;WB=FO
+cp;00AE;bc=ON;ea=A;Emoji;ExtPict;gc=So;na=REGISTERED SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;vo=U;WB=XX
+cp;00AF;bc=ON;CI;CWKCF;Dia;dm=0020 0304;dt=Com;ea=Na;gc=Sk;na=MACRON;NFKC_CF=0020 0304;NFKC_QC=N;sc=Zyyy;WB=XX
+cp;00B0;bc=ET;ea=A;gc=So;lb=PO;na=DEGREE SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00B1;bc=ET;ea=A;gc=Sm;lb=PR;Math;na=PLUS-MINUS SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;vo=U;WB=XX
+cp;00B2;bc=EN;CWKCF;dm=0032;dt=Sup;ea=A;gc=No;InSC=Syllable_Modifier;lb=AI;na=SUPERSCRIPT TWO;NFKC_CF=0032;NFKC_QC=N;nt=Di;nv=2;sc=Zyyy;WB=XX
+cp;00B3;bc=EN;CWKCF;dm=0033;dt=Sup;ea=A;gc=No;InSC=Syllable_Modifier;lb=AI;na=SUPERSCRIPT THREE;NFKC_CF=0033;NFKC_QC=N;nt=Di;nv=3;sc=Zyyy;WB=XX
+cp;00B4;bc=ON;CI;CWKCF;Dia;dm=0020 0301;dt=Com;ea=A;gc=Sk;lb=BB;na=ACUTE ACCENT;NFKC_CF=0020 0301;NFKC_QC=N;sc=Zyyy;WB=XX
+cp;00B5;Alpha;Cased;cf=03BC;CWCF;CWCM;CWKCF;CWT;CWU;dm=03BC;dt=Com;IDC;IDS;Lower;na=MICRO SIGN;NFKC_CF=03BC;NFKC_QC=N;SB=LO;sc=Zyyy;scf=03BC;stc=039C;suc=039C;XIDC;XIDS
+cp;00B6;bc=ON;ea=A;gc=Po;lb=AI;na=PILCROW SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
+cp;00B7;bc=ON;CI;Dia;ea=A;Ext;gc=Po;IDC;lb=AI;na=MIDDLE DOT;NFKD_QC=Y;sc=Zyyy;WB=ML;XIDC
+cp;00B8;bc=ON;CI;CWKCF;Dia;dm=0020 0327;dt=Com;ea=A;gc=Sk;lb=AI;na=CEDILLA;NFKC_CF=0020 0327;NFKC_QC=N;sc=Zyyy;WB=XX
+cp;00B9;bc=EN;CWKCF;dm=0031;dt=Sup;ea=A;gc=No;lb=AI;na=SUPERSCRIPT ONE;NFKC_CF=0031;NFKC_QC=N;nt=Di;nv=1;sc=Zyyy;WB=XX
+cp;00BA;Alpha;Cased;CWKCF;dm=006F;dt=Sup;ea=A;gc=Lo;IDC;IDS;lb=AI;Lower;na=MASCULINE ORDINAL INDICATOR;NFKC_CF=006F;NFKC_QC=N;SB=LO;XIDC;XIDS
+cp;00BB;bc=ON;Bidi_M;bmg=00AB;gc=Pf;lb=QU;na=RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;NFKD_QC=Y;Pat_Syn;QMark;SB=CL;sc=Zyyy;WB=XX
# Vulgar fractions
-cp;00BC;bc=ON;CWKCF;dm=0031 2044 0034;dt=Fra;ea=A;gc=No;lb=AI;na=VULGAR FRACTION ONE QUARTER;NFKC_CF=0031 2044 0034;NFKC_QC=N;nt=Nu;nv=1/4;vo=U;WB=XX
-cp;00BD;bc=ON;CWKCF;dm=0031 2044 0032;dt=Fra;ea=A;gc=No;lb=AI;na=VULGAR FRACTION ONE HALF;NFKC_CF=0031 2044 0032;NFKC_QC=N;nt=Nu;nv=1/2;vo=U;WB=XX
-cp;00BE;bc=ON;CWKCF;dm=0033 2044 0034;dt=Fra;ea=A;gc=No;lb=AI;na=VULGAR FRACTION THREE QUARTERS;NFKC_CF=0033 2044 0034;NFKC_QC=N;nt=Nu;nv=3/4;vo=U;WB=XX
+cp;00BC;bc=ON;CWKCF;dm=0031 2044 0034;dt=Fra;ea=A;gc=No;lb=AI;na=VULGAR FRACTION ONE QUARTER;NFKC_CF=0031 2044 0034;NFKC_QC=N;nt=Nu;nv=1/4;sc=Zyyy;vo=U;WB=XX
+cp;00BD;bc=ON;CWKCF;dm=0031 2044 0032;dt=Fra;ea=A;gc=No;lb=AI;na=VULGAR FRACTION ONE HALF;NFKC_CF=0031 2044 0032;NFKC_QC=N;nt=Nu;nv=1/2;sc=Zyyy;vo=U;WB=XX
+cp;00BE;bc=ON;CWKCF;dm=0033 2044 0034;dt=Fra;ea=A;gc=No;lb=AI;na=VULGAR FRACTION THREE QUARTERS;NFKC_CF=0033 2044 0034;NFKC_QC=N;nt=Nu;nv=3/4;sc=Zyyy;vo=U;WB=XX
# Punctuation
-cp;00BF;bc=ON;ea=A;gc=Po;lb=OP;na=INVERTED QUESTION MARK;NFKD_QC=Y;Pat_Syn;WB=XX
+cp;00BF;bc=ON;ea=A;gc=Po;lb=OP;na=INVERTED QUESTION MARK;NFKD_QC=Y;Pat_Syn;sc=Zyyy;WB=XX
# Letters
-cp;00C0;Alpha;Cased;cf=00E0;CWCF;CWCM;CWKCF;CWL;dm=0041 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH GRAVE;NFD_QC=N;NFKC_CF=00E0;SB=UP;sc=Latn;scf=00E0;slc=00E0;Upper;XIDC;XIDS
-cp;00C1;Alpha;Cased;cf=00E1;CWCF;CWCM;CWKCF;CWL;dm=0041 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH ACUTE;NFD_QC=N;NFKC_CF=00E1;SB=UP;sc=Latn;scf=00E1;slc=00E1;Upper;XIDC;XIDS
-cp;00C2;Alpha;Cased;cf=00E2;CWCF;CWCM;CWKCF;CWL;dm=0041 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00E2;SB=UP;sc=Latn;scf=00E2;slc=00E2;Upper;XIDC;XIDS
-cp;00C3;Alpha;Cased;cf=00E3;CWCF;CWCM;CWKCF;CWL;dm=0041 0303;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH TILDE;NFD_QC=N;NFKC_CF=00E3;SB=UP;sc=Latn;scf=00E3;slc=00E3;Upper;XIDC;XIDS
-cp;00C4;Alpha;Cased;cf=00E4;CWCF;CWCM;CWKCF;CWL;dm=0041 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH DIAERESIS;NFD_QC=N;NFKC_CF=00E4;SB=UP;sc=Latn;scf=00E4;slc=00E4;Upper;XIDC;XIDS
-cp;00C5;Alpha;Cased;cf=00E5;CWCF;CWCM;CWKCF;CWL;dm=0041 030A;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH RING ABOVE;NFD_QC=N;NFKC_CF=00E5;SB=UP;sc=Latn;scf=00E5;slc=00E5;Upper;XIDC;XIDS
-cp;00C6;Alpha;Cased;cf=00E6;CWCF;CWCM;CWKCF;CWL;ea=A;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER AE;NFKC_CF=00E6;NFKD_QC=Y;SB=UP;sc=Latn;scf=00E6;slc=00E6;Upper;XIDC;XIDS
-cp;00C7;Alpha;Cased;cf=00E7;CWCF;CWCM;CWKCF;CWL;dm=0043 0327;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER C WITH CEDILLA;NFD_QC=N;NFKC_CF=00E7;SB=UP;sc=Latn;scf=00E7;slc=00E7;Upper;XIDC;XIDS
-cp;00C8;Alpha;Cased;cf=00E8;CWCF;CWCM;CWKCF;CWL;dm=0045 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER E WITH GRAVE;NFD_QC=N;NFKC_CF=00E8;SB=UP;sc=Latn;scf=00E8;slc=00E8;Upper;XIDC;XIDS
-cp;00C9;Alpha;Cased;cf=00E9;CWCF;CWCM;CWKCF;CWL;dm=0045 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER E WITH ACUTE;NFD_QC=N;NFKC_CF=00E9;SB=UP;sc=Latn;scf=00E9;slc=00E9;Upper;XIDC;XIDS
-cp;00CA;Alpha;Cased;cf=00EA;CWCF;CWCM;CWKCF;CWL;dm=0045 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER E WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00EA;SB=UP;sc=Latn;scf=00EA;slc=00EA;Upper;XIDC;XIDS
-cp;00CB;Alpha;Cased;cf=00EB;CWCF;CWCM;CWKCF;CWL;dm=0045 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER E WITH DIAERESIS;NFD_QC=N;NFKC_CF=00EB;SB=UP;sc=Latn;scf=00EB;slc=00EB;Upper;XIDC;XIDS
-cp;00CC;Alpha;Cased;cf=00EC;Conditional_Case_Mappings=lt:lc=0069 0307 0300&tc=00CC&uc=00CC;CWCF;CWCM;CWKCF;CWL;dm=0049 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER I WITH GRAVE;NFD_QC=N;NFKC_CF=00EC;SB=UP;sc=Latn;scf=00EC;slc=00EC;Upper;XIDC;XIDS
-cp;00CD;Alpha;Cased;cf=00ED;Conditional_Case_Mappings=lt:lc=0069 0307 0301&tc=00CD&uc=00CD;CWCF;CWCM;CWKCF;CWL;dm=0049 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER I WITH ACUTE;NFD_QC=N;NFKC_CF=00ED;SB=UP;sc=Latn;scf=00ED;slc=00ED;Upper;XIDC;XIDS
-cp;00CE;Alpha;Cased;cf=00EE;CWCF;CWCM;CWKCF;CWL;dm=0049 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER I WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00EE;SB=UP;sc=Latn;scf=00EE;slc=00EE;Upper;XIDC;XIDS
-cp;00CF;Alpha;Cased;cf=00EF;CWCF;CWCM;CWKCF;CWL;dm=0049 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER I WITH DIAERESIS;NFD_QC=N;NFKC_CF=00EF;SB=UP;sc=Latn;scf=00EF;slc=00EF;Upper;XIDC;XIDS
-cp;00D0;Alpha;Cased;cf=00F0;CWCF;CWCM;CWKCF;CWL;ea=A;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER ETH;NFKC_CF=00F0;NFKD_QC=Y;SB=UP;sc=Latn;scf=00F0;slc=00F0;Upper;XIDC;XIDS
-cp;00D1;Alpha;Cased;cf=00F1;CWCF;CWCM;CWKCF;CWL;dm=004E 0303;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER N WITH TILDE;NFD_QC=N;NFKC_CF=00F1;SB=UP;sc=Latn;scf=00F1;slc=00F1;Upper;XIDC;XIDS
-cp;00D2;Alpha;Cased;cf=00F2;CWCF;CWCM;CWKCF;CWL;dm=004F 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH GRAVE;NFD_QC=N;NFKC_CF=00F2;SB=UP;sc=Latn;scf=00F2;slc=00F2;Upper;XIDC;XIDS
-cp;00D3;Alpha;Cased;cf=00F3;CWCF;CWCM;CWKCF;CWL;dm=004F 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH ACUTE;NFD_QC=N;NFKC_CF=00F3;SB=UP;sc=Latn;scf=00F3;slc=00F3;Upper;XIDC;XIDS
-cp;00D4;Alpha;Cased;cf=00F4;CWCF;CWCM;CWKCF;CWL;dm=004F 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00F4;SB=UP;sc=Latn;scf=00F4;slc=00F4;Upper;XIDC;XIDS
-cp;00D5;Alpha;Cased;cf=00F5;CWCF;CWCM;CWKCF;CWL;dm=004F 0303;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH TILDE;NFD_QC=N;NFKC_CF=00F5;SB=UP;sc=Latn;scf=00F5;slc=00F5;Upper;XIDC;XIDS
-cp;00D6;Alpha;Cased;cf=00F6;CWCF;CWCM;CWKCF;CWL;dm=004F 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH DIAERESIS;NFD_QC=N;NFKC_CF=00F6;SB=UP;sc=Latn;scf=00F6;slc=00F6;Upper;XIDC;XIDS
+cp;00C0;Alpha;Cased;cf=00E0;CWCF;CWCM;CWKCF;CWL;dm=0041 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH GRAVE;NFD_QC=N;NFKC_CF=00E0;SB=UP;scf=00E0;slc=00E0;Upper;XIDC;XIDS
+cp;00C1;Alpha;Cased;cf=00E1;CWCF;CWCM;CWKCF;CWL;dm=0041 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH ACUTE;NFD_QC=N;NFKC_CF=00E1;SB=UP;scf=00E1;slc=00E1;Upper;XIDC;XIDS
+cp;00C2;Alpha;Cased;cf=00E2;CWCF;CWCM;CWKCF;CWL;dm=0041 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00E2;SB=UP;scf=00E2;slc=00E2;Upper;XIDC;XIDS
+cp;00C3;Alpha;Cased;cf=00E3;CWCF;CWCM;CWKCF;CWL;dm=0041 0303;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH TILDE;NFD_QC=N;NFKC_CF=00E3;SB=UP;scf=00E3;slc=00E3;Upper;XIDC;XIDS
+cp;00C4;Alpha;Cased;cf=00E4;CWCF;CWCM;CWKCF;CWL;dm=0041 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH DIAERESIS;NFD_QC=N;NFKC_CF=00E4;SB=UP;scf=00E4;slc=00E4;Upper;XIDC;XIDS
+cp;00C5;Alpha;Cased;cf=00E5;CWCF;CWCM;CWKCF;CWL;dm=0041 030A;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER A WITH RING ABOVE;NFD_QC=N;NFKC_CF=00E5;SB=UP;scf=00E5;slc=00E5;Upper;XIDC;XIDS
+cp;00C6;Alpha;Cased;cf=00E6;CWCF;CWCM;CWKCF;CWL;ea=A;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER AE;NFKC_CF=00E6;NFKD_QC=Y;SB=UP;scf=00E6;slc=00E6;Upper;XIDC;XIDS
+cp;00C7;Alpha;Cased;cf=00E7;CWCF;CWCM;CWKCF;CWL;dm=0043 0327;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER C WITH CEDILLA;NFD_QC=N;NFKC_CF=00E7;SB=UP;scf=00E7;slc=00E7;Upper;XIDC;XIDS
+cp;00C8;Alpha;Cased;cf=00E8;CWCF;CWCM;CWKCF;CWL;dm=0045 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER E WITH GRAVE;NFD_QC=N;NFKC_CF=00E8;SB=UP;scf=00E8;slc=00E8;Upper;XIDC;XIDS
+cp;00C9;Alpha;Cased;cf=00E9;CWCF;CWCM;CWKCF;CWL;dm=0045 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER E WITH ACUTE;NFD_QC=N;NFKC_CF=00E9;SB=UP;scf=00E9;slc=00E9;Upper;XIDC;XIDS
+cp;00CA;Alpha;Cased;cf=00EA;CWCF;CWCM;CWKCF;CWL;dm=0045 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER E WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00EA;SB=UP;scf=00EA;slc=00EA;Upper;XIDC;XIDS
+cp;00CB;Alpha;Cased;cf=00EB;CWCF;CWCM;CWKCF;CWL;dm=0045 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER E WITH DIAERESIS;NFD_QC=N;NFKC_CF=00EB;SB=UP;scf=00EB;slc=00EB;Upper;XIDC;XIDS
+cp;00CC;Alpha;Cased;cf=00EC;Conditional_Case_Mappings=lt:lc=0069 0307 0300&tc=00CC&uc=00CC;CWCF;CWCM;CWKCF;CWL;dm=0049 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER I WITH GRAVE;NFD_QC=N;NFKC_CF=00EC;SB=UP;scf=00EC;slc=00EC;Upper;XIDC;XIDS
+cp;00CD;Alpha;Cased;cf=00ED;Conditional_Case_Mappings=lt:lc=0069 0307 0301&tc=00CD&uc=00CD;CWCF;CWCM;CWKCF;CWL;dm=0049 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER I WITH ACUTE;NFD_QC=N;NFKC_CF=00ED;SB=UP;scf=00ED;slc=00ED;Upper;XIDC;XIDS
+cp;00CE;Alpha;Cased;cf=00EE;CWCF;CWCM;CWKCF;CWL;dm=0049 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER I WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00EE;SB=UP;scf=00EE;slc=00EE;Upper;XIDC;XIDS
+cp;00CF;Alpha;Cased;cf=00EF;CWCF;CWCM;CWKCF;CWL;dm=0049 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER I WITH DIAERESIS;NFD_QC=N;NFKC_CF=00EF;SB=UP;scf=00EF;slc=00EF;Upper;XIDC;XIDS
+cp;00D0;Alpha;Cased;cf=00F0;CWCF;CWCM;CWKCF;CWL;ea=A;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER ETH;NFKC_CF=00F0;NFKD_QC=Y;SB=UP;scf=00F0;slc=00F0;Upper;XIDC;XIDS
+cp;00D1;Alpha;Cased;cf=00F1;CWCF;CWCM;CWKCF;CWL;dm=004E 0303;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER N WITH TILDE;NFD_QC=N;NFKC_CF=00F1;SB=UP;scf=00F1;slc=00F1;Upper;XIDC;XIDS
+cp;00D2;Alpha;Cased;cf=00F2;CWCF;CWCM;CWKCF;CWL;dm=004F 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH GRAVE;NFD_QC=N;NFKC_CF=00F2;SB=UP;scf=00F2;slc=00F2;Upper;XIDC;XIDS
+cp;00D3;Alpha;Cased;cf=00F3;CWCF;CWCM;CWKCF;CWL;dm=004F 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH ACUTE;NFD_QC=N;NFKC_CF=00F3;SB=UP;scf=00F3;slc=00F3;Upper;XIDC;XIDS
+cp;00D4;Alpha;Cased;cf=00F4;CWCF;CWCM;CWKCF;CWL;dm=004F 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00F4;SB=UP;scf=00F4;slc=00F4;Upper;XIDC;XIDS
+cp;00D5;Alpha;Cased;cf=00F5;CWCF;CWCM;CWKCF;CWL;dm=004F 0303;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH TILDE;NFD_QC=N;NFKC_CF=00F5;SB=UP;scf=00F5;slc=00F5;Upper;XIDC;XIDS
+cp;00D6;Alpha;Cased;cf=00F6;CWCF;CWCM;CWKCF;CWL;dm=004F 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH DIAERESIS;NFD_QC=N;NFKC_CF=00F6;SB=UP;scf=00F6;slc=00F6;Upper;XIDC;XIDS
# Mathematical operator
-cp;00D7;bc=ON;ea=A;gc=Sm;InSC=Consonant_Placeholder;lb=AI;Math;na=MULTIPLICATION SIGN;NFKD_QC=Y;Pat_Syn;vo=U;WB=XX
+cp;00D7;bc=ON;ea=A;gc=Sm;InSC=Consonant_Placeholder;lb=AI;Math;na=MULTIPLICATION SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;vo=U;WB=XX
# Letters
-cp;00D8;Alpha;Cased;cf=00F8;CWCF;CWCM;CWKCF;CWL;ea=A;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH STROKE;NFKC_CF=00F8;NFKD_QC=Y;SB=UP;sc=Latn;scf=00F8;slc=00F8;Upper;XIDC;XIDS
-cp;00D9;Alpha;Cased;cf=00F9;CWCF;CWCM;CWKCF;CWL;dm=0055 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER U WITH GRAVE;NFD_QC=N;NFKC_CF=00F9;SB=UP;sc=Latn;scf=00F9;slc=00F9;Upper;XIDC;XIDS
-cp;00DA;Alpha;Cased;cf=00FA;CWCF;CWCM;CWKCF;CWL;dm=0055 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER U WITH ACUTE;NFD_QC=N;NFKC_CF=00FA;SB=UP;sc=Latn;scf=00FA;slc=00FA;Upper;XIDC;XIDS
-cp;00DB;Alpha;Cased;cf=00FB;CWCF;CWCM;CWKCF;CWL;dm=0055 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER U WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00FB;SB=UP;sc=Latn;scf=00FB;slc=00FB;Upper;XIDC;XIDS
-cp;00DC;Alpha;Cased;cf=00FC;CWCF;CWCM;CWKCF;CWL;dm=0055 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER U WITH DIAERESIS;NFD_QC=N;NFKC_CF=00FC;SB=UP;sc=Latn;scf=00FC;slc=00FC;Upper;XIDC;XIDS
-cp;00DD;Alpha;Cased;cf=00FD;CWCF;CWCM;CWKCF;CWL;dm=0059 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER Y WITH ACUTE;NFD_QC=N;NFKC_CF=00FD;SB=UP;sc=Latn;scf=00FD;slc=00FD;Upper;XIDC;XIDS
-cp;00DE;Alpha;Cased;cf=00FE;CWCF;CWCM;CWKCF;CWL;ea=A;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER THORN;NFKC_CF=00FE;NFKD_QC=Y;SB=UP;sc=Latn;scf=00FE;slc=00FE;Upper;XIDC;XIDS
-cp;00DF;Alpha;Cased;cf=0073 0073;CWCF;CWCM;CWKCF;CWT;CWU;ea=A;IDC;IDS;lc=00DF;Lower;na=LATIN SMALL LETTER SHARP S;NFKC_CF=0073 0073;NFKD_QC=Y;SB=LO;sc=Latn;tc=0053 0073;uc=0053 0053;XIDC;XIDS
-cp;00E0;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH GRAVE;NFD_QC=N;SB=LO;sc=Latn;stc=00C0;suc=00C0;XIDC;XIDS
-cp;00E1;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH ACUTE;NFD_QC=N;SB=LO;sc=Latn;stc=00C1;suc=00C1;XIDC;XIDS
-cp;00E2;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0302;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH CIRCUMFLEX;NFD_QC=N;SB=LO;sc=Latn;stc=00C2;suc=00C2;XIDC;XIDS
-cp;00E3;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0303;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH TILDE;NFD_QC=N;SB=LO;sc=Latn;stc=00C3;suc=00C3;XIDC;XIDS
-cp;00E4;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH DIAERESIS;NFD_QC=N;SB=LO;sc=Latn;stc=00C4;suc=00C4;XIDC;XIDS
-cp;00E5;Alpha;Cased;CWCM;CWT;CWU;dm=0061 030A;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH RING ABOVE;NFD_QC=N;SB=LO;sc=Latn;stc=00C5;suc=00C5;XIDC;XIDS
-cp;00E6;Alpha;Cased;CWCM;CWT;CWU;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER AE;NFKD_QC=Y;SB=LO;sc=Latn;stc=00C6;suc=00C6;XIDC;XIDS
-cp;00E7;Alpha;Cased;CWCM;CWT;CWU;dm=0063 0327;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER C WITH CEDILLA;NFD_QC=N;SB=LO;sc=Latn;stc=00C7;suc=00C7;XIDC;XIDS
-cp;00E8;Alpha;Cased;CWCM;CWT;CWU;dm=0065 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER E WITH GRAVE;NFD_QC=N;SB=LO;sc=Latn;stc=00C8;suc=00C8;XIDC;XIDS
-cp;00E9;Alpha;Cased;CWCM;CWT;CWU;dm=0065 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER E WITH ACUTE;NFD_QC=N;SB=LO;sc=Latn;stc=00C9;suc=00C9;XIDC;XIDS
-cp;00EA;Alpha;Cased;CWCM;CWT;CWU;dm=0065 0302;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER E WITH CIRCUMFLEX;NFD_QC=N;SB=LO;sc=Latn;stc=00CA;suc=00CA;XIDC;XIDS
-cp;00EB;Alpha;Cased;CWCM;CWT;CWU;dm=0065 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER E WITH DIAERESIS;NFD_QC=N;SB=LO;sc=Latn;stc=00CB;suc=00CB;XIDC;XIDS
-cp;00EC;Alpha;Cased;CWCM;CWT;CWU;dm=0069 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER I WITH GRAVE;NFD_QC=N;SB=LO;sc=Latn;stc=00CC;suc=00CC;XIDC;XIDS
-cp;00ED;Alpha;Cased;CWCM;CWT;CWU;dm=0069 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER I WITH ACUTE;NFD_QC=N;SB=LO;sc=Latn;stc=00CD;suc=00CD;XIDC;XIDS
-cp;00EE;Alpha;Cased;CWCM;CWT;CWU;dm=0069 0302;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER I WITH CIRCUMFLEX;NFD_QC=N;SB=LO;sc=Latn;stc=00CE;suc=00CE;XIDC;XIDS
-cp;00EF;Alpha;Cased;CWCM;CWT;CWU;dm=0069 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER I WITH DIAERESIS;NFD_QC=N;SB=LO;sc=Latn;stc=00CF;suc=00CF;XIDC;XIDS
-cp;00F0;Alpha;Cased;CWCM;CWT;CWU;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER ETH;NFKD_QC=Y;SB=LO;sc=Latn;stc=00D0;suc=00D0;XIDC;XIDS
-cp;00F1;Alpha;Cased;CWCM;CWT;CWU;dm=006E 0303;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER N WITH TILDE;NFD_QC=N;SB=LO;sc=Latn;stc=00D1;suc=00D1;XIDC;XIDS
-cp;00F2;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH GRAVE;NFD_QC=N;SB=LO;sc=Latn;stc=00D2;suc=00D2;XIDC;XIDS
-cp;00F3;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH ACUTE;NFD_QC=N;SB=LO;sc=Latn;stc=00D3;suc=00D3;XIDC;XIDS
-cp;00F4;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0302;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH CIRCUMFLEX;NFD_QC=N;SB=LO;sc=Latn;stc=00D4;suc=00D4;XIDC;XIDS
-cp;00F5;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0303;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH TILDE;NFD_QC=N;SB=LO;sc=Latn;stc=00D5;suc=00D5;XIDC;XIDS
-cp;00F6;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH DIAERESIS;NFD_QC=N;SB=LO;sc=Latn;stc=00D6;suc=00D6;XIDC;XIDS
+cp;00D8;Alpha;Cased;cf=00F8;CWCF;CWCM;CWKCF;CWL;ea=A;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER O WITH STROKE;NFKC_CF=00F8;NFKD_QC=Y;SB=UP;scf=00F8;slc=00F8;Upper;XIDC;XIDS
+cp;00D9;Alpha;Cased;cf=00F9;CWCF;CWCM;CWKCF;CWL;dm=0055 0300;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER U WITH GRAVE;NFD_QC=N;NFKC_CF=00F9;SB=UP;scf=00F9;slc=00F9;Upper;XIDC;XIDS
+cp;00DA;Alpha;Cased;cf=00FA;CWCF;CWCM;CWKCF;CWL;dm=0055 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER U WITH ACUTE;NFD_QC=N;NFKC_CF=00FA;SB=UP;scf=00FA;slc=00FA;Upper;XIDC;XIDS
+cp;00DB;Alpha;Cased;cf=00FB;CWCF;CWCM;CWKCF;CWL;dm=0055 0302;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER U WITH CIRCUMFLEX;NFD_QC=N;NFKC_CF=00FB;SB=UP;scf=00FB;slc=00FB;Upper;XIDC;XIDS
+cp;00DC;Alpha;Cased;cf=00FC;CWCF;CWCM;CWKCF;CWL;dm=0055 0308;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER U WITH DIAERESIS;NFD_QC=N;NFKC_CF=00FC;SB=UP;scf=00FC;slc=00FC;Upper;XIDC;XIDS
+cp;00DD;Alpha;Cased;cf=00FD;CWCF;CWCM;CWKCF;CWL;dm=0059 0301;dt=Can;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER Y WITH ACUTE;NFD_QC=N;NFKC_CF=00FD;SB=UP;scf=00FD;slc=00FD;Upper;XIDC;XIDS
+cp;00DE;Alpha;Cased;cf=00FE;CWCF;CWCM;CWKCF;CWL;ea=A;gc=Lu;IDC;IDS;na=LATIN CAPITAL LETTER THORN;NFKC_CF=00FE;NFKD_QC=Y;SB=UP;scf=00FE;slc=00FE;Upper;XIDC;XIDS
+cp;00DF;Alpha;Cased;cf=0073 0073;CWCF;CWCM;CWKCF;CWT;CWU;ea=A;IDC;IDS;lc=00DF;Lower;na=LATIN SMALL LETTER SHARP S;NFKC_CF=0073 0073;NFKD_QC=Y;SB=LO;tc=0053 0073;uc=0053 0053;XIDC;XIDS
+cp;00E0;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH GRAVE;NFD_QC=N;SB=LO;stc=00C0;suc=00C0;XIDC;XIDS
+cp;00E1;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH ACUTE;NFD_QC=N;SB=LO;stc=00C1;suc=00C1;XIDC;XIDS
+cp;00E2;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0302;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH CIRCUMFLEX;NFD_QC=N;SB=LO;stc=00C2;suc=00C2;XIDC;XIDS
+cp;00E3;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0303;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH TILDE;NFD_QC=N;SB=LO;stc=00C3;suc=00C3;XIDC;XIDS
+cp;00E4;Alpha;Cased;CWCM;CWT;CWU;dm=0061 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH DIAERESIS;NFD_QC=N;SB=LO;stc=00C4;suc=00C4;XIDC;XIDS
+cp;00E5;Alpha;Cased;CWCM;CWT;CWU;dm=0061 030A;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER A WITH RING ABOVE;NFD_QC=N;SB=LO;stc=00C5;suc=00C5;XIDC;XIDS
+cp;00E6;Alpha;Cased;CWCM;CWT;CWU;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER AE;NFKD_QC=Y;SB=LO;stc=00C6;suc=00C6;XIDC;XIDS
+cp;00E7;Alpha;Cased;CWCM;CWT;CWU;dm=0063 0327;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER C WITH CEDILLA;NFD_QC=N;SB=LO;stc=00C7;suc=00C7;XIDC;XIDS
+cp;00E8;Alpha;Cased;CWCM;CWT;CWU;dm=0065 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER E WITH GRAVE;NFD_QC=N;SB=LO;stc=00C8;suc=00C8;XIDC;XIDS
+cp;00E9;Alpha;Cased;CWCM;CWT;CWU;dm=0065 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER E WITH ACUTE;NFD_QC=N;SB=LO;stc=00C9;suc=00C9;XIDC;XIDS
+cp;00EA;Alpha;Cased;CWCM;CWT;CWU;dm=0065 0302;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER E WITH CIRCUMFLEX;NFD_QC=N;SB=LO;stc=00CA;suc=00CA;XIDC;XIDS
+cp;00EB;Alpha;Cased;CWCM;CWT;CWU;dm=0065 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER E WITH DIAERESIS;NFD_QC=N;SB=LO;stc=00CB;suc=00CB;XIDC;XIDS
+cp;00EC;Alpha;Cased;CWCM;CWT;CWU;dm=0069 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER I WITH GRAVE;NFD_QC=N;SB=LO;stc=00CC;suc=00CC;XIDC;XIDS
+cp;00ED;Alpha;Cased;CWCM;CWT;CWU;dm=0069 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER I WITH ACUTE;NFD_QC=N;SB=LO;stc=00CD;suc=00CD;XIDC;XIDS
+cp;00EE;Alpha;Cased;CWCM;CWT;CWU;dm=0069 0302;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER I WITH CIRCUMFLEX;NFD_QC=N;SB=LO;stc=00CE;suc=00CE;XIDC;XIDS
+cp;00EF;Alpha;Cased;CWCM;CWT;CWU;dm=0069 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER I WITH DIAERESIS;NFD_QC=N;SB=LO;stc=00CF;suc=00CF;XIDC;XIDS
+cp;00F0;Alpha;Cased;CWCM;CWT;CWU;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER ETH;NFKD_QC=Y;SB=LO;stc=00D0;suc=00D0;XIDC;XIDS
+cp;00F1;Alpha;Cased;CWCM;CWT;CWU;dm=006E 0303;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER N WITH TILDE;NFD_QC=N;SB=LO;stc=00D1;suc=00D1;XIDC;XIDS
+cp;00F2;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH GRAVE;NFD_QC=N;SB=LO;stc=00D2;suc=00D2;XIDC;XIDS
+cp;00F3;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH ACUTE;NFD_QC=N;SB=LO;stc=00D3;suc=00D3;XIDC;XIDS
+cp;00F4;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0302;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH CIRCUMFLEX;NFD_QC=N;SB=LO;stc=00D4;suc=00D4;XIDC;XIDS
+cp;00F5;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0303;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH TILDE;NFD_QC=N;SB=LO;stc=00D5;suc=00D5;XIDC;XIDS
+cp;00F6;Alpha;Cased;CWCM;CWT;CWU;dm=006F 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH DIAERESIS;NFD_QC=N;SB=LO;stc=00D6;suc=00D6;XIDC;XIDS
# Mathematical operator
-cp;00F7;bc=ON;ea=A;gc=Sm;lb=AI;Math;na=DIVISION SIGN;NFKD_QC=Y;Pat_Syn;vo=U;WB=XX
+cp;00F7;bc=ON;ea=A;gc=Sm;lb=AI;Math;na=DIVISION SIGN;NFKD_QC=Y;Pat_Syn;sc=Zyyy;vo=U;WB=XX
# Letters
-cp;00F8;Alpha;Cased;CWCM;CWT;CWU;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH STROKE;NFKD_QC=Y;SB=LO;sc=Latn;stc=00D8;suc=00D8;XIDC;XIDS
-cp;00F9;Alpha;Cased;CWCM;CWT;CWU;dm=0075 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER U WITH GRAVE;NFD_QC=N;SB=LO;sc=Latn;stc=00D9;suc=00D9;XIDC;XIDS
-cp;00FA;Alpha;Cased;CWCM;CWT;CWU;dm=0075 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER U WITH ACUTE;NFD_QC=N;SB=LO;sc=Latn;stc=00DA;suc=00DA;XIDC;XIDS
-cp;00FB;Alpha;Cased;CWCM;CWT;CWU;dm=0075 0302;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER U WITH CIRCUMFLEX;NFD_QC=N;SB=LO;sc=Latn;stc=00DB;suc=00DB;XIDC;XIDS
-cp;00FC;Alpha;Cased;CWCM;CWT;CWU;dm=0075 0308;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER U WITH DIAERESIS;NFD_QC=N;SB=LO;sc=Latn;stc=00DC;suc=00DC;XIDC;XIDS
-cp;00FD;Alpha;Cased;CWCM;CWT;CWU;dm=0079 0301;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER Y WITH ACUTE;NFD_QC=N;SB=LO;sc=Latn;stc=00DD;suc=00DD;XIDC;XIDS
-cp;00FE;Alpha;Cased;CWCM;CWT;CWU;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER THORN;NFKD_QC=Y;SB=LO;sc=Latn;stc=00DE;suc=00DE;XIDC;XIDS
-cp;00FF;Alpha;Cased;CWCM;CWT;CWU;dm=0079 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER Y WITH DIAERESIS;NFD_QC=N;SB=LO;sc=Latn;stc=0178;suc=0178;XIDC;XIDS
+cp;00F8;Alpha;Cased;CWCM;CWT;CWU;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER O WITH STROKE;NFKD_QC=Y;SB=LO;stc=00D8;suc=00D8;XIDC;XIDS
+cp;00F9;Alpha;Cased;CWCM;CWT;CWU;dm=0075 0300;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER U WITH GRAVE;NFD_QC=N;SB=LO;stc=00D9;suc=00D9;XIDC;XIDS
+cp;00FA;Alpha;Cased;CWCM;CWT;CWU;dm=0075 0301;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER U WITH ACUTE;NFD_QC=N;SB=LO;stc=00DA;suc=00DA;XIDC;XIDS
+cp;00FB;Alpha;Cased;CWCM;CWT;CWU;dm=0075 0302;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER U WITH CIRCUMFLEX;NFD_QC=N;SB=LO;stc=00DB;suc=00DB;XIDC;XIDS
+cp;00FC;Alpha;Cased;CWCM;CWT;CWU;dm=0075 0308;dt=Can;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER U WITH DIAERESIS;NFD_QC=N;SB=LO;stc=00DC;suc=00DC;XIDC;XIDS
+cp;00FD;Alpha;Cased;CWCM;CWT;CWU;dm=0079 0301;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER Y WITH ACUTE;NFD_QC=N;SB=LO;stc=00DD;suc=00DD;XIDC;XIDS
+cp;00FE;Alpha;Cased;CWCM;CWT;CWU;ea=A;IDC;IDS;Lower;na=LATIN SMALL LETTER THORN;NFKD_QC=Y;SB=LO;stc=00DE;suc=00DE;XIDC;XIDS
+cp;00FF;Alpha;Cased;CWCM;CWT;CWU;dm=0079 0308;dt=Can;IDC;IDS;Lower;na=LATIN SMALL LETTER Y WITH DIAERESIS;NFD_QC=N;SB=LO;stc=0178;suc=0178;XIDC;XIDS
block;0100..017F;age=1.1;Alpha;blk=Latin_Ext_A;Cased;CWCM;dt=Can;gc=Ll;Gr_Base;IDC;IDS;lb=AL;NFD_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS
# 0100..017F Latin Extended-A
@@ -1781,7 +1812,7 @@ cp;01FC;cf=01FD;CWCF;CWKCF;CWL;dm=00C6 0301;dt=Can;na=LATIN CAPITAL LETTER AE WI
cp;01FD;CWT;CWU;dm=00E6 0301;dt=Can;gc=Ll;Lower;na=LATIN SMALL LETTER AE WITH ACUTE;NFD_QC=N;NFKD_QC=N;SB=LO;stc=01FC;suc=01FC
cp;01FE;cf=01FF;CWCF;CWKCF;CWL;dm=00D8 0301;dt=Can;na=LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;NFD_QC=N;NFKC_CF=01FF;NFKD_QC=N;scf=01FF;slc=01FF;Upper
cp;01FF;CWT;CWU;dm=00F8 0301;dt=Can;gc=Ll;Lower;na=LATIN SMALL LETTER O WITH STROKE AND ACUTE;NFD_QC=N;NFKD_QC=N;SB=LO;stc=01FE;suc=01FE
-# Additions for Slovenian and Croatian
+# Additions for Slovenian
cp;0200;cf=0201;CWCF;CWKCF;CWL;dm=0041 030F;dt=Can;na=LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;NFD_QC=N;NFKC_CF=0201;NFKD_QC=N;scf=0201;slc=0201;Upper
cp;0201;CWT;CWU;dm=0061 030F;dt=Can;gc=Ll;Lower;na=LATIN SMALL LETTER A WITH DOUBLE GRAVE;NFD_QC=N;NFKD_QC=N;SB=LO;stc=0200;suc=0200
cp;0202;cf=0203;CWCF;CWKCF;CWL;dm=0041 0311;dt=Can;na=LATIN CAPITAL LETTER A WITH INVERTED BREVE;NFD_QC=N;NFKC_CF=0203;NFKD_QC=N;scf=0203;slc=0203;Upper
@@ -2626,25 +2657,25 @@ cp;04FD;age=5.0;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER HA WITH HOOK;stc=04FC;suc
cp;04FE;age=5.0;cf=04FF;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER HA WITH STROKE;NFKC_CF=04FF;SB=UP;scf=04FF;slc=04FF;Upper
cp;04FF;age=5.0;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER HA WITH STROKE;stc=04FE;suc=04FE
-block;0500..052F;age=5.1;Alpha;blk=Cyrillic_Sup;Cased;CWCM;gc=Ll;Gr_Base;IDC;IDS;lb=AL;SB=LO;sc=Cyrl;WB=LE;XIDC;XIDS
+block;0500..052F;age=3.2;Alpha;blk=Cyrillic_Sup;Cased;CWCM;gc=Ll;Gr_Base;IDC;IDS;lb=AL;SB=LO;sc=Cyrl;WB=LE;XIDC;XIDS
# 0500..052F Cyrillic Supplement
# Komi letters
-cp;0500;age=3.2;cf=0501;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI DE;NFKC_CF=0501;SB=UP;scf=0501;slc=0501;Upper
-cp;0501;age=3.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI DE;stc=0500;suc=0500
-cp;0502;age=3.2;cf=0503;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI DJE;NFKC_CF=0503;SB=UP;scf=0503;slc=0503;Upper
-cp;0503;age=3.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI DJE;stc=0502;suc=0502
-cp;0504;age=3.2;cf=0505;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI ZJE;NFKC_CF=0505;SB=UP;scf=0505;slc=0505;Upper
-cp;0505;age=3.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI ZJE;stc=0504;suc=0504
-cp;0506;age=3.2;cf=0507;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI DZJE;NFKC_CF=0507;SB=UP;scf=0507;slc=0507;Upper
-cp;0507;age=3.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI DZJE;stc=0506;suc=0506
-cp;0508;age=3.2;cf=0509;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI LJE;NFKC_CF=0509;SB=UP;scf=0509;slc=0509;Upper
-cp;0509;age=3.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI LJE;stc=0508;suc=0508
-cp;050A;age=3.2;cf=050B;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI NJE;NFKC_CF=050B;SB=UP;scf=050B;slc=050B;Upper
-cp;050B;age=3.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI NJE;stc=050A;suc=050A
-cp;050C;age=3.2;cf=050D;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI SJE;NFKC_CF=050D;SB=UP;scf=050D;slc=050D;Upper
-cp;050D;age=3.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI SJE;stc=050C;suc=050C
-cp;050E;age=3.2;cf=050F;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI TJE;NFKC_CF=050F;SB=UP;scf=050F;slc=050F;Upper
-cp;050F;age=3.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI TJE;stc=050E;suc=050E
+cp;0500;cf=0501;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI DE;NFKC_CF=0501;SB=UP;scf=0501;slc=0501;Upper
+cp;0501;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI DE;stc=0500;suc=0500
+cp;0502;cf=0503;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI DJE;NFKC_CF=0503;SB=UP;scf=0503;slc=0503;Upper
+cp;0503;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI DJE;stc=0502;suc=0502
+cp;0504;cf=0505;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI ZJE;NFKC_CF=0505;SB=UP;scf=0505;slc=0505;Upper
+cp;0505;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI ZJE;stc=0504;suc=0504
+cp;0506;cf=0507;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI DZJE;NFKC_CF=0507;SB=UP;scf=0507;slc=0507;Upper
+cp;0507;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI DZJE;stc=0506;suc=0506
+cp;0508;cf=0509;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI LJE;NFKC_CF=0509;SB=UP;scf=0509;slc=0509;Upper
+cp;0509;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI LJE;stc=0508;suc=0508
+cp;050A;cf=050B;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI NJE;NFKC_CF=050B;SB=UP;scf=050B;slc=050B;Upper
+cp;050B;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI NJE;stc=050A;suc=050A
+cp;050C;cf=050D;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI SJE;NFKC_CF=050D;SB=UP;scf=050D;slc=050D;Upper
+cp;050D;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI SJE;stc=050C;suc=050C
+cp;050E;cf=050F;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER KOMI TJE;NFKC_CF=050F;SB=UP;scf=050F;slc=050F;Upper
+cp;050F;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER KOMI TJE;stc=050E;suc=050E
# Khanty letters
cp;0510;age=5.0;cf=0511;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER REVERSED ZE;NFKC_CF=0511;SB=UP;scf=0511;slc=0511;Upper
cp;0511;age=5.0;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER REVERSED ZE;stc=0510;suc=0510
@@ -2652,25 +2683,25 @@ cp;0511;age=5.0;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER REVERSED ZE;stc=0510;suc=
cp;0512;age=5.0;cf=0513;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER EL WITH HOOK;NFKC_CF=0513;SB=UP;scf=0513;slc=0513;Upper
cp;0513;age=5.0;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER EL WITH HOOK;stc=0512;suc=0512
# Mordvin letters
-cp;0514;cf=0515;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER LHA;NFKC_CF=0515;SB=UP;scf=0515;slc=0515;Upper
-cp;0515;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER LHA;stc=0514;suc=0514
-cp;0516;cf=0517;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER RHA;NFKC_CF=0517;SB=UP;scf=0517;slc=0517;Upper
-cp;0517;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER RHA;stc=0516;suc=0516
-cp;0518;cf=0519;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER YAE;NFKC_CF=0519;SB=UP;scf=0519;slc=0519;Upper
-cp;0519;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER YAE;stc=0518;suc=0518
+cp;0514;age=5.1;cf=0515;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER LHA;NFKC_CF=0515;SB=UP;scf=0515;slc=0515;Upper
+cp;0515;age=5.1;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER LHA;stc=0514;suc=0514
+cp;0516;age=5.1;cf=0517;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER RHA;NFKC_CF=0517;SB=UP;scf=0517;slc=0517;Upper
+cp;0517;age=5.1;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER RHA;stc=0516;suc=0516
+cp;0518;age=5.1;cf=0519;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER YAE;NFKC_CF=0519;SB=UP;scf=0519;slc=0519;Upper
+cp;0519;age=5.1;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER YAE;stc=0518;suc=0518
# Kurdish letters
-cp;051A;cf=051B;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER QA;NFKC_CF=051B;SB=UP;scf=051B;slc=051B;Upper
-cp;051B;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER QA;stc=051A;suc=051A
-cp;051C;cf=051D;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER WE;NFKC_CF=051D;SB=UP;scf=051D;slc=051D;Upper
-cp;051D;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER WE;stc=051C;suc=051C
+cp;051A;age=5.1;cf=051B;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER QA;NFKC_CF=051B;SB=UP;scf=051B;slc=051B;Upper
+cp;051B;age=5.1;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER QA;stc=051A;suc=051A
+cp;051C;age=5.1;cf=051D;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER WE;NFKC_CF=051D;SB=UP;scf=051D;slc=051D;Upper
+cp;051D;age=5.1;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER WE;stc=051C;suc=051C
# Aleut letters
-cp;051E;cf=051F;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER ALEUT KA;NFKC_CF=051F;SB=UP;scf=051F;slc=051F;Upper
-cp;051F;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER ALEUT KA;stc=051E;suc=051E
+cp;051E;age=5.1;cf=051F;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER ALEUT KA;NFKC_CF=051F;SB=UP;scf=051F;slc=051F;Upper
+cp;051F;age=5.1;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER ALEUT KA;stc=051E;suc=051E
# Chuvash letters
-cp;0520;cf=0521;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;NFKC_CF=0521;SB=UP;scf=0521;slc=0521;Upper
-cp;0521;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;stc=0520;suc=0520
-cp;0522;cf=0523;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;NFKC_CF=0523;SB=UP;scf=0523;slc=0523;Upper
-cp;0523;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;stc=0522;suc=0522
+cp;0520;age=5.1;cf=0521;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;NFKC_CF=0521;SB=UP;scf=0521;slc=0521;Upper
+cp;0521;age=5.1;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;stc=0520;suc=0520
+cp;0522;age=5.1;cf=0523;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;NFKC_CF=0523;SB=UP;scf=0523;slc=0523;Upper
+cp;0523;age=5.1;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;stc=0522;suc=0522
# Abkhaz letters
cp;0524;age=5.2;cf=0525;CWCF;CWKCF;CWL;gc=Lu;na=CYRILLIC CAPITAL LETTER PE WITH DESCENDER;NFKC_CF=0525;SB=UP;scf=0525;slc=0525;Upper
cp;0525;age=5.2;CWT;CWU;Lower;na=CYRILLIC SMALL LETTER PE WITH DESCENDER;stc=0524;suc=0524
@@ -2916,7 +2947,7 @@ cp;060A;age=5.1;-Alpha;bc=ET;gc=Po;-IDC;-IDS;jt=U;lb=PO;na=ARABIC-INDIC PER TEN
# Currency symbol
cp;060B;age=4.1;-Alpha;gc=Sc;-IDC;-IDS;jt=U;lb=PO;na=AFGHANI SIGN;SB=XX;WB=XX;-XIDC;-XIDS
# Punctuation
-cp;060C;-Alpha;bc=CS;gc=Po;-IDC;-IDS;jt=U;lb=IS;na=ARABIC COMMA;SB=SC;sc=Zyyy;scx=Arab Rohg Syrc Thaa Yezi;Term;WB=MN;-XIDC;-XIDS
+cp;060C;-Alpha;bc=CS;gc=Po;-IDC;-IDS;jt=U;lb=IS;na=ARABIC COMMA;SB=SC;sc=Zyyy;scx=Arab Nkoo Rohg Syrc Thaa Yezi;Term;WB=MN;-XIDC;-XIDS
cp;060D;age=4.0;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=IS;na=ARABIC DATE SEPARATOR;SB=SC;WB=MN;-XIDC;-XIDS
# Poetic marks
cp;060E;age=4.0;-Alpha;bc=ON;gc=So;-IDC;-IDS;jt=U;na=ARABIC POETIC VERSE SIGN;SB=XX;WB=XX;-XIDC;-XIDS
@@ -2937,13 +2968,13 @@ cp;0618;age=5.1;bc=NSM;ccc=30;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na
cp;0619;age=5.1;bc=NSM;ccc=31;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SMALL DAMMA;SB=EX;WB=Extend;-XIDS
cp;061A;age=5.1;bc=NSM;ccc=32;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SMALL KASRA;SB=EX;WB=Extend;-XIDS
# Punctuation
-cp;061B;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC SEMICOLON;SB=XX;sc=Zyyy;scx=Arab Rohg Syrc Thaa Yezi;Term;WB=XX;-XIDC;-XIDS
+cp;061B;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC SEMICOLON;SB=XX;sc=Zyyy;scx=Arab Nkoo Rohg Syrc Thaa Yezi;Term;WB=XX;-XIDC;-XIDS
# Format character
cp;061C;age=6.3;-Alpha;Bidi_C;CI;CWKCF;DI;gc=Cf;GCB=CN;-Gr_Base;-IDC;-IDS;jt=T;lb=CM;na=ARABIC LETTER MARK;Name_Alias=abbreviation=ALM;NFKC_CF=;SB=FO;scx=Arab Syrc Thaa;WB=FO;-XIDC;-XIDS
-unassigned;061D;bc=AL
# Punctuation
+cp;061D;age=14.0;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC END OF TEXT MARK;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
cp;061E;age=4.1;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC TRIPLE DOT PUNCTUATION MARK;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
-cp;061F;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC QUESTION MARK;SB=ST;sc=Zyyy;scx=Arab Rohg Syrc Thaa Yezi;STerm;Term;WB=XX;-XIDC;-XIDS
+cp;061F;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=EX;na=ARABIC QUESTION MARK;SB=ST;sc=Zyyy;scx=Adlm Arab Nkoo Rohg Syrc Thaa Yezi;STerm;Term;WB=XX;-XIDC;-XIDS
# Addition for Kashmiri
cp;0620;age=6.0;jg=Yeh;na=ARABIC LETTER KASHMIRI YEH
# Based on ISO 8859-6
@@ -2980,7 +3011,7 @@ cp;063D;age=5.1;jg=Farsi_Yeh;na=ARABIC LETTER FARSI YEH WITH INVERTED V
cp;063E;age=5.1;jg=Farsi_Yeh;na=ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE
cp;063F;age=5.1;jg=Farsi_Yeh;na=ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
# Based on ISO 8859-6
-cp;0640;CI;Ext;gc=Lm;jt=C;na=ARABIC TATWEEL;sc=Zyyy;scx=Adlm Arab Mand Mani Phlp Rohg Sogd Syrc
+cp;0640;CI;Ext;gc=Lm;jt=C;na=ARABIC TATWEEL;sc=Zyyy;scx=Adlm Arab Mand Mani Ougr Phlp Rohg Sogd Syrc
cp;0641;jg=Feh;na=ARABIC LETTER FEH
cp;0642;jg=Qaf;na=ARABIC LETTER QAF
cp;0643;jg=Kaf;na=ARABIC LETTER KAF
@@ -3041,12 +3072,14 @@ cp;0671;jg=Alef;jt=R;na=ARABIC LETTER ALEF WASLA
cp;0672;jg=Alef;jt=R;na=ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
# Deprecated letter
cp;0673;Dep;jg=Alef;jt=R;na=ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
-# Extended Arabic letters
+# High hamza
cp;0674;jt=U;na=ARABIC LETTER HIGH HAMZA
+# Digraphic letters for Kazakh
cp;0675;CWKCF;dm=0627 0674;dt=Com;jg=Alef;jt=R;na=ARABIC LETTER HIGH HAMZA ALEF;NFKC_CF=0627 0674;NFKC_QC=N;NFKD_QC=N
cp;0676;CWKCF;dm=0648 0674;dt=Com;jg=Waw;jt=R;na=ARABIC LETTER HIGH HAMZA WAW;NFKC_CF=0648 0674;NFKC_QC=N;NFKD_QC=N
cp;0677;CWKCF;dm=06C7 0674;dt=Com;jg=Waw;jt=R;na=ARABIC LETTER U WITH HAMZA ABOVE;NFKC_CF=06C7 0674;NFKC_QC=N;NFKD_QC=N
cp;0678;CWKCF;dm=064A 0674;dt=Com;jg=Yeh;na=ARABIC LETTER HIGH HAMZA YEH;NFKC_CF=064A 0674;NFKC_QC=N;NFKD_QC=N
+# Extended Arabic letters
cp;0679;jg=Beh;na=ARABIC LETTER TTEH
cp;067A;jg=Beh;na=ARABIC LETTER TTEHEH
cp;067B;jg=Beh;na=ARABIC LETTER BEEH
@@ -3595,114 +3628,176 @@ cp;0869;jg=Malayalam_Llla;jt=R;na=SYRIAC LETTER MALAYALAM LLLA
cp;086A;jg=Malayalam_Ssa;jt=R;na=SYRIAC LETTER MALAYALAM SSA
unassigned;086B..086F;bc=AL
-# No block
-unassigned;0870..089F;bc=R
-
-block;08A0..08FF;age=6.1;Alpha;bc=NSM;blk=Arabic_Ext_A;gc=Mn;GCB=EX;IDC;jt=T;lb=CM;SB=EX;sc=Arab;WB=Extend;XIDC
+block;0870..089F;age=14.0;Alpha;bc=AL;blk=Arabic_Ext_B;gc=Lo;Gr_Base;IDC;IDS;jt=R;lb=AL;SB=LE;sc=Arab;WB=LE;XIDC;XIDS
+# 0870..089F Arabic Extended-B
+# Additions for Quranic orthographies
+cp;0870;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED FATHA
+cp;0871;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA
+cp;0872;jg=Alef;na=ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE
+cp;0873;jg=Alef;na=ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE
+cp;0874;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED KASRA
+cp;0875;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA
+cp;0876;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE
+cp;0877;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT
+cp;0878;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT
+cp;0879;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW
+cp;087A;jg=Alef;na=ARABIC LETTER ALEF WITH DOT ABOVE
+cp;087B;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE
+cp;087C;jg=Alef;na=ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE
+cp;087D;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE
+cp;087E;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING
+cp;087F;jg=Alef;na=ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING
+cp;0880;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING
+cp;0881;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA
+cp;0882;jg=Alef;na=ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA
+cp;0883;jt=C;na=ARABIC TATWEEL WITH OVERSTRUCK HAMZA
+cp;0884;jt=C;na=ARABIC TATWEEL WITH OVERSTRUCK WAW
+cp;0885;jt=C;na=ARABIC TATWEEL WITH TWO DOTS BELOW
+cp;0886;jg=Thin_Yeh;jt=D;na=ARABIC LETTER THIN YEH
+cp;0887;jt=U;na=ARABIC BASELINE ROUND DOT
+cp;0888;-Alpha;CI;gc=Sk;-IDC;-IDS;jt=U;na=ARABIC RAISED ROUND DOT;SB=XX;WB=XX;-XIDC;-XIDS
+# Additions for Bosnian orthographies
+cp;0889;jg=Noon;jt=D;na=ARABIC LETTER NOON WITH INVERTED SMALL V
+cp;088A;jg=Hah;jt=D;na=ARABIC LETTER HAH WITH INVERTED SMALL V BELOW
+# Additions for Pegon orthographies
+cp;088B;jg=Tah;jt=D;na=ARABIC LETTER TAH WITH DOT BELOW
+cp;088C;jg=Tah;jt=D;na=ARABIC LETTER TAH WITH THREE DOTS BELOW
+cp;088D;jg=Gaf;jt=D;na=ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW
+# Abbreviation mark
+cp;088E;jg=Vertical_Tail;na=ARABIC VERTICAL TAIL
+unassigned;088F;bc=AL
+# Supertending currency symbols
+cp;0890;-Alpha;bc=AN;CI;gc=Cf;GCB=PP;-Gr_Base;-IDC;-IDS;jt=U;na=ARABIC POUND MARK ABOVE;PCM;SB=FO;WB=FO;-XIDC;-XIDS
+cp;0891;-Alpha;bc=AN;CI;gc=Cf;GCB=PP;-Gr_Base;-IDC;-IDS;jt=U;na=ARABIC PIASTRE MARK ABOVE;PCM;SB=FO;WB=FO;-XIDC;-XIDS
+unassigned;0892..0897;bc=AL
+# Additions for Quranic orthographies
+cp;0898;-Alpha;bc=NSM;ccc=230;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SMALL HIGH WORD AL-JUZ;SB=EX;WB=Extend;-XIDS
+cp;0899;-Alpha;bc=NSM;ccc=220;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SMALL LOW WORD ISHMAAM;SB=EX;WB=Extend;-XIDS
+cp;089A;-Alpha;bc=NSM;ccc=220;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SMALL LOW WORD IMAALA;SB=EX;WB=Extend;-XIDS
+cp;089B;-Alpha;bc=NSM;ccc=220;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SMALL LOW WORD TASHEEL;SB=EX;WB=Extend;-XIDS
+cp;089C;-Alpha;bc=NSM;ccc=230;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC MADDA WAAJIB;SB=EX;WB=Extend;-XIDS
+cp;089D;-Alpha;bc=NSM;ccc=230;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC SUPERSCRIPT ALEF MOKHASSAS;SB=EX;WB=Extend;-XIDS
+cp;089E;-Alpha;bc=NSM;ccc=230;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC DOUBLED MADDA;SB=EX;WB=Extend;-XIDS
+cp;089F;-Alpha;bc=NSM;ccc=230;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=ARABIC HALF MADDA OVER MADDA;SB=EX;WB=Extend;-XIDS
+
+block;08A0..08FF;age=6.1;Alpha;bc=NSM;blk=Arabic_Ext_A;ccc=230;gc=Mn;GCB=EX;Gr_Ext;IDC;jt=T;lb=CM;SB=EX;sc=Arab;WB=Extend;XIDC
# 08A0..08FF Arabic Extended-A
# Arabic letters for African languages
-cp;08A0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH SMALL V BELOW;SB=LE;WB=LE;XIDS
-cp;08A1;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH HAMZA ABOVE;SB=LE;WB=LE;XIDS
-cp;08A2;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH TWO DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08A3;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Tah;jt=D;lb=AL;na=ARABIC LETTER TAH WITH TWO DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08A4;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Feh;jt=D;lb=AL;na=ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08A5;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Qaf;jt=D;lb=AL;na=ARABIC LETTER QAF WITH DOT BELOW;SB=LE;WB=LE;XIDS
-cp;08A6;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Lam;jt=D;lb=AL;na=ARABIC LETTER LAM WITH DOUBLE BAR;SB=LE;WB=LE;XIDS
-cp;08A7;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Meem;jt=D;lb=AL;na=ARABIC LETTER MEEM WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08A8;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;SB=LE;WB=LE;XIDS
-cp;08A9;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;SB=LE;WB=LE;XIDS
+cp;08A0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH SMALL V BELOW;SB=LE;WB=LE;XIDS
+cp;08A1;age=7.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH HAMZA ABOVE;SB=LE;WB=LE;XIDS
+cp;08A2;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH TWO DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08A3;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Tah;jt=D;lb=AL;na=ARABIC LETTER TAH WITH TWO DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08A4;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Feh;jt=D;lb=AL;na=ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08A5;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Qaf;jt=D;lb=AL;na=ARABIC LETTER QAF WITH DOT BELOW;SB=LE;WB=LE;XIDS
+cp;08A6;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Lam;jt=D;lb=AL;na=ARABIC LETTER LAM WITH DOUBLE BAR;SB=LE;WB=LE;XIDS
+cp;08A7;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Meem;jt=D;lb=AL;na=ARABIC LETTER MEEM WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08A8;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;SB=LE;WB=LE;XIDS
+cp;08A9;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;SB=LE;WB=LE;XIDS
# Dependent consonants for Rohingya
-cp;08AA;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER REH WITH LOOP;SB=LE;WB=LE;XIDS
-cp;08AB;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Waw;jt=R;lb=AL;na=ARABIC LETTER WAW WITH DOT WITHIN;SB=LE;WB=LE;XIDS
-cp;08AC;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Rohingya_Yeh;jt=R;lb=AL;na=ARABIC LETTER ROHINGYA YEH;SB=LE;WB=LE;XIDS
+cp;08AA;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER REH WITH LOOP;SB=LE;WB=LE;XIDS
+cp;08AB;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Waw;jt=R;lb=AL;na=ARABIC LETTER WAW WITH DOT WITHIN;SB=LE;WB=LE;XIDS
+cp;08AC;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Rohingya_Yeh;jt=R;lb=AL;na=ARABIC LETTER ROHINGYA YEH;SB=LE;WB=LE;XIDS
# Arabic letters for European and Central Asian languages
-cp;08AD;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jt=U;lb=AL;na=ARABIC LETTER LOW ALEF;SB=LE;WB=LE;XIDS
-cp;08AE;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Dal;jt=R;lb=AL;na=ARABIC LETTER DAL WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
-cp;08AF;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Sad;jt=D;lb=AL;na=ARABIC LETTER SAD WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
-cp;08B0;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Gaf;jt=D;lb=AL;na=ARABIC LETTER GAF WITH INVERTED STROKE;SB=LE;WB=LE;XIDS
-cp;08B1;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Straight_Waw;jt=R;lb=AL;na=ARABIC LETTER STRAIGHT WAW;SB=LE;WB=LE;XIDS
+cp;08AD;age=7.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jt=U;lb=AL;na=ARABIC LETTER LOW ALEF;SB=LE;WB=LE;XIDS
+cp;08AE;age=7.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Dal;jt=R;lb=AL;na=ARABIC LETTER DAL WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
+cp;08AF;age=7.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Sad;jt=D;lb=AL;na=ARABIC LETTER SAD WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
+cp;08B0;age=7.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Gaf;jt=D;lb=AL;na=ARABIC LETTER GAF WITH INVERTED STROKE;SB=LE;WB=LE;XIDS
+cp;08B1;age=7.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Straight_Waw;jt=R;lb=AL;na=ARABIC LETTER STRAIGHT WAW;SB=LE;WB=LE;XIDS
# Arabic letter for Berber
-cp;08B2;age=7.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER ZAIN WITH INVERTED V ABOVE;SB=LE;WB=LE;XIDS
+cp;08B2;age=7.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER ZAIN WITH INVERTED V ABOVE;SB=LE;WB=LE;XIDS
# Arabic letters for Arwi
-cp;08B3;age=8.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Ain;jt=D;lb=AL;na=ARABIC LETTER AIN WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
-cp;08B4;age=8.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Kaf;jt=D;lb=AL;na=ARABIC LETTER KAF WITH DOT BELOW;SB=LE;WB=LE;XIDS
-unassigned;08B5;bc=AL
+cp;08B3;age=8.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Ain;jt=D;lb=AL;na=ARABIC LETTER AIN WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
+cp;08B4;age=8.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Kaf;jt=D;lb=AL;na=ARABIC LETTER KAF WITH DOT BELOW;SB=LE;WB=LE;XIDS
+# Early Arabic letter
+cp;08B5;age=14.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Qaf;jt=D;lb=AL;na=ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;SB=LE;WB=LE;XIDS
# Arabic letters for Bravanese
-cp;08B6;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH SMALL MEEM ABOVE;SB=LE;WB=LE;XIDS
-cp;08B7;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER PEH WITH SMALL MEEM ABOVE;SB=LE;WB=LE;XIDS
-cp;08B8;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TEH WITH SMALL TEH ABOVE;SB=LE;WB=LE;XIDS
-cp;08B9;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER REH WITH SMALL NOON ABOVE;SB=LE;WB=LE;XIDS
-cp;08BA;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;SB=LE;WB=LE;XIDS
+cp;08B6;age=9.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER BEH WITH SMALL MEEM ABOVE;SB=LE;WB=LE;XIDS
+cp;08B7;age=9.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER PEH WITH SMALL MEEM ABOVE;SB=LE;WB=LE;XIDS
+cp;08B8;age=9.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TEH WITH SMALL TEH ABOVE;SB=LE;WB=LE;XIDS
+cp;08B9;age=9.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Reh;jt=R;lb=AL;na=ARABIC LETTER REH WITH SMALL NOON ABOVE;SB=LE;WB=LE;XIDS
+cp;08BA;age=9.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Yeh;jt=D;lb=AL;na=ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;SB=LE;WB=LE;XIDS
# Arabic letters for Warsh orthography
-cp;08BB;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=African_Feh;jt=D;lb=AL;na=ARABIC LETTER AFRICAN FEH;SB=LE;WB=LE;XIDS
-cp;08BC;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=African_Qaf;jt=D;lb=AL;na=ARABIC LETTER AFRICAN QAF;SB=LE;WB=LE;XIDS
-cp;08BD;age=9.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=African_Noon;jt=D;lb=AL;na=ARABIC LETTER AFRICAN NOON;SB=LE;WB=LE;XIDS
+cp;08BB;age=9.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=African_Feh;jt=D;lb=AL;na=ARABIC LETTER AFRICAN FEH;SB=LE;WB=LE;XIDS
+cp;08BC;age=9.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=African_Qaf;jt=D;lb=AL;na=ARABIC LETTER AFRICAN QAF;SB=LE;WB=LE;XIDS
+cp;08BD;age=9.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=African_Noon;jt=D;lb=AL;na=ARABIC LETTER AFRICAN NOON;SB=LE;WB=LE;XIDS
# Arabic letters for Hindko
-cp;08BE;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER PEH WITH SMALL V;SB=LE;WB=LE;XIDS
-cp;08BF;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TEH WITH SMALL V;SB=LE;WB=LE;XIDS
-cp;08C0;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TTEH WITH SMALL V;SB=LE;WB=LE;XIDS
-cp;08C1;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER TCHEH WITH SMALL V;SB=LE;WB=LE;XIDS
-cp;08C2;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Gaf;jt=D;lb=AL;na=ARABIC LETTER KEHEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08BE;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER PEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08BF;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08C0;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Beh;jt=D;lb=AL;na=ARABIC LETTER TTEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08C1;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER TCHEH WITH SMALL V;SB=LE;WB=LE;XIDS
+cp;08C2;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Gaf;jt=D;lb=AL;na=ARABIC LETTER KEHEH WITH SMALL V;SB=LE;WB=LE;XIDS
# Arabic letters for Hausa, Wolof and other African orthographies
-cp;08C3;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Ain;jt=D;lb=AL;na=ARABIC LETTER GHAIN WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08C4;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=African_Qaf;jt=D;lb=AL;na=ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08C5;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
-cp;08C6;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
+cp;08C3;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Ain;jt=D;lb=AL;na=ARABIC LETTER GHAIN WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08C4;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=African_Qaf;jt=D;lb=AL;na=ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08C5;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH THREE DOTS ABOVE;SB=LE;WB=LE;XIDS
+cp;08C6;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Hah;jt=D;lb=AL;na=ARABIC LETTER JEEM WITH THREE DOTS BELOW;SB=LE;WB=LE;XIDS
# Arabic letter for Punjabi
-cp;08C7;age=13.0;bc=AL;gc=Lo;GCB=XX;Gr_Base;IDS;jg=Lam;jt=D;lb=AL;na=ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;SB=LE;WB=LE;XIDS
-unassigned;08C8..08D2;bc=AL
+cp;08C7;age=13.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Lam;jt=D;lb=AL;na=ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;SB=LE;WB=LE;XIDS
+# Arabic letter for Balti
+cp;08C8;age=14.0;bc=AL;ccc=0;gc=Lo;GCB=XX;Gr_Base;-Gr_Ext;IDS;jg=Gaf;jt=D;lb=AL;na=ARABIC LETTER GRAF;SB=LE;WB=LE;XIDS
+# Additions for Quranic orthographies
+cp;08C9;age=14.0;bc=AL;ccc=0;CI;Dia;gc=Lm;GCB=XX;Gr_Base;-Gr_Ext;IDS;jt=U;lb=AL;na=ARABIC SMALL FARSI YEH;SB=LE;WB=LE;XIDS
+cp;08CA;age=14.0;-Alpha;CI;Dia;na=ARABIC SMALL HIGH FARSI YEH
+cp;08CB;age=14.0;-Alpha;CI;Dia;na=ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW
+cp;08CC;age=14.0;-Alpha;CI;Dia;na=ARABIC SMALL HIGH WORD SAH
+cp;08CD;age=14.0;-Alpha;CI;Dia;na=ARABIC SMALL HIGH ZAH
+cp;08CE;age=14.0;-Alpha;CI;Dia;na=ARABIC LARGE ROUND DOT ABOVE
+cp;08CF;age=14.0;-Alpha;ccc=220;CI;Dia;na=ARABIC LARGE ROUND DOT BELOW
+cp;08D0;age=14.0;-Alpha;ccc=220;CI;Dia;na=ARABIC SUKUN BELOW
+cp;08D1;age=14.0;-Alpha;ccc=220;CI;Dia;na=ARABIC LARGE CIRCLE BELOW
+cp;08D2;age=14.0;-Alpha;ccc=220;CI;Dia;na=ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW
# Quranic annotation signs
-cp;08D3;age=11.0;-Alpha;ccc=220;CI;Gr_Ext;na=ARABIC SMALL LOW WAW
-cp;08D4;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD AR-RUB
-cp;08D5;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH SAD
-cp;08D6;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH AIN
-cp;08D7;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH QAF
-cp;08D8;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH NOON WITH KASRA
-cp;08D9;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL LOW NOON WITH KASRA
-cp;08DA;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD ATH-THALATHA
-cp;08DB;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD AS-SAJDA
-cp;08DC;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD AN-NISF
-cp;08DD;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD SAKTA
-cp;08DE;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD QIF
-cp;08DF;age=9.0;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH WORD WAQFA
-cp;08E0;age=9.0;-Alpha;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH FOOTNOTE MARKER
-cp;08E1;age=9.0;-Alpha;ccc=230;CI;Gr_Ext;na=ARABIC SMALL HIGH SIGN SAFHA
-cp;08E2;age=9.0;-Alpha;bc=AN;CI;gc=Cf;GCB=PP;-IDC;jt=U;lb=AL;na=ARABIC DISPUTED END OF AYAH;PCM;SB=FO;sc=Zyyy;WB=FO;-XIDC
+cp;08D3;age=11.0;-Alpha;ccc=220;CI;na=ARABIC SMALL LOW WAW
+cp;08D4;age=9.0;CI;na=ARABIC SMALL HIGH WORD AR-RUB
+cp;08D5;age=9.0;CI;na=ARABIC SMALL HIGH SAD
+cp;08D6;age=9.0;CI;na=ARABIC SMALL HIGH AIN
+cp;08D7;age=9.0;CI;na=ARABIC SMALL HIGH QAF
+cp;08D8;age=9.0;CI;na=ARABIC SMALL HIGH NOON WITH KASRA
+cp;08D9;age=9.0;CI;na=ARABIC SMALL LOW NOON WITH KASRA
+cp;08DA;age=9.0;CI;na=ARABIC SMALL HIGH WORD ATH-THALATHA
+cp;08DB;age=9.0;CI;na=ARABIC SMALL HIGH WORD AS-SAJDA
+cp;08DC;age=9.0;CI;na=ARABIC SMALL HIGH WORD AN-NISF
+cp;08DD;age=9.0;CI;na=ARABIC SMALL HIGH WORD SAKTA
+cp;08DE;age=9.0;CI;na=ARABIC SMALL HIGH WORD QIF
+cp;08DF;age=9.0;CI;na=ARABIC SMALL HIGH WORD WAQFA
+cp;08E0;age=9.0;-Alpha;CI;na=ARABIC SMALL HIGH FOOTNOTE MARKER
+cp;08E1;age=9.0;-Alpha;CI;na=ARABIC SMALL HIGH SIGN SAFHA
+cp;08E2;age=9.0;-Alpha;bc=AN;ccc=0;CI;gc=Cf;GCB=PP;-Gr_Ext;-IDC;jt=U;lb=AL;na=ARABIC DISPUTED END OF AYAH;PCM;SB=FO;sc=Zyyy;WB=FO;-XIDC
# Extended vowel sign for Arwi
-cp;08E3;age=8.0;ccc=220;CI;Dia;Gr_Ext;na=ARABIC TURNED DAMMA BELOW
+cp;08E3;age=8.0;ccc=220;CI;Dia;na=ARABIC TURNED DAMMA BELOW
# Extended vowel signs for Rohingya
-cp;08E4;ccc=230;CI;Dia;Gr_Ext;na=ARABIC CURLY FATHA
-cp;08E5;ccc=230;CI;Dia;Gr_Ext;na=ARABIC CURLY DAMMA
-cp;08E6;ccc=220;CI;Dia;Gr_Ext;na=ARABIC CURLY KASRA
-cp;08E7;ccc=230;CI;Dia;Gr_Ext;na=ARABIC CURLY FATHATAN
-cp;08E8;ccc=230;CI;Dia;Gr_Ext;na=ARABIC CURLY DAMMATAN
-cp;08E9;ccc=220;CI;Dia;Gr_Ext;na=ARABIC CURLY KASRATAN
+cp;08E4;CI;Dia;na=ARABIC CURLY FATHA
+cp;08E5;CI;Dia;na=ARABIC CURLY DAMMA
+cp;08E6;ccc=220;CI;Dia;na=ARABIC CURLY KASRA
+cp;08E7;CI;Dia;na=ARABIC CURLY FATHATAN
+cp;08E8;CI;Dia;na=ARABIC CURLY DAMMATAN
+cp;08E9;ccc=220;CI;Dia;na=ARABIC CURLY KASRATAN
# Tone marks for Rohingya
-cp;08EA;-Alpha;ccc=230;CI;Dia;Gr_Ext;na=ARABIC TONE ONE DOT ABOVE
-cp;08EB;-Alpha;ccc=230;CI;Dia;Gr_Ext;na=ARABIC TONE TWO DOTS ABOVE
-cp;08EC;-Alpha;ccc=230;CI;Dia;Gr_Ext;na=ARABIC TONE LOOP ABOVE
-cp;08ED;-Alpha;ccc=220;CI;Dia;Gr_Ext;na=ARABIC TONE ONE DOT BELOW
-cp;08EE;-Alpha;ccc=220;CI;Dia;Gr_Ext;na=ARABIC TONE TWO DOTS BELOW
-cp;08EF;-Alpha;ccc=220;CI;Dia;Gr_Ext;na=ARABIC TONE LOOP BELOW
+cp;08EA;-Alpha;CI;Dia;na=ARABIC TONE ONE DOT ABOVE
+cp;08EB;-Alpha;CI;Dia;na=ARABIC TONE TWO DOTS ABOVE
+cp;08EC;-Alpha;CI;Dia;na=ARABIC TONE LOOP ABOVE
+cp;08ED;-Alpha;ccc=220;CI;Dia;na=ARABIC TONE ONE DOT BELOW
+cp;08EE;-Alpha;ccc=220;CI;Dia;na=ARABIC TONE TWO DOTS BELOW
+cp;08EF;-Alpha;ccc=220;CI;Dia;na=ARABIC TONE LOOP BELOW
# Quranic annotation signs
-cp;08F0;ccc=27;CI;Dia;Gr_Ext;na=ARABIC OPEN FATHATAN
-cp;08F1;ccc=28;CI;Dia;Gr_Ext;na=ARABIC OPEN DAMMATAN
-cp;08F2;ccc=29;CI;Dia;Gr_Ext;na=ARABIC OPEN KASRATAN
-cp;08F3;ccc=230;CI;Dia;Gr_Ext;na=ARABIC SMALL HIGH WAW
+cp;08F0;ccc=27;CI;Dia;na=ARABIC OPEN FATHATAN
+cp;08F1;ccc=28;CI;Dia;na=ARABIC OPEN DAMMATAN
+cp;08F2;ccc=29;CI;Dia;na=ARABIC OPEN KASRATAN
+cp;08F3;CI;Dia;na=ARABIC SMALL HIGH WAW
# Extended vowel signs for African languages
-cp;08F4;ccc=230;CI;Dia;Gr_Ext;na=ARABIC FATHA WITH RING
-cp;08F5;ccc=230;CI;Dia;Gr_Ext;na=ARABIC FATHA WITH DOT ABOVE
-cp;08F6;ccc=220;CI;Dia;Gr_Ext;na=ARABIC KASRA WITH DOT BELOW
-cp;08F7;ccc=230;CI;Dia;Gr_Ext;na=ARABIC LEFT ARROWHEAD ABOVE
-cp;08F8;ccc=230;CI;Dia;Gr_Ext;na=ARABIC RIGHT ARROWHEAD ABOVE
-cp;08F9;ccc=220;CI;Dia;Gr_Ext;na=ARABIC LEFT ARROWHEAD BELOW
-cp;08FA;ccc=220;CI;Dia;Gr_Ext;na=ARABIC RIGHT ARROWHEAD BELOW
-cp;08FB;ccc=230;CI;Dia;Gr_Ext;na=ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
-cp;08FC;ccc=230;CI;Dia;Gr_Ext;na=ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
-cp;08FD;ccc=230;CI;Dia;Gr_Ext;na=ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
+cp;08F4;CI;Dia;na=ARABIC FATHA WITH RING
+cp;08F5;CI;Dia;na=ARABIC FATHA WITH DOT ABOVE
+cp;08F6;ccc=220;CI;Dia;na=ARABIC KASRA WITH DOT BELOW
+cp;08F7;CI;Dia;na=ARABIC LEFT ARROWHEAD ABOVE
+cp;08F8;CI;Dia;na=ARABIC RIGHT ARROWHEAD ABOVE
+cp;08F9;ccc=220;CI;Dia;na=ARABIC LEFT ARROWHEAD BELOW
+cp;08FA;ccc=220;CI;Dia;na=ARABIC RIGHT ARROWHEAD BELOW
+cp;08FB;CI;Dia;na=ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
+cp;08FC;CI;Dia;na=ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
+cp;08FD;CI;Dia;na=ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
# Extended vowel signs
-cp;08FE;ccc=230;CI;Dia;Gr_Ext;na=ARABIC DAMMA WITH DOT
-cp;08FF;age=7.0;ccc=230;CI;Gr_Ext;na=ARABIC MARK SIDEWAYS NOON GHUNNA
+cp;08FE;CI;Dia;na=ARABIC DAMMA WITH DOT
+cp;08FF;age=7.0;CI;na=ARABIC MARK SIDEWAYS NOON GHUNNA
block;0900..097F;age=1.1;Alpha;blk=Devanagari;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Deva;WB=LE;XIDC;XIDS
# 0900..097F Devanagari
@@ -4523,7 +4618,9 @@ cp;0C36;na=TELUGU LETTER SHA
cp;0C37;na=TELUGU LETTER SSA
cp;0C38;na=TELUGU LETTER SA
cp;0C39;na=TELUGU LETTER HA
-unassigned;0C3A..0C3C
+unassigned;0C3A..0C3B
+# Sign
+cp;0C3C;age=14.0;-Alpha;bc=NSM;ccc=7;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Nukta;jt=T;lb=CM;na=TELUGU SIGN NUKTA;SB=EX;WB=Extend;-XIDS
# Addition for Sanskrit
cp;0C3D;age=5.1;InSC=Avagraha;na=TELUGU SIGN AVAGRAHA
# Dependent vowel signs
@@ -4553,7 +4650,10 @@ unassigned;0C57
cp;0C58;age=5.1;na=TELUGU LETTER TSA
cp;0C59;age=5.1;na=TELUGU LETTER DZA
cp;0C5A;age=8.0;na=TELUGU LETTER RRRA
-unassigned;0C5B..0C5F
+unassigned;0C5B..0C5C
+# Consonant
+cp;0C5D;age=14.0;InSC=Consonant_Dead;na=TELUGU LETTER NAKAARA POLLU
+unassigned;0C5E..0C5F
# Additional vowels for Sanskrit
cp;0C60;InSC=Vowel_Independent;na=TELUGU LETTER VOCALIC RR
cp;0C61;InSC=Vowel_Independent;na=TELUGU LETTER VOCALIC LL
@@ -4675,8 +4775,9 @@ unassigned;0CCE..0CD4
# Various signs
cp;0CD5;gc=Mc;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=KANNADA LENGTH MARK;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend;-XIDS
cp;0CD6;gc=Mc;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Right;InSC=Vowel_Dependent;lb=CM;na=KANNADA AI LENGTH MARK;NFC_QC=M;NFKC_QC=M;SB=EX;WB=Extend;-XIDS
-unassigned;0CD7..0CDD
+unassigned;0CD7..0CDC
# Additional consonants
+cp;0CDD;age=14.0;InSC=Consonant_Dead;na=KANNADA LETTER NAKAARA POLLU
cp;0CDE;na=KANNADA LETTER FA;Name_Alias=correction=KANNADA LETTER LLLA
unassigned;0CDF
# Additional vowels for Sanskrit
@@ -6372,7 +6473,7 @@ unassigned;137D..137F
block;1380..139F;age=4.1;Alpha;blk=Ethiopic_Sup;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Ethi;WB=LE;XIDC;XIDS
# 1380..139F Ethiopic Supplement
-# Syllables for Sebatbeit
+# Syllables for Gurage
cp;1380;na=ETHIOPIC SYLLABLE SEBATBEIT MWA
cp;1381;na=ETHIOPIC SYLLABLE MWI
cp;1382;na=ETHIOPIC SYLLABLE MWEE
@@ -6959,6 +7060,7 @@ cp;15C0;na=CANADIAN SYLLABICS SAYISI HE
cp;15C1;na=CANADIAN SYLLABICS SAYISI HI
cp;15C2;na=CANADIAN SYLLABICS SAYISI HO
cp;15C3;na=CANADIAN SYLLABICS SAYISI HA
+# Syllables for Carrier
cp;15C4;na=CANADIAN SYLLABICS CARRIER GHU
cp;15C5;na=CANADIAN SYLLABICS CARRIER GHO
cp;15C6;na=CANADIAN SYLLABICS CARRIER GHE
@@ -7303,7 +7405,7 @@ cp;1709;na=TAGALOG LETTER PA
cp;170A;na=TAGALOG LETTER BA
cp;170B;na=TAGALOG LETTER MA
cp;170C;na=TAGALOG LETTER YA
-unassigned;170D
+cp;170D;age=14.0;na=TAGALOG LETTER RA
cp;170E;na=TAGALOG LETTER LA
cp;170F;na=TAGALOG LETTER WA
cp;1710;na=TAGALOG LETTER SA
@@ -7311,9 +7413,12 @@ cp;1711;na=TAGALOG LETTER HA
# Dependent vowel signs
cp;1712;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=TAGALOG VOWEL SIGN I;SB=EX;WB=Extend;-XIDS
cp;1713;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=TAGALOG VOWEL SIGN U;SB=EX;WB=Extend;-XIDS
-# Virama
-cp;1714;-Alpha;bc=NSM;ccc=9;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InPC=Bottom;InSC=Pure_Killer;jt=T;lb=CM;na=TAGALOG SIGN VIRAMA;SB=EX;WB=Extend;-XIDS
-unassigned;1715..171F
+# Viramas
+cp;1714;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InPC=Bottom;InSC=Pure_Killer;jt=T;lb=CM;na=TAGALOG SIGN VIRAMA;SB=EX;WB=Extend;-XIDS
+cp;1715;age=14.0;-Alpha;ccc=9;Dia;gc=Mc;GCB=SM;Gr_Link;-IDS;InPC=Right;InSC=Pure_Killer;lb=CM;na=TAGALOG SIGN PAMUDPOD;SB=EX;WB=Extend;-XIDS
+unassigned;1716..171E
+# Archaic letter
+cp;171F;age=14.0;na=TAGALOG LETTER ARCHAIC RA
block;1720..173F;age=3.2;Alpha;blk=Hanunoo;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Hano;WB=LE;XIDC;XIDS
# 1720..173F Hanunoo
@@ -7341,7 +7446,7 @@ cp;1731;na=HANUNOO LETTER HA
cp;1732;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=HANUNOO VOWEL SIGN I;SB=EX;WB=Extend;-XIDS
cp;1733;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=HANUNOO VOWEL SIGN U;SB=EX;WB=Extend;-XIDS
# Virama
-cp;1734;-Alpha;bc=NSM;ccc=9;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;-IDS;InPC=Bottom;InSC=Pure_Killer;jt=T;lb=CM;na=HANUNOO SIGN PAMUDPOD;SB=EX;WB=Extend;-XIDS
+cp;1734;-Alpha;ccc=9;gc=Mc;GCB=SM;Gr_Link;-IDS;InPC=Right;InSC=Pure_Killer;lb=CM;na=HANUNOO SIGN PAMUDPOD;SB=EX;WB=Extend;-XIDS
# Generic punctuation for Philippine scripts
cp;1735;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=PHILIPPINE SINGLE PUNCTUATION;SB=ST;sc=Zyyy;scx=Buhd Hano Tagb Tglg;STerm;Term;WB=XX;-XIDC;-XIDS
cp;1736;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=PHILIPPINE DOUBLE PUNCTUATION;SB=ST;sc=Zyyy;scx=Buhd Hano Tagb Tglg;STerm;Term;WB=XX;-XIDC;-XIDS
@@ -7557,7 +7662,7 @@ cp;180B;-Alpha;bc=NSM;CI;CWKCF;DI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;n
cp;180C;-Alpha;bc=NSM;CI;CWKCF;DI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=MONGOLIAN FREE VARIATION SELECTOR TWO;Name_Alias=abbreviation=FVS2;NFKC_CF=;SB=EX;VS;WB=Extend;-XIDS
cp;180D;-Alpha;bc=NSM;CI;CWKCF;DI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=MONGOLIAN FREE VARIATION SELECTOR THREE;Name_Alias=abbreviation=FVS3;NFKC_CF=;SB=EX;VS;WB=Extend;-XIDS
cp;180E;-Alpha;bc=BN;CI;CWKCF;DI;gc=Cf;GCB=CN;-Gr_Base;-IDC;-IDS;jt=U;lb=GL;na=MONGOLIAN VOWEL SEPARATOR;Name_Alias=abbreviation=MVS;NFKC_CF=;SB=FO;WB=FO;-XIDC;-XIDS
-unassigned;180F
+cp;180F;age=14.0;-Alpha;bc=NSM;CI;CWKCF;DI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=MONGOLIAN FREE VARIATION SELECTOR FOUR;Name_Alias=abbreviation=FVS4;NFKC_CF=;SB=EX;VS;WB=Extend;-XIDS
# Digits
cp;1810;-Alpha;gc=Nd;-IDS;jt=U;lb=NU;na=MONGOLIAN DIGIT ZERO;nt=De;nv=0;SB=NU;WB=NU;-XIDS
cp;1811;-Alpha;gc=Nd;-IDS;jt=U;lb=NU;na=MONGOLIAN DIGIT ONE;nt=De;nv=1;SB=NU;WB=NU;-XIDS
@@ -8232,28 +8337,47 @@ cp;1AAC;-Alpha;gc=Po;-IDC;InSC=Other;na=TAI THAM SIGN HANG;SB=XX;-XIDC
cp;1AAD;-Alpha;gc=Po;-IDC;InSC=Other;na=TAI THAM SIGN CAANG;SB=XX;-XIDC
unassigned;1AAE..1AAF
-block;1AB0..1AFF;age=7.0;bc=NSM;blk=Diacriticals_Ext;ccc=220;CI;Dia;gc=Mn;GCB=EX;Gr_Ext;IDC;jt=T;lb=CM;SB=EX;sc=Zinh;WB=Extend;XIDC
+block;1AB0..1AFF;age=14.0;bc=NSM;blk=Diacriticals_Ext;ccc=230;CI;Dia;gc=Mn;GCB=EX;Gr_Ext;IDC;jt=T;lb=CM;SB=EX;sc=Zinh;WB=Extend;XIDC
# 1AB0..1AFF Combining Diacritical Marks Extended
-# Used for German dialectology
-cp;1AB0;ccc=230;na=COMBINING DOUBLED CIRCUMFLEX ACCENT
-cp;1AB1;ccc=230;na=COMBINING DIAERESIS-RING
-cp;1AB2;ccc=230;na=COMBINING INFINITY
-cp;1AB3;ccc=230;na=COMBINING DOWNWARDS ARROW
-cp;1AB4;ccc=230;na=COMBINING TRIPLE DOT
-cp;1AB5;na=COMBINING X-X BELOW
-cp;1AB6;na=COMBINING WIGGLY LINE BELOW
-cp;1AB7;na=COMBINING OPEN MARK BELOW
-cp;1AB8;na=COMBINING DOUBLE OPEN MARK BELOW
-cp;1AB9;na=COMBINING LIGHT CENTRALIZATION STROKE BELOW
-cp;1ABA;na=COMBINING STRONG CENTRALIZATION STROKE BELOW
-cp;1ABB;ccc=230;na=COMBINING PARENTHESES ABOVE
-cp;1ABC;ccc=230;na=COMBINING DOUBLE PARENTHESES ABOVE
-cp;1ABD;na=COMBINING PARENTHESES BELOW
-cp;1ABE;ccc=0;-Dia;gc=Me;-IDC;na=COMBINING PARENTHESES OVERLAY;-XIDC
-# Used for Scots dialectology
-cp;1ABF;age=13.0;Alpha;-Dia;na=COMBINING LATIN SMALL LETTER W BELOW
-cp;1AC0;age=13.0;Alpha;-Dia;na=COMBINING LATIN SMALL LETTER TURNED W BELOW
-unassigned;1AC1..1AFF
+# Used in German dialectology
+cp;1AB0;age=7.0;na=COMBINING DOUBLED CIRCUMFLEX ACCENT
+cp;1AB1;age=7.0;na=COMBINING DIAERESIS-RING
+cp;1AB2;age=7.0;na=COMBINING INFINITY
+cp;1AB3;age=7.0;na=COMBINING DOWNWARDS ARROW
+cp;1AB4;age=7.0;na=COMBINING TRIPLE DOT
+cp;1AB5;age=7.0;ccc=220;na=COMBINING X-X BELOW
+cp;1AB6;age=7.0;ccc=220;na=COMBINING WIGGLY LINE BELOW
+cp;1AB7;age=7.0;ccc=220;na=COMBINING OPEN MARK BELOW
+cp;1AB8;age=7.0;ccc=220;na=COMBINING DOUBLE OPEN MARK BELOW
+cp;1AB9;age=7.0;ccc=220;na=COMBINING LIGHT CENTRALIZATION STROKE BELOW
+cp;1ABA;age=7.0;ccc=220;na=COMBINING STRONG CENTRALIZATION STROKE BELOW
+# Marks surrounding other diacritics or letters
+cp;1ABB;age=7.0;na=COMBINING PARENTHESES ABOVE
+cp;1ABC;age=7.0;na=COMBINING DOUBLE PARENTHESES ABOVE
+cp;1ABD;age=7.0;ccc=220;na=COMBINING PARENTHESES BELOW
+cp;1ABE;age=7.0;ccc=0;gc=Me;-IDC;na=COMBINING PARENTHESES OVERLAY;-XIDC
+# Used in Scots dialectology
+cp;1ABF;age=13.0;Alpha;ccc=220;-Dia;na=COMBINING LATIN SMALL LETTER W BELOW
+cp;1AC0;age=13.0;Alpha;ccc=220;-Dia;na=COMBINING LATIN SMALL LETTER TURNED W BELOW
+# Marks next to or surrounding other diacritics
+cp;1AC1;na=COMBINING LEFT PARENTHESIS ABOVE LEFT
+cp;1AC2;na=COMBINING RIGHT PARENTHESIS ABOVE RIGHT
+cp;1AC3;ccc=220;na=COMBINING LEFT PARENTHESIS BELOW LEFT
+cp;1AC4;ccc=220;na=COMBINING RIGHT PARENTHESIS BELOW RIGHT
+cp;1AC5;na=COMBINING SQUARE BRACKETS ABOVE
+# Phonetic sign
+cp;1AC6;na=COMBINING NUMBER SIGN ABOVE
+# Used in extended IPA
+cp;1AC7;na=COMBINING INVERTED DOUBLE ARCH ABOVE
+cp;1AC8;na=COMBINING PLUS SIGN ABOVE
+cp;1AC9;na=COMBINING DOUBLE PLUS SIGN ABOVE
+cp;1ACA;ccc=220;na=COMBINING DOUBLE PLUS SIGN BELOW
+# Used in Middle English Ormulum
+cp;1ACB;na=COMBINING TRIPLE ACUTE ACCENT
+cp;1ACC;Alpha;-Dia;na=COMBINING LATIN SMALL LETTER INSULAR G
+cp;1ACD;Alpha;-Dia;na=COMBINING LATIN SMALL LETTER INSULAR R
+cp;1ACE;Alpha;-Dia;na=COMBINING LATIN SMALL LETTER INSULAR T
+unassigned;1ACF..1AFF
block;1B00..1B7F;age=5.0;Alpha;blk=Balinese;gc=Lo;Gr_Base;IDC;InSC=Consonant;lb=AL;SB=LE;sc=Bali;WB=LE;XIDC
# 1B00..1B7F Balinese
@@ -8261,7 +8385,7 @@ block;1B00..1B7F;age=5.0;Alpha;blk=Balinese;gc=Lo;Gr_Base;IDC;InSC=Consonant;lb=
cp;1B00;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=BALINESE SIGN ULU RICEM;SB=EX;WB=Extend
cp;1B01;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=BALINESE SIGN ULU CANDRA;SB=EX;WB=Extend
cp;1B02;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=BALINESE SIGN CECEK;SB=EX;WB=Extend
-cp;1B03;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Consonant_Succeeding_Repha;jt=T;lb=CM;na=BALINESE SIGN SURANG;SB=EX;WB=Extend
+cp;1B03;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Consonant_Final;jt=T;lb=CM;na=BALINESE SIGN SURANG;SB=EX;WB=Extend
cp;1B04;gc=Mc;GCB=SM;InPC=Right;InSC=Visarga;lb=CM;na=BALINESE SIGN BISAH;SB=EX;WB=Extend
# Independent vowels
cp;1B05;IDS;InSC=Vowel_Independent;na=BALINESE LETTER AKARA;XIDS
@@ -8340,7 +8464,8 @@ cp;1B48;IDS;na=BALINESE LETTER EF SASAK;XIDS
cp;1B49;IDS;na=BALINESE LETTER VE SASAK;XIDS
cp;1B4A;IDS;na=BALINESE LETTER ZAL SASAK;XIDS
cp;1B4B;IDS;na=BALINESE LETTER ASYURA SASAK;XIDS
-unassigned;1B4C..1B4F
+cp;1B4C;age=14.0;IDS;na=BALINESE LETTER ARCHAIC JNYA;XIDS
+unassigned;1B4D..1B4F
# Digits
cp;1B50;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BALINESE DIGIT ZERO;nt=De;nv=0;SB=NU;WB=NU
cp;1B51;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BALINESE DIGIT ONE;nt=De;nv=1;SB=NU;WB=NU
@@ -8391,13 +8516,16 @@ cp;1B79;-Alpha;gc=So;-IDC;InSC=Other;na=BALINESE MUSICAL SYMBOL LEFT-HAND OPEN P
cp;1B7A;-Alpha;gc=So;-IDC;InSC=Other;na=BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;SB=XX;WB=XX;-XIDC
cp;1B7B;-Alpha;gc=So;-IDC;InSC=Other;na=BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;SB=XX;WB=XX;-XIDC
cp;1B7C;-Alpha;gc=So;-IDC;InSC=Other;na=BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;SB=XX;WB=XX;-XIDC
-unassigned;1B7D..1B7F
+# Punctuation
+cp;1B7D;age=14.0;-Alpha;gc=Po;-IDC;InSC=Other;lb=BA;na=BALINESE PANTI LANTANG;SB=ST;STerm;Term;WB=XX;-XIDC
+cp;1B7E;age=14.0;-Alpha;gc=Po;-IDC;InSC=Other;lb=BA;na=BALINESE PAMADA LANTANG;SB=ST;STerm;Term;WB=XX;-XIDC
+unassigned;1B7F
block;1B80..1BBF;age=5.1;Alpha;blk=Sundanese;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Sund;WB=LE;XIDC;XIDS
# 1B80..1BBF Sundanese
# Various signs
cp;1B80;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=SUNDANESE SIGN PANYECEK;SB=EX;WB=Extend;-XIDS
-cp;1B81;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Consonant_Succeeding_Repha;jt=T;lb=CM;na=SUNDANESE SIGN PANGLAYAR;SB=EX;WB=Extend;-XIDS
+cp;1B81;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Top;InSC=Consonant_Final;jt=T;lb=CM;na=SUNDANESE SIGN PANGLAYAR;SB=EX;WB=Extend;-XIDS
cp;1B82;gc=Mc;GCB=SM;-IDS;InPC=Right;InSC=Visarga;lb=CM;na=SUNDANESE SIGN PANGWISAD;SB=EX;WB=Extend;-XIDS
# Vowels
cp;1B83;InSC=Vowel_Independent;na=SUNDANESE LETTER A
@@ -9105,10 +9233,10 @@ cp;1DF7;age=10.0;ccc=228;Dia;na=COMBINING KAVYKA ABOVE LEFT
# Miscellaneous marks
cp;1DF8;age=10.0;ccc=228;Dia;na=COMBINING DOT ABOVE LEFT;scx=Cyrl Syrc
cp;1DF9;age=10.0;ccc=220;Dia;na=COMBINING WIDE INVERTED BRIDGE BELOW
-unassigned;1DFA
-cp;1DFB;age=9.0;InPC=Top;InSC=Syllable_Modifier;na=COMBINING DELETION MARK
+cp;1DFA;age=14.0;ccc=218;Dia;na=COMBINING DOT BELOW LEFT;scx=Syrc
+cp;1DFB;age=9.0;Dia;InPC=Top;InSC=Syllable_Modifier;na=COMBINING DELETION MARK
# Double diacritic mark for UPA
-cp;1DFC;age=6.0;ccc=233;na=COMBINING DOUBLE INVERTED BREVE BELOW
+cp;1DFC;age=6.0;ccc=233;Dia;na=COMBINING DOUBLE INVERTED BREVE BELOW
# Miscellaneous mark
cp;1DFD;age=5.2;ccc=220;Dia;na=COMBINING ALMOST EQUAL TO BELOW
# Additional marks for UPA
@@ -9860,7 +9988,8 @@ cp;20BC;age=7.0;na=MANAT SIGN
cp;20BD;age=7.0;na=RUBLE SIGN
cp;20BE;age=8.0;lb=PO;na=LARI SIGN
cp;20BF;age=10.0;na=BITCOIN SIGN
-unassigned;20C0..20CF;bc=ET;lb=PR
+cp;20C0;age=14.0;lb=PO;na=SOM SIGN
+unassigned;20C1..20CF;bc=ET;lb=PR
block;20D0..20FF;age=1.1;bc=NSM;blk=Diacriticals_For_Symbols;ccc=230;CI;gc=Mn;GCB=EX;Gr_Ext;IDC;jt=T;lb=CM;Math;SB=EX;sc=Zinh;WB=Extend;XIDC
# 20D0..20FF Combining Diacritical Marks for Symbols
@@ -13101,7 +13230,7 @@ cp;2C2B;cf=2C5B;CWCF;CWKCF;CWL;gc=Lu;na=GLAGOLITIC CAPITAL LETTER IZHITSA;NFKC_C
cp;2C2C;cf=2C5C;CWCF;CWKCF;CWL;gc=Lu;na=GLAGOLITIC CAPITAL LETTER SHTAPIC;NFKC_CF=2C5C;SB=UP;scf=2C5C;slc=2C5C;Upper
cp;2C2D;cf=2C5D;CWCF;CWKCF;CWL;gc=Lu;na=GLAGOLITIC CAPITAL LETTER TROKUTASTI A;NFKC_CF=2C5D;SB=UP;scf=2C5D;slc=2C5D;Upper
cp;2C2E;cf=2C5E;CWCF;CWKCF;CWL;gc=Lu;na=GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;NFKC_CF=2C5E;SB=UP;scf=2C5E;slc=2C5E;Upper
-unassigned;2C2F
+cp;2C2F;age=14.0;cf=2C5F;CWCF;CWKCF;CWL;gc=Lu;na=GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;NFKC_CF=2C5F;SB=UP;scf=2C5F;slc=2C5F;Upper
# Small letters
cp;2C30;CWT;CWU;Lower;na=GLAGOLITIC SMALL LETTER AZU;stc=2C00;suc=2C00
cp;2C31;CWT;CWU;Lower;na=GLAGOLITIC SMALL LETTER BUKY;stc=2C01;suc=2C01
@@ -13150,7 +13279,7 @@ cp;2C5B;CWT;CWU;Lower;na=GLAGOLITIC SMALL LETTER IZHITSA;stc=2C2B;suc=2C2B
cp;2C5C;CWT;CWU;Lower;na=GLAGOLITIC SMALL LETTER SHTAPIC;stc=2C2C;suc=2C2C
cp;2C5D;CWT;CWU;Lower;na=GLAGOLITIC SMALL LETTER TROKUTASTI A;stc=2C2D;suc=2C2D
cp;2C5E;CWT;CWU;Lower;na=GLAGOLITIC SMALL LETTER LATINATE MYSLITE;stc=2C2E;suc=2C2E
-unassigned;2C5F
+cp;2C5F;age=14.0;CWT;CWU;Lower;na=GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;stc=2C2F;suc=2C2F
block;2C60..2C7F;age=5.0;Alpha;blk=Latin_Ext_C;Cased;CWCM;gc=Ll;Gr_Base;IDC;IDS;lb=AL;SB=LO;sc=Latn;WB=LE;XIDC;XIDS
# 2C60..2C7F Latin Extended-C
@@ -13162,7 +13291,7 @@ cp;2C63;cf=1D7D;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER P WITH STROKE;NFKC_
cp;2C64;cf=027D;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER R WITH TAIL;NFKC_CF=027D;SB=UP;scf=027D;slc=027D;Upper
cp;2C65;CWT;CWU;Lower;na=LATIN SMALL LETTER A WITH STROKE;stc=023A;suc=023A
cp;2C66;CWT;CWU;Lower;na=LATIN SMALL LETTER T WITH DIAGONAL STROKE;stc=023E;suc=023E
-# Additions for Uighur
+# Additions for Uyghur
cp;2C67;cf=2C68;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER H WITH DESCENDER;NFKC_CF=2C68;SB=UP;scf=2C68;slc=2C68;Upper
cp;2C68;CWT;CWU;Lower;na=LATIN SMALL LETTER H WITH DESCENDER;stc=2C67;suc=2C67
cp;2C69;cf=2C6A;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER K WITH DESCENDER;NFKC_CF=2C6A;SB=UP;scf=2C6A;slc=2C6A;Upper
@@ -13508,7 +13637,7 @@ cp;2DBC;na=ETHIOPIC SYLLABLE CCHEE
cp;2DBD;na=ETHIOPIC SYLLABLE CCHE
cp;2DBE;na=ETHIOPIC SYLLABLE CCHO
unassigned;2DBF
-# Syllables for Sebatbeit
+# Syllables for Gurage
cp;2DC0;na=ETHIOPIC SYLLABLE QYA
cp;2DC1;na=ETHIOPIC SYLLABLE QYU
cp;2DC2;na=ETHIOPIC SYLLABLE QYI
@@ -13685,7 +13814,21 @@ cp;2E4F;age=12.0;na=CORNISH VERSE DIVIDER;Term
cp;2E50;age=13.0;gc=So;lb=AL;na=CROSS PATTY WITH RIGHT CROSSBAR;vo=U
cp;2E51;age=13.0;gc=So;lb=AL;na=CROSS PATTY WITH LEFT CROSSBAR;vo=U
cp;2E52;age=13.0;lb=AL;na=TIRONIAN SIGN CAPITAL ET
-unassigned;2E53..2E7F;Pat_Syn
+cp;2E53;age=14.0;lb=EX;na=MEDIEVAL EXCLAMATION MARK;SB=ST;STerm;Term
+cp;2E54;age=14.0;lb=EX;na=MEDIEVAL QUESTION MARK;SB=ST;STerm;Term
+# Brackets
+cp;2E55;age=14.0;Bidi_M;bmg=2E56;bpb=2E56;bpt=o;gc=Ps;lb=OP;na=LEFT SQUARE BRACKET WITH STROKE;SB=CL
+cp;2E56;age=14.0;Bidi_M;bmg=2E55;bpb=2E55;bpt=c;gc=Pe;lb=CL;na=RIGHT SQUARE BRACKET WITH STROKE;SB=CL
+cp;2E57;age=14.0;Bidi_M;bmg=2E58;bpb=2E58;bpt=o;gc=Ps;lb=OP;na=LEFT SQUARE BRACKET WITH DOUBLE STROKE;SB=CL
+cp;2E58;age=14.0;Bidi_M;bmg=2E57;bpb=2E57;bpt=c;gc=Pe;lb=CL;na=RIGHT SQUARE BRACKET WITH DOUBLE STROKE;SB=CL
+# Parentheses top and bottom halves
+cp;2E59;age=14.0;Bidi_M;bmg=2E5A;bpb=2E5A;bpt=o;gc=Ps;lb=OP;na=TOP HALF LEFT PARENTHESIS;SB=CL
+cp;2E5A;age=14.0;Bidi_M;bmg=2E59;bpb=2E59;bpt=c;gc=Pe;lb=CL;na=TOP HALF RIGHT PARENTHESIS;SB=CL
+cp;2E5B;age=14.0;Bidi_M;bmg=2E5C;bpb=2E5C;bpt=o;gc=Ps;lb=OP;na=BOTTOM HALF LEFT PARENTHESIS;SB=CL
+cp;2E5C;age=14.0;Bidi_M;bmg=2E5B;bpb=2E5B;bpt=c;gc=Pe;lb=CL;na=BOTTOM HALF RIGHT PARENTHESIS;SB=CL
+# Oblique hyphen
+cp;2E5D;age=14.0;Dash;gc=Pd;na=OBLIQUE HYPHEN
+unassigned;2E5E..2E7F;Pat_Syn
block;2E80..2EFF;age=3.0;bc=ON;blk=CJK_Radicals_Sup;ea=W;gc=So;Gr_Base;lb=ID;Radical;sc=Hani;vo=U
# 2E80..2EFF CJK Radicals Supplement
@@ -15237,8 +15380,8 @@ cp;4DFE;na=HEXAGRAM FOR AFTER COMPLETION
cp;4DFF;na=HEXAGRAM FOR BEFORE COMPLETION
block;4E00..9FFF;age=1.1;Alpha;blk=CJK;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
-# 4E00..9FFC CJK Unified Ideographs
-algnamesrange;4E00..9FFC;han;CJK UNIFIED IDEOGRAPH-
+# 4E00..9FFF CJK Unified Ideographs
+algnamesrange;4E00..9FFF;han;CJK UNIFIED IDEOGRAPH-
cp;4E00;nt=Nu;nv=1
cp;4E03;nt=Nu;nv=7
cp;4E07;nt=Nu;nv=10000
@@ -15298,7 +15441,7 @@ cp;9FCD..9FD5;age=8.0
cp;9FD6..9FEA;age=10.0
cp;9FEB..9FEF;age=11.0
cp;9FF0..9FFC;age=13.0
-unassigned;9FFD..9FFF;ea=W;lb=ID;vo=U
+cp;9FFD..9FFF;age=14.0
block;A000..A48F;age=3.0;Alpha;blk=Yi_Syllables;ea=W;gc=Lo;Gr_Base;IDC;IDS;lb=ID;SB=LE;sc=Yiii;vo=U;WB=LE;XIDC;XIDS
# A000..A48F Yi Syllables
@@ -17326,7 +17469,7 @@ cp;A7B4;age=8.0;cf=A7B5;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER BETA;NFKC_C
cp;A7B5;age=8.0;CWT;CWU;Lower;na=LATIN SMALL LETTER BETA;stc=A7B4;suc=A7B4
cp;A7B6;age=8.0;cf=A7B7;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER OMEGA;NFKC_CF=A7B7;SB=UP;scf=A7B7;slc=A7B7;Upper
cp;A7B7;age=8.0;CWT;CWU;Lower;na=LATIN SMALL LETTER OMEGA;stc=A7B6;suc=A7B6
-# Letters for Mazahua (Mexico)
+# Letters for Mazahua (M\u00E9xico)
cp;A7B8;age=11.0;cf=A7B9;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER U WITH STROKE;NFKC_CF=A7B9;SB=UP;scf=A7B9;slc=A7B9;Upper
cp;A7B9;age=11.0;CWT;CWU;Lower;na=LATIN SMALL LETTER U WITH STROKE;stc=A7B8;suc=A7B8
# Letters for Ugaritic and Egyptological transliteration
@@ -17336,8 +17479,9 @@ cp;A7BC;age=12.0;cf=A7BD;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER GLOTTAL I;
cp;A7BD;age=12.0;CWT;CWU;Lower;na=LATIN SMALL LETTER GLOTTAL I;stc=A7BC;suc=A7BC
cp;A7BE;age=12.0;cf=A7BF;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER GLOTTAL U;NFKC_CF=A7BF;SB=UP;scf=A7BF;slc=A7BF;Upper
cp;A7BF;age=12.0;CWT;CWU;Lower;na=LATIN SMALL LETTER GLOTTAL U;stc=A7BE;suc=A7BE
-unassigned;A7C0..A7C1
-# Additional letters
+# Additional medieval letters
+cp;A7C0;age=14.0;cf=A7C1;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER OLD POLISH O;NFKC_CF=A7C1;SB=UP;scf=A7C1;slc=A7C1;Upper
+cp;A7C1;age=14.0;CWT;CWU;Lower;na=LATIN SMALL LETTER OLD POLISH O;stc=A7C0;suc=A7C0
cp;A7C2;age=12.0;cf=A7C3;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER ANGLICANA W;NFKC_CF=A7C3;SB=UP;scf=A7C3;slc=A7C3;Upper
cp;A7C3;age=12.0;CWT;CWU;Lower;na=LATIN SMALL LETTER ANGLICANA W;stc=A7C2;suc=A7C2
# Letters used in early Pinyin romanization
@@ -17349,7 +17493,25 @@ cp;A7C7;age=13.0;cf=A7C8;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER D WITH SHO
cp;A7C8;age=13.0;CWT;CWU;Lower;na=LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;stc=A7C7;suc=A7C7
cp;A7C9;age=13.0;cf=A7CA;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;NFKC_CF=A7CA;SB=UP;scf=A7CA;slc=A7CA;Upper
cp;A7CA;age=13.0;CWT;CWU;Lower;na=LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;stc=A7C9;suc=A7C9
-unassigned;A7CB..A7F4
+unassigned;A7CB..A7CF
+# Letters used in the Middle English Ormulum
+cp;A7D0;age=14.0;cf=A7D1;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER CLOSED INSULAR G;NFKC_CF=A7D1;SB=UP;scf=A7D1;slc=A7D1;Upper
+cp;A7D1;age=14.0;CWT;CWU;Lower;na=LATIN SMALL LETTER CLOSED INSULAR G;stc=A7D0;suc=A7D0
+unassigned;A7D2
+cp;A7D3;age=14.0;-CWCM;Lower;na=LATIN SMALL LETTER DOUBLE THORN
+unassigned;A7D4
+cp;A7D5;age=14.0;-CWCM;Lower;na=LATIN SMALL LETTER DOUBLE WYNN
+# Letters used in medieval palaeography
+cp;A7D6;age=14.0;cf=A7D7;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER MIDDLE SCOTS S;NFKC_CF=A7D7;SB=UP;scf=A7D7;slc=A7D7;Upper
+cp;A7D7;age=14.0;CWT;CWU;Lower;na=LATIN SMALL LETTER MIDDLE SCOTS S;stc=A7D6;suc=A7D6
+cp;A7D8;age=14.0;cf=A7D9;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER SIGMOID S;NFKC_CF=A7D9;SB=UP;scf=A7D9;slc=A7D9;Upper
+cp;A7D9;age=14.0;CWT;CWU;Lower;na=LATIN SMALL LETTER SIGMOID S;stc=A7D8;suc=A7D8
+unassigned;A7DA..A7F1
+# Modifier letters for Chatino (M\u00E9xico)
+cp;A7F2;age=14.0;-Cased;CI;-CWCM;CWKCF;dm=0043;dt=Sup;FC_NFKC=0063;gc=Lm;na=MODIFIER LETTER CAPITAL C;NFKC_CF=0063;NFKC_QC=N;NFKD_QC=N;SB=LE
+cp;A7F3;age=14.0;-Cased;CI;-CWCM;CWKCF;dm=0046;dt=Sup;FC_NFKC=0066;gc=Lm;na=MODIFIER LETTER CAPITAL F;NFKC_CF=0066;NFKC_QC=N;NFKD_QC=N;SB=LE
+# Modifier letter for Japanese phonemic transcription
+cp;A7F4;age=14.0;-Cased;CI;-CWCM;CWKCF;dm=0051;dt=Sup;FC_NFKC=0071;gc=Lm;na=MODIFIER LETTER CAPITAL Q;NFKC_CF=0071;NFKC_QC=N;NFKD_QC=N;SB=LE
# Ancient Gaulish and Celtic epigraphic letters
cp;A7F5;age=13.0;cf=A7F6;CWCF;CWKCF;CWL;gc=Lu;na=LATIN CAPITAL LETTER REVERSED HALF H;NFKC_CF=A7F6;SB=UP;scf=A7F6;slc=A7F6;Upper
cp;A7F6;age=13.0;CWT;CWU;Lower;na=LATIN SMALL LETTER REVERSED HALF H;stc=A7F5;suc=A7F5
@@ -17788,7 +17950,7 @@ block;A980..A9DF;age=5.2;Alpha;blk=Javanese;gc=Lo;Gr_Base;IDC;InSC=Consonant;lb=
# Various signs
cp;A980;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=JAVANESE SIGN PANYANGGA;SB=EX;WB=Extend
cp;A981;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Bindu;jt=T;lb=CM;na=JAVANESE SIGN CECAK;SB=EX;WB=Extend
-cp;A982;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Consonant_Succeeding_Repha;jt=T;lb=CM;na=JAVANESE SIGN LAYAR;SB=EX;WB=Extend
+cp;A982;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Consonant_Final;jt=T;lb=CM;na=JAVANESE SIGN LAYAR;SB=EX;WB=Extend
cp;A983;gc=Mc;GCB=SM;InPC=Right;InSC=Visarga;lb=CM;na=JAVANESE SIGN WIGNYAN;SB=EX;WB=Extend
# Letters
cp;A984;IDS;InSC=Vowel_Independent;na=JAVANESE LETTER A;XIDS
@@ -18042,7 +18204,7 @@ cp;AA6A;na=MYANMAR LETTER KHAMTI DHA
cp;AA6B;na=MYANMAR LETTER KHAMTI NA
cp;AA6C;na=MYANMAR LETTER KHAMTI SA
cp;AA6D;na=MYANMAR LETTER KHAMTI HA
-cp;AA6E;na=MYANMAR LETTER KHAMTI HHA
+cp;AA6E;na=MYANMAR LETTER KHAMTI HHA;Name_Alias=correction=MYANMAR LETTER KHAMTI LLA
cp;AA6F;na=MYANMAR LETTER KHAMTI FA
cp;AA70;CI;Ext;gc=Lm;InSC=Other;na=MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
cp;AA71;na=MYANMAR LETTER KHAMTI XA
@@ -20014,7 +20176,8 @@ cp;FBBE;age=6.0;-Alpha;CI;-CWKCF;dt=None;gc=Sk;-IDC;-IDS;na=ARABIC SYMBOL TWO DO
cp;FBBF;age=6.0;-Alpha;CI;-CWKCF;dt=None;gc=Sk;-IDC;-IDS;na=ARABIC SYMBOL RING;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
cp;FBC0;age=6.0;-Alpha;CI;-CWKCF;dt=None;gc=Sk;-IDC;-IDS;na=ARABIC SYMBOL SMALL TAH ABOVE;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
cp;FBC1;age=6.0;-Alpha;CI;-CWKCF;dt=None;gc=Sk;-IDC;-IDS;na=ARABIC SYMBOL SMALL TAH BELOW;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
-unassigned;FBC2..FBD2;bc=AL
+cp;FBC2;age=14.0;-Alpha;CI;-CWKCF;dt=None;gc=Sk;-IDC;-IDS;na=ARABIC SYMBOL WASLA ABOVE;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+unassigned;FBC3..FBD2;bc=AL
# Glyphs for contextual forms of letters for Central Asian languages
cp;FBD3;dm=06AD;dt=Iso;na=ARABIC LETTER NG ISOLATED FORM;NFKC_CF=06AD
cp;FBD4;dm=06AD;na=ARABIC LETTER NG FINAL FORM;NFKC_CF=06AD
@@ -20381,9 +20544,25 @@ cp;FD3B;dm=0638 0645;dt=Med;na=ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;NFKC_CF
cp;FD3C;dm=0627 064B;na=ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;NFKC_CF=0627 064B
cp;FD3D;dm=0627 064B;dt=Iso;na=ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;NFKC_CF=0627 064B
# Punctuation
-cp;FD3E;-Alpha;bc=ON;-CWKCF;dt=None;gc=Pe;-IDC;-IDS;lb=CL;na=ORNATE LEFT PARENTHESIS;NFKC_QC=Y;NFKD_QC=Y;Pat_Syn;SB=CL;sc=Zyyy;WB=XX;-XIDC;-XIDS
-cp;FD3F;-Alpha;bc=ON;-CWKCF;dt=None;gc=Ps;-IDC;-IDS;lb=OP;na=ORNATE RIGHT PARENTHESIS;NFKC_QC=Y;NFKD_QC=Y;Pat_Syn;SB=CL;sc=Zyyy;WB=XX;-XIDC;-XIDS
-unassigned;FD40..FD4F;bc=AL
+cp;FD3E;-Alpha;bc=ON;-CWKCF;dt=None;gc=Pe;-IDC;-IDS;lb=CL;na=ORNATE LEFT PARENTHESIS;NFKC_QC=Y;NFKD_QC=Y;Pat_Syn;SB=CL;sc=Zyyy;scx=Arab Nkoo;WB=XX;-XIDC;-XIDS
+cp;FD3F;-Alpha;bc=ON;-CWKCF;dt=None;gc=Ps;-IDC;-IDS;lb=OP;na=ORNATE RIGHT PARENTHESIS;NFKC_QC=Y;NFKD_QC=Y;Pat_Syn;SB=CL;sc=Zyyy;scx=Arab Nkoo;WB=XX;-XIDC;-XIDS
+# Honorific word ligatures
+cp;FD40;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE RAHIMAHU ALLAAH;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD41;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE RADI ALLAAHU ANH;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD42;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE RADI ALLAAHU ANHAA;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD43;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE RADI ALLAAHU ANHUM;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD44;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE RADI ALLAAHU ANHUMAA;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD45;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE RADI ALLAAHU ANHUNNA;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD46;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD47;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE ALAYHI AS-SALAAM;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD48;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE ALAYHIM AS-SALAAM;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD49;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE ALAYHIMAA AS-SALAAM;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD4A;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD4B;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE QUDDISA SIRRAH;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD4C;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD4D;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE ALAYHAA AS-SALAAM;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD4E;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE TABAARAKA WA-TAAALAA;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FD4F;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE RAHIMAHUM ALLAAH;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
# Ligatures (three elements)
cp;FD50;dm=062A 062C 0645;dt=Init;na=ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;NFKC_CF=062A 062C 0645
cp;FD51;dm=062A 062D 062C;na=ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;NFKC_CF=062A 062D 062C
@@ -20504,7 +20683,9 @@ cp;FDC4;dm=0639 062C 0645;dt=Init;na=ARABIC LIGATURE AIN WITH JEEM WITH MEEM INI
cp;FDC5;dm=0635 0645 0645;dt=Init;na=ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;NFKC_CF=0635 0645 0645
cp;FDC6;dm=0633 062E 064A;na=ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;NFKC_CF=0633 062E 064A
cp;FDC7;dm=0646 062C 064A;na=ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;NFKC_CF=0646 062C 064A
-unassigned;FDC8..FDCF;bc=AL
+unassigned;FDC8..FDCE;bc=AL
+# Honorific word ligature
+cp;FDCF;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE SALAAMUHU ALAYNAA;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
# Noncharacters
unassigned;FDD0..FDEF;age=3.1;bc=BN;NChar
# Word ligatures
@@ -20522,9 +20703,10 @@ cp;FDFA;dm=0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020
cp;FDFB;dm=062C 0644 0020 062C 0644 0627 0644 0647;dt=Iso;na=ARABIC LIGATURE JALLAJALALOUHOU;NFKC_CF=062C 0644 0020 062C 0644 0627 0644 0647;-XIDC;-XIDS
# Currency symbol
cp;FDFC;age=3.2;-Alpha;dm=0631 06CC 0627 0644;dt=Iso;gc=Sc;-IDC;-IDS;lb=PO;na=RIAL SIGN;NFKC_CF=0631 06CC 0627 0644;SB=XX;WB=XX;-XIDC;-XIDS
-# Symbol
+# Honorific word ligatures
cp;FDFD;age=4.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;NFKC_QC=Y;NFKD_QC=Y;SB=XX;scx=Arab Thaa;WB=XX;-XIDC;-XIDS
-unassigned;FDFE..FDFF;bc=AL
+cp;FDFE;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE SUBHAANAHU WA TAAALAA;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
+cp;FDFF;age=14.0;-Alpha;bc=ON;-CWKCF;dt=None;gc=So;-IDC;-IDS;na=ARABIC LIGATURE AZZA WA JALL;NFKC_QC=Y;NFKD_QC=Y;SB=XX;WB=XX;-XIDC;-XIDS
block;FE00..FE0F;age=3.2;bc=NSM;blk=VS;CI;CWKCF;DI;ea=A;gc=Mn;GCB=EX;Gr_Ext;IDC;jt=T;lb=CM;NFKC_CF=;SB=EX;sc=Zinh;VS;WB=Extend;XIDC
# FE00..FE0F Variation Selectors
@@ -20585,7 +20767,7 @@ cp;FE2D;ccc=220;na=COMBINING CONJOINING MACRON BELOW
cp;FE2E;age=8.0;na=COMBINING CYRILLIC TITLO LEFT HALF;sc=Cyrl
cp;FE2F;age=8.0;na=COMBINING CYRILLIC TITLO RIGHT HALF;sc=Cyrl
-block;FE30..FE4F;age=1.1;bc=ON;blk=CJK_Compat_Forms;CWKCF;dt=Vert;ea=W;gc=Ps;Gr_Base;lb=ID;NFKC_QC=N;NFKD_QC=N;SB=CL;sc=Zyyy;vo=U
+block;FE30..FE4F;age=1.1;bc=ON;blk=CJK_Compat_Forms;CWKCF;dt=Vert;ea=W;gc=Pe;Gr_Base;lb=ID;NFKC_QC=N;NFKD_QC=N;SB=CL;sc=Zyyy;vo=U
# FE30..FE4F CJK Compatibility Forms
# Glyphs for vertical variants
cp;FE30;dm=2025;gc=Po;na=PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;NFKC_CF=002E 002E;SB=XX
@@ -20593,28 +20775,28 @@ cp;FE31;Dash;dm=2014;gc=Pd;na=PRESENTATION FORM FOR VERTICAL EM DASH;NFKC_CF=201
cp;FE32;Dash;dm=2013;gc=Pd;na=PRESENTATION FORM FOR VERTICAL EN DASH;NFKC_CF=2013;SB=SC
cp;FE33;dm=005F;gc=Pc;IDC;na=PRESENTATION FORM FOR VERTICAL LOW LINE;NFKC_CF=005F;SB=XX;WB=EX;XIDC
cp;FE34;dm=005F;gc=Pc;IDC;na=PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;NFKC_CF=005F;SB=XX;WB=EX;XIDC
-cp;FE35;dm=0028;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;NFKC_CF=0028
-cp;FE36;dm=0029;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;NFKC_CF=0029
-cp;FE37;dm=007B;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;NFKC_CF=007B
-cp;FE38;dm=007D;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;NFKC_CF=007D
-cp;FE39;dm=3014;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;NFKC_CF=3014
-cp;FE3A;dm=3015;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;NFKC_CF=3015
-cp;FE3B;dm=3010;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;NFKC_CF=3010
-cp;FE3C;dm=3011;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;NFKC_CF=3011
-cp;FE3D;dm=300A;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;NFKC_CF=300A
-cp;FE3E;dm=300B;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;NFKC_CF=300B
-cp;FE3F;dm=3008;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;NFKC_CF=3008
-cp;FE40;dm=3009;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;NFKC_CF=3009
-cp;FE41;dm=300C;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;NFKC_CF=300C;QMark
-cp;FE42;dm=300D;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;NFKC_CF=300D;QMark
-cp;FE43;dm=300E;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;NFKC_CF=300E;QMark
-cp;FE44;dm=300F;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;NFKC_CF=300F;QMark
+cp;FE35;dm=0028;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;NFKC_CF=0028
+cp;FE36;dm=0029;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;NFKC_CF=0029
+cp;FE37;dm=007B;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;NFKC_CF=007B
+cp;FE38;dm=007D;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;NFKC_CF=007D
+cp;FE39;dm=3014;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;NFKC_CF=3014
+cp;FE3A;dm=3015;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;NFKC_CF=3015
+cp;FE3B;dm=3010;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;NFKC_CF=3010
+cp;FE3C;dm=3011;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;NFKC_CF=3011
+cp;FE3D;dm=300A;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;NFKC_CF=300A
+cp;FE3E;dm=300B;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;NFKC_CF=300B
+cp;FE3F;dm=3008;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;NFKC_CF=3008
+cp;FE40;dm=3009;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;NFKC_CF=3009
+cp;FE41;dm=300C;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;NFKC_CF=300C;QMark
+cp;FE42;dm=300D;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;NFKC_CF=300D;QMark
+cp;FE43;dm=300E;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;NFKC_CF=300E;QMark
+cp;FE44;dm=300F;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;NFKC_CF=300F;QMark
# Sidelining emphasis marks
cp;FE45;age=3.2;-CWKCF;dt=None;gc=Po;na=SESAME DOT;NFKC_QC=Y;NFKD_QC=Y;Pat_Syn;SB=XX;scx=Bopo Hang Hani Hira Kana
cp;FE46;age=3.2;-CWKCF;dt=None;gc=Po;na=WHITE SESAME DOT;NFKC_QC=Y;NFKD_QC=Y;Pat_Syn;SB=XX;scx=Bopo Hang Hani Hira Kana
# Glyphs for vertical variants
-cp;FE47;age=4.0;dm=005B;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;NFKC_CF=005B
-cp;FE48;age=4.0;dm=005D;gc=Pe;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;NFKC_CF=005D
+cp;FE47;age=4.0;dm=005B;gc=Ps;lb=OP;na=PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;NFKC_CF=005B
+cp;FE48;age=4.0;dm=005D;lb=CL;na=PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;NFKC_CF=005D
# Overscores and underscores
cp;FE49;dm=203E;dt=Com;gc=Po;na=DASHED OVERLINE;NFKC_CF=0020 0305;SB=XX;vo=R
cp;FE4A;dm=203E;dt=Com;gc=Po;na=CENTRELINE OVERLINE;NFKC_CF=0020 0305;SB=XX;vo=R
@@ -21300,8 +21482,8 @@ unassigned;100FB..100FF
block;10100..1013F;age=4.0;blk=Aegean_Numbers;gc=No;Gr_Base;lb=AL;nt=Nu;sc=Zyyy;scx=Cprt Lina Linb
# 10100..1013F Aegean Numbers
# Punctuation
-cp;10100;gc=Po;lb=BA;na=AEGEAN WORD SEPARATOR LINE;nt=None;scx=Cprt Linb
-cp;10101;bc=ON;gc=Po;lb=BA;na=AEGEAN WORD SEPARATOR DOT;nt=None;scx=Cprt Linb
+cp;10100;gc=Po;lb=BA;na=AEGEAN WORD SEPARATOR LINE;nt=None;scx=Cpmn Cprt Linb
+cp;10101;bc=ON;gc=Po;lb=BA;na=AEGEAN WORD SEPARATOR DOT;nt=None;scx=Cpmn Cprt Linb
cp;10102;gc=Po;lb=BA;na=AEGEAN CHECK MARK;nt=None;scx=Cprt Linb
unassigned;10103..10106
# Numbers
@@ -22242,6 +22424,89 @@ unassigned;10564..1056E
# Punctuation
cp;1056F;-Alpha;gc=Po;-IDC;-IDS;na=CAUCASIAN ALBANIAN CITATION MARK;SB=XX;WB=XX;-XIDC;-XIDS
+block;10570..105BF;age=14.0;Alpha;blk=Vithkuqi;Cased;CWCM;gc=Ll;Gr_Base;IDC;IDS;lb=AL;SB=LO;sc=Vith;WB=LE;XIDC;XIDS
+# 10570..105BF Vithkuqi
+# Capital letters
+cp;10570;cf=10597;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER A;NFKC_CF=10597;SB=UP;scf=10597;slc=10597;Upper
+cp;10571;cf=10598;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER BBE;NFKC_CF=10598;SB=UP;scf=10598;slc=10598;Upper
+cp;10572;cf=10599;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER BE;NFKC_CF=10599;SB=UP;scf=10599;slc=10599;Upper
+cp;10573;cf=1059A;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER CE;NFKC_CF=1059A;SB=UP;scf=1059A;slc=1059A;Upper
+cp;10574;cf=1059B;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER CHE;NFKC_CF=1059B;SB=UP;scf=1059B;slc=1059B;Upper
+cp;10575;cf=1059C;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER DE;NFKC_CF=1059C;SB=UP;scf=1059C;slc=1059C;Upper
+cp;10576;cf=1059D;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER DHE;NFKC_CF=1059D;SB=UP;scf=1059D;slc=1059D;Upper
+cp;10577;cf=1059E;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER EI;NFKC_CF=1059E;SB=UP;scf=1059E;slc=1059E;Upper
+cp;10578;cf=1059F;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER E;NFKC_CF=1059F;SB=UP;scf=1059F;slc=1059F;Upper
+cp;10579;cf=105A0;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER FE;NFKC_CF=105A0;SB=UP;scf=105A0;slc=105A0;Upper
+cp;1057A;cf=105A1;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER GA;NFKC_CF=105A1;SB=UP;scf=105A1;slc=105A1;Upper
+unassigned;1057B
+cp;1057C;cf=105A3;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER HA;NFKC_CF=105A3;SB=UP;scf=105A3;slc=105A3;Upper
+cp;1057D;cf=105A4;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER HHA;NFKC_CF=105A4;SB=UP;scf=105A4;slc=105A4;Upper
+cp;1057E;cf=105A5;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER I;NFKC_CF=105A5;SB=UP;scf=105A5;slc=105A5;Upper
+cp;1057F;cf=105A6;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER IJE;NFKC_CF=105A6;SB=UP;scf=105A6;slc=105A6;Upper
+cp;10580;cf=105A7;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER JE;NFKC_CF=105A7;SB=UP;scf=105A7;slc=105A7;Upper
+cp;10581;cf=105A8;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER KA;NFKC_CF=105A8;SB=UP;scf=105A8;slc=105A8;Upper
+cp;10582;cf=105A9;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER LA;NFKC_CF=105A9;SB=UP;scf=105A9;slc=105A9;Upper
+cp;10583;cf=105AA;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER LLA;NFKC_CF=105AA;SB=UP;scf=105AA;slc=105AA;Upper
+cp;10584;cf=105AB;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER ME;NFKC_CF=105AB;SB=UP;scf=105AB;slc=105AB;Upper
+cp;10585;cf=105AC;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER NE;NFKC_CF=105AC;SB=UP;scf=105AC;slc=105AC;Upper
+cp;10586;cf=105AD;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER NJE;NFKC_CF=105AD;SB=UP;scf=105AD;slc=105AD;Upper
+cp;10587;cf=105AE;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER O;NFKC_CF=105AE;SB=UP;scf=105AE;slc=105AE;Upper
+cp;10588;cf=105AF;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER PE;NFKC_CF=105AF;SB=UP;scf=105AF;slc=105AF;Upper
+cp;10589;cf=105B0;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER QA;NFKC_CF=105B0;SB=UP;scf=105B0;slc=105B0;Upper
+cp;1058A;cf=105B1;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER RE;NFKC_CF=105B1;SB=UP;scf=105B1;slc=105B1;Upper
+unassigned;1058B
+cp;1058C;cf=105B3;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER SE;NFKC_CF=105B3;SB=UP;scf=105B3;slc=105B3;Upper
+cp;1058D;cf=105B4;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER SHE;NFKC_CF=105B4;SB=UP;scf=105B4;slc=105B4;Upper
+cp;1058E;cf=105B5;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER TE;NFKC_CF=105B5;SB=UP;scf=105B5;slc=105B5;Upper
+cp;1058F;cf=105B6;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER THE;NFKC_CF=105B6;SB=UP;scf=105B6;slc=105B6;Upper
+cp;10590;cf=105B7;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER U;NFKC_CF=105B7;SB=UP;scf=105B7;slc=105B7;Upper
+cp;10591;cf=105B8;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER VE;NFKC_CF=105B8;SB=UP;scf=105B8;slc=105B8;Upper
+cp;10592;cf=105B9;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER XE;NFKC_CF=105B9;SB=UP;scf=105B9;slc=105B9;Upper
+unassigned;10593
+cp;10594;cf=105BB;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER Y;NFKC_CF=105BB;SB=UP;scf=105BB;slc=105BB;Upper
+cp;10595;cf=105BC;CWCF;CWKCF;CWL;gc=Lu;na=VITHKUQI CAPITAL LETTER ZE;NFKC_CF=105BC;SB=UP;scf=105BC;slc=105BC;Upper
+unassigned;10596
+# Small letters
+cp;10597;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER A;stc=10570;suc=10570
+cp;10598;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER BBE;stc=10571;suc=10571
+cp;10599;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER BE;stc=10572;suc=10572
+cp;1059A;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER CE;stc=10573;suc=10573
+cp;1059B;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER CHE;stc=10574;suc=10574
+cp;1059C;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER DE;stc=10575;suc=10575
+cp;1059D;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER DHE;stc=10576;suc=10576
+cp;1059E;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER EI;stc=10577;suc=10577
+cp;1059F;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER E;stc=10578;suc=10578
+cp;105A0;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER FE;stc=10579;suc=10579
+cp;105A1;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER GA;stc=1057A;suc=1057A
+unassigned;105A2
+cp;105A3;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER HA;stc=1057C;suc=1057C
+cp;105A4;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER HHA;stc=1057D;suc=1057D
+cp;105A5;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER I;stc=1057E;suc=1057E
+cp;105A6;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER IJE;stc=1057F;suc=1057F
+cp;105A7;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER JE;stc=10580;suc=10580
+cp;105A8;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER KA;stc=10581;suc=10581
+cp;105A9;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER LA;stc=10582;suc=10582
+cp;105AA;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER LLA;stc=10583;suc=10583
+cp;105AB;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER ME;stc=10584;suc=10584
+cp;105AC;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER NE;stc=10585;suc=10585
+cp;105AD;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER NJE;stc=10586;suc=10586
+cp;105AE;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER O;stc=10587;suc=10587
+cp;105AF;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER PE;stc=10588;suc=10588
+cp;105B0;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER QA;stc=10589;suc=10589
+cp;105B1;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER RE;stc=1058A;suc=1058A
+unassigned;105B2
+cp;105B3;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER SE;stc=1058C;suc=1058C
+cp;105B4;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER SHE;stc=1058D;suc=1058D
+cp;105B5;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER TE;stc=1058E;suc=1058E
+cp;105B6;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER THE;stc=1058F;suc=1058F
+cp;105B7;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER U;stc=10590;suc=10590
+cp;105B8;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER VE;stc=10591;suc=10591
+cp;105B9;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER XE;stc=10592;suc=10592
+unassigned;105BA
+cp;105BB;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER Y;stc=10594;suc=10594
+cp;105BC;CWT;CWU;Lower;na=VITHKUQI SMALL LETTER ZE;stc=10595;suc=10595
+unassigned;105BD..105BF
+
block;10600..1077F;age=7.0;Alpha;blk=Linear_A;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Lina;WB=LE;XIDC;XIDS
# 10600..1077F Linear A
# Simple signs
@@ -22595,6 +22860,71 @@ cp;10766;na=LINEAR A SIGN A806
cp;10767;na=LINEAR A SIGN A807
unassigned;10768..1077F
+block;10780..107BF;age=14.0;Alpha;blk=Latin_Ext_F;Cased;CI;CWKCF;Dia;dt=Sup;gc=Lm;Gr_Base;IDC;IDS;lb=AL;Lower;NFKC_QC=N;NFKD_QC=N;SB=LO;sc=Latn;WB=LE;XIDC;XIDS
+# 10780..107BF Latin Extended-F
+# Modifier letter for VoQS
+cp;10780;-CWKCF;dt=None;na=MODIFIER LETTER SMALL CAPITAL AA;NFKC_QC=Y;NFKD_QC=Y
+# Modifier letters for IPA
+cp;10781;-Cased;dm=02D0;Ext;-Lower;na=MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;NFKC_CF=02D0;SB=LE
+cp;10782;-Cased;dm=02D1;Ext;-Lower;na=MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;NFKC_CF=02D1;SB=LE
+cp;10783;dm=00E6;na=MODIFIER LETTER SMALL AE;NFKC_CF=00E6
+cp;10784;dm=0299;na=MODIFIER LETTER SMALL CAPITAL B;NFKC_CF=0299
+cp;10785;dm=0253;na=MODIFIER LETTER SMALL B WITH HOOK;NFKC_CF=0253
+unassigned;10786
+cp;10787;dm=02A3;na=MODIFIER LETTER SMALL DZ DIGRAPH;NFKC_CF=02A3
+cp;10788;dm=AB66;na=MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;NFKC_CF=AB66
+cp;10789;dm=02A5;na=MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;NFKC_CF=02A5
+cp;1078A;dm=02A4;na=MODIFIER LETTER SMALL DEZH DIGRAPH;NFKC_CF=02A4
+cp;1078B;dm=0256;na=MODIFIER LETTER SMALL D WITH TAIL;NFKC_CF=0256
+cp;1078C;dm=0257;na=MODIFIER LETTER SMALL D WITH HOOK;NFKC_CF=0257
+cp;1078D;dm=1D91;na=MODIFIER LETTER SMALL D WITH HOOK AND TAIL;NFKC_CF=1D91
+cp;1078E;dm=0258;na=MODIFIER LETTER SMALL REVERSED E;NFKC_CF=0258
+cp;1078F;dm=025E;na=MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;NFKC_CF=025E
+cp;10790;dm=02A9;na=MODIFIER LETTER SMALL FENG DIGRAPH;NFKC_CF=02A9
+cp;10791;dm=0264;na=MODIFIER LETTER SMALL RAMS HORN;NFKC_CF=0264
+cp;10792;dm=0262;na=MODIFIER LETTER SMALL CAPITAL G;NFKC_CF=0262
+cp;10793;dm=0260;na=MODIFIER LETTER SMALL G WITH HOOK;NFKC_CF=0260
+cp;10794;dm=029B;na=MODIFIER LETTER SMALL CAPITAL G WITH HOOK;NFKC_CF=029B
+cp;10795;dm=0127;na=MODIFIER LETTER SMALL H WITH STROKE;NFKC_CF=0127
+cp;10796;dm=029C;na=MODIFIER LETTER SMALL CAPITAL H;NFKC_CF=029C
+cp;10797;dm=0267;na=MODIFIER LETTER SMALL HENG WITH HOOK;NFKC_CF=0267
+cp;10798;dm=0284;na=MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;NFKC_CF=0284
+cp;10799;dm=02AA;na=MODIFIER LETTER SMALL LS DIGRAPH;NFKC_CF=02AA
+cp;1079A;dm=02AB;na=MODIFIER LETTER SMALL LZ DIGRAPH;NFKC_CF=02AB
+cp;1079B;dm=026C;na=MODIFIER LETTER SMALL L WITH BELT;NFKC_CF=026C
+cp;1079C;dm=1DF04;na=MODIFIER LETTER SMALL CAPITAL L WITH BELT;NFKC_CF=1DF04
+cp;1079D;dm=A78E;na=MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;NFKC_CF=A78E
+cp;1079E;dm=026E;na=MODIFIER LETTER SMALL LEZH;NFKC_CF=026E
+cp;1079F;dm=1DF05;na=MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;NFKC_CF=1DF05
+cp;107A0;dm=028E;na=MODIFIER LETTER SMALL TURNED Y;NFKC_CF=028E
+cp;107A1;dm=1DF06;na=MODIFIER LETTER SMALL TURNED Y WITH BELT;NFKC_CF=1DF06
+cp;107A2;dm=00F8;na=MODIFIER LETTER SMALL O WITH STROKE;NFKC_CF=00F8
+cp;107A3;dm=0276;na=MODIFIER LETTER SMALL CAPITAL OE;NFKC_CF=0276
+cp;107A4;dm=0277;na=MODIFIER LETTER SMALL CLOSED OMEGA;NFKC_CF=0277
+cp;107A5;dm=0071;na=MODIFIER LETTER SMALL Q;NFKC_CF=0071
+cp;107A6;dm=027A;na=MODIFIER LETTER SMALL TURNED R WITH LONG LEG;NFKC_CF=027A
+cp;107A7;dm=1DF08;na=MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;NFKC_CF=1DF08
+cp;107A8;dm=027D;na=MODIFIER LETTER SMALL R WITH TAIL;NFKC_CF=027D
+cp;107A9;dm=027E;na=MODIFIER LETTER SMALL R WITH FISHHOOK;NFKC_CF=027E
+cp;107AA;dm=0280;na=MODIFIER LETTER SMALL CAPITAL R;NFKC_CF=0280
+cp;107AB;dm=02A8;na=MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;NFKC_CF=02A8
+cp;107AC;dm=02A6;na=MODIFIER LETTER SMALL TS DIGRAPH;NFKC_CF=02A6
+cp;107AD;dm=AB67;na=MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;NFKC_CF=AB67
+cp;107AE;dm=02A7;na=MODIFIER LETTER SMALL TESH DIGRAPH;NFKC_CF=02A7
+cp;107AF;dm=0288;na=MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;NFKC_CF=0288
+cp;107B0;dm=2C71;na=MODIFIER LETTER SMALL V WITH RIGHT HOOK;NFKC_CF=2C71
+unassigned;107B1
+cp;107B2;dm=028F;na=MODIFIER LETTER SMALL CAPITAL Y;NFKC_CF=028F
+cp;107B3;dm=02A1;na=MODIFIER LETTER GLOTTAL STOP WITH STROKE;NFKC_CF=02A1
+cp;107B4;dm=02A2;na=MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;NFKC_CF=02A2
+cp;107B5;dm=0298;na=MODIFIER LETTER BILABIAL CLICK;NFKC_CF=0298
+cp;107B6;dm=01C0;na=MODIFIER LETTER DENTAL CLICK;NFKC_CF=01C0
+cp;107B7;dm=01C1;na=MODIFIER LETTER LATERAL CLICK;NFKC_CF=01C1
+cp;107B8;dm=01C2;na=MODIFIER LETTER ALVEOLAR CLICK;NFKC_CF=01C2
+cp;107B9;dm=1DF0A;na=MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;NFKC_CF=1DF0A
+cp;107BA;dm=1DF1E;na=MODIFIER LETTER SMALL S WITH CURL;NFKC_CF=1DF1E
+unassigned;107BB..107BF
+
block;10800..1083F;age=4.0;Alpha;bc=R;blk=Cypriot_Syllabary;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Cprt;WB=LE;XIDC;XIDS
# 10800..1083F Cypriot Syllabary
# Syllables
@@ -23253,7 +23583,7 @@ cp;10AEF;-Alpha;gc=No;-IDC;-IDS;jg=Manichaean_Hundred;jt=R;na=MANICHAEAN NUMBER
# Punctuation
cp;10AF0;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=BA;na=MANICHAEAN PUNCTUATION STAR;SB=XX;Term;WB=XX;-XIDC;-XIDS
cp;10AF1;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=BA;na=MANICHAEAN PUNCTUATION FLEURON;SB=XX;Term;WB=XX;-XIDC;-XIDS
-cp;10AF2;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=BA;na=MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT;SB=XX;Term;WB=XX;-XIDC;-XIDS
+cp;10AF2;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=BA;na=MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT;SB=XX;scx=Mani Ougr;Term;WB=XX;-XIDC;-XIDS
cp;10AF3;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=BA;na=MANICHAEAN PUNCTUATION DOT WITHIN DOT;SB=XX;Term;WB=XX;-XIDC;-XIDS
cp;10AF4;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=BA;na=MANICHAEAN PUNCTUATION DOT;SB=XX;Term;WB=XX;-XIDC;-XIDS
cp;10AF5;-Alpha;gc=Po;-IDC;-IDS;jt=U;lb=BA;na=MANICHAEAN PUNCTUATION TWO DOTS;SB=XX;Term;WB=XX;-XIDC;-XIDS
@@ -23897,8 +24227,38 @@ cp;10F58;gc=Po;-IDC;jt=U;na=SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;SB=ST;STer
cp;10F59;gc=Po;-IDC;jt=U;na=SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;SB=ST;STerm;Term;WB=XX;-XIDC
unassigned;10F5A..10F6F;bc=AL
-# No block
-unassigned;10F70..10FAF;bc=R
+block;10F70..10FAF;age=14.0;Alpha;bc=R;blk=Old_Uyghur;gc=Lo;Gr_Base;IDC;IDS;jt=D;lb=AL;SB=LE;sc=Ougr;WB=LE;XIDC;XIDS
+# 10F70..10FAF Old Uyghur
+# Letters
+cp;10F70;na=OLD UYGHUR LETTER ALEPH
+cp;10F71;na=OLD UYGHUR LETTER BETH
+cp;10F72;na=OLD UYGHUR LETTER GIMEL-HETH
+cp;10F73;na=OLD UYGHUR LETTER WAW
+cp;10F74;jt=R;na=OLD UYGHUR LETTER ZAYIN
+cp;10F75;jt=R;na=OLD UYGHUR LETTER FINAL HETH
+cp;10F76;na=OLD UYGHUR LETTER YODH
+cp;10F77;na=OLD UYGHUR LETTER KAPH
+cp;10F78;na=OLD UYGHUR LETTER LAMEDH
+cp;10F79;na=OLD UYGHUR LETTER MEM
+cp;10F7A;na=OLD UYGHUR LETTER NUN
+cp;10F7B;na=OLD UYGHUR LETTER SAMEKH
+cp;10F7C;na=OLD UYGHUR LETTER PE
+cp;10F7D;na=OLD UYGHUR LETTER SADHE
+cp;10F7E;na=OLD UYGHUR LETTER RESH
+cp;10F7F;na=OLD UYGHUR LETTER SHIN
+cp;10F80;na=OLD UYGHUR LETTER TAW
+cp;10F81;na=OLD UYGHUR LETTER LESH
+# Combining signs
+cp;10F82;-Alpha;bc=NSM;ccc=230;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=OLD UYGHUR COMBINING DOT ABOVE;SB=EX;WB=Extend;-XIDS
+cp;10F83;-Alpha;bc=NSM;ccc=220;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=OLD UYGHUR COMBINING DOT BELOW;SB=EX;WB=Extend;-XIDS
+cp;10F84;-Alpha;bc=NSM;ccc=230;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=OLD UYGHUR COMBINING TWO DOTS ABOVE;SB=EX;WB=Extend;-XIDS
+cp;10F85;-Alpha;bc=NSM;ccc=220;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=OLD UYGHUR COMBINING TWO DOTS BELOW;SB=EX;WB=Extend;-XIDS
+# Punctuation
+cp;10F86;-Alpha;gc=Po;-IDC;-IDS;jt=U;na=OLD UYGHUR PUNCTUATION BAR;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
+cp;10F87;-Alpha;gc=Po;-IDC;-IDS;jt=U;na=OLD UYGHUR PUNCTUATION TWO BARS;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
+cp;10F88;-Alpha;gc=Po;-IDC;-IDS;jt=U;na=OLD UYGHUR PUNCTUATION TWO DOTS;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
+cp;10F89;-Alpha;gc=Po;-IDC;-IDS;jt=U;na=OLD UYGHUR PUNCTUATION FOUR DOTS;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
+unassigned;10F8A..10FAF;bc=R
block;10FB0..10FDF;age=13.0;Alpha;bc=R;blk=Chorasmian;gc=Lo;Gr_Base;IDC;IDS;jt=D;lb=AL;SB=LE;sc=Chrs;WB=LE;XIDC;XIDS
# 10FB0..10FDF Chorasmian
@@ -24040,7 +24400,7 @@ cp;11043;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Vowel_Dependent;jt
cp;11044;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=BRAHMI VOWEL SIGN O;SB=EX;WB=Extend
cp;11045;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=BRAHMI VOWEL SIGN AU;SB=EX;WB=Extend
# Virama
-cp;11046;-Alpha;bc=NSM;ccc=9;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;InPC=Top;InSC=Virama;jt=T;lb=CM;na=BRAHMI VIRAMA;SB=EX;WB=Extend
+cp;11046;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;InPC=Top;InSC=Virama;jt=T;lb=CM;na=BRAHMI VIRAMA;SB=EX;WB=Extend
# Punctuation
cp;11047;-Alpha;gc=Po;-IDC;InSC=Other;lb=BA;na=BRAHMI DANDA;SB=ST;STerm;Term;WB=XX;-XIDC
cp;11048;-Alpha;gc=Po;-IDC;InSC=Other;lb=BA;na=BRAHMI DOUBLE DANDA;SB=ST;STerm;Term;WB=XX;-XIDC
@@ -24082,7 +24442,17 @@ cp;1106C;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BRAHMI DIGIT SIX;nt=De;nv=6;SB=NU;WB=
cp;1106D;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BRAHMI DIGIT SEVEN;nt=De;nv=7;SB=NU;WB=NU
cp;1106E;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BRAHMI DIGIT EIGHT;nt=De;nv=8;SB=NU;WB=NU
cp;1106F;-Alpha;gc=Nd;InSC=Number;lb=NU;na=BRAHMI DIGIT NINE;nt=De;nv=9;SB=NU;WB=NU
-unassigned;11070..1107E
+# Virama
+cp;11070;age=14.0;-Alpha;bc=NSM;ccc=9;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;InPC=Top;InSC=Pure_Killer;jt=T;lb=CM;na=BRAHMI SIGN OLD TAMIL VIRAMA;SB=EX;WB=Extend
+# Independent vowels
+cp;11071;age=14.0;IDS;InSC=Vowel_Independent;na=BRAHMI LETTER OLD TAMIL SHORT E;XIDS
+cp;11072;age=14.0;IDS;InSC=Vowel_Independent;na=BRAHMI LETTER OLD TAMIL SHORT O;XIDS
+# Dependent vowel signs
+cp;11073;age=14.0;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=BRAHMI VOWEL SIGN OLD TAMIL SHORT E;SB=EX;WB=Extend
+cp;11074;age=14.0;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Vowel_Dependent;jt=T;lb=CM;na=BRAHMI VOWEL SIGN OLD TAMIL SHORT O;SB=EX;WB=Extend
+# Consonant
+cp;11075;age=14.0;IDS;na=BRAHMI LETTER OLD TAMIL LLA;XIDS
+unassigned;11076..1107E
# Number joiner
cp;1107F;age=7.0;-Alpha;bc=NSM;ccc=9;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Gr_Link;InSC=Number_Joiner;jt=T;lb=CM;na=BRAHMI NUMBER JOINER;SB=EX;WB=Extend
@@ -24161,7 +24531,9 @@ cp;110BE;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=KAITHI SECTION MARK;SB=ST;ST
cp;110BF;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=KAITHI DOUBLE SECTION MARK;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
cp;110C0;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=KAITHI DANDA;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
cp;110C1;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=KAITHI DOUBLE DANDA;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
-unassigned;110C2..110CC
+# Vowel sign
+cp;110C2;age=14.0;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Vowel_Dependent;jt=T;lb=CM;na=KAITHI VOWEL SIGN VOCALIC R;SB=EX;WB=Extend;-XIDS
+unassigned;110C3..110CC
# Sign
cp;110CD;age=11.0;-Alpha;CI;gc=Cf;GCB=PP;-Gr_Base;-IDC;-IDS;InSC=Other;na=KAITHI NUMBER SIGN ABOVE;PCM;SB=FO;WB=FO;-XIDC;-XIDS
unassigned;110CE..110CF
@@ -25292,7 +25664,9 @@ cp;116B6;-Alpha;ccc=9;Dia;gc=Mc;GCB=SM;Gr_Link;-IDS;InPC=Right;InSC=Virama;lb=CM
cp;116B7;-Alpha;bc=NSM;ccc=7;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;InPC=Bottom;InSC=Nukta;jt=T;lb=CM;na=TAKRI SIGN NUKTA;SB=EX;WB=Extend;-XIDS
# Consonant
cp;116B8;age=12.0;na=TAKRI LETTER ARCHAIC KHA
-unassigned;116B9..116BF
+# Punctuation
+cp;116B9;age=14.0;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;na=TAKRI ABBREVIATION SIGN;SB=XX;WB=XX;-XIDC;-XIDS
+unassigned;116BA..116BF
# Digits
cp;116C0;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=TAKRI DIGIT ZERO;nt=De;nv=0;SB=NU;WB=NU;-XIDS
cp;116C1;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=TAKRI DIGIT ONE;nt=De;nv=1;SB=NU;WB=NU;-XIDS
@@ -25306,8 +25680,8 @@ cp;116C8;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=TAKRI DIGIT EIGHT;nt=De;nv=8;SB=
cp;116C9;-Alpha;gc=Nd;-IDS;InSC=Number;lb=NU;na=TAKRI DIGIT NINE;nt=De;nv=9;SB=NU;WB=NU;-XIDS
unassigned;116CA..116CF
-block;11700..1173F;age=8.0;Alpha;blk=Ahom;gc=Lo;Gr_Base;IDC;InSC=Consonant;lb=SA;SB=LE;sc=Ahom;XIDC
-# 11700..1173F Ahom
+block;11700..1174F;age=8.0;Alpha;blk=Ahom;gc=Lo;Gr_Base;IDC;InSC=Consonant;lb=SA;SB=LE;sc=Ahom;XIDC
+# 11700..1174F Ahom
# Consonants
cp;11700;IDS;na=AHOM LETTER KA;XIDS
cp;11701;IDS;na=AHOM LETTER KHA;XIDS
@@ -25342,8 +25716,8 @@ cp;1171D;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Consonant_Media
cp;1171E;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top_And_Bottom_And_Left;InSC=Consonant_Medial;jt=T;na=AHOM CONSONANT SIGN MEDIAL RA;SB=EX;WB=Extend
cp;1171F;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Consonant_Medial;jt=T;na=AHOM CONSONANT SIGN MEDIAL LIGATING RA;SB=EX;WB=Extend
# Vowel signs
-cp;11720;gc=Mc;GCB=SM;InPC=Right;InSC=Vowel_Dependent;na=AHOM VOWEL SIGN A;SB=EX;WB=Extend
-cp;11721;gc=Mc;GCB=SM;InPC=Right;InSC=Vowel_Dependent;na=AHOM VOWEL SIGN AA;SB=EX;WB=Extend
+cp;11720;gc=Mc;InPC=Right;InSC=Vowel_Dependent;na=AHOM VOWEL SIGN A;SB=EX;WB=Extend
+cp;11721;gc=Mc;InPC=Right;InSC=Vowel_Dependent;na=AHOM VOWEL SIGN AA;SB=EX;WB=Extend
cp;11722;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Vowel_Dependent;jt=T;na=AHOM VOWEL SIGN I;SB=EX;WB=Extend
cp;11723;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Top;InSC=Vowel_Dependent;jt=T;na=AHOM VOWEL SIGN II;SB=EX;WB=Extend
cp;11724;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;InPC=Bottom;InSC=Vowel_Dependent;jt=T;na=AHOM VOWEL SIGN U;SB=EX;WB=Extend
@@ -25374,6 +25748,15 @@ cp;1173C;-Alpha;gc=Po;-IDC;InSC=Other;lb=BA;na=AHOM SIGN SMALL SECTION;SB=ST;STe
cp;1173D;-Alpha;gc=Po;-IDC;InSC=Other;lb=BA;na=AHOM SIGN SECTION;SB=ST;STerm;Term;-XIDC
cp;1173E;-Alpha;gc=Po;-IDC;InSC=Other;lb=BA;na=AHOM SIGN RULAI;SB=ST;STerm;Term;-XIDC
cp;1173F;-Alpha;gc=So;-IDC;InSC=Other;na=AHOM SYMBOL VI;SB=XX;-XIDC
+# Additional consonants
+cp;11740;age=14.0;IDS;na=AHOM LETTER CA;XIDS
+cp;11741;age=14.0;IDS;na=AHOM LETTER TTA;XIDS
+cp;11742;age=14.0;IDS;na=AHOM LETTER TTHA;XIDS
+cp;11743;age=14.0;IDS;na=AHOM LETTER DDA;XIDS
+cp;11744;age=14.0;IDS;na=AHOM LETTER DDHA;XIDS
+cp;11745;age=14.0;IDS;na=AHOM LETTER NNA;XIDS
+cp;11746;age=14.0;IDS;na=AHOM LETTER LLA;XIDS
+unassigned;11747..1174F
block;11800..1184F;age=11.0;Alpha;blk=Dogra;gc=Lo;Gr_Base;IDC;IDS;InSC=Consonant;lb=AL;SB=LE;sc=Dogr;WB=LE;XIDC;XIDS
# 11800..1184F Dogra
@@ -25899,6 +26282,27 @@ cp;11AA1;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=SOYOMBO TERMINAL MARK-1;SB=X
cp;11AA2;-Alpha;gc=Po;-IDC;-IDS;InSC=Other;lb=BA;na=SOYOMBO TERMINAL MARK-2;SB=XX;Term;WB=XX;-XIDC;-XIDS
unassigned;11AA3..11AAF;vo=U
+block;11AB0..11ABF;age=14.0;Alpha;blk=UCAS_Ext_A;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Cans;vo=U;WB=LE;XIDC;XIDS
+# 11AB0..11ABF Unified Canadian Aboriginal Syllabics Extended-A
+# Syllables for Nattilik
+cp;11AB0;na=CANADIAN SYLLABICS NATTILIK HI
+cp;11AB1;na=CANADIAN SYLLABICS NATTILIK HII
+cp;11AB2;na=CANADIAN SYLLABICS NATTILIK HO
+cp;11AB3;na=CANADIAN SYLLABICS NATTILIK HOO
+cp;11AB4;na=CANADIAN SYLLABICS NATTILIK HA
+cp;11AB5;na=CANADIAN SYLLABICS NATTILIK HAA
+cp;11AB6;na=CANADIAN SYLLABICS NATTILIK SHRI
+cp;11AB7;na=CANADIAN SYLLABICS NATTILIK SHRII
+cp;11AB8;na=CANADIAN SYLLABICS NATTILIK SHRO
+cp;11AB9;na=CANADIAN SYLLABICS NATTILIK SHROO
+cp;11ABA;na=CANADIAN SYLLABICS NATTILIK SHRA
+cp;11ABB;na=CANADIAN SYLLABICS NATTILIK SHRAA
+# Historic syllables for Cree and Ojibway
+cp;11ABC;na=CANADIAN SYLLABICS SPE
+cp;11ABD;na=CANADIAN SYLLABICS SPI
+cp;11ABE;na=CANADIAN SYLLABICS SPO
+cp;11ABF;na=CANADIAN SYLLABICS SPA
+
block;11AC0..11AFF;age=7.0;Alpha;blk=Pau_Cin_Hau;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Pauc;WB=LE;XIDC;XIDS
# 11AC0..11AFF Pau Cin Hau
# Consonants
@@ -27685,6 +28089,111 @@ cp;12542;na=CUNEIFORM SIGN ZU OVER ZU PLUS SAR
cp;12543;na=CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
unassigned;12544..1254F
+block;12F90..12FFF;age=14.0;Alpha;blk=Cypro_Minoan;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Cpmn;WB=LE;XIDC;XIDS
+# 12F90..12FFF Cypro-Minoan
+# Signs
+cp;12F90;na=CYPRO-MINOAN SIGN CM001
+cp;12F91;na=CYPRO-MINOAN SIGN CM002
+cp;12F92;na=CYPRO-MINOAN SIGN CM004
+cp;12F93;na=CYPRO-MINOAN SIGN CM005
+cp;12F94;na=CYPRO-MINOAN SIGN CM006
+cp;12F95;na=CYPRO-MINOAN SIGN CM007
+cp;12F96;na=CYPRO-MINOAN SIGN CM008
+cp;12F97;na=CYPRO-MINOAN SIGN CM009
+cp;12F98;na=CYPRO-MINOAN SIGN CM010
+cp;12F99;na=CYPRO-MINOAN SIGN CM011
+cp;12F9A;na=CYPRO-MINOAN SIGN CM012
+cp;12F9B;na=CYPRO-MINOAN SIGN CM012B
+cp;12F9C;na=CYPRO-MINOAN SIGN CM013
+cp;12F9D;na=CYPRO-MINOAN SIGN CM015
+cp;12F9E;na=CYPRO-MINOAN SIGN CM017
+cp;12F9F;na=CYPRO-MINOAN SIGN CM019
+cp;12FA0;na=CYPRO-MINOAN SIGN CM021
+cp;12FA1;na=CYPRO-MINOAN SIGN CM023
+cp;12FA2;na=CYPRO-MINOAN SIGN CM024
+cp;12FA3;na=CYPRO-MINOAN SIGN CM025
+cp;12FA4;na=CYPRO-MINOAN SIGN CM026
+cp;12FA5;na=CYPRO-MINOAN SIGN CM027
+cp;12FA6;na=CYPRO-MINOAN SIGN CM028
+cp;12FA7;na=CYPRO-MINOAN SIGN CM029
+cp;12FA8;na=CYPRO-MINOAN SIGN CM030
+cp;12FA9;na=CYPRO-MINOAN SIGN CM033
+cp;12FAA;na=CYPRO-MINOAN SIGN CM034
+cp;12FAB;na=CYPRO-MINOAN SIGN CM035
+cp;12FAC;na=CYPRO-MINOAN SIGN CM036
+cp;12FAD;na=CYPRO-MINOAN SIGN CM037
+cp;12FAE;na=CYPRO-MINOAN SIGN CM038
+cp;12FAF;na=CYPRO-MINOAN SIGN CM039
+cp;12FB0;na=CYPRO-MINOAN SIGN CM040
+cp;12FB1;na=CYPRO-MINOAN SIGN CM041
+cp;12FB2;na=CYPRO-MINOAN SIGN CM044
+cp;12FB3;na=CYPRO-MINOAN SIGN CM046
+cp;12FB4;na=CYPRO-MINOAN SIGN CM047
+cp;12FB5;na=CYPRO-MINOAN SIGN CM049
+cp;12FB6;na=CYPRO-MINOAN SIGN CM050
+cp;12FB7;na=CYPRO-MINOAN SIGN CM051
+cp;12FB8;na=CYPRO-MINOAN SIGN CM052
+cp;12FB9;na=CYPRO-MINOAN SIGN CM053
+cp;12FBA;na=CYPRO-MINOAN SIGN CM054
+cp;12FBB;na=CYPRO-MINOAN SIGN CM055
+cp;12FBC;na=CYPRO-MINOAN SIGN CM056
+cp;12FBD;na=CYPRO-MINOAN SIGN CM058
+cp;12FBE;na=CYPRO-MINOAN SIGN CM059
+cp;12FBF;na=CYPRO-MINOAN SIGN CM060
+cp;12FC0;na=CYPRO-MINOAN SIGN CM061
+cp;12FC1;na=CYPRO-MINOAN SIGN CM062
+cp;12FC2;na=CYPRO-MINOAN SIGN CM063
+cp;12FC3;na=CYPRO-MINOAN SIGN CM064
+cp;12FC4;na=CYPRO-MINOAN SIGN CM066
+cp;12FC5;na=CYPRO-MINOAN SIGN CM067
+cp;12FC6;na=CYPRO-MINOAN SIGN CM068
+cp;12FC7;na=CYPRO-MINOAN SIGN CM069
+cp;12FC8;na=CYPRO-MINOAN SIGN CM070
+cp;12FC9;na=CYPRO-MINOAN SIGN CM071
+cp;12FCA;na=CYPRO-MINOAN SIGN CM072
+cp;12FCB;na=CYPRO-MINOAN SIGN CM073
+cp;12FCC;na=CYPRO-MINOAN SIGN CM074
+cp;12FCD;na=CYPRO-MINOAN SIGN CM075
+cp;12FCE;na=CYPRO-MINOAN SIGN CM075B
+cp;12FCF;na=CYPRO-MINOAN SIGN CM076
+cp;12FD0;na=CYPRO-MINOAN SIGN CM078
+cp;12FD1;na=CYPRO-MINOAN SIGN CM079
+cp;12FD2;na=CYPRO-MINOAN SIGN CM080
+cp;12FD3;na=CYPRO-MINOAN SIGN CM081
+cp;12FD4;na=CYPRO-MINOAN SIGN CM082
+cp;12FD5;na=CYPRO-MINOAN SIGN CM083
+cp;12FD6;na=CYPRO-MINOAN SIGN CM084
+cp;12FD7;na=CYPRO-MINOAN SIGN CM085
+cp;12FD8;na=CYPRO-MINOAN SIGN CM086
+cp;12FD9;na=CYPRO-MINOAN SIGN CM087
+cp;12FDA;na=CYPRO-MINOAN SIGN CM088
+cp;12FDB;na=CYPRO-MINOAN SIGN CM089
+cp;12FDC;na=CYPRO-MINOAN SIGN CM090
+cp;12FDD;na=CYPRO-MINOAN SIGN CM091
+cp;12FDE;na=CYPRO-MINOAN SIGN CM092
+cp;12FDF;na=CYPRO-MINOAN SIGN CM094
+cp;12FE0;na=CYPRO-MINOAN SIGN CM095
+cp;12FE1;na=CYPRO-MINOAN SIGN CM096
+cp;12FE2;na=CYPRO-MINOAN SIGN CM097
+cp;12FE3;na=CYPRO-MINOAN SIGN CM098
+cp;12FE4;na=CYPRO-MINOAN SIGN CM099
+cp;12FE5;na=CYPRO-MINOAN SIGN CM100
+cp;12FE6;na=CYPRO-MINOAN SIGN CM101
+cp;12FE7;na=CYPRO-MINOAN SIGN CM102
+cp;12FE8;na=CYPRO-MINOAN SIGN CM103
+cp;12FE9;na=CYPRO-MINOAN SIGN CM104
+cp;12FEA;na=CYPRO-MINOAN SIGN CM105
+cp;12FEB;na=CYPRO-MINOAN SIGN CM107
+cp;12FEC;na=CYPRO-MINOAN SIGN CM108
+cp;12FED;na=CYPRO-MINOAN SIGN CM109
+cp;12FEE;na=CYPRO-MINOAN SIGN CM110
+cp;12FEF;na=CYPRO-MINOAN SIGN CM112
+cp;12FF0;na=CYPRO-MINOAN SIGN CM114
+# Punctuation
+cp;12FF1;-Alpha;gc=Po;-IDC;-IDS;na=CYPRO-MINOAN SIGN CM301;SB=XX;WB=XX;-XIDC;-XIDS
+cp;12FF2;-Alpha;gc=Po;-IDC;-IDS;na=CYPRO-MINOAN SIGN CM302;SB=XX;WB=XX;-XIDC;-XIDS
+unassigned;12FF3..12FFF
+
block;13000..1342F;age=5.2;Alpha;blk=Egyptian_Hieroglyphs;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Egyp;vo=U;WB=LE;XIDC;XIDS
# 13000..1342F Egyptian Hieroglyphs
# A. Man and his occupations
@@ -28116,7 +28625,7 @@ cp;1319F;na=EGYPTIAN HIEROGLYPH K005
cp;131A0;na=EGYPTIAN HIEROGLYPH K006
cp;131A1;na=EGYPTIAN HIEROGLYPH K007
cp;131A2;na=EGYPTIAN HIEROGLYPH K008
-# L. Invertabrata and lesser animals
+# L. Invertebrata and lesser animals
cp;131A3;na=EGYPTIAN HIEROGLYPH L001
cp;131A4;na=EGYPTIAN HIEROGLYPH L002
cp;131A5;na=EGYPTIAN HIEROGLYPH L002A
@@ -30033,6 +30542,103 @@ unassigned;16A6A..16A6D
cp;16A6E;-Alpha;gc=Po;-IDC;-IDS;lb=BA;na=MRO DANDA;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
cp;16A6F;-Alpha;gc=Po;-IDC;-IDS;lb=BA;na=MRO DOUBLE DANDA;SB=ST;STerm;Term;WB=XX;-XIDC;-XIDS
+block;16A70..16ACF;age=14.0;Alpha;blk=Tangsa;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Tnsa;WB=LE;XIDC;XIDS
+# 16A70..16ACF Tangsa
+# Vowels
+cp;16A70;na=TANGSA LETTER OZ
+cp;16A71;na=TANGSA LETTER OC
+cp;16A72;na=TANGSA LETTER OQ
+cp;16A73;na=TANGSA LETTER OX
+cp;16A74;na=TANGSA LETTER AZ
+cp;16A75;na=TANGSA LETTER AC
+cp;16A76;na=TANGSA LETTER AQ
+cp;16A77;na=TANGSA LETTER AX
+cp;16A78;na=TANGSA LETTER VZ
+cp;16A79;na=TANGSA LETTER VC
+cp;16A7A;na=TANGSA LETTER VQ
+cp;16A7B;na=TANGSA LETTER VX
+cp;16A7C;na=TANGSA LETTER EZ
+cp;16A7D;na=TANGSA LETTER EC
+cp;16A7E;na=TANGSA LETTER EQ
+cp;16A7F;na=TANGSA LETTER EX
+cp;16A80;na=TANGSA LETTER IZ
+cp;16A81;na=TANGSA LETTER IC
+cp;16A82;na=TANGSA LETTER IQ
+cp;16A83;na=TANGSA LETTER IX
+cp;16A84;na=TANGSA LETTER UZ
+cp;16A85;na=TANGSA LETTER UC
+cp;16A86;na=TANGSA LETTER UQ
+cp;16A87;na=TANGSA LETTER UX
+cp;16A88;na=TANGSA LETTER AWZ
+cp;16A89;na=TANGSA LETTER AWC
+cp;16A8A;na=TANGSA LETTER AWQ
+cp;16A8B;na=TANGSA LETTER AWX
+cp;16A8C;na=TANGSA LETTER UIZ
+cp;16A8D;na=TANGSA LETTER UIC
+cp;16A8E;na=TANGSA LETTER UIQ
+cp;16A8F;na=TANGSA LETTER UIX
+cp;16A90;na=TANGSA LETTER FINAL NG
+cp;16A91;na=TANGSA LETTER LONG UEX
+cp;16A92;na=TANGSA LETTER SHORT UEZ
+cp;16A93;na=TANGSA LETTER SHORT AWX
+cp;16A94;na=TANGSA LETTER UEC
+cp;16A95;na=TANGSA LETTER UEZ
+cp;16A96;na=TANGSA LETTER UEQ
+cp;16A97;na=TANGSA LETTER UEX
+cp;16A98;na=TANGSA LETTER UIUZ
+cp;16A99;na=TANGSA LETTER UIUC
+cp;16A9A;na=TANGSA LETTER UIUQ
+cp;16A9B;na=TANGSA LETTER UIUX
+cp;16A9C;na=TANGSA LETTER MZ
+cp;16A9D;na=TANGSA LETTER MC
+cp;16A9E;na=TANGSA LETTER MQ
+cp;16A9F;na=TANGSA LETTER MX
+# Consonants
+cp;16AA0;na=TANGSA LETTER KA
+cp;16AA1;na=TANGSA LETTER KHA
+cp;16AA2;na=TANGSA LETTER GA
+cp;16AA3;na=TANGSA LETTER NGA
+cp;16AA4;na=TANGSA LETTER SA
+cp;16AA5;na=TANGSA LETTER YA
+cp;16AA6;na=TANGSA LETTER WA
+cp;16AA7;na=TANGSA LETTER PA
+cp;16AA8;na=TANGSA LETTER NYA
+cp;16AA9;na=TANGSA LETTER PHA
+cp;16AAA;na=TANGSA LETTER BA
+cp;16AAB;na=TANGSA LETTER MA
+cp;16AAC;na=TANGSA LETTER NA
+cp;16AAD;na=TANGSA LETTER HA
+cp;16AAE;na=TANGSA LETTER LA
+cp;16AAF;na=TANGSA LETTER HTA
+cp;16AB0;na=TANGSA LETTER TA
+cp;16AB1;na=TANGSA LETTER DA
+cp;16AB2;na=TANGSA LETTER RA
+cp;16AB3;na=TANGSA LETTER NHA
+cp;16AB4;na=TANGSA LETTER SHA
+cp;16AB5;na=TANGSA LETTER CA
+cp;16AB6;na=TANGSA LETTER TSA
+cp;16AB7;na=TANGSA LETTER GHA
+cp;16AB8;na=TANGSA LETTER HTTA
+cp;16AB9;na=TANGSA LETTER THA
+cp;16ABA;na=TANGSA LETTER XA
+cp;16ABB;na=TANGSA LETTER FA
+cp;16ABC;na=TANGSA LETTER DHA
+cp;16ABD;na=TANGSA LETTER CHA
+cp;16ABE;na=TANGSA LETTER ZA
+unassigned;16ABF
+# Digits
+cp;16AC0;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT ZERO;nt=De;nv=0;SB=NU;WB=NU;-XIDS
+cp;16AC1;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT ONE;nt=De;nv=1;SB=NU;WB=NU;-XIDS
+cp;16AC2;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT TWO;nt=De;nv=2;SB=NU;WB=NU;-XIDS
+cp;16AC3;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT THREE;nt=De;nv=3;SB=NU;WB=NU;-XIDS
+cp;16AC4;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT FOUR;nt=De;nv=4;SB=NU;WB=NU;-XIDS
+cp;16AC5;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT FIVE;nt=De;nv=5;SB=NU;WB=NU;-XIDS
+cp;16AC6;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT SIX;nt=De;nv=6;SB=NU;WB=NU;-XIDS
+cp;16AC7;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT SEVEN;nt=De;nv=7;SB=NU;WB=NU;-XIDS
+cp;16AC8;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT EIGHT;nt=De;nv=8;SB=NU;WB=NU;-XIDS
+cp;16AC9;-Alpha;gc=Nd;-IDS;lb=NU;na=TANGSA DIGIT NINE;nt=De;nv=9;SB=NU;WB=NU;-XIDS
+unassigned;16ACA..16ACF
+
block;16AD0..16AFF;age=7.0;Alpha;blk=Bassa_Vah;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Bass;WB=LE;XIDC;XIDS
# 16AD0..16AFF Bassa Vah
# Consonant letters
@@ -30485,21 +31091,21 @@ cp;16F9D;CI;Dia;gc=Lm;na=MIAO LETTER REFORMED TONE-5;WB=LE
cp;16F9E;CI;Dia;gc=Lm;na=MIAO LETTER REFORMED TONE-6;WB=LE
cp;16F9F;CI;Dia;gc=Lm;na=MIAO LETTER REFORMED TONE-8;WB=LE
-block;16FE0..16FFF;age=13.0;Alpha;blk=Ideographic_Symbols;ea=W;gc=Lm;Gr_Base;IDC;lb=NS;SB=LE;sc=Hani;vo=U;WB=Extend;XIDC
+block;16FE0..16FFF;age=13.0;Alpha;blk=Ideographic_Symbols;ea=W;gc=Lm;Gr_Base;IDC;lb=NS;SB=EX;sc=Hani;vo=U;WB=Extend;XIDC
# 16FE0..16FFF Ideographic Symbols and Punctuation
# Tangut mark
-cp;16FE0;age=9.0;CI;Ext;IDS;na=TANGUT ITERATION MARK;sc=Tang;WB=LE;XIDS
+cp;16FE0;age=9.0;CI;Ext;IDS;na=TANGUT ITERATION MARK;SB=LE;sc=Tang;WB=LE;XIDS
# Nushu mark
-cp;16FE1;age=10.0;CI;Ext;IDS;na=NUSHU ITERATION MARK;sc=Nshu;WB=LE;XIDS
+cp;16FE1;age=10.0;CI;Ext;IDS;na=NUSHU ITERATION MARK;SB=LE;sc=Nshu;WB=LE;XIDS
# Marks used in ancient Chinese texts
-cp;16FE2;age=12.0;-Alpha;bc=ON;gc=Po;-IDC;na=OLD CHINESE HOOK MARK;SB=XX;sc=Zyyy;WB=XX;-XIDC
-cp;16FE3;age=12.0;CI;Ext;IDS;na=OLD CHINESE ITERATION MARK;sc=Zyyy;WB=LE;XIDS
+cp;16FE2;age=12.0;-Alpha;bc=ON;gc=Po;-IDC;na=OLD CHINESE HOOK MARK;SB=XX;WB=XX;-XIDC
+cp;16FE3;age=12.0;CI;Ext;IDS;na=OLD CHINESE ITERATION MARK;SB=LE;WB=LE;XIDS
# Small Khitan format character
-cp;16FE4;-Alpha;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Ideo;jt=T;lb=GL;na=KHITAN SMALL SCRIPT FILLER;SB=EX;sc=Kits
+cp;16FE4;-Alpha;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;Ideo;jt=T;lb=GL;na=KHITAN SMALL SCRIPT FILLER;sc=Kits
unassigned;16FE5..16FEF;vo=U
# Combining diacritics for CJK ideographs
-cp;16FF0;ccc=6;Dia;gc=Mc;GCB=SM;lb=CM;na=VIETNAMESE ALTERNATE READING MARK CA;SB=EX
-cp;16FF1;ccc=6;Dia;gc=Mc;GCB=SM;lb=CM;na=VIETNAMESE ALTERNATE READING MARK NHAY;SB=EX
+cp;16FF0;ccc=6;Dia;gc=Mc;GCB=SM;lb=CM;na=VIETNAMESE ALTERNATE READING MARK CA
+cp;16FF1;ccc=6;Dia;gc=Mc;GCB=SM;lb=CM;na=VIETNAMESE ALTERNATE READING MARK NHAY
unassigned;16FF2..16FFF;vo=U
block;17000..187FF;Alpha;blk=Tangut;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Tang;vo=U;XIDC;XIDS
@@ -31791,10 +32397,31 @@ cp;18CD4;na=KHITAN SMALL SCRIPT CHARACTER-18CD4
cp;18CD5;na=KHITAN SMALL SCRIPT CHARACTER-18CD5
unassigned;18CD6..18CFF;vo=U
-block;18D00..18D8F;age=13.0;Alpha;blk=Tangut_Sup;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Tang;vo=U;XIDC;XIDS
+block;18D00..18D7F;age=13.0;Alpha;blk=Tangut_Sup;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Tang;vo=U;XIDC;XIDS
# 18D00..18D08 Tangut Supplement
algnamesrange;18D00..18D08;han;TANGUT IDEOGRAPH-
-unassigned;18D09..18D8F;vo=U
+unassigned;18D09..18D7F;vo=U
+
+block;1AFF0..1AFFF;age=14.0;Alpha;blk=Kana_Ext_B;CI;Dia;ea=W;gc=Lm;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Kana;vo=U;WB=KA;XIDC;XIDS
+# 1AFF0..1AFFF Kana Extended-B
+# Tone marks
+cp;1AFF0;na=KATAKANA LETTER MINNAN TONE-2
+cp;1AFF1;na=KATAKANA LETTER MINNAN TONE-3
+cp;1AFF2;na=KATAKANA LETTER MINNAN TONE-4
+cp;1AFF3;na=KATAKANA LETTER MINNAN TONE-5
+unassigned;1AFF4;vo=U
+cp;1AFF5;na=KATAKANA LETTER MINNAN TONE-7
+cp;1AFF6;na=KATAKANA LETTER MINNAN TONE-8
+# Nasalized tone marks
+cp;1AFF7;na=KATAKANA LETTER MINNAN NASALIZED TONE-1
+cp;1AFF8;na=KATAKANA LETTER MINNAN NASALIZED TONE-2
+cp;1AFF9;na=KATAKANA LETTER MINNAN NASALIZED TONE-3
+cp;1AFFA;na=KATAKANA LETTER MINNAN NASALIZED TONE-4
+cp;1AFFB;na=KATAKANA LETTER MINNAN NASALIZED TONE-5
+unassigned;1AFFC;vo=U
+cp;1AFFD;na=KATAKANA LETTER MINNAN NASALIZED TONE-7
+cp;1AFFE;na=KATAKANA LETTER MINNAN NASALIZED TONE-8
+unassigned;1AFFF;vo=U
block;1B000..1B0FF;age=10.0;Alpha;blk=Kana_Sup;ea=W;gc=Lo;Gr_Base;IDC;IDS;lb=ID;SB=LE;sc=Hira;vo=U;XIDC;XIDS
# 1B000..1B0FF Kana Supplement
@@ -32092,7 +32719,13 @@ cp;1B11B;na=HENTAIGANA LETTER WO-6
cp;1B11C;na=HENTAIGANA LETTER WO-7
cp;1B11D;na=HENTAIGANA LETTER N-MU-MO-1
cp;1B11E;na=HENTAIGANA LETTER N-MU-MO-2
-unassigned;1B11F..1B12F;vo=U
+# Historic Hiragana
+cp;1B11F;age=14.0;na=HIRAGANA LETTER ARCHAIC WU
+# Historic Katakana
+cp;1B120;age=14.0;na=KATAKANA LETTER ARCHAIC YI;sc=Kana;WB=KA
+cp;1B121;age=14.0;na=KATAKANA LETTER ARCHAIC YE;sc=Kana;WB=KA
+cp;1B122;age=14.0;na=KATAKANA LETTER ARCHAIC WU;sc=Kana;WB=KA
+unassigned;1B123..1B12F;vo=U
block;1B130..1B16F;age=12.0;Alpha;blk=Small_Kana_Ext;ea=W;gc=Lo;Gr_Base;IDC;IDS;lb=CJ;SB=LE;sc=Kana;vo=U;XIDC;XIDS
# 1B130..1B16F Small Kana Extension
@@ -32705,6 +33338,201 @@ cp;1BCA2;na=SHORTHAND FORMAT DOWN STEP;NFKC_CF=
cp;1BCA3;na=SHORTHAND FORMAT UP STEP;NFKC_CF=
unassigned;1BCA4..1BCAF
+block;1CF00..1CFCF;age=14.0;blk=Znamenny_Music;gc=So;Gr_Base;lb=AL;sc=Zyyy;vo=U
+# 1CF00..1CFCF Znamenny Musical Notation
+# Combining red marks
+cp;1CF00;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF01;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF02;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK TSATA ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF03;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF04;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK NIZKO ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF05;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK SREDNE ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF06;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF07;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK POVYSHE ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF08;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK VYSOKO ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF09;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF0A;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF0B;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF0C;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF0D;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF0E;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK TSATA ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF0F;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF10;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK NIZKO ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF11;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK SREDNE ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF12;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF13;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF14;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF15;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF16;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF17;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF18;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK TSATA S KRYZHEM;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF19;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF1A;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF1B;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF1C;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK POVYSHE STRANNO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF1D;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF1E;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF1F;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK GORAZDO VYSOKO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF20;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK ZELO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF21;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK ON;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF22;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK RAVNO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF23;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK TIKHAYA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF24;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK BORZAYA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF25;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK UDARKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF26;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK PODVERTKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF27;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK LOMKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF28;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK KUPNAYA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF29;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK KACHKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF2A;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK ZEVOK;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF2B;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK SKOBA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF2C;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK RAZSEKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF2D;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK KRYZH ON LEFT;SB=EX;sc=Zinh;WB=Extend;XIDC
+unassigned;1CF2E..1CF2F;vo=U
+# Combining black marks
+cp;1CF30;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF31;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF32;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF33;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK ZADERZHKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF34;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF35;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK OTSECHKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF36;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK PODCHASHIE;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF37;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF38;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK CHASHKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF39;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK CHASHKA POLNAYA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF3A;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK OBLACHKO;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF3B;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF3C;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK TOCHKA;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF3D;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK DVOETOCHIE;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF3E;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING ATTACHING VERTICAL OMET;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF3F;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK CURVED OMET;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF40;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING MARK KRYZH;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF41;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;SB=EX;sc=Zinh;WB=Extend;XIDC
+# Modifying marks for priznaki
+cp;1CF42;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY PRIZNAK MODIFIER LEVEL-2;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF43;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY PRIZNAK MODIFIER LEVEL-3;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF44;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF45;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY PRIZNAK MODIFIER KRYZH;SB=EX;sc=Zinh;WB=Extend;XIDC
+cp;1CF46;bc=NSM;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=ZNAMENNY PRIZNAK MODIFIER ROG;SB=EX;sc=Zinh;WB=Extend;XIDC
+unassigned;1CF47..1CF4F;vo=U
+# Znamenny neumes
+cp;1CF50;na=ZNAMENNY NEUME KRYUK
+cp;1CF51;na=ZNAMENNY NEUME KRYUK TIKHY
+cp;1CF52;na=ZNAMENNY NEUME PARAKLIT
+cp;1CF53;na=ZNAMENNY NEUME DVA V CHELNU
+cp;1CF54;na=ZNAMENNY NEUME KLYUCH
+cp;1CF55;na=ZNAMENNY NEUME ZANOZHEK
+cp;1CF56;na=ZNAMENNY NEUME STOPITSA
+cp;1CF57;na=ZNAMENNY NEUME STOPITSA S OCHKOM
+cp;1CF58;na=ZNAMENNY NEUME PEREVODKA
+cp;1CF59;na=ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA
+cp;1CF5A;na=ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA
+cp;1CF5B;na=ZNAMENNY NEUME CHELYUSTKA
+cp;1CF5C;na=ZNAMENNY NEUME PALKA
+cp;1CF5D;na=ZNAMENNY NEUME ZAPYATAYA
+cp;1CF5E;na=ZNAMENNY NEUME GOLUBCHIK BORZY
+cp;1CF5F;na=ZNAMENNY NEUME GOLUBCHIK TIKHY
+cp;1CF60;na=ZNAMENNY NEUME GOLUBCHIK MRACHNY
+cp;1CF61;na=ZNAMENNY NEUME GOLUBCHIK SVETLY
+cp;1CF62;na=ZNAMENNY NEUME GOLUBCHIK TRESVETLY
+cp;1CF63;na=ZNAMENNY NEUME VRAKHIYA PROSTAYA
+cp;1CF64;na=ZNAMENNY NEUME VRAKHIYA MRACHNAYA
+cp;1CF65;na=ZNAMENNY NEUME VRAKHIYA SVETLAYA
+cp;1CF66;na=ZNAMENNY NEUME VRAKHIYA TRESVETLAYA
+cp;1CF67;na=ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA
+cp;1CF68;na=ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA
+cp;1CF69;na=ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA
+cp;1CF6A;na=ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA
+cp;1CF6B;na=ZNAMENNY NEUME DOUBLE ZAPYATAYA
+cp;1CF6C;na=ZNAMENNY NEUME REVERSED CHELYUSTKA
+cp;1CF6D;na=ZNAMENNY NEUME DERBITSA
+cp;1CF6E;na=ZNAMENNY NEUME KHAMILO
+cp;1CF6F;na=ZNAMENNY NEUME CHASHKA
+cp;1CF70;na=ZNAMENNY NEUME PODCHASHIE
+cp;1CF71;na=ZNAMENNY NEUME SKAMEYTSA MRACHNAYA
+cp;1CF72;na=ZNAMENNY NEUME SKAMEYTSA SVETLAYA
+cp;1CF73;na=ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA
+cp;1CF74;na=ZNAMENNY NEUME SKAMEYTSA TIKHAYA
+cp;1CF75;na=ZNAMENNY NEUME DEMESTVENNY KLYUCH
+cp;1CF76;na=ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA
+cp;1CF77;na=ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA
+cp;1CF78;na=ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA
+cp;1CF79;na=ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA
+cp;1CF7A;na=ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA
+cp;1CF7B;na=ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA
+cp;1CF7C;na=ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA
+cp;1CF7D;na=ZNAMENNY NEUME SLOZHITIE
+cp;1CF7E;na=ZNAMENNY NEUME SLOZHITIE S ZAPYATOY
+cp;1CF7F;na=ZNAMENNY NEUME SLOZHITIE ZAKRYTOE
+cp;1CF80;na=ZNAMENNY NEUME SLOZHITIE S KRYZHEM
+cp;1CF81;na=ZNAMENNY NEUME KRYZH
+cp;1CF82;na=ZNAMENNY NEUME ROG
+cp;1CF83;na=ZNAMENNY NEUME FITA
+cp;1CF84;na=ZNAMENNY NEUME KOBYLA
+cp;1CF85;na=ZNAMENNY NEUME ZMEYTSA
+cp;1CF86;na=ZNAMENNY NEUME STATYA
+cp;1CF87;na=ZNAMENNY NEUME STATYA S ZAPYATOY
+cp;1CF88;na=ZNAMENNY NEUME STATYA S KRYZHEM
+cp;1CF89;na=ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM
+cp;1CF8A;na=ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY
+cp;1CF8B;na=ZNAMENNY NEUME STATYA ZAKRYTAYA
+cp;1CF8C;na=ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY
+cp;1CF8D;na=ZNAMENNY NEUME STATYA S ROGOM
+cp;1CF8E;na=ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI
+cp;1CF8F;na=ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM
+cp;1CF90;na=ZNAMENNY NEUME POLKULIZMY
+cp;1CF91;na=ZNAMENNY NEUME STATYA NEPOSTOYANNAYA
+cp;1CF92;na=ZNAMENNY NEUME STRELA PROSTAYA
+cp;1CF93;na=ZNAMENNY NEUME STRELA MRACHNOTIKHAYA
+cp;1CF94;na=ZNAMENNY NEUME STRELA KRYZHEVAYA
+cp;1CF95;na=ZNAMENNY NEUME STRELA POLUPOVODNAYA
+cp;1CF96;na=ZNAMENNY NEUME STRELA POVODNAYA
+cp;1CF97;na=ZNAMENNY NEUME STRELA NEPOSTOYANNAYA
+cp;1CF98;na=ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA
+cp;1CF99;na=ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA
+cp;1CF9A;na=ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA
+cp;1CF9B;na=ZNAMENNY NEUME STRELA DVOECHELNAYA
+cp;1CF9C;na=ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA
+cp;1CF9D;na=ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA
+cp;1CF9E;na=ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA
+cp;1CF9F;na=ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA
+cp;1CFA0;na=ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA
+cp;1CFA1;na=ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA
+cp;1CFA2;na=ZNAMENNY NEUME STRELA GROMNAYA
+cp;1CFA3;na=ZNAMENNY NEUME STRELA GROMOPOVODNAYA
+cp;1CFA4;na=ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA
+cp;1CFA5;na=ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA
+cp;1CFA6;na=ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA
+cp;1CFA7;na=ZNAMENNY NEUME MECHIK
+cp;1CFA8;na=ZNAMENNY NEUME MECHIK POVODNY
+cp;1CFA9;na=ZNAMENNY NEUME MECHIK KLYUCHEVOY
+cp;1CFAA;na=ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY
+cp;1CFAB;na=ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY
+cp;1CFAC;na=ZNAMENNY NEUME STRELA TRYASOGLASNAYA
+cp;1CFAD;na=ZNAMENNY NEUME STRELA TRYASOPOVODNAYA
+cp;1CFAE;na=ZNAMENNY NEUME STRELA TRYASOSTRELNAYA
+cp;1CFAF;na=ZNAMENNY NEUME OSOKA
+cp;1CFB0;na=ZNAMENNY NEUME OSOKA SVETLAYA
+cp;1CFB1;na=ZNAMENNY NEUME OSOKA TRESVETLAYA
+cp;1CFB2;na=ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA
+cp;1CFB3;na=ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA
+cp;1CFB4;na=ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA
+cp;1CFB5;na=ZNAMENNY NEUME STRELA KRYUKOVAYA
+cp;1CFB6;na=ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA
+cp;1CFB7;na=ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA
+cp;1CFB8;na=ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA
+cp;1CFB9;na=ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA
+cp;1CFBA;na=ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA
+cp;1CFBB;na=ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA
+cp;1CFBC;na=ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA
+cp;1CFBD;na=ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA
+cp;1CFBE;na=ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA
+cp;1CFBF;na=ZNAMENNY NEUME KUFISMA
+cp;1CFC0;na=ZNAMENNY NEUME OBLAKO
+cp;1CFC1;na=ZNAMENNY NEUME DUDA
+cp;1CFC2;na=ZNAMENNY NEUME NEMKA
+cp;1CFC3;na=ZNAMENNY NEUME PAUK
+unassigned;1CFC4..1CFCF;vo=U
+
block;1D000..1D0FF;age=3.1;blk=Byzantine_Music;gc=So;Gr_Base;lb=AL;sc=Zyyy;vo=U
# 1D000..1D0FF Byzantine Musical Symbols
# Prosodies (Prosodics)
@@ -33242,7 +34070,10 @@ cp;1D1E6;age=8.0;na=MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN
cp;1D1E7;age=8.0;na=MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP
# Accidental
cp;1D1E8;age=8.0;na=MUSICAL SYMBOL KIEVAN FLAT SIGN
-unassigned;1D1E9..1D1FF;vo=U
+# Accidentals for quarter tones
+cp;1D1E9;age=14.0;bc=ON;na=MUSICAL SYMBOL SORI
+cp;1D1EA;age=14.0;bc=ON;na=MUSICAL SYMBOL KORON
+unassigned;1D1EB..1D1FF;vo=U
block;1D200..1D24F;age=4.1;bc=ON;blk=Ancient_Greek_Music;gc=So;Gr_Base;lb=AL;sc=Grek
# 1D200..1D24F Ancient Greek Musical Notation
@@ -35218,6 +36049,48 @@ cp;1DAAD;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=SIGNWRITING RO
cp;1DAAE;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=SIGNWRITING ROTATION MODIFIER-15;SB=EX;WB=Extend;XIDC
cp;1DAAF;bc=NSM;CI;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;IDC;jt=T;lb=CM;na=SIGNWRITING ROTATION MODIFIER-16;SB=EX;WB=Extend;XIDC
+block;1DF00..1DFFF;age=14.0;Alpha;blk=Latin_Ext_G;Cased;gc=Ll;Gr_Base;IDC;IDS;lb=AL;Lower;SB=LO;sc=Latn;WB=LE;XIDC;XIDS
+# 1DF00..1DFFF Latin Extended-G
+# Extended IPA for disordered speech
+cp;1DF00;na=LATIN SMALL LETTER FENG DIGRAPH WITH TRILL
+cp;1DF01;na=LATIN SMALL LETTER REVERSED SCRIPT G
+cp;1DF02;na=LATIN LETTER SMALL CAPITAL TURNED G
+cp;1DF03;na=LATIN SMALL LETTER REVERSED K
+cp;1DF04;na=LATIN LETTER SMALL CAPITAL L WITH BELT
+cp;1DF05;na=LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK
+cp;1DF06;na=LATIN SMALL LETTER TURNED Y WITH BELT
+cp;1DF07;na=LATIN SMALL LETTER REVERSED ENG
+# IPA extensions
+cp;1DF08;na=LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK
+cp;1DF09;na=LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK
+cp;1DF0A;-Cased;gc=Lo;-Lower;na=LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;SB=LE
+# Clicks
+cp;1DF0B;na=LATIN SMALL LETTER ESH WITH DOUBLE BAR
+cp;1DF0C;na=LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL
+cp;1DF0D;na=LATIN SMALL LETTER TURNED T WITH CURL
+cp;1DF0E;na=LATIN LETTER INVERTED GLOTTAL STOP WITH CURL
+cp;1DF0F;na=LATIN LETTER STRETCHED C WITH CURL
+cp;1DF10;na=LATIN LETTER SMALL CAPITAL TURNED K
+# Lateral
+cp;1DF11;na=LATIN SMALL LETTER L WITH FISHHOOK
+# Letters with palatal hooks
+cp;1DF12;na=LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK
+cp;1DF13;na=LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK
+cp;1DF14;na=LATIN SMALL LETTER ENG WITH PALATAL HOOK
+cp;1DF15;na=LATIN SMALL LETTER TURNED R WITH PALATAL HOOK
+cp;1DF16;na=LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK
+cp;1DF17;na=LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK
+cp;1DF18;na=LATIN SMALL LETTER EZH WITH PALATAL HOOK
+# Letters with retroflex hooks
+cp;1DF19;na=LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK
+cp;1DF1A;na=LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;SD
+cp;1DF1B;na=LATIN SMALL LETTER O WITH RETROFLEX HOOK
+cp;1DF1C;na=LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK
+cp;1DF1D;na=LATIN SMALL LETTER C WITH RETROFLEX HOOK
+# IPA extension
+cp;1DF1E;na=LATIN SMALL LETTER S WITH CURL
+unassigned;1DF1F..1DFFF
+
block;1E000..1E02F;age=9.0;Alpha;bc=NSM;blk=Glagolitic_Sup;ccc=230;CI;gc=Mn;GCB=EX;Gr_Ext;IDC;jt=T;lb=CM;SB=EX;sc=Glag;WB=Extend;XIDC
# 1E000..1E02F Glagolitic Supplement
# Combining letters
@@ -35350,6 +36223,44 @@ unassigned;1E14A..1E14D
cp;1E14E;na=NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
cp;1E14F;-Alpha;gc=So;-IDC;-IDS;na=NYIAKENG PUACHUE HMONG CIRCLED CA;SB=XX;WB=XX;-XIDC;-XIDS
+block;1E290..1E2BF;age=14.0;Alpha;blk=Toto;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Toto;WB=LE;XIDC;XIDS
+# 1E290..1E2BF Toto
+# Basic consonants
+cp;1E290;na=TOTO LETTER PA
+cp;1E291;na=TOTO LETTER BA
+cp;1E292;na=TOTO LETTER TA
+cp;1E293;na=TOTO LETTER DA
+cp;1E294;na=TOTO LETTER KA
+cp;1E295;na=TOTO LETTER GA
+cp;1E296;na=TOTO LETTER MA
+cp;1E297;na=TOTO LETTER NA
+cp;1E298;na=TOTO LETTER NGA
+cp;1E299;na=TOTO LETTER SA
+cp;1E29A;na=TOTO LETTER CHA
+cp;1E29B;na=TOTO LETTER YA
+cp;1E29C;na=TOTO LETTER WA
+cp;1E29D;na=TOTO LETTER JA
+cp;1E29E;na=TOTO LETTER HA
+cp;1E29F;na=TOTO LETTER RA
+cp;1E2A0;na=TOTO LETTER LA
+# Basic vowels
+cp;1E2A1;na=TOTO LETTER I
+cp;1E2A2;na=TOTO LETTER BREATHY I
+cp;1E2A3;na=TOTO LETTER IU
+cp;1E2A4;na=TOTO LETTER BREATHY IU
+cp;1E2A5;na=TOTO LETTER U
+cp;1E2A6;na=TOTO LETTER E
+cp;1E2A7;na=TOTO LETTER BREATHY E
+cp;1E2A8;na=TOTO LETTER EO
+cp;1E2A9;na=TOTO LETTER BREATHY EO
+cp;1E2AA;na=TOTO LETTER O
+cp;1E2AB;na=TOTO LETTER AE
+cp;1E2AC;na=TOTO LETTER BREATHY AE
+cp;1E2AD;na=TOTO LETTER A
+# Sign
+cp;1E2AE;-Alpha;bc=NSM;ccc=230;CI;Dia;gc=Mn;GCB=EX;-Gr_Base;Gr_Ext;-IDS;jt=T;lb=CM;na=TOTO SIGN RISING TONE;SB=EX;WB=Extend;-XIDS
+unassigned;1E2AF..1E2BF
+
block;1E2C0..1E2FF;age=12.0;Alpha;blk=Wancho;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Wcho;WB=LE;XIDC;XIDS
# 1E2C0..1E2FF Wancho
# Letters
@@ -35417,6 +36328,42 @@ unassigned;1E2FA..1E2FE
# Currency symbol
cp;1E2FF;-Alpha;bc=ET;gc=Sc;-IDC;-IDS;lb=PR;na=WANCHO NGUN SIGN;SB=XX;WB=XX;-XIDC;-XIDS
+block;1E7E0..1E7FF;age=14.0;Alpha;blk=Ethiopic_Ext_B;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Ethi;WB=LE;XIDC;XIDS
+# 1E7E0..1E7FF Ethiopic Extended-B
+# Syllables for Gurage
+cp;1E7E0;na=ETHIOPIC SYLLABLE HHYA
+cp;1E7E1;na=ETHIOPIC SYLLABLE HHYU
+cp;1E7E2;na=ETHIOPIC SYLLABLE HHYI
+cp;1E7E3;na=ETHIOPIC SYLLABLE HHYAA
+cp;1E7E4;na=ETHIOPIC SYLLABLE HHYEE
+cp;1E7E5;na=ETHIOPIC SYLLABLE HHYE
+cp;1E7E6;na=ETHIOPIC SYLLABLE HHYO
+unassigned;1E7E7
+cp;1E7E8;na=ETHIOPIC SYLLABLE GURAGE HHWA
+cp;1E7E9;na=ETHIOPIC SYLLABLE HHWI
+cp;1E7EA;na=ETHIOPIC SYLLABLE HHWEE
+cp;1E7EB;na=ETHIOPIC SYLLABLE HHWE
+unassigned;1E7EC
+cp;1E7ED;na=ETHIOPIC SYLLABLE GURAGE MWI
+cp;1E7EE;na=ETHIOPIC SYLLABLE GURAGE MWEE
+unassigned;1E7EF
+cp;1E7F0;na=ETHIOPIC SYLLABLE GURAGE QWI
+cp;1E7F1;na=ETHIOPIC SYLLABLE GURAGE QWEE
+cp;1E7F2;na=ETHIOPIC SYLLABLE GURAGE QWE
+cp;1E7F3;na=ETHIOPIC SYLLABLE GURAGE BWI
+cp;1E7F4;na=ETHIOPIC SYLLABLE GURAGE BWEE
+cp;1E7F5;na=ETHIOPIC SYLLABLE GURAGE KWI
+cp;1E7F6;na=ETHIOPIC SYLLABLE GURAGE KWEE
+cp;1E7F7;na=ETHIOPIC SYLLABLE GURAGE KWE
+cp;1E7F8;na=ETHIOPIC SYLLABLE GURAGE GWI
+cp;1E7F9;na=ETHIOPIC SYLLABLE GURAGE GWEE
+cp;1E7FA;na=ETHIOPIC SYLLABLE GURAGE GWE
+cp;1E7FB;na=ETHIOPIC SYLLABLE GURAGE FWI
+cp;1E7FC;na=ETHIOPIC SYLLABLE GURAGE FWEE
+cp;1E7FD;na=ETHIOPIC SYLLABLE GURAGE PWI
+cp;1E7FE;na=ETHIOPIC SYLLABLE GURAGE PWEE
+unassigned;1E7FF
+
block;1E800..1E8DF;age=7.0;Alpha;bc=R;blk=Mende_Kikakui;gc=Lo;Gr_Base;IDC;IDS;lb=AL;SB=LE;sc=Mend;WB=LE;XIDC;XIDS
# 1E800..1E8DF Mende Kikakui
# Syllables in k-
@@ -37785,8 +38732,11 @@ cp;1F6D4;age=10.0;ea=N;-Emoji;-EPres;na=PAGODA
cp;1F6D5;age=12.0;na=HINDU TEMPLE
cp;1F6D6;age=13.0;na=HUT
cp;1F6D7;age=13.0;na=ELEVATOR
-unassigned;1F6D8..1F6DF;ExtPict;lb=ID;vo=U
+unassigned;1F6D8..1F6DC;ExtPict;lb=ID;vo=U
# Miscellaneous symbols
+cp;1F6DD;age=14.0;na=PLAYGROUND SLIDE
+cp;1F6DE;age=14.0;na=WHEEL
+cp;1F6DF;age=14.0;na=RING BUOY
cp;1F6E0;age=7.0;ea=N;-EPres;na=HAMMER AND WRENCH
cp;1F6E1;age=7.0;ea=N;-EPres;na=SHIELD
cp;1F6E2;age=7.0;ea=N;-EPres;na=OIL DRUM
@@ -38083,7 +39033,10 @@ cp;1F7E8;age=12.0;ea=W;Emoji;EPres;ExtPict;lb=ID;na=LARGE YELLOW SQUARE
cp;1F7E9;age=12.0;ea=W;Emoji;EPres;ExtPict;lb=ID;na=LARGE GREEN SQUARE
cp;1F7EA;age=12.0;ea=W;Emoji;EPres;ExtPict;lb=ID;na=LARGE PURPLE SQUARE
cp;1F7EB;age=12.0;ea=W;Emoji;EPres;ExtPict;lb=ID;na=LARGE BROWN SQUARE
-unassigned;1F7EC..1F7FF;ExtPict;lb=ID;vo=U
+unassigned;1F7EC..1F7EF;ExtPict;lb=ID;vo=U
+# Miscellaneous symbol
+cp;1F7F0;age=14.0;ea=W;Emoji;EPres;ExtPict;lb=ID;na=HEAVY EQUALS SIGN
+unassigned;1F7F1..1F7FF;ExtPict;lb=ID;vo=U
block;1F800..1F8FF;age=7.0;bc=ON;blk=Sup_Arrows_C;gc=So;Gr_Base;lb=AL;sc=Zyyy
# 1F800..1F8FF Supplemental Arrows-C
@@ -38394,7 +39347,7 @@ cp;1F975;age=11.0;na=OVERHEATED FACE
cp;1F976;age=11.0;na=FREEZING FACE
cp;1F977;age=13.0;EBase;lb=EB;na=NINJA
cp;1F978;age=13.0;na=DISGUISED FACE
-unassigned;1F979;ExtPict;lb=ID;vo=U
+cp;1F979;age=14.0;na=FACE HOLDING BACK TEARS
cp;1F97A;age=11.0;na=FACE WITH PLEADING EYES
# Clothing
cp;1F97B;age=12.0;na=SARI
@@ -38485,7 +39438,8 @@ cp;1F9C8;age=12.0;na=BUTTER
cp;1F9C9;age=12.0;na=MATE DRINK
cp;1F9CA;age=12.0;na=ICE CUBE
cp;1F9CB;age=13.0;na=BUBBLE TEA
-unassigned;1F9CC;ExtPict;lb=ID;vo=U
+# Fantasy being
+cp;1F9CC;age=14.0;na=TROLL
# Portrait and accessibility symbols
cp;1F9CD;age=12.0;EBase;lb=EB;na=STANDING PERSON
cp;1F9CE;age=12.0;EBase;lb=EB;na=KNEELING PERSON
@@ -38672,7 +39626,9 @@ unassigned;1FA75..1FA77;ExtPict;lb=ID;vo=U
cp;1FA78;age=12.0;na=DROP OF BLOOD
cp;1FA79;age=12.0;na=ADHESIVE BANDAGE
cp;1FA7A;age=12.0;na=STETHOSCOPE
-unassigned;1FA7B..1FA7F;ExtPict;lb=ID;vo=U
+cp;1FA7B;age=14.0;na=X-RAY
+cp;1FA7C;age=14.0;na=CRUTCH
+unassigned;1FA7D..1FA7F;ExtPict;lb=ID;vo=U
# Toys and sport symbols
cp;1FA80;age=12.0;na=YO-YO
cp;1FA81;age=12.0;na=KITE
@@ -38708,7 +39664,11 @@ cp;1FAA5;na=TOOTHBRUSH
cp;1FAA6;na=HEADSTONE
cp;1FAA7;na=PLACARD
cp;1FAA8;na=ROCK
-unassigned;1FAA9..1FAAF;ExtPict;lb=ID;vo=U
+cp;1FAA9;age=14.0;na=MIRROR BALL
+cp;1FAAA;age=14.0;na=IDENTIFICATION CARD
+cp;1FAAB;age=14.0;na=LOW BATTERY
+cp;1FAAC;age=14.0;na=HAMSA
+unassigned;1FAAD..1FAAF;ExtPict;lb=ID;vo=U
# Animals and nature
cp;1FAB0;na=FLY
cp;1FAB1;na=WORM
@@ -38717,13 +39677,20 @@ cp;1FAB3;na=COCKROACH
cp;1FAB4;na=POTTED PLANT
cp;1FAB5;na=WOOD
cp;1FAB6;na=FEATHER
-unassigned;1FAB7..1FABF;ExtPict;lb=ID;vo=U
+cp;1FAB7;age=14.0;na=LOTUS
+cp;1FAB8;age=14.0;na=CORAL
+cp;1FAB9;age=14.0;na=EMPTY NEST
+cp;1FABA;age=14.0;na=NEST WITH EGGS
+unassigned;1FABB..1FABF;ExtPict;lb=ID;vo=U
# Body parts
cp;1FAC0;na=ANATOMICAL HEART
cp;1FAC1;na=LUNGS
# People
cp;1FAC2;na=PEOPLE HUGGING
-unassigned;1FAC3..1FACF;ExtPict;lb=ID;vo=U
+cp;1FAC3;age=14.0;EBase;lb=EB;na=PREGNANT MAN
+cp;1FAC4;age=14.0;EBase;lb=EB;na=PREGNANT PERSON
+cp;1FAC5;age=14.0;EBase;lb=EB;na=PERSON WITH CROWN
+unassigned;1FAC6..1FACF;ExtPict;lb=ID;vo=U
# Food and drink
cp;1FAD0;na=BLUEBERRIES
cp;1FAD1;na=BELL PEPPER
@@ -38732,7 +39699,30 @@ cp;1FAD3;na=FLATBREAD
cp;1FAD4;na=TAMALE
cp;1FAD5;na=FONDUE
cp;1FAD6;na=TEAPOT
-unassigned;1FAD7..1FAFF;ExtPict;lb=ID;vo=U
+cp;1FAD7;age=14.0;na=POURING LIQUID
+cp;1FAD8;age=14.0;na=BEANS
+cp;1FAD9;age=14.0;na=JAR
+unassigned;1FADA..1FADF;ExtPict;lb=ID;vo=U
+# Faces
+cp;1FAE0;age=14.0;na=MELTING FACE
+cp;1FAE1;age=14.0;na=SALUTING FACE
+cp;1FAE2;age=14.0;na=FACE WITH OPEN EYES AND HAND OVER MOUTH
+cp;1FAE3;age=14.0;na=FACE WITH PEEKING EYE
+cp;1FAE4;age=14.0;na=FACE WITH DIAGONAL MOUTH
+cp;1FAE5;age=14.0;na=DOTTED LINE FACE
+# Emotion
+cp;1FAE6;age=14.0;na=BITING LIP
+cp;1FAE7;age=14.0;na=BUBBLES
+unassigned;1FAE8..1FAEF;ExtPict;lb=ID;vo=U
+# Hand symbols
+cp;1FAF0;age=14.0;EBase;lb=EB;na=HAND WITH INDEX FINGER AND THUMB CROSSED
+cp;1FAF1;age=14.0;EBase;lb=EB;na=RIGHTWARDS HAND
+cp;1FAF2;age=14.0;EBase;lb=EB;na=LEFTWARDS HAND
+cp;1FAF3;age=14.0;EBase;lb=EB;na=PALM DOWN HAND
+cp;1FAF4;age=14.0;EBase;lb=EB;na=PALM UP HAND
+cp;1FAF5;age=14.0;EBase;lb=EB;na=INDEX POINTING AT THE VIEWER
+cp;1FAF6;age=14.0;EBase;lb=EB;na=HEART HANDS
+unassigned;1FAF7..1FAFF;ExtPict;lb=ID;vo=U
block;1FB00..1FBFF;age=13.0;bc=ON;blk=Symbols_For_Legacy_Computing;gc=So;Gr_Base;lb=AL;sc=Zyyy
# 1FB00..1FBFF Symbols for Legacy Computing
@@ -38975,8 +39965,8 @@ unassigned;1FF80..1FFFD;ExtPict;lb=ID
unassigned;1FFFE..1FFFF;age=2.0;bc=BN;NChar
block;20000..2A6DF;age=3.1;Alpha;blk=CJK_Ext_B;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
-# 20000..2A6DD CJK Unified Ideographs Extension B
-algnamesrange;20000..2A6DD;han;CJK UNIFIED IDEOGRAPH-
+# 20000..2A6DF CJK Unified Ideographs Extension B
+algnamesrange;20000..2A6DF;han;CJK UNIFIED IDEOGRAPH-
cp;20001;nt=Nu;nv=7
cp;20064;nt=Nu;nv=4
cp;200E2;nt=Nu;nv=4
@@ -38993,15 +39983,17 @@ cp;22998;nt=Nu;nv=3
cp;23B1B;nt=Nu;nv=3
cp;2626D;nt=Nu;nv=4
cp;2A6D7..2A6DD;age=13.0
-unassigned;2A6DE..2A6DF;ea=W;lb=ID;vo=U
+cp;2A6DE..2A6DF;age=14.0
# No block
unassigned;2A6E0..2A6FF;ea=W;lb=ID;vo=U
-block;2A700..2B73F;age=5.2;Alpha;blk=CJK_Ext_C;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
-# 2A700..2B734 CJK Unified Ideographs Extension C
-algnamesrange;2A700..2B734;han;CJK UNIFIED IDEOGRAPH-
-unassigned;2B735..2B73F;ea=W;lb=ID;vo=U
+block;2A700..2B73F;Alpha;blk=CJK_Ext_C;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
+# 2A700..2B738 CJK Unified Ideographs Extension C
+algnamesrange;2A700..2B738;han;CJK UNIFIED IDEOGRAPH-
+cp;2A700..2B734;age=5.2
+cp;2B735..2B738;age=14.0
+unassigned;2B739..2B73F;ea=W;lb=ID;vo=U
block;2B740..2B81F;age=6.0;Alpha;blk=CJK_Ext_D;ea=W;gc=Lo;Gr_Base;IDC;Ideo;IDS;lb=ID;SB=LE;sc=Hani;UIdeo;vo=U;XIDC;XIDS
# 2B740..2B81D CJK Unified Ideographs Extension D
diff --git a/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.h b/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.h
index ac6bfe327e8..7f033a72834 100644
--- a/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.h
+++ b/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.h
@@ -62,7 +62,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+ virtual inline UClassID getDynamicClassID() const override { return getStaticClassID(); }
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/extra/uconv/resources/root.txt b/Build/source/libs/icu/icu-src/source/extra/uconv/resources/root.txt
index 9b241e08cff..3ed0252a43b 100644
--- a/Build/source/libs/icu/icu-src/source/extra/uconv/resources/root.txt
+++ b/Build/source/libs/icu/icu-src/source/extra/uconv/resources/root.txt
@@ -83,7 +83,7 @@ root
cantSetOutBinMode { "Couldn't set standard output to binary mode." }
cantOpenFromCodeset { "Couldn''t open converter for original encoding {0}: {1}.\n" } // 0:set, 1: err
- cantOpenToCodeset { "Couldn''t open converteur for destination encoding {0}: {1}.\n" } // 0: set, 1: err
+ cantOpenToCodeset { "Couldn''t open converter for destination encoding {0}: {1}.\n" } // 0: set, 1: err
cantCreateTranslit { "Couldn''t create transliteration \"{0}\": {1}.\n" } // 0: set, 1: err
cantCreateTranslitParseErr { "Couldn''t create transliteration \"{0}\": {1}, line {2}, offset {3}.\n" } // 0: set, 1: err, 2: line, 3: offset
@@ -106,7 +106,7 @@ root
U_USING_FALLBACK_ERROR { "Using fallback data" }
U_USING_DEFAULT_ERROR { "Using default data" }
- U_ZERO_ERROR { "No error has occured" }
+ U_ZERO_ERROR { "No error has occurred" }
U_ILLEGAL_ARGUMENT_ERROR { "Illegal argument" }
U_MISSING_RESOURCE_ERROR { "A resource was missing" }
U_INVALID_FORMAT_ERROR { "Invalid format" }
diff --git a/Build/source/libs/icu/icu-src/source/i18n/BUILD b/Build/source/libs/icu/icu-src/source/i18n/BUILD
new file mode 100644
index 00000000000..2d85cdb180e
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/i18n/BUILD
@@ -0,0 +1,130 @@
+# © 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# This file defines Bazel targets for a subset of the ICU4C "i18n" library header and source files.
+# The configuration of dependencies among targets is strongly assisted by the
+# file in depstest that maintains such information, at
+# icu4c/source/test/depstest/dependencies.txt .
+
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+# When compiling code in the `common` dir, the constant
+# `U_I18n_IMPLEMENTATION` needs to be defined. See
+# https://unicode-org.github.io/icu/userguide/howtouseicu#c-with-your-own-build-system .
+
+# If linker errors occur, then this may be a sign that the dependencies were
+# not specified correctly. Use dependencies.txt in depstest for assistance. See
+# https://stackoverflow.com/q/66111709/2077918 .
+
+cc_library(
+ name = "headers",
+ hdrs = glob([
+ "unicode/*.h", # public
+ "*.h", # internal
+ ]),
+ # We need to add includes in order to preserve existing source files'
+ # include directives that use traditional paths, not paths relative to
+ # Bazel workspace:
+ # https://stackoverflow.com/a/65635893/2077918
+ includes = ["."],
+ local_defines = [
+ "U_I18N_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "collation",
+ srcs = [
+ "bocsu.cpp",
+ "coleitr.cpp",
+ "coll.cpp",
+ "collation.cpp",
+ "collationcompare.cpp",
+ "collationdata.cpp",
+ "collationdatareader.cpp",
+ "collationdatawriter.cpp",
+ "collationfastlatin.cpp",
+ # collationfcd.cpp is generated by genuca;
+ # probably hard to build genuca without depending on the old version.
+ "collationfcd.cpp",
+ "collationiterator.cpp",
+ "collationkeys.cpp",
+ "collationroot.cpp",
+ "collationrootelements.cpp",
+ "collationsets.cpp",
+ "collationsettings.cpp",
+ "collationtailoring.cpp",
+ "rulebasedcollator.cpp",
+ "sortkey.cpp",
+ "ucol.cpp",
+ "ucol_res.cpp",
+ "ucol_sit.cpp",
+ "ucoleitr.cpp",
+ "uitercollationiterator.cpp",
+ "utf16collationiterator.cpp",
+ "utf8collationiterator.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":headers",
+ ":uclean_i18n",
+ "//icu4c/source/common:bytestream",
+ "//icu4c/source/common:normalizer2",
+ "//icu4c/source/common:platform",
+ "//icu4c/source/common:propname",
+ "//icu4c/source/common:resourcebundle",
+ "//icu4c/source/common:service_registration",
+ "//icu4c/source/common:ucharstrieiterator",
+ "//icu4c/source/common:uiter",
+ "//icu4c/source/common:ulist",
+ "//icu4c/source/common:unifiedcache",
+ "//icu4c/source/common:uset",
+ "//icu4c/source/common:usetiter",
+ "//icu4c/source/common:utrie2",
+ "//icu4c/source/common:uvector32",
+ "//icu4c/source/common:uvector64",
+ ],
+ local_defines = [
+ "U_I18N_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "collation_builder",
+ srcs = [
+ "collationbuilder.cpp",
+ "collationdatabuilder.cpp",
+ "collationfastlatinbuilder.cpp",
+ "collationruleparser.cpp",
+ "collationweights.cpp",
+ ],
+ includes = ["."],
+ deps = [
+ ":collation",
+ "//icu4c/source/common:canonical_iterator",
+ "//icu4c/source/common:ucharstriebuilder",
+ "//icu4c/source/common:uset_props"
+ ],
+ local_defines = [
+ "U_I18N_IMPLEMENTATION",
+ ],
+)
+
+cc_library(
+ name = "uclean_i18n",
+ srcs = [
+ "ucln_in.cpp",
+ ],
+ hdrs = ["ucln_in.h"],
+ includes = ["."],
+ deps = [
+ "//icu4c/source/common:platform",
+ ],
+ local_defines = [
+ "U_I18N_IMPLEMENTATION",
+ ],
+)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/alphaindex.cpp b/Build/source/libs/icu/icu-src/source/i18n/alphaindex.cpp
index 9c312bd8e67..34407f677a6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/alphaindex.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/alphaindex.cpp
@@ -293,6 +293,7 @@ int32_t AlphabeticIndex::getRecordCount(UErrorCode &status) {
}
void AlphabeticIndex::initLabels(UVector &indexCharacters, UErrorCode &errorCode) const {
+ U_ASSERT(indexCharacters.hasDeleter());
const Normalizer2 *nfkdNormalizer = Normalizer2::getNFKDInstance(errorCode);
if (U_FAILURE(errorCode)) { return; }
@@ -305,7 +306,7 @@ void AlphabeticIndex::initLabels(UVector &indexCharacters, UErrorCode &errorCode
// That is, we might have c, ch, d, where "ch" sorts just like "c", "h".
// We filter out those cases.
UnicodeSetIterator iter(*initialLabels_);
- while (iter.next()) {
+ while (U_SUCCESS(errorCode) && iter.next()) {
const UnicodeString *item = &iter.getString();
LocalPointer<UnicodeString> ownedItem;
UBool checkDistinct;
@@ -455,7 +456,7 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
- bucketList->addElement(bucket, errorCode);
+ bucketList->addElementX(bucket, errorCode);
if (U_FAILURE(errorCode)) { return NULL; }
UnicodeString temp;
@@ -485,7 +486,7 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
- bucketList->addElement(bucket, errorCode);
+ bucketList->addElementX(bucket, errorCode);
}
}
// Add a bucket with the current label.
@@ -494,7 +495,7 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
- bucketList->addElement(bucket, errorCode);
+ bucketList->addElementX(bucket, errorCode);
// Remember ASCII and Pinyin buckets for Pinyin redirects.
UChar c;
if (current.length() == 1 && 0x41 <= (c = current.charAt(0)) && c <= 0x5A) { // A-Z
@@ -533,7 +534,7 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const {
return NULL;
}
bucket->displayBucket_ = singleBucket;
- bucketList->addElement(bucket, errorCode);
+ bucketList->addElementX(bucket, errorCode);
hasInvisibleBuckets = TRUE;
break;
}
@@ -557,7 +558,7 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
- bucketList->addElement(bucket, errorCode); // final
+ bucketList->addElementX(bucket, errorCode); // final
if (hasPinyin) {
// Redirect Pinyin buckets.
@@ -610,7 +611,7 @@ BucketList *AlphabeticIndex::createBucketList(UErrorCode &errorCode) const {
for (int32_t j = 0; j < bucketList->size(); ++j) {
bucket = getBucket(*bucketList, j);
if (bucket->displayBucket_ == NULL) {
- publicBucketList->addElement(bucket, errorCode);
+ publicBucketList->addElementX(bucket, errorCode);
}
}
if (U_FAILURE(errorCode)) { return NULL; }
@@ -684,7 +685,7 @@ void AlphabeticIndex::initBuckets(UErrorCode &errorCode) {
return;
}
}
- bucket->records_->addElement(r, errorCode);
+ bucket->records_->addElementX(r, errorCode);
}
}
@@ -799,13 +800,13 @@ UnicodeString AlphabeticIndex::separated(const UnicodeString &item) {
}
-UBool AlphabeticIndex::operator==(const AlphabeticIndex& /* other */) const {
- return FALSE;
+bool AlphabeticIndex::operator==(const AlphabeticIndex& /* other */) const {
+ return false;
}
-UBool AlphabeticIndex::operator!=(const AlphabeticIndex& /* other */) const {
- return FALSE;
+bool AlphabeticIndex::operator!=(const AlphabeticIndex& /* other */) const {
+ return false;
}
@@ -1015,7 +1016,7 @@ UVector *AlphabeticIndex::firstStringsInScript(UErrorCode &status) {
status = U_MEMORY_ALLOCATION_ERROR;
return NULL;
}
- dest->addElement(s, status);
+ dest->addElementX(s, status);
}
return dest.orphan();
}
@@ -1078,7 +1079,7 @@ AlphabeticIndex & AlphabeticIndex::addRecord(const UnicodeString &name, const vo
status = U_MEMORY_ALLOCATION_ERROR;
return *this;
}
- inputList_->addElement(r, status);
+ inputList_->addElementX(r, status);
clearBuckets();
//std::string ss;
//std::string ss2;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/anytrans.h b/Build/source/libs/icu/icu-src/source/i18n/anytrans.h
index 627dee3c814..67ebb2e7d2f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/anytrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/anytrans.h
@@ -66,18 +66,18 @@ public:
/**
* Transliterator API.
*/
- virtual AnyTransliterator* clone() const;
+ virtual AnyTransliterator* clone() const override;
/**
* Implements {@link Transliterator#handleTransliterate}.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& index,
- UBool incremental) const;
+ UBool incremental) const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/astro.cpp b/Build/source/libs/icu/icu-src/source/i18n/astro.cpp
index f17b6db9128..6dc463b4ca4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/astro.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/astro.cpp
@@ -379,7 +379,7 @@ double CalendarAstronomer::getJulianCentury() {
*/
double CalendarAstronomer::getGreenwichSidereal() {
if (isINVALID(siderealTime)) {
- // See page 86 of "Practial Astronomy with your Calculator",
+ // See page 86 of "Practical Astronomy with your Calculator",
// by Peter Duffet-Smith, for details on the algorithm.
double UT = normalize(fTime/(double)HOUR_MS, 24.);
@@ -460,7 +460,7 @@ CalendarAstronomer::Equatorial& CalendarAstronomer::eclipticToEquatorial(Calenda
*/
CalendarAstronomer::Equatorial& CalendarAstronomer::eclipticToEquatorial(CalendarAstronomer::Equatorial& result, double eclipLong, double eclipLat)
{
- // See page 42 of "Practial Astronomy with your Calculator",
+ // See page 42 of "Practical Astronomy with your Calculator",
// by Peter Duffet-Smith, for details on the algorithm.
double obliq = eclipticObliquity();
@@ -623,7 +623,7 @@ static double trueAnomaly(double meanAnomaly, double eccentricity)
*/
double CalendarAstronomer::getSunLongitude()
{
- // See page 86 of "Practial Astronomy with your Calculator",
+ // See page 86 of "Practical Astronomy with your Calculator",
// by Peter Duffet-Smith, for details on the algorithm.
if (isINVALID(sunLongitude)) {
@@ -637,7 +637,7 @@ double CalendarAstronomer::getSunLongitude()
*/
/*public*/ void CalendarAstronomer::getSunLongitude(double jDay, double &longitude, double &meanAnomaly)
{
- // See page 86 of "Practial Astronomy with your Calculator",
+ // See page 86 of "Practical Astronomy with your Calculator",
// by Peter Duffet-Smith, for details on the algorithm.
double day = jDay - JD_EPOCH; // Days since epoch
@@ -723,7 +723,7 @@ CalendarAstronomer::AngleFunc::~AngleFunc() {}
class SunTimeAngleFunc : public CalendarAstronomer::AngleFunc {
public:
virtual ~SunTimeAngleFunc();
- virtual double eval(CalendarAstronomer& a) { return a.getSunLongitude(); }
+ virtual double eval(CalendarAstronomer& a) override { return a.getSunLongitude(); }
};
SunTimeAngleFunc::~SunTimeAngleFunc() {}
@@ -743,7 +743,7 @@ CalendarAstronomer::CoordFunc::~CoordFunc() {}
class RiseSetCoordFunc : public CalendarAstronomer::CoordFunc {
public:
virtual ~RiseSetCoordFunc();
- virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer&a) { a.getSunPosition(result); }
+ virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer& a) override { a.getSunPosition(result); }
};
RiseSetCoordFunc::~RiseSetCoordFunc() {}
@@ -1066,7 +1066,7 @@ UDate CalendarAstronomer::getSunRiseSet(UBool rise)
const CalendarAstronomer::Equatorial& CalendarAstronomer::getMoonPosition()
{
//
- // See page 142 of "Practial Astronomy with your Calculator",
+ // See page 142 of "Practical Astronomy with your Calculator",
// by Peter Duffet-Smith, for details on the algorithm.
//
if (moonPositionSet == FALSE) {
@@ -1154,7 +1154,7 @@ const CalendarAstronomer::Equatorial& CalendarAstronomer::getMoonPosition()
* @deprecated ICU 2.4. This class may be removed or modified.
*/
double CalendarAstronomer::getMoonAge() {
- // See page 147 of "Practial Astronomy with your Calculator",
+ // See page 147 of "Practical Astronomy with your Calculator",
// by Peter Duffet-Smith, for details on the algorithm.
//
// Force the moon's position to be calculated. We're going to use
@@ -1181,7 +1181,7 @@ double CalendarAstronomer::getMoonAge() {
* @deprecated ICU 2.4. This class may be removed or modified.
*/
double CalendarAstronomer::getMoonPhase() {
- // See page 147 of "Practial Astronomy with your Calculator",
+ // See page 147 of "Practical Astronomy with your Calculator",
// by Peter Duffet-Smith, for details on the algorithm.
return 0.5 * (1 - cos(getMoonAge()));
}
@@ -1225,7 +1225,7 @@ const CalendarAstronomer::MoonAge CalendarAstronomer::FULL_MOON() {
class MoonTimeAngleFunc : public CalendarAstronomer::AngleFunc {
public:
virtual ~MoonTimeAngleFunc();
- virtual double eval(CalendarAstronomer&a) { return a.getMoonAge(); }
+ virtual double eval(CalendarAstronomer& a) override { return a.getMoonAge(); }
};
MoonTimeAngleFunc::~MoonTimeAngleFunc() {}
@@ -1239,8 +1239,8 @@ MoonTimeAngleFunc::~MoonTimeAngleFunc() {}
* longitude will have the desired value.
* <p>
* @param desired The desired longitude.
- * @param next <tt>true</tt> if the next occurrance of the phase
- * is desired, <tt>false</tt> for the previous occurrance.
+ * @param next <tt>true</tt> if the next occurrence of the phase
+ * is desired, <tt>false</tt> for the previous occurrence.
* @internal
* @deprecated ICU 2.4. This class may be removed or modified.
*/
@@ -1259,8 +1259,8 @@ UDate CalendarAstronomer::getMoonTime(double desired, UBool next)
* desired phase.
* <p>
* @param desired The desired phase of the moon.
- * @param next <tt>true</tt> if the next occurrance of the phase
- * is desired, <tt>false</tt> for the previous occurrance.
+ * @param next <tt>true</tt> if the next occurrence of the phase
+ * is desired, <tt>false</tt> for the previous occurrence.
* @internal
* @deprecated ICU 2.4. This class may be removed or modified.
*/
@@ -1271,7 +1271,7 @@ UDate CalendarAstronomer::getMoonTime(const CalendarAstronomer::MoonAge& desired
class MoonRiseSetCoordFunc : public CalendarAstronomer::CoordFunc {
public:
virtual ~MoonRiseSetCoordFunc();
- virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer&a) { result = a.getMoonPosition(); }
+ virtual void eval(CalendarAstronomer::Equatorial& result, CalendarAstronomer& a) override { result = a.getMoonPosition(); }
};
MoonRiseSetCoordFunc::~MoonRiseSetCoordFunc() {}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/astro.h b/Build/source/libs/icu/icu-src/source/i18n/astro.h
index a2464890056..372a79ac671 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/astro.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/astro.h
@@ -626,8 +626,8 @@ public:
* longitude will have the desired value.
* <p>
* @param desired The desired longitude.
- * @param next <tt>true</tt> if the next occurrance of the phase
- * is desired, <tt>false</tt> for the previous occurrance.
+ * @param next <tt>true</tt> if the next occurrence of the phase
+ * is desired, <tt>false</tt> for the previous occurrence.
* @internal
*/
UDate getMoonTime(double desired, UBool next);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/basictz.cpp b/Build/source/libs/icu/icu-src/source/i18n/basictz.cpp
index 54ee5a1a2bf..7b5449f4167 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/basictz.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/basictz.cpp
@@ -293,71 +293,77 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial,
}
const InitialTimeZoneRule *orgini;
- const TimeZoneRule **orgtrs = NULL;
TimeZoneTransition tzt;
- UBool avail;
- UVector *orgRules = NULL;
+ bool avail;
int32_t ruleCount;
- TimeZoneRule *r = NULL;
- UBool *done = NULL;
- InitialTimeZoneRule *res_initial = NULL;
- UVector *filteredRules = NULL;
+ TimeZoneRule *r = nullptr;
UnicodeString name;
int32_t i;
UDate time, t;
- UDate *newTimes = NULL;
UDate firstStart;
- UBool bFinalStd = FALSE, bFinalDst = FALSE;
+ UBool bFinalStd = false, bFinalDst = false;
+
+ initial = nullptr;
+ transitionRules = nullptr;
// Original transition rules
ruleCount = countTransitionRules(status);
if (U_FAILURE(status)) {
return;
}
- orgRules = new UVector(ruleCount, status);
+ LocalPointer<UVector> orgRules(
+ new UVector(uprv_deleteUObject, nullptr, ruleCount, status), status);
if (U_FAILURE(status)) {
return;
}
- orgtrs = (const TimeZoneRule**)uprv_malloc(sizeof(TimeZoneRule*)*ruleCount);
- if (orgtrs == NULL) {
+ LocalMemory<const TimeZoneRule *> orgtrs(
+ static_cast<const TimeZoneRule **>(uprv_malloc(sizeof(TimeZoneRule*)*ruleCount)));
+ if (orgtrs.isNull()) {
status = U_MEMORY_ALLOCATION_ERROR;
- goto error;
+ return;
}
- getTimeZoneRules(orgini, orgtrs, ruleCount, status);
+ getTimeZoneRules(orgini, &orgtrs[0], ruleCount, status);
if (U_FAILURE(status)) {
- goto error;
+ return;
}
for (i = 0; i < ruleCount; i++) {
- orgRules->addElement(orgtrs[i]->clone(), status);
+ LocalPointer<TimeZoneRule> lpRule(orgtrs[i]->clone(), status);
+ orgRules->adoptElement(lpRule.orphan(), status);
if (U_FAILURE(status)) {
- goto error;
+ return;
}
}
- uprv_free(orgtrs);
- orgtrs = NULL;
avail = getPreviousTransition(start, TRUE, tzt);
if (!avail) {
// No need to filter out rules only applicable to time before the start
initial = orgini->clone();
- transitionRules = orgRules;
+ if (initial == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ transitionRules = orgRules.orphan();
return;
}
- done = (UBool*)uprv_malloc(sizeof(UBool)*ruleCount);
- if (done == NULL) {
+ LocalMemory<bool> done(static_cast<bool *>(uprv_malloc(sizeof(bool)*ruleCount)));
+ if (done.isNull()) {
status = U_MEMORY_ALLOCATION_ERROR;
- goto error;
+ return;
}
- filteredRules = new UVector(status);
+ LocalPointer<UVector> filteredRules(
+ new UVector(uprv_deleteUObject, nullptr, status), status);
if (U_FAILURE(status)) {
- goto error;
+ return;
}
// Create initial rule
tzt.getTo()->getName(name);
- res_initial = new InitialTimeZoneRule(name, tzt.getTo()->getRawOffset(),
- tzt.getTo()->getDSTSavings());
+ LocalPointer<InitialTimeZoneRule> res_initial(
+ new InitialTimeZoneRule(name, tzt.getTo()->getRawOffset(), tzt.getTo()->getDSTSavings()), status);
+ if (U_FAILURE(status)) {
+ return;
+ }
// Mark rules which does not need to be processed
for (i = 0; i < ruleCount; i++) {
@@ -378,7 +384,7 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial,
// the same time.
// TODO: fix getNextTransition() to prevent it?
status = U_INVALID_STATE_ERROR;
- goto error;
+ return;
}
time = updatedTime;
@@ -392,7 +398,7 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial,
if (i >= ruleCount) {
// This case should never happen
status = U_INVALID_STATE_ERROR;
- goto error;
+ return;
}
if (done[i]) {
continue;
@@ -418,12 +424,13 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial,
tar->getFirstStart(tzt.getFrom()->getRawOffset(), tzt.getFrom()->getDSTSavings(), firstStart);
if (firstStart > start) {
// Just add the rule as is
- filteredRules->addElement(tar->clone(), status);
+ LocalPointer<TimeArrayTimeZoneRule> lpTar(tar->clone(), status);
+ filteredRules->adoptElement(lpTar.orphan(), status);
if (U_FAILURE(status)) {
- goto error;
+ return;
}
} else {
- // Colllect transitions after the start time
+ // Collect transitions after the start time
int32_t startTimes;
DateTimeRule::TimeRuleType timeType;
int32_t idx;
@@ -442,28 +449,25 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial,
break;
}
}
+ if (U_FAILURE(status)) {
+ return;
+ }
int32_t asize = startTimes - idx;
if (asize > 0) {
- newTimes = (UDate*)uprv_malloc(sizeof(UDate) * asize);
- if (newTimes == NULL) {
+ LocalMemory<UDate> newTimes(static_cast<UDate *>(uprv_malloc(sizeof(UDate) * asize)));
+ if (newTimes.isNull()) {
status = U_MEMORY_ALLOCATION_ERROR;
- goto error;
+ return;
}
for (int32_t newidx = 0; newidx < asize; newidx++) {
tar->getStartTimeAt(idx + newidx, newTimes[newidx]);
- if (U_FAILURE(status)) {
- uprv_free(newTimes);
- newTimes = NULL;
- goto error;
- }
}
tar->getName(name);
- TimeArrayTimeZoneRule *newTar = new TimeArrayTimeZoneRule(name,
- tar->getRawOffset(), tar->getDSTSavings(), newTimes, asize, timeType);
- uprv_free(newTimes);
- filteredRules->addElement(newTar, status);
+ LocalPointer<TimeArrayTimeZoneRule> newTar(new TimeArrayTimeZoneRule(
+ name, tar->getRawOffset(), tar->getDSTSavings(), &newTimes[0], asize, timeType), status);
+ filteredRules->adoptElement(newTar.orphan(), status);
if (U_FAILURE(status)) {
- goto error;
+ return;
}
}
}
@@ -472,9 +476,10 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial,
ar->getFirstStart(tzt.getFrom()->getRawOffset(), tzt.getFrom()->getDSTSavings(), firstStart);
if (firstStart == tzt.getTime()) {
// Just add the rule as is
- filteredRules->addElement(ar->clone(), status);
+ LocalPointer<AnnualTimeZoneRule> arClone(ar->clone(), status);
+ filteredRules->adoptElement(arClone.orphan(), status);
if (U_FAILURE(status)) {
- goto error;
+ return;
}
} else {
// Calculate the transition year
@@ -482,11 +487,11 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial,
Grego::timeToFields(tzt.getTime(), year, month, dom, dow, doy, mid);
// Re-create the rule
ar->getName(name);
- AnnualTimeZoneRule *newAr = new AnnualTimeZoneRule(name, ar->getRawOffset(), ar->getDSTSavings(),
- *(ar->getRule()), year, ar->getEndYear());
- filteredRules->addElement(newAr, status);
+ LocalPointer<AnnualTimeZoneRule> newAr(new AnnualTimeZoneRule(name, ar->getRawOffset(), ar->getDSTSavings(),
+ *(ar->getRule()), year, ar->getEndYear()), status);
+ filteredRules->adoptElement(newAr.orphan(), status);
if (U_FAILURE(status)) {
- goto error;
+ return;
}
}
// check if this is a final rule
@@ -500,61 +505,33 @@ BasicTimeZone::getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial,
}
}
}
- done[i] = TRUE;
+ done[i] = true;
}
// Set the results
- if (orgRules != NULL) {
- while (!orgRules->isEmpty()) {
- r = (TimeZoneRule*)orgRules->orphanElementAt(0);
- delete r;
- }
- delete orgRules;
- }
- if (done != NULL) {
- uprv_free(done);
- }
-
- initial = res_initial;
- transitionRules = filteredRules;
+ initial = res_initial.orphan();
+ transitionRules = filteredRules.orphan();
return;
-
-error:
- if (orgtrs != NULL) {
- uprv_free(orgtrs);
- }
- if (orgRules != NULL) {
- while (!orgRules->isEmpty()) {
- r = (TimeZoneRule*)orgRules->orphanElementAt(0);
- delete r;
- }
- delete orgRules;
- }
- if (done != NULL) {
- if (filteredRules != NULL) {
- while (!filteredRules->isEmpty()) {
- r = (TimeZoneRule*)filteredRules->orphanElementAt(0);
- delete r;
- }
- delete filteredRules;
- }
- delete res_initial;
- uprv_free(done);
- }
-
- initial = NULL;
- transitionRules = NULL;
}
void
-BasicTimeZone::getOffsetFromLocal(UDate /*date*/, int32_t /*nonExistingTimeOpt*/, int32_t /*duplicatedTimeOpt*/,
- int32_t& /*rawOffset*/, int32_t& /*dstOffset*/, UErrorCode& status) const {
+BasicTimeZone::getOffsetFromLocal(UDate /*date*/, UTimeZoneLocalOption /*nonExistingTimeOpt*/,
+ UTimeZoneLocalOption /*duplicatedTimeOpt*/,
+ int32_t& /*rawOffset*/, int32_t& /*dstOffset*/,
+ UErrorCode& status) const {
if (U_FAILURE(status)) {
return;
}
status = U_UNSUPPORTED_ERROR;
}
+void BasicTimeZone::getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
+ int32_t& rawOffset, int32_t& dstOffset,
+ UErrorCode& status) const {
+ getOffsetFromLocal(date, (UTimeZoneLocalOption)nonExistingTimeOpt,
+ (UTimeZoneLocalOption)duplicatedTimeOpt, rawOffset, dstOffset, status);
+}
+
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/brktrans.cpp b/Build/source/libs/icu/icu-src/source/i18n/brktrans.cpp
index 46b0e345dae..f0ec8407db2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/brktrans.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/brktrans.cpp
@@ -106,7 +106,7 @@ void BreakTransliterator::handleTransliterate(Replaceable& text, UTransPosition&
int32_t boundary;
for(boundary = bi->next(); boundary != UBRK_DONE && boundary < offsets.limit; boundary = bi->next()) {
if (boundary == 0) continue;
- // HACK: Check to see that preceeding item was a letter
+ // HACK: Check to see that preceding item was a letter
UChar32 cp = sText.char32At(boundary-1);
int type = u_charType(cp);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/brktrans.h b/Build/source/libs/icu/icu-src/source/i18n/brktrans.h
index cb3def9e926..5dcc8c50c02 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/brktrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/brktrans.h
@@ -54,7 +54,7 @@ public:
* Transliterator API.
* @return A copy of the object.
*/
- virtual BreakTransliterator* clone() const;
+ virtual BreakTransliterator* clone() const override;
virtual const UnicodeString &getInsertion() const;
@@ -63,7 +63,7 @@ public:
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -82,7 +82,7 @@ public:
* pos.contextLimit. Otherwise, assume the text is complete.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
private:
LocalPointer<BreakIterator> cachedBI;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h b/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
index 7fc686dcde2..2ef5c524935 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
@@ -94,7 +94,7 @@ public:
* @return return a polymorphic copy of this calendar.
* @internal
*/
- virtual BuddhistCalendar* clone() const;
+ virtual BuddhistCalendar* clone() const override;
public:
/**
@@ -107,7 +107,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -128,7 +128,7 @@ public:
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
private:
BuddhistCalendar(); // default constructor not implemented
@@ -142,13 +142,13 @@ private:
* @return the extended year
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Subclasses may override this method to compute several fields
* specific to each calendar system.
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode& status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode& status) override;
/**
* Subclass API for defining limits of different types.
* @param field one of the field numbers
@@ -156,7 +156,7 @@ private:
* <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Return the Julian day number of day before the first day of the
* given month in the given extended year. Subclasses should override
@@ -171,26 +171,26 @@ private:
* @internal
*/
virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
- UBool useMonth) const;
+ UBool useMonth) const override;
/**
* Returns true because the Buddhist Calendar does have a default century
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
/**
* Returns the date of the start of the default century
* @return start of century - in milliseconds since epoch, 1970
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Returns the year in which the default century begins
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp b/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
index c3e5e8c4f66..8405d08d3cf 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
@@ -308,7 +308,7 @@ static ECalType getCalendarTypeForLocale(const char *locid) {
calTypeBuf[0] = 0;
if (U_SUCCESS(status) && order != NULL) {
- // the first calender type is the default for the region
+ // the first calendar type is the default for the region
int32_t len = 0;
const UChar *uCalType = ures_getStringByIndex(order, 0, &len, &status);
if (len < (int32_t)sizeof(calTypeBuf)) {
@@ -427,7 +427,7 @@ protected:
// return isStandardSupportedKeyword(keyword, status);
//}
- virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const
+ virtual void updateVisibleIDs(Hashtable& result, UErrorCode& status) const override
{
if (U_SUCCESS(status)) {
for(int32_t i=0;gCalTypes[i] != NULL;i++) {
@@ -439,7 +439,7 @@ protected:
}
}
- virtual UObject* create(const ICUServiceKey& key, const ICUService* /*service*/, UErrorCode& status) const {
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* /*service*/, UErrorCode& status) const override {
#ifdef U_DEBUG_CALSVC
if(dynamic_cast<const LocaleKey*>(&key) == NULL) {
fprintf(stderr, "::create - not a LocaleKey!\n");
@@ -485,7 +485,7 @@ public:
DefaultCalendarFactory() : ICUResourceBundleFactory() { }
virtual ~DefaultCalendarFactory();
protected:
- virtual UObject* create(const ICUServiceKey& key, const ICUService* /*service*/, UErrorCode& status) const {
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* /*service*/, UErrorCode& status) const override {
LocaleKey &lkey = (LocaleKey&)key;
Locale loc;
@@ -517,7 +517,7 @@ public:
virtual ~CalendarService();
- virtual UObject* cloneInstance(UObject* instance) const {
+ virtual UObject* cloneInstance(UObject* instance) const override {
UnicodeString *s = dynamic_cast<UnicodeString *>(instance);
if(s != NULL) {
return s->clone();
@@ -530,7 +530,7 @@ public:
}
}
- virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const {
+ virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const override {
LocaleKey& lkey = (LocaleKey&)key;
//int32_t kind = lkey.kind();
@@ -555,7 +555,7 @@ public:
return nc;
}
- virtual UBool isDefault() const {
+ virtual UBool isDefault() const override {
return countFactories() == 1;
}
};
@@ -956,7 +956,7 @@ Calendar::makeInstance(const Locale& aLocale, UErrorCode& success) {
#ifdef U_DEBUG_CALSVC
fprintf(stderr, "%p: setting week count data to locale %s, actual locale %s\n", c, (const char*)aLocale.getName(), (const char *)actualLoc.getName());
#endif
- c->setWeekData(aLocale, c->getType(), success); // set the correct locale (this was an indirected calendar)
+ c->setWeekData(aLocale, c->getType(), success); // set the correct locale (this was an indirect calendar)
char keyword[ULOC_FULLNAME_CAPACITY] = "";
UErrorCode tmpStatus = U_ZERO_ERROR;
@@ -1031,7 +1031,7 @@ Calendar::getCalendarTypeFromLocale(
}
}
-UBool
+bool
Calendar::operator==(const Calendar& that) const
{
UErrorCode status = U_ZERO_ERROR;
@@ -1558,7 +1558,7 @@ void Calendar::computeFields(UErrorCode &ec)
// fields computed by handleComputeFields().
computeWeekFields(ec);
- // Compute time-related fields. These are indepent of the date and
+ // Compute time-related fields. These are independent of the date and
// of the subclass algorithm. They depend only on the local zone
// wall milliseconds in day.
int32_t millisInDay = (int32_t) (localMillis - (days * kOneDay));
@@ -2291,7 +2291,7 @@ int32_t Calendar::fieldDifference(UDate targetMs, UCalendarDateFields field, UEr
if (U_FAILURE(ec)) return 0;
int32_t min = 0;
double startMs = getTimeInMillis(ec);
- // Always add from the start millis. This accomodates
+ // Always add from the start millis. This accommodates
// operations like adding years from February 29, 2000 up to
// February 29, 2004. If 1, 1, 1, 1 is added to the year
// field, the DOM gets pinned to 28 and stays there, giving an
@@ -3083,7 +3083,7 @@ void Calendar::computeTime(UErrorCode& status) {
}
/**
- * Find the previous zone transtion near the given time.
+ * Find the previous zone transition near the given time.
*/
UBool Calendar::getImmediatePreviousZoneTransition(UDate base, UDate *transitionTime, UErrorCode& status) const {
BasicTimeZone *btz = getBasicTimeZone();
@@ -3163,8 +3163,8 @@ int32_t Calendar::computeZoneOffset(double millis, double millisInDay, UErrorCod
UDate wall = millis + millisInDay;
BasicTimeZone* btz = getBasicTimeZone();
if (btz) {
- int duplicatedTimeOpt = (fRepeatedWallTime == UCAL_WALLTIME_FIRST) ? BasicTimeZone::kFormer : BasicTimeZone::kLatter;
- int nonExistingTimeOpt = (fSkippedWallTime == UCAL_WALLTIME_FIRST) ? BasicTimeZone::kLatter : BasicTimeZone::kFormer;
+ UTimeZoneLocalOption duplicatedTimeOpt = (fRepeatedWallTime == UCAL_WALLTIME_FIRST) ? UCAL_TZ_LOCAL_FORMER : UCAL_TZ_LOCAL_LATTER;
+ UTimeZoneLocalOption nonExistingTimeOpt = (fSkippedWallTime == UCAL_WALLTIME_FIRST) ? UCAL_TZ_LOCAL_LATTER : UCAL_TZ_LOCAL_FORMER;
btz->getOffsetFromLocal(wall, nonExistingTimeOpt, duplicatedTimeOpt, rawOffset, dstOffset, ec);
} else {
const TimeZone& tz = getTimeZone();
@@ -3197,7 +3197,7 @@ int32_t Calendar::computeZoneOffset(double millis, double millisInDay, UErrorCod
// recalculate offsets from the resolved time (non-wall).
// When the given wall time falls into skipped wall time,
// the offsets will be based on the zone offsets AFTER
- // the transition (which means, earliest possibe interpretation).
+ // the transition (which means, earliest possible interpretation).
UDate tgmt = wall - (rawOffset + dstOffset);
tz.getOffset(tgmt, FALSE, rawOffset, dstOffset, ec);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/casetrn.h b/Build/source/libs/icu/icu-src/source/i18n/casetrn.h
index 2ec3e736deb..a00480db60b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/casetrn.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/casetrn.h
@@ -58,7 +58,7 @@ public:
* Transliterator API.
* @return a copy of the object.
*/
- virtual CaseMapTransliterator* clone() const = 0;
+ virtual CaseMapTransliterator* clone() const override = 0;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
@@ -82,7 +82,7 @@ protected:
*/
virtual void handleTransliterate(Replaceable& text,
UTransPosition& offsets,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
UCaseMapFull *fMap;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/cecal.h b/Build/source/libs/icu/icu-src/source/i18n/cecal.h
index 80dab70f6ff..9ac71f6ba38 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/cecal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/cecal.h
@@ -68,13 +68,13 @@ protected:
* Return JD of start of given month/extended year
* @internal
*/
- virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
+ virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const override;
/**
* Calculate the limit for a specified type of limit and field
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* (Overrides Calendar) Return true if the current date for this Calendar is in
@@ -85,13 +85,13 @@ protected:
* false, otherwise.
* @internal
*/
- virtual UBool inDaylightTime(UErrorCode&) const;
+ virtual UBool inDaylightTime(UErrorCode&) const override;
/**
* Returns true because Coptic/Ethiopic Calendar does have a default century
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
protected:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h b/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
index 910afd2f599..61ef2d3cad5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
@@ -144,7 +144,7 @@ class U_I18N_API ChineseCalendar : public Calendar {
virtual ~ChineseCalendar();
// clone
- virtual ChineseCalendar* clone() const;
+ virtual ChineseCalendar* clone() const override;
private:
@@ -162,18 +162,18 @@ class U_I18N_API ChineseCalendar : public Calendar {
//----------------------------------------------------------------------
protected:
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
- virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
- virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
- virtual int32_t handleGetExtendedYear();
- virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
- virtual const UFieldResolutionTable* getFieldResolutionTable() const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
+ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const override;
+ virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const override;
+ virtual int32_t handleGetExtendedYear() override;
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
+ virtual const UFieldResolutionTable* getFieldResolutionTable() const override;
public:
- virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode &status);
- virtual void add(EDateFields field, int32_t amount, UErrorCode &status);
- virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode &status);
- virtual void roll(EDateFields field, int32_t amount, UErrorCode &status);
+ virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode &status) override;
+ virtual void add(EDateFields field, int32_t amount, UErrorCode &status) override;
+ virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode &status) override;
+ virtual void roll(EDateFields field, int32_t amount, UErrorCode &status) override;
//----------------------------------------------------------------------
// Internal methods & astronomical calculations
@@ -204,7 +204,7 @@ class U_I18N_API ChineseCalendar : public Calendar {
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -225,7 +225,7 @@ class U_I18N_API ChineseCalendar : public Calendar {
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
protected:
@@ -238,27 +238,27 @@ class U_I18N_API ChineseCalendar : public Calendar {
* false, otherwise.
* @internal
*/
- virtual UBool inDaylightTime(UErrorCode& status) const;
+ virtual UBool inDaylightTime(UErrorCode& status) const override;
/**
* Returns true because the Islamic Calendar does have a default century
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
/**
* Returns the date of the start of the default century
* @return start of century - in milliseconds since epoch, 1970
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Returns the year in which the default century begins
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
private: // default century stuff.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/choicfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/choicfmt.cpp
index 7e26bb7a1f6..d06eec35fa2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/choicfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/choicfmt.cpp
@@ -132,11 +132,11 @@ ChoiceFormat::ChoiceFormat(const UnicodeString& newPattern,
}
// -------------------------------------
-UBool
+bool
ChoiceFormat::operator==(const Format& that) const
{
- if (this == &that) return TRUE;
- if (!NumberFormat::operator==(that)) return FALSE;
+ if (this == &that) return true;
+ if (!NumberFormat::operator==(that)) return false;
ChoiceFormat& thatAlias = (ChoiceFormat&)that;
return msgPattern == thatAlias.msgPattern;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/coleitr.cpp b/Build/source/libs/icu/icu-src/source/i18n/coleitr.cpp
index 64d3ab4d2bf..48c1da9015a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/coleitr.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/coleitr.cpp
@@ -99,7 +99,7 @@ int32_t CollationElementIterator::getOffset() const
/**
* Get the ordering priority of the next character in the string.
* @return the next character's ordering. Returns NULLORDER if an error has
-* occured or if the end of string has been reached
+* occurred or if the end of string has been reached
*/
int32_t CollationElementIterator::next(UErrorCode& status)
{
@@ -137,17 +137,17 @@ int32_t CollationElementIterator::next(UErrorCode& status)
return firstHalf;
}
-UBool CollationElementIterator::operator!=(
+bool CollationElementIterator::operator!=(
const CollationElementIterator& other) const
{
return !(*this == other);
}
-UBool CollationElementIterator::operator==(
+bool CollationElementIterator::operator==(
const CollationElementIterator& that) const
{
if (this == &that) {
- return TRUE;
+ return true;
}
return
@@ -162,7 +162,7 @@ UBool CollationElementIterator::operator==(
* Get the ordering priority of the previous collation element in the string.
* @param status the error code status.
* @return the previous element's ordering. Returns NULLORDER if an error has
-* occured or if the start of string has been reached.
+* occurred or if the start of string has been reached.
*/
int32_t CollationElementIterator::previous(UErrorCode& status)
{
@@ -398,8 +398,8 @@ class MaxExpSink : public ContractionsAndExpansions::CESink {
public:
MaxExpSink(UHashtable *h, UErrorCode &ec) : maxExpansions(h), errorCode(ec) {}
virtual ~MaxExpSink();
- virtual void handleCE(int64_t /*ce*/) {}
- virtual void handleExpansion(const int64_t ces[], int32_t length) {
+ virtual void handleCE(int64_t /*ce*/) override {}
+ virtual void handleExpansion(const int64_t ces[], int32_t length) override {
if (length <= 1) {
// We do not need to add single CEs into the map.
return;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/coll.cpp b/Build/source/libs/icu/icu-src/source/i18n/coll.cpp
index 7b87b41dff2..fe73118da03 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/coll.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/coll.cpp
@@ -129,7 +129,7 @@ class ICUCollatorFactory : public ICUResourceBundleFactory {
ICUCollatorFactory() : ICUResourceBundleFactory(UnicodeString(U_ICUDATA_COLL, -1, US_INV)) { }
virtual ~ICUCollatorFactory();
protected:
- virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const override;
};
ICUCollatorFactory::~ICUCollatorFactory() {}
@@ -162,11 +162,11 @@ public:
virtual ~ICUCollatorService();
- virtual UObject* cloneInstance(UObject* instance) const {
+ virtual UObject* cloneInstance(UObject* instance) const override {
return ((Collator*)instance)->clone();
}
- virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* actualID, UErrorCode& status) const {
+ virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* actualID, UErrorCode& status) const override {
LocaleKey& lkey = (LocaleKey&)key;
if (actualID) {
// Ugly Hack Alert! We return an empty actualID to signal
@@ -179,7 +179,7 @@ public:
return Collator::makeInstance(loc, status);
}
- virtual UObject* getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const {
+ virtual UObject* getKey(ICUServiceKey& key, UnicodeString* actualReturn, UErrorCode& status) const override {
UnicodeString ar;
if (actualReturn == NULL) {
actualReturn = &ar;
@@ -187,7 +187,7 @@ public:
return (Collator*)ICULocaleService::getKey(key, actualReturn, status);
}
- virtual UBool isDefault() const {
+ virtual UBool isDefault() const override {
return countFactories() == 1;
}
};
@@ -604,7 +604,7 @@ UnicodeString& U_EXPORT2 Collator::getDisplayName(const Locale& objectLocale,
/**
* Default constructor.
* Constructor is different from the old default Collator constructor.
-* The task for determing the default collation strength and normalization mode
+* The task for determining the default collation strength and normalization mode
* is left to the child class.
*/
Collator::Collator()
@@ -636,15 +636,15 @@ Collator::Collator(const Collator &other)
{
}
-UBool Collator::operator==(const Collator& other) const
+bool Collator::operator==(const Collator& other) const
{
// Subclasses: Call this method and then add more specific checks.
return typeid(*this) == typeid(other);
}
-UBool Collator::operator!=(const Collator& other) const
+bool Collator::operator!=(const Collator& other) const
{
- return (UBool)!(*this == other);
+ return !operator==(other);
}
int32_t U_EXPORT2 Collator::getBound(const uint8_t *source,
@@ -721,10 +721,10 @@ public:
virtual ~CFactory();
- virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const;
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const override;
protected:
- virtual const Hashtable* getSupportedIDs(UErrorCode& status) const
+ virtual const Hashtable* getSupportedIDs(UErrorCode& status) const override
{
if (U_SUCCESS(status)) {
return _ids;
@@ -733,7 +733,7 @@ protected:
}
virtual UnicodeString&
- getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const;
+ getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const override;
};
CFactory::~CFactory()
@@ -803,7 +803,7 @@ private:
int32_t index;
public:
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
public:
CollationLocaleListEnumeration()
: index(0)
@@ -814,7 +814,7 @@ public:
virtual ~CollationLocaleListEnumeration();
- virtual StringEnumeration * clone() const
+ virtual StringEnumeration * clone() const override
{
CollationLocaleListEnumeration *result = new CollationLocaleListEnumeration();
if (result) {
@@ -823,11 +823,11 @@ public:
return result;
}
- virtual int32_t count(UErrorCode &/*status*/) const {
+ virtual int32_t count(UErrorCode &/*status*/) const override {
return availableLocaleListCount;
}
- virtual const char* next(int32_t* resultLength, UErrorCode& /*status*/) {
+ virtual const char* next(int32_t* resultLength, UErrorCode& /*status*/) override {
const char* result;
if(index < availableLocaleListCount) {
result = availableLocaleList[index++].getName();
@@ -843,13 +843,13 @@ public:
return result;
}
- virtual const UnicodeString* snext(UErrorCode& status) {
+ virtual const UnicodeString* snext(UErrorCode& status) override {
int32_t resultLength = 0;
const char *s = next(&resultLength, status);
return setChars(s, resultLength, status);
}
- virtual void reset(UErrorCode& /*status*/) {
+ virtual void reset(UErrorCode& /*status*/) override {
index = 0;
}
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collation.h b/Build/source/libs/icu/icu-src/source/i18n/collation.h
index ecbba29057f..6a449a3eb69 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collation.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collation.h
@@ -250,7 +250,7 @@ public:
* Tag for a lead surrogate code unit.
* Optional optimization for UTF-16 string processing.
* Bits 31..10: Unused, 0.
- * 9.. 8: =0: All associated supplementary code points are unassigned-implict.
+ * 9.. 8: =0: All associated supplementary code points are unassigned-implicit.
* =1: All associated supplementary code points fall back to the base data.
* else: (Normally 2) Look up the data for the supplementary code point.
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.cpp b/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.cpp
index 45ac6ddcd58..5d4611b851d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.cpp
@@ -59,7 +59,7 @@ public:
virtual void getRules(
const char *localeID, const char *collationType,
UnicodeString &rules,
- const char *&errorReason, UErrorCode &errorCode);
+ const char *&errorReason, UErrorCode &errorCode) override;
};
BundleImporter::~BundleImporter() {}
@@ -577,7 +577,7 @@ CollationBuilder::getSpecialResetPosition(const UnicodeString &str,
parserErrorReason = "LDML forbids tailoring to U+FFFF";
return 0;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
int32_t index = findOrInsertNodeForRootCE(ce, strength, errorCode);
@@ -688,7 +688,7 @@ CollationBuilder::addRelation(int32_t strength, const UnicodeString &prefix,
// A Hangul syllable completely inside a contraction is ok.
}
// Note: If there is a prefix, then the parser checked that
- // both the prefix and the string beging with NFC boundaries (not Jamo V or T).
+ // both the prefix and the string begin with NFC boundaries (not Jamo V or T).
// Therefore: prefix.isEmpty() || !isJamoVOrT(nfdString.charAt(0))
// (While handling a Hangul syllable, prefixes on Jamo V or T
// would not see the previous Jamo of that syllable.)
@@ -1581,7 +1581,7 @@ class CEFinalizer : public CollationDataBuilder::CEModifier {
public:
CEFinalizer(const int64_t *ces) : finalCEs(ces) {}
virtual ~CEFinalizer();
- virtual int64_t modifyCE32(uint32_t ce32) const {
+ virtual int64_t modifyCE32(uint32_t ce32) const override {
U_ASSERT(!Collation::isSpecialCE32(ce32));
if(CollationBuilder::isTempCE32(ce32)) {
// retain case bits
@@ -1590,7 +1590,7 @@ public:
return Collation::NO_CE;
}
}
- virtual int64_t modifyCE(int64_t ce) const {
+ virtual int64_t modifyCE(int64_t ce) const override {
if(CollationBuilder::isTempCE(ce)) {
// retain case bits
return finalCEs[CollationBuilder::indexFromTempCE(ce)] | (ce & 0xc000);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h b/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h
index 82f0459748f..59d3c5d24b0 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h
@@ -57,7 +57,7 @@ private:
/** Implements CollationRuleParser::Sink. */
virtual void addReset(int32_t strength, const UnicodeString &str,
- const char *&errorReason, UErrorCode &errorCode);
+ const char *&errorReason, UErrorCode &errorCode) override;
/**
* Returns the secondary or tertiary weight preceding the current node's weight.
* node=nodes[index].
@@ -70,7 +70,7 @@ private:
/** Implements CollationRuleParser::Sink. */
virtual void addRelation(int32_t strength, const UnicodeString &prefix,
const UnicodeString &str, const UnicodeString &extension,
- const char *&errorReason, UErrorCode &errorCode);
+ const char *&errorReason, UErrorCode &errorCode) override;
/**
* Picks one of the current CEs and finds or inserts a node in the graph
@@ -115,11 +115,11 @@ private:
/** Implements CollationRuleParser::Sink. */
virtual void suppressContractions(const UnicodeSet &set, const char *&parserErrorReason,
- UErrorCode &errorCode);
+ UErrorCode &errorCode) override;
/** Implements CollationRuleParser::Sink. */
virtual void optimize(const UnicodeSet &set, const char *&parserErrorReason,
- UErrorCode &errorCode);
+ UErrorCode &errorCode) override;
/**
* Adds the mapping and its canonical closure.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.cpp b/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.cpp
index 53361b86c7c..25050aa777e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.cpp
@@ -131,18 +131,18 @@ public:
int32_t fetchCEs(const UnicodeString &str, int32_t start, int64_t ces[], int32_t cesLength);
- virtual void resetToOffset(int32_t newOffset);
- virtual int32_t getOffset() const;
+ virtual void resetToOffset(int32_t newOffset) override;
+ virtual int32_t getOffset() const override;
- virtual UChar32 nextCodePoint(UErrorCode &errorCode);
- virtual UChar32 previousCodePoint(UErrorCode &errorCode);
+ virtual UChar32 nextCodePoint(UErrorCode &errorCode) override;
+ virtual UChar32 previousCodePoint(UErrorCode &errorCode) override;
protected:
- virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode);
- virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
+ virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
- virtual uint32_t getDataCE32(UChar32 c) const;
- virtual uint32_t getCE32FromBuilderData(uint32_t ce32, UErrorCode &errorCode);
+ virtual uint32_t getDataCE32(UChar32 c) const override;
+ virtual uint32_t getCE32FromBuilderData(uint32_t ce32, UErrorCode &errorCode) override;
CollationDataBuilder &builder;
CollationData builderData;
@@ -255,12 +255,18 @@ DataBuilderCollationIterator::getDataCE32(UChar32 c) const {
uint32_t
DataBuilderCollationIterator::getCE32FromBuilderData(uint32_t ce32, UErrorCode &errorCode) {
+ if (U_FAILURE(errorCode)) { return 0; }
U_ASSERT(Collation::hasCE32Tag(ce32, Collation::BUILDER_DATA_TAG));
if((ce32 & CollationDataBuilder::IS_BUILDER_JAMO_CE32) != 0) {
UChar32 jamo = Collation::indexFromCE32(ce32);
return utrie2_get32(builder.trie, jamo);
} else {
ConditionalCE32 *cond = builder.getConditionalCE32ForCE32(ce32);
+ if (cond == nullptr) {
+ errorCode = U_INTERNAL_PROGRAM_ERROR;
+ // TODO: ICU-21531 figure out why this happens.
+ return 0;
+ }
if(cond->builtCE32 == Collation::NO_CE32) {
// Build the context-sensitive mappings into their runtime form and cache the result.
cond->builtCE32 = builder.buildContext(cond, errorCode);
@@ -521,7 +527,7 @@ CollationDataBuilder::addConditionalCE32(const UnicodeString &context, uint32_t
errorCode = U_MEMORY_ALLOCATION_ERROR;
return -1;
}
- conditionalCE32s.addElement(cond, errorCode);
+ conditionalCE32s.addElementX(cond, errorCode);
return index;
}
@@ -852,7 +858,7 @@ CollationDataBuilder::copyFromBaseCE32(UChar32 c, uint32_t ce32, UBool withConte
ce32 = encodeOneCE(Collation::unassignedCEFromCodePoint(c), errorCode);
break;
default:
- UPRV_UNREACHABLE; // require ce32 == base->getFinalCE32(ce32)
+ UPRV_UNREACHABLE_EXIT; // require ce32 == base->getFinalCE32(ce32)
}
return ce32;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp b/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp
index 9f73ff38981..0be4150b09b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp
@@ -1,6 +1,5 @@
-// © 2016 and later: Unicode, Inc. and others.
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
-//
// Copyright (C) 1999-2016, International Business Machines
// Corporation and others. All Rights Reserved.
//
@@ -8,7 +7,6 @@
//
// machine-generated by: icu/tools/unicode/c/genuca/genuca.cpp
-
#include "unicode/utypes.h"
#if !UCONFIG_NO_COLLATION
@@ -22,27 +20,27 @@ const uint8_t CollationFCD::lcccIndex[2048]={
0,0,0,0,0,0,0,0,1,1,2,3,0,0,0,0,
0,0,0,0,4,0,0,0,0,0,0,0,5,6,7,0,
8,0,9,0xa,0,0,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0x10,
-0x11,0x12,0x13,0,0,0,0x14,0x15,0,0x16,0x17,0,0,0x16,0x18,0x19,
-0,0x16,0x18,0,0,0x16,0x18,0,0,0x16,0x18,0,0,0,0x18,0,
-0,0,0x1a,0,0,0x16,0x18,0,0,0x1b,0x18,0,0,0,0x1c,0,
-0,0x1d,0x1e,0,0,0x1d,0x1e,0,0x1f,0x20,0,0x21,0x22,0,0x23,0,
-0,0x24,0,0,0x18,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x25,0,0,0,0,0,
+0x11,0x12,0x13,0,0x14,0,0x15,0x16,0,0x17,0x18,0,0,0x17,0x19,0x1a,
+0,0x17,0x19,0,0,0x17,0x19,0,0,0x17,0x19,0,0,0,0x19,0,
+0,0x17,0x1b,0,0,0x17,0x19,0,0,0x1c,0x19,0,0,0,0x1d,0,
+0,0x1e,0x1f,0,0,0x1e,0x1f,0,0x20,0x21,0,0x22,0x23,0,0x24,0,
+0,0x25,0,0,0x19,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x26,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x26,0x26,0,0,0,0,0x27,0,
-0,0,0,0,0,0x28,0,0,0,0x13,0,0,0,0,0,0,
-0x29,0,0,0x2a,0,0x2b,0x2c,0,0,0x26,0x2d,0x2e,0,0x2f,0,0x30,
-0,0x31,0,0,0,0,0x32,0x33,0,0,0,0,0,0,1,0x34,
+0,0,0,0,0,0,0,0,0x27,0x28,0,0,0,0,0x29,0,
+0,0,0,0,0,0x2a,0,0,0,0x13,0,0,0,0,0,0,
+0x2b,0,0,0x2c,0,0x2d,0x2e,0,0,0x28,0x2f,0x30,0,0x31,0,0x32,
+0,0x33,0,0,0,0,0x34,0x35,0,0,0,0,0,0,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x35,0x36,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0x36,0x37,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x37,0,0,0,0x38,0,0,0,1,
+0,0,0,0,0,0,0,0x38,0,0,0,0x39,0,0,0,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x39,0,0,0x3a,0,0,0,0,0,0,0,0,0,0,0,
+0,0x3a,0,0,0x3b,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -101,9 +99,9 @@ const uint8_t CollationFCD::lcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x3b,0x3c,0,0,0x3d,0,0,0,0,0,0,0,0,
-0x23,0x3e,0,0,0,0,0x2d,0x3f,0,0x40,0x41,0,0,0x41,0x2c,0,
-0,0,0,0,0,0x42,0x43,0x44,0,0,0,0,0,0,0,0x18,
+0,0,0,0x3c,0x3d,0,0,0x3e,0,0,0,0,0,0,0,0,
+0x24,0x3f,0,0,0,0,0x2f,0x40,0,0x41,0x42,0,0,0x42,0x43,0,
+0,0,0,0,0,0x44,0x45,0x46,0,0,0,0,0,0,0,0x19,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -126,7 +124,7 @@ const uint8_t CollationFCD::lcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x45,0x46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x47,0x48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -143,17 +141,17 @@ const uint8_t CollationFCD::lcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x19,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x1a,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-const uint32_t CollationFCD::lcccBits[71]={
+const uint32_t CollationFCD::lcccBits[73]={
0,0xffffffff,0xffff7fff,0xffff,0xf8,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0xfffff800,0x10000,0x9fc00000,0x3d9f,0x20000,0xffff0000,0x7ff,
-0x200ff800,0xfbc00000,0x3eef,0xe000000,0xfff80000,0xfffffffb,0x10000000,0x1e2000,0x2000,0x40000000,0x602000,0x18000000,0x400,0x7000000,0xf00,0x3000000,
-0x2a00000,0x3c3e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0xbfff0000,1,0x10,0xff800,0xc00,
-0xc0040,0x800000,0xfff70000,0x31021fd,0xfbffffff,0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x1000,0x3ffff,
-0x3800,0x80000,0xc19d0000,2,0x400000,0xc0000fd,0x5108000
+0x200ff800,0xfbc00000,0x3eef,0xe000000,0xff000000,0xfffffc00,0xfffffffb,0x10000000,0x1e2000,0x2000,0x40000000,0x602000,0x18000000,0x400,0x7000000,0xf00,
+0x3000000,0x2a00000,0x3c3e0000,0xdf,0x40,0x6800000,0xe0000000,0x300000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0xbfff0000,0x7fff,0x10,
+0xff800,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x1000,
+0x3ffff,0x3800,0x80000,1,0xc19d0000,2,0x400000,0xc0000fd,0x5108000
};
const uint8_t CollationFCD::tcccIndex[2048]={
@@ -161,27 +159,27 @@ const uint8_t CollationFCD::tcccIndex[2048]={
0xb,0xc,0,0,0,0,0,0,1,1,0xd,0xe,0xf,0x10,0x11,0,
0x12,0x13,0x14,0x15,0x16,0,0x17,0x18,0,0,0,0,0x19,0x1a,0x1b,0,
0x1c,0x1d,0x1e,0x1f,0,0,0x20,0x21,0x22,0x23,0x24,0,0,0,0,0x25,
-0x26,0x27,0x28,0,0,0,0x29,0x2a,0,0x2b,0x2c,0,0,0x2d,0x2e,0x2f,
-0,0x30,0x31,0,0,0x2d,0x32,0,0,0x2d,0x33,0,0,0,0x32,0,
-0,0,0x34,0,0,0x2d,0x32,0,0,0x35,0x32,0,0,0,0x36,0,
-0,0x37,0x38,0,0,0x37,0x38,0,0x39,0x3a,0,0x3b,0x3c,0,0x3d,0,
-0,0x3e,0,0,0x32,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x3f,0,0,0,0,0,
+0x26,0x27,0x28,0,0x29,0,0x2a,0x2b,0,0x2c,0x2d,0,0,0x2e,0x2f,0x30,
+0,0x31,0x32,0,0,0x2e,0x33,0,0,0x2e,0x34,0,0,0,0x33,0,
+0,0x2e,0x35,0,0,0x2e,0x33,0,0,0x36,0x33,0,0,0,0x37,0,
+0,0x38,0x39,0,0,0x38,0x39,0,0x3a,0x3b,0,0x3c,0x3d,0,0x3e,0,
+0,0x3f,0,0,0x33,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0x40,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x40,0x40,0,0,0,0,0x41,0,
-0,0,0,0,0,0x42,0,0,0,0x28,0,0,0,0,0,0,
-0x43,0,0,0x44,0,0x45,0x46,0,0,0x40,0x47,0x48,0,0x49,0,0x4a,
-0,0x4b,0,0,0,0,0x4c,0x4d,0,0,0,0,0,0,1,0x4e,
-1,1,1,1,0x4f,1,1,0x50,0x51,1,0x52,0x53,1,0x54,0x55,0x56,
-0,0,0,0,0,0,0x57,0x58,0,0x59,0,0,0x5a,0x5b,0x5c,0,
-0x5d,0x5e,0x5f,0x60,0x61,0x62,0,0x63,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x41,0x42,0,0,0,0,0x43,0,
+0,0,0,0,0,0x44,0,0,0,0x28,0,0,0,0,0,0,
+0x45,0,0,0x46,0,0x47,0x48,0,0,0x42,0x49,0x4a,0,0x4b,0,0x4c,
+0,0x4d,0,0,0,0,0x4e,0x4f,0,0,0,0,0,0,1,1,
+1,1,1,1,0x50,1,1,0x51,0x52,1,0x53,0x54,1,0x55,0x56,0x57,
+0,0,0,0,0,0,0x58,0x59,0,0x5a,0,0,0x5b,0x5c,0x5d,0,
+0x5e,0x5f,0x60,0x61,0x62,0x63,0,0x64,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x2d,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x64,0,0,0,0x65,0,0,0,1,
+0,0,0,0,0,0,0x2e,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0x65,0,0,0,0x66,0,0,0,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x66,0x67,0x68,0x69,0x67,0x68,0x6a,0,0,0,0,0,0,0,0,
+0,0x67,0x68,0x69,0x6a,0x68,0x69,0x6b,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -240,9 +238,9 @@ const uint8_t CollationFCD::tcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x6b,0x6c,0,0,0x6d,0,0,0,0,0,0,0,0,
-0x3d,0x6e,0,0,0,0,0x47,0x6f,0,0x70,0x71,0,0,0x71,0x46,0,
-0,0,0,0,0,0x72,0x73,0x74,0,0,0,0,0,0,0,0x32,
+0,0,0,0x6c,0x6d,0,0,0x6e,0,0,0,0,0,0,0,0,
+0x3e,0x6f,0,0,0,0,0x49,0x70,0,0x71,0x72,0,0,0x72,0x73,0,
+0,0,0,0,0,0x74,0x75,0x76,0,0,0,0,0,0,0,0x33,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -265,7 +263,7 @@ const uint8_t CollationFCD::tcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x75,0x76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0x77,0x78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -282,20 +280,20 @@ const uint8_t CollationFCD::tcccIndex[2048]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x3f,0x77,0x78,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0x40,0x79,0x7a,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0xe,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
-const uint32_t CollationFCD::tcccBits[121]={
+const uint32_t CollationFCD::tcccBits[123]={
0,0xffffffff,0x3e7effbf,0xbe7effbf,0xfffcffff,0x7ef1ff3f,0xfff3f1f8,0x7fffff3f,0x18003,0xdfffe000,0xff31ffcf,0xcfffffff,0xfffc0,0xffff7fff,0xffff,0x1d760,
0x1fc00,0x187c00,0x200708b,0x2000000,0x708b0000,0xc00000,0xf8,0xfccf0006,0x33ffcfc,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0x7c,0xfffff800,0x10000,
-0x9fc80005,0x3d9f,0x20000,0xffff0000,0x7ff,0x200ff800,0xfbc00000,0x3eef,0xe000000,0xfff80000,0xfffffffb,0x10120200,0xff1e2000,0x10000000,0xb0002000,0x40000000,
-0x10480000,0x4e002000,0x2000,0x30002000,0x602100,0x18000000,0x24000400,0x7000000,0xf00,0x3000000,0x2a00000,0x3d7e0000,0xdf,0x40,0x6800000,0xe0000000,
-0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0xbfff0000,1,0x10,0xff800,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xfbffffff,0xbffffff,
-0x3ffffff,0x3f3fffff,0xaaff3f3f,0x3fffffff,0x1fdfffff,0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,0x292,
-0x333e005,0x333,0xf000,0x3c0f,0x38000,0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x1000,0x3ffff,
-0x3800,0x80000,0xc19d0000,2,0x400000,0xc0000fd,0x5108000,0x5f7ffc00,0x7fdb
+0x9fc80005,0x3d9f,0x20000,0xffff0000,0x7ff,0x200ff800,0xfbc00000,0x3eef,0xe000000,0xff000000,0xfffffc00,0xfffffffb,0x10120200,0xff1e2000,0x10000000,0xb0002000,
+0x40000000,0x10480000,0x4e002000,0x2000,0x30002000,0x602100,0x18000000,0x24000400,0x7000000,0xf00,0x3000000,0x2a00000,0x3d7e0000,0xdf,0x40,0x6800000,
+0xe0000000,0x300000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0xbfff0000,0x7fff,0x10,0xff800,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,
+0xbffffff,0x3ffffff,0x3f3fffff,0xaaff3f3f,0x3fffffff,0x1fdfffff,0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,
+0x292,0x333e005,0x333,0xf000,0x3c0f,0x38000,0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x1000,
+0x3ffff,0x3800,0x80000,1,0xc19d0000,2,0x400000,0xc0000fd,0x5108000,0x5f7ffc00,0x7fdb
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationiterator.cpp b/Build/source/libs/icu/icu-src/source/i18n/collationiterator.cpp
index 18ccf014f0a..6bfdfbe7c70 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationiterator.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationiterator.cpp
@@ -168,7 +168,7 @@ CollationIterator::~CollationIterator() {
delete skipped;
}
-UBool
+bool
CollationIterator::operator==(const CollationIterator &other) const {
// Subclasses: Call this method and then add more specific checks.
// Compare the iterator state but not the collation data (trie & data fields):
@@ -180,12 +180,12 @@ CollationIterator::operator==(const CollationIterator &other) const {
cesIndex == other.cesIndex &&
numCpFwd == other.numCpFwd &&
isNumeric == other.isNumeric)) {
- return FALSE;
+ return false;
}
for(int32_t i = 0; i < ceBuffer.length; ++i) {
- if(ceBuffer.get(i) != other.ceBuffer.get(i)) { return FALSE; }
+ if(ceBuffer.get(i) != other.ceBuffer.get(i)) { return false; }
}
- return TRUE;
+ return true;
}
void
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h b/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
index 869f0956c34..73cb93b934a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
@@ -109,8 +109,8 @@ public:
virtual ~CollationIterator();
- virtual UBool operator==(const CollationIterator &other) const;
- inline UBool operator!=(const CollationIterator &other) const {
+ virtual bool operator==(const CollationIterator &other) const;
+ inline bool operator!=(const CollationIterator &other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h b/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
index c526a4f14f2..5b41d14c0b6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
@@ -38,7 +38,7 @@ public:
void IgnoreBytes(int32_t numIgnore) { ignore_ = numIgnore; }
- virtual void Append(const char *bytes, int32_t n);
+ virtual void Append(const char *bytes, int32_t n) override;
void Append(uint32_t b) {
if (ignore_ > 0) {
--ignore_;
@@ -52,7 +52,7 @@ public:
virtual char *GetAppendBuffer(int32_t min_capacity,
int32_t desired_capacity_hint,
char *scratch, int32_t scratch_capacity,
- int32_t *result_capacity);
+ int32_t *result_capacity) override;
int32_t NumberOfBytesAppended() const { return appended_; }
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationsettings.cpp b/Build/source/libs/icu/icu-src/source/i18n/collationsettings.cpp
index 534e20df3e8..9eeab483310 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationsettings.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationsettings.cpp
@@ -48,15 +48,15 @@ CollationSettings::~CollationSettings() {
}
}
-UBool
+bool
CollationSettings::operator==(const CollationSettings &other) const {
- if(options != other.options) { return FALSE; }
- if((options & ALTERNATE_MASK) != 0 && variableTop != other.variableTop) { return FALSE; }
- if(reorderCodesLength != other.reorderCodesLength) { return FALSE; }
+ if(options != other.options) { return false; }
+ if((options & ALTERNATE_MASK) != 0 && variableTop != other.variableTop) { return false; }
+ if(reorderCodesLength != other.reorderCodesLength) { return false; }
for(int32_t i = 0; i < reorderCodesLength; ++i) {
- if(reorderCodes[i] != other.reorderCodes[i]) { return FALSE; }
+ if(reorderCodes[i] != other.reorderCodes[i]) { return false; }
}
- return TRUE;
+ return true;
}
int32_t
diff --git a/Build/source/libs/icu/icu-src/source/i18n/collationsettings.h b/Build/source/libs/icu/icu-src/source/i18n/collationsettings.h
index 83e775d443b..3da8f6214f6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/collationsettings.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/collationsettings.h
@@ -115,9 +115,9 @@ struct U_I18N_API CollationSettings : public SharedObject {
CollationSettings(const CollationSettings &other);
virtual ~CollationSettings();
- UBool operator==(const CollationSettings &other) const;
+ bool operator==(const CollationSettings &other) const;
- inline UBool operator!=(const CollationSettings &other) const {
+ inline bool operator!=(const CollationSettings &other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/coptccal.h b/Build/source/libs/icu/icu-src/source/i18n/coptccal.h
index e9e812dbc7f..5c51af04ca0 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/coptccal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/coptccal.h
@@ -145,14 +145,14 @@ public:
* @return return a polymorphic copy of this calendar.
* @internal
*/
- virtual CopticCalendar* clone() const;
+ virtual CopticCalendar* clone() const override;
/**
* return the calendar type, "coptic"
* @return calendar type
* @internal
*/
- const char * getType() const;
+ const char * getType() const override;
protected:
//-------------------------------------------------------------------------
@@ -163,32 +163,32 @@ protected:
* Return the extended year defined by the current fields.
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Compute fields from the JD
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
/**
* Returns the date of the start of the default century
* @return start of century - in milliseconds since epoch, 1970
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Returns the year in which the default century begins
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
/**
* Return the date offset from Julian
* @internal
*/
- virtual int32_t getJDEpochOffset() const;
+ virtual int32_t getJDEpochOffset() const override;
public:
@@ -202,7 +202,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
diff --git a/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.cpp b/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.cpp
index 82ee54a77b5..dc0217ba612 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.cpp
@@ -282,6 +282,7 @@ void CompoundTransliterator::freeTransliterators(void) {
CompoundTransliterator& CompoundTransliterator::operator=(
const CompoundTransliterator& t)
{
+ if (this == &t) { return *this; } // self-assignment: no-op
Transliterator::operator=(t);
int32_t i = 0;
UBool failed = FALSE;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h b/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
index 5ed74fcdd12..af60cb827e3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
@@ -98,7 +98,7 @@ public:
/**
* Transliterator API.
*/
- virtual CompoundTransliterator* clone() const;
+ virtual CompoundTransliterator* clone() const override;
/**
* Returns the number of transliterators in this chain.
@@ -137,33 +137,33 @@ public:
* U+000A, U+0020..U+007E.
*/
virtual UnicodeString& toRules(UnicodeString& result,
- UBool escapeUnprintable) const;
+ UBool escapeUnprintable) const override;
protected:
/**
* Implement Transliterator framework
*/
- virtual void handleGetSourceSet(UnicodeSet& result) const;
+ virtual void handleGetSourceSet(UnicodeSet& result) const override;
public:
/**
* Override Transliterator framework
*/
- virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
+ virtual UnicodeSet& getTargetSet(UnicodeSet& result) const override;
protected:
/**
* Implements {@link Transliterator#handleTransliterate}.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& idx,
- UBool incremental) const;
+ UBool incremental) const override;
public:
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csdetect.cpp b/Build/source/libs/icu/icu-src/source/i18n/csdetect.cpp
index babb3084302..84f0776542d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csdetect.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/csdetect.cpp
@@ -385,7 +385,7 @@ enumNext(UEnumeration *en, int32_t *resultLength, UErrorCode * /*status*/) {
// ucsdet_getDetectableCharsets
UBool *enabledArray = ((Context *)en->context)->enabledRecognizers;
if (enabledArray != NULL) {
- // custome set
+ // custom set
while (currName == NULL && ((Context *)en->context)->currIndex < fCSRecognizers_size) {
if (enabledArray[((Context *)en->context)->currIndex]) {
currName = fCSRecognizers[((Context *)en->context)->currIndex]->recognizer->getName();
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csr2022.cpp b/Build/source/libs/icu/icu-src/source/i18n/csr2022.cpp
index ff26e5e9116..e064c426a2a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csr2022.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/csr2022.cpp
@@ -83,7 +83,7 @@ scanInput:
}
//
- // Initial quality is based on relative proportion of recongized vs.
+ // Initial quality is based on relative proportion of recognized vs.
// unrecognized escape sequences.
// All good: quality = 100;
// half or less good: quality = 0;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csr2022.h b/Build/source/libs/icu/icu-src/source/i18n/csr2022.h
index cde9019b466..4418728f0ec 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csr2022.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/csr2022.h
@@ -21,7 +21,7 @@ U_NAMESPACE_BEGIN
class CharsetMatch;
/**
- * class CharsetRecog_2022 part of the ICU charset detection imlementation.
+ * class CharsetRecog_2022 part of the ICU charset detection implementation.
* This is a superclass for the individual detectors for
* each of the detectable members of the ISO 2022 family
* of encodings.
@@ -62,9 +62,9 @@ class CharsetRecog_2022JP :public CharsetRecog_2022
public:
virtual ~CharsetRecog_2022JP();
- const char *getName() const;
+ const char *getName() const override;
- UBool match(InputText *textIn, CharsetMatch *results) const;
+ UBool match(InputText *textIn, CharsetMatch *results) const override;
};
#if !UCONFIG_ONLY_HTML_CONVERSION
@@ -72,9 +72,9 @@ class CharsetRecog_2022KR :public CharsetRecog_2022 {
public:
virtual ~CharsetRecog_2022KR();
- const char *getName() const;
+ const char *getName() const override;
- UBool match(InputText *textIn, CharsetMatch *results) const;
+ UBool match(InputText *textIn, CharsetMatch *results) const override;
};
@@ -83,9 +83,9 @@ class CharsetRecog_2022CN :public CharsetRecog_2022
public:
virtual ~CharsetRecog_2022CN();
- const char* getName() const;
+ const char* getName() const override;
- UBool match(InputText *textIn, CharsetMatch *results) const;
+ UBool match(InputText *textIn, CharsetMatch *results) const override;
};
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.cpp b/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.cpp
index 5579ba8ec3f..4c5bdfa560b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.cpp
@@ -23,7 +23,7 @@ U_NAMESPACE_BEGIN
static const uint16_t commonChars_sjis [] = {
// TODO: This set of data comes from the character frequency-
-// of-occurence analysis tool. The data needs to be moved
+// of-occurrence analysis tool. The data needs to be moved
// into a resource and loaded from there.
0x8140, 0x8141, 0x8142, 0x8145, 0x815b, 0x8169, 0x816a, 0x8175, 0x8176, 0x82a0,
0x82a2, 0x82a4, 0x82a9, 0x82aa, 0x82ab, 0x82ad, 0x82af, 0x82b1, 0x82b3, 0x82b5,
@@ -34,7 +34,7 @@ static const uint16_t commonChars_sjis [] = {
static const uint16_t commonChars_euc_jp[] = {
// TODO: This set of data comes from the character frequency-
-// of-occurence analysis tool. The data needs to be moved
+// of-occurrence analysis tool. The data needs to be moved
// into a resource and loaded from there.
0xa1a1, 0xa1a2, 0xa1a3, 0xa1a6, 0xa1bc, 0xa1ca, 0xa1cb, 0xa1d6, 0xa1d7, 0xa4a2,
0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4af, 0xa4b1, 0xa4b3,
@@ -49,7 +49,7 @@ static const uint16_t commonChars_euc_jp[] = {
static const uint16_t commonChars_euc_kr[] = {
// TODO: This set of data comes from the character frequency-
-// of-occurence analysis tool. The data needs to be moved
+// of-occurrence analysis tool. The data needs to be moved
// into a resource and loaded from there.
0xb0a1, 0xb0b3, 0xb0c5, 0xb0cd, 0xb0d4, 0xb0e6, 0xb0ed, 0xb0f8, 0xb0fa, 0xb0fc,
0xb1b8, 0xb1b9, 0xb1c7, 0xb1d7, 0xb1e2, 0xb3aa, 0xb3bb, 0xb4c2, 0xb4cf, 0xb4d9,
@@ -64,7 +64,7 @@ static const uint16_t commonChars_euc_kr[] = {
static const uint16_t commonChars_big5[] = {
// TODO: This set of data comes from the character frequency-
-// of-occurence analysis tool. The data needs to be moved
+// of-occurrence analysis tool. The data needs to be moved
// into a resource and loaded from there.
0xa140, 0xa141, 0xa142, 0xa143, 0xa147, 0xa149, 0xa175, 0xa176, 0xa440, 0xa446,
0xa447, 0xa448, 0xa451, 0xa454, 0xa457, 0xa464, 0xa46a, 0xa46c, 0xa477, 0xa4a3,
@@ -79,7 +79,7 @@ static const uint16_t commonChars_big5[] = {
static const uint16_t commonChars_gb_18030[] = {
// TODO: This set of data comes from the character frequency-
-// of-occurence analysis tool. The data needs to be moved
+// of-occurrence analysis tool. The data needs to be moved
// into a resource and loaded from there.
0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1b0, 0xa1b1, 0xa1f1, 0xa1f3, 0xa3a1, 0xa3ac,
0xa3ba, 0xb1a8, 0xb1b8, 0xb1be, 0xb2bb, 0xb3c9, 0xb3f6, 0xb4f3, 0xb5bd, 0xb5c4,
@@ -186,7 +186,7 @@ int32_t CharsetRecog_mbcs::match_mbcs(InputText *det, const uint16_t commonChars
if (doubleByteCharCount == 0 && totalCharCount < 10) {
// There weren't any multibyte sequences, and there was a low density of non-ASCII single bytes.
// We don't have enough data to have any confidence.
- // Statistical analysis of single byte non-ASCII charcters would probably help here.
+ // Statistical analysis of single byte non-ASCII characters would probably help here.
confidence = 0;
}
else {
@@ -209,7 +209,7 @@ int32_t CharsetRecog_mbcs::match_mbcs(InputText *det, const uint16_t commonChars
}
if (commonChars == 0) {
- // We have no statistics on frequently occuring characters.
+ // We have no statistics on frequently occurring characters.
// Assess confidence purely on having a reasonable number of
// multi-byte characters (the more the better)
confidence = 30 + doubleByteCharCount - 20*badCharCount;
@@ -219,7 +219,7 @@ int32_t CharsetRecog_mbcs::match_mbcs(InputText *det, const uint16_t commonChars
}
} else {
//
- // Frequency of occurence statistics exist.
+ // Frequency of occurrence statistics exist.
//
double maxVal = log((double)doubleByteCharCount / 4); /*(float)?*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.h b/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.h
index 8ccf1d56a95..ff7fc4e2a78 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.h
@@ -71,9 +71,9 @@ public:
* @return the charset name.
*/
- const char *getName() const = 0;
- const char *getLanguage() const = 0;
- UBool match(InputText* input, CharsetMatch *results) const = 0;
+ const char *getName() const override = 0;
+ const char *getLanguage() const override = 0;
+ UBool match(InputText* input, CharsetMatch *results) const override = 0;
/**
* Get the next character (however many bytes it is) from the input data
@@ -100,12 +100,12 @@ class CharsetRecog_sjis : public CharsetRecog_mbcs {
public:
virtual ~CharsetRecog_sjis();
- UBool nextChar(IteratedChar *it, InputText *det) const;
+ UBool nextChar(IteratedChar *it, InputText *det) const override;
- UBool match(InputText* input, CharsetMatch *results) const;
+ UBool match(InputText* input, CharsetMatch *results) const override;
- const char *getName() const;
- const char *getLanguage() const;
+ const char *getName() const override;
+ const char *getLanguage() const override;
};
@@ -121,17 +121,17 @@ class CharsetRecog_euc : public CharsetRecog_mbcs
public:
virtual ~CharsetRecog_euc();
- const char *getName() const = 0;
- const char *getLanguage() const = 0;
+ const char *getName() const override = 0;
+ const char *getLanguage() const override = 0;
- UBool match(InputText* input, CharsetMatch *results) const = 0;
+ UBool match(InputText* input, CharsetMatch *results) const override = 0;
/*
* (non-Javadoc)
* Get the next character value for EUC based encodings.
* Character "value" is simply the raw bytes that make up the character
* packed into an int.
*/
- UBool nextChar(IteratedChar *it, InputText *det) const;
+ UBool nextChar(IteratedChar *it, InputText *det) const override;
};
/**
@@ -143,10 +143,10 @@ class CharsetRecog_euc_jp : public CharsetRecog_euc
public:
virtual ~CharsetRecog_euc_jp();
- const char *getName() const;
- const char *getLanguage() const;
+ const char *getName() const override;
+ const char *getLanguage() const override;
- UBool match(InputText* input, CharsetMatch *results) const;
+ UBool match(InputText* input, CharsetMatch *results) const override;
};
/**
@@ -158,10 +158,10 @@ class CharsetRecog_euc_kr : public CharsetRecog_euc
public:
virtual ~CharsetRecog_euc_kr();
- const char *getName() const;
- const char *getLanguage() const;
+ const char *getName() const override;
+ const char *getLanguage() const override;
- UBool match(InputText* input, CharsetMatch *results) const;
+ UBool match(InputText* input, CharsetMatch *results) const override;
};
/**
@@ -174,12 +174,12 @@ class CharsetRecog_big5 : public CharsetRecog_mbcs
public:
virtual ~CharsetRecog_big5();
- UBool nextChar(IteratedChar* it, InputText* det) const;
+ UBool nextChar(IteratedChar* it, InputText* det) const override;
- const char *getName() const;
- const char *getLanguage() const;
+ const char *getName() const override;
+ const char *getLanguage() const override;
- UBool match(InputText* input, CharsetMatch *results) const;
+ UBool match(InputText* input, CharsetMatch *results) const override;
};
@@ -193,12 +193,12 @@ class CharsetRecog_gb_18030 : public CharsetRecog_mbcs
public:
virtual ~CharsetRecog_gb_18030();
- UBool nextChar(IteratedChar* it, InputText* det) const;
+ UBool nextChar(IteratedChar* it, InputText* det) const override;
- const char *getName() const;
- const char *getLanguage() const;
+ const char *getName() const override;
+ const char *getLanguage() const override;
- UBool match(InputText* input, CharsetMatch *results) const;
+ UBool match(InputText* input, CharsetMatch *results) const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csrsbcs.h b/Build/source/libs/icu/icu-src/source/i18n/csrsbcs.h
index 97687836795..96f982c59bd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csrsbcs.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/csrsbcs.h
@@ -63,8 +63,8 @@ public:
private:
int32_t alef;
int32_t isLamAlef(int32_t b);
- int32_t nextByte(InputText *det);
- void parseCharacters(InputText *det);
+ int32_t nextByte(InputText *det) override;
+ void parseCharacters(InputText *det) override;
};
#endif
@@ -74,8 +74,8 @@ class CharsetRecog_sbcs : public CharsetRecognizer
public:
CharsetRecog_sbcs();
virtual ~CharsetRecog_sbcs();
- virtual const char *getName() const = 0;
- virtual UBool match(InputText *det, CharsetMatch *results) const = 0;
+ virtual const char *getName() const override = 0;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override = 0;
virtual int32_t match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t charMap[]) const;
};
@@ -83,23 +83,23 @@ class CharsetRecog_8859_1 : public CharsetRecog_sbcs
{
public:
virtual ~CharsetRecog_8859_1();
- const char *getName() const;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ const char *getName() const override;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_8859_2 : public CharsetRecog_sbcs
{
public:
virtual ~CharsetRecog_8859_2();
- const char *getName() const;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ const char *getName() const override;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_8859_5 : public CharsetRecog_sbcs
{
public:
virtual ~CharsetRecog_8859_5();
- const char *getName() const;
+ const char *getName() const override;
};
class CharsetRecog_8859_6 : public CharsetRecog_sbcs
@@ -107,7 +107,7 @@ class CharsetRecog_8859_6 : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_8859_6();
- const char *getName() const;
+ const char *getName() const override;
};
class CharsetRecog_8859_7 : public CharsetRecog_sbcs
@@ -115,7 +115,7 @@ class CharsetRecog_8859_7 : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_8859_7();
- const char *getName() const;
+ const char *getName() const override;
};
class CharsetRecog_8859_8 : public CharsetRecog_sbcs
@@ -123,7 +123,7 @@ class CharsetRecog_8859_8 : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_8859_8();
- virtual const char *getName() const;
+ virtual const char *getName() const override;
};
class CharsetRecog_8859_9 : public CharsetRecog_sbcs
@@ -131,7 +131,7 @@ class CharsetRecog_8859_9 : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_8859_9();
- const char *getName() const;
+ const char *getName() const override;
};
@@ -141,9 +141,9 @@ class CharsetRecog_8859_5_ru : public CharsetRecog_8859_5
public:
virtual ~CharsetRecog_8859_5_ru();
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_8859_6_ar : public CharsetRecog_8859_6
@@ -151,9 +151,9 @@ class CharsetRecog_8859_6_ar : public CharsetRecog_8859_6
public:
virtual ~CharsetRecog_8859_6_ar();
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_8859_7_el : public CharsetRecog_8859_7
@@ -161,9 +161,9 @@ class CharsetRecog_8859_7_el : public CharsetRecog_8859_7
public:
virtual ~CharsetRecog_8859_7_el();
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_8859_8_I_he : public CharsetRecog_8859_8
@@ -171,11 +171,11 @@ class CharsetRecog_8859_8_I_he : public CharsetRecog_8859_8
public:
virtual ~CharsetRecog_8859_8_I_he();
- const char *getName() const;
+ const char *getName() const override;
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_8859_8_he : public CharsetRecog_8859_8
@@ -183,9 +183,9 @@ class CharsetRecog_8859_8_he : public CharsetRecog_8859_8
public:
virtual ~CharsetRecog_8859_8_he ();
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_8859_9_tr : public CharsetRecog_8859_9
@@ -193,9 +193,9 @@ class CharsetRecog_8859_9_tr : public CharsetRecog_8859_9
public:
virtual ~CharsetRecog_8859_9_tr ();
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_windows_1256 : public CharsetRecog_sbcs
@@ -203,11 +203,11 @@ class CharsetRecog_windows_1256 : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_windows_1256();
- const char *getName() const;
+ const char *getName() const override;
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_windows_1251 : public CharsetRecog_sbcs
@@ -215,11 +215,11 @@ class CharsetRecog_windows_1251 : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_windows_1251();
- const char *getName() const;
+ const char *getName() const override;
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
@@ -228,11 +228,11 @@ class CharsetRecog_KOI8_R : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_KOI8_R();
- const char *getName() const;
+ const char *getName() const override;
- const char *getLanguage() const;
+ const char *getLanguage() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
#if !UCONFIG_ONLY_HTML_CONVERSION
@@ -241,24 +241,24 @@ class CharsetRecog_IBM424_he : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_IBM424_he();
- const char *getLanguage() const;
+ const char *getLanguage() const override;
};
class CharsetRecog_IBM424_he_rtl : public CharsetRecog_IBM424_he {
public:
virtual ~CharsetRecog_IBM424_he_rtl();
- const char *getName() const;
+ const char *getName() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_IBM424_he_ltr : public CharsetRecog_IBM424_he {
virtual ~CharsetRecog_IBM424_he_ltr();
- const char *getName() const;
+ const char *getName() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_IBM420_ar : public CharsetRecog_sbcs
@@ -266,8 +266,8 @@ class CharsetRecog_IBM420_ar : public CharsetRecog_sbcs
public:
virtual ~CharsetRecog_IBM420_ar();
- const char *getLanguage() const;
- int32_t match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t charMap[]) const;
+ const char *getLanguage() const override;
+ int32_t match_sbcs(InputText *det, const int32_t ngrams[], const uint8_t charMap[]) const override;
};
@@ -275,17 +275,17 @@ class CharsetRecog_IBM420_ar_rtl : public CharsetRecog_IBM420_ar {
public:
virtual ~CharsetRecog_IBM420_ar_rtl();
- const char *getName() const;
+ const char *getName() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
class CharsetRecog_IBM420_ar_ltr : public CharsetRecog_IBM420_ar {
virtual ~CharsetRecog_IBM420_ar_ltr();
- const char *getName() const;
+ const char *getName() const override;
- virtual UBool match(InputText *det, CharsetMatch *results) const;
+ virtual UBool match(InputText *det, CharsetMatch *results) const override;
};
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csrucode.cpp b/Build/source/libs/icu/icu-src/source/i18n/csrucode.cpp
index 59f2dbe284c..480dae1400c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csrucode.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/csrucode.cpp
@@ -144,7 +144,7 @@ UBool CharsetRecog_UTF_32::match(InputText* textIn, CharsetMatch *results) const
}
- // Cook up some sort of confidence score, based on presense of a BOM
+ // Cook up some sort of confidence score, based on presence of a BOM
// and the existence of valid and/or invalid multi-byte sequences.
if (hasBOM && numInvalid==0) {
confidence = 100;
@@ -155,7 +155,7 @@ UBool CharsetRecog_UTF_32::match(InputText* textIn, CharsetMatch *results) const
} else if (numValid > 0 && numInvalid == 0) {
confidence = 80;
} else if (numValid > numInvalid*10) {
- // Probably corruput UTF-32BE data. Valid sequences aren't likely by chance.
+ // Probably corrupt UTF-32BE data. Valid sequences aren't likely by chance.
confidence = 25;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csrucode.h b/Build/source/libs/icu/icu-src/source/i18n/csrucode.h
index cef35447fb7..78e08d22f11 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csrucode.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/csrucode.h
@@ -33,12 +33,12 @@ public:
/* (non-Javadoc)
* @see com.ibm.icu.text.CharsetRecognizer#getName()
*/
- const char* getName() const = 0;
+ const char* getName() const override = 0;
/* (non-Javadoc)
* @see com.ibm.icu.text.CharsetRecognizer#match(com.ibm.icu.text.CharsetDetector)
*/
- UBool match(InputText* textIn, CharsetMatch *results) const = 0;
+ UBool match(InputText* textIn, CharsetMatch *results) const override = 0;
};
@@ -48,9 +48,9 @@ public:
virtual ~CharsetRecog_UTF_16_BE();
- const char *getName() const;
+ const char *getName() const override;
- UBool match(InputText* textIn, CharsetMatch *results) const;
+ UBool match(InputText* textIn, CharsetMatch *results) const override;
};
class CharsetRecog_UTF_16_LE : public CharsetRecog_Unicode
@@ -59,9 +59,9 @@ public:
virtual ~CharsetRecog_UTF_16_LE();
- const char *getName() const;
+ const char *getName() const override;
- UBool match(InputText* textIn, CharsetMatch *results) const;
+ UBool match(InputText* textIn, CharsetMatch *results) const override;
};
class CharsetRecog_UTF_32 : public CharsetRecog_Unicode
@@ -72,34 +72,34 @@ public:
virtual ~CharsetRecog_UTF_32();
- const char* getName() const = 0;
+ const char* getName() const override = 0;
- UBool match(InputText* textIn, CharsetMatch *results) const;
+ UBool match(InputText* textIn, CharsetMatch *results) const override;
};
class CharsetRecog_UTF_32_BE : public CharsetRecog_UTF_32
{
protected:
- int32_t getChar(const uint8_t *input, int32_t index) const;
+ int32_t getChar(const uint8_t *input, int32_t index) const override;
public:
virtual ~CharsetRecog_UTF_32_BE();
- const char *getName() const;
+ const char *getName() const override;
};
class CharsetRecog_UTF_32_LE : public CharsetRecog_UTF_32
{
protected:
- int32_t getChar(const uint8_t *input, int32_t index) const;
+ int32_t getChar(const uint8_t *input, int32_t index) const override;
public:
virtual ~CharsetRecog_UTF_32_LE();
- const char* getName() const;
+ const char* getName() const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csrutf8.cpp b/Build/source/libs/icu/icu-src/source/i18n/csrutf8.cpp
index b42bd8b39e6..3f16224ea6e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csrutf8.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/csrutf8.cpp
@@ -99,7 +99,7 @@ UBool CharsetRecog_UTF8::match(InputText* input, CharsetMatch *results) const {
// accepts ASCII with confidence = 10.
confidence = 15;
} else if (numValid > numInvalid*10) {
- // Probably corruput utf-8 data. Valid sequences aren't likely by chance.
+ // Probably corrupt utf-8 data. Valid sequences aren't likely by chance.
confidence = 25;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/csrutf8.h b/Build/source/libs/icu/icu-src/source/i18n/csrutf8.h
index 6089eb6f75c..bcfb38ac951 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/csrutf8.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/csrutf8.h
@@ -29,12 +29,12 @@ class CharsetRecog_UTF8: public CharsetRecognizer {
virtual ~CharsetRecog_UTF8();
- const char *getName() const;
+ const char *getName() const override;
/* (non-Javadoc)
* @see com.ibm.icu.text.CharsetRecognizer#match(com.ibm.icu.text.CharsetDetector)
*/
- UBool match(InputText *input, CharsetMatch *results) const;
+ UBool match(InputText *input, CharsetMatch *results) const override;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/currfmt.h b/Build/source/libs/icu/icu-src/source/i18n/currfmt.h
index 69a031957bc..2a75cae2bb3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/currfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/currfmt.h
@@ -57,7 +57,7 @@ class CurrencyFormat : public MeasureFormat {
/**
* Override Format API.
*/
- virtual CurrencyFormat* clone() const;
+ virtual CurrencyFormat* clone() const override;
using MeasureFormat::format;
@@ -68,19 +68,19 @@ class CurrencyFormat : public MeasureFormat {
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPosition& pos,
- UErrorCode& ec) const;
+ UErrorCode& ec) const override;
/**
* Override Format API.
*/
virtual void parseObject(const UnicodeString& source,
Formattable& result,
- ParsePosition& pos) const;
+ ParsePosition& pos) const override;
/**
* Override Format API.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* Returns the class ID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/currpinf.cpp b/Build/source/libs/icu/icu-src/source/i18n/currpinf.cpp
index af9c837af89..a2676ab5a1e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/currpinf.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/currpinf.cpp
@@ -145,7 +145,7 @@ CurrencyPluralInfo::~CurrencyPluralInfo() {
fLocale = nullptr;
}
-UBool
+bool
CurrencyPluralInfo::operator==(const CurrencyPluralInfo& info) const {
#ifdef CURRENCY_PLURAL_INFO_DEBUG
if (*fPluralRules == *info.fPluralRules) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dangical.cpp b/Build/source/libs/icu/icu-src/source/i18n/dangical.cpp
index 02db40368ec..57fe80220b9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dangical.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dangical.cpp
@@ -52,7 +52,7 @@ U_NAMESPACE_BEGIN
//-------------------------------------------------------------------------
DangiCalendar::DangiCalendar(const Locale& aLocale, UErrorCode& success)
-: ChineseCalendar(aLocale, DANGI_EPOCH_YEAR, getDangiCalZoneAstroCalc(), success)
+: ChineseCalendar(aLocale, DANGI_EPOCH_YEAR, getDangiCalZoneAstroCalc(success), success)
{
}
@@ -103,32 +103,41 @@ const char *DangiCalendar::getType() const {
* 1898-1911: GMT+8
* 1912- : GMT+9
*/
-static void U_CALLCONV initDangiCalZoneAstroCalc(void) {
- U_ASSERT(gDangiCalendarZoneAstroCalc == NULL);
+static void U_CALLCONV initDangiCalZoneAstroCalc(UErrorCode &status) {
+ U_ASSERT(gDangiCalendarZoneAstroCalc == nullptr);
const UDate millis1897[] = { (UDate)((1897 - 1970) * 365 * kOneDay) }; // some days of error is not a problem here
const UDate millis1898[] = { (UDate)((1898 - 1970) * 365 * kOneDay) }; // some days of error is not a problem here
const UDate millis1912[] = { (UDate)((1912 - 1970) * 365 * kOneDay) }; // this doesn't create an issue for 1911/12/20
- InitialTimeZoneRule* initialTimeZone = new InitialTimeZoneRule(UNICODE_STRING_SIMPLE("GMT+8"), 8*kOneHour, 0);
- TimeZoneRule* rule1897 = new TimeArrayTimeZoneRule(UNICODE_STRING_SIMPLE("Korean 1897"), 7*kOneHour, 0, millis1897, 1, DateTimeRule::STANDARD_TIME);
- TimeZoneRule* rule1898to1911 = new TimeArrayTimeZoneRule(UNICODE_STRING_SIMPLE("Korean 1898-1911"), 8*kOneHour, 0, millis1898, 1, DateTimeRule::STANDARD_TIME);
- TimeZoneRule* ruleFrom1912 = new TimeArrayTimeZoneRule(UNICODE_STRING_SIMPLE("Korean 1912-"), 9*kOneHour, 0, millis1912, 1, DateTimeRule::STANDARD_TIME);
- UErrorCode status = U_ZERO_ERROR;
- RuleBasedTimeZone* dangiCalZoneAstroCalc = new RuleBasedTimeZone(UNICODE_STRING_SIMPLE("KOREA_ZONE"), initialTimeZone); // adopts initialTimeZone
- dangiCalZoneAstroCalc->addTransitionRule(rule1897, status); // adopts rule1897
- dangiCalZoneAstroCalc->addTransitionRule(rule1898to1911, status);
- dangiCalZoneAstroCalc->addTransitionRule(ruleFrom1912, status);
+ LocalPointer<InitialTimeZoneRule> initialTimeZone(new InitialTimeZoneRule(
+ UnicodeString(u"GMT+8"), 8*kOneHour, 0), status);
+
+ LocalPointer<TimeZoneRule> rule1897(new TimeArrayTimeZoneRule(
+ UnicodeString(u"Korean 1897"), 7*kOneHour, 0, millis1897, 1, DateTimeRule::STANDARD_TIME), status);
+
+ LocalPointer<TimeZoneRule> rule1898to1911(new TimeArrayTimeZoneRule(
+ UnicodeString(u"Korean 1898-1911"), 8*kOneHour, 0, millis1898, 1, DateTimeRule::STANDARD_TIME), status);
+
+ LocalPointer<TimeZoneRule> ruleFrom1912(new TimeArrayTimeZoneRule(
+ UnicodeString(u"Korean 1912-"), 9*kOneHour, 0, millis1912, 1, DateTimeRule::STANDARD_TIME), status);
+
+ LocalPointer<RuleBasedTimeZone> dangiCalZoneAstroCalc(new RuleBasedTimeZone(
+ UnicodeString(u"KOREA_ZONE"), initialTimeZone.orphan()), status); // adopts initialTimeZone
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+ dangiCalZoneAstroCalc->addTransitionRule(rule1897.orphan(), status); // adopts rule1897
+ dangiCalZoneAstroCalc->addTransitionRule(rule1898to1911.orphan(), status);
+ dangiCalZoneAstroCalc->addTransitionRule(ruleFrom1912.orphan(), status);
dangiCalZoneAstroCalc->complete(status);
if (U_SUCCESS(status)) {
- gDangiCalendarZoneAstroCalc = dangiCalZoneAstroCalc;
- } else {
- delete dangiCalZoneAstroCalc;
- gDangiCalendarZoneAstroCalc = NULL;
+ gDangiCalendarZoneAstroCalc = dangiCalZoneAstroCalc.orphan();
}
ucln_i18n_registerCleanup(UCLN_I18N_DANGI_CALENDAR, calendar_dangi_cleanup);
}
-const TimeZone* DangiCalendar::getDangiCalZoneAstroCalc(void) const {
- umtx_initOnce(gDangiCalendarInitOnce, &initDangiCalZoneAstroCalc);
+const TimeZone* DangiCalendar::getDangiCalZoneAstroCalc(UErrorCode &status) const {
+ umtx_initOnce(gDangiCalendarInitOnce, &initDangiCalZoneAstroCalc, status);
return gDangiCalendarZoneAstroCalc;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dangical.h b/Build/source/libs/icu/icu-src/source/i18n/dangical.h
index ece805e36d3..9d0437264ef 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dangical.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/dangical.h
@@ -66,7 +66,7 @@ class DangiCalendar : public ChineseCalendar {
* Clone.
* @internal
*/
- virtual DangiCalendar* clone() const;
+ virtual DangiCalendar* clone() const override;
//----------------------------------------------------------------------
// Internal methods & astronomical calculations
@@ -74,7 +74,7 @@ class DangiCalendar : public ChineseCalendar {
private:
- const TimeZone* getDangiCalZoneAstroCalc(void) const;
+ const TimeZone* getDangiCalZoneAstroCalc(UErrorCode &status) const;
// UObject stuff
public:
@@ -83,7 +83,7 @@ class DangiCalendar : public ChineseCalendar {
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -104,7 +104,7 @@ class DangiCalendar : public ChineseCalendar {
* @return calendar type
* @internal
*/
- const char * getType() const;
+ const char * getType() const override;
private:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/datefmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/datefmt.cpp
index a0e039cd507..fed8f79aa0f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/datefmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/datefmt.cpp
@@ -68,6 +68,14 @@ const DateFmtBestPattern *LocaleCacheKey<DateFmtBestPattern>::createObject(
class U_I18N_API DateFmtBestPatternKey : public LocaleCacheKey<DateFmtBestPattern> {
private:
UnicodeString fSkeleton;
+protected:
+ virtual bool equals(const CacheKeyBase &other) const override {
+ if (!LocaleCacheKey<DateFmtBestPattern>::equals(other)) {
+ return false;
+ }
+ // We know that this and other are of same class if we get this far.
+ return operator==(static_cast<const DateFmtBestPatternKey &>(other));
+ }
public:
DateFmtBestPatternKey(
const Locale &loc,
@@ -79,27 +87,17 @@ public:
LocaleCacheKey<DateFmtBestPattern>(other),
fSkeleton(other.fSkeleton) { }
virtual ~DateFmtBestPatternKey();
- virtual int32_t hashCode() const {
+ virtual int32_t hashCode() const override {
return (int32_t)(37u * (uint32_t)LocaleCacheKey<DateFmtBestPattern>::hashCode() + (uint32_t)fSkeleton.hashCode());
}
- virtual UBool operator==(const CacheKeyBase &other) const {
- // reflexive
- if (this == &other) {
- return TRUE;
- }
- if (!LocaleCacheKey<DateFmtBestPattern>::operator==(other)) {
- return FALSE;
- }
- // We know that this and other are of same class if we get this far.
- const DateFmtBestPatternKey &realOther =
- static_cast<const DateFmtBestPatternKey &>(other);
- return (realOther.fSkeleton == fSkeleton);
+ inline bool operator==(const DateFmtBestPatternKey &other) const {
+ return fSkeleton == other.fSkeleton;
}
- virtual CacheKeyBase *clone() const {
+ virtual CacheKeyBase *clone() const override {
return new DateFmtBestPatternKey(*this);
}
virtual const DateFmtBestPattern *createObject(
- const void * /*unused*/, UErrorCode &status) const {
+ const void * /*unused*/, UErrorCode &status) const override {
LocalPointer<DateTimePatternGenerator> dtpg(
DateTimePatternGenerator::createInstance(fLoc, status));
if (U_FAILURE(status)) {
@@ -174,7 +172,7 @@ DateFormat::~DateFormat()
//----------------------------------------------------------------------
-UBool
+bool
DateFormat::operator==(const Format& other) const
{
// This protected comparison operator should only be called by subclasses
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.cpp b/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.cpp
index e364ecb708c..efe92dd794b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.cpp
@@ -50,7 +50,7 @@ struct DayPeriodRulesDataSink : public ResourceSink {
}
virtual ~DayPeriodRulesDataSink();
- virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) {
+ virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) override {
ResourceTable dayPeriodData = value.getTable(errorCode);
if (U_FAILURE(errorCode)) { return; }
@@ -282,7 +282,7 @@ struct DayPeriodRulesDataSink : public ResourceSink {
struct DayPeriodRulesCountSink : public ResourceSink {
virtual ~DayPeriodRulesCountSink();
- virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) {
+ virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) override {
ResourceTable rules = value.getTable(errorCode);
if (U_FAILURE(errorCode)) { return; }
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp b/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
index 15418bfe65f..4f5bae4e11e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
@@ -92,6 +92,7 @@ static const char *gNumberElementKeys[DecimalFormatSymbols::kFormatSymbolCount]
NULL, /* eight digit - get it from the numbering system */
NULL, /* nine digit - get it from the numbering system */
"superscriptingExponent", /* Multiplication (x) symbol for exponents */
+ "approximatelySign" /* Approximately sign symbol */
};
// -------------------------------------
@@ -174,29 +175,29 @@ DecimalFormatSymbols::operator=(const DecimalFormatSymbols& rhs)
// -------------------------------------
-UBool
+bool
DecimalFormatSymbols::operator==(const DecimalFormatSymbols& that) const
{
if (this == &that) {
- return TRUE;
+ return true;
}
if (fIsCustomCurrencySymbol != that.fIsCustomCurrencySymbol) {
- return FALSE;
+ return false;
}
if (fIsCustomIntlCurrencySymbol != that.fIsCustomIntlCurrencySymbol) {
- return FALSE;
+ return false;
}
for(int32_t i = 0; i < (int32_t)kFormatSymbolCount; ++i) {
if(fSymbols[(ENumberFormatSymbol)i] != that.fSymbols[(ENumberFormatSymbol)i]) {
- return FALSE;
+ return false;
}
}
for(int32_t i = 0; i < (int32_t)UNUM_CURRENCY_SPACING_COUNT; ++i) {
if(currencySpcBeforeSym[i] != that.currencySpcBeforeSym[i]) {
- return FALSE;
+ return false;
}
if(currencySpcAfterSym[i] != that.currencySpcAfterSym[i]) {
- return FALSE;
+ return false;
}
}
// No need to check fCodePointZero since it is based on fSymbols
@@ -221,7 +222,7 @@ struct DecFmtSymDataSink : public ResourceSink {
// Destination for data, modified via setters.
DecimalFormatSymbols& dfs;
// Boolean array of whether or not we have seen a particular symbol yet.
- // Can't simpy check fSymbols because it is pre-populated with defaults.
+ // Can't simply check fSymbols because it is pre-populated with defaults.
UBool seenSymbol[DecimalFormatSymbols::kFormatSymbolCount];
// Constructor/Destructor
@@ -231,7 +232,7 @@ struct DecFmtSymDataSink : public ResourceSink {
virtual ~DecFmtSymDataSink();
virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
+ UErrorCode &errorCode) override {
ResourceTable symbolsTable = value.getTable(errorCode);
if (U_FAILURE(errorCode)) { return; }
for (int32_t j = 0; symbolsTable.getKeyAndValue(j, key, value); ++j) {
@@ -286,7 +287,7 @@ struct CurrencySpacingSink : public ResourceSink {
virtual ~CurrencySpacingSink();
virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
+ UErrorCode &errorCode) override {
ResourceTable spacingTypesTable = value.getTable(errorCode);
for (int32_t i = 0; spacingTypesTable.getKeyAndValue(i, key, value); ++i) {
UBool beforeCurrency;
@@ -508,6 +509,7 @@ DecimalFormatSymbols::initialize() {
fSymbols[kSignificantDigitSymbol] = (UChar)0x0040; // '@' significant digit
fSymbols[kMonetaryGroupingSeparatorSymbol].remove(); //
fSymbols[kExponentMultiplicationSymbol] = (UChar)0xd7; // 'x' multiplication symbol for exponents
+ fSymbols[kApproximatelySignSymbol] = u'~'; // '~' approximately sign
fIsCustomCurrencySymbol = FALSE;
fIsCustomIntlCurrencySymbol = FALSE;
fCodePointZero = 0x30;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/decContext.cpp b/Build/source/libs/icu/icu-src/source/i18n/decContext.cpp
index 6ec6d32afb5..421d65b43f9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/decContext.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/decContext.cpp
@@ -150,7 +150,7 @@ U_CAPI uInt U_EXPORT2 uprv_decContextGetStatus(decContext *context) {
/* newstatus is the source for the bits to be restored */
/* mask indicates the bits to be restored (the status bit that */
/* corresponds to each 1 bit in the mask is set to the value of */
-/* the correspnding bit in newstatus) */
+/* the corresponding bit in newstatus) */
/* returns context */
/* */
/* No error is possible. */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/decNumber.cpp b/Build/source/libs/icu/icu-src/source/i18n/decNumber.cpp
index cee2f8e9498..71477d8202c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/decNumber.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/decNumber.cpp
@@ -2203,7 +2203,7 @@ U_CAPI decNumber * U_EXPORT2 uprv_decNumberPower(decNumber *res, const decNumber
/* if a negative power the constant 1 is needed, and if not subset */
/* invert the lhs now rather than inverting the result later */
if (decNumberIsNegative(rhs)) { /* was a **-n [hence digits>0] */
- decNumber *inv=invbuff; /* asssume use fixed buffer */
+ decNumber *inv=invbuff; /* assume use fixed buffer */
uprv_decNumberCopy(&dnOne, dac); /* dnOne=1; [needed now or later] */
#if DECSUBSET
if (set->extended) { /* need to calculate 1/lhs */
@@ -3776,7 +3776,7 @@ static void decToString(const decNumber *dn, char *string, Flag eng) {
/* Finally add the E-part, if needed. It will never be 0, has a
base maximum and minimum of +999999999 through -999999999, but
- could range down to -1999999998 for anormal numbers */
+ could range down to -1999999998 for abnormal numbers */
if (e!=0) {
Flag had=0; /* 1=had non-zero */
*c='E'; c++;
@@ -3831,7 +3831,7 @@ static void decToString(const decNumber *dn, char *string, Flag eng) {
/* */
/* Addition, especially x=x+1, is speed-critical. */
/* The static buffer is larger than might be expected to allow for */
-/* calls from higher-level funtions (notable exp). */
+/* calls from higher-level functions (notable exp). */
/* ------------------------------------------------------------------ */
static decNumber * decAddOp(decNumber *res, const decNumber *lhs,
const decNumber *rhs, decContext *set,
@@ -4247,7 +4247,7 @@ static decNumber * decAddOp(decNumber *res, const decNumber *lhs,
/* long subtractions. These are acc and var1 respectively. */
/* var1 is a copy of the lhs coefficient, var2 is the rhs coefficient.*/
/* The static buffers may be larger than might be expected to allow */
-/* for calls from higher-level funtions (notable exp). */
+/* for calls from higher-level functions (notable exp). */
/* ------------------------------------------------------------------ */
static decNumber * decDivideOp(decNumber *res,
const decNumber *lhs, const decNumber *rhs,
@@ -5242,7 +5242,7 @@ static decNumber * decMultiplyOp(decNumber *res, const decNumber *lhs,
/* exp(-x) where x can be the tiniest number (Ntiny). */
/* */
/* 2. Normalizing x to be <=0.1 (instead of <=1) reduces loop */
-/* iterations by appoximately a third with additional (although */
+/* iterations by approximately a third with additional (although */
/* diminishing) returns as the range is reduced to even smaller */
/* fractions. However, h (the power of 10 used to correct the */
/* result at the end, see below) must be kept <=8 as otherwise */
@@ -5616,7 +5616,7 @@ static const uShort LNnn[90]={9016, 8652, 8316, 8008, 7724, 7456, 7208,
/* would certainly save at least one if it were made ten times */
/* bigger, too (for truncated fractions 0.100 through 0.999). */
/* However, for most practical evaluations, at least four or five */
-/* iterations will be neede -- so this would only speed up by */
+/* iterations will be needed -- so this would only speed up by */
/* 20-25% and that probably does not justify increasing the table */
/* size. */
/* */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/decNumberLocal.h b/Build/source/libs/icu/icu-src/source/i18n/decNumberLocal.h
index e8d1b38653e..1c5a79b7021 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/decNumberLocal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/decNumberLocal.h
@@ -146,7 +146,7 @@
/* ---------------------------------------------------------------- */
- /* Definitions for arbitary-precision modules (only valid after */
+ /* Definitions for arbitrary-precision modules (only valid after */
/* decNumber.h has been included) */
/* ---------------------------------------------------------------- */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
index daa1129a6ab..bca33366792 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
@@ -137,7 +137,7 @@ DecimalFormat::setAttribute(UNumberFormatAttribute attr, int32_t newValue, UErro
if (U_FAILURE(status)) { return *this; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
return *this;
}
@@ -271,7 +271,7 @@ int32_t DecimalFormat::getAttribute(UNumberFormatAttribute attr, UErrorCode& sta
if (U_FAILURE(status)) { return -1; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
return -1;
}
@@ -439,7 +439,7 @@ DecimalFormat::DecimalFormat(const DecimalFormat& source) : NumberFormat(source)
return; // no way to report an error.
}
UErrorCode status = U_ZERO_ERROR;
- fields->symbols.adoptInsteadAndCheckErrorCode(new DecimalFormatSymbols(*source.fields->symbols), status);
+ fields->symbols.adoptInsteadAndCheckErrorCode(new DecimalFormatSymbols(*source.getDecimalFormatSymbols()), status);
// In order to simplify error handling logic in the various getters/setters/etc, we do not allow
// any partially populated DecimalFormatFields object. We must have a fully complete fields object
// or else we set it to nullptr.
@@ -463,7 +463,7 @@ DecimalFormat& DecimalFormat::operator=(const DecimalFormat& rhs) {
fields->properties = rhs.fields->properties;
fields->exportedProperties.clear();
UErrorCode status = U_ZERO_ERROR;
- LocalPointer<DecimalFormatSymbols> dfs(new DecimalFormatSymbols(*rhs.fields->symbols), status);
+ LocalPointer<DecimalFormatSymbols> dfs(new DecimalFormatSymbols(*rhs.getDecimalFormatSymbols()), status);
if (U_FAILURE(status)) {
// We failed to allocate DecimalFormatSymbols, release fields and its members.
// We must have a fully complete fields object, we cannot have partially populated members.
@@ -497,7 +497,7 @@ DecimalFormat* DecimalFormat::clone() const {
return nullptr;
}
-UBool DecimalFormat::operator==(const Format& other) const {
+bool DecimalFormat::operator==(const Format& other) const {
auto* otherDF = dynamic_cast<const DecimalFormat*>(&other);
if (otherDF == nullptr) {
return false;
@@ -507,7 +507,7 @@ UBool DecimalFormat::operator==(const Format& other) const {
if (fields == nullptr || otherDF->fields == nullptr) {
return false;
}
- return fields->properties == otherDF->fields->properties && *fields->symbols == *otherDF->fields->symbols;
+ return fields->properties == otherDF->fields->properties && *getDecimalFormatSymbols() == *otherDF->getDecimalFormatSymbols();
}
UnicodeString& DecimalFormat::format(double number, UnicodeString& appendTo, FieldPosition& pos) const {
@@ -534,7 +534,7 @@ UnicodeString& DecimalFormat::format(double number, UnicodeString& appendTo, Fie
return appendTo; // don't overwrite status if it's already a failure.
}
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
appendTo.setToBogus();
return appendTo;
@@ -558,7 +558,7 @@ DecimalFormat::format(double number, UnicodeString& appendTo, FieldPositionItera
return appendTo; // don't overwrite status if it's already a failure.
}
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
appendTo.setToBogus();
return appendTo;
@@ -614,7 +614,7 @@ UnicodeString& DecimalFormat::format(int64_t number, UnicodeString& appendTo, Fi
return appendTo; // don't overwrite status if it's already a failure.
}
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
appendTo.setToBogus();
return appendTo;
@@ -638,7 +638,7 @@ DecimalFormat::format(int64_t number, UnicodeString& appendTo, FieldPositionIter
return appendTo; // don't overwrite status if it's already a failure.
}
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
appendTo.setToBogus();
return appendTo;
@@ -662,7 +662,7 @@ DecimalFormat::format(StringPiece number, UnicodeString& appendTo, FieldPosition
return appendTo; // don't overwrite status if it's already a failure.
}
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
appendTo.setToBogus();
return appendTo;
@@ -682,7 +682,7 @@ UnicodeString& DecimalFormat::format(const DecimalQuantity& number, UnicodeStrin
return appendTo; // don't overwrite status if it's already a failure.
}
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
appendTo.setToBogus();
return appendTo;
@@ -703,7 +703,7 @@ DecimalFormat::format(const DecimalQuantity& number, UnicodeString& appendTo, Fi
return appendTo; // don't overwrite status if it's already a failure.
}
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
appendTo.setToBogus();
return appendTo;
@@ -794,7 +794,11 @@ const DecimalFormatSymbols* DecimalFormat::getDecimalFormatSymbols(void) const {
if (fields == nullptr) {
return nullptr;
}
- return fields->symbols.getAlias();
+ if (!fields->symbols.isNull()) {
+ return fields->symbols.getAlias();
+ } else {
+ return fields->formatter.getDecimalFormatSymbols();
+ }
}
void DecimalFormat::adoptDecimalFormatSymbols(DecimalFormatSymbols* symbolsToAdopt) {
@@ -1073,7 +1077,7 @@ void DecimalFormat::setFormatWidth(int32_t width) {
UnicodeString DecimalFormat::getPadCharacterString() const {
if (fields == nullptr || fields->properties.padString.isBogus()) {
// Readonly-alias the static string kFallbackPaddingString
- return {TRUE, kFallbackPaddingString, -1};
+ return {true, kFallbackPaddingString, -1};
} else {
return fields->properties.padString;
}
@@ -1304,7 +1308,7 @@ void DecimalFormat::setFormatFailIfMoreThanMaxDigits(UBool value) {
UnicodeString& DecimalFormat::toPattern(UnicodeString& result) const {
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
result.setToBogus();
return result;
}
@@ -1318,6 +1322,7 @@ UnicodeString& DecimalFormat::toPattern(UnicodeString& result) const {
!tprops.currency.isNull() ||
!tprops.currencyPluralInfo.fPtr.isNull() ||
!tprops.currencyUsage.isNull() ||
+ tprops.currencyAsDecimal ||
AffixUtils::hasCurrencySymbols(tprops.positivePrefixPattern, localStatus) ||
AffixUtils::hasCurrencySymbols(tprops.positiveSuffixPattern, localStatus) ||
AffixUtils::hasCurrencySymbols(tprops.negativePrefixPattern, localStatus) ||
@@ -1333,13 +1338,13 @@ UnicodeString& DecimalFormat::toPattern(UnicodeString& result) const {
UnicodeString& DecimalFormat::toLocalizedPattern(UnicodeString& result) const {
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
result.setToBogus();
return result;
}
ErrorCode localStatus;
result = toPattern(result);
- result = PatternStringUtils::convertLocalized(result, *fields->symbols, true, localStatus);
+ result = PatternStringUtils::convertLocalized(result, *getDecimalFormatSymbols(), true, localStatus);
return result;
}
@@ -1352,7 +1357,7 @@ void DecimalFormat::applyPattern(const UnicodeString& pattern, UErrorCode& statu
// don't overwrite status if it's already a failure.
if (U_FAILURE(status)) { return; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -1370,12 +1375,12 @@ void DecimalFormat::applyLocalizedPattern(const UnicodeString& localizedPattern,
// don't overwrite status if it's already a failure.
if (U_FAILURE(status)) { return; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
UnicodeString pattern = PatternStringUtils::convertLocalized(
- localizedPattern, *fields->symbols, false, status);
+ localizedPattern, *getDecimalFormatSymbols(), false, status);
applyPattern(pattern, status);
}
@@ -1509,7 +1514,7 @@ void DecimalFormat::setCurrency(const char16_t* theCurrency, UErrorCode& ec) {
// don't overwrite ec if it's already a failure.
if (U_FAILURE(ec)) { return; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
ec = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -1521,7 +1526,7 @@ void DecimalFormat::setCurrency(const char16_t* theCurrency, UErrorCode& ec) {
NumberFormat::setCurrency(theCurrency, ec); // to set field for compatibility
fields->properties.currency = currencyUnit;
// In Java, the DecimalFormatSymbols is mutable. Why not in C++?
- LocalPointer<DecimalFormatSymbols> newSymbols(new DecimalFormatSymbols(*fields->symbols), ec);
+ LocalPointer<DecimalFormatSymbols> newSymbols(new DecimalFormatSymbols(*getDecimalFormatSymbols()), ec);
newSymbols->setCurrency(currencyUnit.getISOCurrency(), ec);
fields->symbols.adoptInsteadAndCheckErrorCode(newSymbols.orphan(), ec);
touch(ec);
@@ -1536,7 +1541,7 @@ void DecimalFormat::setCurrencyUsage(UCurrencyUsage newUsage, UErrorCode* ec) {
// don't overwrite ec if it's already a failure.
if (U_FAILURE(*ec)) { return; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
*ec = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -1561,7 +1566,7 @@ DecimalFormat::formatToDecimalQuantity(double number, DecimalQuantity& output, U
// don't overwrite status if it's already a failure.
if (U_FAILURE(status)) { return; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -1573,7 +1578,7 @@ void DecimalFormat::formatToDecimalQuantity(const Formattable& number, DecimalQu
// don't overwrite status if it's already a failure.
if (U_FAILURE(status)) { return; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
@@ -1587,7 +1592,7 @@ const number::LocalizedNumberFormatter* DecimalFormat::toNumberFormatter(UErrorC
// We sometimes need to return nullptr here (see ICU-20380)
if (U_FAILURE(status)) { return nullptr; }
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
status = U_MEMORY_ALLOCATION_ERROR;
return nullptr;
}
@@ -1600,7 +1605,7 @@ void DecimalFormat::touch(UErrorCode& status) {
return;
}
if (fields == nullptr) {
- // We only get here if an OOM error happend during construction, copy construction, assignment, or modification.
+ // We only get here if an OOM error happened during construction, copy construction, assignment, or modification.
// For regular construction, the caller should have checked the status variable for errors.
// For copy construction, there is unfortunately nothing to report the error, so we need to guard against
// this possible bad state here and set the status to an error.
@@ -1608,9 +1613,11 @@ void DecimalFormat::touch(UErrorCode& status) {
return;
}
- // In C++, fields->symbols is the source of truth for the locale.
- Locale locale = fields->symbols->getLocale();
-
+ // In C++, fields->symbols (or, if it's null, the DecimalFormatSymbols owned by the underlying LocalizedNumberFormatter)
+ // is the source of truth for the locale.
+ const DecimalFormatSymbols* symbols = getDecimalFormatSymbols();
+ Locale locale = symbols->getLocale();
+
// Note: The formatter is relatively cheap to create, and we need it to populate fields->exportedProperties,
// so automatically recompute it here. The parser is a bit more expensive and is not needed until the
// parse method is called, so defer that until needed.
@@ -1618,10 +1625,14 @@ void DecimalFormat::touch(UErrorCode& status) {
// Since memory has already been allocated for the formatter, we can move assign a stack-allocated object
// and don't need to call new. (Which is slower and could possibly fail).
+ // [Note that "symbols" above might point to the DecimalFormatSymbols object owned by fields->formatter.
+ // That's okay, because NumberPropertyMapper::create() will clone it before fields->formatter's assignment
+ // operator deletes it. But it does mean that "symbols" can't be counted on to be good after this line.]
fields->formatter = NumberPropertyMapper::create(
- fields->properties, *fields->symbols, fields->warehouse, fields->exportedProperties, status
+ fields->properties, *symbols, fields->warehouse, fields->exportedProperties, status
).locale(locale);
-
+ fields->symbols.adoptInstead(nullptr); // the fields->symbols property is only temporary, until we can copy it into a new LocalizedNumberFormatter
+
// Do this after fields->exportedProperties are set up
setupFastFormat();
@@ -1668,7 +1679,7 @@ const numparse::impl::NumberParserImpl* DecimalFormat::getParser(UErrorCode& sta
}
// Try computing the parser on our own
- auto* temp = NumberParserImpl::createParserFromProperties(fields->properties, *fields->symbols, false, status);
+ auto* temp = NumberParserImpl::createParserFromProperties(fields->properties, *getDecimalFormatSymbols(), false, status);
if (U_FAILURE(status)) {
return nullptr;
}
@@ -1701,7 +1712,7 @@ const numparse::impl::NumberParserImpl* DecimalFormat::getCurrencyParser(UErrorC
}
// Try computing the parser on our own
- auto* temp = NumberParserImpl::createParserFromProperties(fields->properties, *fields->symbols, true, status);
+ auto* temp = NumberParserImpl::createParserFromProperties(fields->properties, *getDecimalFormatSymbols(), true, status);
if (temp == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
// although we may still dereference, call sites should be guarded
@@ -1775,11 +1786,13 @@ void DecimalFormat::setupFastFormat() {
return;
}
+ const DecimalFormatSymbols* symbols = getDecimalFormatSymbols();
+
// Grouping (secondary grouping is forbidden in equalsDefaultExceptFastFormat):
bool groupingUsed = fields->properties.groupingUsed;
int32_t groupingSize = fields->properties.groupingSize;
bool unusualGroupingSize = groupingSize > 0 && groupingSize != 3;
- const UnicodeString& groupingString = fields->symbols->getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol);
+ const UnicodeString& groupingString = symbols->getConstSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol);
if (groupingUsed && (unusualGroupingSize || groupingString.length() != 1)) {
trace("no fast format: grouping\n");
fields->canUseFastFormat = false;
@@ -1805,8 +1818,8 @@ void DecimalFormat::setupFastFormat() {
}
// Other symbols:
- const UnicodeString& minusSignString = fields->symbols->getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol);
- UChar32 codePointZero = fields->symbols->getCodePointZero();
+ const UnicodeString& minusSignString = symbols->getConstSymbol(DecimalFormatSymbols::kMinusSignSymbol);
+ UChar32 codePointZero = symbols->getCodePointZero();
if (minusSignString.length() != 1 || U16_LENGTH(codePointZero) != 1) {
trace("no fast format: symbols\n");
fields->canUseFastFormat = false;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-bignum-dtoa.cpp b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-bignum-dtoa.cpp
index a95910df042..638e9cb0469 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-bignum-dtoa.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-bignum-dtoa.cpp
@@ -290,7 +290,7 @@ static void GenerateShortestDigits(Bignum* numerator, Bignum* denominator,
// Let v = numerator / denominator < 10.
// Then we generate 'count' digits of d = x.xxxxx... (without the decimal point)
-// from left to right. Once 'count' digits have been produced we decide wether
+// from left to right. Once 'count' digits have been produced we decide whether
// to round up or down. Remainders of exactly .5 round upwards. Numbers such
// as 9.999999 propagate a carry all the way, and change the
// exponent (decimal_point), when rounding upwards.
@@ -384,7 +384,7 @@ static void BignumToFixed(int requested_digits, int* decimal_point,
// Returns an estimation of k such that 10^(k-1) <= v < 10^k where
// v = f * 2^exponent and 2^52 <= f < 2^53.
// v is hence a normalized double with the given exponent. The output is an
-// approximation for the exponent of the decimal approimation .digits * 10^k.
+// approximation for the exponent of the decimal approximation .digits * 10^k.
//
// The result might undershoot by 1 in which case 10^k <= v < 10^k+1.
// Note: this property holds for v's upper boundary m+ too.
@@ -562,7 +562,7 @@ static void InitialScaledStartValuesNegativeExponentNegativePower(
//
// Let ep == estimated_power, then the returned values will satisfy:
// v / 10^ep = numerator / denominator.
-// v's boundarys m- and m+:
+// v's boundaries m- and m+:
// m- / 10^ep == v / 10^ep - delta_minus / denominator
// m+ / 10^ep == v / 10^ep + delta_plus / denominator
// Or in other words:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.cpp b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.cpp
index 44c176f4f9c..90ba4360600 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.cpp
@@ -107,19 +107,19 @@ void DoubleToStringConverter::CreateExponentialRepresentation(
result_builder->AddCharacter('+');
}
}
- if (exponent == 0) {
- result_builder->AddCharacter('0');
- return;
- }
DOUBLE_CONVERSION_ASSERT(exponent < 1e4);
// Changing this constant requires updating the comment of DoubleToStringConverter constructor
const int kMaxExponentLength = 5;
char buffer[kMaxExponentLength + 1];
buffer[kMaxExponentLength] = '\0';
int first_char_pos = kMaxExponentLength;
- while (exponent > 0) {
- buffer[--first_char_pos] = '0' + (exponent % 10);
- exponent /= 10;
+ if (exponent == 0) {
+ buffer[--first_char_pos] = '0';
+ } else {
+ while (exponent > 0) {
+ buffer[--first_char_pos] = '0' + (exponent % 10);
+ exponent /= 10;
+ }
}
// Add prefix '0' to make exponent width >= min(min_exponent_with_, kMaxExponentLength)
// For example: convert 1e+9 -> 1e+09, if min_exponent_with_ is set to 2
@@ -342,9 +342,21 @@ bool DoubleToStringConverter::ToPrecision(double value,
int exponent = decimal_point - 1;
int extra_zero = ((flags_ & EMIT_TRAILING_ZERO_AFTER_POINT) != 0) ? 1 : 0;
- if ((-decimal_point + 1 > max_leading_padding_zeroes_in_precision_mode_) ||
+ bool as_exponential =
+ (-decimal_point + 1 > max_leading_padding_zeroes_in_precision_mode_) ||
(decimal_point - precision + extra_zero >
- max_trailing_padding_zeroes_in_precision_mode_)) {
+ max_trailing_padding_zeroes_in_precision_mode_);
+ if ((flags_ & NO_TRAILING_ZERO) != 0) {
+ // Truncate trailing zeros that occur after the decimal point (if exponential,
+ // that is everything after the first digit).
+ int stop = as_exponential ? 1 : std::max(1, decimal_point);
+ while (decimal_rep_length > stop && decimal_rep[decimal_rep_length - 1] == '0') {
+ --decimal_rep_length;
+ }
+ // Clamp precision to avoid the code below re-adding the zeros.
+ precision = std::min(precision, decimal_rep_length);
+ }
+ if (as_exponential) {
// Fill buffer to contain 'precision' digits.
// Usually the buffer is already at the correct length, but 'DoubleToAscii'
// is allowed to return less characters.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.h b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.h
index 27bd8678489..1fae2e87715 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-double-to-string.h
@@ -48,12 +48,11 @@ namespace double_conversion {
class DoubleToStringConverter {
public:
-#if 0 // not needed for ICU
// When calling ToFixed with a double > 10^kMaxFixedDigitsBeforePoint
// or a requested_digits parameter > kMaxFixedDigitsAfterPoint then the
// function returns false.
static const int kMaxFixedDigitsBeforePoint = 60;
- static const int kMaxFixedDigitsAfterPoint = 60;
+ static const int kMaxFixedDigitsAfterPoint = 100;
// When calling ToExponential with a requested_digits
// parameter > kMaxExponentialDigits then the function returns false.
@@ -65,12 +64,36 @@ class DoubleToStringConverter {
static const int kMinPrecisionDigits = 1;
static const int kMaxPrecisionDigits = 120;
+ // The maximal number of digits that are needed to emit a double in base 10.
+ // A higher precision can be achieved by using more digits, but the shortest
+ // accurate representation of any double will never use more digits than
+ // kBase10MaximalLength.
+ // Note that DoubleToAscii null-terminates its input. So the given buffer
+ // should be at least kBase10MaximalLength + 1 characters long.
+ static const int kBase10MaximalLength = 17;
+
+ // The maximal number of digits that are needed to emit a single in base 10.
+ // A higher precision can be achieved by using more digits, but the shortest
+ // accurate representation of any single will never use more digits than
+ // kBase10MaximalLengthSingle.
+ static const int kBase10MaximalLengthSingle = 9;
+
+ // The length of the longest string that 'ToShortest' can produce when the
+ // converter is instantiated with EcmaScript defaults (see
+ // 'EcmaScriptConverter')
+ // This value does not include the trailing '\0' character.
+ // This amount of characters is needed for negative values that hit the
+ // 'decimal_in_shortest_low' limit. For example: "-0.0000033333333333333333"
+ static const int kMaxCharsEcmaScriptShortest = 25;
+
+#if 0 // not needed for ICU
enum Flags {
NO_FLAGS = 0,
EMIT_POSITIVE_EXPONENT_SIGN = 1,
EMIT_TRAILING_DECIMAL_POINT = 2,
EMIT_TRAILING_ZERO_AFTER_POINT = 4,
- UNIQUE_ZERO = 8
+ UNIQUE_ZERO = 8,
+ NO_TRAILING_ZERO = 16
};
// Flags should be a bit-or combination of the possible Flags-enum.
@@ -82,9 +105,13 @@ class DoubleToStringConverter {
// Example: 2345.0 is converted to "2345.".
// - EMIT_TRAILING_ZERO_AFTER_POINT: in addition to a trailing decimal point
// emits a trailing '0'-character. This flag requires the
- // EXMIT_TRAILING_DECIMAL_POINT flag.
+ // EMIT_TRAILING_DECIMAL_POINT flag.
// Example: 2345.0 is converted to "2345.0".
// - UNIQUE_ZERO: "-0.0" is converted to "0.0".
+ // - NO_TRAILING_ZERO: Trailing zeros are removed from the fractional portion
+ // of the result in precision mode. Matches printf's %g.
+ // When EMIT_TRAILING_ZERO_AFTER_POINT is also given, one trailing zero is
+ // preserved.
//
// Infinity symbol and nan_symbol provide the string representation for these
// special values. If the string is NULL and the special value is encountered
@@ -111,7 +138,7 @@ class DoubleToStringConverter {
// Example with max_leading_padding_zeroes_in_precision_mode = 6.
// ToPrecision(0.0000012345, 2) -> "0.0000012"
// ToPrecision(0.00000012345, 2) -> "1.2e-7"
- // Similarily the converter may add up to
+ // Similarly the converter may add up to
// max_trailing_padding_zeroes_in_precision_mode in precision mode to avoid
// returning an exponential representation. A zero added by the
// EMIT_TRAILING_ZERO_AFTER_POINT flag is counted for this limit.
@@ -152,6 +179,14 @@ class DoubleToStringConverter {
}
// Returns a converter following the EcmaScript specification.
+ //
+ // Flags: UNIQUE_ZERO and EMIT_POSITIVE_EXPONENT_SIGN.
+ // Special values: "Infinity" and "NaN".
+ // Lower case 'e' for exponential values.
+ // decimal_in_shortest_low: -6
+ // decimal_in_shortest_high: 21
+ // max_leading_padding_zeroes_in_precision_mode: 6
+ // max_trailing_padding_zeroes_in_precision_mode: 0
static const DoubleToStringConverter& EcmaScriptConverter();
// Computes the shortest string of digits that correctly represent the input
@@ -161,7 +196,7 @@ class DoubleToStringConverter {
// Example with decimal_in_shortest_low = -6,
// decimal_in_shortest_high = 21,
// EMIT_POSITIVE_EXPONENT_SIGN activated, and
- // EMIT_TRAILING_DECIMAL_POINT deactived:
+ // EMIT_TRAILING_DECIMAL_POINT deactivated:
// ToShortest(0.000001) -> "0.000001"
// ToShortest(0.0000001) -> "1e-7"
// ToShortest(111111111111111111111.0) -> "111111111111111110000"
@@ -177,6 +212,21 @@ class DoubleToStringConverter {
// Returns true if the conversion succeeds. The conversion always succeeds
// except when the input value is special and no infinity_symbol or
// nan_symbol has been given to the constructor.
+ //
+ // The length of the longest result is the maximum of the length of the
+ // following string representations (each with possible examples):
+ // - NaN and negative infinity: "NaN", "-Infinity", "-inf".
+ // - -10^(decimal_in_shortest_high - 1):
+ // "-100000000000000000000", "-1000000000000000.0"
+ // - the longest string in range [0; -10^decimal_in_shortest_low]. Generally,
+ // this string is 3 + kBase10MaximalLength - decimal_in_shortest_low.
+ // (Sign, '0', decimal point, padding zeroes for decimal_in_shortest_low,
+ // and the significant digits).
+ // "-0.0000033333333333333333", "-0.0012345678901234567"
+ // - the longest exponential representation. (A negative number with
+ // kBase10MaximalLength significant digits).
+ // "-1.7976931348623157e+308", "-1.7976931348623157E308"
+ // In addition, the buffer must be able to hold the trailing '\0' character.
bool ToShortest(double value, StringBuilder* result_builder) const {
return ToShortestIeeeNumber(value, result_builder, SHORTEST);
}
@@ -217,9 +267,11 @@ class DoubleToStringConverter {
// been provided to the constructor,
// - 'value' > 10^kMaxFixedDigitsBeforePoint, or
// - 'requested_digits' > kMaxFixedDigitsAfterPoint.
- // The last two conditions imply that the result will never contain more than
- // 1 + kMaxFixedDigitsBeforePoint + 1 + kMaxFixedDigitsAfterPoint characters
+ // The last two conditions imply that the result for non-special values never
+ // contains more than
+ // 1 + kMaxFixedDigitsBeforePoint + 1 + kMaxFixedDigitsAfterPoint characters
// (one additional character for the sign, and one for the decimal point).
+ // In addition, the buffer must be able to hold the trailing '\0' character.
bool ToFixed(double value,
int requested_digits,
StringBuilder* result_builder) const;
@@ -248,14 +300,17 @@ class DoubleToStringConverter {
// - the input value is special and no infinity_symbol or nan_symbol has
// been provided to the constructor,
// - 'requested_digits' > kMaxExponentialDigits.
- // The last condition implies that the result will never contain more than
+ //
+ // The last condition implies that the result never contains more than
// kMaxExponentialDigits + 8 characters (the sign, the digit before the
// decimal point, the decimal point, the exponent character, the
// exponent's sign, and at most 3 exponent digits).
+ // In addition, the buffer must be able to hold the trailing '\0' character.
bool ToExponential(double value,
int requested_digits,
StringBuilder* result_builder) const;
+
// Computes 'precision' leading digits of the given 'value' and returns them
// either in exponential or decimal format, depending on
// max_{leading|trailing}_padding_zeroes_in_precision_mode (given to the
@@ -265,7 +320,7 @@ class DoubleToStringConverter {
// Example with max_leading_padding_zeroes_in_precision_mode = 6.
// ToPrecision(0.0000012345, 2) -> "0.0000012"
// ToPrecision(0.00000012345, 2) -> "1.2e-7"
- // Similarily the converter may add up to
+ // Similarly the converter may add up to
// max_trailing_padding_zeroes_in_precision_mode in precision mode to avoid
// returning an exponential representation. A zero added by the
// EMIT_TRAILING_ZERO_AFTER_POINT flag is counted for this limit.
@@ -287,9 +342,11 @@ class DoubleToStringConverter {
// been provided to the constructor,
// - precision < kMinPericisionDigits
// - precision > kMaxPrecisionDigits
- // The last condition implies that the result will never contain more than
+ //
+ // The last condition implies that the result never contains more than
// kMaxPrecisionDigits + 7 characters (the sign, the decimal point, the
// exponent character, the exponent's sign, and at most 3 exponent digits).
+ // In addition, the buffer must be able to hold the trailing '\0' character.
bool ToPrecision(double value,
int precision,
StringBuilder* result_builder) const;
@@ -310,14 +367,6 @@ class DoubleToStringConverter {
PRECISION
};
- // The maximal number of digits that are needed to emit a double in base 10.
- // A higher precision can be achieved by using more digits, but the shortest
- // accurate representation of any double will never use more digits than
- // kBase10MaximalLength.
- // Note that DoubleToAscii null-terminates its input. So the given buffer
- // should be at least kBase10MaximalLength + 1 characters long.
- static const int kBase10MaximalLength = 17;
-
// Converts the given double 'v' to digit characters. 'v' must not be NaN,
// +Infinity, or -Infinity. In SHORTEST_SINGLE-mode this restriction also
// applies to 'v' after it has been casted to a single-precision float. That
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-fast-dtoa.cpp b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-fast-dtoa.cpp
index 87a3d536bf1..06e4cf12559 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-fast-dtoa.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-fast-dtoa.cpp
@@ -579,7 +579,7 @@ static bool Grisu3(double v,
// the difference between w and boundary_minus/plus (a power of 2) and to
// compute scaled_boundary_minus/plus by subtracting/adding from
// scaled_w. However the code becomes much less readable and the speed
- // enhancements are not terriffic.
+ // enhancements are not terrific.
DiyFp scaled_boundary_minus = DiyFp::Times(boundary_minus, ten_mk);
DiyFp scaled_boundary_plus = DiyFp::Times(boundary_plus, ten_mk);
@@ -587,7 +587,7 @@ static bool Grisu3(double v,
// v == (double) (scaled_w * 10^-mk).
// Set decimal_exponent == -mk and pass it to DigitGen. If scaled_w is not an
// integer than it will be updated. For instance if scaled_w == 1.23 then
- // the buffer will be filled with "123" und the decimal_exponent will be
+ // the buffer will be filled with "123" and the decimal_exponent will be
// decreased by 2.
int kappa;
bool result = DigitGen(scaled_boundary_minus, scaled_w, scaled_boundary_plus,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp
index 548cad1f302..c72bb262774 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.cpp
@@ -51,6 +51,18 @@
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
+#ifdef _MSC_VER
+# if _MSC_VER >= 1900
+// Fix MSVC >= 2015 (_MSC_VER == 1900) warning
+// C4244: 'argument': conversion from 'const uc16' to 'char', possible loss of data
+// against Advance and friends, when instantiated with **it as char, not uc16.
+ __pragma(warning(disable: 4244))
+# endif
+# if _MSC_VER <= 1700 // VS2012, see IsDecimalDigitForRadix warning fix, below
+# define VS2012_RADIXWARN
+# endif
+#endif
+
namespace double_conversion {
namespace {
@@ -170,9 +182,9 @@ static double SignedZero(bool sign) {
//
// The function is small and could be inlined, but VS2012 emitted a warning
// because it constant-propagated the radix and concluded that the last
-// condition was always true. By moving it into a separate function the
-// compiler wouldn't warn anymore.
-#ifdef _MSC_VER
+// condition was always true. Moving it into a separate function and
+// suppressing optimisation keeps the compiler from warning.
+#ifdef VS2012_RADIXWARN
#pragma optimize("",off)
static bool IsDecimalDigitForRadix(int c, int radix) {
return '0' <= c && c <= '9' && (c - '0') < radix;
@@ -738,11 +750,17 @@ double StringToDoubleConverter::StringToIeee(
DOUBLE_CONVERSION_ASSERT(buffer_pos < kBufferSize);
buffer[buffer_pos] = '\0';
+ // Code above ensures there are no leading zeros and the buffer has fewer than
+ // kMaxSignificantDecimalDigits characters. Trim trailing zeros.
+ Vector<const char> chars(buffer, buffer_pos);
+ chars = TrimTrailingZeros(chars);
+ exponent += buffer_pos - chars.length();
+
double converted;
if (read_as_double) {
- converted = Strtod(Vector<const char>(buffer, buffer_pos), exponent);
+ converted = StrtodTrimmed(chars, exponent);
} else {
- converted = Strtof(Vector<const char>(buffer, buffer_pos), exponent);
+ converted = StrtofTrimmed(chars, exponent);
}
*processed_characters_count = static_cast<int>(current - input);
return sign? -converted: converted;
@@ -782,6 +800,42 @@ float StringToDoubleConverter::StringToFloat(
processed_characters_count));
}
+
+template<>
+double StringToDoubleConverter::StringTo<double>(
+ const char* buffer,
+ int length,
+ int* processed_characters_count) const {
+ return StringToDouble(buffer, length, processed_characters_count);
+}
+
+
+template<>
+float StringToDoubleConverter::StringTo<float>(
+ const char* buffer,
+ int length,
+ int* processed_characters_count) const {
+ return StringToFloat(buffer, length, processed_characters_count);
+}
+
+
+template<>
+double StringToDoubleConverter::StringTo<double>(
+ const uc16* buffer,
+ int length,
+ int* processed_characters_count) const {
+ return StringToDouble(buffer, length, processed_characters_count);
+}
+
+
+template<>
+float StringToDoubleConverter::StringTo<float>(
+ const uc16* buffer,
+ int length,
+ int* processed_characters_count) const {
+ return StringToFloat(buffer, length, processed_characters_count);
+}
+
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.h b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.h
index 2eb0c1f8979..9f6f5307111 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-string-to-double.h
@@ -100,7 +100,7 @@ class StringToDoubleConverter {
// This *must* start with "0x" and separate the exponent with "p".
// Examples: 0x1.2p3 == 9.0
// 0x10.1p0 == 16.0625
- // ALLOW_HEX and ALLOW_HEX_FLOATS are indendent.
+ // ALLOW_HEX and ALLOW_HEX_FLOATS are indented.
//
// empty_string_value is returned when an empty string is given as input.
// If ALLOW_LEADING_SPACES or ALLOW_TRAILING_SPACES are set, then a string
@@ -218,6 +218,18 @@ class StringToDoubleConverter {
int length,
int* processed_characters_count) const;
+ // Same as StringToDouble for T = double, and StringToFloat for T = float.
+ template <typename T>
+ T StringTo(const char* buffer,
+ int length,
+ int* processed_characters_count) const;
+
+ // Same as StringTo above but for 16 bit characters.
+ template <typename T>
+ T StringTo(const uc16* buffer,
+ int length,
+ int* processed_characters_count) const;
+
private:
const int flags_;
const double empty_string_value_;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp
index ee6377782bb..eea8203281a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.cpp
@@ -115,17 +115,6 @@ static Vector<const char> TrimLeadingZeros(Vector<const char> buffer) {
return Vector<const char>(buffer.start(), 0);
}
-
-static Vector<const char> TrimTrailingZeros(Vector<const char> buffer) {
- for (int i = buffer.length() - 1; i >= 0; --i) {
- if (buffer[i] != '0') {
- return buffer.SubVector(0, i + 1);
- }
- }
- return Vector<const char>(buffer.start(), 0);
-}
-
-
static void CutToMaxSignificantDigits(Vector<const char> buffer,
int exponent,
char* significant_buffer,
@@ -216,12 +205,14 @@ static bool DoubleStrtod(Vector<const char> trimmed,
int exponent,
double* result) {
#if !defined(DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS)
+ // Avoid "unused parameter" warnings
+ (void) trimmed;
+ (void) exponent;
+ (void) result;
// On x86 the floating-point stack can be 64 or 80 bits wide. If it is
// 80 bits wide (as is the case on Linux) then double-rounding occurs and the
// result is not accurate.
// We know that Windows32 uses 64 bits and is therefore accurate.
- // Note that the ARM simulator is compiled for 32bits. It therefore exhibits
- // the same problem.
return false;
#else
if (trimmed.length() <= kMaxExactDoubleIntegerDecimalDigits) {
@@ -473,6 +464,11 @@ static bool IsNonZeroDigit(const char d) {
return ('1' <= d) && (d <= '9');
}
+#ifdef __has_cpp_attribute
+#if __has_cpp_attribute(maybe_unused)
+[[maybe_unused]]
+#endif
+#endif
static bool AssertTrimmedDigits(const Vector<const char>& buffer) {
for(int i = 0; i < buffer.length(); ++i) {
if(!IsDigit(buffer[i])) {
@@ -545,6 +541,12 @@ float Strtof(Vector<const char> buffer, int exponent) {
TrimAndCut(buffer, exponent, copy_buffer, kMaxSignificantDecimalDigits,
&trimmed, &updated_exponent);
exponent = updated_exponent;
+ return StrtofTrimmed(trimmed, exponent);
+}
+
+float StrtofTrimmed(Vector<const char> trimmed, int exponent) {
+ DOUBLE_CONVERSION_ASSERT(trimmed.length() <= kMaxSignificantDecimalDigits);
+ DOUBLE_CONVERSION_ASSERT(AssertTrimmedDigits(trimmed));
double double_guess;
bool is_correct = ComputeGuess(trimmed, exponent, &double_guess);
@@ -564,7 +566,7 @@ float Strtof(Vector<const char> buffer, int exponent) {
// low-precision (3 digits):
// when read from input: 123
// when rounded from high precision: 124.
- // To do this we simply look at the neigbors of the correct result and see
+ // To do this we simply look at the neighbors of the correct result and see
// if they would round to the same float. If the guess is not correct we have
// to look at four values (since two different doubles could be the correct
// double).
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.h b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.h
index 50ef746401a..abfe00a3331 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-strtod.h
@@ -54,11 +54,25 @@ double Strtod(Vector<const char> buffer, int exponent);
// contain a dot or a sign. It must not start with '0', and must not be empty.
float Strtof(Vector<const char> buffer, int exponent);
-// For special use cases, the heart of the Strtod() function is also available
-// separately, it assumes that 'trimmed' is as produced by TrimAndCut(), i.e.
-// no leading or trailing zeros, also no lone zero, and not 'too many' digits.
+// Same as Strtod, but assumes that 'trimmed' is already trimmed, as if run
+// through TrimAndCut. That is, 'trimmed' must have no leading or trailing
+// zeros, must not be a lone zero, and must not have 'too many' digits.
double StrtodTrimmed(Vector<const char> trimmed, int exponent);
+// Same as Strtof, but assumes that 'trimmed' is already trimmed, as if run
+// through TrimAndCut. That is, 'trimmed' must have no leading or trailing
+// zeros, must not be a lone zero, and must not have 'too many' digits.
+float StrtofTrimmed(Vector<const char> trimmed, int exponent);
+
+inline Vector<const char> TrimTrailingZeros(Vector<const char> buffer) {
+ for (int i = buffer.length() - 1; i >= 0; --i) {
+ if (buffer[i] != '0') {
+ return buffer.SubVector(0, i + 1);
+ }
+ }
+ return Vector<const char>(buffer.start(), 0);
+}
+
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
diff --git a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h
index 8c6a0e16e00..7f23e0a8250 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/double-conversion-utils.h
@@ -44,7 +44,7 @@
#include "uassert.h"
#ifndef DOUBLE_CONVERSION_ASSERT
#define DOUBLE_CONVERSION_ASSERT(condition) \
- U_ASSERT(condition);
+ U_ASSERT(condition)
#endif
#ifndef DOUBLE_CONVERSION_UNIMPLEMENTED
#define DOUBLE_CONVERSION_UNIMPLEMENTED() (abort())
@@ -118,7 +118,8 @@ int main(int argc, char** argv) {
defined(__ARMEL__) || defined(__avr32__) || defined(_M_ARM) || defined(_M_ARM64) || \
defined(__hppa__) || defined(__ia64__) || \
defined(__mips__) || \
- defined(__nios2__) || \
+ defined(__loongarch__) || \
+ defined(__nios2__) || defined(__ghs) || \
defined(__powerpc__) || defined(__ppc__) || defined(__ppc64__) || \
defined(_POWER) || defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \
defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtfmtsym.cpp b/Build/source/libs/icu/icu-src/source/i18n/dtfmtsym.cpp
index 690f6a4cae6..ab5f2b612c1 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtfmtsym.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtfmtsym.cpp
@@ -392,8 +392,10 @@ DateFormatSymbols::copyData(const DateFormatSymbols& other) {
fTimeSeparator.fastCopyFrom(other.fTimeSeparator); // fastCopyFrom() - see assignArray comments
assignArray(fQuarters, fQuartersCount, other.fQuarters, other.fQuartersCount);
assignArray(fShortQuarters, fShortQuartersCount, other.fShortQuarters, other.fShortQuartersCount);
+ assignArray(fNarrowQuarters, fNarrowQuartersCount, other.fNarrowQuarters, other.fNarrowQuartersCount);
assignArray(fStandaloneQuarters, fStandaloneQuartersCount, other.fStandaloneQuarters, other.fStandaloneQuartersCount);
assignArray(fStandaloneShortQuarters, fStandaloneShortQuartersCount, other.fStandaloneShortQuarters, other.fStandaloneShortQuartersCount);
+ assignArray(fStandaloneNarrowQuarters, fStandaloneNarrowQuartersCount, other.fStandaloneNarrowQuarters, other.fStandaloneNarrowQuartersCount);
assignArray(fWideDayPeriods, fWideDayPeriodsCount,
other.fWideDayPeriods, other.fWideDayPeriodsCount);
assignArray(fNarrowDayPeriods, fNarrowDayPeriodsCount,
@@ -450,6 +452,7 @@ DateFormatSymbols::copyData(const DateFormatSymbols& other) {
*/
DateFormatSymbols& DateFormatSymbols::operator=(const DateFormatSymbols& other)
{
+ if (this == &other) { return *this; } // self-assignment: no-op
dispose();
copyData(other);
@@ -484,8 +487,10 @@ void DateFormatSymbols::dispose()
delete[] fNarrowAmPms;
delete[] fQuarters;
delete[] fShortQuarters;
+ delete[] fNarrowQuarters;
delete[] fStandaloneQuarters;
delete[] fStandaloneShortQuarters;
+ delete[] fStandaloneNarrowQuarters;
delete[] fLeapMonthPatterns;
delete[] fShortYearNames;
delete[] fShortZodiacNames;
@@ -534,12 +539,12 @@ DateFormatSymbols::arrayCompare(const UnicodeString* array1,
return TRUE;
}
-UBool
+bool
DateFormatSymbols::operator==(const DateFormatSymbols& other) const
{
// First do cheap comparisons
if (this == &other) {
- return TRUE;
+ return true;
}
if (fErasCount == other.fErasCount &&
fEraNamesCount == other.fEraNamesCount &&
@@ -562,8 +567,10 @@ DateFormatSymbols::operator==(const DateFormatSymbols& other) const
fNarrowAmPmsCount == other.fNarrowAmPmsCount &&
fQuartersCount == other.fQuartersCount &&
fShortQuartersCount == other.fShortQuartersCount &&
+ fNarrowQuartersCount == other.fNarrowQuartersCount &&
fStandaloneQuartersCount == other.fStandaloneQuartersCount &&
fStandaloneShortQuartersCount == other.fStandaloneShortQuartersCount &&
+ fStandaloneNarrowQuartersCount == other.fStandaloneNarrowQuartersCount &&
fLeapMonthPatternsCount == other.fLeapMonthPatternsCount &&
fShortYearNamesCount == other.fShortYearNamesCount &&
fShortZodiacNamesCount == other.fShortZodiacNamesCount &&
@@ -598,8 +605,10 @@ DateFormatSymbols::operator==(const DateFormatSymbols& other) const
fTimeSeparator == other.fTimeSeparator &&
arrayCompare(fQuarters, other.fQuarters, fQuartersCount) &&
arrayCompare(fShortQuarters, other.fShortQuarters, fShortQuartersCount) &&
+ arrayCompare(fNarrowQuarters, other.fNarrowQuarters, fNarrowQuartersCount) &&
arrayCompare(fStandaloneQuarters, other.fStandaloneQuarters, fStandaloneQuartersCount) &&
arrayCompare(fStandaloneShortQuarters, other.fStandaloneShortQuarters, fStandaloneShortQuartersCount) &&
+ arrayCompare(fStandaloneNarrowQuarters, other.fStandaloneNarrowQuarters, fStandaloneNarrowQuartersCount) &&
arrayCompare(fLeapMonthPatterns, other.fLeapMonthPatterns, fLeapMonthPatternsCount) &&
arrayCompare(fShortYearNames, other.fShortYearNames, fShortYearNamesCount) &&
arrayCompare(fShortZodiacNames, other.fShortZodiacNames, fShortZodiacNamesCount) &&
@@ -616,22 +625,22 @@ DateFormatSymbols::operator==(const DateFormatSymbols& other) const
// Compare the contents of fZoneStrings
if (fZoneStrings == NULL && other.fZoneStrings == NULL) {
if (fZSFLocale == other.fZSFLocale) {
- return TRUE;
+ return true;
}
} else if (fZoneStrings != NULL && other.fZoneStrings != NULL) {
if (fZoneStringsRowCount == other.fZoneStringsRowCount
&& fZoneStringsColCount == other.fZoneStringsColCount) {
- UBool cmpres = TRUE;
+ bool cmpres = true;
for (int32_t i = 0; (i < fZoneStringsRowCount) && cmpres; i++) {
cmpres = arrayCompare(fZoneStrings[i], other.fZoneStrings[i], fZoneStringsColCount);
}
return cmpres;
}
}
- return FALSE;
+ return false;
}
}
- return FALSE;
+ return false;
}
//------------------------------------------------------
@@ -808,8 +817,8 @@ DateFormatSymbols::getQuarters(int32_t &count, DtContextType context, DtWidthTyp
returnValue = fShortQuarters;
break;
case NARROW :
- count = 0;
- returnValue = NULL;
+ count = fNarrowQuartersCount;
+ returnValue = fNarrowQuarters;
break;
case DT_WIDTH_COUNT :
break;
@@ -827,8 +836,8 @@ DateFormatSymbols::getQuarters(int32_t &count, DtContextType context, DtWidthTyp
returnValue = fStandaloneShortQuarters;
break;
case NARROW :
- count = 0;
- returnValue = NULL;
+ count = fStandaloneNarrowQuartersCount;
+ returnValue = fStandaloneNarrowQuarters;
break;
case DT_WIDTH_COUNT :
break;
@@ -1177,13 +1186,11 @@ DateFormatSymbols::setQuarters(const UnicodeString* quartersArray, int32_t count
fShortQuartersCount = count;
break;
case NARROW :
- /*
if (fNarrowQuarters)
delete[] fNarrowQuarters;
fNarrowQuarters = newUnicodeStringArray(count);
uprv_arrayCopy( quartersArray,fNarrowQuarters,count);
fNarrowQuartersCount = count;
- */
break;
default :
break;
@@ -1206,13 +1213,11 @@ DateFormatSymbols::setQuarters(const UnicodeString* quartersArray, int32_t count
fStandaloneShortQuartersCount = count;
break;
case NARROW :
- /*
if (fStandaloneNarrowQuarters)
delete[] fStandaloneNarrowQuarters;
fStandaloneNarrowQuarters = newUnicodeStringArray(count);
uprv_arrayCopy( quartersArray,fStandaloneNarrowQuarters,count);
fStandaloneNarrowQuartersCount = count;
- */
break;
default :
break;
@@ -1540,7 +1545,7 @@ struct CalendarDataSink : public ResourceSink {
aliasPathPairs.removeAllElements();
}
- virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) {
+ virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) override {
if (U_FAILURE(errorCode)) { return; }
U_ASSERT(!currentCalendarType.isEmpty());
@@ -1570,7 +1575,7 @@ struct CalendarDataSink : public ResourceSink {
if (U_FAILURE(errorCode)) { return; }
}
LocalPointer<UnicodeString> aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode);
- resourcesToVisitNext->addElement(aliasRelativePathCopy.getAlias(), errorCode);
+ resourcesToVisitNext->addElementX(aliasRelativePathCopy.getAlias(), errorCode);
if (U_FAILURE(errorCode)) { return; }
// Only release ownership after resourcesToVisitNext takes it (no error happened):
aliasRelativePathCopy.orphan();
@@ -1580,12 +1585,12 @@ struct CalendarDataSink : public ResourceSink {
// Register same-calendar alias
if (arrays.get(aliasRelativePath) == NULL && maps.get(aliasRelativePath) == NULL) {
LocalPointer<UnicodeString> aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode);
- aliasPathPairs.addElement(aliasRelativePathCopy.getAlias(), errorCode);
+ aliasPathPairs.addElementX(aliasRelativePathCopy.getAlias(), errorCode);
if (U_FAILURE(errorCode)) { return; }
// Only release ownership after aliasPathPairs takes it (no error happened):
aliasRelativePathCopy.orphan();
LocalPointer<UnicodeString> keyUStringCopy(new UnicodeString(keyUString), errorCode);
- aliasPathPairs.addElement(keyUStringCopy.getAlias(), errorCode);
+ aliasPathPairs.addElementX(keyUStringCopy.getAlias(), errorCode);
if (U_FAILURE(errorCode)) { return; }
// Only release ownership after aliasPathPairs takes it (no error happened):
keyUStringCopy.orphan();
@@ -1756,12 +1761,12 @@ struct CalendarDataSink : public ResourceSink {
if (aliasType == SAME_CALENDAR) {
// Store the alias path and the current path on aliasPathPairs
LocalPointer<UnicodeString> aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode);
- aliasPathPairs.addElement(aliasRelativePathCopy.getAlias(), errorCode);
+ aliasPathPairs.addElementX(aliasRelativePathCopy.getAlias(), errorCode);
if (U_FAILURE(errorCode)) { return; }
// Only release ownership after aliasPathPairs takes it (no error happened):
aliasRelativePathCopy.orphan();
LocalPointer<UnicodeString> pathCopy(new UnicodeString(path), errorCode);
- aliasPathPairs.addElement(pathCopy.getAlias(), errorCode);
+ aliasPathPairs.addElementX(pathCopy.getAlias(), errorCode);
if (U_FAILURE(errorCode)) { return; }
// Only release ownership after aliasPathPairs takes it (no error happened):
pathCopy.orphan();
@@ -2066,10 +2071,14 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
fQuartersCount = 0;
fShortQuarters = NULL;
fShortQuartersCount = 0;
+ fNarrowQuarters = NULL;
+ fNarrowQuartersCount = 0;
fStandaloneQuarters = NULL;
fStandaloneQuartersCount = 0;
fStandaloneShortQuarters = NULL;
fStandaloneShortQuartersCount = 0;
+ fStandaloneNarrowQuarters = NULL;
+ fStandaloneNarrowQuartersCount = 0;
fLeapMonthPatterns = NULL;
fLeapMonthPatternsCount = 0;
fShortYearNames = NULL;
@@ -2102,7 +2111,7 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
if (U_FAILURE(status)) return;
- // Create a CalendarDataSink to process this data and the resouce bundles
+ // Create a CalendarDataSink to process this data and the resource bundles
CalendarDataSink calendarSink(status);
UResourceBundle *rb = ures_open(NULL, locale.getBaseName(), &status);
UResourceBundle *cb = ures_getByKey(rb, gCalendarTag, NULL, &status);
@@ -2330,7 +2339,7 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
// If format/narrow not available, use standalone/narrow
assignArray(fNarrowMonths, fNarrowMonthsCount, fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount);
} else if (narrowMonthsEC != U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC == U_MISSING_RESOURCE_ERROR) {
- // If standalone/narrow not availabe, use format/narrow
+ // If standalone/narrow not available, use format/narrow
assignArray(fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, fNarrowMonths, fNarrowMonthsCount);
} else if (narrowMonthsEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC == U_MISSING_RESOURCE_ERROR) {
// If neither is available, use format/abbreviated
@@ -2373,6 +2382,16 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
assignArray(fStandaloneShortQuarters, fStandaloneShortQuartersCount, fShortQuarters, fShortQuartersCount);
}
+ // unlike the fields above, narrow format quarters fall back on narrow standalone quarters
+ initField(&fStandaloneNarrowQuarters, fStandaloneNarrowQuartersCount, calendarSink,
+ buildResourcePath(path, gQuartersTag, gNamesStandaloneTag, gNamesNarrowTag, status), status);
+ initField(&fNarrowQuarters, fNarrowQuartersCount, calendarSink,
+ buildResourcePath(path, gQuartersTag, gNamesFormatTag, gNamesNarrowTag, status), status);
+ if(status == U_MISSING_RESOURCE_ERROR) {
+ status = U_ZERO_ERROR;
+ assignArray(fNarrowQuarters, fNarrowQuartersCount, fStandaloneNarrowQuarters, fStandaloneNarrowQuartersCount);
+ }
+
// ICU 3.8 or later version no longer uses localized date-time pattern characters by default (ticket#5597)
/*
// fastCopyFrom()/setTo() - see assignArray comments
@@ -2481,8 +2500,10 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError
initField(&fNarrowAmPms, fNarrowAmPmsCount, (const UChar *)gLastResortAmPmMarkers, kAmPmNum, kAmPmLen, status);
initField(&fQuarters, fQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status);
initField(&fShortQuarters, fShortQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status);
+ initField(&fNarrowQuarters, fNarrowQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status);
initField(&fStandaloneQuarters, fStandaloneQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status);
initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status);
+ initField(&fStandaloneNarrowQuarters, fStandaloneNarrowQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status);
fLocalPatternChars.setTo(TRUE, gPatternChars, PATTERN_CHARS_LEN);
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
index 7cba167130f..298fb62be0c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
@@ -229,37 +229,37 @@ DateIntervalFormat::clone() const {
}
-UBool
+bool
DateIntervalFormat::operator==(const Format& other) const {
- if (typeid(*this) != typeid(other)) {return FALSE;}
+ if (typeid(*this) != typeid(other)) {return false;}
const DateIntervalFormat* fmt = (DateIntervalFormat*)&other;
- if (this == fmt) {return TRUE;}
- if (!Format::operator==(other)) {return FALSE;}
- if ((fInfo != fmt->fInfo) && (fInfo == nullptr || fmt->fInfo == nullptr)) {return FALSE;}
- if (fInfo && fmt->fInfo && (*fInfo != *fmt->fInfo )) {return FALSE;}
+ if (this == fmt) {return true;}
+ if (!Format::operator==(other)) {return false;}
+ if ((fInfo != fmt->fInfo) && (fInfo == nullptr || fmt->fInfo == nullptr)) {return false;}
+ if (fInfo && fmt->fInfo && (*fInfo != *fmt->fInfo )) {return false;}
{
Mutex lock(&gFormatterMutex);
- if (fDateFormat != fmt->fDateFormat && (fDateFormat == nullptr || fmt->fDateFormat == nullptr)) {return FALSE;}
- if (fDateFormat && fmt->fDateFormat && (*fDateFormat != *fmt->fDateFormat)) {return FALSE;}
+ if (fDateFormat != fmt->fDateFormat && (fDateFormat == nullptr || fmt->fDateFormat == nullptr)) {return false;}
+ if (fDateFormat && fmt->fDateFormat && (*fDateFormat != *fmt->fDateFormat)) {return false;}
}
// note: fFromCalendar and fToCalendar hold no persistent state, and therefore do not participate in operator ==.
// fDateFormat has the primary calendar for the DateIntervalFormat.
- if (fSkeleton != fmt->fSkeleton) {return FALSE;}
- if (fDatePattern != fmt->fDatePattern && (fDatePattern == nullptr || fmt->fDatePattern == nullptr)) {return FALSE;}
- if (fDatePattern && fmt->fDatePattern && (*fDatePattern != *fmt->fDatePattern)) {return FALSE;}
- if (fTimePattern != fmt->fTimePattern && (fTimePattern == nullptr || fmt->fTimePattern == nullptr)) {return FALSE;}
- if (fTimePattern && fmt->fTimePattern && (*fTimePattern != *fmt->fTimePattern)) {return FALSE;}
- if (fDateTimeFormat != fmt->fDateTimeFormat && (fDateTimeFormat == nullptr || fmt->fDateTimeFormat == nullptr)) {return FALSE;}
- if (fDateTimeFormat && fmt->fDateTimeFormat && (*fDateTimeFormat != *fmt->fDateTimeFormat)) {return FALSE;}
- if (fLocale != fmt->fLocale) {return FALSE;}
+ if (fSkeleton != fmt->fSkeleton) {return false;}
+ if (fDatePattern != fmt->fDatePattern && (fDatePattern == nullptr || fmt->fDatePattern == nullptr)) {return false;}
+ if (fDatePattern && fmt->fDatePattern && (*fDatePattern != *fmt->fDatePattern)) {return false;}
+ if (fTimePattern != fmt->fTimePattern && (fTimePattern == nullptr || fmt->fTimePattern == nullptr)) {return false;}
+ if (fTimePattern && fmt->fTimePattern && (*fTimePattern != *fmt->fTimePattern)) {return false;}
+ if (fDateTimeFormat != fmt->fDateTimeFormat && (fDateTimeFormat == nullptr || fmt->fDateTimeFormat == nullptr)) {return false;}
+ if (fDateTimeFormat && fmt->fDateTimeFormat && (*fDateTimeFormat != *fmt->fDateTimeFormat)) {return false;}
+ if (fLocale != fmt->fLocale) {return false;}
for (int32_t i = 0; i< DateIntervalInfo::kIPI_MAX_INDEX; ++i ) {
- if (fIntervalPatterns[i].firstPart != fmt->fIntervalPatterns[i].firstPart) {return FALSE;}
- if (fIntervalPatterns[i].secondPart != fmt->fIntervalPatterns[i].secondPart ) {return FALSE;}
- if (fIntervalPatterns[i].laterDateFirst != fmt->fIntervalPatterns[i].laterDateFirst) {return FALSE;}
+ if (fIntervalPatterns[i].firstPart != fmt->fIntervalPatterns[i].firstPart) {return false;}
+ if (fIntervalPatterns[i].secondPart != fmt->fIntervalPatterns[i].secondPart ) {return false;}
+ if (fIntervalPatterns[i].laterDateFirst != fmt->fIntervalPatterns[i].laterDateFirst) {return false;}
}
- if (fCapitalizationContext != fmt->fCapitalizationContext) {return FALSE;}
- return TRUE;
+ if (fCapitalizationContext != fmt->fCapitalizationContext) {return false;}
+ return true;
}
@@ -704,7 +704,7 @@ DateIntervalFormat::create(const Locale& locale,
status = U_MEMORY_ALLOCATION_ERROR;
delete dtitvinf;
} else if ( U_FAILURE(status) ) {
- // safe to delete f, although nothing acutally is saved
+ // safe to delete f, although nothing actually is saved
delete f;
f = 0;
}
@@ -863,6 +863,14 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
setPatternInfo(UCAL_DATE, nullptr, &pattern, fInfo->getDefaultOrder());
setPatternInfo(UCAL_MONTH, nullptr, &pattern, fInfo->getDefaultOrder());
setPatternInfo(UCAL_YEAR, nullptr, &pattern, fInfo->getDefaultOrder());
+
+ timeSkeleton.insert(0, CAP_G);
+ pattern = DateFormat::getBestPattern(
+ locale, timeSkeleton, status);
+ if ( U_FAILURE(status) ) {
+ return;
+ }
+ setPatternInfo(UCAL_ERA, nullptr, &pattern, fInfo->getDefaultOrder());
} else {
// TODO: fall back
}
@@ -889,15 +897,23 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
setPatternInfo(UCAL_DATE, nullptr, &pattern, fInfo->getDefaultOrder());
setPatternInfo(UCAL_MONTH, nullptr, &pattern, fInfo->getDefaultOrder());
setPatternInfo(UCAL_YEAR, nullptr, &pattern, fInfo->getDefaultOrder());
+
+ timeSkeleton.insert(0, CAP_G);
+ pattern = DateFormat::getBestPattern(
+ locale, timeSkeleton, status);
+ if ( U_FAILURE(status) ) {
+ return;
+ }
+ setPatternInfo(UCAL_ERA, nullptr, &pattern, fInfo->getDefaultOrder());
} else {
/* if both present,
- * 1) when the year, month, or day differs,
+ * 1) when the era, year, month, or day differs,
* concatenate the two original expressions with a separator between,
* 2) otherwise, present the date followed by the
* range expression for the time.
*/
/*
- * 1) when the year, month, or day differs,
+ * 1) when the era, year, month, or day differs,
* concatenate the two original expressions with a separator between,
*/
// if field exists, use fall back
@@ -917,6 +933,11 @@ DateIntervalFormat::initializePattern(UErrorCode& status) {
skeleton.insert(0, LOW_Y);
setFallbackPattern(UCAL_YEAR, skeleton, status);
}
+ if ( !fieldExistsInSkeleton(UCAL_ERA, dateSkeleton) ) {
+ // then prefix skeleton with 'G'
+ skeleton.insert(0, CAP_G);
+ setFallbackPattern(UCAL_ERA, skeleton, status);
+ }
/*
* 2) otherwise, present the date followed by the
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp b/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
index 39fd44a392d..6052894b586 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
@@ -50,7 +50,6 @@ U_NAMESPACE_BEGIN
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateIntervalInfo)
static const char gCalendarTag[]="calendar";
-static const char gGenericTag[]="generic";
static const char gGregorianTag[]="gregorian";
static const char gIntervalDateTimePatternTag[]="intervalFormats";
static const char gFallbackPatternTag[]="fallback";
@@ -165,13 +164,13 @@ DateIntervalInfo::~DateIntervalInfo() {
}
-UBool
+bool
DateIntervalInfo::operator==(const DateIntervalInfo& other) const {
- UBool equal = (
+ bool equal = (
fFallbackIntervalPattern == other.fFallbackIntervalPattern &&
fFirstDateInPtnIsLaterDate == other.fFirstDateInPtnIsLaterDate );
- if ( equal == TRUE ) {
+ if ( equal ) {
equal = fIntervalPatterns->equals(*(other.fIntervalPatterns));
}
@@ -240,7 +239,7 @@ struct DateIntervalInfo::DateIntervalSink : public ResourceSink {
: dateIntervalInfo(diInfo), nextCalendarType(currentCalendarType, -1, US_INV) { }
virtual ~DateIntervalSink();
- virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &errorCode) {
+ virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &errorCode) override {
if (U_FAILURE(errorCode)) { return; }
// Iterate over all the calendar entries and only pick the 'intervalFormats' table.
@@ -435,23 +434,6 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& status)
if ( U_SUCCESS(status) ) {
resStr = ures_getStringByKeyWithFallback(itvDtPtnResource, gFallbackPatternTag,
&resStrLen, &status);
- if ( U_FAILURE(status) ) {
- // Try to find "fallback" from "generic" to work around the bug in
- // ures_getByKeyWithFallback
- UErrorCode localStatus = U_ZERO_ERROR;
- UResourceBundle *genericCalBundle =
- ures_getByKeyWithFallback(calBundle, gGenericTag, nullptr, &localStatus);
- UResourceBundle *genericItvDtPtnResource =
- ures_getByKeyWithFallback(
- genericCalBundle, gIntervalDateTimePatternTag, nullptr, &localStatus);
- resStr = ures_getStringByKeyWithFallback(
- genericItvDtPtnResource, gFallbackPatternTag, &resStrLen, &localStatus);
- ures_close(genericItvDtPtnResource);
- ures_close(genericCalBundle);
- if ( U_SUCCESS(localStatus) ) {
- status = U_USING_FALLBACK_WARNING;;
- }
- }
}
if ( U_SUCCESS(status) && (resStr != nullptr)) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp b/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
index 21f2362d171..6aee1750f90 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
@@ -424,31 +424,31 @@ DateTimePatternGenerator::operator=(const DateTimePatternGenerator& other) {
}
-UBool
+bool
DateTimePatternGenerator::operator==(const DateTimePatternGenerator& other) const {
if (this == &other) {
- return TRUE;
+ return true;
}
if ((pLocale==other.pLocale) && (patternMap->equals(*other.patternMap)) &&
(dateTimeFormat==other.dateTimeFormat) && (decimal==other.decimal)) {
for ( int32_t i=0 ; i<UDATPG_FIELD_COUNT; ++i ) {
if (appendItemFormats[i] != other.appendItemFormats[i]) {
- return FALSE;
+ return false;
}
for (int32_t j=0; j< UDATPG_WIDTH_COUNT; ++j ) {
if (fieldDisplayNames[i][j] != other.fieldDisplayNames[i][j]) {
- return FALSE;
+ return false;
}
}
}
- return TRUE;
+ return true;
}
else {
- return FALSE;
+ return false;
}
}
-UBool
+bool
DateTimePatternGenerator::operator!=(const DateTimePatternGenerator& other) const {
return !operator==(other);
}
@@ -525,7 +525,7 @@ struct AllowedHourFormatsSink : public ResourceSink {
virtual ~AllowedHourFormatsSink();
virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
+ UErrorCode &errorCode) override {
ResourceTable timeData = value.getTable(errorCode);
if (U_FAILURE(errorCode)) { return; }
for (int32_t i = 0; timeData.getKeyAndValue(i, key, value); ++i) {
@@ -745,7 +745,7 @@ DateTimePatternGenerator::getDefaultHourCycle(UErrorCode& status) const {
case LOW_K:
return UDAT_HOUR_CYCLE_24;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -933,16 +933,12 @@ struct DateTimePatternGenerator::AppendItemFormatsSink : public ResourceSink {
virtual ~AppendItemFormatsSink();
virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
- ResourceTable itemsTable = value.getTable(errorCode);
- if (U_FAILURE(errorCode)) { return; }
- for (int32_t i = 0; itemsTable.getKeyAndValue(i, key, value); ++i) {
- UDateTimePatternField field = dtpg.getAppendFormatNumber(key);
- if (field == UDATPG_FIELD_COUNT) { continue; }
- const UnicodeString& valueStr = value.getUnicodeString(errorCode);
- if (dtpg.getAppendItemFormat(field).isEmpty() && !valueStr.isEmpty()) {
- dtpg.setAppendItemFormat(field, valueStr);
- }
+ UErrorCode &errorCode) override {
+ UDateTimePatternField field = dtpg.getAppendFormatNumber(key);
+ if (field == UDATPG_FIELD_COUNT) { return; }
+ const UnicodeString& valueStr = value.getUnicodeString(errorCode);
+ if (dtpg.getAppendItemFormat(field).isEmpty() && !valueStr.isEmpty()) {
+ dtpg.setAppendItemFormat(field, valueStr);
}
}
@@ -966,23 +962,16 @@ struct DateTimePatternGenerator::AppendItemNamesSink : public ResourceSink {
virtual ~AppendItemNamesSink();
virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
- ResourceTable itemsTable = value.getTable(errorCode);
+ UErrorCode &errorCode) override {
+ UDateTimePGDisplayWidth width;
+ UDateTimePatternField field = dtpg.getFieldAndWidthIndices(key, &width);
+ if (field == UDATPG_FIELD_COUNT) { return; }
+ ResourceTable detailsTable = value.getTable(errorCode);
if (U_FAILURE(errorCode)) { return; }
- for (int32_t i = 0; itemsTable.getKeyAndValue(i, key, value); ++i) {
- UDateTimePGDisplayWidth width;
- UDateTimePatternField field = dtpg.getFieldAndWidthIndices(key, &width);
- if (field == UDATPG_FIELD_COUNT) { continue; }
- ResourceTable detailsTable = value.getTable(errorCode);
- if (U_FAILURE(errorCode)) { return; }
- for (int32_t j = 0; detailsTable.getKeyAndValue(j, key, value); ++j) {
- if (uprv_strcmp(key, "dn") != 0) { continue; }
- const UnicodeString& valueStr = value.getUnicodeString(errorCode);
- if (dtpg.getFieldDisplayName(field,width).isEmpty() && !valueStr.isEmpty()) {
- dtpg.setFieldDisplayName(field,width,valueStr);
- }
- break;
- }
+ if (!detailsTable.findValue("dn", value)) { return; }
+ const UnicodeString& valueStr = value.getUnicodeString(errorCode);
+ if (U_SUCCESS(errorCode) && dtpg.getFieldDisplayName(field,width).isEmpty() && !valueStr.isEmpty()) {
+ dtpg.setFieldDisplayName(field,width,valueStr);
}
}
@@ -1025,19 +1014,15 @@ struct DateTimePatternGenerator::AvailableFormatsSink : public ResourceSink {
virtual ~AvailableFormatsSink();
virtual void put(const char *key, ResourceValue &value, UBool isRoot,
- UErrorCode &errorCode) {
- ResourceTable itemsTable = value.getTable(errorCode);
- if (U_FAILURE(errorCode)) { return; }
- for (int32_t i = 0; itemsTable.getKeyAndValue(i, key, value); ++i) {
- const UnicodeString formatKey(key, -1, US_INV);
- if (!dtpg.isAvailableFormatSet(formatKey) ) {
- dtpg.setAvailableFormat(formatKey, errorCode);
- // Add pattern with its associated skeleton. Override any duplicate
- // derived from std patterns, but not a previous availableFormats entry:
- const UnicodeString& formatValue = value.getUnicodeString(errorCode);
- conflictingPattern.remove();
- dtpg.addPatternWithSkeleton(formatValue, &formatKey, !isRoot, conflictingPattern, errorCode);
- }
+ UErrorCode &errorCode) override {
+ const UnicodeString formatKey(key, -1, US_INV);
+ if (!dtpg.isAvailableFormatSet(formatKey) ) {
+ dtpg.setAvailableFormat(formatKey, errorCode);
+ // Add pattern with its associated skeleton. Override any duplicate
+ // derived from std patterns, but not a previous availableFormats entry:
+ const UnicodeString& formatValue = value.getUnicodeString(errorCode);
+ conflictingPattern.remove();
+ dtpg.addPatternWithSkeleton(formatValue, &formatKey, !isRoot, conflictingPattern, errorCode);
}
}
};
@@ -1072,13 +1057,13 @@ DateTimePatternGenerator::addCLDRData(const Locale& locale, UErrorCode& errorCod
.append('/', errorCode)
.append(DT_DateTimeAppendItemsTag, errorCode); // i.e., calendar/xxx/appendItems
if (U_FAILURE(errorCode)) { return; }
- ures_getAllItemsWithFallback(rb.getAlias(), path.data(), appendItemFormatsSink, err);
+ ures_getAllChildrenWithFallback(rb.getAlias(), path.data(), appendItemFormatsSink, err);
appendItemFormatsSink.fillInMissing();
// Load CLDR item names.
err = U_ZERO_ERROR;
AppendItemNamesSink appendItemNamesSink(*this);
- ures_getAllItemsWithFallback(rb.getAlias(), DT_DateTimeFieldsTag, appendItemNamesSink, err);
+ ures_getAllChildrenWithFallback(rb.getAlias(), DT_DateTimeFieldsTag, appendItemNamesSink, err);
appendItemNamesSink.fillInMissing();
// Load the available formats from CLDR.
@@ -1093,7 +1078,7 @@ DateTimePatternGenerator::addCLDRData(const Locale& locale, UErrorCode& errorCod
.append('/', errorCode)
.append(DT_DateTimeAvailableFormatsTag, errorCode); // i.e., calendar/xxx/availableFormats
if (U_FAILURE(errorCode)) { return; }
- ures_getAllItemsWithFallback(rb.getAlias(), path.data(), availableFormatsSink, err);
+ ures_getAllChildrenWithFallback(rb.getAlias(), path.data(), availableFormatsSink, err);
}
void
@@ -1648,7 +1633,11 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern,
(typeValue==UDATPG_MINUTE_FIELD && (options & UDATPG_MATCH_MINUTE_FIELD_LENGTH)==0) ||
(typeValue==UDATPG_SECOND_FIELD && (options & UDATPG_MATCH_SECOND_FIELD_LENGTH)==0) ) {
adjFieldLen = field.length();
- } else if (specifiedSkeleton) {
+ } else if (specifiedSkeleton && reqFieldChar != LOW_C && reqFieldChar != LOW_E) {
+ // (we skip this section for 'c' and 'e' because unlike the other characters considered in this function,
+ // they have no minimum field length-- 'E' and 'EE' are equivalent to 'EEE', but 'e' and 'ee' are not
+ // equivalent to 'eee' -- see the entries for "week day" in
+ // https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table for more info)
int32_t skelFieldLen = specifiedSkeleton->original.getFieldLength(typeValue);
UBool patFieldIsNumeric = (row->type > 0);
UBool skelFieldIsNumeric = (specifiedSkeleton->type[typeValue] > 0);
@@ -1663,6 +1652,9 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern,
&& (typeValue!= UDATPG_YEAR_FIELD || reqFieldChar==CAP_Y))
? reqFieldChar
: field.charAt(0);
+ if (c == CAP_E && adjFieldLen < 3) {
+ c = LOW_E;
+ }
if (typeValue == UDATPG_HOUR_FIELD && fDefaultHourFormatChar != 0) {
// The adjustment here is required to match spec (https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-hour).
// It is necessary to match the hour-cycle preferred by the Locale.
@@ -1953,7 +1945,7 @@ PatternMap::copyFrom(const PatternMap& other, UErrorCode& status) {
if (prevElem != nullptr) {
prevElem->next.adoptInstead(curElem);
} else {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
prevElem = curElem;
@@ -2800,7 +2792,7 @@ DTSkeletonEnumeration::DTSkeletonEnumeration(PatternMap& patternMap, dtStrEnum t
if (U_FAILURE(status)) {
return;
}
- fSkeletons->addElement(newElem.getAlias(), status);
+ fSkeletons->addElementX(newElem.getAlias(), status);
if (U_FAILURE(status)) {
fSkeletons.adoptInstead(nullptr);
return;
@@ -2873,7 +2865,7 @@ DTRedundantEnumeration::add(const UnicodeString& pattern, UErrorCode& status) {
if (U_FAILURE(status)) {
return;
}
- fPatterns->addElement(newElem.getAlias(), status);
+ fPatterns->addElementX(newElem.getAlias(), status);
if (U_FAILURE(status)) {
fPatterns.adoptInstead(nullptr);
return;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h b/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
index 9b9442d5787..5caae11654b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
@@ -134,20 +134,20 @@ public:
UnicodeString& appendTo(UnicodeString& string) const;
UnicodeString& appendFieldTo(int32_t field, UnicodeString& string) const;
UChar getFirstChar() const;
- inline UBool operator==(const SkeletonFields& other) const;
- inline UBool operator!=(const SkeletonFields& other) const;
+ inline bool operator==(const SkeletonFields& other) const;
+ inline bool operator!=(const SkeletonFields& other) const;
private:
int8_t chars[UDATPG_FIELD_COUNT];
int8_t lengths[UDATPG_FIELD_COUNT];
};
-inline UBool SkeletonFields::operator==(const SkeletonFields& other) const {
+inline bool SkeletonFields::operator==(const SkeletonFields& other) const {
return (uprv_memcmp(chars, other.chars, sizeof(chars)) == 0
&& uprv_memcmp(lengths, other.lengths, sizeof(lengths)) == 0);
}
-inline UBool SkeletonFields::operator!=(const SkeletonFields& other) const {
+inline bool SkeletonFields::operator!=(const SkeletonFields& other) const {
return (! operator==(other));
}
@@ -279,10 +279,10 @@ public:
DTSkeletonEnumeration(PatternMap& patternMap, dtStrEnum type, UErrorCode& status);
virtual ~DTSkeletonEnumeration();
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
- virtual const UnicodeString* snext(UErrorCode& status);
- virtual void reset(UErrorCode& status);
- virtual int32_t count(UErrorCode& status) const;
+ virtual UClassID getDynamicClassID(void) const override;
+ virtual const UnicodeString* snext(UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
+ virtual int32_t count(UErrorCode& status) const override;
private:
int32_t pos;
UBool isCanonicalItem(const UnicodeString& item);
@@ -294,10 +294,10 @@ public:
DTRedundantEnumeration();
virtual ~DTRedundantEnumeration();
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
- virtual const UnicodeString* snext(UErrorCode& status);
- virtual void reset(UErrorCode& status);
- virtual int32_t count(UErrorCode& status) const;
+ virtual UClassID getDynamicClassID(void) const override;
+ virtual const UnicodeString* snext(UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
+ virtual int32_t count(UErrorCode& status) const override;
void add(const UnicodeString &pattern, UErrorCode& status);
private:
int32_t pos;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/dtrule.cpp b/Build/source/libs/icu/icu-src/source/i18n/dtrule.cpp
index 6847f1d16e8..63949b63aa9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/dtrule.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/dtrule.cpp
@@ -81,7 +81,7 @@ DateTimeRule::operator=(const DateTimeRule& right) {
return *this;
}
-UBool
+bool
DateTimeRule::operator==(const DateTimeRule& that) const {
return ((this == &that) ||
(typeid(*this) == typeid(that) &&
@@ -94,7 +94,7 @@ DateTimeRule::operator==(const DateTimeRule& that) const {
fTimeRuleType == that.fTimeRuleType));
}
-UBool
+bool
DateTimeRule::operator!=(const DateTimeRule& that) const {
return !operator==(that);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/esctrn.h b/Build/source/libs/icu/icu-src/source/i18n/esctrn.h
index 2a2c6dcfe9a..a4282ea86a2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/esctrn.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/esctrn.h
@@ -115,12 +115,12 @@ class EscapeTransliterator : public Transliterator {
/**
* Transliterator API.
*/
- virtual EscapeTransliterator* clone() const;
+ virtual EscapeTransliterator* clone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -133,7 +133,7 @@ class EscapeTransliterator : public Transliterator {
* Implements {@link Transliterator#handleTransliterate}.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ethpccal.h b/Build/source/libs/icu/icu-src/source/i18n/ethpccal.h
index d1e8f424b57..0cc5b6c535e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ethpccal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/ethpccal.h
@@ -141,14 +141,14 @@ public:
* @return return a polymorphic copy of this calendar.
* @internal
*/
- virtual EthiopicCalendar* clone() const;
+ virtual EthiopicCalendar* clone() const override;
/**
* return the calendar type, "ethiopic"
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
/**
* Set Alem or Mihret era.
@@ -173,38 +173,38 @@ protected:
* Return the extended year defined by the current fields.
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Compute fields from the JD
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
/**
* Calculate the limit for a specified type of limit and field
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Returns the date of the start of the default century
* @return start of century - in milliseconds since epoch, 1970
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Returns the year in which the default century begins
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
/**
* Return the date offset from Julian
* @internal
*/
- virtual int32_t getJDEpochOffset() const;
+ virtual int32_t getJDEpochOffset() const override;
private:
/**
@@ -229,7 +229,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
diff --git a/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp b/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
index ea27246f16e..7a9a81ded5d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
@@ -177,7 +177,7 @@ Formattable::Formattable(const UnicodeString& stringToCopy)
// -------------------------------------
// Creates a formattable object with a UnicodeString* value.
-// (adopting symantics)
+// (adopting semantics)
Formattable::Formattable(UnicodeString* stringToAdopt)
{
@@ -275,18 +275,18 @@ Formattable::operator=(const Formattable& source)
// -------------------------------------
-UBool
+bool
Formattable::operator==(const Formattable& that) const
{
int32_t i;
- if (this == &that) return TRUE;
+ if (this == &that) return true;
- // Returns FALSE if the data types are different.
- if (fType != that.fType) return FALSE;
+ // Returns false if the data types are different.
+ if (fType != that.fType) return false;
// Compares the actual data values.
- UBool equal = TRUE;
+ bool equal = true;
switch (fType) {
case kDate:
equal = (fValue.fDate == that.fValue.fDate);
@@ -303,20 +303,20 @@ Formattable::operator==(const Formattable& that) const
break;
case kArray:
if (fValue.fArrayAndCount.fCount != that.fValue.fArrayAndCount.fCount) {
- equal = FALSE;
+ equal = false;
break;
}
// Checks each element for equality.
for (i=0; i<fValue.fArrayAndCount.fCount; ++i) {
if (fValue.fArrayAndCount.fArray[i] != that.fValue.fArrayAndCount.fArray[i]) {
- equal = FALSE;
+ equal = false;
break;
}
}
break;
case kObject:
if (fValue.fObject == NULL || that.fValue.fObject == NULL) {
- equal = FALSE;
+ equal = false;
} else {
equal = objectEquals(fValue.fObject, that.fValue.fObject);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/format.cpp b/Build/source/libs/icu/icu-src/source/i18n/format.cpp
index a010defff93..10856a4acba 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/format.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/format.cpp
@@ -155,7 +155,7 @@ Format::parseObject(const UnicodeString& source,
// -------------------------------------
-UBool
+bool
Format::operator==(const Format& that) const
{
// Subclasses: Call this method and then add more specific checks.
@@ -167,7 +167,7 @@ Format::operator==(const Format& that) const
* Simple function for initializing a UParseError from a UnicodeString.
*
* @param pattern The pattern to copy into the parseError
- * @param pos The position in pattern where the error occured
+ * @param pos The position in pattern where the error occurred
* @param parseError The UParseError object to fill in
* @draft ICU 2.4
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp b/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp
index b370f14f2ac..734078644b8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/formatted_string_builder.cpp
@@ -277,7 +277,7 @@ int32_t FormattedStringBuilder::prepareForInsertHelper(int32_t index, int32_t co
Field *oldFields = getFieldPtr();
if (fLength + count > oldCapacity) {
if ((fLength + count) > INT32_MAX / 2) {
- // If we continue, then newCapacity will overlow int32_t in the next line.
+ // If we continue, then newCapacity will overflow int32_t in the next line.
status = U_INPUT_TOO_LONG_ERROR;
return -1;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h b/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h
index c0dec83ba1e..2b9a3970d2e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/formattedval_impl.h
@@ -119,7 +119,9 @@ private:
// Internal struct that must be exported for MSVC
struct U_I18N_API SpanInfo {
+ UFieldCategory category;
int32_t spanValue;
+ int32_t start;
int32_t length;
};
@@ -167,20 +169,24 @@ public:
inline const FormattedStringBuilder& getStringRef() const {
return fString;
}
+ void resetString();
/**
* Adds additional metadata used for span fields.
- *
- * spanValue: the index of the list item, for example.
+ *
+ * category: the category to use for the span field.
+ * spanValue: the value of the span field: index of the list item, for example.
+ * start: the start position within the string of the span. -1 if unknown.
* length: the length of the span, used to split adjacent fields.
*/
- void appendSpanInfo(int32_t spanValue, int32_t length, UErrorCode& status);
- void prependSpanInfo(int32_t spanValue, int32_t length, UErrorCode& status);
+ void appendSpanInfo(UFieldCategory category, int32_t spanValue, int32_t start, int32_t length, UErrorCode& status);
+ void prependSpanInfo(UFieldCategory category, int32_t spanValue, int32_t start, int32_t length, UErrorCode& status);
private:
FormattedStringBuilder fString;
FormattedStringBuilder::Field fNumericField;
MaybeStackArray<SpanInfo, 8> spanIndices;
+ int32_t spanIndicesCount = 0;
bool nextPositionImpl(ConstrainedFieldPosition& cfpos, FormattedStringBuilder::Field numericField, UErrorCode& status) const;
static bool isIntOrGroup(FormattedStringBuilder::Field field);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp b/Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp
index 84c2d00666c..70ffacac4b7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/formattedval_sbimpl.cpp
@@ -96,6 +96,11 @@ void FormattedValueStringBuilderImpl::getAllFieldPositions(FieldPositionIterator
}
}
+void FormattedValueStringBuilderImpl::resetString() {
+ fString.clear();
+ spanIndicesCount = 0;
+}
+
// Signal the end of the string using a field that doesn't exist and that is
// different from kUndefinedField, which is used for "null field".
static constexpr Field kEndField = Field(0xf, 0xf);
@@ -103,6 +108,27 @@ static constexpr Field kEndField = Field(0xf, 0xf);
bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition& cfpos, Field numericField, UErrorCode& /*status*/) const {
int32_t fieldStart = -1;
Field currField = kUndefinedField;
+ bool prevIsSpan = false;
+ int32_t nextSpanStart = -1;
+ if (spanIndicesCount > 0) {
+ int64_t si = cfpos.getInt64IterationContext();
+ U_ASSERT(si <= spanIndicesCount);
+ if (si < spanIndicesCount) {
+ nextSpanStart = spanIndices[si].start;
+ }
+ if (si > 0) {
+ prevIsSpan = cfpos.getCategory() == spanIndices[si-1].category
+ && cfpos.getField() == spanIndices[si-1].spanValue;
+ }
+ }
+ bool prevIsNumeric = false;
+ if (numericField != kUndefinedField) {
+ prevIsNumeric = cfpos.getCategory() == numericField.getCategory()
+ && cfpos.getField() == numericField.getField();
+ }
+ bool prevIsInteger = cfpos.getCategory() == UFIELD_CATEGORY_NUMBER
+ && cfpos.getField() == UNUM_INTEGER_FIELD;
+
for (int32_t i = fString.fZero + cfpos.getLimit(); i <= fString.fZero + fString.fLength; i++) {
Field _field = (i < fString.fZero + fString.fLength) ? fString.getFieldPtr()[i] : kEndField;
// Case 1: currently scanning a field.
@@ -129,11 +155,38 @@ bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition&
}
continue;
}
+ // Special case: emit normalField if we are pointing at the end of spanField.
+ if (i > fString.fZero && prevIsSpan) {
+ int64_t si = cfpos.getInt64IterationContext() - 1;
+ U_ASSERT(si >= 0);
+ int32_t previ = i - spanIndices[si].length;
+ U_ASSERT(previ >= fString.fZero);
+ Field prevField = fString.getFieldPtr()[previ];
+ if (prevField == Field(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD)) {
+ // Special handling for ULISTFMT_ELEMENT_FIELD
+ if (cfpos.matchesField(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD)) {
+ fieldStart = i - fString.fZero - spanIndices[si].length;
+ int32_t end = fieldStart + spanIndices[si].length;
+ cfpos.setState(
+ UFIELD_CATEGORY_LIST,
+ ULISTFMT_ELEMENT_FIELD,
+ fieldStart,
+ end);
+ return true;
+ } else {
+ prevIsSpan = false;
+ }
+ } else {
+ // Re-wind, since there may be multiple fields in the span.
+ i = previ;
+ _field = prevField;
+ }
+ }
// Special case: coalesce the INTEGER if we are pointing at the end of the INTEGER.
if (cfpos.matchesField(UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD)
&& i > fString.fZero
- // don't return the same field twice in a row:
- && i - fString.fZero > cfpos.getLimit()
+ && !prevIsInteger
+ && !prevIsNumeric
&& isIntOrGroup(fString.getFieldPtr()[i - 1])
&& !isIntOrGroup(_field)) {
int j = i - 1;
@@ -149,10 +202,7 @@ bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition&
if (numericField != kUndefinedField
&& cfpos.matchesField(numericField.getCategory(), numericField.getField())
&& i > fString.fZero
- // don't return the same field twice in a row:
- && (i - fString.fZero > cfpos.getLimit()
- || cfpos.getCategory() != numericField.getCategory()
- || cfpos.getField() != numericField.getField())
+ && !prevIsNumeric
&& fString.getFieldPtr()[i - 1].isNumeric()
&& !_field.isNumeric()) {
// Re-wind to the beginning of the field and then emit it
@@ -165,38 +215,22 @@ bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition&
i - fString.fZero);
return true;
}
- // Special case: emit normalField if we are pointing at the end of spanField.
- if (i > fString.fZero) {
- auto elementField = fString.getFieldPtr()[i-1];
- if (elementField == Field(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD)
- && cfpos.matchesField(elementField.getCategory(), elementField.getField())
- && (cfpos.getLimit() < i - fString.fZero || cfpos.getCategory() != elementField.getCategory())) {
- int64_t si = cfpos.getInt64IterationContext() - 1;
- cfpos.setState(
- elementField.getCategory(),
- elementField.getField(),
- i - fString.fZero - spanIndices[si].length,
- i - fString.fZero);
- return true;
- }
- }
- // Special case: skip over INTEGER; will be coalesced later.
- if (_field == Field(UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD)) {
- _field = kUndefinedField;
- }
- // Case 2: no field starting at this position.
- if (_field.isUndefined() || _field == kEndField) {
- continue;
- }
- // Case 3: check for field starting at this position
- // Case 3a: Need to add a SpanField
- if (_field == Field(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD)) {
+ // Check for span field
+ if (!prevIsSpan && (
+ _field == Field(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD) ||
+ i - fString.fZero == nextSpanStart)) {
int64_t si = cfpos.getInt64IterationContext();
+ if (si >= spanIndicesCount) {
+ break;
+ }
+ UFieldCategory spanCategory = spanIndices[si].category;
int32_t spanValue = spanIndices[si].spanValue;
int32_t length = spanIndices[si].length;
cfpos.setInt64IterationContext(si + 1);
- if (cfpos.matchesField(UFIELD_CATEGORY_LIST_SPAN, spanValue)) {
- UFieldCategory spanCategory = UFIELD_CATEGORY_LIST_SPAN;
+ if (si + 1 < spanIndicesCount) {
+ nextSpanStart = spanIndices[si + 1].start;
+ }
+ if (cfpos.matchesField(spanCategory, spanValue)) {
fieldStart = i - fString.fZero;
int32_t end = fieldStart + length;
cfpos.setState(
@@ -205,17 +239,41 @@ bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition&
fieldStart,
end);
return true;
- } else {
- // Failed to match; jump ahead
- i += length - 1;
- continue;
+ } else if (_field == Field(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD)) {
+ // Special handling for ULISTFMT_ELEMENT_FIELD
+ if (cfpos.matchesField(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD)) {
+ fieldStart = i - fString.fZero;
+ int32_t end = fieldStart + length;
+ cfpos.setState(
+ UFIELD_CATEGORY_LIST,
+ ULISTFMT_ELEMENT_FIELD,
+ fieldStart,
+ end);
+ return true;
+ } else {
+ // Failed to match; jump ahead
+ i += length - 1;
+ // goto loopend
+ }
}
}
- // Case 3b: No SpanField
- if (cfpos.matchesField(_field.getCategory(), _field.getField())) {
+ // Special case: skip over INTEGER; will be coalesced later.
+ else if (_field == Field(UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD)) {
+ _field = kUndefinedField;
+ }
+ // No field starting at this position.
+ else if (_field.isUndefined() || _field == kEndField) {
+ // goto loopend
+ }
+ // No SpanField
+ else if (cfpos.matchesField(_field.getCategory(), _field.getField())) {
fieldStart = i - fString.fZero;
currField = _field;
}
+ // loopend:
+ prevIsSpan = false;
+ prevIsNumeric = false;
+ prevIsInteger = false;
}
U_ASSERT(currField == kUndefinedField);
@@ -228,31 +286,33 @@ bool FormattedValueStringBuilderImpl::nextPositionImpl(ConstrainedFieldPosition&
return false;
}
-void FormattedValueStringBuilderImpl::appendSpanInfo(int32_t spanValue, int32_t length, UErrorCode& status) {
+void FormattedValueStringBuilderImpl::appendSpanInfo(UFieldCategory category, int32_t spanValue, int32_t start, int32_t length, UErrorCode& status) {
if (U_FAILURE(status)) { return; }
- U_ASSERT(spanIndices.getCapacity() >= spanValue);
- if (spanIndices.getCapacity() == spanValue) {
- if (!spanIndices.resize(spanValue * 2, spanValue)) {
+ U_ASSERT(spanIndices.getCapacity() >= spanIndicesCount);
+ if (spanIndices.getCapacity() == spanIndicesCount) {
+ if (!spanIndices.resize(spanIndicesCount * 2, spanIndicesCount)) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
}
- spanIndices[spanValue] = {spanValue, length};
+ spanIndices[spanIndicesCount] = {category, spanValue, start, length};
+ spanIndicesCount++;
}
-void FormattedValueStringBuilderImpl::prependSpanInfo(int32_t spanValue, int32_t length, UErrorCode& status) {
+void FormattedValueStringBuilderImpl::prependSpanInfo(UFieldCategory category, int32_t spanValue, int32_t start, int32_t length, UErrorCode& status) {
if (U_FAILURE(status)) { return; }
- U_ASSERT(spanIndices.getCapacity() >= spanValue);
- if (spanIndices.getCapacity() == spanValue) {
- if (!spanIndices.resize(spanValue * 2, spanValue)) {
+ U_ASSERT(spanIndices.getCapacity() >= spanIndicesCount);
+ if (spanIndices.getCapacity() == spanIndicesCount) {
+ if (!spanIndices.resize(spanIndicesCount * 2, spanIndicesCount)) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
}
- for (int32_t i = spanValue - 1; i >= 0; i--) {
+ for (int32_t i = spanIndicesCount - 1; i >= 0; i--) {
spanIndices[i+1] = spanIndices[i];
}
- spanIndices[0] = {spanValue, length};
+ spanIndices[0] = {category, spanValue, start, length};
+ spanIndicesCount++;
}
bool FormattedValueStringBuilderImpl::isIntOrGroup(Field field) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp b/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp
index 79ecf0a841c..1030661f220 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/formattedvalue.cpp
@@ -49,7 +49,7 @@ UBool ConstrainedFieldPosition::matchesField(int32_t category, int32_t field) co
case UCFPOS_CONSTRAINT_FIELD:
return fCategory == category && fField == field;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -209,6 +209,8 @@ ufmtval_getString(
if (pLength != nullptr) {
*pLength = readOnlyAlias.length();
}
+ // Note: this line triggers -Wreturn-local-addr, but it is safe because toTempString is
+ // defined to return memory owned by the ufmtval argument.
return readOnlyAlias.getBuffer();
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/fpositer.cpp b/Build/source/libs/icu/icu-src/source/i18n/fpositer.cpp
index 75d529eb8c9..096896d7b38 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/fpositer.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/fpositer.cpp
@@ -45,17 +45,17 @@ FieldPositionIterator::FieldPositionIterator(const FieldPositionIterator &rhs)
}
}
-UBool FieldPositionIterator::operator==(const FieldPositionIterator &rhs) const {
+bool FieldPositionIterator::operator==(const FieldPositionIterator &rhs) const {
if (&rhs == this) {
- return TRUE;
+ return true;
}
if (pos != rhs.pos) {
- return FALSE;
+ return false;
}
if (!data) {
return rhs.data == NULL;
}
- return rhs.data ? data->operator==(*rhs.data) : FALSE;
+ return rhs.data ? data->operator==(*rhs.data) : false;
}
void FieldPositionIterator::setData(UVector32 *adopt, UErrorCode& status) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/funcrepl.h b/Build/source/libs/icu/icu-src/source/i18n/funcrepl.h
index fe41f6caaa6..529a10ebbf5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/funcrepl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/funcrepl.h
@@ -70,13 +70,13 @@ class FunctionReplacer : public UnicodeFunctor, public UnicodeReplacer {
/**
* Implement UnicodeFunctor
*/
- virtual FunctionReplacer* clone() const;
+ virtual FunctionReplacer* clone() const override;
/**
* UnicodeFunctor API. Cast 'this' to a UnicodeReplacer* pointer
* and return the pointer.
*/
- virtual UnicodeReplacer* toReplacer() const;
+ virtual UnicodeReplacer* toReplacer() const override;
/**
* UnicodeReplacer API
@@ -84,28 +84,28 @@ class FunctionReplacer : public UnicodeFunctor, public UnicodeReplacer {
virtual int32_t replace(Replaceable& text,
int32_t start,
int32_t limit,
- int32_t& cursor);
+ int32_t& cursor) override;
/**
* UnicodeReplacer API
*/
virtual UnicodeString& toReplacerPattern(UnicodeString& rule,
- UBool escapeUnprintable) const;
+ UBool escapeUnprintable) const override;
/**
* Implement UnicodeReplacer
*/
- virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const;
+ virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const override;
/**
* UnicodeFunctor API
*/
- virtual void setData(const TransliterationRuleData*);
+ virtual void setData(const TransliterationRuleData*) override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp b/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
index 7ca58268456..31d36300aeb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
@@ -398,7 +398,7 @@ void GregorianCalendar::handleComputeFields(int32_t julianDay, UErrorCode& statu
// with 8 AD. Before 8 AD the spacing is irregular; every 3 years
// from 45 BC to 9 BC, and then none until 8 AD. However, we don't
// implement this historical detail; instead, we implement the
- // computatinally cleaner proleptic calendar, which assumes
+ // computationally cleaner proleptic calendar, which assumes
// consistent 4-year cycles throughout time.
UBool isLeap = ((eyear&0x3) == 0); // equiv. to (eyear%4 == 0)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h b/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h
index aec33c48c80..b1a5bc22c22 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h
@@ -86,7 +86,7 @@ class ClockMath {
* 0 <= remainder < divisor.
*
* Works around edge-case bugs. Handles pathological input
- * (divident >> divisor) reasonably.
+ * (dividend >> divisor) reasonably.
*
* Calling with a divisor <= 0 is disallowed.
*/
@@ -214,7 +214,7 @@ class Grego {
* @param dom output parameter to receive day-of-month (1-based)
* @param dow output parameter to receive day-of-week (1-based, 1==Sun)
* @param doy output parameter to receive day-of-year (1-based)
- * @param mid output parameter to recieve millis-in-day
+ * @param mid output parameter to receive millis-in-day
*/
static void timeToFields(UDate time, int32_t& year, int32_t& month,
int32_t& dom, int32_t& dow, int32_t& doy, int32_t& mid);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h b/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
index d27e6b879d6..ae4401832d4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
@@ -192,7 +192,7 @@ public:
* @return return a polymorphic copy of this calendar.
* @internal
*/
- virtual HebrewCalendar* clone() const;
+ virtual HebrewCalendar* clone() const override;
public:
/**
@@ -205,7 +205,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -226,7 +226,7 @@ public:
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
// Calendar API
@@ -242,11 +242,11 @@ public:
* previously set in the time field is invalid, this will be set to
* an error status.
*/
- virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode& status);
+ virtual void add(UCalendarDateFields field, int32_t amount, UErrorCode& status) override;
/**
* @deprecated ICU 2.6 use UCalendarDateFields instead of EDateFields
*/
- virtual void add(EDateFields field, int32_t amount, UErrorCode& status);
+ virtual void add(EDateFields field, int32_t amount, UErrorCode& status) override;
/**
@@ -260,7 +260,7 @@ public:
* an error status.
* @internal
*/
- virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
+ virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) override;
/**
* (Overrides Calendar) Rolls up or down by the given amount in the specified field.
@@ -273,7 +273,7 @@ public:
* an error status.
* @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead.
` */
- virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
+ virtual void roll(EDateFields field, int32_t amount, UErrorCode& status) override;
/**
* @internal
@@ -303,7 +303,7 @@ public:
* <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Return the number of days in the given month of the given extended
@@ -312,7 +312,7 @@ public:
* implementation than the default implementation in Calendar.
* @internal
*/
- virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
+ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const override;
/**
* Return the number of days in the given extended year of this
@@ -321,7 +321,7 @@ public:
* default implementation in Calendar.
* @stable ICU 2.0
*/
- virtual int32_t handleGetYearLength(int32_t eyear) const;
+ virtual int32_t handleGetYearLength(int32_t eyear) const override;
/**
* Subclasses may override this method to compute several fields
* specific to each calendar system. These are:
@@ -337,7 +337,7 @@ public:
* a calendar with the specified Julian/Gregorian cutover date.
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
/**
* Return the extended year defined by the current fields. This will
* use the UCAL_EXTENDED_YEAR field or the UCAL_YEAR and supra-year fields (such
@@ -346,7 +346,7 @@ public:
* @return the extended year
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Return the Julian day number of day before the first day of the
* given month in the given extended year. Subclasses should override
@@ -361,7 +361,7 @@ public:
* @internal
*/
virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
- UBool useMonth) const;
+ UBool useMonth) const override;
/**
@@ -370,7 +370,7 @@ public:
* special handling for month validation for Hebrew calendar.
* @internal
*/
- virtual void validateField(UCalendarDateFields field, UErrorCode &status);
+ virtual void validateField(UCalendarDateFields field, UErrorCode &status) override;
protected:
@@ -383,26 +383,26 @@ public:
* false, otherwise.
* @internal
*/
- virtual UBool inDaylightTime(UErrorCode& status) const;
+ virtual UBool inDaylightTime(UErrorCode& status) const override;
- /**
- * Returns true because the Hebrew Calendar does have a default century
- * @internal
- */
- virtual UBool haveDefaultCentury() const;
+ /**
+ * Returns true because the Hebrew Calendar does have a default century
+ * @internal
+ */
+ virtual UBool haveDefaultCentury() const override;
- /**
- * Returns the date of the start of the default century
- * @return start of century - in milliseconds since epoch, 1970
- * @internal
- */
- virtual UDate defaultCenturyStart() const;
+ /**
+ * Returns the date of the start of the default century
+ * @return start of century - in milliseconds since epoch, 1970
+ * @internal
+ */
+ virtual UDate defaultCenturyStart() const override;
- /**
- * Returns the year in which the default century begins
- * @internal
- */
- virtual int32_t defaultCenturyStartYear() const;
+ /**
+ * Returns the year in which the default century begins
+ * @internal
+ */
+ virtual int32_t defaultCenturyStartYear() const override;
private: // Calendar-specific implementation
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj b/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
index 218772f9974..3471cf3e55d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
@@ -60,7 +60,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuin68d.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuin70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuind.lib</ImportLibrary>
</Link>
@@ -73,7 +73,7 @@
</ClCompile>
<Link>
<AdditionalDependencies>icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuin68.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuin70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuin.lib</ImportLibrary>
</Link>
diff --git a/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj b/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
index f836aeb0726..c7358d72e59 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
@@ -186,7 +186,7 @@
<ProgramDataBaseFileName>.\x86\ReleaseUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\bin32uwp\icuin68.dll</OutputFile>
+ <OutputFile>..\..\bin32uwp\icuin70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\lib32uwp\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\lib32uwp\icuin.lib</ImportLibrary>
<AdditionalDependencies>..\..\lib32uwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -203,7 +203,7 @@
<ProgramDataBaseFileName>.\x86\DebugUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\bin32uwp\icuin68d.dll</OutputFile>
+ <OutputFile>..\..\bin32uwp\icuin70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\lib32uwp\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\lib32uwp\icuind.lib</ImportLibrary>
<AdditionalDependencies>..\..\lib32uwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -220,7 +220,7 @@
<ProgramDataBaseFileName>.\x64\ReleaseUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\bin64uwp\icuin68.dll</OutputFile>
+ <OutputFile>..\..\bin64uwp\icuin70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\lib64uwp\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\lib64uwp\icuin.lib</ImportLibrary>
<AdditionalDependencies>..\..\lib64uwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -237,7 +237,7 @@
<ProgramDataBaseFileName>.\x64\DebugUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\bin64uwp\icuin68d.dll</OutputFile>
+ <OutputFile>..\..\bin64uwp\icuin70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\lib64uwp\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\lib64uwp\icuind.lib</ImportLibrary>
<AdditionalDependencies>..\..\lib64uwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -254,7 +254,7 @@
<ProgramDataBaseFileName>.\ARM\ReleaseUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\binARMuwp\icuin68.dll</OutputFile>
+ <OutputFile>..\..\binARMuwp\icuin70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\libARMuwp\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\libARMuwp\icuin.lib</ImportLibrary>
<AdditionalDependencies>..\..\libARMuwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -271,7 +271,7 @@
<ProgramDataBaseFileName>.\ARM\DebugUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\binARMuwp\icuin68d.dll</OutputFile>
+ <OutputFile>..\..\binARMuwp\icuin70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\libARMuwp\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\libARMuwp\icuind.lib</ImportLibrary>
<AdditionalDependencies>..\..\libARMuwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -288,7 +288,7 @@
<ProgramDataBaseFileName>.\ARM64\ReleaseUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\binARM64uwp\icuin68.dll</OutputFile>
+ <OutputFile>..\..\binARM64uwp\icuin70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\libARM64uwp\icuin.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\libARM64uwp\icuin.lib</ImportLibrary>
<AdditionalDependencies>..\..\libARM64uwp\icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -305,7 +305,7 @@
<ProgramDataBaseFileName>.\ARM64\DebugUWP/</ProgramDataBaseFileName>
</ClCompile>
<Link>
- <OutputFile>..\..\binARM64uwp\icuin68d.dll</OutputFile>
+ <OutputFile>..\..\binARM64uwp\icuin70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\libARM64uwp\icuind.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\libARM64uwp\icuind.lib</ImportLibrary>
<AdditionalDependencies>..\..\libARM64uwp\icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp b/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
index 9d9df58f13d..7bba7f50920 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
@@ -208,7 +208,7 @@ int32_t IndianCalendar::handleComputeMonthStart(int32_t eyear, int32_t month, UB
//month is 0 based; converting it to 1-based
int32_t imonth;
- // If the month is out of range, adjust it into range, and adjust the extended eyar accordingly
+ // If the month is out of range, adjust it into range, and adjust the extended year accordingly
if (month < 0 || month > 11) {
eyear += (int32_t)ClockMath::floorDivide(month, 12, month);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/indiancal.h b/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
index 3981ea58512..029515cf547 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
@@ -25,7 +25,7 @@ U_NAMESPACE_BEGIN
* Concrete class which provides the Indian calendar.
* <P>
* <code>IndianCalendar</code> is a subclass of <code>Calendar</code>
- * that numbers years since the begining of SAKA ERA. This is the civil calendar
+ * that numbers years since the beginning of SAKA ERA. This is the civil calendar
* which is accepted by government of India as Indian National Calendar.
* The two calendars most widely used in India today are the Vikrama calendar
* followed in North India and the Shalivahana or Saka calendar which is followed
@@ -186,7 +186,7 @@ public:
// TODO: copy c'tor, etc
// clone
- virtual IndianCalendar* clone() const;
+ virtual IndianCalendar* clone() const override;
private:
/**
@@ -200,7 +200,7 @@ public:
/**
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Return the length (in days) of the given month.
@@ -209,13 +209,13 @@ public:
* @param year The month(0-based) in Indian year
* @internal
*/
- virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
+ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const override;
/**
* Return the number of days in the given Indian year
* @internal
*/
- virtual int32_t handleGetYearLength(int32_t extendedYear) const;
+ virtual int32_t handleGetYearLength(int32_t extendedYear) const override;
//-------------------------------------------------------------------------
// Functions for converting from field values to milliseconds....
@@ -225,7 +225,7 @@ public:
/**
* @internal
*/
- virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
+ virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const override;
//-------------------------------------------------------------------------
// Functions for converting from milliseconds to field values
@@ -234,7 +234,7 @@ public:
/**
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Override Calendar to compute several fields specific to the Indian
@@ -252,7 +252,7 @@ public:
* calendar equivalents for the given Julian day.
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
// UObject stuff
public:
@@ -261,7 +261,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -282,7 +282,7 @@ public:
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
private:
IndianCalendar(); // default constructor not implemented
@@ -299,27 +299,27 @@ protected:
* false, otherwise.
* @internal
*/
- virtual UBool inDaylightTime(UErrorCode& status) const;
+ virtual UBool inDaylightTime(UErrorCode& status) const override;
/**
* Returns true because the Indian Calendar does have a default century
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
/**
* Returns the date of the start of the default century
* @return start of century - in milliseconds since epoch, 1970
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Returns the year in which the default century begins
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/inputext.cpp b/Build/source/libs/icu/icu-src/source/i18n/inputext.cpp
index 2d4f8a388af..fa4939e8f4f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/inputext.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/inputext.cpp
@@ -141,7 +141,7 @@ void InputText::MungeInput(UBool fStripTags) {
}
//
- // Tally up the byte occurence statistics.
+ // Tally up the byte occurrence statistics.
// These are available for use by the various detectors.
//
diff --git a/Build/source/libs/icu/icu-src/source/i18n/inputext.h b/Build/source/libs/icu/icu-src/source/i18n/inputext.h
index 8edc561fc64..fb92dc06343 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/inputext.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/inputext.h
@@ -44,7 +44,7 @@ public:
int32_t fInputLen; // Length of the byte data in fInputBytes.
// byte frequency statistics for the input text.
// Value is percent, not absolute.
- // Value is rounded up, so zero really means zero occurences.
+ // Value is rounded up, so zero really means zero occurrences.
int16_t *fByteStats;
UBool fC1Bytes; // True if any bytes in the range 0x80 - 0x9F are in the input;false by default
char *fDeclaredEncoding;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp b/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
index 982b3ad2d1c..de37e6b9398 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
@@ -222,7 +222,7 @@ const char *IslamicCalendar::getType() const {
sType = "islamic-umalqura";
break;
default:
- UPRV_UNREACHABLE; // out of range
+ UPRV_UNREACHABLE_EXIT; // out of range
}
return sType;
}
@@ -675,7 +675,7 @@ void IslamicCalendar::handleComputeFields(int32_t julianDay, UErrorCode &status)
month = m;
}
} else { // invalid 'civil'
- UPRV_UNREACHABLE; // should not get here, out of range
+ UPRV_UNREACHABLE_EXIT; // should not get here, out of range
}
dayOfMonth = (days - monthStart(year, month)) + 1;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/islamcal.h b/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
index d324c6e409b..a29b7daa086 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
@@ -67,7 +67,7 @@ U_NAMESPACE_BEGIN
* moon's illumination, and other factors, it is possible to determine the start
* of a lunar month with a fairly high degree of certainty. However, these
* calculations are extremely complicated and thus slow, so most algorithms,
- * including the one used here, are only approximations of the true astronical
+ * including the one used here, are only approximations of the true astronomical
* calculations. At present, the approximations used in this class are fairly
* simplistic; they will be improved in later versions of the code.
* <p>
@@ -230,7 +230,7 @@ class U_I18N_API IslamicCalendar : public Calendar {
// TODO: copy c'tor, etc
// clone
- virtual IslamicCalendar* clone() const;
+ virtual IslamicCalendar* clone() const override;
private:
/**
@@ -292,7 +292,7 @@ class U_I18N_API IslamicCalendar : public Calendar {
/**
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Return the length (in days) of the given month.
@@ -301,13 +301,13 @@ class U_I18N_API IslamicCalendar : public Calendar {
* @param year The hijri month, 0-based
* @internal
*/
- virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
+ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const override;
/**
* Return the number of days in the given Islamic year
* @internal
*/
- virtual int32_t handleGetYearLength(int32_t extendedYear) const;
+ virtual int32_t handleGetYearLength(int32_t extendedYear) const override;
//-------------------------------------------------------------------------
// Functions for converting from field values to milliseconds....
@@ -317,7 +317,7 @@ class U_I18N_API IslamicCalendar : public Calendar {
/**
* @internal
*/
- virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
+ virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const override;
//-------------------------------------------------------------------------
// Functions for converting from milliseconds to field values
@@ -326,7 +326,7 @@ class U_I18N_API IslamicCalendar : public Calendar {
/**
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Override Calendar to compute several fields specific to the Islamic
@@ -344,7 +344,7 @@ class U_I18N_API IslamicCalendar : public Calendar {
* calendar equivalents for the given Julian day.
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
// UObject stuff
public:
@@ -353,7 +353,7 @@ class U_I18N_API IslamicCalendar : public Calendar {
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -374,7 +374,7 @@ class U_I18N_API IslamicCalendar : public Calendar {
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
private:
IslamicCalendar(); // default constructor not implemented
@@ -391,27 +391,27 @@ class U_I18N_API IslamicCalendar : public Calendar {
* false, otherwise.
* @internal
*/
- virtual UBool inDaylightTime(UErrorCode& status) const;
+ virtual UBool inDaylightTime(UErrorCode& status) const override;
/**
* Returns true because the Islamic Calendar does have a default century
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
/**
* Returns the date of the start of the default century
* @return start of century - in milliseconds since epoch, 1970
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Returns the year in which the default century begins
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/japancal.h b/Build/source/libs/icu/icu-src/source/i18n/japancal.h
index e5b95d732c0..88513440528 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/japancal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/japancal.h
@@ -116,20 +116,20 @@ public:
* @return return a polymorphic copy of this calendar.
* @internal
*/
- virtual JapaneseCalendar* clone() const;
+ virtual JapaneseCalendar* clone() const override;
/**
* Return the extended year defined by the current fields. In the
* Japanese calendar case, this is equal to the equivalent extended Gregorian year.
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Return the maximum value that this field could have, given the current date.
* @internal
*/
- virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
+ virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const override;
public:
@@ -143,7 +143,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -164,24 +164,24 @@ public:
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
/**
* @return false - no default century in Japanese
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
/**
* Not used - no default century.
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Not used - no default century.
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
private:
JapaneseCalendar(); // default constructor not implemented
@@ -191,19 +191,19 @@ protected:
* Calculate the era for internal computation
* @internal
*/
- virtual int32_t internalGetEra() const;
+ virtual int32_t internalGetEra() const override;
/**
* Compute fields from the JD
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode& status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode& status) override;
/**
* Calculate the limit for a specified type of limit and field
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/***
* Called by computeJulianDay. Returns the default month (0-based) for the year,
@@ -212,7 +212,7 @@ protected:
* @param eyear the extended year
* @internal
*/
- virtual int32_t getDefaultMonthInYear(int32_t eyear);
+ virtual int32_t getDefaultMonthInYear(int32_t eyear) override;
/***
* Called by computeJulianDay. Returns the default day (1-based) for the month,
@@ -222,7 +222,7 @@ protected:
* @param mon the month in the year
* @internal
*/
- virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month);
+ virtual int32_t getDefaultDayInMonth(int32_t eyear, int32_t month) override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp b/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp
index be0d16bc7f5..4142fa461da 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/listformatter.cpp
@@ -444,7 +444,7 @@ struct ListFormatter::ListPatternsSink : public ResourceSink {
}
virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
+ UErrorCode &errorCode) override {
aliasedStyle[0] = 0;
if (value.getType() == URES_ALIAS) {
setAliasedStyle(value.getAliasUnicodeString(errorCode));
@@ -567,7 +567,7 @@ public:
start,
{UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD},
status);
- data->appendSpanInfo(0, start.length(), status);
+ data->appendSpanInfo(UFIELD_CATEGORY_LIST_SPAN, 0, -1, start.length(), status);
}
}
@@ -603,7 +603,7 @@ public:
next,
{UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD},
status);
- data->appendSpanInfo(position, next.length(), status);
+ data->appendSpanInfo(UFIELD_CATEGORY_LIST_SPAN, position, -1, next.length(), status);
data->getStringRef().append(
temp.tempSubString(offsets[1]),
{UFIELD_CATEGORY_LIST, ULISTFMT_LITERAL_FIELD},
@@ -622,7 +622,7 @@ public:
next,
{UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD},
status);
- data->prependSpanInfo(position, next.length(), status);
+ data->prependSpanInfo(UFIELD_CATEGORY_LIST_SPAN, position, -1, next.length(), status);
data->getStringRef().insert(
0,
temp.tempSubStringBetween(0, offsets[1]),
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
index 08e6f663912..a9a56a3b58d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
@@ -427,12 +427,12 @@ MeasureFormat::~MeasureFormat() {
delete listFormatter;
}
-UBool MeasureFormat::operator==(const Format &other) const {
+bool MeasureFormat::operator==(const Format &other) const {
if (this == &other) { // Same object, equal
- return TRUE;
+ return true;
}
if (!Format::operator==(other)) {
- return FALSE;
+ return false;
}
const MeasureFormat &rhs = static_cast<const MeasureFormat &>(other);
@@ -441,7 +441,7 @@ UBool MeasureFormat::operator==(const Format &other) const {
// differing widths aren't equivalent
if (fWidth != rhs.fWidth) {
- return FALSE;
+ return false;
}
// Width the same check locales.
// We don't need to check locales if both objects have same cache.
@@ -451,10 +451,10 @@ UBool MeasureFormat::operator==(const Format &other) const {
const char *rhsLocaleId = rhs.getLocaleID(status);
if (U_FAILURE(status)) {
// On failure, assume not equal
- return FALSE;
+ return false;
}
if (uprv_strcmp(localeId, rhsLocaleId) != 0) {
- return FALSE;
+ return false;
}
}
// Locales same, check NumberFormat if shared data differs.
@@ -581,7 +581,10 @@ void MeasureFormat::initMeasureFormat(
UMeasureFormatWidth w,
NumberFormat *nfToAdopt,
UErrorCode &status) {
- static const char *listStyles[] = {"unit", "unit-short", "unit-narrow"};
+ static const UListFormatterWidth listWidths[] = {
+ ULISTFMT_WIDTH_WIDE,
+ ULISTFMT_WIDTH_SHORT,
+ ULISTFMT_WIDTH_NARROW};
LocalPointer<NumberFormat> nf(nfToAdopt);
if (U_FAILURE(status)) {
return;
@@ -620,7 +623,8 @@ void MeasureFormat::initMeasureFormat(
delete listFormatter;
listFormatter = ListFormatter::createInstance(
locale,
- listStyles[getRegularWidth(fWidth)],
+ ULISTFMT_TYPE_UNITS,
+ listWidths[getRegularWidth(fWidth)],
status);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp b/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
index 70b7a453adb..5ad3991974d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
@@ -31,10 +31,9 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MeasureUnit)
// the "End generated code" comment is auto generated code
// and must not be edited manually. For instructions on how to correctly
// update this code, refer to:
-// http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
+// https://icu.unicode.org/design/formatting/measureformat/updating-measure-unit
//
-// Start generated code
-// TODO(ICU-21076): improve how this generated code is produced.
+// Start generated code for measunit.cpp
// Maps from Type ID to offset in gSubTypes.
static const int32_t gOffsets[] = {
@@ -42,57 +41,28 @@ static const int32_t gOffsets[] = {
2,
7,
17,
- 25,
- 29,
- 328,
- 339,
- 355,
- 359,
- 368,
+ 27,
+ 31,
+ 330,
+ 341,
+ 357,
+ 361,
370,
- 374,
- 382,
- 404,
- 408,
- 423,
+ 373,
+ 377,
+ 385,
+ 407,
+ 411,
426,
- 432,
- 442,
- 446,
- 450,
- 452,
- 486
+ 427,
+ 433,
+ 443,
+ 447,
+ 451,
+ 453,
+ 487
};
-// TODO: FIX CODE GENERATION - leaving this here but commented-out to make it
-// clear that we no longer want this array. We needed it for only one thing: efficient checking of "currency".
-//
-// static const int32_t gIndexes[] = {
-// 0,
-// 2,
-// 7,
-// 17,
-// 25,
-// 29,
-// 29,
-// 40,
-// 56,
-// 60,
-// 69,
-// 71,
-// 75,
-// 83,
-// 105,
-// 109,
-// 124,
-// 127,
-// 133,
-// 143,
-// 147,
-// 151,
-// 153,
-// 187
-// };
static const int32_t kCurrencyOffset = 5;
// Must be sorted alphabetically.
@@ -141,7 +111,9 @@ static const char * const gSubTypes[] = {
"square-meter",
"square-mile",
"square-yard",
+ "item",
"karat",
+ "milligram-ofglucose-per-deciliter",
"milligram-per-deciliter",
"millimole-per-liter",
"mole",
@@ -492,6 +464,7 @@ static const char * const gSubTypes[] = {
"kilojoule",
"kilowatt-hour",
"therm-us",
+ "kilowatt-hour-per-100-kilometer",
"newton",
"pound-force",
"gigahertz",
@@ -547,9 +520,7 @@ static const char * const gSubTypes[] = {
"solar-mass",
"stone",
"ton",
- "", // TODO(ICU-21076): manual edit of what should have been generated by Java.
- "percent", // TODO(ICU-21076): regenerate, deal with duplication.
- "permille", // TODO(ICU-21076): regenerate, deal with duplication.
+ "",
"gigawatt",
"horsepower",
"kilowatt",
@@ -612,8 +583,6 @@ static const char * const gSubTypes[] = {
"teaspoon"
};
-// unitPerUnitToSingleUnit no longer in use! TODO: remove from code-generation code.
-
// Shortcuts to the base unit in order to make the default constructor fast
static const int32_t kBaseTypeIdx = 16;
static const int32_t kBaseSubTypeIdx = 0;
@@ -754,70 +723,86 @@ MeasureUnit MeasureUnit::getSquareYard() {
return MeasureUnit(2, 9);
}
-MeasureUnit *MeasureUnit::createKarat(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createItem(UErrorCode &status) {
return MeasureUnit::create(3, 0, status);
}
-MeasureUnit MeasureUnit::getKarat() {
+MeasureUnit MeasureUnit::getItem() {
return MeasureUnit(3, 0);
}
-MeasureUnit *MeasureUnit::createMilligramPerDeciliter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createKarat(UErrorCode &status) {
return MeasureUnit::create(3, 1, status);
}
-MeasureUnit MeasureUnit::getMilligramPerDeciliter() {
+MeasureUnit MeasureUnit::getKarat() {
return MeasureUnit(3, 1);
}
-MeasureUnit *MeasureUnit::createMillimolePerLiter(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMilligramOfglucosePerDeciliter(UErrorCode &status) {
return MeasureUnit::create(3, 2, status);
}
-MeasureUnit MeasureUnit::getMillimolePerLiter() {
+MeasureUnit MeasureUnit::getMilligramOfglucosePerDeciliter() {
return MeasureUnit(3, 2);
}
-MeasureUnit *MeasureUnit::createMole(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMilligramPerDeciliter(UErrorCode &status) {
return MeasureUnit::create(3, 3, status);
}
-MeasureUnit MeasureUnit::getMole() {
+MeasureUnit MeasureUnit::getMilligramPerDeciliter() {
return MeasureUnit(3, 3);
}
-MeasureUnit *MeasureUnit::createPercent(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMillimolePerLiter(UErrorCode &status) {
return MeasureUnit::create(3, 4, status);
}
-MeasureUnit MeasureUnit::getPercent() {
+MeasureUnit MeasureUnit::getMillimolePerLiter() {
return MeasureUnit(3, 4);
}
-MeasureUnit *MeasureUnit::createPermille(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createMole(UErrorCode &status) {
return MeasureUnit::create(3, 5, status);
}
-MeasureUnit MeasureUnit::getPermille() {
+MeasureUnit MeasureUnit::getMole() {
return MeasureUnit(3, 5);
}
-MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPercent(UErrorCode &status) {
return MeasureUnit::create(3, 6, status);
}
-MeasureUnit MeasureUnit::getPartPerMillion() {
+MeasureUnit MeasureUnit::getPercent() {
return MeasureUnit(3, 6);
}
-MeasureUnit *MeasureUnit::createPermyriad(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createPermille(UErrorCode &status) {
return MeasureUnit::create(3, 7, status);
}
-MeasureUnit MeasureUnit::getPermyriad() {
+MeasureUnit MeasureUnit::getPermille() {
return MeasureUnit(3, 7);
}
+MeasureUnit *MeasureUnit::createPartPerMillion(UErrorCode &status) {
+ return MeasureUnit::create(3, 8, status);
+}
+
+MeasureUnit MeasureUnit::getPartPerMillion() {
+ return MeasureUnit(3, 8);
+}
+
+MeasureUnit *MeasureUnit::createPermyriad(UErrorCode &status) {
+ return MeasureUnit::create(3, 9, status);
+}
+
+MeasureUnit MeasureUnit::getPermyriad() {
+ return MeasureUnit(3, 9);
+}
+
MeasureUnit *MeasureUnit::createLiterPer100Kilometers(UErrorCode &status) {
return MeasureUnit::create(4, 0, status);
}
@@ -1170,22 +1155,30 @@ MeasureUnit MeasureUnit::getThermUs() {
return MeasureUnit(9, 8);
}
-MeasureUnit *MeasureUnit::createNewton(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createKilowattHourPer100Kilometer(UErrorCode &status) {
return MeasureUnit::create(10, 0, status);
}
-MeasureUnit MeasureUnit::getNewton() {
+MeasureUnit MeasureUnit::getKilowattHourPer100Kilometer() {
return MeasureUnit(10, 0);
}
-MeasureUnit *MeasureUnit::createPoundForce(UErrorCode &status) {
+MeasureUnit *MeasureUnit::createNewton(UErrorCode &status) {
return MeasureUnit::create(10, 1, status);
}
-MeasureUnit MeasureUnit::getPoundForce() {
+MeasureUnit MeasureUnit::getNewton() {
return MeasureUnit(10, 1);
}
+MeasureUnit *MeasureUnit::createPoundForce(UErrorCode &status) {
+ return MeasureUnit::create(10, 2, status);
+}
+
+MeasureUnit MeasureUnit::getPoundForce() {
+ return MeasureUnit(10, 2);
+}
+
MeasureUnit *MeasureUnit::createGigahertz(UErrorCode &status) {
return MeasureUnit::create(11, 0, status);
}
@@ -2090,7 +2083,7 @@ MeasureUnit MeasureUnit::getTeaspoon() {
return MeasureUnit(22, 33);
}
-// End generated code
+// End generated code for measunit.cpp
static int32_t binarySearch(
const char * const * array, int32_t start, int32_t end, StringPiece key) {
@@ -2203,12 +2196,12 @@ const char *MeasureUnit::getIdentifier() const {
return fImpl ? fImpl->identifier.data() : gSubTypes[getOffset()];
}
-UBool MeasureUnit::operator==(const UObject& other) const {
+bool MeasureUnit::operator==(const UObject& other) const {
if (this == &other) { // Same object, equal
- return TRUE;
+ return true;
}
if (typeid(*this) != typeid(other)) { // Different types, not equal
- return FALSE;
+ return false;
}
const MeasureUnit &rhs = static_cast<const MeasureUnit&>(other);
return uprv_strcmp(getIdentifier(), rhs.getIdentifier()) == 0;
@@ -2277,9 +2270,11 @@ StringEnumeration* MeasureUnit::getAvailableTypes(UErrorCode &errorCode) {
}
bool MeasureUnit::findBySubType(StringPiece subType, MeasureUnit* output) {
+ // Sanity checking kCurrencyOffset and final entry in gOffsets
+ U_ASSERT(uprv_strcmp(gTypes[kCurrencyOffset], "currency") == 0);
+ U_ASSERT(gOffsets[UPRV_LENGTHOF(gOffsets) - 1] == UPRV_LENGTHOF(gSubTypes));
+
for (int32_t t = 0; t < UPRV_LENGTHOF(gOffsets) - 1; t++) {
- // Ensure kCurrencyOffset is set correctly
- U_ASSERT(uprv_strcmp(gTypes[kCurrencyOffset], "currency") == 0);
// Skip currency units
if (t == kCurrencyOffset) {
continue;
@@ -2310,7 +2305,7 @@ void MeasureUnit::initTime(const char *timeId) {
fTypeId = result;
result = binarySearch(gSubTypes, gOffsets[fTypeId], gOffsets[fTypeId + 1], timeId);
U_ASSERT(result != -1);
- fSubTypeId = result - gOffsets[fTypeId];
+ fSubTypeId = result - gOffsets[fTypeId];
}
void MeasureUnit::initCurrency(StringPiece isoCurrency) {
@@ -2353,8 +2348,8 @@ MeasureUnitImpl MeasureUnitImpl::copy(UErrorCode &status) const {
MeasureUnitImpl result;
result.complexity = complexity;
result.identifier.append(identifier, status);
- for (int32_t i = 0; i < units.length(); i++) {
- SingleUnitImpl *item = result.units.emplaceBack(*units[i]);
+ for (int32_t i = 0; i < singleUnits.length(); i++) {
+ SingleUnitImpl *item = result.singleUnits.emplaceBack(*singleUnits[i]);
if (!item) {
status = U_MEMORY_ALLOCATION_ERROR;
return result;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp b/Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp
index 2eb3f066142..82811190079 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/measunit_extra.cpp
@@ -24,12 +24,12 @@
#include "unicode/bytestrie.h"
#include "unicode/bytestriebuilder.h"
#include "unicode/localpointer.h"
-#include "unicode/measunit.h"
#include "unicode/stringpiece.h"
#include "unicode/stringtriebuilder.h"
#include "unicode/ures.h"
#include "unicode/ustringtrie.h"
#include "uresimp.h"
+#include "util.h"
#include <cstdlib>
U_NAMESPACE_BEGIN
@@ -40,12 +40,20 @@ namespace {
// TODO: Propose a new error code for this?
constexpr UErrorCode kUnitIdentifierSyntaxError = U_ILLEGAL_ARGUMENT_ERROR;
-// Trie value offset for SI Prefixes. This is big enough to ensure we only
+// Trie value offset for SI or binary prefixes. This is big enough to ensure we only
// insert positive integers into the trie.
-constexpr int32_t kSIPrefixOffset = 64;
+constexpr int32_t kPrefixOffset = 64;
+static_assert(kPrefixOffset + UMEASURE_PREFIX_INTERNAL_MIN_BIN > 0,
+ "kPrefixOffset is too small for minimum UMeasurePrefix value");
+static_assert(kPrefixOffset + UMEASURE_PREFIX_INTERNAL_MIN_SI > 0,
+ "kPrefixOffset is too small for minimum UMeasurePrefix value");
// Trie value offset for compound parts, e.g. "-per-", "-", "-and-".
constexpr int32_t kCompoundPartOffset = 128;
+static_assert(kCompoundPartOffset > kPrefixOffset + UMEASURE_PREFIX_INTERNAL_MAX_BIN,
+ "Ambiguous token values: prefix tokens are overlapping with CompoundPart tokens");
+static_assert(kCompoundPartOffset > kPrefixOffset + UMEASURE_PREFIX_INTERNAL_MAX_SI,
+ "Ambiguous token values: prefix tokens are overlapping with CompoundPart tokens");
enum CompoundPart {
// Represents "-per-"
@@ -89,44 +97,57 @@ enum PowerPart {
// "fluid-ounce-imperial".
constexpr int32_t kSimpleUnitOffset = 512;
-const struct SIPrefixStrings {
+const struct UnitPrefixStrings {
const char* const string;
- UMeasureSIPrefix value;
-} gSIPrefixStrings[] = {
- { "yotta", UMEASURE_SI_PREFIX_YOTTA },
- { "zetta", UMEASURE_SI_PREFIX_ZETTA },
- { "exa", UMEASURE_SI_PREFIX_EXA },
- { "peta", UMEASURE_SI_PREFIX_PETA },
- { "tera", UMEASURE_SI_PREFIX_TERA },
- { "giga", UMEASURE_SI_PREFIX_GIGA },
- { "mega", UMEASURE_SI_PREFIX_MEGA },
- { "kilo", UMEASURE_SI_PREFIX_KILO },
- { "hecto", UMEASURE_SI_PREFIX_HECTO },
- { "deka", UMEASURE_SI_PREFIX_DEKA },
- { "deci", UMEASURE_SI_PREFIX_DECI },
- { "centi", UMEASURE_SI_PREFIX_CENTI },
- { "milli", UMEASURE_SI_PREFIX_MILLI },
- { "micro", UMEASURE_SI_PREFIX_MICRO },
- { "nano", UMEASURE_SI_PREFIX_NANO },
- { "pico", UMEASURE_SI_PREFIX_PICO },
- { "femto", UMEASURE_SI_PREFIX_FEMTO },
- { "atto", UMEASURE_SI_PREFIX_ATTO },
- { "zepto", UMEASURE_SI_PREFIX_ZEPTO },
- { "yocto", UMEASURE_SI_PREFIX_YOCTO },
+ UMeasurePrefix value;
+} gUnitPrefixStrings[] = {
+ // SI prefixes
+ { "yotta", UMEASURE_PREFIX_YOTTA },
+ { "zetta", UMEASURE_PREFIX_ZETTA },
+ { "exa", UMEASURE_PREFIX_EXA },
+ { "peta", UMEASURE_PREFIX_PETA },
+ { "tera", UMEASURE_PREFIX_TERA },
+ { "giga", UMEASURE_PREFIX_GIGA },
+ { "mega", UMEASURE_PREFIX_MEGA },
+ { "kilo", UMEASURE_PREFIX_KILO },
+ { "hecto", UMEASURE_PREFIX_HECTO },
+ { "deka", UMEASURE_PREFIX_DEKA },
+ { "deci", UMEASURE_PREFIX_DECI },
+ { "centi", UMEASURE_PREFIX_CENTI },
+ { "milli", UMEASURE_PREFIX_MILLI },
+ { "micro", UMEASURE_PREFIX_MICRO },
+ { "nano", UMEASURE_PREFIX_NANO },
+ { "pico", UMEASURE_PREFIX_PICO },
+ { "femto", UMEASURE_PREFIX_FEMTO },
+ { "atto", UMEASURE_PREFIX_ATTO },
+ { "zepto", UMEASURE_PREFIX_ZEPTO },
+ { "yocto", UMEASURE_PREFIX_YOCTO },
+ // Binary prefixes
+ { "yobi", UMEASURE_PREFIX_YOBI },
+ { "zebi", UMEASURE_PREFIX_ZEBI },
+ { "exbi", UMEASURE_PREFIX_EXBI },
+ { "pebi", UMEASURE_PREFIX_PEBI },
+ { "tebi", UMEASURE_PREFIX_TEBI },
+ { "gibi", UMEASURE_PREFIX_GIBI },
+ { "mebi", UMEASURE_PREFIX_MEBI },
+ { "kibi", UMEASURE_PREFIX_KIBI },
};
/**
* A ResourceSink that collects simple unit identifiers from the keys of the
* convertUnits table into an array, and adds these values to a TrieBuilder,
* with associated values being their index into this array plus a specified
- * offset, to a trie.
+ * offset.
*
* Example code:
*
* UErrorCode status = U_ZERO_ERROR;
* BytesTrieBuilder b(status);
- * const char *unitIdentifiers[200];
- * SimpleUnitIdentifiersSink identifierSink(unitIdentifiers, 200, b, kTrieValueOffset);
+ * int32_t ARR_SIZE = 200;
+ * const char *unitIdentifiers[ARR_SIZE];
+ * int32_t *unitCategories[ARR_SIZE];
+ * SimpleUnitIdentifiersSink identifierSink(gSerializedUnitCategoriesTrie, unitIdentifiers,
+ * unitCategories, ARR_SIZE, b, kTrieValueOffset);
* LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
* ures_getAllItemsWithFallback(unitsBundle.getAlias(), "convertUnits", identifierSink, status);
*/
@@ -134,20 +155,27 @@ class SimpleUnitIdentifiersSink : public icu::ResourceSink {
public:
/**
* Constructor.
- * @param out Array of char* to which the simple unit identifiers will be
- * saved.
- * @param outSize The size of `out`.
+ * @param quantitiesTrieData The data for constructing a quantitiesTrie,
+ * which maps from a simple unit identifier to an index into the
+ * gCategories array.
+ * @param out Array of char* to which pointers to the simple unit
+ * identifiers will be saved. (Does not take ownership.)
+ * @param outCategories Array of int32_t to which category indexes will be
+ * saved: this corresponds to simple unit IDs saved to `out`, mapping
+ * from the ID to the value produced by the quantitiesTrie (which is an
+ * index into the gCategories array).
+ * @param outSize The size of `out` and `outCategories`.
* @param trieBuilder The trie builder to which the simple unit identifier
* should be added. The trie builder must outlive this resource sink.
* @param trieValueOffset This is added to the index of the identifier in
* the `out` array, before adding to `trieBuilder` as the value
* associated with the identifier.
*/
- explicit SimpleUnitIdentifiersSink(const char **out, int32_t outSize, BytesTrieBuilder &trieBuilder,
- int32_t trieValueOffset)
- : outArray(out), outSize(outSize), trieBuilder(trieBuilder), trieValueOffset(trieValueOffset),
- outIndex(0) {
- }
+ explicit SimpleUnitIdentifiersSink(StringPiece quantitiesTrieData, const char **out,
+ int32_t *outCategories, int32_t outSize,
+ BytesTrieBuilder &trieBuilder, int32_t trieValueOffset)
+ : outArray(out), outCategories(outCategories), outSize(outSize), trieBuilder(trieBuilder),
+ trieValueOffset(trieValueOffset), quantitiesTrieData(quantitiesTrieData), outIndex(0) {}
/**
* Adds the table keys found in value to the output vector.
@@ -158,7 +186,7 @@ class SimpleUnitIdentifiersSink : public icu::ResourceSink {
* @param noFallback Ignored.
* @param status The standard ICU error code output parameter.
*/
- void put(const char * /*key*/, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) {
+ void put(const char * /*key*/, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) override {
ResourceTable table = value.getTable(status);
if (U_FAILURE(status)) return;
@@ -167,30 +195,120 @@ class SimpleUnitIdentifiersSink : public icu::ResourceSink {
return;
}
+ BytesTrie quantitiesTrie(quantitiesTrieData.data());
+
// Collect keys from the table resource.
- const char *key;
- for (int32_t i = 0; table.getKeyAndValue(i, key, value); ++i) {
+ const char *simpleUnitID;
+ for (int32_t i = 0; table.getKeyAndValue(i, simpleUnitID, value); ++i) {
U_ASSERT(i < table.getSize());
U_ASSERT(outIndex < outSize);
- if (uprv_strcmp(key, "kilogram") == 0) {
+ if (uprv_strcmp(simpleUnitID, "kilogram") == 0) {
// For parsing, we use "gram", the prefixless metric mass unit. We
// thus ignore the SI Base Unit of Mass: it exists due to being the
// mass conversion target unit, but not needed for MeasureUnit
// parsing.
continue;
}
- outArray[outIndex] = key;
- trieBuilder.add(key, trieValueOffset + outIndex, status);
+ outArray[outIndex] = simpleUnitID;
+ trieBuilder.add(simpleUnitID, trieValueOffset + outIndex, status);
+
+ // Find the base target unit for this simple unit
+ ResourceTable table = value.getTable(status);
+ if (U_FAILURE(status)) { return; }
+ if (!table.findValue("target", value)) {
+ status = U_INVALID_FORMAT_ERROR;
+ break;
+ }
+ int32_t len;
+ const UChar* uTarget = value.getString(len, status);
+ CharString target;
+ target.appendInvariantChars(uTarget, len, status);
+ if (U_FAILURE(status)) { return; }
+ quantitiesTrie.reset();
+ UStringTrieResult result = quantitiesTrie.next(target.data(), target.length());
+ if (!USTRINGTRIE_HAS_VALUE(result)) {
+ status = U_INVALID_FORMAT_ERROR;
+ break;
+ }
+ outCategories[outIndex] = quantitiesTrie.getValue();
+
outIndex++;
}
}
private:
const char **outArray;
+ int32_t *outCategories;
int32_t outSize;
BytesTrieBuilder &trieBuilder;
int32_t trieValueOffset;
+ StringPiece quantitiesTrieData;
+
+ int32_t outIndex;
+};
+
+/**
+ * A ResourceSink that collects information from `unitQuantities` in the `units`
+ * resource to provide key->value lookups from base unit to category, as well as
+ * preserving ordering information for these categories. See `units.txt`.
+ *
+ * For example: "kilogram" -> "mass", "meter-per-second" -> "speed".
+ *
+ * In C++ unitQuantity values are collected in order into a UChar* array, while
+ * unitQuantity keys are added added to a TrieBuilder, with associated values
+ * being the index into the aforementioned UChar* array.
+ */
+class CategoriesSink : public icu::ResourceSink {
+ public:
+ /**
+ * Constructor.
+ * @param out Array of UChar* to which unitQuantity values will be saved.
+ * The pointers returned not owned: they point directly at the resource
+ * strings in static memory.
+ * @param outSize The size of the `out` array.
+ * @param trieBuilder The trie builder to which the keys (base units) of
+ * each unitQuantity will be added, each with value being the offset
+ * into `out`.
+ */
+ explicit CategoriesSink(const UChar **out, int32_t &outSize, BytesTrieBuilder &trieBuilder)
+ : outQuantitiesArray(out), outSize(outSize), trieBuilder(trieBuilder), outIndex(0) {}
+
+ void put(const char * /*key*/, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) override {
+ ResourceArray array = value.getArray(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ if (outIndex + array.getSize() > outSize) {
+ status = U_INDEX_OUTOFBOUNDS_ERROR;
+ return;
+ }
+
+ for (int32_t i = 0; array.getValue(i, value); ++i) {
+ U_ASSERT(outIndex < outSize);
+ ResourceTable table = value.getTable(status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (table.getSize() != 1) {
+ status = U_INVALID_FORMAT_ERROR;
+ return;
+ }
+ const char *key;
+ table.getKeyAndValue(0, key, value);
+ int32_t uTmpLen;
+ outQuantitiesArray[outIndex] = value.getString(uTmpLen, status);
+ trieBuilder.add(key, outIndex, status);
+ outIndex++;
+ }
+ }
+
+ private:
+ const UChar **outQuantitiesArray;
+ int32_t &outSize;
+ BytesTrieBuilder &trieBuilder;
+
int32_t outIndex;
};
@@ -203,11 +321,31 @@ icu::UInitOnce gUnitExtrasInitOnce = U_INITONCE_INITIALIZER;
// by SingleUnitImpl::getSimpleUnitID().)
const char **gSimpleUnits = nullptr;
+// Maps from the value associated with each simple unit ID to an index into the
+// gCategories array.
+int32_t *gSimpleUnitCategories = nullptr;
+
char *gSerializedUnitExtrasStemTrie = nullptr;
+// Array of UChar* pointing at the unit categories (aka "quantities", aka
+// "types"), as found in the `unitQuantities` resource. The array memory itself
+// is owned by this pointer, but the individual UChar* in that array point at
+// static memory.
+const UChar **gCategories = nullptr;
+// Number of items in `gCategories`.
+int32_t gCategoriesCount = 0;
+// Serialized BytesTrie for mapping from base units to indices into gCategories.
+char *gSerializedUnitCategoriesTrie = nullptr;
+
UBool U_CALLCONV cleanupUnitExtras() {
+ uprv_free(gSerializedUnitCategoriesTrie);
+ gSerializedUnitCategoriesTrie = nullptr;
+ uprv_free(gCategories);
+ gCategories = nullptr;
uprv_free(gSerializedUnitExtrasStemTrie);
gSerializedUnitExtrasStemTrie = nullptr;
+ uprv_free(gSimpleUnitCategories);
+ gSimpleUnitCategories = nullptr;
uprv_free(gSimpleUnits);
gSimpleUnits = nullptr;
gUnitExtrasInitOnce.reset();
@@ -216,13 +354,43 @@ UBool U_CALLCONV cleanupUnitExtras() {
void U_CALLCONV initUnitExtras(UErrorCode& status) {
ucln_i18n_registerCleanup(UCLN_I18N_UNIT_EXTRAS, cleanupUnitExtras);
+ LocalUResourceBundlePointer unitsBundle(ures_openDirect(nullptr, "units", &status));
+
+ // Collect unitQuantities information into gSerializedUnitCategoriesTrie and gCategories.
+ const char *CATEGORY_TABLE_NAME = "unitQuantities";
+ LocalUResourceBundlePointer unitQuantities(
+ ures_getByKey(unitsBundle.getAlias(), CATEGORY_TABLE_NAME, nullptr, &status));
+ if (U_FAILURE(status)) { return; }
+ gCategoriesCount = unitQuantities.getAlias()->fSize;
+ size_t quantitiesMallocSize = sizeof(UChar *) * gCategoriesCount;
+ gCategories = static_cast<const UChar **>(uprv_malloc(quantitiesMallocSize));
+ if (gCategories == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memset(gCategories, 0, quantitiesMallocSize);
+ BytesTrieBuilder quantitiesBuilder(status);
+ CategoriesSink categoriesSink(gCategories, gCategoriesCount, quantitiesBuilder);
+ ures_getAllItemsWithFallback(unitsBundle.getAlias(), CATEGORY_TABLE_NAME, categoriesSink, status);
+ StringPiece resultQuantities = quantitiesBuilder.buildStringPiece(USTRINGTRIE_BUILD_FAST, status);
+ if (U_FAILURE(status)) { return; }
+ // Copy the result into the global constant pointer
+ size_t numBytesQuantities = resultQuantities.length();
+ gSerializedUnitCategoriesTrie = static_cast<char *>(uprv_malloc(numBytesQuantities));
+ if (gSerializedUnitCategoriesTrie == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memcpy(gSerializedUnitCategoriesTrie, resultQuantities.data(), numBytesQuantities);
+
+ // Build the BytesTrie that Parser needs for parsing unit identifiers.
BytesTrieBuilder b(status);
if (U_FAILURE(status)) { return; }
- // Add SI prefixes
- for (const auto& siPrefixInfo : gSIPrefixStrings) {
- b.add(siPrefixInfo.string, siPrefixInfo.value + kSIPrefixOffset, status);
+ // Add SI and binary prefixes
+ for (const auto& unitPrefixInfo : gUnitPrefixStrings) {
+ b.add(unitPrefixInfo.string, unitPrefixInfo.value + kPrefixOffset, status);
}
if (U_FAILURE(status)) { return; }
@@ -251,11 +419,8 @@ void U_CALLCONV initUnitExtras(UErrorCode& status) {
// Add sanctioned simple units by offset: simple units all have entries in
// units/convertUnits resources.
- // TODO(ICU-21059): confirm whether this is clean enough, or whether we need to
- // filter units' validity list instead.
- LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
LocalUResourceBundlePointer convertUnits(
- ures_getByKey(unitsBundle.getAlias(), "convertUnits", NULL, &status));
+ ures_getByKey(unitsBundle.getAlias(), "convertUnits", nullptr, &status));
if (U_FAILURE(status)) { return; }
// Allocate enough space: with identifierSink below skipping kilogram, we're
@@ -268,9 +433,17 @@ void U_CALLCONV initUnitExtras(UErrorCode& status) {
return;
}
uprv_memset(gSimpleUnits, 0, arrayMallocSize);
+ arrayMallocSize = sizeof(int32_t) * simpleUnitsCount;
+ gSimpleUnitCategories = static_cast<int32_t *>(uprv_malloc(arrayMallocSize));
+ if (gSimpleUnitCategories == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memset(gSimpleUnitCategories, 0, arrayMallocSize);
// Populate gSimpleUnits and build the associated trie.
- SimpleUnitIdentifiersSink identifierSink(gSimpleUnits, simpleUnitsCount, b, kSimpleUnitOffset);
+ SimpleUnitIdentifiersSink identifierSink(resultQuantities, gSimpleUnits, gSimpleUnitCategories,
+ simpleUnitsCount, b, kSimpleUnitOffset);
ures_getAllItemsWithFallback(unitsBundle.getAlias(), "convertUnits", identifierSink, status);
// Build the CharsTrie
@@ -294,7 +467,7 @@ public:
enum Type {
TYPE_UNDEFINED,
- TYPE_SI_PREFIX,
+ TYPE_PREFIX,
// Token type for "-per-", "-", and "-and-".
TYPE_COMPOUND_PART,
// Token type for "per-".
@@ -308,7 +481,7 @@ public:
Type getType() const {
U_ASSERT(fMatch > 0);
if (fMatch < kCompoundPartOffset) {
- return TYPE_SI_PREFIX;
+ return TYPE_PREFIX;
}
if (fMatch < kInitialCompoundPartOffset) {
return TYPE_COMPOUND_PART;
@@ -322,9 +495,9 @@ public:
return TYPE_SIMPLE_UNIT;
}
- UMeasureSIPrefix getSIPrefix() const {
- U_ASSERT(getType() == TYPE_SI_PREFIX);
- return static_cast<UMeasureSIPrefix>(fMatch - kSIPrefixOffset);
+ UMeasurePrefix getUnitPrefix() const {
+ U_ASSERT(getType() == TYPE_PREFIX);
+ return static_cast<UMeasurePrefix>(fMatch - kPrefixOffset);
}
// Valid only for tokens with type TYPE_COMPOUND_PART.
@@ -380,7 +553,53 @@ public:
MeasureUnitImpl parse(UErrorCode& status) {
MeasureUnitImpl result;
- parseImpl(result, status);
+
+ if (U_FAILURE(status)) {
+ return result;
+ }
+ if (fSource.empty()) {
+ // The dimenionless unit: nothing to parse. leave result as is.
+ return result;
+ }
+
+ while (hasNext()) {
+ bool sawAnd = false;
+
+ SingleUnitImpl singleUnit = nextSingleUnit(sawAnd, status);
+ if (U_FAILURE(status)) {
+ return result;
+ }
+
+ bool added = result.appendSingleUnit(singleUnit, status);
+ if (U_FAILURE(status)) {
+ return result;
+ }
+
+ if (sawAnd && !added) {
+ // Two similar units are not allowed in a mixed unit.
+ status = kUnitIdentifierSyntaxError;
+ return result;
+ }
+
+ if (result.singleUnits.length() >= 2) {
+ // nextSingleUnit fails appropriately for "per" and "and" in the
+ // same identifier. It doesn't fail for other compound units
+ // (COMPOUND_PART_TIMES). Consequently we take care of that
+ // here.
+ UMeasureUnitComplexity complexity =
+ sawAnd ? UMEASURE_UNIT_MIXED : UMEASURE_UNIT_COMPOUND;
+ if (result.singleUnits.length() == 2) {
+ // After appending two singleUnits, the complexity will be `UMEASURE_UNIT_COMPOUND`
+ U_ASSERT(result.complexity == UMEASURE_UNIT_COMPOUND);
+ result.complexity = complexity;
+ } else if (result.complexity != complexity) {
+ // Can't have mixed compound units
+ status = kUnitIdentifierSyntaxError;
+ return result;
+ }
+ }
+ }
+
return result;
}
@@ -457,20 +676,23 @@ private:
* unit", sawAnd is set to true. If not, it is left as is.
* @param status ICU error code.
*/
- void nextSingleUnit(SingleUnitImpl& result, bool& sawAnd, UErrorCode& status) {
+ SingleUnitImpl nextSingleUnit(bool &sawAnd, UErrorCode &status) {
+ SingleUnitImpl result;
if (U_FAILURE(status)) {
- return;
+ return result;
}
// state:
- // 0 = no tokens seen yet (will accept power, SI prefix, or simple unit)
+ // 0 = no tokens seen yet (will accept power, SI or binary prefix, or simple unit)
// 1 = power token seen (will not accept another power token)
- // 2 = SI prefix token seen (will not accept a power or SI prefix token)
+ // 2 = SI or binary prefix token seen (will not accept a power, or SI or binary prefix token)
int32_t state = 0;
bool atStart = fIndex == 0;
Token token = nextToken(status);
- if (U_FAILURE(status)) { return; }
+ if (U_FAILURE(status)) {
+ return result;
+ }
if (atStart) {
// Identifiers optionally start with "per-".
@@ -480,14 +702,16 @@ private:
result.dimensionality = -1;
token = nextToken(status);
- if (U_FAILURE(status)) { return; }
+ if (U_FAILURE(status)) {
+ return result;
+ }
}
} else {
// All other SingleUnit's are separated from previous SingleUnit's
// via a compound part:
if (token.getType() != Token::TYPE_COMPOUND_PART) {
status = kUnitIdentifierSyntaxError;
- return;
+ return result;
}
switch (token.getMatch()) {
@@ -496,7 +720,7 @@ private:
// Mixed compound units not yet supported,
// TODO(CLDR-13700).
status = kUnitIdentifierSyntaxError;
- return;
+ return result;
}
fAfterPer = true;
result.dimensionality = -1;
@@ -513,14 +737,16 @@ private:
// Can't start with "-and-", and mixed compound units
// not yet supported, TODO(CLDR-13700).
status = kUnitIdentifierSyntaxError;
- return;
+ return result;
}
sawAnd = true;
break;
}
token = nextToken(status);
- if (U_FAILURE(status)) { return; }
+ if (U_FAILURE(status)) {
+ return result;
+ }
}
// Read tokens until we have a complete SingleUnit or we reach the end.
@@ -529,87 +755,46 @@ private:
case Token::TYPE_POWER_PART:
if (state > 0) {
status = kUnitIdentifierSyntaxError;
- return;
+ return result;
}
result.dimensionality *= token.getPower();
state = 1;
break;
- case Token::TYPE_SI_PREFIX:
+ case Token::TYPE_PREFIX:
if (state > 1) {
status = kUnitIdentifierSyntaxError;
- return;
+ return result;
}
- result.siPrefix = token.getSIPrefix();
+ result.unitPrefix = token.getUnitPrefix();
state = 2;
break;
case Token::TYPE_SIMPLE_UNIT:
result.index = token.getSimpleUnitIndex();
- return;
+ return result;
default:
status = kUnitIdentifierSyntaxError;
- return;
+ return result;
}
if (!hasNext()) {
// We ran out of tokens before finding a complete single unit.
status = kUnitIdentifierSyntaxError;
- return;
+ return result;
}
token = nextToken(status);
if (U_FAILURE(status)) {
- return;
+ return result;
}
}
- }
- /// @param result is modified, not overridden. Caller must pass in a
- /// default-constructed (empty) MeasureUnitImpl instance.
- void parseImpl(MeasureUnitImpl& result, UErrorCode& status) {
- if (U_FAILURE(status)) {
- return;
- }
- if (fSource.empty()) {
- // The dimenionless unit: nothing to parse. leave result as is.
- return;
- }
- int32_t unitNum = 0;
- while (hasNext()) {
- bool sawAnd = false;
- SingleUnitImpl singleUnit;
- nextSingleUnit(singleUnit, sawAnd, status);
- if (U_FAILURE(status)) {
- return;
- }
- U_ASSERT(!singleUnit.isDimensionless());
- bool added = result.append(singleUnit, status);
- if (sawAnd && !added) {
- // Two similar units are not allowed in a mixed unit
- status = kUnitIdentifierSyntaxError;
- return;
- }
- if ((++unitNum) >= 2) {
- // nextSingleUnit fails appropriately for "per" and "and" in the
- // same identifier. It doesn't fail for other compound units
- // (COMPOUND_PART_TIMES). Consequently we take care of that
- // here.
- UMeasureUnitComplexity complexity =
- sawAnd ? UMEASURE_UNIT_MIXED : UMEASURE_UNIT_COMPOUND;
- if (unitNum == 2) {
- U_ASSERT(result.complexity == UMEASURE_UNIT_SINGLE);
- result.complexity = complexity;
- } else if (result.complexity != complexity) {
- // Can't have mixed compound units
- status = kUnitIdentifierSyntaxError;
- return;
- }
- }
- }
+ return result;
}
};
+// Sorting function wrapping SingleUnitImpl::compareTo for use with uprv_sortArray.
int32_t U_CALLCONV
compareSingleUnits(const void* /*context*/, const void* left, const void* right) {
auto realLeft = static_cast<const SingleUnitImpl* const*>(left);
@@ -617,162 +802,129 @@ compareSingleUnits(const void* /*context*/, const void* left, const void* right)
return (*realLeft)->compareTo(**realRight);
}
-/**
- * Generate the identifier string for a single unit in place.
- *
- * Does not support the dimensionless SingleUnitImpl: calling serializeSingle
- * with the dimensionless unit results in an U_INTERNAL_PROGRAM_ERROR.
- *
- * @param first If singleUnit is part of a compound unit, and not its first
- * single unit, set this to false. Otherwise: set to true.
- */
-void serializeSingle(const SingleUnitImpl& singleUnit, bool first, CharString& output, UErrorCode& status) {
- if (first && singleUnit.dimensionality < 0) {
- // Essentially the "unary per". For compound units with a numerator, the
- // caller takes care of the "binary per".
- output.append("per-", status);
+// Returns an index into the gCategories array, for the "unitQuantity" (aka
+// "type" or "category") associated with the given base unit identifier. Returns
+// -1 on failure, together with U_UNSUPPORTED_ERROR.
+int32_t getUnitCategoryIndex(BytesTrie &trie, StringPiece baseUnitIdentifier, UErrorCode &status) {
+ UStringTrieResult result = trie.reset().next(baseUnitIdentifier.data(), baseUnitIdentifier.length());
+ if (!USTRINGTRIE_HAS_VALUE(result)) {
+ status = U_UNSUPPORTED_ERROR;
+ return -1;
}
- if (singleUnit.isDimensionless()) {
- status = U_INTERNAL_PROGRAM_ERROR;
- return;
+ return trie.getValue();
+}
+
+} // namespace
+
+U_CAPI int32_t U_EXPORT2
+umeas_getPrefixPower(UMeasurePrefix unitPrefix) {
+ if (unitPrefix >= UMEASURE_PREFIX_INTERNAL_MIN_BIN &&
+ unitPrefix <= UMEASURE_PREFIX_INTERNAL_MAX_BIN) {
+ return unitPrefix - UMEASURE_PREFIX_INTERNAL_ONE_BIN;
}
- int8_t posPower = std::abs(singleUnit.dimensionality);
- if (posPower == 0) {
- status = U_INTERNAL_PROGRAM_ERROR;
- } else if (posPower == 1) {
- // no-op
- } else if (posPower == 2) {
- output.append("square-", status);
- } else if (posPower == 3) {
- output.append("cubic-", status);
- } else if (posPower < 10) {
- output.append("pow", status);
- output.append(posPower + '0', status);
- output.append('-', status);
- } else if (posPower <= 15) {
- output.append("pow1", status);
- output.append('0' + (posPower % 10), status);
- output.append('-', status);
- } else {
- status = kUnitIdentifierSyntaxError;
+ U_ASSERT(unitPrefix >= UMEASURE_PREFIX_INTERNAL_MIN_SI &&
+ unitPrefix <= UMEASURE_PREFIX_INTERNAL_MAX_SI);
+ return unitPrefix - UMEASURE_PREFIX_ONE;
+}
+
+U_CAPI int32_t U_EXPORT2
+umeas_getPrefixBase(UMeasurePrefix unitPrefix) {
+ if (unitPrefix >= UMEASURE_PREFIX_INTERNAL_MIN_BIN &&
+ unitPrefix <= UMEASURE_PREFIX_INTERNAL_MAX_BIN) {
+ return 1024;
}
+ U_ASSERT(unitPrefix >= UMEASURE_PREFIX_INTERNAL_MIN_SI &&
+ unitPrefix <= UMEASURE_PREFIX_INTERNAL_MAX_SI);
+ return 10;
+}
+
+CharString U_I18N_API getUnitQuantity(const MeasureUnitImpl &baseMeasureUnitImpl, UErrorCode &status) {
+ CharString result;
+ MeasureUnitImpl baseUnitImpl = baseMeasureUnitImpl.copy(status);
+ UErrorCode localStatus = U_ZERO_ERROR;
+ umtx_initOnce(gUnitExtrasInitOnce, &initUnitExtras, status);
if (U_FAILURE(status)) {
- return;
+ return result;
}
+ BytesTrie trie(gSerializedUnitCategoriesTrie);
- if (singleUnit.siPrefix != UMEASURE_SI_PREFIX_ONE) {
- for (const auto& siPrefixInfo : gSIPrefixStrings) {
- if (siPrefixInfo.value == singleUnit.siPrefix) {
- output.append(siPrefixInfo.string, status);
- break;
- }
- }
- }
+ baseUnitImpl.serialize(status);
+ StringPiece identifier = baseUnitImpl.identifier.data();
+ int32_t idx = getUnitCategoryIndex(trie, identifier, localStatus);
if (U_FAILURE(status)) {
- return;
+ return result;
}
- output.append(singleUnit.getSimpleUnitID(), status);
-}
+ // In case the base unit identifier did not match any entry.
+ if (U_FAILURE(localStatus)) {
+ localStatus = U_ZERO_ERROR;
+ baseUnitImpl.takeReciprocal(status);
+ baseUnitImpl.serialize(status);
+ identifier.set(baseUnitImpl.identifier.data());
+ idx = getUnitCategoryIndex(trie, identifier, localStatus);
-/**
- * Normalize a MeasureUnitImpl and generate the identifier string in place.
- */
-void serialize(MeasureUnitImpl& impl, UErrorCode& status) {
- if (U_FAILURE(status)) {
- return;
- }
- U_ASSERT(impl.identifier.isEmpty());
- if (impl.units.length() == 0) {
- // Dimensionless, constructed by the default constructor: no appending
- // to impl.identifier, we wish it to contain the zero-length string.
- return;
- }
- if (impl.complexity == UMEASURE_UNIT_COMPOUND) {
- // Note: don't sort a MIXED unit
- uprv_sortArray(
- impl.units.getAlias(),
- impl.units.length(),
- sizeof(impl.units[0]),
- compareSingleUnits,
- nullptr,
- false,
- &status);
if (U_FAILURE(status)) {
- return;
+ return result;
}
}
- serializeSingle(*impl.units[0], true, impl.identifier, status);
- if (impl.units.length() == 1) {
- return;
+
+ // In case the reciprocal of the base unit identifier did not match any entry.
+ MeasureUnitImpl simplifiedUnit = baseMeasureUnitImpl.copyAndSimplify(status);
+ if (U_FAILURE(status)) {
+ return result;
}
- for (int32_t i = 1; i < impl.units.length(); i++) {
- const SingleUnitImpl& prev = *impl.units[i-1];
- const SingleUnitImpl& curr = *impl.units[i];
- if (impl.complexity == UMEASURE_UNIT_MIXED) {
- impl.identifier.append("-and-", status);
- serializeSingle(curr, true, impl.identifier, status);
- } else {
- if (prev.dimensionality > 0 && curr.dimensionality < 0) {
- impl.identifier.append("-per-", status);
- } else {
- impl.identifier.append('-', status);
- }
- serializeSingle(curr, false, impl.identifier, status);
+ if (U_FAILURE(localStatus)) {
+ localStatus = U_ZERO_ERROR;
+ simplifiedUnit.serialize(status);
+ identifier.set(simplifiedUnit.identifier.data());
+ idx = getUnitCategoryIndex(trie, identifier, localStatus);
+
+ if (U_FAILURE(status)) {
+ return result;
}
}
-}
+ // In case the simplified base unit identifier did not match any entry.
+ if (U_FAILURE(localStatus)) {
+ localStatus = U_ZERO_ERROR;
+ simplifiedUnit.takeReciprocal(status);
+ simplifiedUnit.serialize(status);
+ identifier.set(simplifiedUnit.identifier.data());
+ idx = getUnitCategoryIndex(trie, identifier, localStatus);
-/**
- * Appends a SingleUnitImpl to a MeasureUnitImpl.
- *
- * @return true if a new item was added. If unit is the dimensionless unit, it
- * is never added: the return value will always be false.
- */
-bool appendImpl(MeasureUnitImpl& impl, const SingleUnitImpl& unit, UErrorCode& status) {
- if (unit.isDimensionless()) {
- // We don't append dimensionless units.
- return false;
- }
- // Find a similar unit that already exists, to attempt to coalesce
- SingleUnitImpl* oldUnit = nullptr;
- for (int32_t i = 0; i < impl.units.length(); i++) {
- auto* candidate = impl.units[i];
- if (candidate->isCompatibleWith(unit)) {
- oldUnit = candidate;
+ if (U_FAILURE(status)) {
+ return result;
}
}
- if (oldUnit) {
- // Both dimensionalities will be positive, or both will be negative, by
- // virtue of isCompatibleWith().
- oldUnit->dimensionality += unit.dimensionality;
- } else {
- SingleUnitImpl* destination = impl.units.emplaceBack();
- if (!destination) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return false;
- }
- *destination = unit;
+
+ // If there is no match at all, throw an exception.
+ if (U_FAILURE(localStatus)) {
+ status = U_INVALID_FORMAT_ERROR;
+ return result;
}
- return (oldUnit == nullptr);
-}
-} // namespace
+ if (idx < 0 || idx >= gCategoriesCount) {
+ status = U_INVALID_FORMAT_ERROR;
+ return result;
+ }
+ result.appendInvariantChars(gCategories[idx], u_strlen(gCategories[idx]), status);
+ return result;
+}
+// In ICU4J, this is MeasureUnit.getSingleUnitImpl().
SingleUnitImpl SingleUnitImpl::forMeasureUnit(const MeasureUnit& measureUnit, UErrorCode& status) {
MeasureUnitImpl temp;
const MeasureUnitImpl& impl = MeasureUnitImpl::forMeasureUnit(measureUnit, temp, status);
if (U_FAILURE(status)) {
return {};
}
- if (impl.units.length() == 0) {
+ if (impl.singleUnits.length() == 0) {
return {};
}
- if (impl.units.length() == 1) {
- return *impl.units[0];
+ if (impl.singleUnits.length() == 1) {
+ return *impl.singleUnits[0];
}
status = U_ILLEGAL_ARGUMENT_ERROR;
return {};
@@ -780,7 +932,13 @@ SingleUnitImpl SingleUnitImpl::forMeasureUnit(const MeasureUnit& measureUnit, UE
MeasureUnit SingleUnitImpl::build(UErrorCode& status) const {
MeasureUnitImpl temp;
- temp.append(*this, status);
+ temp.appendSingleUnit(*this, status);
+ // TODO(icu-units#28): the MeasureUnitImpl::build() method uses
+ // findBySubtype, which is relatively slow.
+ // - At the time of loading the simple unit IDs, we could also save a
+ // mapping to the builtin MeasureUnit type and subtype they correspond to.
+ // - This method could then check dimensionality and index, and if both are
+ // 1, directly return MeasureUnit instances very quickly.
return std::move(temp).build(status);
}
@@ -788,12 +946,56 @@ const char *SingleUnitImpl::getSimpleUnitID() const {
return gSimpleUnits[index];
}
-MeasureUnitImpl::MeasureUnitImpl(const MeasureUnitImpl &other, UErrorCode &status) {
- *this = other.copy(status);
+void SingleUnitImpl::appendNeutralIdentifier(CharString &result, UErrorCode &status) const {
+ int32_t absPower = std::abs(this->dimensionality);
+
+ U_ASSERT(absPower > 0); // "this function does not support the dimensionless single units";
+
+ if (absPower == 1) {
+ // no-op
+ } else if (absPower == 2) {
+ result.append(StringPiece("square-"), status);
+ } else if (absPower == 3) {
+ result.append(StringPiece("cubic-"), status);
+ } else if (absPower <= 15) {
+ result.append(StringPiece("pow"), status);
+ result.appendNumber(absPower, status);
+ result.append(StringPiece("-"), status);
+ } else {
+ status = U_ILLEGAL_ARGUMENT_ERROR; // Unit Identifier Syntax Error
+ return;
+ }
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ if (this->unitPrefix != UMEASURE_PREFIX_ONE) {
+ bool found = false;
+ for (const auto &unitPrefixInfo : gUnitPrefixStrings) {
+ // TODO: consider using binary search? If we do this, add a unit
+ // test to ensure gUnitPrefixStrings is sorted?
+ if (unitPrefixInfo.value == this->unitPrefix) {
+ result.append(unitPrefixInfo.string, status);
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ status = U_UNSUPPORTED_ERROR;
+ return;
+ }
+ }
+
+ result.append(StringPiece(this->getSimpleUnitID()), status);
+}
+
+int32_t SingleUnitImpl::getUnitCategoryIndex() const {
+ return gSimpleUnitCategories[index];
}
MeasureUnitImpl::MeasureUnitImpl(const SingleUnitImpl &singleUnit, UErrorCode &status) {
- this->append(singleUnit, status);
+ this->appendSingleUnit(singleUnit, status);
}
MeasureUnitImpl MeasureUnitImpl::forIdentifier(StringPiece identifier, UErrorCode& status) {
@@ -821,33 +1023,162 @@ MeasureUnitImpl MeasureUnitImpl::forMeasureUnitMaybeCopy(
void MeasureUnitImpl::takeReciprocal(UErrorCode& /*status*/) {
identifier.clear();
- for (int32_t i = 0; i < units.length(); i++) {
- units[i]->dimensionality *= -1;
+ for (int32_t i = 0; i < singleUnits.length(); i++) {
+ singleUnits[i]->dimensionality *= -1;
+ }
+}
+
+MeasureUnitImpl MeasureUnitImpl::copyAndSimplify(UErrorCode &status) const {
+ MeasureUnitImpl result;
+ for (int32_t i = 0; i < singleUnits.length(); i++) {
+ const SingleUnitImpl &singleUnit = *this->singleUnits[i];
+
+ // The following `for` loop will cause time complexity to be O(n^2).
+ // However, n is very small (number of units, generally, at maximum equal to 10)
+ bool unitExist = false;
+ for (int32_t j = 0; j < result.singleUnits.length(); j++) {
+ if (uprv_strcmp(result.singleUnits[j]->getSimpleUnitID(), singleUnit.getSimpleUnitID()) ==
+ 0 &&
+ result.singleUnits[j]->unitPrefix == singleUnit.unitPrefix) {
+ unitExist = true;
+ result.singleUnits[j]->dimensionality =
+ result.singleUnits[j]->dimensionality + singleUnit.dimensionality;
+ break;
+ }
+ }
+
+ if (!unitExist) {
+ result.appendSingleUnit(singleUnit, status);
+ }
}
+
+ return result;
}
-bool MeasureUnitImpl::append(const SingleUnitImpl& singleUnit, UErrorCode& status) {
+bool MeasureUnitImpl::appendSingleUnit(const SingleUnitImpl &singleUnit, UErrorCode &status) {
identifier.clear();
- return appendImpl(*this, singleUnit, status);
+
+ if (singleUnit.isDimensionless()) {
+ // Do not append dimensionless units.
+ return false;
+ }
+
+ // Find a similar unit that already exists, to attempt to coalesce
+ SingleUnitImpl *oldUnit = nullptr;
+ for (int32_t i = 0; i < this->singleUnits.length(); i++) {
+ auto *candidate = this->singleUnits[i];
+ if (candidate->isCompatibleWith(singleUnit)) {
+ oldUnit = candidate;
+ }
+ }
+
+ if (oldUnit) {
+ // Both dimensionalities will be positive, or both will be negative, by
+ // virtue of isCompatibleWith().
+ oldUnit->dimensionality += singleUnit.dimensionality;
+
+ return false;
+ }
+
+ // Add a copy of singleUnit
+ // NOTE: MaybeStackVector::emplaceBackAndCheckErrorCode creates new copy of singleUnit.
+ this->singleUnits.emplaceBackAndCheckErrorCode(status, singleUnit);
+ if (U_FAILURE(status)) {
+ return false;
+ }
+
+ // If the MeasureUnitImpl is `UMEASURE_UNIT_SINGLE` and after the appending a unit, the `singleUnits`
+ // contains more than one. thus means the complexity should be `UMEASURE_UNIT_COMPOUND`
+ if (this->singleUnits.length() > 1 &&
+ this->complexity == UMeasureUnitComplexity::UMEASURE_UNIT_SINGLE) {
+ this->complexity = UMeasureUnitComplexity::UMEASURE_UNIT_COMPOUND;
+ }
+
+ return true;
}
-MaybeStackVector<MeasureUnitImpl> MeasureUnitImpl::extractIndividualUnits(UErrorCode &status) const {
- MaybeStackVector<MeasureUnitImpl> result;
+MaybeStackVector<MeasureUnitImplWithIndex>
+MeasureUnitImpl::extractIndividualUnitsWithIndices(UErrorCode &status) const {
+ MaybeStackVector<MeasureUnitImplWithIndex> result;
if (this->complexity != UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
- result.emplaceBackAndCheckErrorCode(status, *this, status);
+ result.emplaceBackAndCheckErrorCode(status, 0, *this, status);
return result;
}
- for (int32_t i = 0; i < units.length(); i++) {
- result.emplaceBackAndCheckErrorCode(status, *units[i], status);
+ for (int32_t i = 0; i < singleUnits.length(); ++i) {
+ result.emplaceBackAndCheckErrorCode(status, i, *singleUnits[i], status);
+ if (U_FAILURE(status)) {
+ return result;
+ }
}
return result;
}
+/**
+ * Normalize a MeasureUnitImpl and generate the identifier string in place.
+ */
+void MeasureUnitImpl::serialize(UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ if (this->singleUnits.length() == 0) {
+ // Dimensionless, constructed by the default constructor.
+ return;
+ }
+
+ if (this->complexity == UMEASURE_UNIT_COMPOUND) {
+ // Note: don't sort a MIXED unit
+ uprv_sortArray(this->singleUnits.getAlias(), this->singleUnits.length(),
+ sizeof(this->singleUnits[0]), compareSingleUnits, nullptr, false, &status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ }
+
+ CharString result;
+ bool beforePer = true;
+ bool firstTimeNegativeDimension = false;
+ for (int32_t i = 0; i < this->singleUnits.length(); i++) {
+ if (beforePer && (*this->singleUnits[i]).dimensionality < 0) {
+ beforePer = false;
+ firstTimeNegativeDimension = true;
+ } else if ((*this->singleUnits[i]).dimensionality < 0) {
+ firstTimeNegativeDimension = false;
+ }
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ if (this->complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
+ if (result.length() != 0) {
+ result.append(StringPiece("-and-"), status);
+ }
+ } else {
+ if (firstTimeNegativeDimension) {
+ if (result.length() == 0) {
+ result.append(StringPiece("per-"), status);
+ } else {
+ result.append(StringPiece("-per-"), status);
+ }
+ } else {
+ if (result.length() != 0) {
+ result.append(StringPiece("-"), status);
+ }
+ }
+ }
+
+ this->singleUnits[i]->appendNeutralIdentifier(result, status);
+ }
+
+ this->identifier = CharString(result, status);
+}
+
MeasureUnit MeasureUnitImpl::build(UErrorCode& status) && {
- serialize(*this, status);
+ this->serialize(status);
return MeasureUnit(std::move(*this));
}
@@ -860,13 +1191,13 @@ UMeasureUnitComplexity MeasureUnit::getComplexity(UErrorCode& status) const {
return MeasureUnitImpl::forMeasureUnit(*this, temp, status).complexity;
}
-UMeasureSIPrefix MeasureUnit::getSIPrefix(UErrorCode& status) const {
- return SingleUnitImpl::forMeasureUnit(*this, status).siPrefix;
+UMeasurePrefix MeasureUnit::getPrefix(UErrorCode& status) const {
+ return SingleUnitImpl::forMeasureUnit(*this, status).unitPrefix;
}
-MeasureUnit MeasureUnit::withSIPrefix(UMeasureSIPrefix prefix, UErrorCode& status) const {
+MeasureUnit MeasureUnit::withPrefix(UMeasurePrefix prefix, UErrorCode& status) const {
SingleUnitImpl singleUnit = SingleUnitImpl::forMeasureUnit(*this, status);
- singleUnit.siPrefix = prefix;
+ singleUnit.unitPrefix = prefix;
return singleUnit.build(status);
}
@@ -899,10 +1230,10 @@ MeasureUnit MeasureUnit::product(const MeasureUnit& other, UErrorCode& status) c
status = U_ILLEGAL_ARGUMENT_ERROR;
return {};
}
- for (int32_t i = 0; i < otherImpl.units.length(); i++) {
- impl.append(*otherImpl.units[i], status);
+ for (int32_t i = 0; i < otherImpl.singleUnits.length(); i++) {
+ impl.appendSingleUnit(*otherImpl.singleUnits[i], status);
}
- if (impl.units.length() > 1) {
+ if (impl.singleUnits.length() > 1) {
impl.complexity = UMEASURE_UNIT_COMPOUND;
}
return std::move(impl).build(status);
@@ -911,14 +1242,14 @@ MeasureUnit MeasureUnit::product(const MeasureUnit& other, UErrorCode& status) c
LocalArray<MeasureUnit> MeasureUnit::splitToSingleUnitsImpl(int32_t& outCount, UErrorCode& status) const {
MeasureUnitImpl temp;
const MeasureUnitImpl& impl = MeasureUnitImpl::forMeasureUnit(*this, temp, status);
- outCount = impl.units.length();
+ outCount = impl.singleUnits.length();
MeasureUnit* arr = new MeasureUnit[outCount];
if (arr == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return LocalArray<MeasureUnit>();
}
for (int32_t i = 0; i < outCount; i++) {
- arr[i] = impl.units[i]->build(status);
+ arr[i] = impl.singleUnits[i]->build(status);
}
return LocalArray<MeasureUnit>(arr, status);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h b/Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h
index 3cc2cd0476f..c60ff2fc33b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/measunit_impl.h
@@ -14,13 +14,32 @@
U_NAMESPACE_BEGIN
+namespace number {
+namespace impl {
+class LongNameHandler;
+}
+} // namespace number
static const char16_t kDefaultCurrency[] = u"XXX";
static const char kDefaultCurrency8[] = "XXX";
+/**
+ * Looks up the "unitQuantity" (aka "type" or "category") of a base unit
+ * identifier. The category is returned via `result`, which must initially be
+ * empty.
+ *
+ * This only supports base units: other units must be resolved to base units
+ * before passing to this function, otherwise U_UNSUPPORTED_ERROR status may be
+ * returned.
+ *
+ * Categories are found in `unitQuantities` in the `units` resource (see
+ * `units.txt`).
+ */
+// TODO: make this function accepts any `MeasureUnit` as Java and move it to the `UnitsData` class.
+CharString U_I18N_API getUnitQuantity(const MeasureUnitImpl &baseMeasureUnitImpl, UErrorCode &status);
/**
- * A struct representing a single unit (optional SI prefix and dimensionality).
+ * A struct representing a single unit (optional SI or binary prefix, and dimensionality).
*/
struct U_I18N_API SingleUnitImpl : public UMemory {
/**
@@ -43,9 +62,25 @@ struct U_I18N_API SingleUnitImpl : public UMemory {
const char *getSimpleUnitID() const;
/**
+ * Generates and append a neutral identifier string for a single unit which means we do not include
+ * the dimension signal.
+ */
+ void appendNeutralIdentifier(CharString &result, UErrorCode &status) const;
+
+ /**
+ * Returns the index of this unit's "quantity" in unitQuantities (in
+ * measunit_extra.cpp). The value of this index determines sort order for
+ * normalization of unit identifiers.
+ */
+ int32_t getUnitCategoryIndex() const;
+
+ /**
* Compare this SingleUnitImpl to another SingleUnitImpl for the sake of
* sorting and coalescing.
*
+ * Sort order of units is specified by UTS #35
+ * (https://unicode.org/reports/tr35/tr35-info.html#Unit_Identifier_Normalization).
+ *
* Takes the sign of dimensionality into account, but not the absolute
* value: per-meter is not considered the same as meter, but meter is
* considered the same as square-meter.
@@ -62,26 +97,65 @@ struct U_I18N_API SingleUnitImpl : public UMemory {
if (dimensionality > 0 && other.dimensionality < 0) {
return -1;
}
+
+ // Sort by official quantity order
+ int32_t thisQuantity = this->getUnitCategoryIndex();
+ int32_t otherQuantity = other.getUnitCategoryIndex();
+ if (thisQuantity < otherQuantity) {
+ return -1;
+ }
+ if (thisQuantity > otherQuantity) {
+ return 1;
+ }
+
+ // If quantity order didn't help, then we go by index.
if (index < other.index) {
return -1;
}
if (index > other.index) {
return 1;
}
- if (siPrefix < other.siPrefix) {
+
+ // When comparing binary prefixes vs SI prefixes, instead of comparing the actual values, we can
+ // multiply the binary prefix power by 3 and compare the powers. if they are equal, we can can
+ // compare the bases.
+ // NOTE: this methodology will fail if the binary prefix more than or equal 98.
+ int32_t unitBase = umeas_getPrefixBase(unitPrefix);
+ int32_t otherUnitBase = umeas_getPrefixBase(other.unitPrefix);
+
+ // Values for comparison purposes only.
+ int32_t unitPower = unitBase == 1024 /* Binary Prefix */ ? umeas_getPrefixPower(unitPrefix) * 3
+ : umeas_getPrefixPower(unitPrefix);
+ int32_t otherUnitPower =
+ otherUnitBase == 1024 /* Binary Prefix */ ? umeas_getPrefixPower(other.unitPrefix) * 3
+ : umeas_getPrefixPower(other.unitPrefix);
+
+ // NOTE: if the unitPower is less than the other,
+ // we return 1 not -1. Thus because we want th sorting order
+ // for the bigger prefix to be before the smaller.
+ // Example: megabyte should come before kilobyte.
+ if (unitPower < otherUnitPower) {
+ return 1;
+ }
+ if (unitPower > otherUnitPower) {
return -1;
}
- if (siPrefix > other.siPrefix) {
+
+ if (unitBase < otherUnitBase) {
return 1;
}
+ if (unitBase > otherUnitBase) {
+ return -1;
+ }
+
return 0;
}
/**
* Return whether this SingleUnitImpl is compatible with another for the purpose of coalescing.
*
- * Units with the same base unit and SI prefix should match, except that they must also have
- * the same dimensionality sign, such that we don't merge numerator and denominator.
+ * Units with the same base unit and SI or binary prefix should match, except that they must also
+ * have the same dimensionality sign, such that we don't merge numerator and denominator.
*/
bool isCompatibleWith(const SingleUnitImpl& other) const {
return (compareTo(other) == 0);
@@ -98,7 +172,8 @@ struct U_I18N_API SingleUnitImpl : public UMemory {
/**
* Simple unit index, unique for every simple unit, -1 for the dimensionless
- * unit. This is an index into a string list in measunit_extra.cpp.
+ * unit. This is an index into a string list in measunit_extra.cpp, as
+ * loaded by SimpleUnitIdentifiersSink.
*
* The default value is -1, meaning the dimensionless unit:
* isDimensionless() will return true, until index is changed.
@@ -106,11 +181,11 @@ struct U_I18N_API SingleUnitImpl : public UMemory {
int32_t index = -1;
/**
- * SI prefix.
+ * SI or binary prefix.
*
* This is ignored for the dimensionless unit.
*/
- UMeasureSIPrefix siPrefix = UMEASURE_SI_PREFIX_ONE;
+ UMeasurePrefix unitPrefix = UMEASURE_PREFIX_ONE;
/**
* Dimensionality.
@@ -120,11 +195,14 @@ struct U_I18N_API SingleUnitImpl : public UMemory {
int32_t dimensionality = 1;
};
+// Forward declaration
+struct MeasureUnitImplWithIndex;
+
// Export explicit template instantiations of MaybeStackArray, MemoryPool and
// MaybeStackVector. This is required when building DLLs for Windows. (See
// datefmt.h, collationiterator.h, erarules.h and others for similar examples.)
#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
-template class U_I18N_API MaybeStackArray<SingleUnitImpl*, 8>;
+template class U_I18N_API MaybeStackArray<SingleUnitImpl *, 8>;
template class U_I18N_API MemoryPool<SingleUnitImpl, 8>;
template class U_I18N_API MaybeStackVector<SingleUnitImpl, 8>;
#endif
@@ -133,16 +211,18 @@ template class U_I18N_API MaybeStackVector<SingleUnitImpl, 8>;
* Internal representation of measurement units. Capable of representing all complexities of units,
* including mixed and compound units.
*/
-struct U_I18N_API MeasureUnitImpl : public UMemory {
+class U_I18N_API MeasureUnitImpl : public UMemory {
+ public:
MeasureUnitImpl() = default;
MeasureUnitImpl(MeasureUnitImpl &&other) = default;
- MeasureUnitImpl(const MeasureUnitImpl &other, UErrorCode &status);
+ // No copy constructor, use MeasureUnitImpl::copy() to make it explicit.
+ MeasureUnitImpl(const MeasureUnitImpl &other, UErrorCode &status) = delete;
MeasureUnitImpl(const SingleUnitImpl &singleUnit, UErrorCode &status);
MeasureUnitImpl &operator=(MeasureUnitImpl &&other) noexcept = default;
/** Extract the MeasureUnitImpl from a MeasureUnit. */
- static inline const MeasureUnitImpl* get(const MeasureUnit& measureUnit) {
+ static inline const MeasureUnitImpl *get(const MeasureUnit &measureUnit) {
return measureUnit.fImpl;
}
@@ -197,44 +277,99 @@ struct U_I18N_API MeasureUnitImpl : public UMemory {
MeasureUnitImpl copy(UErrorCode& status) const;
/**
- * Extracts the list of all the individual units inside the `MeasureUnitImpl`.
+ * Extracts the list of all the individual units inside the `MeasureUnitImpl` with their indices.
* For example:
* - if the `MeasureUnitImpl` is `foot-per-hour`
- * it will return a list of 1 {`foot-per-hour`}
+ * it will return a list of 1 {(0, `foot-per-hour`)}
* - if the `MeasureUnitImpl` is `foot-and-inch`
- * it will return a list of 2 { `foot`, `inch`}
+ * it will return a list of 2 {(0, `foot`), (1, `inch`)}
*/
- MaybeStackVector<MeasureUnitImpl> extractIndividualUnits(UErrorCode &status) const;
+ MaybeStackVector<MeasureUnitImplWithIndex>
+ extractIndividualUnitsWithIndices(UErrorCode &status) const;
/** Mutates this MeasureUnitImpl to take the reciprocal. */
void takeReciprocal(UErrorCode& status);
/**
+ * Returns a simplified version of the unit.
+ * NOTE: the simplification happen when there are two units equals in their base unit and their
+ * prefixes.
+ *
+ * Example 1: "square-meter-per-meter" --> "meter"
+ * Example 2: "square-millimeter-per-meter" --> "square-millimeter-per-meter"
+ */
+ MeasureUnitImpl copyAndSimplify(UErrorCode &status) const;
+
+ /**
* Mutates this MeasureUnitImpl to append a single unit.
*
* @return true if a new item was added. If unit is the dimensionless unit,
* it is never added: the return value will always be false.
*/
- bool append(const SingleUnitImpl& singleUnit, UErrorCode& status);
+ bool appendSingleUnit(const SingleUnitImpl& singleUnit, UErrorCode& status);
+
+ /**
+ * Normalizes a MeasureUnitImpl and generate the identifier string in place.
+ */
+ void serialize(UErrorCode &status);
/** The complexity, either SINGLE, COMPOUND, or MIXED. */
UMeasureUnitComplexity complexity = UMEASURE_UNIT_SINGLE;
/**
- * The list of simple units. These may be summed or multiplied, based on the
+ * The list of single units. These may be summed or multiplied, based on the
* value of the complexity field.
*
* The "dimensionless" unit (SingleUnitImpl default constructor) must not be
* added to this list.
*/
- MaybeStackVector<SingleUnitImpl> units;
+ MaybeStackVector<SingleUnitImpl> singleUnits;
/**
* The full unit identifier. Owned by the MeasureUnitImpl. Empty if not computed.
*/
CharString identifier;
+
+ // For calling serialize
+ // TODO(icu-units#147): revisit serialization
+ friend class number::impl::LongNameHandler;
};
+struct U_I18N_API MeasureUnitImplWithIndex : public UMemory {
+ const int32_t index;
+ MeasureUnitImpl unitImpl;
+ // Makes a copy of unitImpl.
+ MeasureUnitImplWithIndex(int32_t index, const MeasureUnitImpl &unitImpl, UErrorCode &status)
+ : index(index), unitImpl(unitImpl.copy(status)) {
+ }
+ MeasureUnitImplWithIndex(int32_t index, const SingleUnitImpl &singleUnitImpl, UErrorCode &status)
+ : index(index), unitImpl(MeasureUnitImpl(singleUnitImpl, status)) {
+ }
+};
+
+// Export explicit template instantiations of MaybeStackArray, MemoryPool and
+// MaybeStackVector. This is required when building DLLs for Windows. (See
+// datefmt.h, collationiterator.h, erarules.h and others for similar examples.)
+#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
+template class U_I18N_API MaybeStackArray<MeasureUnitImplWithIndex *, 8>;
+template class U_I18N_API MemoryPool<MeasureUnitImplWithIndex, 8>;
+template class U_I18N_API MaybeStackVector<MeasureUnitImplWithIndex, 8>;
+
+// Export an explicit template instantiation of the LocalPointer that is used as a
+// data member of MeasureUnitImpl.
+// (When building DLLs for Windows this is required.)
+#if defined(_MSC_VER)
+// Ignore warning 4661 as LocalPointerBase does not use operator== or operator!=
+#pragma warning(push)
+#pragma warning(disable : 4661)
+#endif
+template class U_I18N_API LocalPointerBase<MeasureUnitImpl>;
+template class U_I18N_API LocalPointer<MeasureUnitImpl>;
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+#endif
+
U_NAMESPACE_END
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/measure.cpp b/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
index 23adba10070..b9c47fd4015 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
@@ -60,12 +60,12 @@ Measure::~Measure() {
delete unit;
}
-UBool Measure::operator==(const UObject& other) const {
+bool Measure::operator==(const UObject& other) const {
if (this == &other) { // Same object, equal
- return TRUE;
+ return true;
}
if (typeid(*this) != typeid(other)) { // Different types, not equal
- return FALSE;
+ return false;
}
const Measure &m = static_cast<const Measure&>(other);
return number == m.number &&
diff --git a/Build/source/libs/icu/icu-src/source/i18n/msgfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/msgfmt.cpp
index 3ca368ef954..b8cb2e2ca56 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/msgfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/msgfmt.cpp
@@ -389,10 +389,10 @@ MessageFormat::operator=(const MessageFormat& that)
return *this;
}
-UBool
+bool
MessageFormat::operator==(const Format& rhs) const
{
- if (this == &rhs) return TRUE;
+ if (this == &rhs) return true;
MessageFormat& that = (MessageFormat&)rhs;
@@ -400,37 +400,37 @@ MessageFormat::operator==(const Format& rhs) const
if (!Format::operator==(rhs) ||
msgPattern != that.msgPattern ||
fLocale != that.fLocale) {
- return FALSE;
+ return false;
}
// Compare hashtables.
if ((customFormatArgStarts == NULL) != (that.customFormatArgStarts == NULL)) {
- return FALSE;
+ return false;
}
if (customFormatArgStarts == NULL) {
- return TRUE;
+ return true;
}
UErrorCode ec = U_ZERO_ERROR;
const int32_t count = uhash_count(customFormatArgStarts);
const int32_t rhs_count = uhash_count(that.customFormatArgStarts);
if (count != rhs_count) {
- return FALSE;
+ return false;
}
int32_t idx = 0, rhs_idx = 0, pos = UHASH_FIRST, rhs_pos = UHASH_FIRST;
for (; idx < count && rhs_idx < rhs_count && U_SUCCESS(ec); ++idx, ++rhs_idx) {
const UHashElement* cur = uhash_nextElement(customFormatArgStarts, &pos);
const UHashElement* rhs_cur = uhash_nextElement(that.customFormatArgStarts, &rhs_pos);
if (cur->key.integer != rhs_cur->key.integer) {
- return FALSE;
+ return false;
}
const Format* format = (const Format*)uhash_iget(cachedFormatters, cur->key.integer);
const Format* rhs_format = (const Format*)uhash_iget(that.cachedFormatters, rhs_cur->key.integer);
if (*format != *rhs_format) {
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
// -------------------------------------
@@ -637,7 +637,7 @@ MessageFormat::adoptFormats(Format** newFormats,
// -------------------------------------
// Sets the new formats array and updates the array count.
-// This MessageFormat instance maks a copy of the new formats.
+// This MessageFormat instance makes a copy of the new formats.
void
MessageFormat::setFormats(const Format** newFormats,
@@ -862,7 +862,7 @@ MessageFormat::getFormatNames(UErrorCode& status) {
fFormatNames->setDeleter(uprv_deleteUObject);
for (int32_t partIndex = 0; (partIndex = nextTopLevelArgStart(partIndex)) >= 0;) {
- fFormatNames->addElement(new UnicodeString(getArgName(partIndex + 1)), status);
+ fFormatNames->addElementX(new UnicodeString(getArgName(partIndex + 1)), status);
}
StringEnumeration* nameEnumerator = new FormatNameEnumeration(fFormatNames, status);
@@ -1107,7 +1107,7 @@ void MessageFormat::format(int32_t msgStart, const void *plNumber,
} else if (argType == UMSGPAT_ARG_TYPE_NONE || (cachedFormatters && uhash_iget(cachedFormatters, i - 2))) {
// We arrive here if getCachedFormatter returned NULL, but there was actually an element in the hash table.
// This can only happen if the hash table contained a DummyFormat, so the if statement above is a check
- // for the hash table containind DummyFormat.
+ // for the hash table containing DummyFormat.
if (arg->isNumeric()) {
const NumberFormat* nf = getDefaultNumberFormat(success);
appendTo.formatAndAppend(nf, *arg, success);
@@ -1440,7 +1440,7 @@ MessageFormat::parse(int32_t msgStart,
argType==UMSGPAT_ARG_TYPE_NONE || (cachedFormatters && uhash_iget(cachedFormatters, i -2))) {
// We arrive here if getCachedFormatter returned NULL, but there was actually an element in the hash table.
// This can only happen if the hash table contained a DummyFormat, so the if statement above is a check
- // for the hash table containind DummyFormat.
+ // for the hash table containing DummyFormat.
// Match as a string.
// if at end, use longest possible match
@@ -1869,8 +1869,8 @@ UBool MessageFormat::equalFormats(const void* left, const void* right) {
}
-UBool MessageFormat::DummyFormat::operator==(const Format&) const {
- return TRUE;
+bool MessageFormat::DummyFormat::operator==(const Format&) const {
+ return true;
}
MessageFormat::DummyFormat* MessageFormat::DummyFormat::clone() const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/msgfmt_impl.h b/Build/source/libs/icu/icu-src/source/i18n/msgfmt_impl.h
index 1cece1a0943..57988389132 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/msgfmt_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/msgfmt_impl.h
@@ -29,10 +29,10 @@ public:
FormatNameEnumeration(UVector *fFormatNames, UErrorCode& status);
virtual ~FormatNameEnumeration();
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
- virtual const UnicodeString* snext(UErrorCode& status);
- virtual void reset(UErrorCode& status);
- virtual int32_t count(UErrorCode& status) const;
+ virtual UClassID getDynamicClassID(void) const override;
+ virtual const UnicodeString* snext(UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
+ virtual int32_t count(UErrorCode& status) const override;
private:
int32_t pos;
UVector *fFormatNames;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp b/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
index dcf8d852e2c..ffbbf152d33 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
@@ -119,7 +119,7 @@ void NameUnicodeTransliterator::handleTransliterate(Replaceable& text, UTransPos
return;
}
- // Accomodate the longest possible name
+ // Accommodate the longest possible name
++maxLen; // allow for temporary trailing space
char* cbuf = (char*) uprv_malloc(maxLen);
if (cbuf == NULL) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/name2uni.h b/Build/source/libs/icu/icu-src/source/i18n/name2uni.h
index 44ad85fb822..6881c6bc857 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/name2uni.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/name2uni.h
@@ -49,12 +49,12 @@ public:
* Transliterator API.
* @return A copy of the object.
*/
- virtual NameUnicodeTransliterator* clone() const;
+ virtual NameUnicodeTransliterator* clone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -73,7 +73,7 @@ public:
* pos.contextLimit. Otherwise, assume the text is complete.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
/**
* Set of characters which occur in Unicode character names.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp b/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
index 1510d885094..df04e33e04f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
@@ -231,7 +231,7 @@ NFRuleSet::parseRules(UnicodeString& description, UErrorCode& status)
// (this isn't a for loop because we might be deleting items from
// the vector-- we want to make sure we only increment i when
- // we _didn't_ delete aything from the vector)
+ // we _didn't_ delete anything from the vector)
int32_t rulesSize = rules.size();
for (int32_t i = 0; i < rulesSize; i++) {
NFRule* rule = rules[i];
@@ -344,7 +344,7 @@ util_equalRules(const NFRule* rule1, const NFRule* rule2)
return FALSE;
}
-UBool
+bool
NFRuleSet::operator==(const NFRuleSet& rhs) const
{
if (rules.size() == rhs.rules.size() &&
@@ -354,19 +354,19 @@ NFRuleSet::operator==(const NFRuleSet& rhs) const
// ...then compare the non-numerical rule lists...
for (int i = 0; i < NON_NUMERICAL_RULE_LENGTH; i++) {
if (!util_equalRules(nonNumericalRules[i], rhs.nonNumericalRules[i])) {
- return FALSE;
+ return false;
}
}
// ...then compare the rule lists...
for (uint32_t i = 0; i < rules.size(); ++i) {
if (*rules[i] != *rhs.rules[i]) {
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
void
@@ -630,7 +630,7 @@ NFRuleSet::findFractionRuleSetRule(double number) const
// value, then the first one (the one we found above) is used if
// the numerator of the fraction is 1 and the second one is used if
// the numerator of the fraction is anything else (this lets us
- // do things like "one third"/"two thirds" without haveing to define
+ // do things like "one third"/"two thirds" without having to define
// a whole bunch of extra rule sets)
if ((unsigned)(winner + 1) < rules.size() &&
rules[winner + 1]->getBaseValue() == rules[winner]->getBaseValue()) {
@@ -647,7 +647,7 @@ NFRuleSet::findFractionRuleSetRule(double number) const
/**
* Parses a string. Matches the string to be parsed against each
* of its rules (with a base value less than upperBound) and returns
- * the value produced by the rule that matched the most charcters
+ * the value produced by the rule that matched the most characters
* in the source string.
* @param text The string to parse
* @param parsePosition The initial position is ignored and assumed
@@ -762,7 +762,7 @@ NFRuleSet::parse(const UnicodeString& text, ParsePosition& pos, double upperBoun
#ifdef RBNF_DEBUG
fprintf(stderr, "<nfrs> exit\n");
#endif
- // finally, update the parse postion we were passed to point to the
+ // finally, update the parse position we were passed to point to the
// first character we didn't use, and return the result that
// corresponds to that string of characters
pos = highWaterMark;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfrs.h b/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
index 3232ab217a9..a6ad3a3bb7f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
@@ -40,8 +40,8 @@ public:
~NFRuleSet();
- UBool operator==(const NFRuleSet& rhs) const;
- UBool operator!=(const NFRuleSet& rhs) const { return !operator==(rhs); }
+ bool operator==(const NFRuleSet& rhs) const;
+ bool operator!=(const NFRuleSet& rhs) const { return !operator==(rhs); }
UBool isPublic() const { return fIsPublic; }
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp b/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
index a9b84eda182..4bb0785127f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
@@ -115,7 +115,7 @@ NFRule::makeRules(UnicodeString& description,
// we know we're making at least one rule, so go ahead and
// new it up and initialize its basevalue and divisor
// (this also strips the rule descriptor, if any, off the
- // descripton string)
+ // description string)
NFRule* rule1 = new NFRule(rbnf, description, status);
/* test for NULL */
if (rule1 == 0) {
@@ -193,7 +193,7 @@ NFRule::makeRules(UnicodeString& description,
rule2->radix = rule1->radix;
rule2->exponent = rule1->exponent;
- // rule2's rule text omits the stuff in brackets: initalize
+ // rule2's rule text omits the stuff in brackets: initialize
// its rule text and substitutions accordingly
sbuf.append(description, 0, brack1);
if (brack2 + 1 < description.length()) {
@@ -631,7 +631,7 @@ util_equalSubstitutions(const NFSubstitution* sub1, const NFSubstitution* sub2)
* @param that The rule to compare this one against
* @return True is the two rules are functionally equivalent
*/
-UBool
+bool
NFRule::operator==(const NFRule& rhs) const
{
return baseValue == rhs.baseValue
@@ -1533,7 +1533,7 @@ NFRule::findTextLenient(const UnicodeString& str,
// in JDK 1.2, CollationElementIterator provides us with an
// API to map between character offsets and collation elements
// and we can do this by marching through the string comparing
- // collation elements. We can't do that in JDK 1.1. Insted,
+ // collation elements. We can't do that in JDK 1.1. Instead,
// we have to go through this horrible slow mess:
int32_t p = startingAt;
int32_t keyLen = 0;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfrule.h b/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
index 989fbaa8f9b..5e615e485c8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
@@ -54,8 +54,8 @@ public:
NFRule(const RuleBasedNumberFormat* rbnf, const UnicodeString &ruleText, UErrorCode &status);
~NFRule();
- UBool operator==(const NFRule& rhs) const;
- UBool operator!=(const NFRule& rhs) const { return !operator==(rhs); }
+ bool operator==(const NFRule& rhs) const;
+ bool operator!=(const NFRule& rhs) const { return !operator==(rhs); }
ERuleType getType() const { return (ERuleType)(baseValue <= kNoBase ? (ERuleType)baseValue : kOtherRule); }
void setType(ERuleType ruleType) { baseValue = (int32_t)ruleType; }
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp b/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
index e3d1fc144fa..70ac18be468 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
@@ -58,15 +58,15 @@ public:
UErrorCode& status);
virtual ~SameValueSubstitution();
- virtual int64_t transformNumber(int64_t number) const { return number; }
- virtual double transformNumber(double number) const { return number; }
- virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const { return newRuleValue; }
- virtual double calcUpperBound(double oldUpperBound) const { return oldUpperBound; }
- virtual UChar tokenChar() const { return (UChar)0x003d; } // '='
+ virtual int64_t transformNumber(int64_t number) const override { return number; }
+ virtual double transformNumber(double number) const override { return number; }
+ virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const override { return newRuleValue; }
+ virtual double calcUpperBound(double oldUpperBound) const override { return oldUpperBound; }
+ virtual UChar tokenChar() const override { return (UChar)0x003d; } // '='
public:
static UClassID getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
SameValueSubstitution::~SameValueSubstitution() {}
@@ -88,7 +88,7 @@ public:
}
virtual ~MultiplierSubstitution();
- virtual void setDivisor(int32_t radix, int16_t exponent, UErrorCode& status) {
+ virtual void setDivisor(int32_t radix, int16_t exponent, UErrorCode& status) override {
divisor = util64_pow(radix, exponent);
if(divisor == 0) {
@@ -96,13 +96,13 @@ public:
}
}
- virtual UBool operator==(const NFSubstitution& rhs) const;
+ virtual bool operator==(const NFSubstitution& rhs) const override;
- virtual int64_t transformNumber(int64_t number) const {
+ virtual int64_t transformNumber(int64_t number) const override {
return number / divisor;
}
- virtual double transformNumber(double number) const {
+ virtual double transformNumber(double number) const override {
if (getRuleSet()) {
return uprv_floor(number / divisor);
} else {
@@ -110,17 +110,17 @@ public:
}
}
- virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const {
+ virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const override {
return newRuleValue * divisor;
}
- virtual double calcUpperBound(double /*oldUpperBound*/) const { return static_cast<double>(divisor); }
+ virtual double calcUpperBound(double /*oldUpperBound*/) const override { return static_cast<double>(divisor); }
- virtual UChar tokenChar() const { return (UChar)0x003c; } // '<'
+ virtual UChar tokenChar() const override { return (UChar)0x003c; } // '<'
public:
static UClassID getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
MultiplierSubstitution::~MultiplierSubstitution() {}
@@ -137,7 +137,7 @@ public:
UErrorCode& status);
virtual ~ModulusSubstitution();
- virtual void setDivisor(int32_t radix, int16_t exponent, UErrorCode& status) {
+ virtual void setDivisor(int32_t radix, int16_t exponent, UErrorCode& status) override {
divisor = util64_pow(radix, exponent);
if (divisor == 0) {
@@ -145,13 +145,13 @@ public:
}
}
- virtual UBool operator==(const NFSubstitution& rhs) const;
+ virtual bool operator==(const NFSubstitution& rhs) const override;
- virtual void doSubstitution(int64_t number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const;
- virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const;
+ virtual void doSubstitution(int64_t number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const override;
+ virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const override;
- virtual int64_t transformNumber(int64_t number) const { return number % divisor; }
- virtual double transformNumber(double number) const { return uprv_fmod(number, static_cast<double>(divisor)); }
+ virtual int64_t transformNumber(int64_t number) const override { return number % divisor; }
+ virtual double transformNumber(double number) const override { return uprv_fmod(number, static_cast<double>(divisor)); }
virtual UBool doParse(const UnicodeString& text,
ParsePosition& parsePosition,
@@ -159,23 +159,23 @@ public:
double upperBound,
UBool lenientParse,
uint32_t nonNumericalExecutedRuleMask,
- Formattable& result) const;
+ Formattable& result) const override;
- virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const {
+ virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const override {
return oldRuleValue - uprv_fmod(oldRuleValue, static_cast<double>(divisor)) + newRuleValue;
}
- virtual double calcUpperBound(double /*oldUpperBound*/) const { return static_cast<double>(divisor); }
+ virtual double calcUpperBound(double /*oldUpperBound*/) const override { return static_cast<double>(divisor); }
- virtual UBool isModulusSubstitution() const { return TRUE; }
+ virtual UBool isModulusSubstitution() const override { return TRUE; }
- virtual UChar tokenChar() const { return (UChar)0x003e; } // '>'
+ virtual UChar tokenChar() const override { return (UChar)0x003e; } // '>'
- virtual void toString(UnicodeString& result) const;
+ virtual void toString(UnicodeString& result) const override;
public:
static UClassID getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
ModulusSubstitution::~ModulusSubstitution() {}
@@ -189,15 +189,15 @@ public:
: NFSubstitution(_pos, _ruleSet, description, status) {}
virtual ~IntegralPartSubstitution();
- virtual int64_t transformNumber(int64_t number) const { return number; }
- virtual double transformNumber(double number) const { return uprv_floor(number); }
- virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const { return newRuleValue + oldRuleValue; }
- virtual double calcUpperBound(double /*oldUpperBound*/) const { return DBL_MAX; }
- virtual UChar tokenChar() const { return (UChar)0x003c; } // '<'
+ virtual int64_t transformNumber(int64_t number) const override { return number; }
+ virtual double transformNumber(double number) const override { return uprv_floor(number); }
+ virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const override { return newRuleValue + oldRuleValue; }
+ virtual double calcUpperBound(double /*oldUpperBound*/) const override { return DBL_MAX; }
+ virtual UChar tokenChar() const override { return (UChar)0x003c; } // '<'
public:
static UClassID getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
IntegralPartSubstitution::~IntegralPartSubstitution() {}
@@ -213,12 +213,12 @@ public:
UErrorCode& status);
virtual ~FractionalPartSubstitution();
- virtual UBool operator==(const NFSubstitution& rhs) const;
+ virtual bool operator==(const NFSubstitution& rhs) const override;
- virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const;
- virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/, int32_t /*recursionCount*/, UErrorCode& /*status*/) const {}
- virtual int64_t transformNumber(int64_t /*number*/) const { return 0; }
- virtual double transformNumber(double number) const { return number - uprv_floor(number); }
+ virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const override;
+ virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/, int32_t /*recursionCount*/, UErrorCode& /*status*/) const override {}
+ virtual int64_t transformNumber(int64_t /*number*/) const override { return 0; }
+ virtual double transformNumber(double number) const override { return number - uprv_floor(number); }
virtual UBool doParse(const UnicodeString& text,
ParsePosition& parsePosition,
@@ -226,15 +226,15 @@ public:
double upperBound,
UBool lenientParse,
uint32_t nonNumericalExecutedRuleMask,
- Formattable& result) const;
+ Formattable& result) const override;
- virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const { return newRuleValue + oldRuleValue; }
- virtual double calcUpperBound(double /*oldUpperBound*/) const { return 0.0; }
- virtual UChar tokenChar() const { return (UChar)0x003e; } // '>'
+ virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const override { return newRuleValue + oldRuleValue; }
+ virtual double calcUpperBound(double /*oldUpperBound*/) const override { return 0.0; }
+ virtual UChar tokenChar() const override { return (UChar)0x003e; } // '>'
public:
static UClassID getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
FractionalPartSubstitution::~FractionalPartSubstitution() {}
@@ -248,15 +248,15 @@ public:
: NFSubstitution(_pos, _ruleSet, description, status) {}
virtual ~AbsoluteValueSubstitution();
- virtual int64_t transformNumber(int64_t number) const { return number >= 0 ? number : -number; }
- virtual double transformNumber(double number) const { return uprv_fabs(number); }
- virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const { return -newRuleValue; }
- virtual double calcUpperBound(double /*oldUpperBound*/) const { return DBL_MAX; }
- virtual UChar tokenChar() const { return (UChar)0x003e; } // '>'
+ virtual int64_t transformNumber(int64_t number) const override { return number >= 0 ? number : -number; }
+ virtual double transformNumber(double number) const override { return uprv_fabs(number); }
+ virtual double composeRuleValue(double newRuleValue, double /*oldRuleValue*/) const override { return -newRuleValue; }
+ virtual double calcUpperBound(double /*oldUpperBound*/) const override { return DBL_MAX; }
+ virtual UChar tokenChar() const override { return (UChar)0x003e; } // '>'
public:
static UClassID getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
AbsoluteValueSubstitution::~AbsoluteValueSubstitution() {}
@@ -285,30 +285,30 @@ public:
}
virtual ~NumeratorSubstitution();
- virtual UBool operator==(const NFSubstitution& rhs) const;
+ virtual bool operator==(const NFSubstitution& rhs) const override;
- virtual int64_t transformNumber(int64_t number) const { return number * ldenominator; }
- virtual double transformNumber(double number) const { return uprv_round(number * denominator); }
+ virtual int64_t transformNumber(int64_t number) const override { return number * ldenominator; }
+ virtual double transformNumber(double number) const override { return uprv_round(number * denominator); }
- virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/, int32_t /*recursionCount*/, UErrorCode& /*status*/) const {}
- virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const;
+ virtual void doSubstitution(int64_t /*number*/, UnicodeString& /*toInsertInto*/, int32_t /*_pos*/, int32_t /*recursionCount*/, UErrorCode& /*status*/) const override {}
+ virtual void doSubstitution(double number, UnicodeString& toInsertInto, int32_t pos, int32_t recursionCount, UErrorCode& status) const override;
virtual UBool doParse(const UnicodeString& text,
ParsePosition& parsePosition,
double baseValue,
double upperBound,
UBool /*lenientParse*/,
uint32_t nonNumericalExecutedRuleMask,
- Formattable& result) const;
+ Formattable& result) const override;
- virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const { return newRuleValue / oldRuleValue; }
- virtual double calcUpperBound(double /*oldUpperBound*/) const { return denominator; }
- virtual UChar tokenChar() const { return (UChar)0x003c; } // '<'
+ virtual double composeRuleValue(double newRuleValue, double oldRuleValue) const override { return newRuleValue / oldRuleValue; }
+ virtual double calcUpperBound(double /*oldUpperBound*/) const override { return denominator; }
+ virtual UChar tokenChar() const override { return (UChar)0x003c; } // '<'
private:
static const UChar LTLT[2];
public:
static UClassID getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
NumeratorSubstitution::~NumeratorSubstitution() {}
@@ -515,7 +515,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(NFSubstitution)
* @param The substitution to compare this one to
* @return true if the two substitutions are functionally equivalent
*/
-UBool
+bool
NFSubstitution::operator==(const NFSubstitution& rhs) const
{
// compare class and all of the fields all substitutions have
@@ -810,7 +810,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SameValueSubstitution)
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(MultiplierSubstitution)
-UBool MultiplierSubstitution::operator==(const NFSubstitution& rhs) const
+bool MultiplierSubstitution::operator==(const NFSubstitution& rhs) const
{
return NFSubstitution::operator==(rhs) &&
divisor == ((const MultiplierSubstitution*)&rhs)->divisor;
@@ -845,7 +845,7 @@ ModulusSubstitution::ModulusSubstitution(int32_t _pos,
}
if (0 == description.compare(gGreaterGreaterGreaterThan, 3)) {
- // the >>> token doesn't alter how this substituion calculates the
+ // the >>> token doesn't alter how this substitution calculates the
// values it uses for formatting and parsing, but it changes
// what's done with that value after it's obtained: >>> short-
// circuits the rule-search process and goes straight to the
@@ -856,7 +856,7 @@ ModulusSubstitution::ModulusSubstitution(int32_t _pos,
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ModulusSubstitution)
-UBool ModulusSubstitution::operator==(const NFSubstitution& rhs) const
+bool ModulusSubstitution::operator==(const NFSubstitution& rhs) const
{
return NFSubstitution::operator==(rhs) &&
divisor == ((const ModulusSubstitution*)&rhs)->divisor &&
@@ -1195,7 +1195,7 @@ FractionalPartSubstitution::doParse(const UnicodeString& text,
}
}
-UBool
+bool
FractionalPartSubstitution::operator==(const NFSubstitution& rhs) const
{
return NFSubstitution::operator==(rhs) &&
@@ -1327,7 +1327,7 @@ NumeratorSubstitution::doParse(const UnicodeString& text,
return TRUE;
}
-UBool
+bool
NumeratorSubstitution::operator==(const NFSubstitution& rhs) const
{
return NFSubstitution::operator==(rhs) &&
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nfsubs.h b/Build/source/libs/icu/icu-src/source/i18n/nfsubs.h
index 948627c0cc9..0abd98be097 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nfsubs.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/nfsubs.h
@@ -74,7 +74,7 @@ public:
* @param rhs the object to be compared with.
* @return true if the given Format objects are semantically equal.
*/
- virtual UBool operator==(const NFSubstitution& rhs) const;
+ virtual bool operator==(const NFSubstitution& rhs) const;
/**
* Return true if the given Format objects are semantically unequal.
@@ -82,7 +82,7 @@ public:
* @param rhs the object to be compared with.
* @return true if the given Format objects are semantically unequal.
*/
- UBool operator!=(const NFSubstitution& rhs) const { return !operator==(rhs); }
+ bool operator!=(const NFSubstitution& rhs) const { return !operator==(rhs); }
/**
* Sets the substitution's divisor. Used by NFRule.setBaseValue().
@@ -250,7 +250,7 @@ private:
public:
static UClassID getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nortrans.h b/Build/source/libs/icu/icu-src/source/i18n/nortrans.h
index 198ed29c95e..01cb97ab38b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nortrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/nortrans.h
@@ -44,12 +44,12 @@ class NormalizationTransliterator : public Transliterator {
* Transliterator API.
* @return A copy of the object.
*/
- virtual NormalizationTransliterator* clone() const;
+ virtual NormalizationTransliterator* clone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -68,7 +68,7 @@ class NormalizationTransliterator : public Transliterator {
* pos.contextLimit. Otherwise, assume the text is complete.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
public:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/nultrans.h b/Build/source/libs/icu/icu-src/source/i18n/nultrans.h
index 36c92fa7b18..f5f2fbc9117 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/nultrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/nultrans.h
@@ -45,19 +45,19 @@ public:
* Transliterator API.
* @internal Use transliterator factory methods instead since this class will be removed in that release.
*/
- virtual NullTransliterator* clone() const;
+ virtual NullTransliterator* clone() const override;
/**
* Implements {@link Transliterator#handleTransliterate}.
* @internal Use transliterator factory methods instead since this class will be removed in that release.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp
index a74ec2d6347..f9c154c885c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp
@@ -64,7 +64,7 @@ int32_t AffixUtils::estimateLength(const UnicodeString &patternString, UErrorCod
}
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
offset += U16_LENGTH(cp);
@@ -134,6 +134,9 @@ Field AffixUtils::getFieldForType(AffixPatternType type) {
return {UFIELD_CATEGORY_NUMBER, UNUM_SIGN_FIELD};
case TYPE_PLUS_SIGN:
return {UFIELD_CATEGORY_NUMBER, UNUM_SIGN_FIELD};
+ case TYPE_APPROXIMATELY_SIGN:
+ // TODO: Introduce a new field for the approximately sign?
+ return {UFIELD_CATEGORY_NUMBER, UNUM_SIGN_FIELD};
case TYPE_PERCENT:
return {UFIELD_CATEGORY_NUMBER, UNUM_PERCENT_FIELD};
case TYPE_PERMILLE:
@@ -151,7 +154,7 @@ Field AffixUtils::getFieldForType(AffixPatternType type) {
case TYPE_CURRENCY_OVERFLOW:
return {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD};
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -295,6 +298,8 @@ AffixTag AffixUtils::nextToken(AffixTag tag, const UnicodeString &patternString,
return makeTag(offset + count, TYPE_MINUS_SIGN, STATE_BASE, 0);
case u'+':
return makeTag(offset + count, TYPE_PLUS_SIGN, STATE_BASE, 0);
+ case u'~':
+ return makeTag(offset + count, TYPE_APPROXIMATELY_SIGN, STATE_BASE, 0);
case u'%':
return makeTag(offset + count, TYPE_PERCENT, STATE_BASE, 0);
case u'‰':
@@ -385,7 +390,7 @@ AffixTag AffixUtils::nextToken(AffixTag tag, const UnicodeString &patternString,
return makeTag(offset, TYPE_CURRENCY_OVERFLOW, STATE_BASE, 0);
}
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
// End of string
@@ -414,7 +419,7 @@ AffixTag AffixUtils::nextToken(AffixTag tag, const UnicodeString &patternString,
case STATE_OVERFLOW_CURR:
return makeTag(offset, TYPE_CURRENCY_OVERFLOW, STATE_BASE, 0);
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp
index 9d10d1f5580..8f2314d6898 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_asformat.cpp
@@ -32,7 +32,7 @@ LocalizedNumberFormatterAsFormat::LocalizedNumberFormatterAsFormat(
LocalizedNumberFormatterAsFormat::~LocalizedNumberFormatterAsFormat() = default;
-UBool LocalizedNumberFormatterAsFormat::operator==(const Format& other) const {
+bool LocalizedNumberFormatterAsFormat::operator==(const Format& other) const {
auto* _other = dynamic_cast<const LocalizedNumberFormatterAsFormat*>(&other);
if (_other == nullptr) {
return false;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h b/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h
index 3a2fe3185be..394b9a811fd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_asformat.h
@@ -39,7 +39,7 @@ class U_I18N_API LocalizedNumberFormatterAsFormat : public Format {
/**
* Equals operator.
*/
- UBool operator==(const Format& other) const U_OVERRIDE;
+ bool operator==(const Format& other) const U_OVERRIDE;
/**
* Creates a copy of this object.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp
index 4cb56253628..b87dbd93e5f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_capi.cpp
@@ -116,7 +116,8 @@ unumf_formatInt(const UNumberFormatter* uformatter, int64_t value, UFormattedNum
auto* result = UFormattedNumberApiHelper::validate(uresult, *ec);
if (U_FAILURE(*ec)) { return; }
- result->fData.getStringRef().clear();
+ result->fData.resetString();
+ result->fData.quantity.clear();
result->fData.quantity.setToLong(value);
formatter->fFormatter.formatImpl(&result->fData, *ec);
}
@@ -128,7 +129,8 @@ unumf_formatDouble(const UNumberFormatter* uformatter, double value, UFormattedN
auto* result = UFormattedNumberApiHelper::validate(uresult, *ec);
if (U_FAILURE(*ec)) { return; }
- result->fData.getStringRef().clear();
+ result->fData.resetString();
+ result->fData.quantity.clear();
result->fData.quantity.setToDouble(value);
formatter->fFormatter.formatImpl(&result->fData, *ec);
}
@@ -140,7 +142,8 @@ unumf_formatDecimal(const UNumberFormatter* uformatter, const char* value, int32
auto* result = UFormattedNumberApiHelper::validate(uresult, *ec);
if (U_FAILURE(*ec)) { return; }
- result->fData.getStringRef().clear();
+ result->fData.resetString();
+ result->fData.quantity.clear();
result->fData.quantity.setToDecNumber({value, valueLen}, *ec);
if (U_FAILURE(*ec)) { return; }
formatter->fFormatter.formatImpl(&result->fData, *ec);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
index d781b6fada2..62692f444df 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
@@ -55,7 +55,7 @@ int32_t countZeros(const UChar *patternString, int32_t patternLength) {
} // namespace
// NOTE: patterns and multipliers both get zero-initialized.
-CompactData::CompactData() : patterns(), multipliers(), largestMagnitude(0), isEmpty(TRUE) {
+CompactData::CompactData() : patterns(), multipliers(), largestMagnitude(0), isEmpty(true) {
}
void CompactData::populate(const Locale &locale, const char *nsName, CompactStyle compactStyle,
@@ -104,14 +104,30 @@ int32_t CompactData::getMultiplier(int32_t magnitude) const {
return multipliers[magnitude];
}
-const UChar *CompactData::getPattern(int32_t magnitude, StandardPlural::Form plural) const {
+const UChar *CompactData::getPattern(
+ int32_t magnitude,
+ const PluralRules *rules,
+ const DecimalQuantity &dq) const {
if (magnitude < 0) {
return nullptr;
}
if (magnitude > largestMagnitude) {
magnitude = largestMagnitude;
}
- const UChar *patternString = patterns[getIndex(magnitude, plural)];
+ const UChar *patternString = nullptr;
+ if (dq.hasIntegerValue()) {
+ int64_t i = dq.toLong(true);
+ if (i == 0) {
+ patternString = patterns[getIndex(magnitude, StandardPlural::Form::EQ_0)];
+ } else if (i == 1) {
+ patternString = patterns[getIndex(magnitude, StandardPlural::Form::EQ_1)];
+ }
+ if (patternString != nullptr) {
+ return patternString;
+ }
+ }
+ StandardPlural::Form plural = utils::getStandardPlural(rules, dq);
+ patternString = patterns[getIndex(magnitude, plural)];
if (patternString == nullptr && plural != StandardPlural::OTHER) {
// Fall back to "other" plural variant
patternString = patterns[getIndex(magnitude, StandardPlural::OTHER)];
@@ -142,7 +158,7 @@ void CompactData::getUniquePatterns(UVector &output, UErrorCode &status) const {
// The string was not found; add it to the UVector.
// ANDY: This requires a const_cast. Why?
- output.addElement(const_cast<UChar *>(pattern), status);
+ output.addElementX(const_cast<UChar *>(pattern), status);
continue_outer:
continue;
@@ -166,12 +182,6 @@ void CompactData::CompactDataSink::put(const char *key, ResourceValue &value, UB
ResourceTable pluralVariantsTable = value.getTable(status);
if (U_FAILURE(status)) { return; }
for (int i4 = 0; pluralVariantsTable.getKeyAndValue(i4, key, value); ++i4) {
-
- if (uprv_strcmp(key, "0") == 0 || uprv_strcmp(key, "1") == 0) {
- // TODO(ICU-21258): Handle this case. For now, skip.
- continue;
- }
-
// Skip this magnitude/plural if we already have it from a child locale.
// Note: This also skips USE_FALLBACK entries.
StandardPlural::Form plural = StandardPlural::fromString(key, status);
@@ -296,8 +306,7 @@ void CompactHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micr
magnitude -= multiplier;
}
- StandardPlural::Form plural = utils::getStandardPlural(rules, quantity);
- const UChar *patternString = data.getPattern(magnitude, plural);
+ const UChar *patternString = data.getPattern(magnitude, rules, quantity);
if (patternString == nullptr) {
// Use the default (non-compact) modifier.
// No need to take any action.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_compact.h b/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
index 199d39f6591..9802b9fb10e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
@@ -28,7 +28,10 @@ class CompactData : public MultiplierProducer {
int32_t getMultiplier(int32_t magnitude) const U_OVERRIDE;
- const UChar *getPattern(int32_t magnitude, StandardPlural::Form plural) const;
+ const UChar *getPattern(
+ int32_t magnitude,
+ const PluralRules *rules,
+ const DecimalQuantity &dq) const;
void getUniquePatterns(UVector &output, UErrorCode &status) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp
index 9208427904c..da1812f49f0 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_currencysymbols.cpp
@@ -76,7 +76,7 @@ UnicodeString CurrencySymbols::loadSymbol(UCurrNameStyle selector, UErrorCode& s
if (symbol == isoCode) {
return UnicodeString(isoCode, 3);
} else {
- return UnicodeString(TRUE, symbol, symbolLen);
+ return UnicodeString(true, symbol, symbolLen);
}
}
@@ -104,7 +104,7 @@ UnicodeString CurrencySymbols::getPluralName(StandardPlural::Form plural, UError
if (symbol == isoCode) {
return UnicodeString(isoCode, 3);
} else {
- return UnicodeString(TRUE, symbol, symbolLen);
+ return UnicodeString(true, symbol, symbolLen);
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
index 74547c1842d..6a2847b1c18 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
@@ -273,6 +273,9 @@ double DecimalQuantity::getPluralOperand(PluralOperand operand) const {
return fractionCountWithoutTrailingZeros();
case PLURAL_OPERAND_E:
return static_cast<double>(getExponent());
+ case PLURAL_OPERAND_C:
+ // Plural operand `c` is currently an alias for `e`.
+ return static_cast<double>(getExponent());
default:
return std::abs(toDouble());
}
@@ -286,6 +289,11 @@ void DecimalQuantity::adjustExponent(int delta) {
exponent = exponent + delta;
}
+void DecimalQuantity::resetExponent() {
+ adjustMagnitude(exponent);
+ exponent = 0;
+}
+
bool DecimalQuantity::hasIntegerValue() const {
return scale >= 0;
}
@@ -531,7 +539,11 @@ void DecimalQuantity::_setToDecNum(const DecNum& decnum, UErrorCode& status) {
if (decnum.isNegative()) {
flags |= NEGATIVE_FLAG;
}
- if (!decnum.isZero()) {
+ if (decnum.isNaN()) {
+ flags |= NAN_FLAG;
+ } else if (decnum.isInfinity()) {
+ flags |= INFINITY_FLAG;
+ } else if (!decnum.isZero()) {
readDecNumberToBcd(decnum);
compact();
}
@@ -631,6 +643,7 @@ DecNum& DecimalQuantity::toDecNum(DecNum& output, UErrorCode& status) const {
// Special handling for zero
if (precision == 0) {
output.setTo("0", status);
+ return output;
}
// Use the BCD constructor. We need to do a little bit of work to convert, though.
@@ -819,6 +832,7 @@ void DecimalQuantity::roundToMagnitude(int32_t magnitude, RoundingMode roundingM
// Perform truncation
if (position >= precision) {
+ U_ASSERT(trailingDigit == 0);
setBcdToZero();
scale = magnitude;
} else {
@@ -836,6 +850,10 @@ void DecimalQuantity::roundToMagnitude(int32_t magnitude, RoundingMode roundingM
// do not return: use the bubbling logic below
} else {
setDigitPos(0, 5);
+ // If the quantity was set to 0, we may need to restore a digit.
+ if (precision == 0) {
+ precision = 1;
+ }
// compact not necessary: digit at position 0 is nonzero
return;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h b/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
index 5ab680e6d73..107c09a96a5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
@@ -136,7 +136,7 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
* this method with delta=-3 will change the value to "1.23456".
*
* @param delta The number of magnitudes of ten to change by.
- * @return true if integer overflow occured; false otherwise.
+ * @return true if integer overflow occurred; false otherwise.
*/
bool adjustMagnitude(int32_t delta);
@@ -167,6 +167,11 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
void adjustExponent(int32_t delta);
/**
+ * Resets the DecimalQuantity to the value before adjustMagnitude and adjustExponent.
+ */
+ void resetExponent();
+
+ /**
* @return Whether the value represented by this {@link DecimalQuantity} is
* zero, infinity, or NaN.
*/
@@ -428,7 +433,9 @@ class U_I18N_API DecimalQuantity : public IFixedDecimal, public UMemory {
/**
* Sets the digit in the BCD list. This method only sets the digit; it is the caller's
- * responsibility to call {@link #compact} after setting the digit.
+ * responsibility to call {@link #compact} after setting the digit, and to ensure
+ * that the precision field is updated to reflect the correct number of digits if a
+ * nonzero digit is added to the decimal.
*
* @param position The position of the digit to pop, counted in BCD units from the least
* significant digit. If outside the range supported by the implementation, an AssertionError
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.cpp
index 30481ce5bf0..7fa58bbc7ab 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.cpp
@@ -21,7 +21,7 @@ char kRawDefaultProperties[sizeof(DecimalFormatProperties)];
icu::UInitOnce gDefaultPropertiesInitOnce = U_INITONCE_INITIALIZER;
void U_CALLCONV initDefaultProperties(UErrorCode&) {
- // can't fail, uses placement new into staticly allocated space.
+ // can't fail, uses placement new into statically allocated space.
new(kRawDefaultProperties) DecimalFormatProperties(); // set to the default instance
}
@@ -40,6 +40,7 @@ void DecimalFormatProperties::clear() {
decimalPatternMatchRequired = false;
decimalSeparatorAlwaysShown = false;
exponentSignAlwaysShown = false;
+ currencyAsDecimal = false;
formatFailIfMoreThanMaxDigits = false;
formatWidth = -1;
groupingSize = -1;
@@ -88,6 +89,7 @@ DecimalFormatProperties::_equals(const DecimalFormatProperties& other, bool igno
eq = eq && currencyUsage == other.currencyUsage;
eq = eq && decimalSeparatorAlwaysShown == other.decimalSeparatorAlwaysShown;
eq = eq && exponentSignAlwaysShown == other.exponentSignAlwaysShown;
+ eq = eq && currencyAsDecimal == other.currencyAsDecimal;
eq = eq && formatFailIfMoreThanMaxDigits == other.formatFailIfMoreThanMaxDigits;
eq = eq && formatWidth == other.formatWidth;
eq = eq && magnitudeMultiplier == other.magnitudeMultiplier;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.h b/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.h
index 1ce84d9dc38..5f72f649842 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.h
@@ -38,7 +38,7 @@ namespace impl {
// Exported as U_I18N_API because it is a public member field of exported DecimalFormatProperties
// Using this wrapper is rather unfortunate, but is needed on Windows platforms in order to allow
-// for DLL-exporting an fully specified template instantiation.
+// for DLL-exporting a fully specified template instantiation.
class U_I18N_API CurrencyPluralInfoWrapper {
public:
LocalPointer<CurrencyPluralInfo> fPtr;
@@ -52,7 +52,8 @@ public:
}
CurrencyPluralInfoWrapper& operator=(const CurrencyPluralInfoWrapper& other) {
- if (!other.fPtr.isNull()) {
+ if (this != &other && // self-assignment: no-op
+ !other.fPtr.isNull()) {
fPtr.adoptInstead(new CurrencyPluralInfo(*other.fPtr));
}
return *this;
@@ -104,6 +105,7 @@ struct U_I18N_API DecimalFormatProperties : public UMemory {
bool decimalPatternMatchRequired;
bool decimalSeparatorAlwaysShown;
bool exponentSignAlwaysShown;
+ bool currencyAsDecimal;
bool formatFailIfMoreThanMaxDigits; // ICU4C-only
int32_t formatWidth;
int32_t groupingSize;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_decnum.h b/Build/source/libs/icu/icu-src/source/i18n/number_decnum.h
index 3bb8d107807..94a0b31bcb5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_decnum.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_decnum.h
@@ -56,6 +56,13 @@ class U_I18N_API DecNum : public UMemory {
bool isZero() const;
+ /** Is infinity or NaN */
+ bool isSpecial() const;
+
+ bool isInfinity() const;
+
+ bool isNaN() const;
+
void toString(ByteSink& output, UErrorCode& status) const;
inline CharString toCharString(UErrorCode& status) const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
index 8569a36e5b2..fd486afb512 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
@@ -289,6 +289,20 @@ Derived NumberFormatterSettings<Derived>::usage(const StringPiece usage)&& {
}
template<typename Derived>
+Derived NumberFormatterSettings<Derived>::unitDisplayCase(const StringPiece unitDisplayCase) const& {
+ Derived copy(*this);
+ copy.fMacros.unitDisplayCase.set(unitDisplayCase);
+ return copy;
+}
+
+template<typename Derived>
+Derived NumberFormatterSettings<Derived>::unitDisplayCase(const StringPiece unitDisplayCase)&& {
+ Derived move(std::move(*this));
+ move.fMacros.unitDisplayCase.set(unitDisplayCase);
+ return move;
+}
+
+template<typename Derived>
Derived NumberFormatterSettings<Derived>::padding(const Padder& padder) const& {
Derived copy(*this);
copy.fMacros.padder = padder;
@@ -428,6 +442,7 @@ LocalizedNumberFormatter::LocalizedNumberFormatter(NFS<LNF>&& src) U_NOEXCEPT
}
LocalizedNumberFormatter& LocalizedNumberFormatter::operator=(const LNF& other) {
+ if (this == &other) { return *this; } // self-assignment: no-op
NFS<LNF>::operator=(static_cast<const NFS<LNF>&>(other));
UErrorCode localStatus = U_ZERO_ERROR; // Can't bubble up the error
lnfCopyHelper(other, localStatus);
@@ -683,6 +698,10 @@ int32_t LocalizedNumberFormatter::getCallCount() const {
// Note: toFormat defined in number_asformat.cpp
+const DecimalFormatSymbols* LocalizedNumberFormatter::getDecimalFormatSymbols() const {
+ return fMacros.symbols.getDecimalFormatSymbols();
+}
+
#if (U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(_MSC_VER)
// Warning 4661.
#pragma warning(pop)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
index 9a9f3c8b71e..96e3e9e7c69 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
@@ -39,6 +39,7 @@ int32_t NumberFormatterImpl::formatStatic(const MacroProps &macros, UFormattedNu
int32_t length = writeNumber(micros, inValue, outString, 0, status);
length += writeAffixes(micros, outString, 0, length, status);
results->outputUnit = std::move(micros.outputUnit);
+ results->gender = micros.gender;
return length;
}
@@ -63,6 +64,7 @@ int32_t NumberFormatterImpl::format(UFormattedNumberData *results, UErrorCode &s
int32_t length = writeNumber(micros, inValue, outString, 0, status);
length += writeAffixes(micros, outString, 0, length, status);
results->outputUnit = std::move(micros.outputUnit);
+ results->gender = micros.gender;
return length;
}
@@ -137,8 +139,10 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
bool isPermille = utils::unitIsPermille(macros.unit);
bool isCompactNotation = macros.notation.fType == Notation::NTN_COMPACT;
bool isAccounting =
- macros.sign == UNUM_SIGN_ACCOUNTING || macros.sign == UNUM_SIGN_ACCOUNTING_ALWAYS ||
- macros.sign == UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO;
+ macros.sign == UNUM_SIGN_ACCOUNTING ||
+ macros.sign == UNUM_SIGN_ACCOUNTING_ALWAYS ||
+ macros.sign == UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO ||
+ macros.sign == UNUM_SIGN_ACCOUNTING_NEGATIVE;
CurrencyUnit currency(u"", status);
if (isCurrency) {
currency = CurrencyUnit(macros.unit, status); // Restore CurrencyUnit from MeasureUnit
@@ -177,6 +181,9 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
uprv_strncpy(fMicros.nsName, nsName, 8);
fMicros.nsName[8] = 0; // guarantee NUL-terminated
+ // Default gender: none.
+ fMicros.gender = "";
+
// Resolve the symbols. Do this here because currency may need to customize them.
if (macros.symbols.isDecimalFormatSymbols()) {
fMicros.symbols = macros.symbols.getDecimalFormatSymbols();
@@ -246,14 +253,11 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
return nullptr;
}
auto usagePrefsHandler =
- new UsagePrefsHandler(macros.locale, macros.unit, macros.usage.fUsage, chain, status);
+ new UsagePrefsHandler(macros.locale, macros.unit, macros.usage.fValue, chain, status);
fUsagePrefsHandler.adoptInsteadAndCheckErrorCode(usagePrefsHandler, status);
chain = fUsagePrefsHandler.getAlias();
} else if (isMixedUnit) {
- MeasureUnitImpl temp;
- const MeasureUnitImpl &outputUnit = MeasureUnitImpl::forMeasureUnit(macros.unit, temp, status);
- auto unitConversionHandler =
- new UnitConversionHandler(outputUnit.units[0]->build(status), macros.unit, chain, status);
+ auto unitConversionHandler = new UnitConversionHandler(macros.unit, chain, status);
fUnitConversionHandler.adoptInsteadAndCheckErrorCode(unitConversionHandler, status);
chain = fUnitConversionHandler.getAlias();
}
@@ -348,11 +352,12 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
return nullptr;
}
fPatternModifier.adoptInstead(patternModifier);
- patternModifier->setPatternInfo(
- macros.affixProvider != nullptr ? macros.affixProvider
- : static_cast<const AffixPatternProvider*>(fPatternInfo.getAlias()),
- kUndefinedField);
- patternModifier->setPatternAttributes(fMicros.sign, isPermille);
+ const AffixPatternProvider* affixProvider =
+ macros.affixProvider != nullptr
+ ? macros.affixProvider
+ : static_cast<const AffixPatternProvider*>(fPatternInfo.getAlias());
+ patternModifier->setPatternInfo(affixProvider, kUndefinedField);
+ patternModifier->setPatternAttributes(fMicros.sign, isPermille, macros.approximately);
if (patternModifier->needsPlurals()) {
patternModifier->setSymbols(
fMicros.symbols,
@@ -371,12 +376,21 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
return nullptr;
}
+ // currencyAsDecimal
+ if (affixProvider->currencyAsDecimal()) {
+ fMicros.currencyAsDecimal = patternModifier->getCurrencySymbolForUnitWidth(status);
+ }
+
// Outer modifier (CLDR units and currency long names)
if (isCldrUnit) {
+ const char *unitDisplayCase = "";
+ if (macros.unitDisplayCase.isSet()) {
+ unitDisplayCase = macros.unitDisplayCase.fValue;
+ }
if (macros.usage.isSet()) {
fLongNameMultiplexer.adoptInsteadAndCheckErrorCode(
LongNameMultiplexer::forMeasureUnits(
- macros.locale, *fUsagePrefsHandler->getOutputUnits(), unitWidth,
+ macros.locale, *fUsagePrefsHandler->getOutputUnits(), unitWidth, unitDisplayCase,
resolvePluralRules(macros.rules, macros.locale, status), chain, status),
status);
chain = fLongNameMultiplexer.getAlias();
@@ -384,13 +398,27 @@ NumberFormatterImpl::macrosToMicroGenerator(const MacroProps& macros, bool safe,
fMixedUnitLongNameHandler.adoptInsteadAndCheckErrorCode(new MixedUnitLongNameHandler(),
status);
MixedUnitLongNameHandler::forMeasureUnit(
- macros.locale, macros.unit, unitWidth,
+ macros.locale, macros.unit, unitWidth, unitDisplayCase,
resolvePluralRules(macros.rules, macros.locale, status), chain,
fMixedUnitLongNameHandler.getAlias(), status);
chain = fMixedUnitLongNameHandler.getAlias();
} else {
+ MeasureUnit unit = macros.unit;
+ if (!utils::unitIsBaseUnit(macros.perUnit)) {
+ unit = unit.product(macros.perUnit.reciprocal(status), status);
+ // This isn't strictly necessary, but was what we specced out
+ // when perUnit became a backward-compatibility thing:
+ // unit/perUnit use case is only valid if both units are
+ // built-ins, or the product is a built-in.
+ if (uprv_strcmp(unit.getType(), "") == 0 &&
+ (uprv_strcmp(macros.unit.getType(), "") == 0 ||
+ uprv_strcmp(macros.perUnit.getType(), "") == 0)) {
+ status = U_UNSUPPORTED_ERROR;
+ return nullptr;
+ }
+ }
fLongNameHandler.adoptInsteadAndCheckErrorCode(new LongNameHandler(), status);
- LongNameHandler::forMeasureUnit(macros.locale, macros.unit, macros.perUnit, unitWidth,
+ LongNameHandler::forMeasureUnit(macros.locale, unit, unitWidth, unitDisplayCase,
resolvePluralRules(macros.rules, macros.locale, status),
chain, fLongNameHandler.getAlias(), status);
chain = fLongNameHandler.getAlias();
@@ -502,15 +530,27 @@ int32_t NumberFormatterImpl::writeNumber(const MicroProps& micros, DecimalQuanti
// Add the decimal point
if (quantity.getLowerDisplayMagnitude() < 0 || micros.decimal == UNUM_DECIMAL_SEPARATOR_ALWAYS) {
- length += string.insert(
+ if (!micros.currencyAsDecimal.isBogus()) {
+ length += string.insert(
length + index,
- micros.useCurrency ? micros.symbols->getSymbol(
- DecimalFormatSymbols::ENumberFormatSymbol::kMonetarySeparatorSymbol) : micros
- .symbols
- ->getSymbol(
- DecimalFormatSymbols::ENumberFormatSymbol::kDecimalSeparatorSymbol),
+ micros.currencyAsDecimal,
+ {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD},
+ status);
+ } else if (micros.useCurrency) {
+ length += string.insert(
+ length + index,
+ micros.symbols->getSymbol(
+ DecimalFormatSymbols::ENumberFormatSymbol::kMonetarySeparatorSymbol),
+ {UFIELD_CATEGORY_NUMBER, UNUM_DECIMAL_SEPARATOR_FIELD},
+ status);
+ } else {
+ length += string.insert(
+ length + index,
+ micros.symbols->getSymbol(
+ DecimalFormatSymbols::ENumberFormatSymbol::kDecimalSeparatorSymbol),
{UFIELD_CATEGORY_NUMBER, UNUM_DECIMAL_SEPARATOR_FIELD},
status);
+ }
}
// Add the fraction digits
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h b/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
index 5cd549e54a3..d7be1468b6d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
@@ -34,6 +34,12 @@ class NumberFormatterImpl : public UMemory {
NumberFormatterImpl(const MacroProps &macros, UErrorCode &status);
/**
+ * Default constructor; leaves the NumberFormatterImpl in an undefined state.
+ * Takes an error code to prevent the method from being called accidentally.
+ */
+ NumberFormatterImpl(UErrorCode &) {}
+
+ /**
* Builds and evaluates an "unsafe" MicroPropsGenerator, which is cheaper but can be used only once.
*/
static int32_t formatStatic(const MacroProps &macros, UFormattedNumberData *results,
@@ -109,12 +115,6 @@ class NumberFormatterImpl : public UMemory {
LocalPointer<const LongNameMultiplexer> fLongNameMultiplexer;
LocalPointer<const CompactHandler> fCompactHandler;
- // Value objects possibly used by the number formatting pipeline:
- struct Warehouse {
- CurrencySymbols fCurrencySymbols;
- } fWarehouse;
-
-
NumberFormatterImpl(const MacroProps &macros, bool safe, UErrorCode &status);
MicroProps& preProcessUnsafe(DecimalQuantity &inValue, UErrorCode &status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
index 6b1642cfd34..9ba639e67e2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
@@ -47,7 +47,7 @@ Grouper Grouper::forStrategy(UNumberGroupingStrategy grouping) {
case UNUM_GROUPING_THOUSANDS:
return {3, 3, 1, grouping};
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
index 3891d532dea..5a4cf6321c8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
@@ -5,6 +5,8 @@
#if !UCONFIG_NO_FORMATTING
+#include <cstdlib>
+
#include "unicode/simpleformatter.h"
#include "unicode/ures.h"
#include "ureslocs.h"
@@ -39,19 +41,77 @@ constexpr int32_t DNAM_INDEX = StandardPlural::Form::COUNT;
* `per` forms.
*/
constexpr int32_t PER_INDEX = StandardPlural::Form::COUNT + 1;
+/**
+ * Gender of the word, in languages with grammatical gender.
+ */
+constexpr int32_t GENDER_INDEX = StandardPlural::Form::COUNT + 2;
// Number of keys in the array populated by PluralTableSink.
-constexpr int32_t ARRAY_LENGTH = StandardPlural::Form::COUNT + 2;
+constexpr int32_t ARRAY_LENGTH = StandardPlural::Form::COUNT + 3;
+
+// TODO(icu-units#28): load this list from resources, after creating a "&set"
+// function for use in ldml2icu rules.
+const int32_t GENDER_COUNT = 7;
+const char *gGenders[GENDER_COUNT] = {"animate", "common", "feminine", "inanimate",
+ "masculine", "neuter", "personal"};
+
+// Converts a UnicodeString to a const char*, either pointing to a string in
+// gGenders, or pointing to an empty string if an appropriate string was not
+// found.
+const char *getGenderString(UnicodeString uGender, UErrorCode status) {
+ if (uGender.length() == 0) {
+ return "";
+ }
+ CharString gender;
+ gender.appendInvariantChars(uGender, status);
+ if (U_FAILURE(status)) {
+ return "";
+ }
+ int32_t first = 0;
+ int32_t last = GENDER_COUNT;
+ while (first < last) {
+ int32_t mid = (first + last) / 2;
+ int32_t cmp = uprv_strcmp(gender.data(), gGenders[mid]);
+ if (cmp == 0) {
+ return gGenders[mid];
+ } else if (cmp > 0) {
+ first = mid + 1;
+ } else if (cmp < 0) {
+ last = mid;
+ }
+ }
+ // We don't return an error in case our gGenders list is incomplete in
+ // production.
+ //
+ // TODO(icu-units#28): a unit test checking all locales' genders are covered
+ // by gGenders? Else load a complete list of genders found in
+ // grammaticalFeatures in an initOnce.
+ return "";
+}
+// Returns the array index that corresponds to the given pluralKeyword.
static int32_t getIndex(const char* pluralKeyword, UErrorCode& status) {
- // pluralKeyword can also be "dnam" or "per"
- if (uprv_strcmp(pluralKeyword, "dnam") == 0) {
- return DNAM_INDEX;
- } else if (uprv_strcmp(pluralKeyword, "per") == 0) {
- return PER_INDEX;
- } else {
- StandardPlural::Form plural = StandardPlural::fromString(pluralKeyword, status);
- return plural;
+ // pluralKeyword can also be "dnam", "per", or "gender"
+ switch (*pluralKeyword) {
+ case 'd':
+ if (uprv_strcmp(pluralKeyword + 1, "nam") == 0) {
+ return DNAM_INDEX;
+ }
+ break;
+ case 'g':
+ if (uprv_strcmp(pluralKeyword + 1, "ender") == 0) {
+ return GENDER_INDEX;
+ }
+ break;
+ case 'p':
+ if (uprv_strcmp(pluralKeyword + 1, "er") == 0) {
+ return PER_INDEX;
+ }
+ break;
+ default:
+ break;
}
+ StandardPlural::Form plural = StandardPlural::fromString(pluralKeyword, status);
+ return plural;
}
// Selects a string out of the `strings` array which corresponds to the
@@ -74,13 +134,249 @@ static UnicodeString getWithPlural(
return result;
}
+enum PlaceholderPosition { PH_EMPTY, PH_NONE, PH_BEGINNING, PH_MIDDLE, PH_END };
+
+/**
+ * Returns three outputs extracted from pattern.
+ *
+ * @param coreUnit is extracted as per Extract(...) in the spec:
+ * https://unicode.org/reports/tr35/tr35-general.html#compound-units
+ * @param PlaceholderPosition indicates where in the string the placeholder was
+ * found.
+ * @param joinerChar Iff the placeholder was at the beginning or end, joinerChar
+ * contains the space character (if any) that separated the placeholder from
+ * the rest of the pattern. Otherwise, joinerChar is set to NUL. Only one
+ * space character is considered.
+ */
+void extractCorePattern(const UnicodeString &pattern,
+ UnicodeString &coreUnit,
+ PlaceholderPosition &placeholderPosition,
+ UChar &joinerChar) {
+ joinerChar = 0;
+ int32_t len = pattern.length();
+ if (pattern.startsWith(u"{0}", 3)) {
+ placeholderPosition = PH_BEGINNING;
+ if (u_isJavaSpaceChar(pattern[3])) {
+ joinerChar = pattern[3];
+ coreUnit.setTo(pattern, 4, len - 4);
+ } else {
+ coreUnit.setTo(pattern, 3, len - 3);
+ }
+ } else if (pattern.endsWith(u"{0}", 3)) {
+ placeholderPosition = PH_END;
+ if (u_isJavaSpaceChar(pattern[len - 4])) {
+ coreUnit.setTo(pattern, 0, len - 4);
+ joinerChar = pattern[len - 4];
+ } else {
+ coreUnit.setTo(pattern, 0, len - 3);
+ }
+ } else if (pattern.indexOf(u"{0}", 3, 1, len - 2) == -1) {
+ placeholderPosition = PH_NONE;
+ coreUnit = pattern;
+ } else {
+ placeholderPosition = PH_MIDDLE;
+ coreUnit = pattern;
+ }
+}
//////////////////////////
/// BEGIN DATA LOADING ///
//////////////////////////
+// Gets the gender of a built-in unit: unit must be a built-in. Returns an empty
+// string both in case of unknown gender and in case of unknown unit.
+UnicodeString
+getGenderForBuiltin(const Locale &locale, const MeasureUnit &builtinUnit, UErrorCode &status) {
+ LocalUResourceBundlePointer unitsBundle(ures_open(U_ICUDATA_UNIT, locale.getName(), &status));
+ if (U_FAILURE(status)) { return {}; }
+
+ // Map duration-year-person, duration-week-person, etc. to duration-year, duration-week, ...
+ // TODO(ICU-20400): Get duration-*-person data properly with aliases.
+ StringPiece subtypeForResource;
+ int32_t subtypeLen = static_cast<int32_t>(uprv_strlen(builtinUnit.getSubtype()));
+ if (subtypeLen > 7 && uprv_strcmp(builtinUnit.getSubtype() + subtypeLen - 7, "-person") == 0) {
+ subtypeForResource = {builtinUnit.getSubtype(), subtypeLen - 7};
+ } else {
+ subtypeForResource = builtinUnit.getSubtype();
+ }
+
+ CharString key;
+ key.append("units/", status);
+ key.append(builtinUnit.getType(), status);
+ key.append("/", status);
+ key.append(subtypeForResource, status);
+ key.append("/gender", status);
+
+ UErrorCode localStatus = status;
+ int32_t resultLen = 0;
+ const UChar *result =
+ ures_getStringByKeyWithFallback(unitsBundle.getAlias(), key.data(), &resultLen, &localStatus);
+ if (U_SUCCESS(localStatus)) {
+ status = localStatus;
+ return UnicodeString(true, result, resultLen);
+ } else {
+ // TODO(icu-units#28): "$unitRes/gender" does not exist. Do we want to
+ // check whether the parent "$unitRes" exists? Then we could return
+ // U_MISSING_RESOURCE_ERROR for incorrect usage (e.g. builtinUnit not
+ // being a builtin).
+ return {};
+ }
+}
+
+// Loads data from a resource tree with paths matching
+// $key/$pluralForm/$gender/$case, with lateral inheritance for missing cases
+// and genders.
+//
+// An InflectedPluralSink is configured to load data for a specific gender and
+// case. It loads all plural forms, because selection between plural forms is
+// dependent upon the value being formatted.
+//
+// See data/unit/de.txt and data/unit/fr.txt for examples - take a look at
+// units/compound/power2: German has case, French has differences for gender,
+// but no case.
+//
+// TODO(icu-units#138): Conceptually similar to PluralTableSink, however the
+// tree structures are different. After homogenizing the structures, we may be
+// able to unify the two classes.
+//
+// TODO: Spec violation: expects presence of "count" - does not fallback to an
+// absent "count"! If this fallback were added, getCompoundValue could be
+// superseded?
+class InflectedPluralSink : public ResourceSink {
+ public:
+ // Accepts `char*` rather than StringPiece because
+ // ResourceTable::findValue(...) requires a null-terminated `char*`.
+ //
+ // NOTE: outArray MUST have a length of at least ARRAY_LENGTH. No bounds
+ // checking is performed.
+ explicit InflectedPluralSink(const char *gender, const char *caseVariant, UnicodeString *outArray)
+ : gender(gender), caseVariant(caseVariant), outArray(outArray) {
+ // Initialize the array to bogus strings.
+ for (int32_t i = 0; i < ARRAY_LENGTH; i++) {
+ outArray[i].setToBogus();
+ }
+ }
+
+ // See ResourceSink::put().
+ void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) U_OVERRIDE {
+ int32_t pluralIndex = getIndex(key, status);
+ if (U_FAILURE(status)) { return; }
+ if (!outArray[pluralIndex].isBogus()) {
+ // We already have a pattern
+ return;
+ }
+ ResourceTable genderTable = value.getTable(status);
+ ResourceTable caseTable; // This instance has to outlive `value`
+ if (loadForPluralForm(genderTable, caseTable, value, status)) {
+ outArray[pluralIndex] = value.getUnicodeString(status);
+ }
+ }
+
+ private:
+ // Tries to load data for the configured gender from `genderTable`. Returns
+ // true if found, returning the data in `value`. The returned data will be
+ // for the configured gender if found, falling back to "neuter" and
+ // no-gender if not. The caseTable parameter holds the intermediate
+ // ResourceTable for the sake of lifetime management.
+ bool loadForPluralForm(const ResourceTable &genderTable,
+ ResourceTable &caseTable,
+ ResourceValue &value,
+ UErrorCode &status) {
+ if (uprv_strcmp(gender, "") != 0) {
+ if (loadForGender(genderTable, gender, caseTable, value, status)) {
+ return true;
+ }
+ if (uprv_strcmp(gender, "neuter") != 0 &&
+ loadForGender(genderTable, "neuter", caseTable, value, status)) {
+ return true;
+ }
+ }
+ if (loadForGender(genderTable, "_", caseTable, value, status)) {
+ return true;
+ }
+ return false;
+ }
+
+ // Tries to load data for the given gender from `genderTable`. Returns true
+ // if found, returning the data in `value`. The returned data will be for
+ // the configured case if found, falling back to "nominative" and no-case if
+ // not.
+ bool loadForGender(const ResourceTable &genderTable,
+ const char *genderVal,
+ ResourceTable &caseTable,
+ ResourceValue &value,
+ UErrorCode &status) {
+ if (!genderTable.findValue(genderVal, value)) {
+ return false;
+ }
+ caseTable = value.getTable(status);
+ if (uprv_strcmp(caseVariant, "") != 0) {
+ if (loadForCase(caseTable, caseVariant, value)) {
+ return true;
+ }
+ if (uprv_strcmp(caseVariant, "nominative") != 0 &&
+ loadForCase(caseTable, "nominative", value)) {
+ return true;
+ }
+ }
+ if (loadForCase(caseTable, "_", value)) {
+ return true;
+ }
+ return false;
+ }
+
+ // Tries to load data for the given case from `caseTable`. Returns true if
+ // found, returning the data in `value`.
+ bool loadForCase(const ResourceTable &caseTable, const char *caseValue, ResourceValue &value) {
+ if (!caseTable.findValue(caseValue, value)) {
+ return false;
+ }
+ return true;
+ }
+
+ const char *gender;
+ const char *caseVariant;
+ UnicodeString *outArray;
+};
+
+// Fetches localised formatting patterns for the given subKey. See documentation
+// for InflectedPluralSink for details.
+//
+// Data is loaded for the appropriate unit width, with missing data filled in
+// from unitsShort.
+void getInflectedMeasureData(StringPiece subKey,
+ const Locale &locale,
+ const UNumberUnitWidth &width,
+ const char *gender,
+ const char *caseVariant,
+ UnicodeString *outArray,
+ UErrorCode &status) {
+ InflectedPluralSink sink(gender, caseVariant, outArray);
+ LocalUResourceBundlePointer unitsBundle(ures_open(U_ICUDATA_UNIT, locale.getName(), &status));
+ if (U_FAILURE(status)) { return; }
+
+ CharString key;
+ key.append("units", status);
+ if (width == UNUM_UNIT_WIDTH_NARROW) {
+ key.append("Narrow", status);
+ } else if (width == UNUM_UNIT_WIDTH_SHORT) {
+ key.append("Short", status);
+ }
+ key.append("/", status);
+ key.append(subKey, status);
+
+ UErrorCode localStatus = status;
+ ures_getAllChildrenWithFallback(unitsBundle.getAlias(), key.data(), sink, localStatus);
+ if (width == UNUM_UNIT_WIDTH_SHORT) {
+ status = localStatus;
+ return;
+ }
+}
+
class PluralTableSink : public ResourceSink {
public:
+ // NOTE: outArray MUST have a length of at least ARRAY_LENGTH. No bounds
+ // checking is performed.
explicit PluralTableSink(UnicodeString *outArray) : outArray(outArray) {
// Initialize the array to bogus strings.
for (int32_t i = 0; i < ARRAY_LENGTH; i++) {
@@ -89,25 +385,22 @@ class PluralTableSink : public ResourceSink {
}
void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) U_OVERRIDE {
- ResourceTable pluralsTable = value.getTable(status);
+ if (uprv_strcmp(key, "case") == 0) {
+ return;
+ }
+ int32_t index = getIndex(key, status);
if (U_FAILURE(status)) { return; }
- for (int32_t i = 0; pluralsTable.getKeyAndValue(i, key, value); ++i) {
- int32_t index = getIndex(key, status);
- if (U_FAILURE(status)) { return; }
- if (!outArray[index].isBogus()) {
- continue;
- }
- outArray[index] = value.getUnicodeString(status);
- if (U_FAILURE(status)) { return; }
+ if (!outArray[index].isBogus()) {
+ return;
}
+ outArray[index] = value.getUnicodeString(status);
+ if (U_FAILURE(status)) { return; }
}
private:
UnicodeString *outArray;
};
-// NOTE: outArray MUST have room for all StandardPlural values. No bounds checking is performed.
-
/**
* Populates outArray with `locale`-specific values for `unit` through use of
* PluralTableSink. Only the set of basic units are supported!
@@ -116,24 +409,47 @@ class PluralTableSink : public ResourceSink {
* UNUM_UNIT_WIDTH_NARROW), or just *unitsShort* (for width
* UNUM_UNIT_WIDTH_SHORT). For other widths, it reads just "units".
*
- * @param unit must have a type and subtype (i.e. it must be a unit listed in
- * gTypes and gSubTypes in measunit.cpp).
+ * @param unit must be a built-in unit, i.e. must have a type and subtype,
+ * listed in gTypes and gSubTypes in measunit.cpp.
+ * @param unitDisplayCase the empty string and "nominative" are treated the
+ * same. For other cases, strings for the requested case are used if found.
+ * (For any missing case-specific data, we fall back to nominative.)
* @param outArray must be of fixed length ARRAY_LENGTH.
*/
-void getMeasureData(const Locale &locale, const MeasureUnit &unit, const UNumberUnitWidth &width,
- UnicodeString *outArray, UErrorCode &status) {
+void getMeasureData(const Locale &locale,
+ const MeasureUnit &unit,
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ UnicodeString *outArray,
+ UErrorCode &status) {
PluralTableSink sink(outArray);
LocalUResourceBundlePointer unitsBundle(ures_open(U_ICUDATA_UNIT, locale.getName(), &status));
if (U_FAILURE(status)) { return; }
+ CharString subKey;
+ subKey.append("/", status);
+ subKey.append(unit.getType(), status);
+ subKey.append("/", status);
+
// Map duration-year-person, duration-week-person, etc. to duration-year, duration-week, ...
// TODO(ICU-20400): Get duration-*-person data properly with aliases.
- StringPiece subtypeForResource;
int32_t subtypeLen = static_cast<int32_t>(uprv_strlen(unit.getSubtype()));
if (subtypeLen > 7 && uprv_strcmp(unit.getSubtype() + subtypeLen - 7, "-person") == 0) {
- subtypeForResource = {unit.getSubtype(), subtypeLen - 7};
+ subKey.append({unit.getSubtype(), subtypeLen - 7}, status);
} else {
- subtypeForResource = unit.getSubtype();
+ subKey.append({unit.getSubtype(), subtypeLen}, status);
+ }
+
+ if (width != UNUM_UNIT_WIDTH_FULL_NAME) {
+ UErrorCode localStatus = status;
+ CharString genderKey;
+ genderKey.append("units", localStatus);
+ genderKey.append(subKey, localStatus);
+ genderKey.append("/gender", localStatus);
+ StackUResourceBundle fillIn;
+ ures_getByKeyWithFallback(unitsBundle.getAlias(), genderKey.data(), fillIn.getAlias(),
+ &localStatus);
+ outArray[GENDER_INDEX] = ures_getUnicodeString(fillIn.getAlias(), &localStatus);
}
CharString key;
@@ -143,30 +459,41 @@ void getMeasureData(const Locale &locale, const MeasureUnit &unit, const UNumber
} else if (width == UNUM_UNIT_WIDTH_SHORT) {
key.append("Short", status);
}
- key.append("/", status);
- key.append(unit.getType(), status);
- key.append("/", status);
- key.append(subtypeForResource, status);
+ key.append(subKey, status);
+
+ // Grab desired case first, if available. Then grab no-case data to fill in
+ // the gaps.
+ if (width == UNUM_UNIT_WIDTH_FULL_NAME && unitDisplayCase[0] != 0) {
+ CharString caseKey;
+ caseKey.append(key, status);
+ caseKey.append("/case/", status);
+ caseKey.append(unitDisplayCase, status);
+ UErrorCode localStatus = U_ZERO_ERROR;
+ // TODO(icu-units#138): our fallback logic is not spec-compliant:
+ // lateral fallback should happen before locale fallback. Switch to
+ // getInflectedMeasureData after homogenizing data format? Find a unit
+ // test case that demonstrates the incorrect fallback logic (via
+ // regional variant of an inflected language?)
+ ures_getAllChildrenWithFallback(unitsBundle.getAlias(), caseKey.data(), sink, localStatus);
+ }
+
+ // TODO(icu-units#138): our fallback logic is not spec-compliant: we
+ // check the given case, then go straight to the no-case data. The spec
+ // states we should first look for case="nominative". As part of #138,
+ // either get the spec changed, or add unit tests that warn us if
+ // case="nominative" data differs from no-case data?
UErrorCode localStatus = U_ZERO_ERROR;
- ures_getAllItemsWithFallback(unitsBundle.getAlias(), key.data(), sink, localStatus);
+ ures_getAllChildrenWithFallback(unitsBundle.getAlias(), key.data(), sink, localStatus);
if (width == UNUM_UNIT_WIDTH_SHORT) {
if (U_FAILURE(localStatus)) {
status = localStatus;
}
return;
}
-
- // TODO(ICU-13353): The fallback to short does not work in ICU4C.
- // Manually fall back to short (this is done automatically in Java).
- key.clear();
- key.append("unitsShort/", status);
- key.append(unit.getType(), status);
- key.append("/", status);
- key.append(subtypeForResource, status);
- ures_getAllItemsWithFallback(unitsBundle.getAlias(), key.data(), sink, status);
}
+// NOTE: outArray MUST have a length of at least ARRAY_LENGTH.
void getCurrencyLongNameData(const Locale &locale, const CurrencyUnit &currency, UnicodeString *outArray,
UErrorCode &status) {
// In ICU4J, this method gets a CurrencyData from CurrencyData.provider.
@@ -174,7 +501,7 @@ void getCurrencyLongNameData(const Locale &locale, const CurrencyUnit &currency,
PluralTableSink sink(outArray);
LocalUResourceBundlePointer unitsBundle(ures_open(U_ICUDATA_CURR, locale.getName(), &status));
if (U_FAILURE(status)) { return; }
- ures_getAllItemsWithFallback(unitsBundle.getAlias(), "CurrencyUnitPatterns", sink, status);
+ ures_getAllChildrenWithFallback(unitsBundle.getAlias(), "CurrencyUnitPatterns", sink, status);
if (U_FAILURE(status)) { return; }
for (int32_t i = 0; i < StandardPlural::Form::COUNT; i++) {
UnicodeString &pattern = outArray[i];
@@ -195,7 +522,10 @@ void getCurrencyLongNameData(const Locale &locale, const CurrencyUnit &currency,
}
}
-UnicodeString getPerUnitFormat(const Locale& locale, const UNumberUnitWidth &width, UErrorCode& status) {
+UnicodeString getCompoundValue(StringPiece compoundKey,
+ const Locale &locale,
+ const UNumberUnitWidth &width,
+ UErrorCode &status) {
LocalUResourceBundlePointer unitsBundle(ures_open(U_ICUDATA_UNIT, locale.getName(), &status));
if (U_FAILURE(status)) { return {}; }
CharString key;
@@ -205,119 +535,893 @@ UnicodeString getPerUnitFormat(const Locale& locale, const UNumberUnitWidth &wid
} else if (width == UNUM_UNIT_WIDTH_SHORT) {
key.append("Short", status);
}
- key.append("/compound/per", status);
+ key.append("/compound/", status);
+ key.append(compoundKey, status);
+
+ UErrorCode localStatus = status;
int32_t len = 0;
- const UChar* ptr = ures_getStringByKeyWithFallback(unitsBundle.getAlias(), key.data(), &len, &status);
+ const UChar *ptr =
+ ures_getStringByKeyWithFallback(unitsBundle.getAlias(), key.data(), &len, &localStatus);
+ if (U_FAILURE(localStatus) && width != UNUM_UNIT_WIDTH_SHORT) {
+ // Fall back to short, which contains more compound data
+ key.clear();
+ key.append("unitsShort/compound/", status);
+ key.append(compoundKey, status);
+ ptr = ures_getStringByKeyWithFallback(unitsBundle.getAlias(), key.data(), &len, &status);
+ } else {
+ status = localStatus;
+ }
+ if (U_FAILURE(status)) {
+ return {};
+ }
return UnicodeString(ptr, len);
}
+/**
+ * Loads and applies deriveComponent rules from CLDR's grammaticalFeatures.xml.
+ *
+ * Consider a deriveComponent rule that looks like this:
+ *
+ * <deriveComponent feature="case" structure="per" value0="compound" value1="nominative"/>
+ *
+ * Instantiating an instance as follows:
+ *
+ * DerivedComponents d(loc, "case", "per");
+ *
+ * Applying the rule in the XML element above, `d.value0("foo")` will be "foo",
+ * and `d.value1("foo")` will be "nominative".
+ *
+ * The values returned by value0(...) and value1(...) are valid only while the
+ * instance exists. In case of any kind of failure, value0(...) and value1(...)
+ * will return "".
+ */
+class DerivedComponents {
+ public:
+ /**
+ * Constructor.
+ *
+ * The feature and structure parameters must be null-terminated. The string
+ * referenced by compoundValue must exist for longer than the
+ * DerivedComponents instance.
+ */
+ DerivedComponents(const Locale &locale, const char *feature, const char *structure) {
+ StackUResourceBundle derivationsBundle, stackBundle;
+ ures_openDirectFillIn(derivationsBundle.getAlias(), NULL, "grammaticalFeatures", &status);
+ ures_getByKey(derivationsBundle.getAlias(), "grammaticalData", derivationsBundle.getAlias(),
+ &status);
+ ures_getByKey(derivationsBundle.getAlias(), "derivations", derivationsBundle.getAlias(),
+ &status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ UErrorCode localStatus = U_ZERO_ERROR;
+ // TODO(icu-units#28): use standard normal locale resolution algorithms
+ // rather than just grabbing language:
+ ures_getByKey(derivationsBundle.getAlias(), locale.getLanguage(), stackBundle.getAlias(),
+ &localStatus);
+ // TODO(icu-units#28):
+ // - code currently assumes if the locale exists, the rules are there -
+ // instead of falling back to root when the requested rule is missing.
+ // - investigate ures.h functions, see if one that uses res_findResource()
+ // might be better (or use res_findResource directly), or maybe help
+ // improve ures documentation to guide function selection?
+ if (localStatus == U_MISSING_RESOURCE_ERROR) {
+ ures_getByKey(derivationsBundle.getAlias(), "root", stackBundle.getAlias(), &status);
+ } else {
+ status = localStatus;
+ }
+ ures_getByKey(stackBundle.getAlias(), "component", stackBundle.getAlias(), &status);
+ ures_getByKey(stackBundle.getAlias(), feature, stackBundle.getAlias(), &status);
+ ures_getByKey(stackBundle.getAlias(), structure, stackBundle.getAlias(), &status);
+ UnicodeString val0 = ures_getUnicodeStringByIndex(stackBundle.getAlias(), 0, &status);
+ UnicodeString val1 = ures_getUnicodeStringByIndex(stackBundle.getAlias(), 1, &status);
+ if (U_SUCCESS(status)) {
+ if (val0.compare(UnicodeString(u"compound")) == 0) {
+ compound0_ = true;
+ } else {
+ compound0_ = false;
+ value0_.appendInvariantChars(val0, status);
+ }
+ if (val1.compare(UnicodeString(u"compound")) == 0) {
+ compound1_ = true;
+ } else {
+ compound1_ = false;
+ value1_.appendInvariantChars(val1, status);
+ }
+ }
+ }
+
+ // Returns a StringPiece that is only valid as long as the instance exists.
+ StringPiece value0(const StringPiece compoundValue) const {
+ return compound0_ ? compoundValue : value0_.toStringPiece();
+ }
+
+ // Returns a StringPiece that is only valid as long as the instance exists.
+ StringPiece value1(const StringPiece compoundValue) const {
+ return compound1_ ? compoundValue : value1_.toStringPiece();
+ }
+
+ // Returns a char* that is only valid as long as the instance exists.
+ const char *value0(const char *compoundValue) const {
+ return compound0_ ? compoundValue : value0_.data();
+ }
+
+ // Returns a char* that is only valid as long as the instance exists.
+ const char *value1(const char *compoundValue) const {
+ return compound1_ ? compoundValue : value1_.data();
+ }
+
+ private:
+ UErrorCode status = U_ZERO_ERROR;
+
+ // Holds strings referred to by value0 and value1;
+ bool compound0_ = false, compound1_ = false;
+ CharString value0_, value1_;
+};
+
+// TODO(icu-units#28): test somehow? Associate with an ICU ticket for adding
+// testsuite support for testing with synthetic data?
+/**
+ * Loads and returns the value in rules that look like these:
+ *
+ * <deriveCompound feature="gender" structure="per" value="0"/>
+ * <deriveCompound feature="gender" structure="times" value="1"/>
+ *
+ * Currently a fake example, but spec compliant:
+ * <deriveCompound feature="gender" structure="power" value="feminine"/>
+ *
+ * NOTE: If U_FAILURE(status), returns an empty string.
+ */
+UnicodeString
+getDeriveCompoundRule(Locale locale, const char *feature, const char *structure, UErrorCode &status) {
+ StackUResourceBundle derivationsBundle, stackBundle;
+ ures_openDirectFillIn(derivationsBundle.getAlias(), NULL, "grammaticalFeatures", &status);
+ ures_getByKey(derivationsBundle.getAlias(), "grammaticalData", derivationsBundle.getAlias(),
+ &status);
+ ures_getByKey(derivationsBundle.getAlias(), "derivations", derivationsBundle.getAlias(), &status);
+ // TODO: use standard normal locale resolution algorithms rather than just grabbing language:
+ ures_getByKey(derivationsBundle.getAlias(), locale.getLanguage(), stackBundle.getAlias(), &status);
+ // TODO:
+ // - code currently assumes if the locale exists, the rules are there -
+ // instead of falling back to root when the requested rule is missing.
+ // - investigate ures.h functions, see if one that uses res_findResource()
+ // might be better (or use res_findResource directly), or maybe help
+ // improve ures documentation to guide function selection?
+ if (status == U_MISSING_RESOURCE_ERROR) {
+ status = U_ZERO_ERROR;
+ ures_getByKey(derivationsBundle.getAlias(), "root", stackBundle.getAlias(), &status);
+ }
+ ures_getByKey(stackBundle.getAlias(), "compound", stackBundle.getAlias(), &status);
+ ures_getByKey(stackBundle.getAlias(), feature, stackBundle.getAlias(), &status);
+ UnicodeString uVal = ures_getUnicodeStringByKey(stackBundle.getAlias(), structure, &status);
+ if (U_FAILURE(status)) {
+ return {};
+ }
+ U_ASSERT(!uVal.isBogus());
+ return uVal;
+}
+
+// Returns the gender string for structures following these rules:
+//
+// <deriveCompound feature="gender" structure="per" value="0"/>
+// <deriveCompound feature="gender" structure="times" value="1"/>
+//
+// Fake example:
+// <deriveCompound feature="gender" structure="power" value="feminine"/>
+//
+// data0 and data1 should be pattern arrays (UnicodeString[ARRAY_SIZE]) that
+// correspond to value="0" and value="1".
+//
+// Pass a nullptr to data1 if the structure has no concept of value="1" (e.g.
+// "prefix" doesn't).
+UnicodeString getDerivedGender(Locale locale,
+ const char *structure,
+ UnicodeString *data0,
+ UnicodeString *data1,
+ UErrorCode &status) {
+ UnicodeString val = getDeriveCompoundRule(locale, "gender", structure, status);
+ if (val.length() == 1) {
+ switch (val[0]) {
+ case u'0':
+ return data0[GENDER_INDEX];
+ case u'1':
+ if (data1 == nullptr) {
+ return {};
+ }
+ return data1[GENDER_INDEX];
+ }
+ }
+ return val;
+}
+
////////////////////////
/// END DATA LOADING ///
////////////////////////
-} // namespace
+// TODO: promote this somewhere? It's based on patternprops.cpp' trimWhitespace
+const UChar *trimSpaceChars(const UChar *s, int32_t &length) {
+ if (length <= 0 || (!u_isJavaSpaceChar(s[0]) && !u_isJavaSpaceChar(s[length - 1]))) {
+ return s;
+ }
+ int32_t start = 0;
+ int32_t limit = length;
+ while (start < limit && u_isJavaSpaceChar(s[start])) {
+ ++start;
+ }
+ if (start < limit) {
+ // There is non-white space at start; we will not move limit below that,
+ // so we need not test start<limit in the loop.
+ while (u_isJavaSpaceChar(s[limit - 1])) {
+ --limit;
+ }
+ }
+ length = limit - start;
+ return s + start;
+}
-void LongNameHandler::forMeasureUnit(const Locale &loc, const MeasureUnit &unitRef,
- const MeasureUnit &perUnit, const UNumberUnitWidth &width,
- const PluralRules *rules, const MicroPropsGenerator *parent,
- LongNameHandler *fillIn, UErrorCode &status) {
- // Not valid for mixed units that aren't built-in units, and there should
- // not be any built-in mixed units!
- U_ASSERT(uprv_strcmp(unitRef.getType(), "") != 0 ||
- unitRef.getComplexity(status) != UMEASURE_UNIT_MIXED);
- U_ASSERT(fillIn != nullptr);
+/**
+ * Calculates the gender of an arbitrary unit: this is the *second*
+ * implementation of an algorithm to do this:
+ *
+ * Gender is also calculated in "processPatternTimes": that code path is "bottom
+ * up", loading the gender for every component of a compound unit (at the same
+ * time as loading the Long Names formatting patterns), even if the gender is
+ * unneeded, then combining the single units' genders into the compound unit's
+ * gender, according to the rules. This algorithm does a lazier "top-down"
+ * evaluation, starting with the compound unit, calculating which single unit's
+ * gender is needed by breaking it down according to the rules, and then loading
+ * only the gender of the one single unit who's gender is needed.
+ *
+ * For future refactorings:
+ * 1. we could drop processPatternTimes' gender calculation and just call this
+ * function: for UNUM_UNIT_WIDTH_FULL_NAME, the unit gender is in the very
+ * same table as the formatting patterns, so loading it then may be
+ * efficient. For other unit widths however, it needs to be explicitly looked
+ * up anyway.
+ * 2. alternatively, if CLDR is providing all the genders we need such that we
+ * don't need to calculate them in ICU anymore, we could drop this function
+ * and keep only processPatternTimes' calculation. (And optimise it a bit?)
+ *
+ * @param locale The desired locale.
+ * @param unit The measure unit to calculate the gender for.
+ * @return The gender string for the unit, or an empty string if unknown or
+ * ungendered.
+ */
+UnicodeString calculateGenderForUnit(const Locale &locale, const MeasureUnit &unit, UErrorCode &status) {
+ MeasureUnitImpl impl;
+ const MeasureUnitImpl& mui = MeasureUnitImpl::forMeasureUnit(unit, impl, status);
+ int32_t singleUnitIndex = 0;
+ if (mui.complexity == UMEASURE_UNIT_COMPOUND) {
+ int32_t startSlice = 0;
+ // inclusive
+ int32_t endSlice = mui.singleUnits.length()-1;
+ U_ASSERT(endSlice > 0); // Else it would not be COMPOUND
+ if (mui.singleUnits[endSlice]->dimensionality < 0) {
+ // We have a -per- construct
+ UnicodeString perRule = getDeriveCompoundRule(locale, "gender", "per", status);
+ if (perRule.length() != 1) {
+ // Fixed gender for -per- units
+ return perRule;
+ }
+ if (perRule[0] == u'1') {
+ // Find the start of the denominator. We already know there is one.
+ while (mui.singleUnits[startSlice]->dimensionality >= 0) {
+ startSlice++;
+ }
+ } else {
+ // Find the end of the numerator
+ while (endSlice >= 0 && mui.singleUnits[endSlice]->dimensionality < 0) {
+ endSlice--;
+ }
+ if (endSlice < 0) {
+ // We have only a denominator, e.g. "per-second".
+ // TODO(icu-units#28): find out what gender to use in the
+ // absence of a first value - mentioned in CLDR-14253.
+ return {};
+ }
+ }
+ }
+ if (endSlice > startSlice) {
+ // We have a -times- construct
+ UnicodeString timesRule = getDeriveCompoundRule(locale, "gender", "times", status);
+ if (timesRule.length() != 1) {
+ // Fixed gender for -times- units
+ return timesRule;
+ }
+ if (timesRule[0] == u'0') {
+ endSlice = startSlice;
+ } else {
+ // We assume timesRule[0] == u'1'
+ startSlice = endSlice;
+ }
+ }
+ U_ASSERT(startSlice == endSlice);
+ singleUnitIndex = startSlice;
+ } else if (mui.complexity == UMEASURE_UNIT_MIXED) {
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return {};
+ } else {
+ U_ASSERT(mui.complexity == UMEASURE_UNIT_SINGLE);
+ U_ASSERT(mui.singleUnits.length() == 1);
+ }
- MeasureUnit unit = unitRef;
- if (uprv_strcmp(perUnit.getType(), "none") != 0) {
- // Compound unit: first try to simplify (e.g., meters per second is its own unit).
- MeasureUnit simplified = unit.product(perUnit.reciprocal(status), status);
- if (uprv_strcmp(simplified.getType(), "") != 0) {
- unit = simplified;
- } else {
- // No simplified form is available.
- forCompoundUnit(loc, unit, perUnit, width, rules, parent, fillIn, status);
+ // Now we know which singleUnit's gender we want
+ const SingleUnitImpl *singleUnit = mui.singleUnits[singleUnitIndex];
+ // Check for any power-prefix gender override:
+ if (std::abs(singleUnit->dimensionality) != 1) {
+ UnicodeString powerRule = getDeriveCompoundRule(locale, "gender", "power", status);
+ if (powerRule.length() != 1) {
+ // Fixed gender for -powN- units
+ return powerRule;
+ }
+ // powerRule[0] == u'0'; u'1' not currently in spec.
+ }
+ // Check for any SI and binary prefix gender override:
+ if (std::abs(singleUnit->dimensionality) != 1) {
+ UnicodeString prefixRule = getDeriveCompoundRule(locale, "gender", "prefix", status);
+ if (prefixRule.length() != 1) {
+ // Fixed gender for -powN- units
+ return prefixRule;
+ }
+ // prefixRule[0] == u'0'; u'1' not currently in spec.
+ }
+ // Now we've boiled it down to the gender of one simple unit identifier:
+ return getGenderForBuiltin(locale, MeasureUnit::forIdentifier(singleUnit->getSimpleUnitID(), status),
+ status);
+}
+
+void maybeCalculateGender(const Locale &locale,
+ const MeasureUnit &unitRef,
+ UnicodeString *outArray,
+ UErrorCode &status) {
+ if (outArray[GENDER_INDEX].isBogus()) {
+ UnicodeString meterGender = getGenderForBuiltin(locale, MeasureUnit::getMeter(), status);
+ if (meterGender.isEmpty()) {
+ // No gender for meter: assume ungendered language
return;
}
+ // We have a gendered language, but are lacking gender for unitRef.
+ outArray[GENDER_INDEX] = calculateGenderForUnit(locale, unitRef, status);
}
+}
- if (uprv_strcmp(unit.getType(), "") == 0) {
- // TODO(ICU-20941): Unsanctioned unit. Not yet fully supported. Set an
- // error code. Once we support not-built-in units here, unitRef may be
- // anything, but if not built-in, perUnit has to be "none".
- status = U_UNSUPPORTED_ERROR;
+} // namespace
+
+void LongNameHandler::forMeasureUnit(const Locale &loc,
+ const MeasureUnit &unitRef,
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ const PluralRules *rules,
+ const MicroPropsGenerator *parent,
+ LongNameHandler *fillIn,
+ UErrorCode &status) {
+ // From https://unicode.org/reports/tr35/tr35-general.html#compound-units -
+ // Points 1 and 2 are mostly handled by MeasureUnit:
+ //
+ // 1. If the unitId is empty or invalid, fail
+ // 2. Put the unitId into normalized order
+ U_ASSERT(fillIn != nullptr);
+
+ if (uprv_strcmp(unitRef.getType(), "") != 0) {
+ // Handling built-in units:
+ //
+ // 3. Set result to be getValue(unitId with length, pluralCategory, caseVariant)
+ // - If result is not empty, return it
+ UnicodeString simpleFormats[ARRAY_LENGTH];
+ getMeasureData(loc, unitRef, width, unitDisplayCase, simpleFormats, status);
+ maybeCalculateGender(loc, unitRef, simpleFormats, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ fillIn->rules = rules;
+ fillIn->parent = parent;
+ fillIn->simpleFormatsToModifiers(simpleFormats,
+ {UFIELD_CATEGORY_NUMBER, UNUM_MEASURE_UNIT_FIELD}, status);
+ if (!simpleFormats[GENDER_INDEX].isBogus()) {
+ fillIn->gender = getGenderString(simpleFormats[GENDER_INDEX], status);
+ }
return;
- }
- UnicodeString simpleFormats[ARRAY_LENGTH];
- getMeasureData(loc, unit, width, simpleFormats, status);
- if (U_FAILURE(status)) {
+ // TODO(icu-units#145): figure out why this causes a failure in
+ // format/MeasureFormatTest/TestIndividualPluralFallback and other
+ // tests, when it should have been an alternative for the lines above:
+
+ // forArbitraryUnit(loc, unitRef, width, unitDisplayCase, fillIn, status);
+ // fillIn->rules = rules;
+ // fillIn->parent = parent;
+ // return;
+ } else {
+ // Check if it is a MeasureUnit this constructor handles: this
+ // constructor does not handle mixed units
+ U_ASSERT(unitRef.getComplexity(status) != UMEASURE_UNIT_MIXED);
+ forArbitraryUnit(loc, unitRef, width, unitDisplayCase, fillIn, status);
+ fillIn->rules = rules;
+ fillIn->parent = parent;
return;
}
- fillIn->rules = rules;
- fillIn->parent = parent;
- fillIn->simpleFormatsToModifiers(simpleFormats, {UFIELD_CATEGORY_NUMBER, UNUM_MEASURE_UNIT_FIELD},
- status);
}
-void LongNameHandler::forCompoundUnit(const Locale &loc, const MeasureUnit &unit,
- const MeasureUnit &perUnit, const UNumberUnitWidth &width,
- const PluralRules *rules, const MicroPropsGenerator *parent,
- LongNameHandler *fillIn, UErrorCode &status) {
- if (uprv_strcmp(unit.getType(), "") == 0 || uprv_strcmp(perUnit.getType(), "") == 0) {
- // TODO(ICU-20941): Unsanctioned unit. Not yet fully supported. Set an
- // error code. Once we support not-built-in units here, unitRef may be
- // anything, but if not built-in, perUnit has to be "none".
- status = U_UNSUPPORTED_ERROR;
+void LongNameHandler::forArbitraryUnit(const Locale &loc,
+ const MeasureUnit &unitRef,
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ LongNameHandler *fillIn,
+ UErrorCode &status) {
+ if (U_FAILURE(status)) {
return;
}
if (fillIn == nullptr) {
status = U_INTERNAL_PROGRAM_ERROR;
return;
}
- UnicodeString primaryData[ARRAY_LENGTH];
- getMeasureData(loc, unit, width, primaryData, status);
- if (U_FAILURE(status)) {
- return;
- }
- UnicodeString secondaryData[ARRAY_LENGTH];
- getMeasureData(loc, perUnit, width, secondaryData, status);
- if (U_FAILURE(status)) {
- return;
+
+ // Numbered list items are from the algorithms at
+ // https://unicode.org/reports/tr35/tr35-general.html#compound-units:
+ //
+ // 4. Divide the unitId into numerator (the part before the "-per-") and
+ // denominator (the part after the "-per-). If both are empty, fail
+ MeasureUnitImpl unit;
+ MeasureUnitImpl perUnit;
+ {
+ MeasureUnitImpl fullUnit = MeasureUnitImpl::forMeasureUnitMaybeCopy(unitRef, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ for (int32_t i = 0; i < fullUnit.singleUnits.length(); i++) {
+ SingleUnitImpl *subUnit = fullUnit.singleUnits[i];
+ if (subUnit->dimensionality > 0) {
+ unit.appendSingleUnit(*subUnit, status);
+ } else {
+ subUnit->dimensionality *= -1;
+ perUnit.appendSingleUnit(*subUnit, status);
+ }
+ }
}
- UnicodeString perUnitFormat;
- if (!secondaryData[PER_INDEX].isBogus()) {
- perUnitFormat = secondaryData[PER_INDEX];
+ // TODO(icu-units#28): check placeholder logic, see if it needs to be
+ // present here instead of only in processPatternTimes:
+ //
+ // 5. Set both globalPlaceholder and globalPlaceholderPosition to be empty
+
+ DerivedComponents derivedPerCases(loc, "case", "per");
+
+ // 6. numeratorUnitString
+ UnicodeString numeratorUnitData[ARRAY_LENGTH];
+ processPatternTimes(std::move(unit), loc, width, derivedPerCases.value0(unitDisplayCase),
+ numeratorUnitData, status);
+
+ // 7. denominatorUnitString
+ UnicodeString denominatorUnitData[ARRAY_LENGTH];
+ processPatternTimes(std::move(perUnit), loc, width, derivedPerCases.value1(unitDisplayCase),
+ denominatorUnitData, status);
+
+ // TODO(icu-units#139):
+ // - implement DerivedComponents for "plural/times" and "plural/power":
+ // French has different rules, we'll be producing the wrong results
+ // currently. (Prove via tests!)
+ // - implement DerivedComponents for "plural/per", "plural/prefix",
+ // "case/times", "case/power", and "case/prefix" - although they're
+ // currently hardcoded. Languages with different rules are surely on the
+ // way.
+ //
+ // Currently we only use "case/per", "plural/times", "case/times", and
+ // "case/power".
+ //
+ // This may have impact on multiSimpleFormatsToModifiers(...) below too?
+ // These rules are currently (ICU 69) all the same and hard-coded below.
+ UnicodeString perUnitPattern;
+ if (!denominatorUnitData[PER_INDEX].isBogus()) {
+ // If we have no denominator, we obtain the empty string:
+ perUnitPattern = denominatorUnitData[PER_INDEX];
} else {
- UnicodeString rawPerUnitFormat = getPerUnitFormat(loc, width, status);
+ // 8. Set perPattern to be getValue([per], locale, length)
+ UnicodeString rawPerUnitFormat = getCompoundValue("per", loc, width, status);
+ // rawPerUnitFormat is something like "{0} per {1}"; we need to substitute in the secondary unit.
+ SimpleFormatter perPatternFormatter(rawPerUnitFormat, 2, 2, status);
if (U_FAILURE(status)) {
return;
}
- // rawPerUnitFormat is something like "{0}/{1}"; we need to substitute in the secondary unit.
- SimpleFormatter compiled(rawPerUnitFormat, 2, 2, status);
+ // Plural and placeholder handling for 7. denominatorUnitString:
+ // TODO(icu-units#139): hardcoded:
+ // <deriveComponent feature="plural" structure="per" value0="compound" value1="one"/>
+ UnicodeString denominatorFormat =
+ getWithPlural(denominatorUnitData, StandardPlural::Form::ONE, status);
+ // Some "one" pattern may not contain "{0}". For example in "ar" or "ne" locale.
+ SimpleFormatter denominatorFormatter(denominatorFormat, 0, 1, status);
if (U_FAILURE(status)) {
return;
}
- UnicodeString secondaryFormat = getWithPlural(secondaryData, StandardPlural::Form::ONE, status);
+ UnicodeString denominatorPattern = denominatorFormatter.getTextWithNoArguments();
+ int32_t trimmedLen = denominatorPattern.length();
+ const UChar *trimmed = trimSpaceChars(denominatorPattern.getBuffer(), trimmedLen);
+ UnicodeString denominatorString(false, trimmed, trimmedLen);
+ // 9. If the denominatorString is empty, set result to
+ // [numeratorString], otherwise set result to format(perPattern,
+ // numeratorString, denominatorString)
+ //
+ // TODO(icu-units#28): Why does UnicodeString need to be explicit in the
+ // following line?
+ perPatternFormatter.format(UnicodeString(u"{0}"), denominatorString, perUnitPattern, status);
if (U_FAILURE(status)) {
return;
}
- // Some "one" pattern may not contain "{0}". For example in "ar" or "ne" locale.
- SimpleFormatter secondaryCompiled(secondaryFormat, 0, 1, status);
- if (U_FAILURE(status)) {
+ }
+ if (perUnitPattern.length() == 0) {
+ fillIn->simpleFormatsToModifiers(numeratorUnitData,
+ {UFIELD_CATEGORY_NUMBER, UNUM_MEASURE_UNIT_FIELD}, status);
+ } else {
+ fillIn->multiSimpleFormatsToModifiers(numeratorUnitData, perUnitPattern,
+ {UFIELD_CATEGORY_NUMBER, UNUM_MEASURE_UNIT_FIELD}, status);
+ }
+
+ // Gender
+ //
+ // TODO(icu-units#28): find out what gender to use in the absence of a first
+ // value - e.g. what's the gender of "per-second"? Mentioned in CLDR-14253.
+ //
+ // gender/per deriveCompound rules don't say:
+ // <deriveCompound feature="gender" structure="per" value="0"/> <!-- gender(gram-per-meter) ← gender(gram) -->
+ fillIn->gender = getGenderString(
+ getDerivedGender(loc, "per", numeratorUnitData, denominatorUnitData, status), status);
+}
+
+void LongNameHandler::processPatternTimes(MeasureUnitImpl &&productUnit,
+ Locale loc,
+ const UNumberUnitWidth &width,
+ const char *caseVariant,
+ UnicodeString *outArray,
+ UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (productUnit.complexity == UMEASURE_UNIT_MIXED) {
+ // These are handled by MixedUnitLongNameHandler
+ status = U_UNSUPPORTED_ERROR;
+ return;
+ }
+
+#if U_DEBUG
+ for (int32_t pluralIndex = 0; pluralIndex < ARRAY_LENGTH; pluralIndex++) {
+ U_ASSERT(outArray[pluralIndex].length() == 0);
+ U_ASSERT(!outArray[pluralIndex].isBogus());
+ }
+#endif
+
+ if (productUnit.identifier.isEmpty()) {
+ // TODO(icu-units#28): consider when serialize should be called.
+ // identifier might also be empty for MeasureUnit().
+ productUnit.serialize(status);
+ }
+ if (U_FAILURE(status)) {
+ return;
+ }
+ if (productUnit.identifier.length() == 0) {
+ // MeasureUnit(): no units: return empty strings.
+ return;
+ }
+
+ MeasureUnit builtinUnit;
+ if (MeasureUnit::findBySubType(productUnit.identifier.toStringPiece(), &builtinUnit)) {
+ // TODO(icu-units#145): spec doesn't cover builtin-per-builtin, it
+ // breaks them all down. Do we want to drop this?
+ // - findBySubType isn't super efficient, if we skip it and go to basic
+ // singles, we don't have to construct MeasureUnit's anymore.
+ // - Check all the existing unit tests that fail without this: is it due
+ // to incorrect fallback via getMeasureData?
+ // - Do those unit tests cover this code path representatively?
+ if (builtinUnit != MeasureUnit()) {
+ getMeasureData(loc, builtinUnit, width, caseVariant, outArray, status);
+ maybeCalculateGender(loc, builtinUnit, outArray, status);
+ }
+ return;
+ }
+
+ // 2. Set timesPattern to be getValue(times, locale, length)
+ UnicodeString timesPattern = getCompoundValue("times", loc, width, status);
+ SimpleFormatter timesPatternFormatter(timesPattern, 2, 2, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ PlaceholderPosition globalPlaceholder[ARRAY_LENGTH];
+ UChar globalJoinerChar = 0;
+ // Numbered list items are from the algorithms at
+ // https://unicode.org/reports/tr35/tr35-general.html#compound-units:
+ //
+ // pattern(...) point 5:
+ // - Set both globalPlaceholder and globalPlaceholderPosition to be empty
+ //
+ // 3. Set result to be empty
+ for (int32_t pluralIndex = 0; pluralIndex < ARRAY_LENGTH; pluralIndex++) {
+ // Initial state: empty string pattern, via all falling back to OTHER:
+ if (pluralIndex == StandardPlural::Form::OTHER) {
+ outArray[pluralIndex].remove();
+ } else {
+ outArray[pluralIndex].setToBogus();
+ }
+ globalPlaceholder[pluralIndex] = PH_EMPTY;
+ }
+
+ // Empty string represents "compound" (propagate the plural form).
+ const char *pluralCategory = "";
+ DerivedComponents derivedTimesPlurals(loc, "plural", "times");
+ DerivedComponents derivedTimesCases(loc, "case", "times");
+ DerivedComponents derivedPowerCases(loc, "case", "power");
+
+ // 4. For each single_unit in product_unit
+ for (int32_t singleUnitIndex = 0; singleUnitIndex < productUnit.singleUnits.length();
+ singleUnitIndex++) {
+ SingleUnitImpl *singleUnit = productUnit.singleUnits[singleUnitIndex];
+ const char *singlePluralCategory;
+ const char *singleCaseVariant;
+ // TODO(icu-units#28): ensure we have unit tests that change/fail if we
+ // assign incorrect case variants here:
+ if (singleUnitIndex < productUnit.singleUnits.length() - 1) {
+ // 4.1. If hasMultiple
+ singlePluralCategory = derivedTimesPlurals.value0(pluralCategory);
+ singleCaseVariant = derivedTimesCases.value0(caseVariant);
+ pluralCategory = derivedTimesPlurals.value1(pluralCategory);
+ caseVariant = derivedTimesCases.value1(caseVariant);
+ } else {
+ singlePluralCategory = derivedTimesPlurals.value1(pluralCategory);
+ singleCaseVariant = derivedTimesCases.value1(caseVariant);
+ }
+
+ // 4.2. Get the gender of that single_unit
+ MeasureUnit simpleUnit;
+ if (!MeasureUnit::findBySubType(singleUnit->getSimpleUnitID(), &simpleUnit)) {
+ // Ideally all simple units should be known, but they're not:
+ // 100-kilometer is internally treated as a simple unit, but it is
+ // not a built-in unit and does not have formatting data in CLDR 39.
+ //
+ // TODO(icu-units#28): test (desirable) invariants in unit tests.
+ status = U_UNSUPPORTED_ERROR;
return;
}
- UnicodeString secondaryString = secondaryCompiled.getTextWithNoArguments().trim();
- // TODO: Why does UnicodeString need to be explicit in the following line?
- compiled.format(UnicodeString(u"{0}"), secondaryString, perUnitFormat, status);
+ const char *gender = getGenderString(getGenderForBuiltin(loc, simpleUnit, status), status);
+
+ // 4.3. If singleUnit starts with a dimensionality_prefix, such as 'square-'
+ U_ASSERT(singleUnit->dimensionality > 0);
+ int32_t dimensionality = singleUnit->dimensionality;
+ UnicodeString dimensionalityPrefixPatterns[ARRAY_LENGTH];
+ if (dimensionality != 1) {
+ // 4.3.1. set dimensionalityPrefixPattern to be
+ // getValue(that dimensionality_prefix, locale, length, singlePluralCategory, singleCaseVariant, gender),
+ // such as "{0} kwadratowym"
+ CharString dimensionalityKey("compound/power", status);
+ dimensionalityKey.appendNumber(dimensionality, status);
+ getInflectedMeasureData(dimensionalityKey.toStringPiece(), loc, width, gender,
+ singleCaseVariant, dimensionalityPrefixPatterns, status);
+ if (U_FAILURE(status)) {
+ // At the time of writing, only pow2 and pow3 are supported.
+ // Attempting to format other powers results in a
+ // U_RESOURCE_TYPE_MISMATCH. We convert the error if we
+ // understand it:
+ if (status == U_RESOURCE_TYPE_MISMATCH && dimensionality > 3) {
+ status = U_UNSUPPORTED_ERROR;
+ }
+ return;
+ }
+
+ // TODO(icu-units#139):
+ // 4.3.2. set singlePluralCategory to be power0(singlePluralCategory)
+
+ // 4.3.3. set singleCaseVariant to be power0(singleCaseVariant)
+ singleCaseVariant = derivedPowerCases.value0(singleCaseVariant);
+ // 4.3.4. remove the dimensionality_prefix from singleUnit
+ singleUnit->dimensionality = 1;
+ }
+
+ // 4.4. if singleUnit starts with an si_prefix, such as 'centi'
+ UMeasurePrefix prefix = singleUnit->unitPrefix;
+ UnicodeString prefixPattern;
+ if (prefix != UMEASURE_PREFIX_ONE) {
+ // 4.4.1. set siPrefixPattern to be getValue(that si_prefix, locale,
+ // length), such as "centy{0}"
+ CharString prefixKey;
+ // prefixKey looks like "1024p3" or "10p-2":
+ prefixKey.appendNumber(umeas_getPrefixBase(prefix), status);
+ prefixKey.append('p', status);
+ prefixKey.appendNumber(umeas_getPrefixPower(prefix), status);
+ // Contains a pattern like "centy{0}".
+ prefixPattern = getCompoundValue(prefixKey.toStringPiece(), loc, width, status);
+
+ // 4.4.2. set singlePluralCategory to be prefix0(singlePluralCategory)
+ //
+ // TODO(icu-units#139): that refers to these rules:
+ // <deriveComponent feature="plural" structure="prefix" value0="one" value1="compound"/>
+ // though I'm not sure what other value they might end up having.
+ //
+ // 4.4.3. set singleCaseVariant to be prefix0(singleCaseVariant)
+ //
+ // TODO(icu-units#139): that refers to:
+ // <deriveComponent feature="case" structure="prefix" value0="nominative"
+ // value1="compound"/> but the prefix (value0) doesn't have case, the rest simply
+ // propagates.
+
+ // 4.4.4. remove the si_prefix from singleUnit
+ singleUnit->unitPrefix = UMEASURE_PREFIX_ONE;
+ }
+
+ // 4.5. Set corePattern to be the getValue(singleUnit, locale, length,
+ // singlePluralCategory, singleCaseVariant), such as "{0} metrem"
+ UnicodeString singleUnitArray[ARRAY_LENGTH];
+ // At this point we are left with a Simple Unit:
+ U_ASSERT(uprv_strcmp(singleUnit->build(status).getIdentifier(), singleUnit->getSimpleUnitID()) ==
+ 0);
+ getMeasureData(loc, singleUnit->build(status), width, singleCaseVariant, singleUnitArray,
+ status);
if (U_FAILURE(status)) {
+ // Shouldn't happen if we have data for all single units
return;
}
+
+ // Calculate output gender
+ if (!singleUnitArray[GENDER_INDEX].isBogus()) {
+ U_ASSERT(!singleUnitArray[GENDER_INDEX].isEmpty());
+ UnicodeString uVal;
+
+ if (prefix != UMEASURE_PREFIX_ONE) {
+ singleUnitArray[GENDER_INDEX] =
+ getDerivedGender(loc, "prefix", singleUnitArray, nullptr, status);
+ }
+
+ if (dimensionality != 1) {
+ singleUnitArray[GENDER_INDEX] =
+ getDerivedGender(loc, "power", singleUnitArray, nullptr, status);
+ }
+
+ UnicodeString timesGenderRule = getDeriveCompoundRule(loc, "gender", "times", status);
+ if (timesGenderRule.length() == 1) {
+ switch (timesGenderRule[0]) {
+ case u'0':
+ if (singleUnitIndex == 0) {
+ U_ASSERT(outArray[GENDER_INDEX].isBogus());
+ outArray[GENDER_INDEX] = singleUnitArray[GENDER_INDEX];
+ }
+ break;
+ case u'1':
+ if (singleUnitIndex == productUnit.singleUnits.length() - 1) {
+ U_ASSERT(outArray[GENDER_INDEX].isBogus());
+ outArray[GENDER_INDEX] = singleUnitArray[GENDER_INDEX];
+ }
+ }
+ } else {
+ if (outArray[GENDER_INDEX].isBogus()) {
+ outArray[GENDER_INDEX] = timesGenderRule;
+ }
+ }
+ }
+
+ // Calculate resulting patterns for each plural form
+ for (int32_t pluralIndex = 0; pluralIndex < StandardPlural::Form::COUNT; pluralIndex++) {
+ StandardPlural::Form plural = static_cast<StandardPlural::Form>(pluralIndex);
+
+ // singleUnitArray[pluralIndex] looks something like "{0} Meter"
+ if (outArray[pluralIndex].isBogus()) {
+ if (singleUnitArray[pluralIndex].isBogus()) {
+ // Let the usual plural fallback mechanism take care of this
+ // plural form
+ continue;
+ } else {
+ // Since our singleUnit can have a plural form that outArray
+ // doesn't yet have (relying on fallback to OTHER), we start
+ // by grabbing it with the normal plural fallback mechanism
+ outArray[pluralIndex] = getWithPlural(outArray, plural, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ }
+ }
+
+ if (uprv_strcmp(singlePluralCategory, "") != 0) {
+ plural = static_cast<StandardPlural::Form>(getIndex(singlePluralCategory, status));
+ }
+
+ // 4.6. Extract(corePattern, coreUnit, placeholder, placeholderPosition) from that pattern.
+ UnicodeString coreUnit;
+ PlaceholderPosition placeholderPosition;
+ UChar joinerChar;
+ extractCorePattern(getWithPlural(singleUnitArray, plural, status), coreUnit,
+ placeholderPosition, joinerChar);
+
+ // 4.7 If the position is middle, then fail
+ if (placeholderPosition == PH_MIDDLE) {
+ status = U_UNSUPPORTED_ERROR;
+ return;
+ }
+
+ // 4.8. If globalPlaceholder is empty
+ if (globalPlaceholder[pluralIndex] == PH_EMPTY) {
+ globalPlaceholder[pluralIndex] = placeholderPosition;
+ globalJoinerChar = joinerChar;
+ } else {
+ // Expect all units involved to have the same placeholder position
+ U_ASSERT(globalPlaceholder[pluralIndex] == placeholderPosition);
+ // TODO(icu-units#28): Do we want to add a unit test that checks
+ // for consistent joiner chars? Probably not, given how
+ // inconsistent they are. File a CLDR ticket with examples?
+ }
+ // Now coreUnit would be just "Meter"
+
+ // 4.9. If siPrefixPattern is not empty
+ if (prefix != UMEASURE_PREFIX_ONE) {
+ SimpleFormatter prefixCompiled(prefixPattern, 1, 1, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ // 4.9.1. Set coreUnit to be the combineLowercasing(locale, length, siPrefixPattern,
+ // coreUnit)
+ UnicodeString tmp;
+ // combineLowercasing(locale, length, prefixPattern, coreUnit)
+ //
+ // TODO(icu-units#28): run this only if prefixPattern does not
+ // contain space characters - do languages "as", "bn", "hi",
+ // "kk", etc have concepts of upper and lower case?:
+ if (width == UNUM_UNIT_WIDTH_FULL_NAME) {
+ coreUnit.toLower(loc);
+ }
+ prefixCompiled.format(coreUnit, tmp, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ coreUnit = tmp;
+ }
+
+ // 4.10. If dimensionalityPrefixPattern is not empty
+ if (dimensionality != 1) {
+ SimpleFormatter dimensionalityCompiled(
+ getWithPlural(dimensionalityPrefixPatterns, plural, status), 1, 1, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ // 4.10.1. Set coreUnit to be the combineLowercasing(locale, length,
+ // dimensionalityPrefixPattern, coreUnit)
+ UnicodeString tmp;
+ // combineLowercasing(locale, length, prefixPattern, coreUnit)
+ //
+ // TODO(icu-units#28): run this only if prefixPattern does not
+ // contain space characters - do languages "as", "bn", "hi",
+ // "kk", etc have concepts of upper and lower case?:
+ if (width == UNUM_UNIT_WIDTH_FULL_NAME) {
+ coreUnit.toLower(loc);
+ }
+ dimensionalityCompiled.format(coreUnit, tmp, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ coreUnit = tmp;
+ }
+
+ if (outArray[pluralIndex].length() == 0) {
+ // 4.11. If the result is empty, set result to be coreUnit
+ outArray[pluralIndex] = coreUnit;
+ } else {
+ // 4.12. Otherwise set result to be format(timesPattern, result, coreUnit)
+ UnicodeString tmp;
+ timesPatternFormatter.format(outArray[pluralIndex], coreUnit, tmp, status);
+ outArray[pluralIndex] = tmp;
+ }
+ }
+ }
+ for (int32_t pluralIndex = 0; pluralIndex < StandardPlural::Form::COUNT; pluralIndex++) {
+ if (globalPlaceholder[pluralIndex] == PH_BEGINNING) {
+ UnicodeString tmp;
+ tmp.append(u"{0}", 3);
+ if (globalJoinerChar != 0) {
+ tmp.append(globalJoinerChar);
+ }
+ tmp.append(outArray[pluralIndex]);
+ outArray[pluralIndex] = tmp;
+ } else if (globalPlaceholder[pluralIndex] == PH_END) {
+ if (globalJoinerChar != 0) {
+ outArray[pluralIndex].append(globalJoinerChar);
+ }
+ outArray[pluralIndex].append(u"{0}", 3);
+ }
}
- fillIn->rules = rules;
- fillIn->parent = parent;
- fillIn->multiSimpleFormatsToModifiers(primaryData, perUnitFormat,
- {UFIELD_CATEGORY_NUMBER, UNUM_MEASURE_UNIT_FIELD}, status);
}
UnicodeString LongNameHandler::getUnitDisplayName(
@@ -329,7 +1433,7 @@ UnicodeString LongNameHandler::getUnitDisplayName(
return ICU_Utility::makeBogusString();
}
UnicodeString simpleFormats[ARRAY_LENGTH];
- getMeasureData(loc, unit, width, simpleFormats, status);
+ getMeasureData(loc, unit, width, "", simpleFormats, status);
return simpleFormats[DNAM_INDEX];
}
@@ -343,7 +1447,7 @@ UnicodeString LongNameHandler::getUnitPattern(
return ICU_Utility::makeBogusString();
}
UnicodeString simpleFormats[ARRAY_LENGTH];
- getMeasureData(loc, unit, width, simpleFormats, status);
+ getMeasureData(loc, unit, width, "", simpleFormats, status);
// The above already handles fallback from other widths to short
if (U_FAILURE(status)) {
return ICU_Utility::makeBogusString();
@@ -366,6 +1470,7 @@ LongNameHandler* LongNameHandler::forCurrencyLongNames(const Locale &loc, const
getCurrencyLongNameData(loc, currency, simpleFormats, status);
if (U_FAILURE(status)) { return nullptr; }
result->simpleFormatsToModifiers(simpleFormats, {UFIELD_CATEGORY_NUMBER, UNUM_CURRENCY_FIELD}, status);
+ // TODO(icu-units#28): currency gender?
return result;
}
@@ -390,8 +1495,12 @@ void LongNameHandler::multiSimpleFormatsToModifiers(const UnicodeString *leadFor
UnicodeString leadFormat = getWithPlural(leadFormats, plural, status);
if (U_FAILURE(status)) { return; }
UnicodeString compoundFormat;
- trailCompiled.format(leadFormat, compoundFormat, status);
- if (U_FAILURE(status)) { return; }
+ if (leadFormat.length() == 0) {
+ compoundFormat = trailFormat;
+ } else {
+ trailCompiled.format(leadFormat, compoundFormat, status);
+ if (U_FAILURE(status)) { return; }
+ }
SimpleFormatter compoundCompiled(compoundFormat, 0, 1, status);
if (U_FAILURE(status)) { return; }
fModifiers[i] = SimpleModifier(compoundCompiled, field, false, {this, SIGNUM_POS_ZERO, plural});
@@ -405,29 +1514,53 @@ void LongNameHandler::processQuantity(DecimalQuantity &quantity, MicroProps &mic
}
StandardPlural::Form pluralForm = utils::getPluralSafe(micros.rounder, rules, quantity, status);
micros.modOuter = &fModifiers[pluralForm];
+ micros.gender = gender;
}
const Modifier* LongNameHandler::getModifier(Signum /*signum*/, StandardPlural::Form plural) const {
return &fModifiers[plural];
}
-void MixedUnitLongNameHandler::forMeasureUnit(const Locale &loc, const MeasureUnit &mixedUnit,
- const UNumberUnitWidth &width, const PluralRules *rules,
+void MixedUnitLongNameHandler::forMeasureUnit(const Locale &loc,
+ const MeasureUnit &mixedUnit,
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ const PluralRules *rules,
const MicroPropsGenerator *parent,
- MixedUnitLongNameHandler *fillIn, UErrorCode &status) {
+ MixedUnitLongNameHandler *fillIn,
+ UErrorCode &status) {
U_ASSERT(mixedUnit.getComplexity(status) == UMEASURE_UNIT_MIXED);
U_ASSERT(fillIn != nullptr);
+ if (U_FAILURE(status)) {
+ return;
+ }
MeasureUnitImpl temp;
- const MeasureUnitImpl& impl = MeasureUnitImpl::forMeasureUnit(mixedUnit, temp, status);
- fillIn->fMixedUnitCount = impl.units.length();
+ const MeasureUnitImpl &impl = MeasureUnitImpl::forMeasureUnit(mixedUnit, temp, status);
+ // Defensive, for production code:
+ if (impl.complexity != UMEASURE_UNIT_MIXED) {
+ // Should be using the normal LongNameHandler
+ status = U_UNSUPPORTED_ERROR;
+ return;
+ }
+
+ fillIn->fMixedUnitCount = impl.singleUnits.length();
fillIn->fMixedUnitData.adoptInstead(new UnicodeString[fillIn->fMixedUnitCount * ARRAY_LENGTH]);
for (int32_t i = 0; i < fillIn->fMixedUnitCount; i++) {
// Grab data for each of the components.
UnicodeString *unitData = &fillIn->fMixedUnitData[i * ARRAY_LENGTH];
- getMeasureData(loc, impl.units[i]->build(status), width, unitData, status);
+ // TODO(CLDR-14502): check from the CLDR-14502 ticket whether this
+ // propagation of unitDisplayCase is correct:
+ getMeasureData(loc, impl.singleUnits[i]->build(status), width, unitDisplayCase, unitData,
+ status);
+ // TODO(ICU-21494): if we add support for gender for mixed units, we may
+ // need maybeCalculateGender() here.
}
+ // TODO(icu-units#120): Make sure ICU doesn't output zero-valued
+ // high-magnitude fields
+ // * for mixed units count N, produce N listFormatters, one for each subset
+ // that might be formatted.
UListFormatterWidth listWidth = ULISTFMT_WIDTH_SHORT;
if (width == UNUM_UNIT_WIDTH_NARROW) {
listWidth = ULISTFMT_WIDTH_NARROW;
@@ -437,12 +1570,14 @@ void MixedUnitLongNameHandler::forMeasureUnit(const Locale &loc, const MeasureUn
}
fillIn->fListFormatter.adoptInsteadAndCheckErrorCode(
ListFormatter::createInstance(loc, ULISTFMT_TYPE_UNITS, listWidth, status), status);
+ // TODO(ICU-21494): grab gender of each unit, calculate the gender
+ // associated with this list formatter, save it for later.
fillIn->rules = rules;
fillIn->parent = parent;
- // We need a localised NumberFormatter for the integers of the bigger units
+ // We need a localised NumberFormatter for the numbers of the bigger units
// (providing Arabic numerals, for example).
- fillIn->fIntegerFormatter = NumberFormatter::withLocale(loc);
+ fillIn->fNumberFormatter = NumberFormatter::withLocale(loc);
}
void MixedUnitLongNameHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micros,
@@ -462,12 +1597,6 @@ const Modifier *MixedUnitLongNameHandler::getMixedUnitModifier(DecimalQuantity &
status = U_UNSUPPORTED_ERROR;
return &micros.helpers.emptyWeakModifier;
}
- // If we don't have at least one mixedMeasure, the LongNameHandler would be
- // sufficient and we shouldn't be running MixedUnitLongNameHandler code:
- U_ASSERT(micros.mixedMeasuresCount > 0);
- // mixedMeasures does not contain the last value:
- U_ASSERT(fMixedUnitCount == micros.mixedMeasuresCount + 1);
- U_ASSERT(fListFormatter.isValid());
// Algorithm:
//
@@ -492,39 +1621,45 @@ const Modifier *MixedUnitLongNameHandler::getMixedUnitModifier(DecimalQuantity &
return &micros.helpers.emptyWeakModifier;
}
+ StandardPlural::Form quantityPlural = StandardPlural::Form::OTHER;
for (int32_t i = 0; i < micros.mixedMeasuresCount; i++) {
DecimalQuantity fdec;
- fdec.setToLong(micros.mixedMeasures[i]);
- if (i > 0 && fdec.isNegative()) {
- // If numbers are negative, only the first number needs to have its
- // negative sign formatted.
- fdec.negate();
- }
- StandardPlural::Form pluralForm = utils::getStandardPlural(rules, fdec);
- UnicodeString simpleFormat =
- getWithPlural(&fMixedUnitData[i * ARRAY_LENGTH], pluralForm, status);
- SimpleFormatter compiledFormatter(simpleFormat, 0, 1, status);
+ // If numbers are negative, only the first number needs to have its
+ // negative sign formatted.
+ int64_t number = i > 0 ? std::abs(micros.mixedMeasures[i]) : micros.mixedMeasures[i];
- UnicodeString num;
- auto appendable = UnicodeStringAppendable(num);
- fIntegerFormatter.formatDecimalQuantity(fdec, status).appendTo(appendable, status);
- compiledFormatter.format(num, outputMeasuresList[i], status);
- // TODO(icu-units#67): fix field positions
- }
+ if (micros.indexOfQuantity == i) { // Insert placeholder for `quantity`
+ // If quantity is not the first value and quantity is negative
+ if (micros.indexOfQuantity > 0 && quantity.isNegative()) {
+ quantity.negate();
+ }
- // Reiterated: we have at least one mixedMeasure:
- U_ASSERT(micros.mixedMeasuresCount > 0);
- // Thus if negative, a negative has already been formatted:
- if (quantity.isNegative()) {
- quantity.negate();
+ StandardPlural::Form quantityPlural =
+ utils::getPluralSafe(micros.rounder, rules, quantity, status);
+ UnicodeString quantityFormatWithPlural =
+ getWithPlural(&fMixedUnitData[i * ARRAY_LENGTH], quantityPlural, status);
+ SimpleFormatter quantityFormatter(quantityFormatWithPlural, 0, 1, status);
+ quantityFormatter.format(UnicodeString(u"{0}"), outputMeasuresList[i], status);
+ } else {
+ fdec.setToLong(number);
+ StandardPlural::Form pluralForm = utils::getStandardPlural(rules, fdec);
+ UnicodeString simpleFormat =
+ getWithPlural(&fMixedUnitData[i * ARRAY_LENGTH], pluralForm, status);
+ SimpleFormatter compiledFormatter(simpleFormat, 0, 1, status);
+ UnicodeString num;
+ auto appendable = UnicodeStringAppendable(num);
+
+ fNumberFormatter.formatDecimalQuantity(fdec, status).appendTo(appendable, status);
+ compiledFormatter.format(num, outputMeasuresList[i], status);
+ }
}
- UnicodeString *finalSimpleFormats = &fMixedUnitData[(fMixedUnitCount - 1) * ARRAY_LENGTH];
- StandardPlural::Form finalPlural = utils::getPluralSafe(micros.rounder, rules, quantity, status);
- UnicodeString finalSimpleFormat = getWithPlural(finalSimpleFormats, finalPlural, status);
- SimpleFormatter finalFormatter(finalSimpleFormat, 0, 1, status);
- finalFormatter.format(UnicodeString(u"{0}"), outputMeasuresList[fMixedUnitCount - 1], status);
+ // TODO(ICU-21494): implement gender for lists of mixed units. Presumably we
+ // can set micros.gender to the gender associated with the list formatter in
+ // use below (once we have correct support for that). And then document this
+ // appropriately? "getMixedUnitModifier" doesn't sound like it would do
+ // something like this.
// Combine list into a "premixed" pattern
UnicodeString premixedFormatPattern;
@@ -535,26 +1670,27 @@ const Modifier *MixedUnitLongNameHandler::getMixedUnitModifier(DecimalQuantity &
return &micros.helpers.emptyWeakModifier;
}
- // TODO(icu-units#67): fix field positions
- // Return a SimpleModifier for the "premixed" pattern
micros.helpers.mixedUnitModifier =
- SimpleModifier(premixedCompiled, kUndefinedField, false, {this, SIGNUM_POS_ZERO, finalPlural});
+ SimpleModifier(premixedCompiled, kUndefinedField, false, {this, SIGNUM_POS_ZERO, quantityPlural});
return &micros.helpers.mixedUnitModifier;
}
const Modifier *MixedUnitLongNameHandler::getModifier(Signum /*signum*/,
StandardPlural::Form /*plural*/) const {
- // TODO(units): investigate this method when investigating where
- // LongNameHandler::getModifier() gets used. To be sure it remains
+ // TODO(icu-units#28): investigate this method when investigating where
+ // ModifierStore::getModifier() gets used. To be sure it remains
// unreachable:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
return nullptr;
}
-LongNameMultiplexer *
-LongNameMultiplexer::forMeasureUnits(const Locale &loc, const MaybeStackVector<MeasureUnit> &units,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, UErrorCode &status) {
+LongNameMultiplexer *LongNameMultiplexer::forMeasureUnits(const Locale &loc,
+ const MaybeStackVector<MeasureUnit> &units,
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ const PluralRules *rules,
+ const MicroPropsGenerator *parent,
+ UErrorCode &status) {
LocalPointer<LongNameMultiplexer> result(new LongNameMultiplexer(parent), status);
if (U_FAILURE(status)) {
return nullptr;
@@ -566,15 +1702,16 @@ LongNameMultiplexer::forMeasureUnits(const Locale &loc, const MaybeStackVector<M
}
result->fMeasureUnits.adoptInstead(new MeasureUnit[units.length()]);
for (int32_t i = 0, length = units.length(); i < length; i++) {
- const MeasureUnit& unit = *units[i];
+ const MeasureUnit &unit = *units[i];
result->fMeasureUnits[i] = unit;
if (unit.getComplexity(status) == UMEASURE_UNIT_MIXED) {
MixedUnitLongNameHandler *mlnh = result->fMixedUnitHandlers.createAndCheckErrorCode(status);
- MixedUnitLongNameHandler::forMeasureUnit(loc, unit, width, rules, NULL, mlnh, status);
+ MixedUnitLongNameHandler::forMeasureUnit(loc, unit, width, unitDisplayCase, rules, NULL,
+ mlnh, status);
result->fHandlers[i] = mlnh;
} else {
LongNameHandler *lnh = result->fLongNameHandlers.createAndCheckErrorCode(status);
- LongNameHandler::forMeasureUnit(loc, unit, MeasureUnit(), width, rules, NULL, lnh, status);
+ LongNameHandler::forMeasureUnit(loc, unit, width, unitDisplayCase, rules, NULL, lnh, status);
result->fHandlers[i] = lnh;
}
if (U_FAILURE(status)) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
index 67f2316a9cd..06949989d7f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
@@ -16,6 +16,8 @@
U_NAMESPACE_BEGIN namespace number {
namespace impl {
+// LongNameHandler takes care of formatting currency and measurement unit names,
+// as well as populating the gender of measure units.
class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public UMemory {
public:
static UnicodeString getUnitDisplayName(
@@ -24,6 +26,8 @@ class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public
UNumberUnitWidth width,
UErrorCode& status);
+ // This function does not support inflections or other newer NumberFormatter
+ // features: it exists to support the older not-recommended MeasureFormat.
static UnicodeString getUnitPattern(
const Locale& loc,
const MeasureUnit& unit,
@@ -38,27 +42,28 @@ class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public
/**
* Construct a localized LongNameHandler for the specified MeasureUnit.
*
- * Compound units can be constructed via `unit` and `perUnit`. Both of these
- * must then be built-in units.
- *
* Mixed units are not supported, use MixedUnitLongNameHandler::forMeasureUnit.
*
- * This function uses a fillIn intead of returning a pointer, because we
+ * This function uses a fillIn instead of returning a pointer, because we
* want to fill in instances in a MemoryPool (which cannot adopt pointers it
* didn't create itself).
*
* @param loc The desired locale.
- * @param unit The measure unit to construct a LongNameHandler for. If
- * `perUnit` is also defined, `unit` must not be a mixed unit.
- * @param perUnit If `unit` is a mixed unit, `perUnit` must be "none".
+ * @param unitRef The measure unit to construct a LongNameHandler for.
* @param width Specifies the desired unit rendering.
+ * @param unitDisplayCase Specifies the desired grammatical case. If the
+ * specified case is not found, we fall back to nominative or no-case.
* @param rules Does not take ownership.
* @param parent Does not take ownership.
* @param fillIn Required.
*/
- static void forMeasureUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, LongNameHandler *fillIn,
+ static void forMeasureUnit(const Locale &loc,
+ const MeasureUnit &unitRef,
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ const PluralRules *rules,
+ const MicroPropsGenerator *parent,
+ LongNameHandler *fillIn,
UErrorCode &status);
/**
@@ -68,10 +73,6 @@ class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public
void
processQuantity(DecimalQuantity &quantity, MicroProps &micros, UErrorCode &status) const U_OVERRIDE;
- // TODO(units): investigate whether we might run into Mixed Unit trouble
- // with this. This override for ModifierStore::getModifier does not support
- // mixed units: investigate under which circumstances it gets called (check
- // both ImmutablePatternModifier and in NumberRangeFormatterImpl).
const Modifier* getModifier(Signum signum, StandardPlural::Form plural) const U_OVERRIDE;
private:
@@ -81,6 +82,9 @@ class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public
const PluralRules *rules;
// Not owned
const MicroPropsGenerator *parent;
+ // Grammatical gender of the formatted result. Not owned: must point at
+ // static or global strings.
+ const char *gender = "";
LongNameHandler(const PluralRules *rules, const MicroPropsGenerator *parent)
: rules(rules), parent(parent) {
@@ -96,13 +100,25 @@ class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public
// Allow macrosToMicroGenerator to call the private default constructor.
friend class NumberFormatterImpl;
- // Fills in LongNameHandler fields for formatting compound units identified
- // via `unit` and `perUnit`. Both `unit` and `perUnit` need to be built-in
- // units (for which data exists).
- static void forCompoundUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, LongNameHandler *fillIn,
- UErrorCode &status);
+ // Fills in LongNameHandler fields for formatting units identified `unit`.
+ static void forArbitraryUnit(const Locale &loc,
+ const MeasureUnit &unit,
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ LongNameHandler *fillIn,
+ UErrorCode &status);
+
+ // Roughly corresponds to patternTimes(...) in the spec:
+ // https://unicode.org/reports/tr35/tr35-general.html#compound-units
+ //
+ // productUnit is an rvalue reference to indicate this function consumes it,
+ // leaving it in a not-useful / undefined state.
+ static void processPatternTimes(MeasureUnitImpl &&productUnit,
+ Locale loc,
+ const UNumberUnitWidth &width,
+ const char *caseVariant,
+ UnicodeString *outArray,
+ UErrorCode &status);
// Sets fModifiers to use the patterns from `simpleFormats`.
void simpleFormatsToModifiers(const UnicodeString *simpleFormats, Field field, UErrorCode &status);
@@ -111,7 +127,7 @@ class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public
// and `trailFormat` appended to each.
//
// With a leadFormat of "{0}m" and a trailFormat of "{0}/s", it produces a
- // pattern of "{0}m/s" by inserting the leadFormat pattern into trailFormat.
+ // pattern of "{0}m/s" by inserting each leadFormat pattern into trailFormat.
void multiSimpleFormatsToModifiers(const UnicodeString *leadFormats, UnicodeString trailFormat,
Field field, UErrorCode &status);
};
@@ -123,7 +139,7 @@ class MixedUnitLongNameHandler : public MicroPropsGenerator, public ModifierStor
* Construct a localized MixedUnitLongNameHandler for the specified
* MeasureUnit. It must be a MIXED unit.
*
- * This function uses a fillIn intead of returning a pointer, because we
+ * This function uses a fillIn instead of returning a pointer, because we
* want to fill in instances in a MemoryPool (which cannot adopt pointers it
* didn't create itself).
*
@@ -131,13 +147,19 @@ class MixedUnitLongNameHandler : public MicroPropsGenerator, public ModifierStor
* @param mixedUnit The mixed measure unit to construct a
* MixedUnitLongNameHandler for.
* @param width Specifies the desired unit rendering.
+ * @param unitDisplayCase Specifies the desired grammatical case. If the
+ * specified case is not found, we fall back to nominative or no-case.
* @param rules Does not take ownership.
* @param parent Does not take ownership.
* @param fillIn Required.
*/
- static void forMeasureUnit(const Locale &loc, const MeasureUnit &mixedUnit,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, MixedUnitLongNameHandler *fillIn,
+ static void forMeasureUnit(const Locale &loc,
+ const MeasureUnit &mixedUnit,
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ const PluralRules *rules,
+ const MicroPropsGenerator *parent,
+ MixedUnitLongNameHandler *fillIn,
UErrorCode &status);
/**
@@ -156,21 +178,24 @@ class MixedUnitLongNameHandler : public MicroPropsGenerator, public ModifierStor
private:
// Not owned
const PluralRules *rules;
+
// Not owned
const MicroPropsGenerator *parent;
// Total number of units in the MeasureUnit this handler was configured for:
// for "foot-and-inch", this will be 2.
int32_t fMixedUnitCount = 1;
+
// Stores unit data for each of the individual units. For each unit, it
// stores ARRAY_LENGTH strings, as returned by getMeasureData. (Each unit
// with index `i` has ARRAY_LENGTH strings starting at index
// `i*ARRAY_LENGTH` in this array.)
LocalArray<UnicodeString> fMixedUnitData;
- // A localized NumberFormatter used to format the integer-valued bigger
- // units of Mixed Unit measurements.
- LocalizedNumberFormatter fIntegerFormatter;
- // A localised list formatter for joining mixed units together.
+
+ // Formats the larger units of Mixed Unit measurements.
+ LocalizedNumberFormatter fNumberFormatter;
+
+ // Joins mixed units together.
LocalPointer<ListFormatter> fListFormatter;
MixedUnitLongNameHandler(const PluralRules *rules, const MicroPropsGenerator *parent)
@@ -207,8 +232,11 @@ class LongNameMultiplexer : public MicroPropsGenerator, public UMemory {
// `units`. An individual unit might be a mixed unit.
static LongNameMultiplexer *forMeasureUnits(const Locale &loc,
const MaybeStackVector<MeasureUnit> &units,
- const UNumberUnitWidth &width, const PluralRules *rules,
- const MicroPropsGenerator *parent, UErrorCode &status);
+ const UNumberUnitWidth &width,
+ const char *unitDisplayCase,
+ const PluralRules *rules,
+ const MicroPropsGenerator *parent,
+ UErrorCode &status);
// The output unit must be provided via `micros.outputUnit`, it must match
// one of the units provided to the factory function.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp
index e2a0d284b7c..2d4d47a094d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_mapper.cpp
@@ -381,7 +381,10 @@ void PropertiesAffixPatternProvider::setTo(const DecimalFormatProperties& proper
AffixUtils::hasCurrencySymbols(ppp, status) ||
AffixUtils::hasCurrencySymbols(psp, status) ||
AffixUtils::hasCurrencySymbols(npp, status) ||
- AffixUtils::hasCurrencySymbols(nsp, status));
+ AffixUtils::hasCurrencySymbols(nsp, status) ||
+ properties.currencyAsDecimal);
+
+ fCurrencyAsDecimal = properties.currencyAsDecimal;
}
char16_t PropertiesAffixPatternProvider::charAt(int flags, int i) const {
@@ -446,6 +449,10 @@ bool PropertiesAffixPatternProvider::hasBody() const {
return true;
}
+bool PropertiesAffixPatternProvider::currencyAsDecimal() const {
+ return fCurrencyAsDecimal;
+}
+
void CurrencyPluralInfoAffixProvider::setTo(const CurrencyPluralInfo& cpi,
const DecimalFormatProperties& properties,
@@ -506,5 +513,9 @@ bool CurrencyPluralInfoAffixProvider::hasBody() const {
return affixesByPlural[StandardPlural::OTHER].hasBody();
}
+bool CurrencyPluralInfoAffixProvider::currencyAsDecimal() const {
+ return affixesByPlural[StandardPlural::OTHER].currencyAsDecimal();
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h b/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h
index 9ecd776b3b4..8879b7a94ea 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_mapper.h
@@ -56,12 +56,15 @@ class PropertiesAffixPatternProvider : public AffixPatternProvider, public UMemo
bool hasBody() const U_OVERRIDE;
+ bool currencyAsDecimal() const U_OVERRIDE;
+
private:
UnicodeString posPrefix;
UnicodeString posSuffix;
UnicodeString negPrefix;
UnicodeString negSuffix;
bool isCurrencyPattern;
+ bool fCurrencyAsDecimal;
PropertiesAffixPatternProvider() = default; // puts instance in valid but undefined state
@@ -107,6 +110,8 @@ class CurrencyPluralInfoAffixProvider : public AffixPatternProvider, public UMem
bool hasBody() const U_OVERRIDE;
+ bool currencyAsDecimal() const U_OVERRIDE;
+
private:
PropertiesAffixPatternProvider affixesByPlural[StandardPlural::COUNT];
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h b/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h
index 058c5923b45..c34e7c17e97 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_microprops.h
@@ -18,6 +18,7 @@
#include "number_roundingutils.h"
#include "decNumber.h"
#include "charstr.h"
+#include "util.h"
U_NAMESPACE_BEGIN namespace number {
namespace impl {
@@ -36,8 +37,7 @@ class IntMeasures : public MaybeStackArray<int64_t, 2> {
* Stack Capacity: most mixed units are expected to consist of two or three
* subunits, so one or two integer measures should be enough.
*/
- IntMeasures() : MaybeStackArray<int64_t, 2>() {
- }
+ IntMeasures() : MaybeStackArray<int64_t, 2>() {}
/**
* Copy constructor.
@@ -84,6 +84,14 @@ struct MicroProps : public MicroPropsGenerator {
bool useCurrency;
char nsName[9];
+ // Currency symbol to be used as the decimal separator
+ UnicodeString currencyAsDecimal = ICU_Utility::makeBogusString();
+
+ // No ownership: must point at a string which will outlive MicroProps
+ // instances, e.g. a string with static storage duration, or just a string
+ // that will never be deallocated or modified.
+ const char *gender;
+
// Note: This struct has no direct ownership of the following pointers.
const DecimalFormatSymbols* symbols;
@@ -122,9 +130,14 @@ struct MicroProps : public MicroPropsGenerator {
// play.
MeasureUnit outputUnit;
- // In the case of mixed units, this is the set of integer-only units
- // *preceding* the final unit.
+ // Contains all the values of each unit in mixed units. For quantity (which is the floating value of
+ // the smallest unit in the mixed unit), the value stores in `quantity`.
+ // NOTE: the value of quantity in `mixedMeasures` will be left unset.
IntMeasures mixedMeasures;
+
+ // Points to quantity position, -1 if the position is not set yet.
+ int32_t indexOfQuantity = -1;
+
// Number of mixedMeasures that have been populated
int32_t mixedMeasuresCount = 0;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
index b7d825f499e..b74bfd06fc8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
@@ -92,13 +92,13 @@ bool ConstantAffixModifier::isStrong() const {
bool ConstantAffixModifier::containsField(Field field) const {
(void)field;
// This method is not currently used.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
void ConstantAffixModifier::getParameters(Parameters& output) const {
(void)output;
// This method is not currently used.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
bool ConstantAffixModifier::semanticallyEquivalent(const Modifier& other) const {
@@ -181,7 +181,7 @@ bool SimpleModifier::isStrong() const {
bool SimpleModifier::containsField(Field field) const {
(void)field;
// This method is not currently used.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
void SimpleModifier::getParameters(Parameters& output) const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h b/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
index 375254310ca..09af3f48813 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
@@ -273,7 +273,7 @@ class U_I18N_API EmptyModifier : public Modifier, public UMemory {
};
/**
- * This implementation of ModifierStore adopts Modifer pointers.
+ * This implementation of ModifierStore adopts Modifier pointers.
*/
class U_I18N_API AdoptingModifierStore : public ModifierStore, public UMemory {
public:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_multiplier.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_multiplier.cpp
index 8f07e548de1..58e1e441bd2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_multiplier.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_multiplier.cpp
@@ -46,6 +46,7 @@ Scale::Scale(const Scale& other)
}
Scale& Scale::operator=(const Scale& other) {
+ if (this == &other) { return *this; } // self-assignment: no-op
fMagnitude = other.fMagnitude;
if (other.fArbitrary != nullptr) {
UErrorCode localStatus = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_output.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_output.cpp
index 7129b94e0f8..2c2c25eaedb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_output.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_output.cpp
@@ -39,6 +39,11 @@ MeasureUnit FormattedNumber::getOutputUnit(UErrorCode& status) const {
return fData->outputUnit;
}
+const char *FormattedNumber::getGender(UErrorCode &status) const {
+ UPRV_FORMATTED_VALUE_METHOD_GUARD("")
+ return fData->gender;
+}
+
void FormattedNumber::getDecimalQuantity(impl::DecimalQuantity& output, UErrorCode& status) const {
UPRV_FORMATTED_VALUE_METHOD_GUARD(UPRV_NOARG)
output = fData->quantity;
@@ -52,16 +57,6 @@ UPRV_FORMATTED_VALUE_SUBCLASS_AUTO_IMPL(FormattedNumberRange)
#define UPRV_NOARG
-UnicodeString FormattedNumberRange::getFirstDecimal(UErrorCode& status) const {
- UPRV_FORMATTED_VALUE_METHOD_GUARD(ICU_Utility::makeBogusString())
- return fData->quantity1.toScientificString();
-}
-
-UnicodeString FormattedNumberRange::getSecondDecimal(UErrorCode& status) const {
- UPRV_FORMATTED_VALUE_METHOD_GUARD(ICU_Utility::makeBogusString())
- return fData->quantity2.toScientificString();
-}
-
void FormattedNumberRange::getDecimalNumbers(ByteSink& sink1, ByteSink& sink2, UErrorCode& status) const {
UPRV_FORMATTED_VALUE_METHOD_GUARD(UPRV_NOARG)
impl::DecNum decnum1;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
index 314e7cb75ee..b6543b262b4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
@@ -28,9 +28,13 @@ void MutablePatternModifier::setPatternInfo(const AffixPatternProvider* patternI
fField = field;
}
-void MutablePatternModifier::setPatternAttributes(UNumberSignDisplay signDisplay, bool perMille) {
+void MutablePatternModifier::setPatternAttributes(
+ UNumberSignDisplay signDisplay,
+ bool perMille,
+ bool approximately) {
fSignDisplay = signDisplay;
fPerMilleReplacesPercent = perMille;
+ fApproximately = approximately;
}
void MutablePatternModifier::setSymbols(const DecimalFormatSymbols* symbols,
@@ -244,19 +248,19 @@ bool MutablePatternModifier::isStrong() const {
bool MutablePatternModifier::containsField(Field field) const {
(void)field;
// This method is not currently used.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
void MutablePatternModifier::getParameters(Parameters& output) const {
(void)output;
// This method is not currently used.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
bool MutablePatternModifier::semanticallyEquivalent(const Modifier& other) const {
(void)other;
// This method is not currently used.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
int32_t MutablePatternModifier::insertPrefix(FormattedStringBuilder& sb, int position, UErrorCode& status) {
@@ -277,6 +281,7 @@ void MutablePatternModifier::prepareAffix(bool isPrefix) {
*fPatternInfo,
isPrefix,
PatternStringUtils::resolveSignDisplay(fSignDisplay, fSignum),
+ fApproximately,
fPlural,
fPerMilleReplacesPercent,
currentAffix);
@@ -289,28 +294,14 @@ UnicodeString MutablePatternModifier::getSymbol(AffixPatternType type) const {
return fSymbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kMinusSignSymbol);
case AffixPatternType::TYPE_PLUS_SIGN:
return fSymbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kPlusSignSymbol);
+ case AffixPatternType::TYPE_APPROXIMATELY_SIGN:
+ return fSymbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kApproximatelySignSymbol);
case AffixPatternType::TYPE_PERCENT:
return fSymbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kPercentSymbol);
case AffixPatternType::TYPE_PERMILLE:
return fSymbols->getSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kPerMillSymbol);
- case AffixPatternType::TYPE_CURRENCY_SINGLE: {
- switch (fUnitWidth) {
- case UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW:
- return fCurrencySymbols.getNarrowCurrencySymbol(localStatus);
- case UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT:
- return fCurrencySymbols.getCurrencySymbol(localStatus);
- case UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE:
- return fCurrencySymbols.getIntlCurrencySymbol(localStatus);
- case UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL:
- return fCurrencySymbols.getFormalCurrencySymbol(localStatus);
- case UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT:
- return fCurrencySymbols.getVariantCurrencySymbol(localStatus);
- case UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN:
- return UnicodeString();
- default:
- return fCurrencySymbols.getCurrencySymbol(localStatus);
- }
- }
+ case AffixPatternType::TYPE_CURRENCY_SINGLE:
+ return getCurrencySymbolForUnitWidth(localStatus);
case AffixPatternType::TYPE_CURRENCY_DOUBLE:
return fCurrencySymbols.getIntlCurrencySymbol(localStatus);
case AffixPatternType::TYPE_CURRENCY_TRIPLE:
@@ -324,13 +315,32 @@ UnicodeString MutablePatternModifier::getSymbol(AffixPatternType type) const {
case AffixPatternType::TYPE_CURRENCY_QUINT:
return UnicodeString(u"\uFFFD");
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
+ }
+}
+
+UnicodeString MutablePatternModifier::getCurrencySymbolForUnitWidth(UErrorCode& status) const {
+ switch (fUnitWidth) {
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW:
+ return fCurrencySymbols.getNarrowCurrencySymbol(status);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT:
+ return fCurrencySymbols.getCurrencySymbol(status);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE:
+ return fCurrencySymbols.getIntlCurrencySymbol(status);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_FORMAL:
+ return fCurrencySymbols.getFormalCurrencySymbol(status);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_VARIANT:
+ return fCurrencySymbols.getVariantCurrencySymbol(status);
+ case UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN:
+ return UnicodeString();
+ default:
+ return fCurrencySymbols.getCurrencySymbol(status);
}
}
UnicodeString MutablePatternModifier::toUnicodeString() const {
// Never called by AffixUtils
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h b/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
index 5ba842d5692..4f825e1ed21 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
@@ -116,8 +116,10 @@ class U_I18N_API MutablePatternModifier
* Whether to force a plus sign on positive numbers.
* @param perMille
* Whether to substitute the percent sign in the pattern with a permille sign.
+ * @param approximately
+ * Whether to prepend approximately to the sign
*/
- void setPatternAttributes(UNumberSignDisplay signDisplay, bool perMille);
+ void setPatternAttributes(UNumberSignDisplay signDisplay, bool perMille, bool approximately);
/**
* Sets locale-specific details that affect the symbols substituted into the pattern string affixes.
@@ -193,6 +195,11 @@ class U_I18N_API MutablePatternModifier
*/
UnicodeString getSymbol(AffixPatternType type) const U_OVERRIDE;
+ /**
+ * Returns the currency symbol for the unit width specified in setSymbols()
+ */
+ UnicodeString getCurrencySymbolForUnitWidth(UErrorCode& status) const;
+
UnicodeString toUnicodeString() const;
private:
@@ -204,6 +211,7 @@ class U_I18N_API MutablePatternModifier
Field fField;
UNumberSignDisplay fSignDisplay;
bool fPerMilleReplacesPercent;
+ bool fApproximately;
// Symbol details (initialized in setSymbols)
const DecimalFormatSymbols *fSymbols;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
index 9d845056069..e819d39e967 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
@@ -50,7 +50,7 @@ PatternParser::parseToExistingProperties(const UnicodeString& pattern, DecimalFo
char16_t ParsedPatternInfo::charAt(int32_t flags, int32_t index) const {
const Endpoints& endpoints = getEndpoints(flags);
if (index < 0 || index >= endpoints.end - endpoints.start) {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
return pattern.charAt(endpoints.start + index);
}
@@ -115,6 +115,10 @@ bool ParsedPatternInfo::hasBody() const {
return positive.integerTotal > 0;
}
+bool ParsedPatternInfo::currencyAsDecimal() const {
+ return positive.hasCurrencyDecimal;
+}
+
/////////////////////////////////////////////////////
/// BEGIN RECURSIVE DESCENT PARSER IMPLEMENTATION ///
/////////////////////////////////////////////////////
@@ -127,8 +131,20 @@ UChar32 ParsedPatternInfo::ParserState::peek() {
}
}
+UChar32 ParsedPatternInfo::ParserState::peek2() {
+ if (offset == pattern.length()) {
+ return -1;
+ }
+ int32_t cp1 = pattern.char32At(offset);
+ int32_t offset2 = offset + U16_LENGTH(cp1);
+ if (offset2 == pattern.length()) {
+ return -1;
+ }
+ return pattern.char32At(offset2);
+}
+
UChar32 ParsedPatternInfo::ParserState::next() {
- int codePoint = peek();
+ int32_t codePoint = peek();
offset += U16_LENGTH(codePoint);
return codePoint;
}
@@ -286,6 +302,35 @@ void ParsedPatternInfo::consumeFormat(UErrorCode& status) {
currentSubpattern->widthExceptAffixes += 1;
consumeFractionFormat(status);
if (U_FAILURE(status)) { return; }
+ } else if (state.peek() == u'¤') {
+ // Check if currency is a decimal separator
+ switch (state.peek2()) {
+ case u'#':
+ case u'0':
+ case u'1':
+ case u'2':
+ case u'3':
+ case u'4':
+ case u'5':
+ case u'6':
+ case u'7':
+ case u'8':
+ case u'9':
+ break;
+ default:
+ // Currency symbol followed by a non-numeric character;
+ // treat as a normal affix.
+ return;
+ }
+ // Currency symbol is followed by a numeric character;
+ // treat as a decimal separator.
+ currentSubpattern->hasCurrencySign = true;
+ currentSubpattern->hasCurrencyDecimal = true;
+ currentSubpattern->hasDecimal = true;
+ currentSubpattern->widthExceptAffixes += 1;
+ state.next(); // consume the symbol
+ consumeFractionFormat(status);
+ if (U_FAILURE(status)) { return; }
}
}
@@ -565,6 +610,9 @@ PatternParser::patternInfoToProperties(DecimalFormatProperties& properties, Pars
properties.decimalSeparatorAlwaysShown = false;
}
+ // Persist the currency as decimal separator
+ properties.currencyAsDecimal = positive.hasCurrencyDecimal;
+
// Scientific notation settings
if (positive.exponentZeros > 0) {
properties.exponentSignAlwaysShown = positive.exponentHasPlusSign;
@@ -750,7 +798,11 @@ UnicodeString PatternStringUtils::propertiesToPatternString(const DecimalFormatP
}
// Decimal separator
if (magnitude == 0 && (alwaysShowDecimal || mN < 0)) {
- sb.append(u'.');
+ if (properties.currencyAsDecimal) {
+ sb.append(u'¤');
+ } else {
+ sb.append(u'.');
+ }
}
if (!useGrouping) {
continue;
@@ -820,7 +872,7 @@ UnicodeString PatternStringUtils::propertiesToPatternString(const DecimalFormatP
// Copy the positive digit format into the negative.
// This is optional; the pattern is the same as if '#' were appended here instead.
// NOTE: It is not safe to append the UnicodeString to itself, so we need to copy.
- // See http://bugs.icu-project.org/trac/ticket/13707
+ // See https://unicode-org.atlassian.net/browse/ICU-13707
UnicodeString copy(sb);
sb.append(copy, afterPrefixPos, beforeSuffixPos - afterPrefixPos);
sb.append(affixProvider.get().getString(AffixPatternProvider::AFFIX_NEG_SUFFIX));
@@ -869,6 +921,7 @@ PatternStringUtils::convertLocalized(const UnicodeString& input, const DecimalFo
UnicodeString table[LEN][2];
int standIdx = toLocalized ? 0 : 1;
int localIdx = toLocalized ? 1 : 0;
+ // TODO: Add approximately sign here?
table[0][standIdx] = u"%";
table[0][localIdx] = symbols.getConstSymbol(DecimalFormatSymbols::kPercentSymbol);
table[1][standIdx] = u"‰";
@@ -1001,6 +1054,7 @@ PatternStringUtils::convertLocalized(const UnicodeString& input, const DecimalFo
void PatternStringUtils::patternInfoToStringBuilder(const AffixPatternProvider& patternInfo, bool isPrefix,
PatternSignType patternSignType,
+ bool approximately,
StandardPlural::Form plural,
bool perMilleReplacesPercent, UnicodeString& output) {
@@ -1012,7 +1066,7 @@ void PatternStringUtils::patternInfoToStringBuilder(const AffixPatternProvider&
// (If not, we will use the positive subpattern.)
bool useNegativeAffixPattern = patternInfo.hasNegativeSubpattern()
&& (patternSignType == PATTERN_SIGN_TYPE_NEG
- || (patternInfo.negativeHasMinusSign() && plusReplacesMinusSign));
+ || (patternInfo.negativeHasMinusSign() && (plusReplacesMinusSign || approximately)));
// Resolve the flags for the affix pattern.
int flags = 0;
@@ -1034,10 +1088,24 @@ void PatternStringUtils::patternInfoToStringBuilder(const AffixPatternProvider&
} else if (patternSignType == PATTERN_SIGN_TYPE_NEG) {
prependSign = true;
} else {
- prependSign = plusReplacesMinusSign;
+ prependSign = plusReplacesMinusSign || approximately;
}
- // Compute the length of the affix pattern.
+ // What symbols should take the place of the sign placeholder?
+ const char16_t* signSymbols = u"-";
+ if (approximately) {
+ if (plusReplacesMinusSign) {
+ signSymbols = u"~+";
+ } else if (patternSignType == PATTERN_SIGN_TYPE_NEG) {
+ signSymbols = u"~-";
+ } else {
+ signSymbols = u"~";
+ }
+ } else if (plusReplacesMinusSign) {
+ signSymbols = u"+";
+ }
+
+ // Compute the number of tokens in the affix pattern (signSymbols is considered one token).
int length = patternInfo.length(flags) + (prependSign ? 1 : 0);
// Finally, set the result into the StringBuilder.
@@ -1051,8 +1119,13 @@ void PatternStringUtils::patternInfoToStringBuilder(const AffixPatternProvider&
} else {
candidate = patternInfo.charAt(flags, index);
}
- if (plusReplacesMinusSign && candidate == u'-') {
- candidate = u'+';
+ if (candidate == u'-') {
+ if (u_strlen(signSymbols) == 1) {
+ candidate = signSymbols[0];
+ } else {
+ output.append(signSymbols[0]);
+ candidate = signSymbols[1];
+ }
}
if (perMilleReplacesPercent && candidate == u'%') {
candidate = u'‰';
@@ -1106,6 +1179,20 @@ PatternSignType PatternStringUtils::resolveSignDisplay(UNumberSignDisplay signDi
}
break;
+ case UNUM_SIGN_NEGATIVE:
+ case UNUM_SIGN_ACCOUNTING_NEGATIVE:
+ switch (signum) {
+ case SIGNUM_NEG:
+ return PATTERN_SIGN_TYPE_NEG;
+ case SIGNUM_NEG_ZERO:
+ case SIGNUM_POS_ZERO:
+ case SIGNUM_POS:
+ return PATTERN_SIGN_TYPE_POS;
+ default:
+ break;
+ }
+ break;
+
case UNUM_SIGN_NEVER:
return PATTERN_SIGN_TYPE_POS;
@@ -1113,7 +1200,7 @@ PatternSignType PatternStringUtils::resolveSignDisplay(UNumberSignDisplay signDi
break;
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
return PATTERN_SIGN_TYPE_POS;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h b/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
index 54f37fd7e2f..94afda37229 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
@@ -62,6 +62,7 @@ struct U_I18N_API ParsedSubpatternInfo {
bool hasPercentSign = false;
bool hasPerMilleSign = false;
bool hasCurrencySign = false;
+ bool hasCurrencyDecimal = false;
bool hasMinusSign = false;
bool hasPlusSign = false;
@@ -104,6 +105,8 @@ struct U_I18N_API ParsedPatternInfo : public AffixPatternProvider, public UMemor
bool hasBody() const U_OVERRIDE;
+ bool currencyAsDecimal() const U_OVERRIDE;
+
private:
struct U_I18N_API ParserState {
const UnicodeString& pattern; // reference to the parent
@@ -119,8 +122,13 @@ struct U_I18N_API ParsedPatternInfo : public AffixPatternProvider, public UMemor
return *this;
}
+ /** Returns the next code point, or -1 if string is too short. */
UChar32 peek();
+ /** Returns the code point after the next code point, or -1 if string is too short. */
+ UChar32 peek2();
+
+ /** Returns the next code point and then steps forward. */
UChar32 next();
// TODO: We don't currently do anything with the message string.
@@ -245,7 +253,7 @@ class U_I18N_API PatternStringUtils {
*
* This test is needed for both NumberPropertyMapper::oldToNew and
* PatternStringUtils::propertiesToPatternString. In Java it cannot be
- * exported by NumberPropertyMapper (package provate) so it is in
+ * exported by NumberPropertyMapper (package private) so it is in
* PatternStringUtils, do the same in C.
*
* @param roundIncr
@@ -308,6 +316,7 @@ class U_I18N_API PatternStringUtils {
*/
static void patternInfoToStringBuilder(const AffixPatternProvider& patternInfo, bool isPrefix,
PatternSignType patternSignType,
+ bool approximately,
StandardPlural::Form plural, bool perMilleReplacesPercent,
UnicodeString& output);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
index a8fd6bc892a..877df63c8f6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
@@ -13,6 +13,7 @@
#include "double-conversion.h"
#include "number_roundingutils.h"
#include "number_skeletons.h"
+#include "number_decnum.h"
#include "putilimp.h"
#include "string_segment.h"
@@ -35,8 +36,10 @@ void number::impl::parseIncrementOption(const StringSegment &segment,
// Utilize DecimalQuantity/decNumber to parse this for us.
DecimalQuantity dq;
UErrorCode localStatus = U_ZERO_ERROR;
- dq.setToDecNumber({buffer.data(), buffer.length()}, localStatus);
- if (U_FAILURE(localStatus)) {
+ DecNum decnum;
+ decnum.setTo({buffer.data(), buffer.length()}, localStatus);
+ dq.setToDecNum(decnum, localStatus);
+ if (U_FAILURE(localStatus) || decnum.isSpecial()) {
// throw new SkeletonSyntaxException("Invalid rounding increment", segment, e);
status = U_NUMBER_SKELETON_SYNTAX_ERROR;
return;
@@ -193,6 +196,12 @@ Precision Precision::minMaxSignificantDigits(int32_t minSignificantDigits, int32
}
}
+Precision Precision::trailingZeroDisplay(UNumberTrailingZeroDisplay trailingZeroDisplay) const {
+ Precision result(*this); // copy constructor
+ result.fTrailingZeroDisplay = trailingZeroDisplay;
+ return result;
+}
+
IncrementPrecision Precision::increment(double roundingIncrement) {
if (roundingIncrement > 0.0) {
return constructIncrement(roundingIncrement, 0);
@@ -205,10 +214,32 @@ CurrencyPrecision Precision::currency(UCurrencyUsage currencyUsage) {
return constructCurrency(currencyUsage);
}
+Precision FractionPrecision::withSignificantDigits(
+ int32_t minSignificantDigits,
+ int32_t maxSignificantDigits,
+ UNumberRoundingPriority priority) const {
+ if (fType == RND_ERROR) { return *this; } // no-op in error state
+ if (minSignificantDigits >= 1 &&
+ maxSignificantDigits >= minSignificantDigits &&
+ maxSignificantDigits <= kMaxIntFracSig) {
+ return constructFractionSignificant(
+ *this,
+ minSignificantDigits,
+ maxSignificantDigits,
+ priority);
+ } else {
+ return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR};
+ }
+}
+
Precision FractionPrecision::withMinDigits(int32_t minSignificantDigits) const {
if (fType == RND_ERROR) { return *this; } // no-op in error state
if (minSignificantDigits >= 1 && minSignificantDigits <= kMaxIntFracSig) {
- return constructFractionSignificant(*this, minSignificantDigits, -1);
+ return constructFractionSignificant(
+ *this,
+ 1,
+ minSignificantDigits,
+ UNUM_ROUNDING_PRIORITY_RELAXED);
} else {
return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR};
}
@@ -217,7 +248,10 @@ Precision FractionPrecision::withMinDigits(int32_t minSignificantDigits) const {
Precision FractionPrecision::withMaxDigits(int32_t maxSignificantDigits) const {
if (fType == RND_ERROR) { return *this; } // no-op in error state
if (maxSignificantDigits >= 1 && maxSignificantDigits <= kMaxIntFracSig) {
- return constructFractionSignificant(*this, -1, maxSignificantDigits);
+ return constructFractionSignificant(*this,
+ 1,
+ maxSignificantDigits,
+ UNUM_ROUNDING_PRIORITY_STRICT);
} else {
return {U_NUMBER_ARG_OUTOFBOUNDS_ERROR};
}
@@ -231,11 +265,11 @@ Precision Precision::withCurrency(const CurrencyUnit &currency, UErrorCode &stat
double increment = ucurr_getRoundingIncrementForUsage(isoCode, fUnion.currencyUsage, &status);
int32_t minMaxFrac = ucurr_getDefaultFractionDigitsForUsage(
isoCode, fUnion.currencyUsage, &status);
- if (increment != 0.0) {
- return constructIncrement(increment, minMaxFrac);
- } else {
- return constructFraction(minMaxFrac, minMaxFrac);
- }
+ Precision retval = (increment != 0.0)
+ ? static_cast<Precision>(constructIncrement(increment, minMaxFrac))
+ : static_cast<Precision>(constructFraction(minMaxFrac, minMaxFrac));
+ retval.fTrailingZeroDisplay = fTrailingZeroDisplay;
+ return retval;
}
// Public method on CurrencyPrecision subclass
@@ -280,10 +314,15 @@ Precision Precision::constructSignificant(int32_t minSig, int32_t maxSig) {
}
Precision
-Precision::constructFractionSignificant(const FractionPrecision &base, int32_t minSig, int32_t maxSig) {
+Precision::constructFractionSignificant(
+ const FractionPrecision &base,
+ int32_t minSig,
+ int32_t maxSig,
+ UNumberRoundingPriority priority) {
FractionSignificantSettings settings = base.fUnion.fracSig;
settings.fMinSig = static_cast<digits_t>(minSig);
settings.fMaxSig = static_cast<digits_t>(maxSig);
+ settings.fPriority = priority;
PrecisionUnion union_;
union_.fracSig = settings;
return {RND_FRACTION_SIGNIFICANT, union_};
@@ -383,6 +422,7 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const
if (fPassThrough) {
return;
}
+ int32_t resolvedMinFraction = 0;
switch (fPrecision.fType) {
case Precision::RND_BOGUS:
case Precision::RND_ERROR:
@@ -399,8 +439,8 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const
getRoundingMagnitudeFraction(fPrecision.fUnion.fracSig.fMaxFrac),
fRoundingMode,
status);
- value.setMinFraction(
- uprv_max(0, -getDisplayMagnitudeFraction(fPrecision.fUnion.fracSig.fMinFrac)));
+ resolvedMinFraction =
+ uprv_max(0, -getDisplayMagnitudeFraction(fPrecision.fUnion.fracSig.fMinFrac));
break;
case Precision::RND_SIGNIFICANT:
@@ -408,8 +448,8 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const
getRoundingMagnitudeSignificant(value, fPrecision.fUnion.fracSig.fMaxSig),
fRoundingMode,
status);
- value.setMinFraction(
- uprv_max(0, -getDisplayMagnitudeSignificant(value, fPrecision.fUnion.fracSig.fMinSig)));
+ resolvedMinFraction =
+ uprv_max(0, -getDisplayMagnitudeSignificant(value, fPrecision.fUnion.fracSig.fMinSig));
// Make sure that digits are displayed on zero.
if (value.isZeroish() && fPrecision.fUnion.fracSig.fMinSig > 0) {
value.setMinInteger(1);
@@ -417,23 +457,21 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const
break;
case Precision::RND_FRACTION_SIGNIFICANT: {
- int32_t displayMag = getDisplayMagnitudeFraction(fPrecision.fUnion.fracSig.fMinFrac);
- int32_t roundingMag = getRoundingMagnitudeFraction(fPrecision.fUnion.fracSig.fMaxFrac);
- if (fPrecision.fUnion.fracSig.fMinSig == -1) {
- // Max Sig override
- int32_t candidate = getRoundingMagnitudeSignificant(
- value,
- fPrecision.fUnion.fracSig.fMaxSig);
- roundingMag = uprv_max(roundingMag, candidate);
+ int32_t roundingMag1 = getRoundingMagnitudeFraction(fPrecision.fUnion.fracSig.fMaxFrac);
+ int32_t roundingMag2 = getRoundingMagnitudeSignificant(value, fPrecision.fUnion.fracSig.fMaxSig);
+ int32_t roundingMag;
+ if (fPrecision.fUnion.fracSig.fPriority == UNUM_ROUNDING_PRIORITY_RELAXED) {
+ roundingMag = uprv_min(roundingMag1, roundingMag2);
} else {
- // Min Sig override
- int32_t candidate = getDisplayMagnitudeSignificant(
- value,
- fPrecision.fUnion.fracSig.fMinSig);
- roundingMag = uprv_min(roundingMag, candidate);
+ roundingMag = uprv_max(roundingMag1, roundingMag2);
}
value.roundToMagnitude(roundingMag, fRoundingMode, status);
- value.setMinFraction(uprv_max(0, -displayMag));
+
+ int32_t displayMag1 = getDisplayMagnitudeFraction(fPrecision.fUnion.fracSig.fMinFrac);
+ int32_t displayMag2 = getDisplayMagnitudeSignificant(value, fPrecision.fUnion.fracSig.fMinSig);
+ int32_t displayMag = uprv_min(displayMag1, displayMag2);
+ resolvedMinFraction = uprv_max(0, -displayMag);
+
break;
}
@@ -442,7 +480,7 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const
fPrecision.fUnion.increment.fIncrement,
fRoundingMode,
status);
- value.setMinFraction(fPrecision.fUnion.increment.fMinFrac);
+ resolvedMinFraction = fPrecision.fUnion.increment.fMinFrac;
break;
case Precision::RND_INCREMENT_ONE:
@@ -450,7 +488,7 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const
-fPrecision.fUnion.increment.fMaxFrac,
fRoundingMode,
status);
- value.setMinFraction(fPrecision.fUnion.increment.fMinFrac);
+ resolvedMinFraction = fPrecision.fUnion.increment.fMinFrac;
break;
case Precision::RND_INCREMENT_FIVE:
@@ -458,20 +496,27 @@ void RoundingImpl::apply(impl::DecimalQuantity &value, UErrorCode& status) const
-fPrecision.fUnion.increment.fMaxFrac,
fRoundingMode,
status);
- value.setMinFraction(fPrecision.fUnion.increment.fMinFrac);
+ resolvedMinFraction = fPrecision.fUnion.increment.fMinFrac;
break;
case Precision::RND_CURRENCY:
// Call .withCurrency() before .apply()!
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
+ }
+
+ if (fPrecision.fTrailingZeroDisplay == UNUM_TRAILING_ZERO_AUTO ||
+ // PLURAL_OPERAND_T returns fraction digits as an integer
+ value.getPluralOperand(PLURAL_OPERAND_T) != 0) {
+ value.setMinFraction(resolvedMinFraction);
}
}
void RoundingImpl::apply(impl::DecimalQuantity &value, int32_t minInt, UErrorCode /*status*/) {
// This method is intended for the one specific purpose of helping print "00.000E0".
+ // Question: Is it useful to look at trailingZeroDisplay here?
U_ASSERT(isSignificantDigits());
U_ASSERT(value.isZeroish());
value.setMinFraction(fPrecision.fUnion.fracSig.fMinSig - minInt);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h b/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h
index e85cbae9fdd..06fadd29fd5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h
@@ -104,6 +104,45 @@ getRoundingDirection(bool isEven, bool isNegative, Section section, RoundingMode
}
break;
+ case RoundingMode::UNUM_ROUND_HALF_ODD:
+ switch (section) {
+ case SECTION_MIDPOINT:
+ return !isEven;
+ case SECTION_LOWER:
+ return true;
+ case SECTION_UPPER:
+ return false;
+ default:
+ break;
+ }
+ break;
+
+ case RoundingMode::UNUM_ROUND_HALF_CEILING:
+ switch (section) {
+ case SECTION_MIDPOINT:
+ return isNegative;
+ case SECTION_LOWER:
+ return true;
+ case SECTION_UPPER:
+ return false;
+ default:
+ break;
+ }
+ break;
+
+ case RoundingMode::UNUM_ROUND_HALF_FLOOR:
+ switch (section) {
+ case SECTION_MIDPOINT:
+ return !isNegative;
+ case SECTION_LOWER:
+ return true;
+ case SECTION_UPPER:
+ return false;
+ default:
+ break;
+ }
+ break;
+
default:
break;
}
@@ -204,7 +243,7 @@ class RoundingImpl {
* - see blueprint_helpers::parseIncrementOption().
*
* Referencing MacroProps means needing to pull in the .o files that have the
- * destructors for the SymbolsWrapper, Usage, and Scale classes.
+ * destructors for the SymbolsWrapper, StringProp, and Scale classes.
*/
void parseIncrementOption(const StringSegment &segment, Precision &outPrecision, UErrorCode &status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp
index 527ffbf78df..d365d982d4c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp
@@ -96,7 +96,7 @@ bool ScientificModifier::isStrong() const {
bool ScientificModifier::containsField(Field field) const {
(void)field;
// This method is not used for inner modifiers.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
void ScientificModifier::getParameters(Parameters& output) const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h b/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
index a55d5ed1d41..a40a6e416d1 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
@@ -52,7 +52,7 @@ class ScientificHandler : public UMemory, public MicroPropsGenerator, public Mul
int32_t getMultiplier(int32_t magnitude) const U_OVERRIDE;
private:
- const Notation::ScientificSettings& fSettings;
+ const Notation::ScientificSettings fSettings;
const DecimalFormatSymbols *fSymbols;
const MicroPropsGenerator *fParent;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp
index 028525a589d..de70c5cedff 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.cpp
@@ -68,9 +68,13 @@ void U_CALLCONV initNumberSkeletons(UErrorCode& status) {
b.add(u"rounding-mode-down", STEM_ROUNDING_MODE_DOWN, status);
b.add(u"rounding-mode-up", STEM_ROUNDING_MODE_UP, status);
b.add(u"rounding-mode-half-even", STEM_ROUNDING_MODE_HALF_EVEN, status);
+ b.add(u"rounding-mode-half-odd", STEM_ROUNDING_MODE_HALF_ODD, status);
+ b.add(u"rounding-mode-half-ceiling", STEM_ROUNDING_MODE_HALF_CEILING, status);
+ b.add(u"rounding-mode-half-floor", STEM_ROUNDING_MODE_HALF_FLOOR, status);
b.add(u"rounding-mode-half-down", STEM_ROUNDING_MODE_HALF_DOWN, status);
b.add(u"rounding-mode-half-up", STEM_ROUNDING_MODE_HALF_UP, status);
b.add(u"rounding-mode-unnecessary", STEM_ROUNDING_MODE_UNNECESSARY, status);
+ b.add(u"integer-width-trunc", STEM_INTEGER_WIDTH_TRUNC, status);
b.add(u"group-off", STEM_GROUP_OFF, status);
b.add(u"group-min2", STEM_GROUP_MIN2, status);
b.add(u"group-auto", STEM_GROUP_AUTO, status);
@@ -91,6 +95,8 @@ void U_CALLCONV initNumberSkeletons(UErrorCode& status) {
b.add(u"sign-accounting-always", STEM_SIGN_ACCOUNTING_ALWAYS, status);
b.add(u"sign-except-zero", STEM_SIGN_EXCEPT_ZERO, status);
b.add(u"sign-accounting-except-zero", STEM_SIGN_ACCOUNTING_EXCEPT_ZERO, status);
+ b.add(u"sign-negative", STEM_SIGN_NEGATIVE, status);
+ b.add(u"sign-accounting-negative", STEM_SIGN_ACCOUNTING_NEGATIVE, status);
b.add(u"decimal-auto", STEM_DECIMAL_AUTO, status);
b.add(u"decimal-always", STEM_DECIMAL_ALWAYS, status);
if (U_FAILURE(status)) { return; }
@@ -121,6 +127,8 @@ void U_CALLCONV initNumberSkeletons(UErrorCode& status) {
b.add(u"()!", STEM_SIGN_ACCOUNTING_ALWAYS, status);
b.add(u"+?", STEM_SIGN_EXCEPT_ZERO, status);
b.add(u"()?", STEM_SIGN_ACCOUNTING_EXCEPT_ZERO, status);
+ b.add(u"+-", STEM_SIGN_NEGATIVE, status);
+ b.add(u"()-", STEM_SIGN_ACCOUNTING_NEGATIVE, status);
if (U_FAILURE(status)) { return; }
// Build the CharsTrie
@@ -169,7 +177,7 @@ Notation stem_to_object::notation(skeleton::StemEnum stem) {
case STEM_NOTATION_SIMPLE:
return Notation::simple();
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -182,7 +190,7 @@ MeasureUnit stem_to_object::unit(skeleton::StemEnum stem) {
case STEM_PERMILLE:
return MeasureUnit::getPermille();
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -197,7 +205,7 @@ Precision stem_to_object::precision(skeleton::StemEnum stem) {
case STEM_PRECISION_CURRENCY_CASH:
return Precision::currency(UCURR_USAGE_CASH);
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -213,6 +221,12 @@ UNumberFormatRoundingMode stem_to_object::roundingMode(skeleton::StemEnum stem)
return UNUM_ROUND_UP;
case STEM_ROUNDING_MODE_HALF_EVEN:
return UNUM_ROUND_HALFEVEN;
+ case STEM_ROUNDING_MODE_HALF_ODD:
+ return UNUM_ROUND_HALF_ODD;
+ case STEM_ROUNDING_MODE_HALF_CEILING:
+ return UNUM_ROUND_HALF_CEILING;
+ case STEM_ROUNDING_MODE_HALF_FLOOR:
+ return UNUM_ROUND_HALF_FLOOR;
case STEM_ROUNDING_MODE_HALF_DOWN:
return UNUM_ROUND_HALFDOWN;
case STEM_ROUNDING_MODE_HALF_UP:
@@ -220,7 +234,7 @@ UNumberFormatRoundingMode stem_to_object::roundingMode(skeleton::StemEnum stem)
case STEM_ROUNDING_MODE_UNNECESSARY:
return UNUM_ROUND_UNNECESSARY;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -278,6 +292,10 @@ UNumberSignDisplay stem_to_object::signDisplay(skeleton::StemEnum stem) {
return UNUM_SIGN_EXCEPT_ZERO;
case STEM_SIGN_ACCOUNTING_EXCEPT_ZERO:
return UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO;
+ case STEM_SIGN_NEGATIVE:
+ return UNUM_SIGN_NEGATIVE;
+ case STEM_SIGN_ACCOUNTING_NEGATIVE:
+ return UNUM_SIGN_ACCOUNTING_NEGATIVE;
default:
return UNUM_SIGN_COUNT; // for objects, throw; for enums, return COUNT
}
@@ -312,6 +330,15 @@ void enum_to_stem_string::roundingMode(UNumberFormatRoundingMode value, UnicodeS
case UNUM_ROUND_HALFEVEN:
sb.append(u"rounding-mode-half-even", -1);
break;
+ case UNUM_ROUND_HALF_ODD:
+ sb.append(u"rounding-mode-half-odd", -1);
+ break;
+ case UNUM_ROUND_HALF_CEILING:
+ sb.append(u"rounding-mode-half-ceiling", -1);
+ break;
+ case UNUM_ROUND_HALF_FLOOR:
+ sb.append(u"rounding-mode-half-floor", -1);
+ break;
case UNUM_ROUND_HALFDOWN:
sb.append(u"rounding-mode-half-down", -1);
break;
@@ -322,7 +349,7 @@ void enum_to_stem_string::roundingMode(UNumberFormatRoundingMode value, UnicodeS
sb.append(u"rounding-mode-unnecessary", -1);
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -344,7 +371,7 @@ void enum_to_stem_string::groupingStrategy(UNumberGroupingStrategy value, Unicod
sb.append(u"group-thousands", -1);
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -372,7 +399,7 @@ void enum_to_stem_string::unitWidth(UNumberUnitWidth value, UnicodeString& sb) {
sb.append(u"unit-width-hidden", -1);
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -399,8 +426,14 @@ void enum_to_stem_string::signDisplay(UNumberSignDisplay value, UnicodeString& s
case UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO:
sb.append(u"sign-accounting-except-zero", -1);
break;
+ case UNUM_SIGN_NEGATIVE:
+ sb.append(u"sign-negative", -1);
+ break;
+ case UNUM_SIGN_ACCOUNTING_NEGATIVE:
+ sb.append(u"sign-accounting-negative", -1);
+ break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -414,7 +447,7 @@ enum_to_stem_string::decimalSeparatorDisplay(UNumberDecimalSeparatorDisplay valu
sb.append(u"decimal-always", -1);
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -584,7 +617,7 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case u'@':
CHECK_NULL(seen, precision, status);
blueprint_helpers::parseDigitsStem(segment, macros, status);
- return STATE_NULL;
+ return STATE_PRECISION;
case u'E':
CHECK_NULL(seen, notation, status);
blueprint_helpers::parseScientificStem(segment, macros, status);
@@ -650,7 +683,7 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_PRECISION_INTEGER:
return STATE_FRACTION_PRECISION; // allows for "precision-integer/@##"
default:
- return STATE_NULL;
+ return STATE_PRECISION;
}
case STEM_ROUNDING_MODE_CEILING:
@@ -658,6 +691,9 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_ROUNDING_MODE_DOWN:
case STEM_ROUNDING_MODE_UP:
case STEM_ROUNDING_MODE_HALF_EVEN:
+ case STEM_ROUNDING_MODE_HALF_ODD:
+ case STEM_ROUNDING_MODE_HALF_CEILING:
+ case STEM_ROUNDING_MODE_HALF_FLOOR:
case STEM_ROUNDING_MODE_HALF_DOWN:
case STEM_ROUNDING_MODE_HALF_UP:
case STEM_ROUNDING_MODE_UNNECESSARY:
@@ -665,6 +701,11 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
macros.roundingMode = stem_to_object::roundingMode(stem);
return STATE_NULL;
+ case STEM_INTEGER_WIDTH_TRUNC:
+ CHECK_NULL(seen, integerWidth, status);
+ macros.integerWidth = IntegerWidth::zeroFillTo(0).truncateAt(0);
+ return STATE_NULL;
+
case STEM_GROUP_OFF:
case STEM_GROUP_MIN2:
case STEM_GROUP_AUTO:
@@ -697,6 +738,8 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
case STEM_SIGN_ACCOUNTING_ALWAYS:
case STEM_SIGN_EXCEPT_ZERO:
case STEM_SIGN_ACCOUNTING_EXCEPT_ZERO:
+ case STEM_SIGN_NEGATIVE:
+ case STEM_SIGN_ACCOUNTING_NEGATIVE:
CHECK_NULL(seen, sign, status);
macros.sign = stem_to_object::signDisplay(stem);
return STATE_NULL;
@@ -748,7 +791,7 @@ skeleton::parseStem(const StringSegment& segment, const UCharsTrie& stemTrie, Se
return STATE_SCALE;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -776,7 +819,7 @@ ParseState skeleton::parseOption(ParseState stem, const StringSegment& segment,
return STATE_NULL;
case STATE_INCREMENT_PRECISION:
blueprint_helpers::parseIncrementOption(segment, macros, status);
- return STATE_NULL;
+ return STATE_PRECISION;
case STATE_INTEGER_WIDTH:
blueprint_helpers::parseIntegerWidthOption(segment, macros, status);
return STATE_NULL;
@@ -816,6 +859,22 @@ ParseState skeleton::parseOption(ParseState stem, const StringSegment& segment,
switch (stem) {
case STATE_FRACTION_PRECISION:
if (blueprint_helpers::parseFracSigOption(segment, macros, status)) {
+ return STATE_PRECISION;
+ }
+ if (U_FAILURE(status)) {
+ return {};
+ }
+ // If the fracSig option was not found, try normal precision options.
+ stem = STATE_PRECISION;
+ break;
+ default:
+ break;
+ }
+
+ // Trailing zeros option
+ switch (stem) {
+ case STATE_PRECISION:
+ if (blueprint_helpers::parseTrailingZeroOption(segment, macros, status)) {
return STATE_NULL;
}
if (U_FAILURE(status)) {
@@ -890,6 +949,10 @@ void GeneratorHelpers::generateSkeleton(const MacroProps& macros, UnicodeString&
status = U_UNSUPPORTED_ERROR;
return;
}
+ if (macros.unitDisplayCase.isSet()) {
+ status = U_UNSUPPORTED_ERROR;
+ return;
+ }
if (macros.affixProvider != nullptr) {
status = U_UNSUPPORTED_ERROR;
return;
@@ -1041,37 +1104,12 @@ void blueprint_helpers::parseIdentifierUnitOption(const StringSegment& segment,
SKELETON_UCHAR_TO_CHAR(buffer, segment.toTempUnicodeString(), 0, segment.length(), status);
ErrorCode internalStatus;
- auto fullUnit = MeasureUnitImpl::forIdentifier(buffer.toStringPiece(), internalStatus);
+ macros.unit = MeasureUnit::forIdentifier(buffer.toStringPiece(), internalStatus);
if (internalStatus.isFailure()) {
// throw new SkeletonSyntaxException("Invalid core unit identifier", segment, e);
status = U_NUMBER_SKELETON_SYNTAX_ERROR;
return;
}
-
- // Mixed units can only be represented by full MeasureUnit instances, so we
- // don't split the denominator into macros.perUnit.
- if (fullUnit.complexity == UMEASURE_UNIT_MIXED) {
- macros.unit = std::move(fullUnit).build(status);
- return;
- }
-
- // When we have a built-in unit (e.g. meter-per-second), we don't split it up
- MeasureUnit testBuiltin = fullUnit.copy(status).build(status);
- if (uprv_strcmp(testBuiltin.getType(), "") != 0) {
- macros.unit = std::move(testBuiltin);
- return;
- }
-
- // TODO(ICU-20941): Clean this up.
- for (int32_t i = 0; i < fullUnit.units.length(); i++) {
- SingleUnitImpl* subUnit = fullUnit.units[i];
- if (subUnit->dimensionality > 0) {
- macros.unit = macros.unit.product(subUnit->build(status), status);
- } else {
- subUnit->dimensionality *= -1;
- macros.perUnit = macros.perUnit.product(subUnit->build(status), status);
- }
- }
}
void blueprint_helpers::parseUnitUsageOption(const StringSegment &segment, MacroProps &macros,
@@ -1226,6 +1264,7 @@ void blueprint_helpers::parseScientificStem(const StringSegment& segment, MacroP
} else if (segment.charAt(offset) == u'?') {
signDisplay = UNUM_SIGN_EXCEPT_ZERO;
} else {
+ // NOTE: Other sign displays are not included because they aren't useful in this context
goto fail;
}
offset++;
@@ -1284,21 +1323,14 @@ bool blueprint_helpers::parseFracSigOption(const StringSegment& segment, MacroPr
break;
}
}
- // For the frac-sig option, there must be minSig or maxSig but not both.
- // Valid: @+, @@+, @@@+
- // Valid: @#, @##, @###
- // Invalid: @, @@, @@@
- // Invalid: @@#, @@##, @@@#
if (offset < segment.length()) {
if (isWildcardChar(segment.charAt(offset))) {
+ // @+, @@+, @@@+
maxSig = -1;
offset++;
- } else if (minSig > 1) {
- // @@#, @@##, @@@#
- // throw new SkeletonSyntaxException("Invalid digits option for fraction rounder", segment);
- status = U_NUMBER_SKELETON_SYNTAX_ERROR;
- return false;
} else {
+ // @#, @##, @###
+ // @@#, @@##, @@@#
maxSig = minSig;
for (; offset < segment.length(); offset++) {
if (segment.charAt(offset) == u'#') {
@@ -1310,42 +1342,71 @@ bool blueprint_helpers::parseFracSigOption(const StringSegment& segment, MacroPr
}
} else {
// @, @@, @@@
- // throw new SkeletonSyntaxException("Invalid digits option for fraction rounder", segment);
- status = U_NUMBER_SKELETON_SYNTAX_ERROR;
- return false;
+ maxSig = minSig;
}
+ UNumberRoundingPriority priority;
if (offset < segment.length()) {
- // throw new SkeletonSyntaxException("Invalid digits option for fraction rounder", segment);
+ if (maxSig == -1) {
+ // The wildcard character is not allowed with the priority annotation
+ status = U_NUMBER_SKELETON_SYNTAX_ERROR;
+ return false;
+ }
+ if (segment.codePointAt(offset) == u'r') {
+ priority = UNUM_ROUNDING_PRIORITY_RELAXED;
+ offset++;
+ } else if (segment.codePointAt(offset) == u's') {
+ priority = UNUM_ROUNDING_PRIORITY_STRICT;
+ offset++;
+ } else {
+ // Invalid digits option for fraction rounder
+ status = U_NUMBER_SKELETON_SYNTAX_ERROR;
+ return false;
+ }
+ if (offset < segment.length()) {
+ // Invalid digits option for fraction rounder
+ status = U_NUMBER_SKELETON_SYNTAX_ERROR;
+ return false;
+ }
+ } else if (maxSig == -1) {
+ // withMinDigits
+ maxSig = minSig;
+ minSig = 1;
+ priority = UNUM_ROUNDING_PRIORITY_RELAXED;
+ } else if (minSig == 1) {
+ // withMaxDigits
+ priority = UNUM_ROUNDING_PRIORITY_STRICT;
+ } else {
+ // Digits options with both min and max sig require the priority option
status = U_NUMBER_SKELETON_SYNTAX_ERROR;
return false;
}
auto& oldPrecision = static_cast<const FractionPrecision&>(macros.precision);
- if (maxSig == -1) {
- macros.precision = oldPrecision.withMinDigits(minSig);
- } else {
- macros.precision = oldPrecision.withMaxDigits(maxSig);
- }
+ macros.precision = oldPrecision.withSignificantDigits(minSig, maxSig, priority);
return true;
}
+bool blueprint_helpers::parseTrailingZeroOption(const StringSegment& segment, MacroProps& macros, UErrorCode&) {
+ if (segment == u"w") {
+ macros.precision = macros.precision.trailingZeroDisplay(UNUM_TRAILING_ZERO_HIDE_IF_WHOLE);
+ return true;
+ }
+ return false;
+}
+
void blueprint_helpers::parseIncrementOption(const StringSegment &segment, MacroProps &macros,
UErrorCode &status) {
number::impl::parseIncrementOption(segment, macros.precision, status);
}
-void blueprint_helpers::generateIncrementOption(double increment, int32_t trailingZeros, UnicodeString& sb,
+void blueprint_helpers::generateIncrementOption(double increment, int32_t minFrac, UnicodeString& sb,
UErrorCode&) {
// Utilize DecimalQuantity/double_conversion to format this for us.
DecimalQuantity dq;
dq.setToDouble(increment);
dq.roundToInfinity();
+ dq.setMinFraction(minFrac);
sb.append(dq.toPlainString());
-
- // We might need to append extra trailing zeros for min fraction...
- if (trailingZeros > 0) {
- appendMultiple(sb, u'0', trailingZeros);
- }
}
void blueprint_helpers::parseIntegerWidthOption(const StringSegment& segment, MacroProps& macros,
@@ -1434,7 +1495,7 @@ void blueprint_helpers::parseScaleOption(const StringSegment& segment, MacroProp
LocalPointer<DecNum> decnum(new DecNum(), status);
if (U_FAILURE(status)) { return; }
decnum->setTo({buffer.data(), buffer.length()}, status);
- if (U_FAILURE(status)) {
+ if (U_FAILURE(status) || decnum->isSpecial()) {
// This is a skeleton syntax error; don't let the low-level decnum error bubble up
status = U_NUMBER_SKELETON_SYNTAX_ERROR;
return;
@@ -1537,7 +1598,7 @@ bool GeneratorHelpers::unit(const MacroProps& macros, UnicodeString& sb, UErrorC
bool GeneratorHelpers::usage(const MacroProps& macros, UnicodeString& sb, UErrorCode& /* status */) {
if (macros.usage.isSet()) {
sb.append(u"usage/", -1);
- sb.append(UnicodeString(macros.usage.fUsage, -1, US_INV));
+ sb.append(UnicodeString(macros.usage.fValue, -1, US_INV));
return true;
}
return false;
@@ -1556,10 +1617,11 @@ bool GeneratorHelpers::precision(const MacroProps& macros, UnicodeString& sb, UE
const Precision::FractionSignificantSettings& impl = macros.precision.fUnion.fracSig;
blueprint_helpers::generateFractionStem(impl.fMinFrac, impl.fMaxFrac, sb, status);
sb.append(u'/');
- if (impl.fMinSig == -1) {
- blueprint_helpers::generateDigitsStem(1, impl.fMaxSig, sb, status);
+ blueprint_helpers::generateDigitsStem(impl.fMinSig, impl.fMaxSig, sb, status);
+ if (impl.fPriority == UNUM_ROUNDING_PRIORITY_RELAXED) {
+ sb.append(u'r');
} else {
- blueprint_helpers::generateDigitsStem(impl.fMinSig, -1, sb, status);
+ sb.append(u's');
}
} else if (macros.precision.fType == Precision::RND_INCREMENT
|| macros.precision.fType == Precision::RND_INCREMENT_ONE
@@ -1568,7 +1630,7 @@ bool GeneratorHelpers::precision(const MacroProps& macros, UnicodeString& sb, UE
sb.append(u"precision-increment/", -1);
blueprint_helpers::generateIncrementOption(
impl.fIncrement,
- impl.fMinFrac - impl.fMaxFrac,
+ impl.fMinFrac,
sb,
status);
} else if (macros.precision.fType == Precision::RND_CURRENCY) {
@@ -1583,6 +1645,10 @@ bool GeneratorHelpers::precision(const MacroProps& macros, UnicodeString& sb, UE
return false;
}
+ if (macros.precision.fTrailingZeroDisplay == UNUM_TRAILING_ZERO_HIDE_IF_WHOLE) {
+ sb.append(u"/w", -1);
+ }
+
// NOTE: Always return true for rounding because the default value depends on other options.
return true;
}
@@ -1615,10 +1681,15 @@ bool GeneratorHelpers::integerWidth(const MacroProps& macros, UnicodeString& sb,
// Error or Default
return false;
}
+ const auto& minMaxInt = macros.integerWidth.fUnion.minMaxInt;
+ if (minMaxInt.fMinInt == 0 && minMaxInt.fMaxInt == 0) {
+ sb.append(u"integer-width-trunc", -1);
+ return true;
+ }
sb.append(u"integer-width/", -1);
blueprint_helpers::generateIntegerWidthOption(
- macros.integerWidth.fUnion.minMaxInt.fMinInt,
- macros.integerWidth.fUnion.minMaxInt.fMaxInt,
+ minMaxInt.fMinInt,
+ minMaxInt.fMaxInt,
sb,
status);
return true;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h b/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h
index 201267e635c..be41f1b3237 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_skeletons.h
@@ -42,6 +42,7 @@ enum ParseState {
STATE_SCIENTIFIC,
STATE_FRACTION_PRECISION,
+ STATE_PRECISION,
// Section 2: An option is required:
@@ -85,9 +86,13 @@ enum StemEnum {
STEM_ROUNDING_MODE_DOWN,
STEM_ROUNDING_MODE_UP,
STEM_ROUNDING_MODE_HALF_EVEN,
+ STEM_ROUNDING_MODE_HALF_ODD,
+ STEM_ROUNDING_MODE_HALF_CEILING,
+ STEM_ROUNDING_MODE_HALF_FLOOR,
STEM_ROUNDING_MODE_HALF_DOWN,
STEM_ROUNDING_MODE_HALF_UP,
STEM_ROUNDING_MODE_UNNECESSARY,
+ STEM_INTEGER_WIDTH_TRUNC,
STEM_GROUP_OFF,
STEM_GROUP_MIN2,
STEM_GROUP_AUTO,
@@ -108,6 +113,8 @@ enum StemEnum {
STEM_SIGN_ACCOUNTING_ALWAYS,
STEM_SIGN_EXCEPT_ZERO,
STEM_SIGN_ACCOUNTING_EXCEPT_ZERO,
+ STEM_SIGN_NEGATIVE,
+ STEM_SIGN_ACCOUNTING_NEGATIVE,
STEM_DECIMAL_AUTO,
STEM_DECIMAL_ALWAYS,
@@ -273,10 +280,13 @@ void parseIntegerStem(const StringSegment& segment, MacroProps& macros, UErrorCo
/** @return Whether we successfully found and parsed a frac-sig option. */
bool parseFracSigOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
+/** @return Whether we successfully found and parsed a trailing zero option. */
+bool parseTrailingZeroOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
+
void parseIncrementOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
void
-generateIncrementOption(double increment, int32_t trailingZeros, UnicodeString& sb, UErrorCode& status);
+generateIncrementOption(double increment, int32_t minFrac, UnicodeString& sb, UErrorCode& status);
void parseIntegerWidthOption(const StringSegment& segment, MacroProps& macros, UErrorCode& status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_types.h b/Build/source/libs/icu/icu-src/source/i18n/number_types.h
index 8078851ba3f..84846efb924 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_types.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_types.h
@@ -62,26 +62,29 @@ enum AffixPatternType {
// Represents a plus sign symbol '+'.
TYPE_PLUS_SIGN = -2,
+ // Represents an approximately sign symbol '~'.
+ TYPE_APPROXIMATELY_SIGN = -3,
+
// Represents a percent sign symbol '%'.
- TYPE_PERCENT = -3,
+ TYPE_PERCENT = -4,
// Represents a permille sign symbol '‰'.
- TYPE_PERMILLE = -4,
+ TYPE_PERMILLE = -5,
// Represents a single currency symbol '¤'.
- TYPE_CURRENCY_SINGLE = -5,
+ TYPE_CURRENCY_SINGLE = -6,
// Represents a double currency symbol '¤¤'.
- TYPE_CURRENCY_DOUBLE = -6,
+ TYPE_CURRENCY_DOUBLE = -7,
// Represents a triple currency symbol '¤¤¤'.
- TYPE_CURRENCY_TRIPLE = -7,
+ TYPE_CURRENCY_TRIPLE = -8,
// Represents a quadruple currency symbol '¤¤¤¤'.
- TYPE_CURRENCY_QUAD = -8,
+ TYPE_CURRENCY_QUAD = -9,
// Represents a quintuple currency symbol '¤¤¤¤¤'.
- TYPE_CURRENCY_QUINT = -9,
+ TYPE_CURRENCY_QUINT = -10,
// Represents a sequence of six or more currency symbols.
TYPE_CURRENCY_OVERFLOW = -15
@@ -137,6 +140,11 @@ class U_I18N_API AffixPatternProvider {
* number instead of rendering the number.
*/
virtual bool hasBody() const = 0;
+
+ /**
+ * True if the currency symbol should replace the decimal separator.
+ */
+ virtual bool currencyAsDecimal() const = 0;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp
index 0d9cb06c50a..5d93d12cce7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.cpp
@@ -28,116 +28,124 @@ using icu::StringSegment;
using icu::units::ConversionRates;
// Copy constructor
-Usage::Usage(const Usage &other) : Usage() {
+StringProp::StringProp(const StringProp &other) : StringProp() {
this->operator=(other);
}
// Copy assignment operator
-Usage &Usage::operator=(const Usage &other) {
+StringProp &StringProp::operator=(const StringProp &other) {
+ if (this == &other) { return *this; } // self-assignment: no-op
fLength = 0;
fError = other.fError;
- if (fUsage != nullptr) {
- uprv_free(fUsage);
- fUsage = nullptr;
+ if (fValue != nullptr) {
+ uprv_free(fValue);
+ fValue = nullptr;
}
- if (other.fUsage == nullptr) {
+ if (other.fValue == nullptr) {
return *this;
}
if (U_FAILURE(other.fError)) {
// We don't bother trying to allocating memory if we're in any case busy
- // copying an errored Usage.
+ // copying an errored StringProp.
return *this;
}
- fUsage = (char *)uprv_malloc(other.fLength + 1);
- if (fUsage == nullptr) {
+ fValue = (char *)uprv_malloc(other.fLength + 1);
+ if (fValue == nullptr) {
fError = U_MEMORY_ALLOCATION_ERROR;
return *this;
}
fLength = other.fLength;
- uprv_strncpy(fUsage, other.fUsage, fLength + 1);
+ uprv_strncpy(fValue, other.fValue, fLength + 1);
return *this;
}
// Move constructor
-Usage::Usage(Usage &&src) U_NOEXCEPT : fUsage(src.fUsage), fLength(src.fLength), fError(src.fError) {
+StringProp::StringProp(StringProp &&src) U_NOEXCEPT : fValue(src.fValue),
+ fLength(src.fLength),
+ fError(src.fError) {
// Take ownership away from src if necessary
- src.fUsage = nullptr;
+ src.fValue = nullptr;
}
// Move assignment operator
-Usage &Usage::operator=(Usage &&src) U_NOEXCEPT {
+StringProp &StringProp::operator=(StringProp &&src) U_NOEXCEPT {
if (this == &src) {
return *this;
}
- if (fUsage != nullptr) {
- uprv_free(fUsage);
+ if (fValue != nullptr) {
+ uprv_free(fValue);
}
- fUsage = src.fUsage;
+ fValue = src.fValue;
fLength = src.fLength;
fError = src.fError;
// Take ownership away from src if necessary
- src.fUsage = nullptr;
+ src.fValue = nullptr;
return *this;
}
-Usage::~Usage() {
- if (fUsage != nullptr) {
- uprv_free(fUsage);
- fUsage = nullptr;
+StringProp::~StringProp() {
+ if (fValue != nullptr) {
+ uprv_free(fValue);
+ fValue = nullptr;
}
}
-void Usage::set(StringPiece value) {
- if (fUsage != nullptr) {
- uprv_free(fUsage);
- fUsage = nullptr;
+void StringProp::set(StringPiece value) {
+ if (fValue != nullptr) {
+ uprv_free(fValue);
+ fValue = nullptr;
}
fLength = value.length();
- fUsage = (char *)uprv_malloc(fLength + 1);
- if (fUsage == nullptr) {
+ fValue = (char *)uprv_malloc(fLength + 1);
+ if (fValue == nullptr) {
fLength = 0;
fError = U_MEMORY_ALLOCATION_ERROR;
return;
}
- uprv_strncpy(fUsage, value.data(), fLength);
- fUsage[fLength] = 0;
+ uprv_strncpy(fValue, value.data(), fLength);
+ fValue[fLength] = 0;
}
// Populates micros.mixedMeasures and modifies quantity, based on the values in
// measures.
void mixedMeasuresToMicros(const MaybeStackVector<Measure> &measures, DecimalQuantity *quantity,
MicroProps *micros, UErrorCode status) {
- micros->mixedMeasuresCount = measures.length() - 1;
- if (micros->mixedMeasuresCount > 0) {
-#ifdef U_DEBUG
- U_ASSERT(micros->outputUnit.getComplexity(status) == UMEASURE_UNIT_MIXED);
- U_ASSERT(U_SUCCESS(status));
- // Check that we received measurements with the expected MeasureUnits:
- MeasureUnitImpl temp;
- const MeasureUnitImpl& impl = MeasureUnitImpl::forMeasureUnit(micros->outputUnit, temp, status);
- U_ASSERT(U_SUCCESS(status));
- U_ASSERT(measures.length() == impl.units.length());
- for (int32_t i = 0; i < measures.length(); i++) {
- U_ASSERT(measures[i]->getUnit() == impl.units[i]->build(status));
- }
- (void)impl;
-#endif
- // Mixed units: except for the last value, we pass all values to the
- // LongNameHandler via micros->mixedMeasures.
- if (micros->mixedMeasures.getCapacity() < micros->mixedMeasuresCount) {
- if (micros->mixedMeasures.resize(micros->mixedMeasuresCount) == nullptr) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return;
- }
+ micros->mixedMeasuresCount = measures.length();
+
+ if (micros->mixedMeasures.getCapacity() < micros->mixedMeasuresCount) {
+ if (micros->mixedMeasures.resize(micros->mixedMeasuresCount) == nullptr) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return;
}
- for (int32_t i = 0; i < micros->mixedMeasuresCount; i++) {
+ }
+
+ for (int32_t i = 0; i < micros->mixedMeasuresCount; i++) {
+ switch (measures[i]->getNumber().getType()) {
+ case Formattable::kInt64:
micros->mixedMeasures[i] = measures[i]->getNumber().getInt64();
+ break;
+
+ case Formattable::kDouble:
+ U_ASSERT(micros->indexOfQuantity < 0);
+ quantity->setToDouble(measures[i]->getNumber().getDouble());
+ micros->indexOfQuantity = i;
+ break;
+
+ default:
+ U_ASSERT(0 == "Found a Measure Number which is neither a double nor an int");
+ UPRV_UNREACHABLE_EXIT;
+ break;
}
- } else {
- micros->mixedMeasuresCount = 0;
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+ }
+
+ if (micros->indexOfQuantity < 0) {
+ // There is no quantity.
+ status = U_INTERNAL_PROGRAM_ERROR;
}
- // The last value (potentially the only value) gets passed on via quantity.
- quantity->setToDouble(measures[measures.length() - 1]->getNumber().getDouble());
}
UsagePrefsHandler::UsagePrefsHandler(const Locale &locale,
@@ -170,22 +178,20 @@ void UsagePrefsHandler::processQuantity(DecimalQuantity &quantity, MicroProps &m
mixedMeasuresToMicros(routedMeasures, &quantity, &micros, status);
}
-UnitConversionHandler::UnitConversionHandler(const MeasureUnit &inputUnit, const MeasureUnit &outputUnit,
+UnitConversionHandler::UnitConversionHandler(const MeasureUnit &targetUnit,
const MicroPropsGenerator *parent, UErrorCode &status)
- : fOutputUnit(outputUnit), fParent(parent) {
+ : fOutputUnit(targetUnit), fParent(parent) {
MeasureUnitImpl tempInput, tempOutput;
- const MeasureUnitImpl &inputUnitImpl = MeasureUnitImpl::forMeasureUnit(inputUnit, tempInput, status);
- const MeasureUnitImpl &outputUnitImpl =
- MeasureUnitImpl::forMeasureUnit(outputUnit, tempOutput, status);
- // TODO: this should become an initOnce thing? Review with other
- // ConversionRates usages.
ConversionRates conversionRates(status);
if (U_FAILURE(status)) {
return;
}
+
+ const MeasureUnitImpl &targetUnitImpl =
+ MeasureUnitImpl::forMeasureUnit(targetUnit, tempOutput, status);
fUnitConverter.adoptInsteadAndCheckErrorCode(
- new ComplexUnitsConverter(inputUnitImpl, outputUnitImpl, conversionRates, status), status);
+ new ComplexUnitsConverter(targetUnitImpl, conversionRates, status), status);
}
void UnitConversionHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micros,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h b/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h
index 9e8bd936bd7..70547225a00 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_usageprefs.h
@@ -97,14 +97,15 @@ class U_I18N_API UnitConversionHandler : public MicroPropsGenerator, public UMem
/**
* Constructor.
*
- * @param inputUnit Specifies the input MeasureUnit. Mixed units are not
- * supported as input (because input is just a single decimal quantity).
- * @param outputUnit Specifies the output MeasureUnit.
+ * @param targetUnit Specifies the output MeasureUnit. The input MeasureUnit
+ * is derived from it: in case of a mixed unit, the biggest unit is
+ * taken as the input unit. If not a mixed unit, the input unit will be
+ * the same as the output unit and no unit conversion takes place.
* @param parent The parent MicroPropsGenerator.
* @param status Receives status.
*/
- UnitConversionHandler(const MeasureUnit &inputUnit, const MeasureUnit &outputUnit,
- const MicroPropsGenerator *parent, UErrorCode &status);
+ UnitConversionHandler(const MeasureUnit &targetUnit, const MicroPropsGenerator *parent,
+ UErrorCode &status);
/**
* Obtains the appropriate output values from the Unit Converter.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp b/Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp
index bef7ea6c61f..ad705321407 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_utils.cpp
@@ -70,7 +70,7 @@ const char16_t* utils::getPatternForStyle(const Locale& locale, const char* nsNa
break;
default:
patternKey = "decimalFormat"; // silence compiler error
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
LocalUResourceBundlePointer res(ures_open(nullptr, locale.getName(), &status));
if (U_FAILURE(status)) { return u""; }
@@ -180,12 +180,6 @@ void DecNum::_setTo(const char* str, int32_t maxDigits, UErrorCode& status) {
status = U_UNSUPPORTED_ERROR;
return;
}
-
- // For consistency with Java BigDecimal, no support for DecNum that is NaN or Infinity!
- if (decNumberIsSpecial(fData.getAlias())) {
- status = U_UNSUPPORTED_ERROR;
- return;
- }
}
void
@@ -252,6 +246,18 @@ bool DecNum::isZero() const {
return decNumberIsZero(fData.getAlias());
}
+bool DecNum::isSpecial() const {
+ return decNumberIsSpecial(fData.getAlias());
+}
+
+bool DecNum::isInfinity() const {
+ return decNumberIsInfinite(fData.getAlias());
+}
+
+bool DecNum::isNaN() const {
+ return decNumberIsNaN(fData.getAlias());
+}
+
void DecNum::toString(ByteSink& output, UErrorCode& status) const {
if (U_FAILURE(status)) {
return;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h b/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h
index d97eadc5cdb..50c861787f4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/number_utypes.h
@@ -42,6 +42,9 @@ public:
// TODO(units,hugovdm): populate this correctly for the general case - it's
// currently only implemented for the .usage() use case.
MeasureUnit outputUnit;
+
+ // The gender of the formatted output.
+ const char *gender = "";
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/numfmt.cpp
index 7c3a0551c32..b8ce1c930f9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numfmt.cpp
@@ -13,7 +13,7 @@
* Date Name Description
* 02/19/97 aliu Converted from java.
* 03/18/97 clhuang Implemented with C++ APIs.
-* 04/17/97 aliu Enlarged MAX_INTEGER_DIGITS to fully accomodate the
+* 04/17/97 aliu Enlarged MAX_INTEGER_DIGITS to fully accommodate the
* largest double, by default.
* Changed DigitCount to int per code review.
* 07/20/98 stephen Changed operator== to check for grouping
@@ -285,7 +285,7 @@ NumberFormat::operator=(const NumberFormat& rhs)
// -------------------------------------
-UBool
+bool
NumberFormat::operator==(const Format& that) const
{
// Format::operator== guarantees this cast is safe
@@ -860,7 +860,7 @@ class ICUNumberFormatFactory : public ICUResourceBundleFactory {
public:
virtual ~ICUNumberFormatFactory();
protected:
- virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* /* service */, UErrorCode& status) const {
+ virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* /* service */, UErrorCode& status) const override {
return NumberFormat::makeInstance(loc, (UNumberFormatStyle)kind, status);
}
};
@@ -884,7 +884,7 @@ public:
virtual ~NFFactory();
- virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const override
{
if (handlesKey(key, status)) {
const LocaleKey& lkey = (const LocaleKey&)key;
@@ -907,7 +907,7 @@ protected:
* otherwise). This can be called often and might need to be
* cached if it is expensive to create.
*/
- virtual const Hashtable* getSupportedIDs(UErrorCode& status) const
+ virtual const Hashtable* getSupportedIDs(UErrorCode& status) const override
{
if (U_SUCCESS(status)) {
if (!_ids) {
@@ -943,11 +943,11 @@ public:
virtual ~ICUNumberFormatService();
- virtual UObject* cloneInstance(UObject* instance) const {
+ virtual UObject* cloneInstance(UObject* instance) const override {
return ((NumberFormat*)instance)->clone();
}
- virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /* actualID */, UErrorCode& status) const {
+ virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /* actualID */, UErrorCode& status) const override {
LocaleKey& lkey = (LocaleKey&)key;
int32_t kind = lkey.kind();
Locale loc;
@@ -955,7 +955,7 @@ public:
return NumberFormat::makeInstance(loc, (UNumberFormatStyle)kind, status);
}
- virtual UBool isDefault() const {
+ virtual UBool isDefault() const override {
return countFactories() == 1;
}
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp b/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp
index cef1685d03c..14140065983 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_affixes.cpp
@@ -101,7 +101,7 @@ void AffixPatternMatcherBuilder::consumeToken(AffixPatternType type, UChar32 cp,
addMatcher(fWarehouse.currency(status));
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
} else if (fIgnorables != nullptr && fIgnorables->getSet()->contains(cp)) {
@@ -294,18 +294,20 @@ void AffixMatcherWarehouse::createAffixMatchers(const AffixPatternProvider& patt
}
// Generate Prefix
+ // TODO: Handle approximately sign?
bool hasPrefix = false;
PatternStringUtils::patternInfoToStringBuilder(
- patternInfo, true, type, StandardPlural::OTHER, false, sb);
+ patternInfo, true, type, false, StandardPlural::OTHER, false, sb);
fAffixPatternMatchers[numAffixPatternMatchers] = AffixPatternMatcher::fromAffixPattern(
sb, *fTokenWarehouse, parseFlags, &hasPrefix, status);
AffixPatternMatcher* prefix = hasPrefix ? &fAffixPatternMatchers[numAffixPatternMatchers++]
: nullptr;
// Generate Suffix
+ // TODO: Handle approximately sign?
bool hasSuffix = false;
PatternStringUtils::patternInfoToStringBuilder(
- patternInfo, false, type, StandardPlural::OTHER, false, sb);
+ patternInfo, false, type, false, StandardPlural::OTHER, false, sb);
fAffixPatternMatchers[numAffixPatternMatchers] = AffixPatternMatcher::fromAffixPattern(
sb, *fTokenWarehouse, parseFlags, &hasSuffix, status);
AffixPatternMatcher* suffix = hasSuffix ? &fAffixPatternMatchers[numAffixPatternMatchers++]
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_currency.cpp b/Build/source/libs/icu/icu-src/source/i18n/numparse_currency.cpp
index 6b53a73edf3..7bbb060f3de 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_currency.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_currency.cpp
@@ -42,7 +42,7 @@ CombinedCurrencyMatcher::CombinedCurrencyMatcher(const CurrencySymbols& currency
// TODO: Figure out how to make this faster and re-enable.
// Computing the "lead code points" set for fastpathing is too slow to use in production.
- // See http://bugs.icu-project.org/trac/ticket/13584
+ // See https://unicode-org.atlassian.net/browse/ICU-13584
// // Compute the full set of characters that could be the first in a currency to allow for
// // efficient smoke test.
// fLeadCodePoints.add(fCurrency1.char32At(0));
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.cpp b/Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.cpp
index cf1e8156726..8b99fd7ad4f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.cpp
@@ -88,7 +88,7 @@ DecimalMatcher::DecimalMatcher(const DecimalFormatSymbols& symbols, const Groupe
grouping2 = grouper.getSecondary();
// Fraction grouping parsing is disabled for now but could be enabled later.
- // See http://bugs.icu-project.org/trac/ticket/10794
+ // See https://unicode-org.atlassian.net/browse/ICU-10794
// fractionGrouping = 0 != (parseFlags & PARSE_FLAG_FRACTION_GROUPING_ENABLED);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.h b/Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.h
index ec6c76487e4..07c9afeccc9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_decimal.h
@@ -39,7 +39,7 @@ class DecimalMatcher : public NumberParseMatcher, public UMemory {
bool groupingDisabled;
// Fraction grouping parsing is disabled for now but could be enabled later.
- // See http://bugs.icu-project.org/trac/ticket/10794
+ // See https://unicode-org.atlassian.net/browse/ICU-10794
// bool fractionGrouping;
/** If true, do not accept numbers in the fraction */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp b/Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp
index 4b76da1c149..91c60747f21 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numparse_impl.cpp
@@ -285,7 +285,7 @@ void NumberParserImpl::parseGreedy(StringSegment& segment, ParsedNumber& result,
i++;
continue;
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
// NOTE: If we get here, the greedy parse completed without consuming the entire string.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp b/Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp
index a440a53fe6b..bd3a9ef5e82 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numrange_capi.cpp
@@ -115,7 +115,9 @@ unumrf_formatDoubleRange(
auto* result = UFormattedNumberRangeApiHelper::validate(uresult, *ec);
if (U_FAILURE(*ec)) { return; }
- result->fData.getStringRef().clear();
+ result->fData.resetString();
+ result->fData.quantity1.clear();
+ result->fData.quantity2.clear();
result->fData.quantity1.setToDouble(first);
result->fData.quantity2.setToDouble(second);
formatter->fFormatter.formatImpl(result->fData, first == second, *ec);
@@ -132,7 +134,9 @@ unumrf_formatDecimalRange(
auto* result = UFormattedNumberRangeApiHelper::validate(uresult, *ec);
if (U_FAILURE(*ec)) { return; }
- result->fData.getStringRef().clear();
+ result->fData.resetString();
+ result->fData.quantity1.clear();
+ result->fData.quantity2.clear();
result->fData.quantity1.setToDecNumber({first, firstLen}, *ec);
result->fData.quantity2.setToDecNumber({second, secondLen}, *ec);
formatter->fFormatter.formatImpl(result->fData, first == second, *ec);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp b/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp
index d9286d1d713..f1060b3c21d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numrange_fluent.cpp
@@ -245,6 +245,7 @@ LocalizedNumberRangeFormatter::LocalizedNumberRangeFormatter(NFS<LNF>&& src) U_N
}
LocalizedNumberRangeFormatter& LocalizedNumberRangeFormatter::operator=(const LNF& other) {
+ if (this == &other) { return *this; } // self-assignment: no-op
NFS<LNF>::operator=(static_cast<const NFS<LNF>&>(other));
// Do not steal; just clear
delete fAtomicFormatter.exchange(nullptr);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp b/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp
index 3aae5c23548..3c440c193c7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.cpp
@@ -30,7 +30,8 @@ constexpr int8_t identity2d(UNumberRangeIdentityFallback a, UNumberRangeIdentity
struct NumberRangeData {
SimpleFormatter rangePattern;
- SimpleFormatter approximatelyPattern;
+ // Note: approximatelyPattern is unused since ICU 69.
+ // SimpleFormatter approximatelyPattern;
};
class NumberRangeDataSink : public ResourceSink {
@@ -46,12 +47,16 @@ class NumberRangeDataSink : public ResourceSink {
continue; // have already seen this pattern
}
fData.rangePattern = {value.getUnicodeString(status), status};
- } else if (uprv_strcmp(key, "approximately") == 0) {
+ }
+ /*
+ // Note: approximatelyPattern is unused since ICU 69.
+ else if (uprv_strcmp(key, "approximately") == 0) {
if (hasApproxData()) {
continue; // have already seen this pattern
}
fData.approximatelyPattern = {value.getUnicodeString(status), status};
}
+ */
}
}
@@ -59,21 +64,26 @@ class NumberRangeDataSink : public ResourceSink {
return fData.rangePattern.getArgumentLimit() != 0;
}
+ /*
+ // Note: approximatelyPattern is unused since ICU 69.
bool hasApproxData() {
return fData.approximatelyPattern.getArgumentLimit() != 0;
}
+ */
bool isComplete() {
- return hasRangeData() && hasApproxData();
+ return hasRangeData() /* && hasApproxData() */;
}
void fillInDefaults(UErrorCode& status) {
if (!hasRangeData()) {
fData.rangePattern = {u"{0}–{1}", status};
}
+ /*
if (!hasApproxData()) {
fData.approximatelyPattern = {u"~{0}", status};
}
+ */
}
private:
@@ -116,7 +126,8 @@ NumberRangeFormatterImpl::NumberRangeFormatterImpl(const RangeMacroProps& macros
formatterImpl2(macros.formatter2.fMacros, status),
fSameFormatters(macros.singleFormatter),
fCollapse(macros.collapse),
- fIdentityFallback(macros.identityFallback) {
+ fIdentityFallback(macros.identityFallback),
+ fApproximatelyFormatter(status) {
const char* nsName = formatterImpl1.getRawMicroProps().nsName;
if (uprv_strcmp(nsName, formatterImpl2.getRawMicroProps().nsName) != 0) {
@@ -128,7 +139,16 @@ NumberRangeFormatterImpl::NumberRangeFormatterImpl(const RangeMacroProps& macros
getNumberRangeData(macros.locale.getName(), nsName, data, status);
if (U_FAILURE(status)) { return; }
fRangeFormatter = data.rangePattern;
- fApproximatelyModifier = {data.approximatelyPattern, kUndefinedField, false};
+
+ if (fSameFormatters && (
+ fIdentityFallback == UNUM_IDENTITY_FALLBACK_APPROXIMATELY ||
+ fIdentityFallback == UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE)) {
+ MacroProps approximatelyMacros(macros.formatter1.fMacros);
+ approximatelyMacros.approximately = true;
+ // Use in-place construction because NumberFormatterImpl has internal self-pointers
+ fApproximatelyFormatter.~NumberFormatterImpl();
+ new (&fApproximatelyFormatter) NumberFormatterImpl(approximatelyMacros, status);
+ }
// TODO: Get locale from PluralRules instead?
fPluralRanges = StandardPluralRanges::forLocale(macros.locale, status);
@@ -209,7 +229,7 @@ void NumberRangeFormatterImpl::format(UFormattedNumberRangeData& data, bool equa
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -232,12 +252,14 @@ void NumberRangeFormatterImpl::formatApproximately (UFormattedNumberRangeData& d
UErrorCode& status) const {
if (U_FAILURE(status)) { return; }
if (fSameFormatters) {
- int32_t length = NumberFormatterImpl::writeNumber(micros1, data.quantity1, data.getStringRef(), 0, status);
- // HEURISTIC: Desired modifier order: inner, middle, approximately, outer.
- length += micros1.modInner->apply(data.getStringRef(), 0, length, status);
- length += micros1.modMiddle->apply(data.getStringRef(), 0, length, status);
- length += fApproximatelyModifier.apply(data.getStringRef(), 0, length, status);
- micros1.modOuter->apply(data.getStringRef(), 0, length, status);
+ // Re-format using the approximately formatter:
+ MicroProps microsAppx;
+ data.quantity1.resetExponent();
+ fApproximatelyFormatter.preProcess(data.quantity1, microsAppx, status);
+ int32_t length = NumberFormatterImpl::writeNumber(microsAppx, data.quantity1, data.getStringRef(), 0, status);
+ length += microsAppx.modInner->apply(data.getStringRef(), 0, length, status);
+ length += microsAppx.modMiddle->apply(data.getStringRef(), 0, length, status);
+ microsAppx.modOuter->apply(data.getStringRef(), 0, length, status);
} else {
formatRange(data, micros1, micros2, status);
}
@@ -305,7 +327,7 @@ void NumberRangeFormatterImpl::formatRange(UFormattedNumberRangeData& data,
// INNER MODIFIER
collapseInner = micros1.modInner->semanticallyEquivalent(*micros2.modInner);
- // All done checking for collapsability.
+ // All done checking for collapsibility.
break;
}
@@ -328,6 +350,7 @@ void NumberRangeFormatterImpl::formatRange(UFormattedNumberRangeData& data,
#define UPRV_INDEX_1 (lengthPrefix + length1)
#define UPRV_INDEX_2 (lengthPrefix + length1 + lengthInfix)
#define UPRV_INDEX_3 (lengthPrefix + length1 + lengthInfix + length2)
+ #define UPRV_INDEX_4 (lengthPrefix + length1 + lengthInfix + length2 + lengthSuffix)
int32_t lengthRange = SimpleModifier::formatTwoArgPattern(
fRangeFormatter,
@@ -362,36 +385,46 @@ void NumberRangeFormatterImpl::formatRange(UFormattedNumberRangeData& data,
}
length1 += NumberFormatterImpl::writeNumber(micros1, data.quantity1, string, UPRV_INDEX_0, status);
- length2 += NumberFormatterImpl::writeNumber(micros2, data.quantity2, string, UPRV_INDEX_2, status);
+ // ICU-21684: Write the second number to a temp string to avoid repeated insert operations
+ FormattedStringBuilder tempString;
+ NumberFormatterImpl::writeNumber(micros2, data.quantity2, tempString, 0, status);
+ length2 += string.insert(UPRV_INDEX_2, tempString, status);
// TODO: Support padding?
if (collapseInner) {
- // Note: this is actually a mix of prefix and suffix, but adding to infix length works
const Modifier& mod = resolveModifierPlurals(*micros1.modInner, *micros2.modInner);
- lengthInfix += mod.apply(string, UPRV_INDEX_0, UPRV_INDEX_3, status);
+ lengthSuffix += mod.apply(string, UPRV_INDEX_0, UPRV_INDEX_4, status);
+ lengthPrefix += mod.getPrefixLength();
+ lengthSuffix -= mod.getPrefixLength();
} else {
length1 += micros1.modInner->apply(string, UPRV_INDEX_0, UPRV_INDEX_1, status);
- length2 += micros2.modInner->apply(string, UPRV_INDEX_2, UPRV_INDEX_3, status);
+ length2 += micros2.modInner->apply(string, UPRV_INDEX_2, UPRV_INDEX_4, status);
}
if (collapseMiddle) {
- // Note: this is actually a mix of prefix and suffix, but adding to infix length works
const Modifier& mod = resolveModifierPlurals(*micros1.modMiddle, *micros2.modMiddle);
- lengthInfix += mod.apply(string, UPRV_INDEX_0, UPRV_INDEX_3, status);
+ lengthSuffix += mod.apply(string, UPRV_INDEX_0, UPRV_INDEX_4, status);
+ lengthPrefix += mod.getPrefixLength();
+ lengthSuffix -= mod.getPrefixLength();
} else {
length1 += micros1.modMiddle->apply(string, UPRV_INDEX_0, UPRV_INDEX_1, status);
- length2 += micros2.modMiddle->apply(string, UPRV_INDEX_2, UPRV_INDEX_3, status);
+ length2 += micros2.modMiddle->apply(string, UPRV_INDEX_2, UPRV_INDEX_4, status);
}
if (collapseOuter) {
- // Note: this is actually a mix of prefix and suffix, but adding to infix length works
const Modifier& mod = resolveModifierPlurals(*micros1.modOuter, *micros2.modOuter);
- lengthInfix += mod.apply(string, UPRV_INDEX_0, UPRV_INDEX_3, status);
+ lengthSuffix += mod.apply(string, UPRV_INDEX_0, UPRV_INDEX_4, status);
+ lengthPrefix += mod.getPrefixLength();
+ lengthSuffix -= mod.getPrefixLength();
} else {
length1 += micros1.modOuter->apply(string, UPRV_INDEX_0, UPRV_INDEX_1, status);
- length2 += micros2.modOuter->apply(string, UPRV_INDEX_2, UPRV_INDEX_3, status);
+ length2 += micros2.modOuter->apply(string, UPRV_INDEX_2, UPRV_INDEX_4, status);
}
+
+ // Now that all pieces are added, save the span info.
+ data.appendSpanInfo(UFIELD_CATEGORY_NUMBER_RANGE_SPAN, 0, UPRV_INDEX_0, length1, status);
+ data.appendSpanInfo(UFIELD_CATEGORY_NUMBER_RANGE_SPAN, 1, UPRV_INDEX_2, length2, status);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h b/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h
index b81a311a5f3..ac1d8a58972 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/numrange_impl.h
@@ -56,7 +56,7 @@ class NumberRangeFormatterImpl : public UMemory {
UNumberRangeIdentityFallback fIdentityFallback;
SimpleFormatter fRangeFormatter;
- SimpleModifier fApproximatelyModifier;
+ NumberFormatterImpl fApproximatelyFormatter;
StandardPluralRanges fPluralRanges;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp b/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
index 62d555aad28..44aaf8e2a5f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
@@ -314,7 +314,7 @@ U_CFUNC void initNumsysNames(UErrorCode &status) {
const char *nsName = ures_getKey(nsCurrent.getAlias());
LocalPointer<UnicodeString> newElem(new UnicodeString(nsName, -1, US_INV), status);
if (U_SUCCESS(status)) {
- numsysNames->addElement(newElem.getAlias(), status);
+ numsysNames->addElementX(newElem.getAlias(), status);
if (U_SUCCESS(status)) {
newElem.orphan(); // on success, the numsysNames vector owns newElem.
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp b/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
index 4873caaee6d..cae471a5a25 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
@@ -274,6 +274,7 @@ OlsonTimeZone::OlsonTimeZone(const OlsonTimeZone& other) :
* Assignment operator
*/
OlsonTimeZone& OlsonTimeZone::operator=(const OlsonTimeZone& other) {
+ if (this == &other) { return *this; } // self-assignment: no-op
canonicalID = other.canonicalID;
transitionTimesPre32 = other.transitionTimesPre32;
@@ -310,7 +311,7 @@ OlsonTimeZone::~OlsonTimeZone() {
/**
* Returns true if the two TimeZone objects are equal.
*/
-UBool OlsonTimeZone::operator==(const TimeZone& other) const {
+bool OlsonTimeZone::operator==(const TimeZone& other) const {
return ((this == &other) ||
(typeid(*this) == typeid(other) &&
TimeZone::operator==(other) &&
@@ -399,9 +400,9 @@ void OlsonTimeZone::getOffset(UDate date, UBool local, int32_t& rawoff,
}
}
-void
-OlsonTimeZone::getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
- int32_t& rawoff, int32_t& dstoff, UErrorCode& ec) const {
+void OlsonTimeZone::getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t& rawoff, int32_t& dstoff, UErrorCode& ec) const {
if (U_FAILURE(ec)) {
return;
}
@@ -805,14 +806,14 @@ OlsonTimeZone::initTransitionRules(UErrorCode& status) {
}
}
if (finalZone != NULL) {
- // Get the first occurence of final rule starts
+ // Get the first occurrence of final rule starts
UDate startTime = (UDate)finalStartMillis;
TimeZoneRule *firstFinalRule = NULL;
if (finalZone->useDaylightTime()) {
/*
* Note: When an OlsonTimeZone is constructed, we should set the final year
- * as the start year of finalZone. However, the bounday condition used for
+ * as the start year of finalZone. However, the boundary condition used for
* getting offset from finalZone has some problems.
* For now, we do not set the valid start year when the construction time
* and create a clone and set the start year when extracting rules.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/olsontz.h b/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
index 275b1b4add3..75d86781edd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
@@ -146,12 +146,12 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
/**
* Returns true if the two TimeZone objects are equal.
*/
- virtual UBool operator==(const TimeZone& other) const;
+ virtual bool operator==(const TimeZone& other) const override;
/**
* TimeZone API.
*/
- virtual OlsonTimeZone* clone() const;
+ virtual OlsonTimeZone* clone() const override;
/**
* TimeZone API.
@@ -161,14 +161,14 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
/**
* TimeZone API.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* TimeZone API. Do not call this; prefer getOffset(UDate,...).
*/
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month,
int32_t day, uint8_t dayOfWeek,
- int32_t millis, UErrorCode& ec) const;
+ int32_t millis, UErrorCode& ec) const override;
/**
* TimeZone API. Do not call this; prefer getOffset(UDate,...).
@@ -176,26 +176,28 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month,
int32_t day, uint8_t dayOfWeek,
int32_t millis, int32_t monthLength,
- UErrorCode& ec) const;
+ UErrorCode& ec) const override;
/**
* TimeZone API.
*/
virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
- int32_t& dstOffset, UErrorCode& ec) const;
+ int32_t& dstOffset, UErrorCode& ec) const override;
/**
* BasicTimeZone API.
*/
- virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
- int32_t& rawoff, int32_t& dstoff, UErrorCode& ec) const;
+ virtual void getOffsetFromLocal(
+ UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override;
/**
* TimeZone API. This method has no effect since objects of this
* class are quasi-immutable (the base class allows the ID to be
* changed).
*/
- virtual void setRawOffset(int32_t offsetMillis);
+ virtual void setRawOffset(int32_t offsetMillis) override;
/**
* TimeZone API. For a historical zone, the raw offset can change
@@ -203,7 +205,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
* expected behavior, this method returns the raw offset for the
* current moment in time.
*/
- virtual int32_t getRawOffset() const;
+ virtual int32_t getRawOffset() const override;
/**
* TimeZone API. For a historical zone, whether DST is used or
@@ -211,22 +213,22 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
* behavior, this method returns true if DST is observed at any
* point in the current year.
*/
- virtual UBool useDaylightTime() const;
+ virtual UBool useDaylightTime() const override;
/**
* TimeZone API.
*/
- virtual UBool inDaylightTime(UDate date, UErrorCode& ec) const;
+ virtual UBool inDaylightTime(UDate date, UErrorCode& ec) const override;
/**
* TimeZone API.
*/
- virtual int32_t getDSTSavings() const;
+ virtual int32_t getDSTSavings() const override;
/**
* TimeZone API. Also comare historic transitions.
*/
- virtual UBool hasSameRules(const TimeZone& other) const;
+ virtual UBool hasSameRules(const TimeZone& other) const override;
/**
* BasicTimeZone API.
@@ -236,7 +238,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
* @param result Receives the first transition after the base time.
* @return true if the transition is found.
*/
- virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
+ virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
/**
* BasicTimeZone API.
@@ -246,7 +248,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
* @param result Receives the most recent transition before the base time.
* @return true if the transition is found.
*/
- virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
+ virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
/**
* BasicTimeZone API.
@@ -256,7 +258,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
* @param status Receives error status code.
* @return The number of <code>TimeZoneRule</code>s representing time transitions.
*/
- virtual int32_t countTransitionRules(UErrorCode& status) const;
+ virtual int32_t countTransitionRules(UErrorCode& status) const override;
/**
* Gets the <code>InitialTimeZoneRule</code> and the set of <code>TimeZoneRule</code>
@@ -274,7 +276,7 @@ class U_I18N_API OlsonTimeZone: public BasicTimeZone {
* @param status Receives error status code.
*/
virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
- const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
+ const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override;
/**
* Internal API returning the canonical ID of this zone.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/persncal.h b/Build/source/libs/icu/icu-src/source/i18n/persncal.h
index c9eff1c3058..d0f2ee5ec20 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/persncal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/persncal.h
@@ -164,7 +164,7 @@ class PersianCalendar : public Calendar {
// TODO: copy c'tor, etc
// clone
- virtual PersianCalendar* clone() const;
+ virtual PersianCalendar* clone() const override;
private:
/**
@@ -194,7 +194,7 @@ class PersianCalendar : public Calendar {
/**
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Return the length (in days) of the given month.
@@ -203,13 +203,13 @@ class PersianCalendar : public Calendar {
* @param year The hijri shamsi month, 0-based
* @internal
*/
- virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
+ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const override;
/**
* Return the number of days in the given Persian year
* @internal
*/
- virtual int32_t handleGetYearLength(int32_t extendedYear) const;
+ virtual int32_t handleGetYearLength(int32_t extendedYear) const override;
//-------------------------------------------------------------------------
// Functions for converting from field values to milliseconds....
@@ -219,7 +219,7 @@ class PersianCalendar : public Calendar {
/**
* @internal
*/
- virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
+ virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const override;
//-------------------------------------------------------------------------
// Functions for converting from milliseconds to field values
@@ -228,7 +228,7 @@ class PersianCalendar : public Calendar {
/**
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Override Calendar to compute several fields specific to the Persian
@@ -246,7 +246,7 @@ class PersianCalendar : public Calendar {
* calendar equivalents for the given Julian day.
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
// UObject stuff
public:
@@ -255,7 +255,7 @@ class PersianCalendar : public Calendar {
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -276,7 +276,7 @@ class PersianCalendar : public Calendar {
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
private:
PersianCalendar(); // default constructor not implemented
@@ -292,26 +292,26 @@ class PersianCalendar : public Calendar {
* false, otherwise.
* @internal
*/
- virtual UBool inDaylightTime(UErrorCode& status) const;
+ virtual UBool inDaylightTime(UErrorCode& status) const override;
/**
* Returns true because the Persian Calendar does have a default century
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
/**
* Returns the date of the start of the default century
* @return start of century - in milliseconds since epoch, 1970
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Returns the year in which the default century begins
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
index aac35c5b094..65e275eeeb7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
@@ -381,13 +381,13 @@ PluralFormat::operator=(const PluralFormat& other) {
return *this;
}
-UBool
+bool
PluralFormat::operator==(const Format& other) const {
if (this == &other) {
- return TRUE;
+ return true;
}
if (!Format::operator==(other)) {
- return FALSE;
+ return false;
}
const PluralFormat& o = (const PluralFormat&)other;
return
@@ -400,7 +400,7 @@ PluralFormat::operator==(const Format& other) const {
*pluralRulesWrapper.pluralRules == *o.pluralRulesWrapper.pluralRules);
}
-UBool
+bool
PluralFormat::operator!=(const Format& other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp b/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
index e1e1667a6ea..d1918c46981 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
@@ -60,6 +60,7 @@ static const UChar PK_VAR_I[]={LOW_I,0};
static const UChar PK_VAR_F[]={LOW_F,0};
static const UChar PK_VAR_T[]={LOW_T,0};
static const UChar PK_VAR_E[]={LOW_E,0};
+static const UChar PK_VAR_C[]={LOW_C,0};
static const UChar PK_VAR_V[]={LOW_V,0};
static const UChar PK_WITHIN[]={LOW_W,LOW_I,LOW_T,LOW_H,LOW_I,LOW_N,0};
static const UChar PK_DECIMAL[]={LOW_D,LOW_E,LOW_C,LOW_I,LOW_M,LOW_A,LOW_L,0};
@@ -378,6 +379,14 @@ static double scaleForInt(double d) {
return scale;
}
+static const double powers10[7] = {1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0}; // powers of 10 for 0..6
+static double applyExponent(double source, int32_t exponent) {
+ if (exponent >= 0 && exponent <= 6) {
+ return source * powers10[exponent];
+ }
+ return source * pow(10.0, exponent);
+}
+
/**
* Helper method for the overrides of getSamples() for double and FixedDecimal
* return value types. Provide only one of an allocated array of doubles or
@@ -415,13 +424,12 @@ getSamplesFromString(const UnicodeString &samples, double *destDbl,
if (isDouble) {
double sampleValue = fixed.source;
if (fixed.visibleDecimalDigitCount == 0 || sampleValue != floor(sampleValue)) {
- destDbl[sampleCount++] = sampleValue;
+ destDbl[sampleCount++] = applyExponent(sampleValue, fixed.exponent);
}
} else {
destFd[sampleCount++] = fixed;
}
} else {
-
FixedDecimal fixedLo(sampleRange.tempSubStringBetween(0, tildeIndex), status);
FixedDecimal fixedHi(sampleRange.tempSubStringBetween(tildeIndex+1), status);
double rangeLo = fixedLo.source;
@@ -514,6 +522,7 @@ PluralRules::getSamples(const UnicodeString &keyword, FixedDecimal *dest,
if (rc == nullptr) {
return 0;
}
+
int32_t numSamples = getSamplesFromString(rc->fIntegerSamples, nullptr, dest, destCapacity, status);
if (numSamples == 0) {
numSamples = getSamplesFromString(rc->fDecimalSamples, nullptr, dest, destCapacity, status);
@@ -546,40 +555,40 @@ PluralRules::getKeywordOther() const {
return UnicodeString(TRUE, PLURAL_KEYWORD_OTHER, 5);
}
-UBool
+bool
PluralRules::operator==(const PluralRules& other) const {
const UnicodeString *ptrKeyword;
UErrorCode status= U_ZERO_ERROR;
if ( this == &other ) {
- return TRUE;
+ return true;
}
LocalPointer<StringEnumeration> myKeywordList(getKeywords(status));
LocalPointer<StringEnumeration> otherKeywordList(other.getKeywords(status));
if (U_FAILURE(status)) {
- return FALSE;
+ return false;
}
if (myKeywordList->count(status)!=otherKeywordList->count(status)) {
- return FALSE;
+ return false;
}
myKeywordList->reset(status);
while ((ptrKeyword=myKeywordList->snext(status))!=nullptr) {
if (!other.isKeyword(*ptrKeyword)) {
- return FALSE;
+ return false;
}
}
otherKeywordList->reset(status);
while ((ptrKeyword=otherKeywordList->snext(status))!=nullptr) {
if (!this->isKeyword(*ptrKeyword)) {
- return FALSE;
+ return false;
}
}
if (U_FAILURE(status)) {
- return FALSE;
+ return false;
}
- return TRUE;
+ return true;
}
@@ -706,6 +715,7 @@ PluralRuleParser::parse(const UnicodeString& ruleData, PluralRules *prules, UErr
case tVariableF:
case tVariableT:
case tVariableE:
+ case tVariableC:
case tVariableV:
U_ASSERT(curAndConstraint != nullptr);
curAndConstraint->digitsType = type;
@@ -1092,6 +1102,8 @@ static UnicodeString tokenString(tokenType tok) {
s.append(LOW_T); break;
case tVariableE:
s.append(LOW_E); break;
+ case tVariableC:
+ s.append(LOW_C); break;
default:
s.append(TILDE);
}
@@ -1269,6 +1281,7 @@ PluralRuleParser::checkSyntax(UErrorCode &status)
case tVariableF:
case tVariableT:
case tVariableE:
+ case tVariableC:
case tVariableV:
if (type != tIs && type != tMod && type != tIn &&
type != tNot && type != tWithin && type != tEqual && type != tNotEqual) {
@@ -1286,6 +1299,7 @@ PluralRuleParser::checkSyntax(UErrorCode &status)
type == tVariableF ||
type == tVariableT ||
type == tVariableE ||
+ type == tVariableC ||
type == tVariableV ||
type == tAt)) {
status = U_UNEXPECTED_TOKEN;
@@ -1318,6 +1332,7 @@ PluralRuleParser::checkSyntax(UErrorCode &status)
type != tVariableF &&
type != tVariableT &&
type != tVariableE &&
+ type != tVariableC &&
type != tVariableV) {
status = U_UNEXPECTED_TOKEN;
}
@@ -1497,6 +1512,8 @@ PluralRuleParser::getKeyType(const UnicodeString &token, tokenType keyType)
keyType = tVariableT;
} else if (0 == token.compare(PK_VAR_E, 1)) {
keyType = tVariableE;
+ } else if (0 == token.compare(PK_VAR_C, 1)) {
+ keyType = tVariableC;
} else if (0 == token.compare(PK_VAR_V, 1)) {
keyType = tVariableV;
} else if (0 == token.compare(PK_IS, 2)) {
@@ -1536,7 +1553,7 @@ PluralKeywordEnumeration::PluralKeywordEnumeration(RuleChain *header, UErrorCode
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
- fKeywordNames.addElement(newElem, status);
+ fKeywordNames.addElementX(newElem, status);
if (U_FAILURE(status)) {
delete newElem;
return;
@@ -1553,7 +1570,7 @@ PluralKeywordEnumeration::PluralKeywordEnumeration(RuleChain *header, UErrorCode
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
- fKeywordNames.addElement(newElem, status);
+ fKeywordNames.addElementX(newElem, status);
if (U_FAILURE(status)) {
delete newElem;
return;
@@ -1596,11 +1613,17 @@ PluralOperand tokenTypeToPluralOperand(tokenType tt) {
return PLURAL_OPERAND_T;
case tVariableE:
return PLURAL_OPERAND_E;
+ case tVariableC:
+ return PLURAL_OPERAND_E;
default:
- UPRV_UNREACHABLE; // unexpected.
+ UPRV_UNREACHABLE_EXIT; // unexpected.
}
}
+FixedDecimal::FixedDecimal(double n, int32_t v, int64_t f, int32_t e, int32_t c) {
+ init(n, v, f, e, c);
+}
+
FixedDecimal::FixedDecimal(double n, int32_t v, int64_t f, int32_t e) {
init(n, v, f, e);
// check values. TODO make into unit test.
@@ -1642,16 +1665,30 @@ FixedDecimal::FixedDecimal() {
FixedDecimal::FixedDecimal(const UnicodeString &num, UErrorCode &status) {
CharString cs;
int32_t parsedExponent = 0;
+ int32_t parsedCompactExponent = 0;
int32_t exponentIdx = num.indexOf(u'e');
if (exponentIdx < 0) {
exponentIdx = num.indexOf(u'E');
}
+ int32_t compactExponentIdx = num.indexOf(u'c');
+ if (compactExponentIdx < 0) {
+ compactExponentIdx = num.indexOf(u'C');
+ }
+
if (exponentIdx >= 0) {
cs.appendInvariantChars(num.tempSubString(0, exponentIdx), status);
int32_t expSubstrStart = exponentIdx + 1;
parsedExponent = ICU_Utility::parseAsciiInteger(num, expSubstrStart);
}
+ else if (compactExponentIdx >= 0) {
+ cs.appendInvariantChars(num.tempSubString(0, compactExponentIdx), status);
+ int32_t expSubstrStart = compactExponentIdx + 1;
+ parsedCompactExponent = ICU_Utility::parseAsciiInteger(num, expSubstrStart);
+
+ parsedExponent = parsedCompactExponent;
+ exponentIdx = compactExponentIdx;
+ }
else {
cs.appendInvariantChars(num, status);
}
@@ -1706,13 +1743,20 @@ void FixedDecimal::init(double n, int32_t v, int64_t f) {
init(n, v, f, exponent);
}
-
void FixedDecimal::init(double n, int32_t v, int64_t f, int32_t e) {
+ // Currently, `c` is an alias for `e`
+ init(n, v, f, e, e);
+}
+
+void FixedDecimal::init(double n, int32_t v, int64_t f, int32_t e, int32_t c) {
isNegative = n < 0.0;
source = fabs(n);
_isNaN = uprv_isNaN(source);
_isInfinite = uprv_isInfinite(source);
exponent = e;
+ if (exponent == 0) {
+ exponent = c;
+ }
if (_isNaN || _isInfinite) {
v = 0;
f = 0;
@@ -1837,14 +1881,15 @@ void FixedDecimal::adjustForMinFractionDigits(int32_t minFractionDigits) {
double FixedDecimal::getPluralOperand(PluralOperand operand) const {
switch(operand) {
- case PLURAL_OPERAND_N: return source;
- case PLURAL_OPERAND_I: return static_cast<double>(intValue);
+ case PLURAL_OPERAND_N: return (exponent == 0 ? source : source * pow(10, exponent));
+ case PLURAL_OPERAND_I: return (double) longValue();
case PLURAL_OPERAND_F: return static_cast<double>(decimalDigits);
case PLURAL_OPERAND_T: return static_cast<double>(decimalDigitsWithoutTrailingZeros);
case PLURAL_OPERAND_V: return visibleDecimalDigitCount;
case PLURAL_OPERAND_E: return exponent;
+ case PLURAL_OPERAND_C: return exponent;
default:
- UPRV_UNREACHABLE; // unexpected.
+ UPRV_UNREACHABLE_EXIT; // unexpected.
}
}
@@ -1876,16 +1921,28 @@ bool FixedDecimal::operator==(const FixedDecimal &other) const {
UnicodeString FixedDecimal::toString() const {
char pattern[15];
char buffer[20];
- if (exponent == 0) {
- snprintf(pattern, sizeof(pattern), "%%.%df", visibleDecimalDigitCount);
- snprintf(buffer, sizeof(buffer), pattern, source);
- } else {
+ if (exponent != 0) {
snprintf(pattern, sizeof(pattern), "%%.%dfe%%d", visibleDecimalDigitCount);
snprintf(buffer, sizeof(buffer), pattern, source, exponent);
+ } else {
+ snprintf(pattern, sizeof(pattern), "%%.%df", visibleDecimalDigitCount);
+ snprintf(buffer, sizeof(buffer), pattern, source);
}
return UnicodeString(buffer, -1, US_INV);
}
+double FixedDecimal::doubleValue() const {
+ return (isNegative ? -source : source) * pow(10, exponent);
+}
+
+int64_t FixedDecimal::longValue() const {
+ if (exponent == 0) {
+ return intValue;
+ } else {
+ return (long) (pow(10, exponent) * intValue);
+ }
+}
+
PluralAvailableLocalesEnumeration::PluralAvailableLocalesEnumeration(UErrorCode &status) {
fOpenStatus = status;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h b/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
index 52af3a74131..7274da58f06 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
@@ -145,6 +145,7 @@ enum tokenType {
tVariableV,
tVariableT,
tVariableE,
+ tVariableC,
tDecimal,
tInteger,
tEOF
@@ -222,12 +223,21 @@ enum PluralOperand {
PLURAL_OPERAND_W,
/**
- * Suppressed exponent for compact notation (exponent needed in
- * scientific notation with compact notation to approximate i).
+ * Suppressed exponent for scientific notation (exponent needed in
+ * scientific notation to approximate i).
*/
PLURAL_OPERAND_E,
/**
+ * This operand is currently treated as an alias for `PLURAL_OPERAND_E`.
+ * In the future, it will represent:
+ *
+ * Suppressed exponent for compact notation (exponent needed in
+ * compact notation to approximate i).
+ */
+ PLURAL_OPERAND_C,
+
+ /**
* THIS OPERAND IS DEPRECATED AND HAS BEEN REMOVED FROM THE SPEC.
*
* <p>Returns the integer value, but will fail if the number has fraction digits.
@@ -280,8 +290,10 @@ class U_I18N_API FixedDecimal: public IFixedDecimal, public UObject {
* @param n the number, e.g. 12.345
* @param v The number of visible fraction digits, e.g. 3
* @param f The fraction digits, e.g. 345
- * @param e The exponent, e.g. 7 in 1.2e7 (for compact/scientific)
+ * @param e The exponent, e.g. 7 in 1.2e7, for scientific notation
+ * @param c Currently: an alias for param `e`.
*/
+ FixedDecimal(double n, int32_t v, int64_t f, int32_t e, int32_t c);
FixedDecimal(double n, int32_t v, int64_t f, int32_t e);
FixedDecimal(double n, int32_t v, int64_t f);
FixedDecimal(double n, int32_t);
@@ -302,6 +314,7 @@ class U_I18N_API FixedDecimal: public IFixedDecimal, public UObject {
int32_t getVisibleFractionDigitCount() const;
+ void init(double n, int32_t v, int64_t f, int32_t e, int32_t c);
void init(double n, int32_t v, int64_t f, int32_t e);
void init(double n, int32_t v, int64_t f);
void init(double n);
@@ -311,10 +324,14 @@ class U_I18N_API FixedDecimal: public IFixedDecimal, public UObject {
static int64_t getFractionalDigits(double n, int32_t v);
static int32_t decimals(double n);
+ FixedDecimal& operator=(const FixedDecimal& other) = default;
bool operator==(const FixedDecimal &other) const;
UnicodeString toString() const;
+ double doubleValue() const;
+ int64_t longValue() const;
+
double source;
int32_t visibleDecimalDigitCount;
int64_t decimalDigits;
@@ -394,10 +411,10 @@ public:
PluralKeywordEnumeration(RuleChain *header, UErrorCode& status);
virtual ~PluralKeywordEnumeration();
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
- virtual const UnicodeString* snext(UErrorCode& status);
- virtual void reset(UErrorCode& status);
- virtual int32_t count(UErrorCode& status) const;
+ virtual UClassID getDynamicClassID(void) const override;
+ virtual const UnicodeString* snext(UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
+ virtual int32_t count(UErrorCode& status) const override;
private:
int32_t pos;
UVector fKeywordNames;
@@ -408,9 +425,9 @@ class U_I18N_API PluralAvailableLocalesEnumeration: public StringEnumeration {
public:
PluralAvailableLocalesEnumeration(UErrorCode &status);
virtual ~PluralAvailableLocalesEnumeration();
- virtual const char* next(int32_t *resultLength, UErrorCode& status);
- virtual void reset(UErrorCode& status);
- virtual int32_t count(UErrorCode& status) const;
+ virtual const char* next(int32_t *resultLength, UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
+ virtual int32_t count(UErrorCode& status) const override;
private:
UErrorCode fOpenStatus;
UResourceBundle *fLocales = nullptr;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/quant.h b/Build/source/libs/icu/icu-src/source/i18n/quant.h
index df6924cc127..427a6b04808 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/quant.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/quant.h
@@ -39,13 +39,13 @@ class Quantifier : public UnicodeFunctor, public UnicodeMatcher {
* and return the pointer.
* @return the UnicodeMatcher pointer.
*/
- virtual UnicodeMatcher* toMatcher() const;
+ virtual UnicodeMatcher* toMatcher() const override;
/**
* Implement UnicodeFunctor
* @return a copy of the object.
*/
- virtual Quantifier* clone() const;
+ virtual Quantifier* clone() const override;
/**
* Implement UnicodeMatcher
@@ -72,7 +72,7 @@ class Quantifier : public UnicodeFunctor, public UnicodeMatcher {
virtual UMatchDegree matches(const Replaceable& text,
int32_t& offset,
int32_t limit,
- UBool incremental);
+ UBool incremental) override;
/**
* Implement UnicodeMatcher
@@ -81,29 +81,29 @@ class Quantifier : public UnicodeFunctor, public UnicodeMatcher {
* @return A reference to 'result'.
*/
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool escapeUnprintable = false) const;
+ UBool escapeUnprintable = false) const override;
/**
* Implement UnicodeMatcher
* @param v the given index value.
* @return true if this rule matches the given index value.
*/
- virtual UBool matchesIndexValue(uint8_t v) const;
+ virtual UBool matchesIndexValue(uint8_t v) const override;
/**
* Implement UnicodeMatcher
*/
- virtual void addMatchSetTo(UnicodeSet& toUnionTo) const;
+ virtual void addMatchSetTo(UnicodeSet& toUnionTo) const override;
/**
* UnicodeFunctor API
*/
- virtual void setData(const TransliterationRuleData*);
+ virtual void setData(const TransliterationRuleData*) override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbnf.cpp b/Build/source/libs/icu/icu-src/source/i18n/rbnf.cpp
index 17319fb6d59..7f54fd7a33f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbnf.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbnf.cpp
@@ -99,8 +99,8 @@ public:
return NULL;
}
- virtual UBool operator==(const LocalizationInfo* rhs) const;
- inline UBool operator!=(const LocalizationInfo* rhs) const { return !operator==(rhs); }
+ virtual bool operator==(const LocalizationInfo* rhs) const;
+ inline bool operator!=(const LocalizationInfo* rhs) const { return !operator==(rhs); }
virtual int32_t getNumberOfRuleSets(void) const = 0;
virtual const UChar* getRuleSetName(int32_t index) const = 0;
@@ -131,18 +131,18 @@ streq(const UChar* lhs, const UChar* rhs) {
return FALSE;
}
-UBool
+bool
LocalizationInfo::operator==(const LocalizationInfo* rhs) const {
if (rhs) {
if (this == rhs) {
- return TRUE;
+ return true;
}
int32_t rsc = getNumberOfRuleSets();
if (rsc == rhs->getNumberOfRuleSets()) {
for (int i = 0; i < rsc; ++i) {
if (!streq(getRuleSetName(i), rhs->getRuleSetName(i))) {
- return FALSE;
+ return false;
}
}
int32_t dlc = getNumberOfDisplayLocales();
@@ -152,19 +152,19 @@ LocalizationInfo::operator==(const LocalizationInfo* rhs) const {
int32_t ix = rhs->indexForLocale(locale);
// if no locale, ix is -1, getLocaleName returns null, so streq returns false
if (!streq(locale, rhs->getLocaleName(ix))) {
- return FALSE;
+ return false;
}
for (int j = 0; j < rsc; ++j) {
if (!streq(getDisplayName(i, j), rhs->getDisplayName(ix, j))) {
- return FALSE;
+ return false;
}
}
}
- return TRUE;
+ return true;
}
}
}
- return FALSE;
+ return false;
}
int32_t
@@ -271,11 +271,11 @@ public:
static StringLocalizationInfo* create(const UnicodeString& info, UParseError& perror, UErrorCode& status);
virtual ~StringLocalizationInfo();
- virtual int32_t getNumberOfRuleSets(void) const { return numRuleSets; }
- virtual const UChar* getRuleSetName(int32_t index) const;
- virtual int32_t getNumberOfDisplayLocales(void) const { return numLocales; }
- virtual const UChar* getLocaleName(int32_t index) const;
- virtual const UChar* getDisplayName(int32_t localeIndex, int32_t ruleIndex) const;
+ virtual int32_t getNumberOfRuleSets(void) const override { return numRuleSets; }
+ virtual const UChar* getRuleSetName(int32_t index) const override;
+ virtual int32_t getNumberOfDisplayLocales(void) const override { return numLocales; }
+ virtual const UChar* getLocaleName(int32_t index) const override;
+ virtual const UChar* getDisplayName(int32_t localeIndex, int32_t ruleIndex) const override;
// virtual UClassID getDynamicClassID() const;
// static UClassID getStaticClassID(void);
@@ -936,11 +936,11 @@ RuleBasedNumberFormat::clone() const
return new RuleBasedNumberFormat(*this);
}
-UBool
+bool
RuleBasedNumberFormat::operator==(const Format& other) const
{
if (this == &other) {
- return TRUE;
+ return true;
}
if (typeid(*this) == typeid(other)) {
@@ -953,7 +953,7 @@ RuleBasedNumberFormat::operator==(const Format& other) const
(localizations == NULL
? rhs.localizations == NULL
: (rhs.localizations == NULL
- ? FALSE
+ ? false
: *localizations == rhs.localizations))) {
NFRuleSet** p = fRuleSets;
@@ -961,7 +961,7 @@ RuleBasedNumberFormat::operator==(const Format& other) const
if (p == NULL) {
return q == NULL;
} else if (q == NULL) {
- return FALSE;
+ return false;
}
while (*p && *q && (**p == **q)) {
++p;
@@ -971,7 +971,7 @@ RuleBasedNumberFormat::operator==(const Format& other) const
}
}
- return FALSE;
+ return false;
}
UnicodeString
@@ -1077,7 +1077,7 @@ RuleBasedNumberFormat::getRuleSetDisplayName(int32_t index, const Locale& locale
return name;
}
- // trim trailing portion, skipping over ommitted sections
+ // trim trailing portion, skipping over omitted sections
do { --len;} while (len > 0 && localeStr[len] != 0x005f); // underscore
while (len > 0 && localeStr[len-1] == 0x005F) --len;
}
@@ -1501,7 +1501,7 @@ RuleBasedNumberFormat::init(const UnicodeString& rules, LocalizationInfo* locali
}
// start by stripping the trailing whitespace from all the rules
- // (this is all the whitespace follwing each semicolon in the
+ // (this is all the whitespace following each semicolon in the
// description). This allows us to look for rule-set boundaries
// by searching for ";%" without having to worry about whitespace
// between the ; and the %
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt.cpp b/Build/source/libs/icu/icu-src/source/i18n/rbt.cpp
index 4cef242e582..1de53e6071c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt.cpp
@@ -62,7 +62,7 @@ void RuleBasedTransliterator::_construct(const UnicodeString& rules,
* @param rules rules, separated by ';'
* @param direction either FORWARD or REVERSE.
* @param adoptedFilter the filter for this transliterator.
- * @param parseError Struct to recieve information on position
+ * @param parseError Struct to receive information on position
* of error if an error is encountered
* @param status Output param set to success/failure code.
* @exception IllegalArgumentException if rules are malformed
@@ -101,7 +101,7 @@ RuleBasedTransliterator::RuleBasedTransliterator(
}*/
/**
- * Covenience constructor with no filter.
+ * Convenience constructor with no filter.
*/
/*RuleBasedTransliterator::RuleBasedTransliterator(
const UnicodeString& id,
@@ -114,7 +114,7 @@ RuleBasedTransliterator::RuleBasedTransliterator(
}*/
/**
- * Covenience constructor with no filter and FORWARD direction.
+ * Convenience constructor with no filter and FORWARD direction.
*/
/*RuleBasedTransliterator::RuleBasedTransliterator(
const UnicodeString& id,
@@ -126,7 +126,7 @@ RuleBasedTransliterator::RuleBasedTransliterator(
}*/
/**
- * Covenience constructor with FORWARD direction.
+ * Convenience constructor with FORWARD direction.
*/
/*RuleBasedTransliterator::RuleBasedTransliterator(
const UnicodeString& id,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt.h b/Build/source/libs/icu/icu-src/source/i18n/rbt.h
index 61d3b6be527..8a43c90d462 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt.h
@@ -80,7 +80,7 @@ public:
UErrorCode& status);*/
/**
- * Covenience constructor with no filter.
+ * Convenience constructor with no filter.
* @internal Use transliterator factory methods instead since this class will be removed in that release.
*/
/*RuleBasedTransliterator(const UnicodeString& id,
@@ -89,7 +89,7 @@ public:
UErrorCode& status);*/
/**
- * Covenience constructor with no filter and FORWARD direction.
+ * Convenience constructor with no filter and FORWARD direction.
* @internal Use transliterator factory methods instead since this class will be removed in that release.
*/
/*RuleBasedTransliterator(const UnicodeString& id,
@@ -97,7 +97,7 @@ public:
UErrorCode& status);*/
/**
- * Covenience constructor with FORWARD direction.
+ * Convenience constructor with FORWARD direction.
* @internal Use transliterator factory methods instead since this class will be removed in that release.
*/
/*RuleBasedTransliterator(const UnicodeString& id,
@@ -108,7 +108,7 @@ private:
friend class TransliteratorRegistry; // to access TransliterationRuleData convenience ctor
/**
- * Covenience constructor.
+ * Convenience constructor.
* @param id the id for the transliterator.
* @param theData the rule data for the transliterator.
* @param adoptedFilter the filter for the transliterator
@@ -144,7 +144,7 @@ public:
* Implement Transliterator API.
* @internal Use transliterator factory methods instead since this class will be removed in that release.
*/
- virtual RuleBasedTransliterator* clone() const;
+ virtual RuleBasedTransliterator* clone() const override;
protected:
/**
@@ -152,7 +152,7 @@ protected:
* @internal Use transliterator factory methods instead since this class will be removed in that release.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offsets,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
public:
/**
@@ -168,19 +168,19 @@ public:
* @internal Use transliterator factory methods instead since this class will be removed in that release.
*/
virtual UnicodeString& toRules(UnicodeString& result,
- UBool escapeUnprintable) const;
+ UBool escapeUnprintable) const override;
protected:
/**
* Implement Transliterator framework
*/
- virtual void handleGetSourceSet(UnicodeSet& result) const;
+ virtual void handleGetSourceSet(UnicodeSet& result) const override;
public:
/**
* Override Transliterator framework
*/
- virtual UnicodeSet& getTargetSet(UnicodeSet& result) const;
+ virtual UnicodeSet& getTargetSet(UnicodeSet& result) const override;
/**
* Return the class ID for this class. This is useful only for
@@ -205,7 +205,7 @@ public:
* class have the same class ID. Objects of other classes have
* different class IDs.
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
private:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_data.cpp b/Build/source/libs/icu/icu-src/source/i18n/rbt_data.cpp
index 4b596ac6c4a..f3985fc7685 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_data.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_data.cpp
@@ -72,7 +72,7 @@ TransliterationRuleData::TransliterationRuleData(const TransliterationRuleData&
}
}
}
- // Remove the array and exit if memory allocation error occured.
+ // Remove the array and exit if memory allocation error occurred.
if (U_FAILURE(status)) {
for (int32_t n = i-1; n >= 0; n--) {
delete variables[n];
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp b/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
index 89d426813ce..2f207a8deb0 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
@@ -148,12 +148,12 @@ public:
virtual ~ParseData();
- virtual const UnicodeString* lookup(const UnicodeString& s) const;
+ virtual const UnicodeString* lookup(const UnicodeString& s) const override;
- virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const;
+ virtual const UnicodeFunctor* lookupMatcher(UChar32 ch) const override;
virtual UnicodeString parseReference(const UnicodeString& text,
- ParsePosition& pos, int32_t limit) const;
+ ParsePosition& pos, int32_t limit) const override;
/**
* Return true if the given character is a matcher standin or a plain
* character (non standin).
@@ -945,7 +945,7 @@ void TransliteratorParser::parseRules(const UnicodeString& rule,
if (c == RULE_COMMENT_CHAR) {
pos = rule.indexOf((UChar)0x000A /*\n*/, pos) + 1;
if (pos == 0) {
- break; // No "\n" found; rest of rule is a commnet
+ break; // No "\n" found; rest of rule is a comment
}
continue; // Either fall out or restart with next line
}
@@ -975,10 +975,14 @@ void TransliteratorParser::parseRules(const UnicodeString& rule,
if (!parsingIDs) {
if (curData != NULL) {
+ U_ASSERT(!dataVector.hasDeleter());
if (direction == UTRANS_FORWARD)
dataVector.addElement(curData, status);
else
dataVector.insertElementAt(curData, 0, status);
+ if (U_FAILURE(status)) {
+ delete curData;
+ }
curData = NULL;
}
parsingIDs = TRUE;
@@ -1031,10 +1035,14 @@ void TransliteratorParser::parseRules(const UnicodeString& rule,
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
+ U_ASSERT(idBlockVector.hasDeleter());
if (direction == UTRANS_FORWARD)
- idBlockVector.addElement(tempstr, status);
+ idBlockVector.adoptElement(tempstr, status);
else
idBlockVector.insertElementAt(tempstr, 0, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
idBlockResult.remove();
parsingIDs = FALSE;
curData = new TransliterationRuleData(status);
@@ -1069,19 +1077,29 @@ void TransliteratorParser::parseRules(const UnicodeString& rule,
tempstr = new UnicodeString(idBlockResult);
// NULL pointer check
if (tempstr == NULL) {
+ // TODO: Testing, forcing this path, shows many memory leaks. ICU-21701
+ // intltest translit/TransliteratorTest/TestInstantiation
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
if (direction == UTRANS_FORWARD)
- idBlockVector.addElement(tempstr, status);
+ idBlockVector.adoptElement(tempstr, status);
else
idBlockVector.insertElementAt(tempstr, 0, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
}
else if (!parsingIDs && curData != NULL) {
- if (direction == UTRANS_FORWARD)
+ if (direction == UTRANS_FORWARD) {
dataVector.addElement(curData, status);
- else
+ } else {
dataVector.insertElementAt(curData, 0, status);
+ }
+ if (U_FAILURE(status)) {
+ delete curData;
+ curData = nullptr;
+ }
}
if (U_SUCCESS(status)) {
@@ -1159,7 +1177,7 @@ void TransliteratorParser::setVariableRange(int32_t start, int32_t end, UErrorCo
/**
* Assert that the given character is NOT within the variable range.
- * If it is, return FALSE. This is neccesary to ensure that the
+ * If it is, return FALSE. This is necessary to ensure that the
* variable range does not overlap characters used in a rule.
*/
UBool TransliteratorParser::checkVariableRange(UChar32 ch) const {
@@ -1538,6 +1556,10 @@ UChar TransliteratorParser::generateStandInFor(UnicodeFunctor* adopted, UErrorCo
return 0;
}
variablesVector.addElement(adopted, status);
+ if (U_FAILURE(status)) {
+ delete adopted;
+ return 0;
+ }
return variableNext++;
}
@@ -1577,13 +1599,17 @@ void TransliteratorParser::setSegmentObject(int32_t seg, StringMatcher* adopted,
if (segmentObjects.size() < seg) {
segmentObjects.setSize(seg, status);
}
+ if (U_FAILURE(status)) {
+ return;
+ }
int32_t index = getSegmentStandin(seg, status) - curData->variablesBase;
if (segmentObjects.elementAt(seg-1) != NULL ||
variablesVector.elementAt(index) != NULL) {
// should never happen
- status = U_INTERNAL_TRANSLITERATOR_ERROR;
+ if (U_SUCCESS(status)) {status = U_INTERNAL_TRANSLITERATOR_ERROR;}
return;
}
+ // Note: neither segmentObjects or variablesVector has an object deleter function.
segmentObjects.setElementAt(adopted, seg-1);
variablesVector.setElementAt(adopted, index);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h b/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
index 2a972e1eaa3..d1a4cd6997c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
@@ -156,7 +156,7 @@ public:
* call returns.
* @param rules rules, separated by ';'
* @param direction either FORWARD or REVERSE.
- * @param pe Struct to recieve information on position
+ * @param pe Struct to receive information on position
* of error if an error is encountered
* @param ec Output param set to success/failure code.
*/
@@ -210,7 +210,7 @@ private:
/**
* Assert that the given character is NOT within the variable range.
- * If it is, return false. This is neccesary to ensure that the
+ * If it is, return false. This is necessary to ensure that the
* variable range does not overlap characters used in a rule.
* @param ch the given character.
* @return True, if the given character is NOT within the variable range.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_set.cpp b/Build/source/libs/icu/icu-src/source/i18n/rbt_set.cpp
index d8d0384dda6..abc4413c2c6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_set.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_set.cpp
@@ -197,7 +197,7 @@ TransliterationRuleSet::TransliterationRuleSet(const TransliterationRuleSet& oth
status = U_MEMORY_ALLOCATION_ERROR;
break;
}
- ruleVector->addElement(tempTranslitRule, status);
+ ruleVector->addElementX(tempTranslitRule, status);
if (U_FAILURE(status)) {
break;
}
@@ -251,7 +251,7 @@ void TransliterationRuleSet::addRule(TransliterationRule* adoptedRule,
delete adoptedRule;
return;
}
- ruleVector->addElement(adoptedRule, status);
+ ruleVector->addElementX(adoptedRule, status);
int32_t len;
if ((len = adoptedRule->getContextLength()) > maxContextLength) {
@@ -316,16 +316,16 @@ void TransliterationRuleSet::freeze(UParseError& parseError,UErrorCode& status)
for (j=0; j<n; ++j) {
if (indexValue[j] >= 0) {
if (indexValue[j] == x) {
- v.addElement(ruleVector->elementAt(j), status);
+ v.addElementX(ruleVector->elementAt(j), status);
}
} else {
// If the indexValue is < 0, then the first key character is
// a set, and we must use the more time-consuming
// matchesIndexValue check. In practice this happens
- // rarely, so we seldom tread this code path.
+ // rarely, so we seldom treat this code path.
TransliterationRule* r = (TransliterationRule*) ruleVector->elementAt(j);
if (r->matchesIndexValue((uint8_t)x)) {
- v.addElement(r, status);
+ v.addElementX(r, status);
}
}
}
@@ -396,7 +396,7 @@ void TransliterationRuleSet::freeze(UParseError& parseError,UErrorCode& status)
* @param text the text to be transliterated
* @param pos the position indices, which will be updated
* @param incremental if TRUE, assume new text may be inserted
- * at index.limit, and return FALSE if thre is a partial match.
+ * at index.limit, and return FALSE if there is a partial match.
* @return TRUE unless a U_PARTIAL_MATCH has been obtained,
* indicating that transliteration should stop until more text
* arrives.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h b/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
index 35ae3fbb4ba..3a2890e8ec7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
@@ -129,7 +129,7 @@ public:
* @param text the text to be transliterated
* @param index the position indices, which will be updated
* @param isIncremental if true, assume new text may be inserted
- * at index.limit, and return false if thre is a partial match.
+ * at index.limit, and return false if thrre is a partial match.
* @return true unless a U_PARTIAL_MATCH has been obtained,
* indicating that transliteration should stop until more text
* arrives.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rbtz.cpp b/Build/source/libs/icu/icu-src/source/i18n/rbtz.cpp
index 3249a32a1cf..495d8310d00 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rbtz.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rbtz.cpp
@@ -25,12 +25,19 @@ U_NAMESPACE_BEGIN
/**
* A struct representing a time zone transition
*/
-struct Transition {
+struct Transition : public UMemory {
UDate time;
TimeZoneRule* from;
TimeZoneRule* to;
};
+U_CDECL_BEGIN
+static void U_CALLCONV
+deleteTransition(void* obj) {
+ delete static_cast<Transition *>(obj);
+}
+U_CDECL_END
+
static UBool compareRules(UVector* rules1, UVector* rules2) {
if (rules1 == NULL && rules2 == NULL) {
return TRUE;
@@ -88,59 +95,61 @@ RuleBasedTimeZone::operator=(const RuleBasedTimeZone& right) {
return *this;
}
-UBool
+bool
RuleBasedTimeZone::operator==(const TimeZone& that) const {
if (this == &that) {
- return TRUE;
+ return true;
}
- if (typeid(*this) != typeid(that)
- || BasicTimeZone::operator==(that) == FALSE) {
- return FALSE;
+ if (typeid(*this) != typeid(that) || !BasicTimeZone::operator==(that)) {
+ return false;
}
RuleBasedTimeZone *rbtz = (RuleBasedTimeZone*)&that;
if (*fInitialRule != *(rbtz->fInitialRule)) {
- return FALSE;
+ return false;
}
if (compareRules(fHistoricRules, rbtz->fHistoricRules)
&& compareRules(fFinalRules, rbtz->fFinalRules)) {
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
-UBool
+bool
RuleBasedTimeZone::operator!=(const TimeZone& that) const {
return !operator==(that);
}
void
RuleBasedTimeZone::addTransitionRule(TimeZoneRule* rule, UErrorCode& status) {
+ LocalPointer<TimeZoneRule>lpRule(rule);
if (U_FAILURE(status)) {
return;
}
AnnualTimeZoneRule* atzrule = dynamic_cast<AnnualTimeZoneRule*>(rule);
- if (atzrule != NULL && atzrule->getEndYear() == AnnualTimeZoneRule::MAX_YEAR) {
+ if (atzrule != nullptr && atzrule->getEndYear() == AnnualTimeZoneRule::MAX_YEAR) {
// A final rule
- if (fFinalRules == NULL) {
- fFinalRules = new UVector(status);
+ if (fFinalRules == nullptr) {
+ LocalPointer<UVector> lpFinalRules(new UVector(uprv_deleteUObject, nullptr, status), status);
if (U_FAILURE(status)) {
return;
}
+ fFinalRules = lpFinalRules.orphan();
} else if (fFinalRules->size() >= 2) {
// Cannot handle more than two final rules
status = U_INVALID_STATE_ERROR;
return;
}
- fFinalRules->addElement((void*)rule, status);
+ fFinalRules->adoptElement(lpRule.orphan(), status);
} else {
// Non-final rule
- if (fHistoricRules == NULL) {
- fHistoricRules = new UVector(status);
+ if (fHistoricRules == nullptr) {
+ LocalPointer<UVector> lpHistoricRules(new UVector(uprv_deleteUObject, nullptr, status), status);
if (U_FAILURE(status)) {
return;
}
+ fHistoricRules = lpHistoricRules.orphan();
}
- fHistoricRules->addElement((void*)rule, status);
+ fHistoricRules->adoptElement(lpRule.orphan(), status);
}
// Mark dirty, so transitions are recalculated at next complete() call
fUpToDate = FALSE;
@@ -176,7 +185,6 @@ RuleBasedTimeZone::complete(UErrorCode& status) {
return;
}
- UBool *done = NULL;
// Create a TimezoneTransition and add to the list
if (fHistoricRules != NULL || fFinalRules != NULL) {
TimeZoneRule *curRule = fInitialRule;
@@ -187,13 +195,13 @@ RuleBasedTimeZone::complete(UErrorCode& status) {
if (fHistoricRules != NULL && fHistoricRules->size() > 0) {
int32_t i;
int32_t historicCount = fHistoricRules->size();
- done = (UBool*)uprv_malloc(sizeof(UBool) * historicCount);
+ LocalMemory<bool> done((bool *)uprv_malloc(sizeof(bool) * historicCount));
if (done == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
goto cleanup;
}
for (i = 0; i < historicCount; i++) {
- done[i] = FALSE;
+ done[i] = false;
}
while (TRUE) {
int32_t curStdOffset = curRule->getRawOffset();
@@ -214,7 +222,7 @@ RuleBasedTimeZone::complete(UErrorCode& status) {
avail = r->getNextStart(lastTransitionTime, curStdOffset, curDstSavings, false, tt);
if (!avail) {
// No more transitions from this rule - skip this rule next time
- done[i] = TRUE;
+ done[i] = true;
} else {
r->getName(name);
if (*r == *curRule ||
@@ -267,20 +275,21 @@ RuleBasedTimeZone::complete(UErrorCode& status) {
}
if (fHistoricTransitions == NULL) {
- fHistoricTransitions = new UVector(status);
+ LocalPointer<UVector> lpHistoricTransitions(
+ new UVector(deleteTransition, nullptr, status), status);
if (U_FAILURE(status)) {
goto cleanup;
}
+ fHistoricTransitions = lpHistoricTransitions.orphan();
}
- Transition *trst = (Transition*)uprv_malloc(sizeof(Transition));
- if (trst == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
+ LocalPointer<Transition> trst(new Transition, status);
+ if (U_FAILURE(status)) {
goto cleanup;
}
trst->time = nextTransitionTime;
trst->from = curRule;
trst->to = nextRule;
- fHistoricTransitions->addElement(trst, status);
+ fHistoricTransitions->adoptElement(trst.orphan(), status);
if (U_FAILURE(status)) {
goto cleanup;
}
@@ -290,10 +299,12 @@ RuleBasedTimeZone::complete(UErrorCode& status) {
}
if (fFinalRules != NULL) {
if (fHistoricTransitions == NULL) {
- fHistoricTransitions = new UVector(status);
+ LocalPointer<UVector> lpHistoricTransitions(
+ new UVector(deleteTransition, nullptr, status), status);
if (U_FAILURE(status)) {
goto cleanup;
}
+ fHistoricTransitions = lpHistoricTransitions.orphan();
}
// Append the first transition for each
TimeZoneRule *rule0 = (TimeZoneRule*)fFinalRules->elementAt(0);
@@ -306,16 +317,10 @@ RuleBasedTimeZone::complete(UErrorCode& status) {
status = U_INVALID_STATE_ERROR;
goto cleanup;
}
- Transition *final0 = (Transition*)uprv_malloc(sizeof(Transition));
- if (final0 == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
- goto cleanup;
- }
- Transition *final1 = (Transition*)uprv_malloc(sizeof(Transition));
- if (final1 == NULL) {
- uprv_free(final0);
- status = U_MEMORY_ALLOCATION_ERROR;
- goto cleanup;
+ LocalPointer<Transition> final0(new Transition, status);
+ LocalPointer<Transition> final1(new Transition, status);
+ if (U_FAILURE(status)) {
+ goto cleanup;
}
if (tt0 < tt1) {
final0->time = tt0;
@@ -332,27 +337,18 @@ RuleBasedTimeZone::complete(UErrorCode& status) {
final1->from = rule1;
final1->to = rule0;
}
- fHistoricTransitions->addElement(final0, status);
- if (U_FAILURE(status)) {
- goto cleanup;
- }
- fHistoricTransitions->addElement(final1, status);
+ fHistoricTransitions->adoptElement(final0.orphan(), status);
+ fHistoricTransitions->adoptElement(final1.orphan(), status);
if (U_FAILURE(status)) {
goto cleanup;
}
}
}
fUpToDate = TRUE;
- if (done != NULL) {
- uprv_free(done);
- }
return;
cleanup:
deleteTransitions();
- if (done != NULL) {
- uprv_free(done);
- }
fUpToDate = FALSE;
}
@@ -403,9 +399,9 @@ RuleBasedTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffset,
getOffsetInternal(date, local, kFormer, kLatter, rawOffset, dstOffset, status);
}
-void
-RuleBasedTimeZone::getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
- int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const {
+void RuleBasedTimeZone::getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const {
getOffsetInternal(date, TRUE, nonExistingTimeOpt, duplicatedTimeOpt, rawOffset, dstOffset, status);
}
@@ -629,16 +625,10 @@ RuleBasedTimeZone::deleteRules(void) {
delete fInitialRule;
fInitialRule = NULL;
if (fHistoricRules != NULL) {
- while (!fHistoricRules->isEmpty()) {
- delete (TimeZoneRule*)(fHistoricRules->orphanElementAt(0));
- }
delete fHistoricRules;
fHistoricRules = NULL;
}
if (fFinalRules != NULL) {
- while (!fFinalRules->isEmpty()) {
- delete (AnnualTimeZoneRule*)(fFinalRules->orphanElementAt(0));
- }
delete fFinalRules;
fFinalRules = NULL;
}
@@ -647,10 +637,6 @@ RuleBasedTimeZone::deleteRules(void) {
void
RuleBasedTimeZone::deleteTransitions(void) {
if (fHistoricTransitions != NULL) {
- while (!fHistoricTransitions->isEmpty()) {
- Transition *trs = (Transition*)fHistoricTransitions->orphanElementAt(0);
- uprv_free(trs);
- }
delete fHistoricTransitions;
}
fHistoricTransitions = NULL;
@@ -658,32 +644,24 @@ RuleBasedTimeZone::deleteTransitions(void) {
UVector*
RuleBasedTimeZone::copyRules(UVector* source) {
- if (source == NULL) {
- return NULL;
+ if (source == nullptr) {
+ return nullptr;
}
UErrorCode ec = U_ZERO_ERROR;
int32_t size = source->size();
- UVector *rules = new UVector(size, ec);
+ LocalPointer<UVector> rules(new UVector(uprv_deleteUObject, nullptr, size, ec), ec);
if (U_FAILURE(ec)) {
- return NULL;
+ return nullptr;
}
int32_t i;
for (i = 0; i < size; i++) {
- rules->addElement(((TimeZoneRule*)source->elementAt(i))->clone(), ec);
+ LocalPointer<TimeZoneRule> rule(((TimeZoneRule*)source->elementAt(i))->clone(), ec);
+ rules->adoptElement(rule.orphan(), ec);
if (U_FAILURE(ec)) {
- break;
+ return nullptr;
}
}
- if (U_FAILURE(ec)) {
- // In case of error, clean up
- for (i = 0; i < rules->size(); i++) {
- TimeZoneRule *rule = (TimeZoneRule*)rules->orphanElementAt(i);
- delete rule;
- }
- delete rules;
- return NULL;
- }
- return rules;
+ return rules.orphan();
}
TimeZoneRule*
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp b/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
index dd777b75384..89cb6584251 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
@@ -53,7 +53,7 @@ U_NAMESPACE_BEGIN
//
//------------------------------------------------------------------------------
RegexCompile::RegexCompile(RegexPattern *rxp, UErrorCode &status) :
- fParenStack(status), fSetStack(status), fSetOpStack(status)
+ fParenStack(status), fSetStack(uprv_deleteUObject, nullptr, status), fSetOpStack(status)
{
// Lazy init of all shared global sets (needed for init()'s empty text)
RegexStaticSets::initGlobals(&status);
@@ -278,11 +278,6 @@ void RegexCompile::compile(
if (U_FAILURE(*fStatus)) {
// Bail out if the pattern had errors.
- // Set stack cleanup: a successful compile would have left it empty,
- // but errors can leave temporary sets hanging around.
- while (!fSetStack.empty()) {
- delete (UnicodeSet *)fSetStack.pop();
- }
return;
}
@@ -473,7 +468,7 @@ UBool RegexCompile::doParseActions(int32_t action)
appendOp(URX_START_CAPTURE, varsLoc);
appendOp(URX_NOP, 0);
- // On the Parentheses stack, start a new frame and add the postions
+ // On the Parentheses stack, start a new frame and add the positions
// of the two NOPs. Depending on what follows in the pattern, the
// NOPs may be changed to SAVE_STATE or JMP ops, with a target
// address of the end of the parenthesized group.
@@ -515,7 +510,7 @@ UBool RegexCompile::doParseActions(int32_t action)
appendOp(URX_NOP, 0);
appendOp(URX_NOP, 0);
- // On the Parentheses stack, start a new frame and add the postions
+ // On the Parentheses stack, start a new frame and add the positions
// of the two NOPs.
fParenStack.push(fModeFlags, *fStatus); // Match mode state
fParenStack.push(plain, *fStatus); // Begin a new frame.
@@ -540,7 +535,7 @@ UBool RegexCompile::doParseActions(int32_t action)
appendOp(URX_STO_SP, varLoc);
appendOp(URX_NOP, 0);
- // On the Parentheses stack, start a new frame and add the postions
+ // On the Parentheses stack, start a new frame and add the positions
// of the two NOPs. Depending on what follows in the pattern, the
// NOPs may be changed to SAVE_STATE or JMP ops, with a target
// address of the end of the parenthesized group.
@@ -557,7 +552,7 @@ UBool RegexCompile::doParseActions(int32_t action)
//
// Note: Addition of transparent input regions, with the need to
// restore the original regions when failing out of a lookahead
- // block, complicated this sequence. Some conbined opcodes
+ // block, complicated this sequence. Some combined opcodes
// might make sense - or might not, lookahead aren't that common.
//
// Caution: min match length optimization knows about this
@@ -594,7 +589,7 @@ UBool RegexCompile::doParseActions(int32_t action)
appendOp(URX_NOP, 0);
appendOp(URX_NOP, 0);
- // On the Parentheses stack, start a new frame and add the postions
+ // On the Parentheses stack, start a new frame and add the positions
// of the NOPs.
fParenStack.push(fModeFlags, *fStatus); // Match mode state
fParenStack.push(lookAhead, *fStatus); // Frame type.
@@ -627,7 +622,7 @@ UBool RegexCompile::doParseActions(int32_t action)
appendOp(URX_STATE_SAVE, 0); // dest address will be patched later.
appendOp(URX_NOP, 0);
- // On the Parentheses stack, start a new frame and add the postions
+ // On the Parentheses stack, start a new frame and add the positions
// of the StateSave and NOP.
fParenStack.push(fModeFlags, *fStatus); // Match mode state
fParenStack.push(negLookAhead, *fStatus); // Frame type
@@ -679,7 +674,7 @@ UBool RegexCompile::doParseActions(int32_t action)
appendOp(URX_NOP, 0);
appendOp(URX_NOP, 0);
- // On the Parentheses stack, start a new frame and add the postions
+ // On the Parentheses stack, start a new frame and add the positions
// of the URX_LB_CONT and the NOP.
fParenStack.push(fModeFlags, *fStatus); // Match mode state
fParenStack.push(lookBehind, *fStatus); // Frame type
@@ -734,7 +729,7 @@ UBool RegexCompile::doParseActions(int32_t action)
appendOp(URX_NOP, 0);
appendOp(URX_NOP, 0);
- // On the Parentheses stack, start a new frame and add the postions
+ // On the Parentheses stack, start a new frame and add the positions
// of the URX_LB_CONT and the NOP.
fParenStack.push(fModeFlags, *fStatus); // Match mode state
fParenStack.push(lookBehindN, *fStatus); // Frame type
@@ -748,7 +743,7 @@ UBool RegexCompile::doParseActions(int32_t action)
case doConditionalExpr:
// Conditionals such as (?(1)a:b)
case doPerlInline:
- // Perl inline-condtionals. (?{perl code}a|b) We're not perl, no way to do them.
+ // Perl inline-conditionals. (?{perl code}a|b) We're not perl, no way to do them.
error(U_REGEX_UNIMPLEMENTED);
break;
@@ -1009,7 +1004,7 @@ UBool RegexCompile::doParseActions(int32_t action)
case doIntervalInit:
// The '{' opening an interval quantifier was just scanned.
- // Init the counter varaiables that will accumulate the values as the digits
+ // Init the counter variables that will accumulate the values as the digits
// are scanned.
fIntervalLow = 0;
fIntervalUpper = -1;
@@ -1485,8 +1480,8 @@ UBool RegexCompile::doParseActions(int32_t action)
case 0x78: /* 'x' */ bit = UREGEX_COMMENTS; break;
case 0x2d: /* '-' */ fSetModeFlag = FALSE; break;
default:
- UPRV_UNREACHABLE; // Should never happen. Other chars are filtered out
- // by the scanner.
+ UPRV_UNREACHABLE_EXIT; // Should never happen. Other chars are filtered out
+ // by the scanner.
}
if (fSetModeFlag) {
fNewModeFlags |= bit;
@@ -1522,9 +1517,9 @@ UBool RegexCompile::doParseActions(int32_t action)
appendOp(URX_NOP, 0);
appendOp(URX_NOP, 0);
- // On the Parentheses stack, start a new frame and add the postions
+ // On the Parentheses stack, start a new frame and add the positions
// of the two NOPs (a normal non-capturing () frame, except for the
- // saving of the orignal mode flags.)
+ // saving of the original mode flags.)
fParenStack.push(fModeFlags, *fStatus);
fParenStack.push(flags, *fStatus); // Frame Marker
fParenStack.push(fRXPat->fCompiledPat->size()-2, *fStatus); // The first NOP
@@ -1656,13 +1651,16 @@ UBool RegexCompile::doParseActions(int32_t action)
}
case doSetBegin:
- fixLiterals(FALSE);
- fSetStack.push(new UnicodeSet(), *fStatus);
- fSetOpStack.push(setStart, *fStatus);
- if ((fModeFlags & UREGEX_CASE_INSENSITIVE) != 0) {
- fSetOpStack.push(setCaseClose, *fStatus);
+ {
+ fixLiterals(FALSE);
+ LocalPointer<UnicodeSet> lpSet(new UnicodeSet(), *fStatus);
+ fSetStack.push(lpSet.orphan(), *fStatus);
+ fSetOpStack.push(setStart, *fStatus);
+ if ((fModeFlags & UREGEX_CASE_INSENSITIVE) != 0) {
+ fSetOpStack.push(setCaseClose, *fStatus);
+ }
+ break;
}
- break;
case doSetBeginDifference1:
// We have scanned something like [[abc]-[
@@ -1860,7 +1858,7 @@ UBool RegexCompile::doParseActions(int32_t action)
}
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
if (U_FAILURE(*fStatus)) {
@@ -1967,17 +1965,17 @@ int32_t RegexCompile::buildOp(int32_t type, int32_t val) {
return 0;
}
if (type < 0 || type > 255) {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
if (val > 0x00ffffff) {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
if (val < 0) {
if (!(type == URX_RESERVED_OP_N || type == URX_RESERVED_OP)) {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
if (URX_TYPE(val) != 0xff) {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
type = URX_RESERVED_OP_N;
}
@@ -2373,7 +2371,7 @@ void RegexCompile::handleCloseParen() {
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
// remember the next location in the compiled pattern.
@@ -2396,8 +2394,8 @@ void RegexCompile::compileSet(UnicodeSet *theSet)
return;
}
// Remove any strings from the set.
- // There shoudn't be any, but just in case.
- // (Case Closure can add them; if we had a simple case closure avaialble that
+ // There shouldn't be any, but just in case.
+ // (Case Closure can add them; if we had a simple case closure available that
// ignored strings, that would be better.)
theSet->removeAllStrings();
int32_t setSize = theSet->size();
@@ -2428,7 +2426,11 @@ void RegexCompile::compileSet(UnicodeSet *theSet)
theSet->freeze();
int32_t setNumber = fRXPat->fSets->size();
fRXPat->fSets->addElement(theSet, *fStatus);
- appendOp(URX_SETREF, setNumber);
+ if (U_SUCCESS(*fStatus)) {
+ appendOp(URX_SETREF, setNumber);
+ } else {
+ delete theSet;
+ }
}
}
}
@@ -2485,7 +2487,7 @@ void RegexCompile::compileInterval(int32_t InitOp, int32_t LoopOp)
fRXPat->fCompiledPat->setElementAt(fIntervalLow, topOfBlock+2);
fRXPat->fCompiledPat->setElementAt(fIntervalUpper, topOfBlock+3);
- // Apend the CTR_LOOP op. The operand is the location of the CTR_INIT op.
+ // Append the CTR_LOOP op. The operand is the location of the CTR_INIT op.
// Goes at end of the block being looped over, so just append to the code so far.
appendOp(LoopOp, topOfBlock);
@@ -2579,7 +2581,7 @@ UBool RegexCompile::compileInlineInterval() {
// The pattern could match a string beginning with a German sharp-s
//
// To the ordinary case closure for a character c, we add all other
-// characters cx where the case closure of cx incudes a string form that begins
+// characters cx where the case closure of cx includes a string form that begins
// with the original character c.
//
// This function could be made smarter. The full pattern string is available
@@ -2593,7 +2595,8 @@ void RegexCompile::findCaseInsensitiveStarters(UChar32 c, UnicodeSet *starterCh
// Machine Generated below.
// It may need updating with new versions of Unicode.
// Intltest test RegexTest::TestCaseInsensitiveStarters will fail if an update is needed.
-// The update tool is here: svn+ssh://source.icu-project.org/repos/icu/tools/trunk/unicode/c/genregexcasing
+// The update tool is here:
+// https://github.com/unicode-org/icu/tree/main/tools/unicode/c/genregexcasing
// Machine Generated Data. Do not hand edit.
static const UChar32 RECaseFixCodePoints[] = {
@@ -2634,7 +2637,7 @@ void RegexCompile::findCaseInsensitiveStarters(UChar32 c, UnicodeSet *starterCh
if (c < UCHAR_MIN_VALUE || c > UCHAR_MAX_VALUE) {
// This function should never be called with an invalid input character.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
} else if (u_hasBinaryProperty(c, UCHAR_CASE_SENSITIVE)) {
UChar32 caseFoldedC = u_foldCase(c, U_FOLD_CASE_DEFAULT);
starterChars->set(caseFoldedC, caseFoldedC);
@@ -2919,7 +2922,7 @@ void RegexCompile::matchStartType() {
break;
- case URX_BACKSLASH_X: // Grahpeme Cluster. Minimum is 1, max unbounded.
+ case URX_BACKSLASH_X: // Grapheme Cluster. Minimum is 1, max unbounded.
case URX_DOTANY_ALL: // . matches one or two.
case URX_DOTANY:
case URX_DOTANY_UNIX:
@@ -3127,10 +3130,10 @@ void RegexCompile::matchStartType() {
case URX_LB_END:
case URX_LBN_CONT:
case URX_LBN_END:
- UPRV_UNREACHABLE; // Shouldn't get here. These ops should be
- // consumed by the scan in URX_LA_START and LB_START
+ UPRV_UNREACHABLE_EXIT; // Shouldn't get here. These ops should be
+ // consumed by the scan in URX_LA_START and LB_START
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -3286,7 +3289,7 @@ int32_t RegexCompile::minMatchLength(int32_t start, int32_t end) {
case URX_BACKSLASH_R:
case URX_BACKSLASH_V:
case URX_ONECHAR_I:
- case URX_BACKSLASH_X: // Grahpeme Cluster. Minimum is 1, max unbounded.
+ case URX_BACKSLASH_X: // Grapheme Cluster. Minimum is 1, max unbounded.
case URX_DOTANY_ALL: // . matches one or two.
case URX_DOTANY:
case URX_DOTANY_UNIX:
@@ -3406,7 +3409,7 @@ int32_t RegexCompile::minMatchLength(int32_t start, int32_t end) {
loc++;
op = (int32_t)fRXPat->fCompiledPat->elementAti(loc);
if (URX_TYPE(op) == URX_LA_START) {
- // The boilerplate for look-ahead includes two LA_END insturctions,
+ // The boilerplate for look-ahead includes two LA_END instructions,
// Depth will be decremented by each one when it is seen.
depth += 2;
}
@@ -3450,7 +3453,7 @@ int32_t RegexCompile::minMatchLength(int32_t start, int32_t end) {
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -3475,6 +3478,9 @@ int32_t RegexCompile::minMatchLength(int32_t start, int32_t end) {
// value may be longer than the actual maximum; it must
// never be shorter.
//
+// start, end: the range of the pattern to check.
+// end is inclusive.
+//
//------------------------------------------------------------------------------
int32_t RegexCompile::maxMatchLength(int32_t start, int32_t end) {
if (U_FAILURE(*fStatus)) {
@@ -3543,7 +3549,7 @@ int32_t RegexCompile::maxMatchLength(int32_t start, int32_t end) {
// Call the max length unbounded, and stop further checking.
case URX_BACKREF: // BackRef. Must assume that it might be a zero length match
case URX_BACKREF_I:
- case URX_BACKSLASH_X: // Grahpeme Cluster. Minimum is 1, max unbounded.
+ case URX_BACKSLASH_X: // Grapheme Cluster. Minimum is 1, max unbounded.
currentLen = INT32_MAX;
break;
@@ -3693,7 +3699,7 @@ int32_t RegexCompile::maxMatchLength(int32_t start, int32_t end) {
case URX_CTR_LOOP_NG:
// These opcodes will be skipped over by code for URX_CTR_INIT.
// We shouldn't encounter them here.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
case URX_LOOP_SR_I:
case URX_LOOP_DOT_I:
@@ -3713,26 +3719,26 @@ int32_t RegexCompile::maxMatchLength(int32_t start, int32_t end) {
// End of look-ahead ops should always be consumed by the processing at
// the URX_LA_START op.
- // UPRV_UNREACHABLE;
+ // UPRV_UNREACHABLE_EXIT;
case URX_LB_START:
{
// Look-behind. Scan forward until the matching look-around end,
// without processing the look-behind block.
int32_t dataLoc = URX_VAL(op);
- for (loc = loc + 1; loc < end; ++loc) {
+ for (loc = loc + 1; loc <= end; ++loc) {
op = (int32_t)fRXPat->fCompiledPat->elementAti(loc);
int32_t opType = URX_TYPE(op);
if ((opType == URX_LA_END || opType == URX_LBN_END) && (URX_VAL(op) == dataLoc)) {
break;
}
}
- U_ASSERT(loc < end);
+ U_ASSERT(loc <= end);
}
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
@@ -3887,7 +3893,7 @@ void RegexCompile::stripNOPs() {
default:
// Some op is unaccounted for.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
@@ -3924,7 +3930,7 @@ void RegexCompile::error(UErrorCode e) {
UErrorCode status = U_ZERO_ERROR; // throwaway status for extracting context
// Fill in the context.
- // Note: extractBetween() pins supplied indicies to the string bounds.
+ // Note: extractBetween() pins supplied indices to the string bounds.
uprv_memset(fParseErr->preContext, 0, sizeof(fParseErr->preContext));
uprv_memset(fParseErr->postContext, 0, sizeof(fParseErr->postContext));
utext_extract(fRXPat->fPattern, fScanIndex-U_PARSE_CONTEXT_LEN+1, fScanIndex, fParseErr->preContext, U_PARSE_CONTEXT_LEN, &status);
@@ -4054,7 +4060,7 @@ void RegexCompile::nextChar(RegexPatternChar &c) {
//
// We are in free-spacing and comments mode.
// Scan through any white space and comments, until we
- // reach a significant character or the end of inut.
+ // reach a significant character or the end of input.
for (;;) {
if (c.fChar == (UChar32)-1) {
break; // End of Input
@@ -4382,7 +4388,7 @@ static inline void addIdentifierIgnorable(UnicodeSet *set, UErrorCode& ec) {
//
// Create a Unicode Set from a Unicode Property expression.
-// This is common code underlying both \p{...} ane [:...:] expressions.
+// This is common code underlying both \p{...} and [:...:] expressions.
// Includes trying the Java "properties" that aren't supported as
// normal ICU UnicodeSet properties
//
@@ -4575,6 +4581,13 @@ UnicodeSet *RegexCompile::createSetForProperty(const UnicodeString &propName, UB
} while (false); // End of do loop block. Code above breaks out of the block on success or hard failure.
if (U_SUCCESS(status)) {
+ // ICU 70 adds emoji properties of strings, but as long as Java does not say how to
+ // deal with properties of strings and character classes with strings, we ignore them.
+ // Just in case something downstream might stumble over the strings,
+ // we remove them from the set.
+ // Note that when we support strings, the complement of a property (as with \P)
+ // should be implemented as .complement().removeAllStrings() (code point complement).
+ set->removeAllStrings();
U_ASSERT(set.isValid());
if (negated) {
set->complement();
@@ -4608,6 +4621,13 @@ void RegexCompile::setEval(int32_t nextOp) {
fSetOpStack.popi();
U_ASSERT(fSetStack.empty() == FALSE);
rightOperand = (UnicodeSet *)fSetStack.peek();
+ // ICU 70 adds emoji properties of strings, but createSetForProperty() removes all strings
+ // (see comments there).
+ // We also do not yet support string literals in character classes,
+ // so there should not be any strings.
+ // Note that when we support strings, the complement of a set (as with ^ or \P)
+ // should be implemented as .complement().removeAllStrings() (code point complement).
+ U_ASSERT(!rightOperand->hasStrings());
switch (pendingSetOperation) {
case setNegation:
rightOperand->complement();
@@ -4638,7 +4658,7 @@ void RegexCompile::setEval(int32_t nextOp) {
delete rightOperand;
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
}
@@ -4646,7 +4666,8 @@ void RegexCompile::setEval(int32_t nextOp) {
void RegexCompile::setPushOp(int32_t op) {
setEval(op);
fSetOpStack.push(op, *fStatus);
- fSetStack.push(new UnicodeSet(), *fStatus);
+ LocalPointer<UnicodeSet> lpSet(new UnicodeSet(), *fStatus);
+ fSetStack.push(lpSet.orphan(), *fStatus);
}
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h b/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h
index f3cfa6e6d15..9e1aa170f08 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h
@@ -209,7 +209,7 @@ private:
// initially scanned. Each new interval
// encountered overwrites these values.
// -1 for the upper interval value means none
- // was specified (unlimited occurences.)
+ // was specified (unlimited occurrences.)
int64_t fNameStartPos; // Starting position of a \N{NAME} name in a
// pattern, valid while remainder of name is
@@ -228,7 +228,7 @@ private:
// in this string while being scanned.
};
-// Constant values to be pushed onto fSetOpStack while scanning & evalueating [set expressions]
+// Constant values to be pushed onto fSetOpStack while scanning & evaluating [set expressions]
// The high 16 bits are the operator precedence, and the low 16 are a code for the operation itself.
enum SetOperations {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexcst.pl b/Build/source/libs/icu/icu-src/source/i18n/regexcst.pl
index 3d656ed2310..7636757331d 100755
--- a/Build/source/libs/icu/icu-src/source/i18n/regexcst.pl
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexcst.pl
@@ -8,7 +8,7 @@
# ********************************************************************
#
# regexcst.pl
-# Compile the regular expression paser state table data into initialized C data.
+# Compile the regular expression parser state table data into initialized C data.
# Usage:
# cd icu4c/source/i18n
# perl regexcst.pl < regexcst.txt > regexcst.h
@@ -222,7 +222,7 @@ print "\n";
print "U_NAMESPACE_BEGIN\n";
#
-# Emit the constants for indicies of Unicode Sets
+# Emit the constants for indices of Unicode Sets
# Define one constant for each of the character classes encountered.
# At the same time, store the index corresponding to the set name back into hash.
#
@@ -261,7 +261,7 @@ foreach $act (keys %actions) {
print " rbbiLastAction};\n\n";
#
-# Emit the struct definition for transtion table elements.
+# Emit the struct definition for transition table elements.
#
print "//-------------------------------------------------------------------------------\n";
print "//\n";
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regexcst.txt b/Build/source/libs/icu/icu-src/source/i18n/regexcst.txt
index d69a7ea3693..7e53578e243 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regexcst.txt
+++ b/Build/source/libs/icu/icu-src/source/i18n/regexcst.txt
@@ -44,7 +44,7 @@
# | character from the input only if 'n' appears here.
# |
# |--- Character or named character classes to test for. If the current character being scanned
-# matches, peform the actions and go to the state specified on this line.
+# matches, perform the actions and go to the state specified on this line.
# The input character is tested sequentally, in the order written. The characters and
# character classes tested for do not need to be mutually exclusive. The first match wins.
#
@@ -389,7 +389,7 @@ set-after-op:
# Have scanned [[set]&
# Could be a '&' intersection operator, if a set follows.
# Could be the start of a '&&' operator.
-# Otherewise is a literal.
+# Otherwise is a literal.
set-set-amp:
'[' n set-open ^set-after-set doSetBeginIntersection1
'&' n set-after-op doSetIntersection2
@@ -410,7 +410,7 @@ set-lit-amp:
# Have scanned [set]-
# Could be a '-' difference operator, if a [set] follows.
# Could be the start of a '--' operator.
-# Otherewise is a literal.
+# Otherwise is a literal.
set-set-dash:
'[' n set-open ^set-after-set doSetBeginDifference1
'-' n set-after-op doSetDifference2
diff --git a/Build/source/libs/icu/icu-src/source/i18n/regeximp.h b/Build/source/libs/icu/icu-src/source/i18n/regeximp.h
index 590d2168952..bb0e1e838de 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/regeximp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/regeximp.h
@@ -37,7 +37,7 @@ U_NAMESPACE_BEGIN
#define REGEX_DUMP_DEBUG
#define REGEX_RUN_DEBUG
-// End of #defines inteded to be directly set.
+// End of #defines intended to be directly set.
#include <stdio.h>
#endif
@@ -140,7 +140,7 @@ enum {
URX_DOLLAR_M = 42, // $ in multi-line mode.
URX_CARET_M = 43, // ^ in multi-line mode.
URX_LB_START = 44, // LookBehind Start.
- // Paramater is data location
+ // Parameter is data location
URX_LB_CONT = 45, // LookBehind Continue.
// Param 0: the data location
// Param 1: The minimum length of the look-behind match
@@ -371,7 +371,7 @@ class CaseFoldingUTextIterator: public UMemory {
UBool inExpansion(); // True if last char returned from next() and the
// next to be returned both originated from a string
- // folding of the same code point from the orignal UText.
+ // folding of the same code point from the original UText.
private:
UText &fUText;
const UChar *fFoldChars;
@@ -395,7 +395,7 @@ class CaseFoldingUCharIterator: public UMemory {
UBool inExpansion(); // True if last char returned from next() and the
// next to be returned both originated from a string
- // folding of the same code point from the orignal UText.
+ // folding of the same code point from the original UText.
int64_t getIndex(); // Return the current input buffer index.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/region.cpp b/Build/source/libs/icu/icu-src/source/i18n/region.cpp
index d8a5ffddc37..2e013708bb8 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/region.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/region.cpp
@@ -128,12 +128,12 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) {
buf[rangeMarkerLocation] = 0;
while ( buf[rangeMarkerLocation-1] <= endRange ) {
LocalPointer<UnicodeString> newRegion(new UnicodeString(buf), status);
- allRegions->addElement(newRegion.orphan(),status);
+ allRegions->addElementX(newRegion.orphan(),status);
buf[rangeMarkerLocation-1]++;
}
} else {
LocalPointer<UnicodeString> newRegion(new UnicodeString(regionName), status);
- allRegions->addElement(newRegion.orphan(),status);
+ allRegions->addElementX(newRegion.orphan(),status);
}
}
@@ -147,38 +147,25 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) {
buf[rangeMarkerLocation] = 0;
while ( buf[rangeMarkerLocation-1] <= endRange ) {
LocalPointer<UnicodeString> newRegion(new UnicodeString(buf), status);
- allRegions->addElement(newRegion.orphan(),status);
+ allRegions->addElementX(newRegion.orphan(),status);
buf[rangeMarkerLocation-1]++;
}
} else {
LocalPointer<UnicodeString> newRegion(new UnicodeString(regionName), status);
- allRegions->addElement(newRegion.orphan(),status);
+ allRegions->addElementX(newRegion.orphan(),status);
}
}
while ( ures_hasNext(regionUnknown.getAlias()) ) {
LocalPointer<UnicodeString> regionName (new UnicodeString(ures_getNextUnicodeString(regionUnknown.getAlias(),NULL,&status),status));
- allRegions->addElement(regionName.orphan(),status);
+ allRegions->addElementX(regionName.orphan(),status);
}
while ( ures_hasNext(worldContainment.getAlias()) ) {
UnicodeString *continentName = new UnicodeString(ures_getNextUnicodeString(worldContainment.getAlias(),NULL,&status));
- continents->addElement(continentName,status);
+ continents->addElementX(continentName,status);
}
- UResourceBundle *groupingBundle = nullptr;
- while ( ures_hasNext(groupingContainment.getAlias()) ) {
- groupingBundle = ures_getNextResource(groupingContainment.getAlias(), groupingBundle, &status);
- if (U_FAILURE(status)) {
- break;
- }
- UnicodeString *groupingName = new UnicodeString(ures_getKey(groupingBundle), -1, US_INV);
- if (groupingName) {
- groupings->addElement(groupingName,status);
- }
- }
- ures_close(groupingBundle);
-
for ( int32_t i = 0 ; i < allRegions->size() ; i++ ) {
LocalPointer<Region> r(new Region(), status);
if ( U_FAILURE(status) ) {
@@ -203,6 +190,29 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) {
uhash_put(newRegionIDMap.getAlias(),idStrAlias,(void *)(r.orphan()),&status); // regionIDMap takes ownership
}
+ UResourceBundle *groupingBundle = nullptr;
+ while ( ures_hasNext(groupingContainment.getAlias()) ) {
+ groupingBundle = ures_getNextResource(groupingContainment.getAlias(), groupingBundle, &status);
+ if (U_FAILURE(status)) {
+ break;
+ }
+ UnicodeString *groupingName = new UnicodeString(ures_getKey(groupingBundle), -1, US_INV);
+ groupings->addElementX(groupingName,status);
+ Region *grouping = (Region *) uhash_get(newRegionIDMap.getAlias(),groupingName);
+ if (grouping != NULL) {
+ for (int32_t i = 0; i < ures_getSize(groupingBundle); i++) {
+ UnicodeString child = ures_getUnicodeStringByIndex(groupingBundle, i, &status);
+ if (U_SUCCESS(status)) {
+ if (grouping->containedRegions == NULL) {
+ grouping->containedRegions = new UVector(uprv_deleteUObject, uhash_compareUnicodeString, status);
+ }
+ grouping->containedRegions->addElementX(new UnicodeString(child), status);
+ }
+ }
+ }
+ }
+ ures_close(groupingBundle);
+
// Process the territory aliases
while ( ures_hasNext(territoryAlias.getAlias()) ) {
LocalUResourceBundlePointer res(ures_getNextResource(territoryAlias.getAlias(),NULL,&status));
@@ -257,7 +267,7 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) {
Region *target = (Region *)uhash_get(newRegionIDMap.getAlias(),(void *)&currentRegion);
if (target) {
LocalPointer<UnicodeString> preferredValue(new UnicodeString(target->idStr), status);
- aliasFromRegion->preferredValues->addElement((void *)preferredValue.orphan(),status); // may add null if err
+ aliasFromRegion->preferredValues->addElementX((void *)preferredValue.orphan(),status); // may add null if err
}
currentRegion.remove();
}
@@ -354,7 +364,7 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) {
return; // error out
}
childStr->fastCopyFrom(childRegion->idStr);
- parentRegion->containedRegions->addElement((void *)childStr.orphan(),status);
+ parentRegion->containedRegions->addElementX((void *)childStr.orphan(),status);
// Set the parent region to be the containing region of the child.
// Regions of type GROUPING can't be set as the parent, since another region
@@ -378,7 +388,7 @@ void U_CALLCONV Region::loadRegionData(UErrorCode &status) {
if( U_FAILURE(status) ) {
return; // error out
}
- availableRegions[ar->fType]->addElement((void *)arString.orphan(),status);
+ availableRegions[ar->fType]->addElementX((void *)arString.orphan(),status);
}
ucln_i18n_registerCleanup(UCLN_I18N_REGION, region_cleanup);
@@ -439,7 +449,7 @@ Region::~Region () {
* Returns true if the two regions are equal.
* Per PMC, just use pointer compare, since we have at most one instance of each Region.
*/
-UBool
+bool
Region::operator==(const Region &that) const {
return (idStr == that.idStr);
}
@@ -448,7 +458,7 @@ Region::operator==(const Region &that) const {
* Returns true if the two regions are NOT equal; that is, if operator ==() returns false.
* Per PMC, just use pointer compare, since we have at most one instance of each Region.
*/
-UBool
+bool
Region::operator!=(const Region &that) const {
return (idStr != that.idStr);
}
@@ -617,13 +627,13 @@ Region::getContainedRegions( URegionType type, UErrorCode &status ) const {
const char *regionId = cr->next(NULL,status);
const Region *r = Region::getInstance(regionId,status);
if ( r->getType() == type) {
- result->addElement((void *)&r->idStr,status);
+ result->addElementX((void *)&r->idStr,status);
} else {
StringEnumeration *children = r->getContainedRegions(type, status);
for ( int32_t j = 0 ; j < children->count(status) ; j++ ) {
const char *id2 = children->next(NULL,status);
const Region *r2 = Region::getInstance(id2,status);
- result->addElement((void *)&r2->idStr,status);
+ result->addElementX((void *)&r2->idStr,status);
}
delete children;
}
@@ -703,7 +713,7 @@ RegionNameEnumeration::RegionNameEnumeration(UVector *fNameList, UErrorCode& sta
for ( int32_t i = 0 ; i < fNameList->size() ; i++ ) {
UnicodeString* this_region_name = (UnicodeString *)fNameList->elementAt(i);
UnicodeString* new_region_name = new UnicodeString(*this_region_name);
- fRegionNames->addElement((void *)new_region_name,status);
+ fRegionNames->addElementX((void *)new_region_name,status);
}
}
else {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/region_impl.h b/Build/source/libs/icu/icu-src/source/i18n/region_impl.h
index 5e5a64529ad..62acaa4511b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/region_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/region_impl.h
@@ -29,10 +29,10 @@ public:
RegionNameEnumeration(UVector *fNameList, UErrorCode& status);
virtual ~RegionNameEnumeration();
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
- virtual const UnicodeString* snext(UErrorCode& status);
- virtual void reset(UErrorCode& status);
- virtual int32_t count(UErrorCode& status) const;
+ virtual UClassID getDynamicClassID(void) const override;
+ virtual const UnicodeString* snext(UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
+ virtual int32_t count(UErrorCode& status) const override;
private:
int32_t pos;
UVector *fRegionNames;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
index b4d4e646b04..6ef51607986 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
@@ -95,7 +95,7 @@ public:
const UnicodeString emptyString;
- // Mappping from source to target styles for alias fallback.
+ // Mapping from source to target styles for alias fallback.
int32_t fallBackCache[UDAT_STYLE_COUNT];
void adoptCombinedDateAndTime(SimpleFormatter *fmtToAdopt) {
@@ -588,7 +588,7 @@ struct RelDateTimeFmtDataSink : public ResourceSink {
}
virtual void put(const char *key, ResourceValue &value,
- UBool /*noFallback*/, UErrorCode &errorCode) {
+ UBool /*noFallback*/, UErrorCode &errorCode) override {
// Main entry point to sink
ResourceTable table = value.getTable(errorCode);
if (U_FAILURE(errorCode)) { return; }
@@ -1126,7 +1126,7 @@ void RelativeDateTimeFormatter::formatRelativeImpl(
// leaves some holes (even for data that is currently available, such as quarter).
// When the new CLDR data is available, update the data storage accordingly,
// rewrite this to use it directly, and rewrite the old format method to call this
- // new one; that is covered by http://bugs.icu-project.org/trac/ticket/12171.
+ // new one; that is covered by https://unicode-org.atlassian.net/browse/ICU-12171.
UDateDirection direction = UDAT_DIRECTION_COUNT;
if (offset > -2.1 && offset < 2.1) {
// Allow a 1% epsilon, so offsets in -1.01..-0.99 map to LAST
diff --git a/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.cpp
index c8ffd046460..5fdef1c0d67 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.cpp
@@ -135,7 +135,7 @@ RelativeDateFormat* RelativeDateFormat::clone() const {
return new RelativeDateFormat(*this);
}
-UBool RelativeDateFormat::operator==(const Format& other) const {
+bool RelativeDateFormat::operator==(const Format& other) const {
if(DateFormat::operator==(other)) {
// The DateFormat::operator== check for fCapitalizationContext equality above
// is sufficient to check equality of all derived context-related data.
@@ -146,7 +146,7 @@ UBool RelativeDateFormat::operator==(const Format& other) const {
fTimePattern==that->fTimePattern &&
fLocale==that->fLocale );
}
- return FALSE;
+ return false;
}
static const UChar APOSTROPHE = (UChar)0x0027;
@@ -334,7 +334,7 @@ UDate
RelativeDateFormat::parse( const UnicodeString& text,
ParsePosition& pos) const {
// redefined here because the other parse() function hides this function's
- // cunterpart on DateFormat
+ // counterpart on DateFormat
return DateFormat::parse(text, pos);
}
@@ -485,7 +485,7 @@ struct RelDateFmtDataSink : public ResourceSink {
virtual ~RelDateFmtDataSink();
virtual void put(const char *key, ResourceValue &value,
- UBool /*noFallback*/, UErrorCode &errorCode) {
+ UBool /*noFallback*/, UErrorCode &errorCode) override {
ResourceTable relDayTable = value.getTable(errorCode);
int32_t n = 0;
int32_t len = 0;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.h b/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.h
index ff48d3b5c48..98b333a02be 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.h
@@ -71,7 +71,7 @@ public:
* @return A copy of the object.
* @internal ICU 3.8
*/
- virtual RelativeDateFormat* clone() const;
+ virtual RelativeDateFormat* clone() const override;
/**
* Return true if the given Format objects are semantically equal. Objects
@@ -80,7 +80,7 @@ public:
* @return true if the given Format objects are semantically equal.
* @internal ICU 3.8
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
using DateFormat::format;
@@ -103,7 +103,7 @@ public:
*/
virtual UnicodeString& format( Calendar& cal,
UnicodeString& appendTo,
- FieldPosition& pos) const;
+ FieldPosition& pos) const override;
/**
* Format an object to produce a string. This method handles Formattable
@@ -122,7 +122,7 @@ public:
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPosition& pos,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
@@ -146,7 +146,7 @@ public:
*/
virtual void parse( const UnicodeString& text,
Calendar& cal,
- ParsePosition& pos) const;
+ ParsePosition& pos) const override;
/**
* Parse a date/time string starting at the given parse position. For
@@ -187,7 +187,7 @@ public:
* @internal ICU 3.8
*/
virtual UDate parse( const UnicodeString& text,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Return a single pattern string generated by combining the patterns for the
@@ -245,7 +245,7 @@ public:
* updated with any new status from the function.
* @internal ICU 53
*/
- virtual void setContext(UDisplayContext value, UErrorCode& status);
+ virtual void setContext(UDisplayContext value, UErrorCode& status) override;
private:
SimpleDateFormat *fDateTimeFormatter;
@@ -327,7 +327,7 @@ public:
* other classes have different class IDs.
* @internal ICU 3.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp b/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
index 8e496329ad3..7d6eaeed8bb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
@@ -719,7 +719,7 @@ UBool RegexMatcher::find(UErrorCode &status) {
if (findProgressInterrupt(startPos, status))
return FALSE;
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
case START_START:
// Matches are only possible at the start of the input string
@@ -767,7 +767,7 @@ UBool RegexMatcher::find(UErrorCode &status) {
return FALSE;
}
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
case START_STRING:
case START_CHAR:
@@ -799,7 +799,7 @@ UBool RegexMatcher::find(UErrorCode &status) {
return FALSE;
}
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
case START_LINE:
{
@@ -879,10 +879,15 @@ UBool RegexMatcher::find(UErrorCode &status) {
}
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_ASSERT;
+ // Unknown value in fPattern->fStartType, should be from StartOfMatch enum. But
+ // we have reports of this in production code, don't use UPRV_UNREACHABLE_EXIT.
+ // See ICU-21669.
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return FALSE;
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
@@ -993,7 +998,7 @@ UBool RegexMatcher::findUsingChunk(UErrorCode &status) {
if (findProgressInterrupt(startPos, status))
return FALSE;
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
case START_START:
// Matches are only possible at the start of the input string
@@ -1035,7 +1040,7 @@ UBool RegexMatcher::findUsingChunk(UErrorCode &status) {
return FALSE;
}
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
case START_STRING:
case START_CHAR:
@@ -1064,7 +1069,7 @@ UBool RegexMatcher::findUsingChunk(UErrorCode &status) {
return FALSE;
}
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
case START_LINE:
{
@@ -1135,10 +1140,15 @@ UBool RegexMatcher::findUsingChunk(UErrorCode &status) {
}
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_ASSERT;
+ // Unknown value in fPattern->fStartType, should be from StartOfMatch enum. But
+ // we have reports of this in production code, don't use UPRV_UNREACHABLE_EXIT.
+ // See ICU-21669.
+ status = U_INTERNAL_PROGRAM_ERROR;
+ return FALSE;
}
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
@@ -2005,7 +2015,7 @@ static UText *utext_extract_replace(UText *src, UText *dest, int64_t start, int6
return dest;
}
- // Caller did not provide a prexisting UText.
+ // Caller did not provide a preexisting UText.
// Open a new one, and have it adopt the text buffer storage.
if (U_FAILURE(*status)) {
return NULL;
@@ -3717,7 +3727,7 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
}
if (success && inputItr.inExpansion()) {
- // We otained a match by consuming part of a string obtained from
+ // We obtained a match by consuming part of a string obtained from
// case-folding a single code point of the input text.
// This does not count as an overall match.
success = FALSE;
@@ -3913,7 +3923,7 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
// First time through loop.
lbStartIdx = fp->fInputIdx - minML;
if (lbStartIdx > 0) {
- // move index to a code point boudary, if it's not on one already.
+ // move index to a code point boundary, if it's not on one already.
UTEXT_SETNATIVEINDEX(fInputText, lbStartIdx);
lbStartIdx = UTEXT_GETNATIVEINDEX(fInputText);
}
@@ -3962,7 +3972,7 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
break;
}
- // Look-behind match is good. Restore the orignal input string region,
+ // Look-behind match is good. Restore the original input string region,
// which had been truncated to pin the end of the lookbehind match to the
// position being looked-behind.
fActiveStart = fData[opValue+2];
@@ -3999,7 +4009,7 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
// First time through loop.
lbStartIdx = fp->fInputIdx - minML;
if (lbStartIdx > 0) {
- // move index to a code point boudary, if it's not on one already.
+ // move index to a code point boundary, if it's not on one already.
UTEXT_SETNATIVEINDEX(fInputText, lbStartIdx);
lbStartIdx = UTEXT_GETNATIVEINDEX(fInputText);
}
@@ -4051,7 +4061,7 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
// Look-behind expression matched, which means look-behind test as
// a whole Fails
- // Restore the orignal input string length, which had been truncated
+ // Restore the original input string length, which had been truncated
// inorder to pin the end of the lookbehind match
// to the position being looked-behind.
fActiveStart = fData[opValue+2];
@@ -4234,7 +4244,11 @@ void RegexMatcher::MatchAt(int64_t startIdx, UBool toEnd, UErrorCode &status) {
default:
// Trouble. The compiled pattern contains an entry with an
// unrecognized type tag.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_ASSERT;
+ // Unknown opcode type in opType = URX_TYPE(pat[fp->fPatIdx]). But we have
+ // reports of this in production code, don't use UPRV_UNREACHABLE_EXIT.
+ // See ICU-21669.
+ status = U_INTERNAL_PROGRAM_ERROR;
}
if (U_FAILURE(status)) {
@@ -5187,7 +5201,7 @@ void RegexMatcher::MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &statu
}
if (success && inputItr.inExpansion()) {
- // We otained a match by consuming part of a string obtained from
+ // We obtained a match by consuming part of a string obtained from
// case-folding a single code point of the input text.
// This does not count as an overall match.
success = FALSE;
@@ -5409,7 +5423,7 @@ void RegexMatcher::MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &statu
break;
}
- // Look-behind match is good. Restore the orignal input string region,
+ // Look-behind match is good. Restore the original input string region,
// which had been truncated to pin the end of the lookbehind match to the
// position being looked-behind.
fActiveStart = fData[opValue+2];
@@ -5489,7 +5503,7 @@ void RegexMatcher::MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &statu
// Look-behind expression matched, which means look-behind test as
// a whole Fails
- // Restore the orignal input string length, which had been truncated
+ // Restore the original input string length, which had been truncated
// inorder to pin the end of the lookbehind match
// to the position being looked-behind.
fActiveStart = fData[opValue+2];
@@ -5672,7 +5686,11 @@ void RegexMatcher::MatchChunkAt(int32_t startIdx, UBool toEnd, UErrorCode &statu
default:
// Trouble. The compiled pattern contains an entry with an
// unrecognized type tag.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_ASSERT;
+ // Unknown opcode type in opType = URX_TYPE(pat[fp->fPatIdx]). But we have
+ // reports of this in production code, don't use UPRV_UNREACHABLE_EXIT.
+ // See ICU-21669.
+ status = U_INTERNAL_PROGRAM_ERROR;
}
if (U_FAILURE(status)) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/remtrans.h b/Build/source/libs/icu/icu-src/source/i18n/remtrans.h
index 13de01594a3..398cc5177cd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/remtrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/remtrans.h
@@ -47,7 +47,7 @@ public:
* Transliterator API.
* @return A copy of the object.
*/
- virtual RemoveTransliterator* clone() const;
+ virtual RemoveTransliterator* clone() const override;
/**
* Implements {@link Transliterator#handleTransliterate}.
@@ -59,12 +59,12 @@ public:
* pos.contextLimit. Otherwise, assume the text is complete.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp b/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
index b3028e04f7a..8c94948d29a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
@@ -291,13 +291,13 @@ RegexPattern *RegexPattern::clone() const {
// characters can still be considered different.
//
//--------------------------------------------------------------------------
-UBool RegexPattern::operator ==(const RegexPattern &other) const {
+bool RegexPattern::operator ==(const RegexPattern &other) const {
if (this->fFlags == other.fFlags && this->fDeferredStatus == other.fDeferredStatus) {
if (this->fPatternString != NULL && other.fPatternString != NULL) {
return *(this->fPatternString) == *(other.fPatternString);
} else if (this->fPattern == NULL) {
if (other.fPattern == NULL) {
- return TRUE;
+ return true;
}
} else if (other.fPattern != NULL) {
UTEXT_SETNATIVEINDEX(this->fPattern, 0);
@@ -305,7 +305,7 @@ UBool RegexPattern::operator ==(const RegexPattern &other) const {
return utext_equals(this->fPattern, other.fPattern);
}
}
- return FALSE;
+ return false;
}
//---------------------------------------------------------------------
diff --git a/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp b/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
index 917482d65bb..5e5cc3db626 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
@@ -66,8 +66,8 @@ public:
virtual ~FixedSortKeyByteSink();
private:
- virtual void AppendBeyondCapacity(const char *bytes, int32_t n, int32_t length);
- virtual UBool Resize(int32_t appendCapacity, int32_t length);
+ virtual void AppendBeyondCapacity(const char *bytes, int32_t n, int32_t length) override;
+ virtual UBool Resize(int32_t appendCapacity, int32_t length) override;
};
FixedSortKeyByteSink::~FixedSortKeyByteSink() {}
@@ -98,8 +98,8 @@ public:
virtual ~CollationKeyByteSink();
private:
- virtual void AppendBeyondCapacity(const char *bytes, int32_t n, int32_t length);
- virtual UBool Resize(int32_t appendCapacity, int32_t length);
+ virtual void AppendBeyondCapacity(const char *bytes, int32_t n, int32_t length) override;
+ virtual UBool Resize(int32_t appendCapacity, int32_t length) override;
CollationKey &key_;
};
@@ -239,21 +239,21 @@ RuleBasedCollator &RuleBasedCollator::operator=(const RuleBasedCollator &other)
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedCollator)
-UBool
+bool
RuleBasedCollator::operator==(const Collator& other) const {
- if(this == &other) { return TRUE; }
- if(!Collator::operator==(other)) { return FALSE; }
+ if(this == &other) { return true; }
+ if(!Collator::operator==(other)) { return false; }
const RuleBasedCollator &o = static_cast<const RuleBasedCollator &>(other);
- if(*settings != *o.settings) { return FALSE; }
- if(data == o.data) { return TRUE; }
+ if(*settings != *o.settings) { return false; }
+ if(data == o.data) { return true; }
UBool thisIsRoot = data->base == NULL;
UBool otherIsRoot = o.data->base == NULL;
U_ASSERT(!thisIsRoot || !otherIsRoot); // otherwise their data pointers should be ==
- if(thisIsRoot != otherIsRoot) { return FALSE; }
+ if(thisIsRoot != otherIsRoot) { return false; }
if((thisIsRoot || !tailoring->rules.isEmpty()) &&
(otherIsRoot || !o.tailoring->rules.isEmpty())) {
// Shortcut: If both collators have valid rule strings, then compare those.
- if(tailoring->rules == o.tailoring->rules) { return TRUE; }
+ if(tailoring->rules == o.tailoring->rules) { return true; }
}
// Different rule strings can result in the same or equivalent tailoring.
// The rule strings are optional in ICU resource bundles, although included by default.
@@ -261,14 +261,14 @@ RuleBasedCollator::operator==(const Collator& other) const {
UErrorCode errorCode = U_ZERO_ERROR;
LocalPointer<UnicodeSet> thisTailored(getTailoredSet(errorCode));
LocalPointer<UnicodeSet> otherTailored(o.getTailoredSet(errorCode));
- if(U_FAILURE(errorCode)) { return FALSE; }
- if(*thisTailored != *otherTailored) { return FALSE; }
+ if(U_FAILURE(errorCode)) { return false; }
+ if(*thisTailored != *otherTailored) { return false; }
// For completeness, we should compare all of the mappings;
// or we should create a list of strings, sort it with one collator,
// and check if both collators compare adjacent strings the same
// (order & strength, down to quaternary); or similar.
// Testing equality of collators seems unusual.
- return TRUE;
+ return true;
}
int32_t
@@ -830,7 +830,7 @@ class UTF16NFDIterator : public NFDIterator {
public:
UTF16NFDIterator(const UChar *text, const UChar *textLimit) : s(text), limit(textLimit) {}
protected:
- virtual UChar32 nextRawCodePoint() {
+ virtual UChar32 nextRawCodePoint() override {
if(s == limit) { return U_SENTINEL; }
UChar32 c = *s++;
if(limit == NULL && c == 0) {
@@ -882,7 +882,7 @@ public:
UTF8NFDIterator(const uint8_t *text, int32_t textLength)
: s(text), pos(0), length(textLength) {}
protected:
- virtual UChar32 nextRawCodePoint() {
+ virtual UChar32 nextRawCodePoint() override {
if(pos == length || (s[pos] == 0 && length < 0)) { return U_SENTINEL; }
UChar32 c;
U8_NEXT_OR_FFFD(s, pos, length, c);
@@ -899,7 +899,7 @@ public:
FCDUTF8NFDIterator(const CollationData *data, const uint8_t *text, int32_t textLength)
: u8ci(data, FALSE, text, 0, textLength) {}
protected:
- virtual UChar32 nextRawCodePoint() {
+ virtual UChar32 nextRawCodePoint() override {
UErrorCode errorCode = U_ZERO_ERROR;
return u8ci.nextCodePoint(errorCode);
}
@@ -911,7 +911,7 @@ class UIterNFDIterator : public NFDIterator {
public:
UIterNFDIterator(UCharIterator &it) : iter(it) {}
protected:
- virtual UChar32 nextRawCodePoint() {
+ virtual UChar32 nextRawCodePoint() override {
return uiter_next32(&iter);
}
private:
@@ -923,7 +923,7 @@ public:
FCDUIterNFDIterator(const CollationData *data, UCharIterator &it, int32_t startIndex)
: uici(data, FALSE, it, startIndex) {}
protected:
- virtual UChar32 nextRawCodePoint() {
+ virtual UChar32 nextRawCodePoint() override {
UErrorCode errorCode = U_ZERO_ERROR;
return uici.nextCodePoint(errorCode);
}
@@ -1398,7 +1398,7 @@ public:
levelCapacity = sink.GetRemainingCapacity();
}
virtual ~PartLevelCallback() {}
- virtual UBool needToWrite(Collation::Level l) {
+ virtual UBool needToWrite(Collation::Level l) override {
if(!sink.Overflowed()) {
// Remember a level that will be at least partially written.
level = l;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp b/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
index 18a3b263b71..6a1db8c01c3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
@@ -44,13 +44,13 @@ ScriptSet & ScriptSet::operator =(const ScriptSet &other) {
return *this;
}
-UBool ScriptSet::operator == (const ScriptSet &other) const {
+bool ScriptSet::operator == (const ScriptSet &other) const {
for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
if (bits[i] != other.bits[i]) {
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
UBool ScriptSet::test(UScriptCode script, UErrorCode &status) const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/scriptset.h b/Build/source/libs/icu/icu-src/source/i18n/scriptset.h
index a41ab737a6d..51980ab7b3e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/scriptset.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/scriptset.h
@@ -41,8 +41,8 @@ class U_I18N_API ScriptSet: public UMemory {
ScriptSet(const ScriptSet &other);
~ScriptSet();
- UBool operator == (const ScriptSet &other) const;
- UBool operator != (const ScriptSet &other) const {return !(*this == other);}
+ bool operator == (const ScriptSet &other) const;
+ bool operator != (const ScriptSet &other) const {return !(*this == other);}
ScriptSet & operator = (const ScriptSet &other);
UBool test(UScriptCode script, UErrorCode &status) const;
@@ -51,7 +51,7 @@ class U_I18N_API ScriptSet: public UMemory {
ScriptSet &reset(UScriptCode script, UErrorCode &status);
ScriptSet &intersect(const ScriptSet &other);
ScriptSet &intersect(UScriptCode script, UErrorCode &status);
- UBool intersects(const ScriptSet &other) const; // Sets contain at least one script in commmon.
+ UBool intersects(const ScriptSet &other) const; // Sets contain at least one script in common.
UBool contains(const ScriptSet &other) const; // All set bits in other are also set in this.
ScriptSet &setAll();
diff --git a/Build/source/libs/icu/icu-src/source/i18n/search.cpp b/Build/source/libs/icu/icu-src/source/i18n/search.cpp
index f944b68455a..9e559bcc71f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/search.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/search.cpp
@@ -178,10 +178,10 @@ const UnicodeString & SearchIterator::getText(void) const
// operator overloading ----------------------------------------------
-UBool SearchIterator::operator==(const SearchIterator &that) const
+bool SearchIterator::operator==(const SearchIterator &that) const
{
if (this == &that) {
- return TRUE;
+ return true;
}
return (m_breakiterator_ == that.m_breakiterator_ &&
m_search_->isCanonicalMatch == that.m_search_->isCanonicalMatch &&
diff --git a/Build/source/libs/icu/icu-src/source/i18n/selfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/selfmt.cpp
index 47e53d75dec..bb18e84ef65 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/selfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/selfmt.cpp
@@ -164,19 +164,19 @@ SelectFormat::operator=(const SelectFormat& other) {
return *this;
}
-UBool
+bool
SelectFormat::operator==(const Format& other) const {
if (this == &other) {
- return TRUE;
+ return true;
}
if (!Format::operator==(other)) {
- return FALSE;
+ return false;
}
const SelectFormat& o = (const SelectFormat&)other;
return msgPattern == o.msgPattern;
}
-UBool
+bool
SelectFormat::operator!=(const Format& other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/simpletz.cpp b/Build/source/libs/icu/icu-src/source/i18n/simpletz.cpp
index 7972e2bb040..d9b0cd8e1e6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/simpletz.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/simpletz.cpp
@@ -42,7 +42,7 @@ U_NAMESPACE_BEGIN
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleTimeZone)
// Use only for decodeStartRule() and decodeEndRule() where the year is not
-// available. Set February to 29 days to accomodate rules with that date
+// available. Set February to 29 days to accommodate rules with that date
// and day-of-week-on-or-before-that-date mode (DOW_LE_DOM_MODE).
// The compareToRule() method adjusts to February 28 in non-leap years.
//
@@ -231,7 +231,7 @@ SimpleTimeZone::operator=(const SimpleTimeZone &right)
// -------------------------------------
-UBool
+bool
SimpleTimeZone::operator==(const TimeZone& that) const
{
return ((this == &that) ||
@@ -289,7 +289,7 @@ SimpleTimeZone::setStartYear(int32_t year)
* month, regardless of what day of the week it is (e.g., (-2, 0) is the
* next-to-last day of the month).
* <li>If dayOfWeek is negative and dayOfWeekInMonth is positive, they specify the
- * first specified day of the week on or after the specfied day of the month.
+ * first specified day of the week on or after the specified day of the month.
* (e.g., (15, -SUNDAY) is the first Sunday after the 15th of the month
* [or the 15th itself if the 15th is a Sunday].)
* <li>If dayOfWeek and DayOfWeekInMonth are both negative, they specify the
@@ -509,8 +509,10 @@ SimpleTimeZone::getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
}
void
-SimpleTimeZone::getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
- int32_t& rawOffsetGMT, int32_t& savingsDST, UErrorCode& status) const {
+SimpleTimeZone::getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt, int32_t& rawOffsetGMT,
+ int32_t& savingsDST, UErrorCode& status) const
+{
if (U_FAILURE(status)) {
return;
}
@@ -583,7 +585,7 @@ SimpleTimeZone::compareToRule(int8_t month, int8_t monthLen, int8_t prevMonthLen
dayOfWeek = (int8_t)(1 + (dayOfWeek % 7)); // dayOfWeek is one-based
if (dayOfMonth > monthLen) {
dayOfMonth = 1;
- /* When incrementing the month, it is desirible to overflow
+ /* When incrementing the month, it is desirable to overflow
* from DECEMBER to DECEMBER+1, since we use the result to
* compare against a real month. Wraparound of the value
* leads to bug 4173604. */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
index 4717899cf38..91748d82f9f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
@@ -64,6 +64,7 @@
#include "uassert.h"
#include "cmemory.h"
#include "umutex.h"
+#include "mutex.h"
#include <float.h>
#include "smpdtfst.h"
#include "sharednumberformat.h"
@@ -227,10 +228,17 @@ static const int32_t gFieldRangeBias[] = {
};
// When calendar uses hebr numbering (i.e. he@calendar=hebrew),
-// offset the years within the current millenium down to 1-999
+// offset the years within the current millennium down to 1-999
static const int32_t HEBREW_CAL_CUR_MILLENIUM_START_YEAR = 5000;
static const int32_t HEBREW_CAL_CUR_MILLENIUM_END_YEAR = 6000;
+/**
+ * Maximum range for detecting daylight offset of a time zone when parsed time zone
+ * string indicates it's daylight saving time, but the detected time zone does not
+ * observe daylight saving time at the parsed date.
+ */
+static const double MAX_DAYLIGHT_DETECTION_RANGE = 30*365*24*60*60*1000.0;
+
static UMutex LOCK;
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleDateFormat)
@@ -587,11 +595,29 @@ SimpleDateFormat& SimpleDateFormat::operator=(const SimpleDateFormat& other)
fLocale = other.fLocale;
// TimeZoneFormat can now be set independently via setter.
- // If it is NULL, it will be lazily initialized from locale
+ // If it is NULL, it will be lazily initialized from locale.
delete fTimeZoneFormat;
- fTimeZoneFormat = NULL;
- if (other.fTimeZoneFormat) {
- fTimeZoneFormat = new TimeZoneFormat(*other.fTimeZoneFormat);
+ fTimeZoneFormat = nullptr;
+ TimeZoneFormat *otherTZFormat;
+ {
+ // Synchronization is required here, when accessing other.fTimeZoneFormat,
+ // because another thread may be concurrently executing other.tzFormat(),
+ // a logically const function that lazily creates other.fTimeZoneFormat.
+ //
+ // Without synchronization, reordered memory writes could allow us
+ // to see a non-null fTimeZoneFormat before the object itself was
+ // fully initialized. In case of a race, it doesn't matter whether
+ // we see a null or a fully initialized other.fTimeZoneFormat,
+ // only that we avoid seeing a partially initialized object.
+ //
+ // Once initialized, no const function can modify fTimeZoneFormat,
+ // meaning that once we have safely grabbed the other.fTimeZoneFormat
+ // pointer, continued synchronization is not required to use it.
+ Mutex m(&LOCK);
+ otherTZFormat = other.fTimeZoneFormat;
+ }
+ if (otherTZFormat) {
+ fTimeZoneFormat = new TimeZoneFormat(*otherTZFormat);
}
#if !UCONFIG_NO_BREAK_ITERATION
@@ -632,7 +658,7 @@ SimpleDateFormat::clone() const
//----------------------------------------------------------------------
-UBool
+bool
SimpleDateFormat::operator==(const Format& other) const
{
if (DateFormat::operator==(other)) {
@@ -647,7 +673,7 @@ SimpleDateFormat::operator==(const Format& other) const
fHaveDefaultCentury == that->fHaveDefaultCentury &&
fDefaultCenturyStart == that->fDefaultCenturyStart);
}
- return FALSE;
+ return false;
}
//----------------------------------------------------------------------
@@ -1848,7 +1874,7 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo,
}
}
else {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
appendTo += zoneString;
@@ -1856,7 +1882,10 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo,
break;
case UDAT_QUARTER_FIELD:
- if (count >= 4)
+ if (count >= 5)
+ _appendSymbol(appendTo, value/3, fSymbols->fNarrowQuarters,
+ fSymbols->fNarrowQuartersCount);
+ else if (count == 4)
_appendSymbol(appendTo, value/3, fSymbols->fQuarters,
fSymbols->fQuartersCount);
else if (count == 3)
@@ -1867,7 +1896,10 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo,
break;
case UDAT_STANDALONE_QUARTER_FIELD:
- if (count >= 4)
+ if (count >= 5)
+ _appendSymbol(appendTo, value/3, fSymbols->fStandaloneNarrowQuarters,
+ fSymbols->fStandaloneNarrowQuartersCount);
+ else if (count == 4)
_appendSymbol(appendTo, value/3, fSymbols->fStandaloneQuarters,
fSymbols->fStandaloneQuartersCount);
else if (count == 3)
@@ -2185,7 +2217,7 @@ SimpleDateFormat::zeroPaddingNumber(
//----------------------------------------------------------------------
/**
- * Return true if the given format character, occuring count
+ * Return true if the given format character, occurring count
* times, represents a numeric field.
*/
UBool SimpleDateFormat::isNumeric(UChar formatChar, int32_t count) {
@@ -2554,10 +2586,10 @@ SimpleDateFormat::parse(const UnicodeString& text, Calendar& cal, ParsePosition&
if (btz != NULL) {
if (tzTimeType == UTZFMT_TIME_TYPE_STANDARD) {
btz->getOffsetFromLocal(localMillis,
- BasicTimeZone::kStandard, BasicTimeZone::kStandard, raw, dst, status);
+ UCAL_TZ_LOCAL_STANDARD_FORMER, UCAL_TZ_LOCAL_STANDARD_LATTER, raw, dst, status);
} else {
btz->getOffsetFromLocal(localMillis,
- BasicTimeZone::kDaylight, BasicTimeZone::kDaylight, raw, dst, status);
+ UCAL_TZ_LOCAL_DAYLIGHT_FORMER, UCAL_TZ_LOCAL_DAYLIGHT_LATTER, raw, dst, status);
}
} else {
// No good way to resolve ambiguous time at transition,
@@ -2575,51 +2607,47 @@ SimpleDateFormat::parse(const UnicodeString& text, Calendar& cal, ParsePosition&
} else { // tztype == TZTYPE_DST
if (dst == 0) {
if (btz != NULL) {
- UDate time = localMillis + raw;
- // We use the nearest daylight saving time rule.
- TimeZoneTransition beforeTrs, afterTrs;
- UDate beforeT = time, afterT = time;
- int32_t beforeSav = 0, afterSav = 0;
- UBool beforeTrsAvail, afterTrsAvail;
-
- // Search for DST rule before or on the time
- while (TRUE) {
- beforeTrsAvail = btz->getPreviousTransition(beforeT, TRUE, beforeTrs);
- if (!beforeTrsAvail) {
+ // This implementation resolves daylight saving time offset
+ // closest rule after the given time.
+ UDate baseTime = localMillis + raw;
+ UDate time = baseTime;
+ UDate limit = baseTime + MAX_DAYLIGHT_DETECTION_RANGE;
+ TimeZoneTransition trs;
+ UBool trsAvail;
+
+ // Search for DST rule after the given time
+ while (time < limit) {
+ trsAvail = btz->getNextTransition(time, FALSE, trs);
+ if (!trsAvail) {
break;
}
- beforeT = beforeTrs.getTime() - 1;
- beforeSav = beforeTrs.getFrom()->getDSTSavings();
- if (beforeSav != 0) {
+ resolvedSavings = trs.getTo()->getDSTSavings();
+ if (resolvedSavings != 0) {
break;
}
+ time = trs.getTime();
}
- // Search for DST rule after the time
- while (TRUE) {
- afterTrsAvail = btz->getNextTransition(afterT, FALSE, afterTrs);
- if (!afterTrsAvail) {
- break;
- }
- afterT = afterTrs.getTime();
- afterSav = afterTrs.getTo()->getDSTSavings();
- if (afterSav != 0) {
- break;
+ if (resolvedSavings == 0) {
+ // If no DST rule after the given time was found, search for
+ // DST rule before.
+ time = baseTime;
+ limit = baseTime - MAX_DAYLIGHT_DETECTION_RANGE;
+ while (time > limit) {
+ trsAvail = btz->getPreviousTransition(time, TRUE, trs);
+ if (!trsAvail) {
+ break;
+ }
+ resolvedSavings = trs.getFrom()->getDSTSavings();
+ if (resolvedSavings != 0) {
+ break;
+ }
+ time = trs.getTime() - 1;
}
- }
- if (beforeTrsAvail && afterTrsAvail) {
- if (time - beforeT > afterT - time) {
- resolvedSavings = afterSav;
- } else {
- resolvedSavings = beforeSav;
+ if (resolvedSavings == 0) {
+ resolvedSavings = btz->getDSTSavings();
}
- } else if (beforeTrsAvail && beforeSav != 0) {
- resolvedSavings = beforeSav;
- } else if (afterTrsAvail && afterSav != 0) {
- resolvedSavings = afterSav;
- } else {
- resolvedSavings = btz->getDSTSavings();
}
} else {
resolvedSavings = tz.getDSTSavings();
@@ -2828,7 +2856,7 @@ UBool SimpleDateFormat::matchLiterals(const UnicodeString &pattern,
continue; // Do not update p.
}
}
- // hack around oldleniency being a bit of a catch-all bucket and we're just adding support specifically for paritial matches
+ // hack around oldleniency being a bit of a catch-all bucket and we're just adding support specifically for partial matches
if(partialMatchLenient && oldLeniency) {
break;
}
@@ -3449,7 +3477,7 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC
return pos.getIndex();
} else {
// count >= 3 // i.e., QQQ or QQQQ
- // Want to be able to parse both short and long forms.
+ // Want to be able to parse short, long, and narrow forms.
// Try count == 4 first:
int32_t newStart = 0;
@@ -3463,6 +3491,11 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC
fSymbols->fShortQuarters, fSymbols->fShortQuartersCount, cal)) > 0)
return newStart;
}
+ if(getBooleanAttribute(UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH, status) || count == 5) {
+ if ((newStart = matchQuarterString(text, start, UCAL_MONTH,
+ fSymbols->fNarrowQuarters, fSymbols->fNarrowQuartersCount, cal)) > 0)
+ return newStart;
+ }
if (!getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status))
return newStart;
// else we allowing parsing as number, below
@@ -3495,6 +3528,11 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC
fSymbols->fStandaloneShortQuarters, fSymbols->fStandaloneShortQuartersCount, cal)) > 0)
return newStart;
}
+ if(getBooleanAttribute(UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH, status) || count == 5) {
+ if ((newStart = matchQuarterString(text, start, UCAL_MONTH,
+ fSymbols->fStandaloneNarrowQuarters, fSymbols->fStandaloneNarrowQuartersCount, cal)) > 0)
+ return newStart;
+ }
if (!getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status))
return newStart;
// else we allowing parsing as number, below
@@ -4305,19 +4343,10 @@ SimpleDateFormat::skipUWhiteSpace(const UnicodeString& text, int32_t pos) const
// Lazy TimeZoneFormat instantiation, semantically const.
TimeZoneFormat *
SimpleDateFormat::tzFormat(UErrorCode &status) const {
- if (fTimeZoneFormat == NULL) {
- umtx_lock(&LOCK);
- {
- if (fTimeZoneFormat == NULL) {
- TimeZoneFormat *tzfmt = TimeZoneFormat::createInstance(fLocale, status);
- if (U_FAILURE(status)) {
- return NULL;
- }
-
- const_cast<SimpleDateFormat *>(this)->fTimeZoneFormat = tzfmt;
- }
- }
- umtx_unlock(&LOCK);
+ Mutex m(&LOCK);
+ if (fTimeZoneFormat == nullptr && U_SUCCESS(status)) {
+ const_cast<SimpleDateFormat *>(this)->fTimeZoneFormat =
+ TimeZoneFormat::createInstance(fLocale, status);
}
return fTimeZoneFormat;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/sortkey.cpp b/Build/source/libs/icu/icu-src/source/i18n/sortkey.cpp
index 12289482ec0..441d15d4263 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/sortkey.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/sortkey.cpp
@@ -20,7 +20,7 @@
//
// 6/20/97 helena Java class name change.
// 6/23/97 helena Added comments to make code more readable.
-// 6/26/98 erm Canged to use byte arrays instead of UnicodeString
+// 6/26/98 erm Changed to use byte arrays instead of UnicodeString
// 7/31/98 erm hashCode: minimum inc should be 2 not 1,
// Cleaned up operator=
// 07/12/99 helena HPUX 11 CC port.
@@ -137,7 +137,7 @@ CollationKey::setToBogus()
return *this;
}
-UBool
+bool
CollationKey::operator==(const CollationKey& source) const
{
return getLength() == source.getLength() &&
diff --git a/Build/source/libs/icu/icu-src/source/i18n/standardplural.cpp b/Build/source/libs/icu/icu-src/source/i18n/standardplural.cpp
index 0391034b3e4..5a6069bf7dd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/standardplural.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/standardplural.cpp
@@ -23,7 +23,7 @@
U_NAMESPACE_BEGIN
static const char *gKeywords[StandardPlural::COUNT] = {
- "zero", "one", "two", "few", "many", "other"
+ "zero", "one", "two", "few", "many", "other", "=0", "=1"
};
const char *StandardPlural::getKeyword(Form p) {
@@ -60,21 +60,55 @@ int32_t StandardPlural::indexOrNegativeFromString(const char *keyword) {
return ZERO;
}
break;
+ case '=':
+ if (uprv_strcmp(keyword, "0") == 0) {
+ return EQ_0;
+ } else if (uprv_strcmp(keyword, "1") == 0) {
+ return EQ_1;
+ }
+ break;
+ // Also allow "0" and "1"
+ case '0':
+ if (*keyword == 0) {
+ return EQ_0;
+ }
+ break;
+ case '1':
+ if (*keyword == 0) {
+ return EQ_1;
+ }
+ break;
default:
break;
}
return -1;
}
-static const UChar gZero[] = { 0x7A, 0x65, 0x72, 0x6F };
-static const UChar gOne[] = { 0x6F, 0x6E, 0x65 };
-static const UChar gTwo[] = { 0x74, 0x77, 0x6F };
-static const UChar gFew[] = { 0x66, 0x65, 0x77 };
-static const UChar gMany[] = { 0x6D, 0x61, 0x6E, 0x79 };
-static const UChar gOther[] = { 0x6F, 0x74, 0x68, 0x65, 0x72 };
+static const UChar gZero[] = u"zero";
+static const UChar gOne[] = u"one";
+static const UChar gTwo[] = u"two";
+static const UChar gFew[] = u"few";
+static const UChar gMany[] = u"many";
+static const UChar gOther[] = u"other";
+static const UChar gEq0[] = u"=0";
+static const UChar gEq1[] = u"=1";
int32_t StandardPlural::indexOrNegativeFromString(const UnicodeString &keyword) {
switch (keyword.length()) {
+ case 1:
+ if (keyword.charAt(0) == '0') {
+ return EQ_0;
+ } else if (keyword.charAt(0) == '1') {
+ return EQ_1;
+ }
+ break;
+ case 2:
+ if (keyword.compare(gEq0, 2) == 0) {
+ return EQ_0;
+ } else if (keyword.compare(gEq1, 2) == 0) {
+ return EQ_1;
+ }
+ break;
case 3:
if (keyword.compare(gOne, 3) == 0) {
return ONE;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/standardplural.h b/Build/source/libs/icu/icu-src/source/i18n/standardplural.h
index 33e1d605f68..16593065c8a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/standardplural.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/standardplural.h
@@ -35,6 +35,8 @@ public:
FEW,
MANY,
OTHER,
+ EQ_0,
+ EQ_1,
COUNT
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/strmatch.h b/Build/source/libs/icu/icu-src/source/i18n/strmatch.h
index 4ee5cbd0887..6d2e392e654 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/strmatch.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/strmatch.h
@@ -78,21 +78,21 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
* Implement UnicodeFunctor
* @return a copy of the object.
*/
- virtual StringMatcher* clone() const;
+ virtual StringMatcher* clone() const override;
/**
* UnicodeFunctor API. Cast 'this' to a UnicodeMatcher* pointer
* and return the pointer.
* @return the UnicodeMatcher point.
*/
- virtual UnicodeMatcher* toMatcher() const;
+ virtual UnicodeMatcher* toMatcher() const override;
/**
* UnicodeFunctor API. Cast 'this' to a UnicodeReplacer* pointer
* and return the pointer.
* @return the UnicodeReplacer pointer.
*/
- virtual UnicodeReplacer* toReplacer() const;
+ virtual UnicodeReplacer* toReplacer() const override;
/**
* Implement UnicodeMatcher
@@ -119,7 +119,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
virtual UMatchDegree matches(const Replaceable& text,
int32_t& offset,
int32_t limit,
- UBool incremental);
+ UBool incremental) override;
/**
* Implement UnicodeMatcher
@@ -128,7 +128,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
* @return A reference to 'result'.
*/
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool escapeUnprintable = false) const;
+ UBool escapeUnprintable = false) const override;
/**
* Implement UnicodeMatcher
@@ -140,17 +140,17 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
* @return true if this matcher will match a character c,
* where c & 0xFF == v
*/
- virtual UBool matchesIndexValue(uint8_t v) const;
+ virtual UBool matchesIndexValue(uint8_t v) const override;
/**
* Implement UnicodeMatcher
*/
- virtual void addMatchSetTo(UnicodeSet& toUnionTo) const;
+ virtual void addMatchSetTo(UnicodeSet& toUnionTo) const override;
/**
* Implement UnicodeFunctor
*/
- virtual void setData(const TransliterationRuleData*);
+ virtual void setData(const TransliterationRuleData*) override;
/**
* Replace characters in 'text' from 'start' to 'limit' with the
@@ -172,7 +172,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
virtual int32_t replace(Replaceable& text,
int32_t start,
int32_t limit,
- int32_t& cursor);
+ int32_t& cursor) override;
/**
* Returns a string representation of this replacer. If the
@@ -188,7 +188,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
* @return a reference to 'result'.
*/
virtual UnicodeString& toReplacerPattern(UnicodeString& result,
- UBool escapeUnprintable) const;
+ UBool escapeUnprintable) const override;
/**
* Remove any match data. This must be called before performing a
@@ -199,7 +199,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -211,7 +211,7 @@ class StringMatcher : public UnicodeFunctor, public UnicodeMatcher, public Unico
* into the given set.
* @param toUnionTo the set into which to union the output characters
*/
- virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const;
+ virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const override;
private:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/strrepl.h b/Build/source/libs/icu/icu-src/source/i18n/strrepl.h
index 7f74d0d9450..8063626a333 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/strrepl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/strrepl.h
@@ -111,13 +111,13 @@ class StringReplacer : public UnicodeFunctor, public UnicodeReplacer {
/**
* Implement UnicodeFunctor
*/
- virtual StringReplacer* clone() const;
+ virtual StringReplacer* clone() const override;
/**
* UnicodeFunctor API. Cast 'this' to a UnicodeReplacer* pointer
* and return the pointer.
*/
- virtual UnicodeReplacer* toReplacer() const;
+ virtual UnicodeReplacer* toReplacer() const override;
/**
* UnicodeReplacer API
@@ -125,23 +125,23 @@ class StringReplacer : public UnicodeFunctor, public UnicodeReplacer {
virtual int32_t replace(Replaceable& text,
int32_t start,
int32_t limit,
- int32_t& cursor);
+ int32_t& cursor) override;
/**
* UnicodeReplacer API
*/
virtual UnicodeString& toReplacerPattern(UnicodeString& result,
- UBool escapeUnprintable) const;
+ UBool escapeUnprintable) const override;
/**
* Implement UnicodeReplacer
*/
- virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const;
+ virtual void addReplacementSetTo(UnicodeSet& toUnionTo) const override;
/**
* UnicodeFunctor API
*/
- virtual void setData(const TransliterationRuleData*);
+ virtual void setData(const TransliterationRuleData*) override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -151,7 +151,7 @@ class StringReplacer : public UnicodeFunctor, public UnicodeReplacer {
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/stsearch.cpp b/Build/source/libs/icu/icu-src/source/i18n/stsearch.cpp
index 3e6ed4648be..1bade8fbd11 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/stsearch.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/stsearch.cpp
@@ -184,7 +184,7 @@ StringSearch::clone() const {
// operator overloading ---------------------------------------------
StringSearch & StringSearch::operator=(const StringSearch &that)
{
- if ((*this) != that) {
+ if (this != &that) {
UErrorCode status = U_ZERO_ERROR;
m_text_ = that.m_text_;
m_breakiterator_ = that.m_breakiterator_;
@@ -205,17 +205,17 @@ StringSearch & StringSearch::operator=(const StringSearch &that)
return *this;
}
-UBool StringSearch::operator==(const SearchIterator &that) const
+bool StringSearch::operator==(const SearchIterator &that) const
{
if (this == &that) {
- return TRUE;
+ return true;
}
if (SearchIterator::operator ==(that)) {
StringSearch &thatsrch = (StringSearch &)that;
return (this->m_pattern_ == thatsrch.m_pattern_ &&
this->m_strsrch_->collator == thatsrch.m_strsrch_->collator);
}
- return FALSE;
+ return false;
}
// public get and set methods ----------------------------------------
@@ -335,7 +335,7 @@ int32_t StringSearch::handleNext(int32_t position, UErrorCode &status)
// the flipping direction issue has already been handled
// in next()
// for boundary check purposes. this will ensure that the
- // next match will not preceed the current offset
+ // next match will not precede the current offset
// note search->matchedIndex will always be set to something
// in the code
m_search_->matchedIndex = position - 1;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h b/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
index 5fec78d1466..ab6b6aff099 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
@@ -91,7 +91,7 @@ public:
* @return return a polymorphic copy of this calendar.
* @internal
*/
- virtual TaiwanCalendar* clone() const;
+ virtual TaiwanCalendar* clone() const override;
public:
/**
@@ -104,7 +104,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @internal
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -125,7 +125,7 @@ public:
* @return calendar type
* @internal
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
private:
TaiwanCalendar(); // default constructor not implemented
@@ -139,13 +139,13 @@ private:
* @return the extended year
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Subclasses may override this method to compute several fields
* specific to each calendar system.
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode& status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode& status) override;
/**
* Subclass API for defining limits of different types.
* @param field one of the field numbers
@@ -153,26 +153,26 @@ private:
* <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Returns true because the Taiwan Calendar does have a default century
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
/**
* Returns the date of the start of the default century
* @return start of century - in milliseconds since epoch, 1970
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* Returns the year in which the default century begins
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp b/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
index 78f538ccecd..8115a45e0ac 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
@@ -311,7 +311,7 @@ void U_CALLCONV initStaticTimeZones() {
// be valid even if we can't load the time zone UDataMemory.
ucln_i18n_registerCleanup(UCLN_I18N_TIMEZONE, timeZone_cleanup);
- // new can't fail below, as we use placement new into staticly allocated space.
+ // new can't fail below, as we use placement new into statically allocated space.
new(gRawGMT) SimpleTimeZone(0, UnicodeString(TRUE, GMT_ID, GMT_ID_LENGTH));
new(gRawUNKNOWN) SimpleTimeZone(0, UnicodeString(TRUE, UNKNOWN_ZONE_ID, UNKNOWN_ZONE_ID_LENGTH));
@@ -376,7 +376,7 @@ TimeZone::operator=(const TimeZone &right)
// -------------------------------------
-UBool
+bool
TimeZone::operator==(const TimeZone& that) const
{
return typeid(*this) == typeid(that) &&
@@ -445,7 +445,7 @@ TimeZone::createTimeZone(const UnicodeString& ID)
if (result == NULL) {
U_DEBUG_TZ_MSG(("failed to load time zone with id - falling to Etc/Unknown(GMT)"));
const TimeZone& unknown = getUnknown();
- // Unknown zone uses staticly allocated memory, so creation of it can never fail due to OOM.
+ // Unknown zone uses statically allocated memory, so creation of it can never fail due to OOM.
result = unknown.clone();
}
return result;
@@ -951,15 +951,15 @@ public:
virtual ~TZEnumeration();
- virtual StringEnumeration *clone() const {
+ virtual StringEnumeration *clone() const override {
return new TZEnumeration(*this);
}
- virtual int32_t count(UErrorCode& status) const {
+ virtual int32_t count(UErrorCode& status) const override {
return U_FAILURE(status) ? 0 : len;
}
- virtual const UnicodeString* snext(UErrorCode& status) {
+ virtual const UnicodeString* snext(UErrorCode& status) override {
if (U_SUCCESS(status) && map != NULL && pos < len) {
getID(map[pos], status);
++pos;
@@ -968,13 +968,13 @@ public:
return 0;
}
- virtual void reset(UErrorCode& /*status*/) {
+ virtual void reset(UErrorCode& /*status*/) override {
pos = 0;
}
public:
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
TZEnumeration::~TZEnumeration() {
@@ -995,21 +995,40 @@ TimeZone::createTimeZoneIDEnumeration(
}
StringEnumeration* U_EXPORT2
+TimeZone::createEnumeration(UErrorCode& status) {
+ return TZEnumeration::create(UCAL_ZONE_TYPE_ANY, NULL, NULL, status);
+}
+
+StringEnumeration* U_EXPORT2
+TimeZone::createEnumerationForRawOffset(int32_t rawOffset, UErrorCode& status) {
+ return TZEnumeration::create(UCAL_ZONE_TYPE_ANY, NULL, &rawOffset, status);
+}
+
+StringEnumeration* U_EXPORT2
+TimeZone::createEnumerationForRegion(const char* region, UErrorCode& status) {
+ return TZEnumeration::create(UCAL_ZONE_TYPE_ANY, region, NULL, status);
+}
+
+//
+// Next 3 methods are equivalent to above, but ignores UErrorCode.
+// These methods were deprecated in ICU 70.
+
+StringEnumeration* U_EXPORT2
TimeZone::createEnumeration() {
UErrorCode ec = U_ZERO_ERROR;
- return TZEnumeration::create(UCAL_ZONE_TYPE_ANY, NULL, NULL, ec);
+ return createEnumeration(ec);
}
StringEnumeration* U_EXPORT2
TimeZone::createEnumeration(int32_t rawOffset) {
UErrorCode ec = U_ZERO_ERROR;
- return TZEnumeration::create(UCAL_ZONE_TYPE_ANY, NULL, &rawOffset, ec);
+ return createEnumerationForRawOffset(rawOffset, ec);
}
StringEnumeration* U_EXPORT2
-TimeZone::createEnumeration(const char* country) {
+TimeZone::createEnumeration(const char* region) {
UErrorCode ec = U_ZERO_ERROR;
- return TZEnumeration::create(UCAL_ZONE_TYPE_ANY, country, NULL, ec);
+ return createEnumerationForRegion(region, ec);
}
// ---------------------------------------
@@ -1244,7 +1263,7 @@ TimeZone::getDisplayName(UBool inDaylight, EDisplayType style, const Locale& loc
tzfmt->format(UTZFMT_STYLE_GENERIC_SHORT, *this, date, result, &timeType);
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
// Generic format many use Localized GMT as the final fallback.
// When Localized GMT format is used, the result might not be
@@ -1272,7 +1291,7 @@ TimeZone::getDisplayName(UBool inDaylight, EDisplayType style, const Locale& loc
tzfmt->formatOffsetISO8601Basic(offset, FALSE, FALSE, FALSE, result, status);
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
} else {
@@ -1287,7 +1306,7 @@ TimeZone::getDisplayName(UBool inDaylight, EDisplayType style, const Locale& loc
nameType = inDaylight ? UTZNM_SHORT_DAYLIGHT : UTZNM_SHORT_STANDARD;
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
LocalPointer<TimeZoneNames> tznames(TimeZoneNames::createInstance(locale, status));
if (U_FAILURE(status)) {
@@ -1678,7 +1697,7 @@ TimeZone::getIDForWindowsID(const UnicodeString& winid, const char* region, Unic
winidKey[winKeyLen] = 0;
ures_getByKey(zones, winidKey, zones, &tmperr); // use tmperr, because windows mapping might not
- // be avaiable by design
+ // be available by design
if (U_FAILURE(tmperr)) {
ures_close(zones);
return id;
@@ -1691,7 +1710,7 @@ TimeZone::getIDForWindowsID(const UnicodeString& winid, const char* region, Unic
const UChar *tzids = ures_getStringByKey(zones, region, &len, &tmperr); // use tmperr, because
// regional mapping is optional
if (U_SUCCESS(tmperr)) {
- // first ID delimited by space is the defasult one
+ // first ID delimited by space is the default one
const UChar *end = u_strchr(tzids, (UChar)0x20);
if (end == NULL) {
id.setTo(tzids, -1);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/titletrn.h b/Build/source/libs/icu/icu-src/source/i18n/titletrn.h
index 4e45ac6f81f..8409519818a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/titletrn.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/titletrn.h
@@ -52,12 +52,12 @@ class TitlecaseTransliterator : public CaseMapTransliterator {
* Transliterator API.
* @return a copy of the object.
*/
- virtual TitlecaseTransliterator* clone() const;
+ virtual TitlecaseTransliterator* clone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -76,7 +76,7 @@ protected:
* pos.contextLimit. Otherwise, assume the text is complete.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tmunit.cpp b/Build/source/libs/icu/icu-src/source/i18n/tmunit.cpp
index 910489b1784..361aecb92ed 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tmunit.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tmunit.cpp
@@ -94,7 +94,7 @@ TimeUnit::TimeUnit(TimeUnit::UTimeUnitFields timeUnitField) {
initTime("second");
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tmutamt.cpp b/Build/source/libs/icu/icu-src/source/i18n/tmutamt.cpp
index 25464693ea9..2753c29374a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tmutamt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tmutamt.cpp
@@ -45,7 +45,7 @@ TimeUnitAmount::operator=(const TimeUnitAmount& other) {
}
-UBool
+bool
TimeUnitAmount::operator==(const UObject& other) const {
return Measure::operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tmutfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/tmutfmt.cpp
index 231ea5799c3..057bb634ebb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tmutfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tmutfmt.cpp
@@ -327,7 +327,7 @@ TimeUnitFormat::setup(UErrorCode& err) {
}
UnicodeString* pluralCount;
while ((pluralCount = const_cast<UnicodeString*>(keywords->snext(err))) != NULL) {
- pluralCounts.addElement(pluralCount, err);
+ pluralCounts.addElementX(pluralCount, err);
}
readFromCurrentLocale(UTMUTFMT_FULL_STYLE, gUnitsTag, pluralCounts, err);
checkConsistency(UTMUTFMT_FULL_STYLE, gUnitsTag, err);
@@ -362,7 +362,7 @@ struct TimeUnitFormatReadSink : public ResourceSink {
virtual ~TimeUnitFormatReadSink();
- virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) {
+ virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) override {
// Skip all put() calls except the first one -- discard all fallback data.
if (beenHere) {
return;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tolowtrn.h b/Build/source/libs/icu/icu-src/source/i18n/tolowtrn.h
index 2fbfb90e1bf..951128ec77e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tolowtrn.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/tolowtrn.h
@@ -50,12 +50,12 @@ class LowercaseTransliterator : public CaseMapTransliterator {
* Transliterator API.
* @return a copy of the object.
*/
- virtual LowercaseTransliterator* clone() const;
+ virtual LowercaseTransliterator* clone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/toupptrn.h b/Build/source/libs/icu/icu-src/source/i18n/toupptrn.h
index e96ca8f0ba5..755e9edfcb5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/toupptrn.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/toupptrn.h
@@ -50,12 +50,12 @@ class UppercaseTransliterator : public CaseMapTransliterator {
* Transliterator API.
* @return a copy of the object.
*/
- virtual UppercaseTransliterator* clone() const;
+ virtual UppercaseTransliterator* clone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/translit.cpp b/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
index ef44f42aa66..c7d6b510576 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
@@ -170,6 +170,7 @@ Transliterator* Transliterator::clone() const {
* Assignment operator.
*/
Transliterator& Transliterator::operator=(const Transliterator& other) {
+ if (this == &other) { return *this; } // self-assignment: no-op
ID = other.ID;
// NUL-terminate the ID string
ID.getTerminatedBuffer();
@@ -1092,6 +1093,8 @@ Transliterator::createFromRules(const UnicodeString& ID,
}
else {
UVector transliterators(status);
+ // TODO ICU-21701 missing U_FAILURE check here.
+ // Error and nullptr checking through this whole block looks suspect.
int32_t passNumber = 1;
int32_t limit = parser.idBlockVector.size();
@@ -1107,10 +1110,15 @@ Transliterator::createFromRules(const UnicodeString& ID,
delete temp;
return nullptr;
}
- if (temp != NULL && typeid(*temp) != typeid(NullTransliterator))
+ if (temp != NULL && typeid(*temp) != typeid(NullTransliterator)) {
transliterators.addElement(temp, status);
- else
+ if (U_FAILURE(status)) {
+ delete temp;
+ return nullptr;
+ }
+ } else {
delete temp;
+ }
}
}
if (!parser.dataVector.isEmpty()) {
@@ -1126,6 +1134,13 @@ Transliterator::createFromRules(const UnicodeString& ID,
return t;
}
transliterators.addElement(temprbt, status);
+ if (U_FAILURE(status)) {
+ delete temprbt;
+ return t;
+ }
+ // TODO: ICU-21701 the transliterators vector will leak its contents if anything goes wrong.
+ // Under normal operation, the CompoundTransliterator constructor adopts the
+ // the contents of the vector.
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/transreg.cpp b/Build/source/libs/icu/icu-src/source/i18n/transreg.cpp
index c412a20079e..726ad56f0f6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/transreg.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/transreg.cpp
@@ -154,22 +154,23 @@ Transliterator* TransliteratorAlias::create(UParseError& pe,
pos = aliasesOrRules.indexOf(noIDBlock, pos + 1);
}
- UVector transliterators(ec);
+ UVector transliterators(uprv_deleteUObject, nullptr, ec);
UnicodeString idBlock;
int32_t blockSeparatorPos = aliasesOrRules.indexOf((UChar)(0xffff));
while (blockSeparatorPos >= 0) {
aliasesOrRules.extract(0, blockSeparatorPos, idBlock);
aliasesOrRules.remove(0, blockSeparatorPos + 1);
if (!idBlock.isEmpty())
- transliterators.addElement(Transliterator::createInstance(idBlock, UTRANS_FORWARD, pe, ec), ec);
+ transliterators.adoptElement(Transliterator::createInstance(idBlock, UTRANS_FORWARD, pe, ec), ec);
if (!transes->isEmpty())
- transliterators.addElement(transes->orphanElementAt(0), ec);
+ transliterators.adoptElement(transes->orphanElementAt(0), ec);
blockSeparatorPos = aliasesOrRules.indexOf((UChar)(0xffff));
}
if (!aliasesOrRules.isEmpty())
- transliterators.addElement(Transliterator::createInstance(aliasesOrRules, UTRANS_FORWARD, pe, ec), ec);
+ transliterators.adoptElement(Transliterator::createInstance(aliasesOrRules, UTRANS_FORWARD, pe, ec), ec);
while (!transes->isEmpty())
- transliterators.addElement(transes->orphanElementAt(0), ec);
+ transliterators.adoptElement(transes->orphanElementAt(0), ec);
+ transliterators.setDeleter(nullptr);
if (U_SUCCESS(ec)) {
t = new CompoundTransliterator(ID, transliterators,
@@ -186,7 +187,7 @@ Transliterator* TransliteratorAlias::create(UParseError& pe,
}
break;
case RULES:
- UPRV_UNREACHABLE; // don't call create() if isRuleBased() returns TRUE!
+ UPRV_UNREACHABLE_EXIT; // don't call create() if isRuleBased() returns TRUE!
}
return t;
}
@@ -543,7 +544,7 @@ TransliteratorRegistry::TransliteratorRegistry(UErrorCode& status) :
variantList.setComparer(uhash_compareCaselessUnicodeString);
UnicodeString *emptyString = new UnicodeString();
if (emptyString != NULL) {
- variantList.addElement(emptyString, status);
+ variantList.adoptElement(emptyString, status);
}
availableIDs.setDeleter(uprv_deleteUObject);
availableIDs.setComparer(uhash_compareCaselessUnicodeString);
@@ -611,6 +612,8 @@ Transliterator* TransliteratorRegistry::reget(const UnicodeString& ID,
entry->entryType = TransliteratorEntry::COMPOUND_RBT;
entry->compoundFilter = parser.orphanCompoundFilter();
entry->u.dataVector = new UVector(status);
+ // TODO ICU-21701: missing check for nullptr and failed status.
+ // Unclear how best to bail out.
entry->stringArg.remove();
int32_t limit = parser.idBlockVector.size();
@@ -626,6 +629,9 @@ Transliterator* TransliteratorRegistry::reget(const UnicodeString& ID,
if (!parser.dataVector.isEmpty()) {
TransliterationRuleData* data = (TransliterationRuleData*)parser.dataVector.orphanElementAt(0);
entry->u.dataVector->addElement(data, status);
+ if (U_FAILURE(status)) {
+ delete data;
+ }
entry->stringArg += (UChar)0xffff; // use U+FFFF to mark position of RBTs in ID block
}
}
@@ -951,7 +957,7 @@ void TransliteratorRegistry::registerEntry(const UnicodeString& ID,
if (newID != NULL) {
// NUL-terminate the ID string
newID->getTerminatedBuffer();
- availableIDs.addElement(newID, status);
+ availableIDs.adoptElement(newID, status);
}
}
} else {
@@ -992,7 +998,7 @@ void TransliteratorRegistry::registerSTV(const UnicodeString& source,
}
UnicodeString *variantEntry = new UnicodeString(variant);
if (variantEntry != NULL) {
- variantList.addElement(variantEntry, status);
+ variantList.adoptElement(variantEntry, status);
if (U_SUCCESS(status)) {
variantListIndex = variantList.size() - 1;
}
@@ -1320,7 +1326,7 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID
return t;
case TransliteratorEntry::COMPOUND_RBT:
{
- UVector* rbts = new UVector(entry->u.dataVector->size(), status);
+ UVector* rbts = new UVector(uprv_deleteUObject, nullptr, entry->u.dataVector->size(), status);
// Check for null pointer
if (rbts == NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
@@ -1334,12 +1340,13 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID
if (tl == 0)
status = U_MEMORY_ALLOCATION_ERROR;
else
- rbts->addElement(tl, status);
+ rbts->adoptElement(tl, status);
}
if (U_FAILURE(status)) {
delete rbts;
return 0;
}
+ rbts->setDeleter(nullptr);
aliasReturn = new TransliteratorAlias(ID, entry->stringArg, rbts, entry->compoundFilter);
}
if (aliasReturn == 0) {
@@ -1395,7 +1402,7 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID
}
return 0;
default:
- UPRV_UNREACHABLE; // can't get here
+ UPRV_UNREACHABLE_EXIT; // can't get here
}
}
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/transreg.h b/Build/source/libs/icu/icu-src/source/i18n/transreg.h
index 04ed3fb5010..686e62ae33c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/transreg.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/transreg.h
@@ -103,7 +103,7 @@ class TransliteratorAlias : public UMemory {
// null, zero, empty.
// 2. CompoundRBT
// Here ID is the ID, aliasID is the idBlock, trans is the
- // contained RBT, and idSplitPoint is the offet in aliasID
+ // contained RBT, and idSplitPoint is the offset in aliasID
// where the contained RBT goes. compoundFilter is the
// compound filter, and it is _not_ owned.
// 3. Rules
@@ -144,7 +144,7 @@ class TransliteratorRegistry : public UMemory {
public:
/**
- * Contructor
+ * Constructor
* @param status Output param set to success/failure code.
*/
TransliteratorRegistry(UErrorCode& status);
@@ -170,7 +170,7 @@ class TransliteratorRegistry : public UMemory {
* @param ID the given ID
* @param aliasReturn output param to receive TransliteratorAlias;
* should be NULL on entry
- * @param parseError Struct to recieve information on position
+ * @param parseError Struct to receive information on position
* of error if an error is encountered
* @param status Output param set to success/failure code.
*/
@@ -293,7 +293,7 @@ class TransliteratorRegistry : public UMemory {
* Return a registered source specifier.
* @param index which specifier to return, from 0 to n-1, where
* n = countAvailableSources()
- * @param result fill-in paramter to receive the source specifier.
+ * @param result fill-in parameter to receive the source specifier.
* If index is out of range, result will be empty.
* @return reference to result
*/
@@ -314,7 +314,7 @@ class TransliteratorRegistry : public UMemory {
* @param index which specifier to return, from 0 to n-1, where
* n = countAvailableTargets(source)
* @param source the source specifier
- * @param result fill-in paramter to receive the target specifier.
+ * @param result fill-in parameter to receive the target specifier.
* If source is invalid or if index is out of range, result will
* be empty.
* @return reference to result
@@ -345,7 +345,7 @@ class TransliteratorRegistry : public UMemory {
* n = countAvailableVariants(source, target)
* @param source the source specifier
* @param target the target specifier
- * @param result fill-in paramter to receive the variant
+ * @param result fill-in parameter to receive the variant
* specifier. If source is invalid or if target is invalid or if
* index is out of range, result will be empty.
* @return reference to result
@@ -417,11 +417,11 @@ class TransliteratorRegistry : public UMemory {
public:
Enumeration(const TransliteratorRegistry& reg);
virtual ~Enumeration();
- virtual int32_t count(UErrorCode& status) const;
- virtual const UnicodeString* snext(UErrorCode& status);
- virtual void reset(UErrorCode& status);
+ virtual int32_t count(UErrorCode& status) const override;
+ virtual const UnicodeString* snext(UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
static UClassID U_EXPORT2 getStaticClassID();
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
int32_t index;
const TransliteratorRegistry& reg;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tridpars.cpp b/Build/source/libs/icu/icu-src/source/i18n/tridpars.cpp
index 65bfc880633..0ca168e7a3e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tridpars.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tridpars.cpp
@@ -364,6 +364,8 @@ UBool TransliteratorIDParser::parseCompoundID(const UnicodeString& id, int32_t d
int32_t pos = 0;
int32_t withParens = 1;
list.removeAllElements();
+ UObjectDeleter *save = list.setDeleter(_deleteSingleID);
+
UnicodeSet* filter;
globalFilter = NULL;
canonID.truncate(0);
@@ -392,7 +394,7 @@ UBool TransliteratorIDParser::parseCompoundID(const UnicodeString& id, int32_t d
break;
}
if (dir == FORWARD) {
- list.addElement(single, ec);
+ list.adoptElement(single, ec);
} else {
list.insertElementAt(single, 0, ec);
}
@@ -442,10 +444,10 @@ UBool TransliteratorIDParser::parseCompoundID(const UnicodeString& id, int32_t d
goto FAIL;
}
+ list.setDeleter(save);
return TRUE;
FAIL:
- UObjectDeleter *save = list.setDeleter(_deleteSingleID);
list.removeAllElements();
list.setDeleter(save);
delete globalFilter;
@@ -494,9 +496,8 @@ void TransliteratorIDParser::instantiateList(UVector& list,
ec = U_INVALID_ID;
goto RETURN;
}
- tlist.addElement(t, ec);
+ tlist.adoptElement(t, ec);
if (U_FAILURE(ec)) {
- delete t;
goto RETURN;
}
}
@@ -509,10 +510,7 @@ void TransliteratorIDParser::instantiateList(UVector& list,
// Should never happen
ec = U_INTERNAL_TRANSLITERATOR_ERROR;
}
- tlist.addElement(t, ec);
- if (U_FAILURE(ec)) {
- delete t;
- }
+ tlist.adoptElement(t, ec);
}
RETURN:
@@ -525,9 +523,8 @@ void TransliteratorIDParser::instantiateList(UVector& list,
while (tlist.size() > 0) {
t = (Transliterator*) tlist.orphanElementAt(0);
- list.addElement(t, ec);
+ list.adoptElement(t, ec);
if (U_FAILURE(ec)) {
- delete t;
list.removeAllElements();
break;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tzfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/tzfmt.cpp
index f87f0f67b13..ef3cfad80ce 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tzfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tzfmt.cpp
@@ -270,7 +270,7 @@ GMTOffsetField::isValid(FieldType type, int32_t width) {
case SECOND:
return (width == 2);
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
return (width > 0);
}
@@ -482,11 +482,11 @@ TimeZoneFormat::operator=(const TimeZoneFormat& other) {
}
-UBool
+bool
TimeZoneFormat::operator==(const Format& other) const {
TimeZoneFormat* tzfmt = (TimeZoneFormat*)&other;
- UBool isEqual =
+ bool isEqual =
fLocale == tzfmt->fLocale
&& fGMTPattern == tzfmt->fGMTPattern
&& fGMTZeroFormat == tzfmt->fGMTZeroFormat
@@ -595,7 +595,7 @@ TimeZoneFormat::setGMTOffsetPattern(UTimeZoneFormatGMTOffsetPatternType type, co
required = FIELDS_HMS;
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
UVector* patternItems = parseOffsetPattern(pattern, required, status);
@@ -1033,7 +1033,7 @@ TimeZoneFormat::parse(UTimeZoneFormatStyle style, const UnicodeString& text, Par
break;
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
int32_t len = 0;
@@ -1873,7 +1873,7 @@ TimeZoneFormat::parseOffsetFieldsWithPattern(const UnicodeString& text, int32_t
// When TimeZoneFormat parse() is called from SimpleDateFormat,
// leading space characters might be truncated. If the first pattern text
// starts with such character (e.g. Bidi control), then we need to
- // skip the leading space charcters.
+ // skip the leading space characters.
if (idx < text.length() && !PatternProps::isWhiteSpace(text.char32At(idx))) {
while (len > 0) {
UChar32 ch;
@@ -2459,7 +2459,7 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re
if (itemType != GMTOffsetField::TEXT) {
if (GMTOffsetField::isValid(itemType, itemLength)) {
GMTOffsetField* fld = GMTOffsetField::createTimeField(itemType, static_cast<uint8_t>(itemLength), status);
- result->addElement(fld, status);
+ result->addElementX(fld, status);
if (U_FAILURE(status)) {
break;
}
@@ -2485,7 +2485,7 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re
if (itemType == GMTOffsetField::TEXT) {
if (text.length() > 0) {
GMTOffsetField* textfld = GMTOffsetField::createText(text, status);
- result->addElement(textfld, status);
+ result->addElementX(textfld, status);
if (U_FAILURE(status)) {
break;
}
@@ -2494,7 +2494,7 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re
} else {
if (GMTOffsetField::isValid(itemType, itemLength)) {
GMTOffsetField* fld = GMTOffsetField::createTimeField(itemType, static_cast<uint8_t>(itemLength), status);
- result->addElement(fld, status);
+ result->addElementX(fld, status);
if (U_FAILURE(status)) {
break;
}
@@ -2512,7 +2512,7 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re
if (itemType != GMTOffsetField::TEXT) {
if (GMTOffsetField::isValid(itemType, itemLength)) {
GMTOffsetField* fld = GMTOffsetField::createTimeField(itemType, static_cast<uint8_t>(itemLength), status);
- result->addElement(fld, status);
+ result->addElementX(fld, status);
if (U_FAILURE(status)) {
break;
}
@@ -2532,12 +2532,12 @@ TimeZoneFormat::parseOffsetPattern(const UnicodeString& pattern, OffsetFields re
if (itemType == GMTOffsetField::TEXT) {
if (text.length() > 0) {
GMTOffsetField* tfld = GMTOffsetField::createText(text, status);
- result->addElement(tfld, status);
+ result->addElementX(tfld, status);
}
} else {
if (GMTOffsetField::isValid(itemType, itemLength)) {
GMTOffsetField* fld = GMTOffsetField::createTimeField(itemType, static_cast<uint8_t>(itemLength), status);
- result->addElement(fld, status);
+ result->addElementX(fld, status);
} else {
status = U_ILLEGAL_ARGUMENT_ERROR;
}
@@ -2729,7 +2729,7 @@ public:
ZoneIdMatchHandler();
virtual ~ZoneIdMatchHandler();
- UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status);
+ UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status) override;
const UChar* getID();
int32_t getMatchLen();
private:
@@ -2780,15 +2780,17 @@ static void U_CALLCONV initZoneIdTrie(UErrorCode &status) {
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
- StringEnumeration *tzenum = TimeZone::createEnumeration();
- const UnicodeString *id;
- while ((id = tzenum->snext(status)) != NULL) {
- const UChar* uid = ZoneMeta::findTimeZoneID(*id);
- if (uid) {
- gZoneIdTrie->put(uid, const_cast<UChar *>(uid), status);
+ StringEnumeration *tzenum = TimeZone::createEnumeration(status);
+ if (U_SUCCESS(status)) {
+ const UnicodeString *id;
+ while ((id = tzenum->snext(status)) != NULL) {
+ const UChar* uid = ZoneMeta::findTimeZoneID(*id);
+ if (uid) {
+ gZoneIdTrie->put(uid, const_cast<UChar *>(uid), status);
+ }
}
+ delete tzenum;
}
- delete tzenum;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tzgnames.cpp b/Build/source/libs/icu/icu-src/source/i18n/tzgnames.cpp
index e056461dc30..ed5f42d7bc1 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tzgnames.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tzgnames.cpp
@@ -195,7 +195,7 @@ public:
GNameSearchHandler(uint32_t types);
virtual ~GNameSearchHandler();
- UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status);
+ UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status) override;
UVector* getMatches(int32_t& maxMatchLen);
private:
@@ -244,7 +244,7 @@ GNameSearchHandler::handleMatch(int32_t matchLength, const CharacterNode *node,
gmatch->gnameInfo = nameinfo;
gmatch->matchLength = matchLength;
gmatch->timeType = UTZFMT_TIME_TYPE_UNKNOWN;
- fResults->addElement(gmatch, status);
+ fResults->addElementX(gmatch, status);
if (U_FAILURE(status)) {
uprv_free(gmatch);
} else {
@@ -328,7 +328,7 @@ private:
// ---------------------------------------------------
-// TZGNCore - core implmentation of TimeZoneGenericNames
+// TZGNCore - core implementation of TimeZoneGenericNames
//
// TimeZoneGenericNames is parallel to TimeZoneNames,
// but handles run-time generated time zone names.
@@ -554,7 +554,7 @@ TZGNCore::getGenericLocationName(const UnicodeString& tzCanonicalID) {
// If this is not the primary zone in the country,
// use the exemplar city name.
- // getExemplarLocationName should retur non-empty string
+ // getExemplarLocationName should return non-empty string
// if the time zone is associated with a region
UnicodeString city;
@@ -1287,7 +1287,7 @@ TimeZoneGenericNames::createInstance(const Locale& locale, UErrorCode& status) {
return instance;
}
-UBool
+bool
TimeZoneGenericNames::operator==(const TimeZoneGenericNames& other) const {
// Just compare if the other object also use the same
// ref entry
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tzgnames.h b/Build/source/libs/icu/icu-src/source/i18n/tzgnames.h
index 71d9d84dc04..26112c5db65 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tzgnames.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/tzgnames.h
@@ -11,7 +11,7 @@
/**
* \file
- * \brief C API: Time zone generic names classe
+ * \brief C API: Time zone generic names classes
*/
#include "unicode/utypes.h"
@@ -45,8 +45,8 @@ public:
static TimeZoneGenericNames* createInstance(const Locale& locale, UErrorCode& status);
- virtual UBool operator==(const TimeZoneGenericNames& other) const;
- virtual UBool operator!=(const TimeZoneGenericNames& other) const {return !operator==(other);}
+ virtual bool operator==(const TimeZoneGenericNames& other) const;
+ virtual bool operator!=(const TimeZoneGenericNames& other) const {return !operator==(other);}
virtual TimeZoneGenericNames* clone() const;
UnicodeString& getDisplayName(const TimeZone& tz, UTimeZoneGenericNameType type,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tznames.cpp b/Build/source/libs/icu/icu-src/source/i18n/tznames.cpp
index d789c123630..5c504d01cb6 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tznames.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tznames.cpp
@@ -104,24 +104,24 @@ public:
TimeZoneNamesDelegate(const Locale& locale, UErrorCode& status);
virtual ~TimeZoneNamesDelegate();
- virtual UBool operator==(const TimeZoneNames& other) const;
- virtual UBool operator!=(const TimeZoneNames& other) const {return !operator==(other);}
- virtual TimeZoneNamesDelegate* clone() const;
+ virtual bool operator==(const TimeZoneNames& other) const override;
+ virtual bool operator!=(const TimeZoneNames& other) const {return !operator==(other);}
+ virtual TimeZoneNamesDelegate* clone() const override;
- StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const;
- StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const;
- UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const;
- UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const;
+ StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const override;
+ StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const override;
+ UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const override;
+ UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const override;
- UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const;
- UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const;
+ UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const override;
+ UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const override;
- UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const;
+ UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const override;
- void loadAllDisplayNames(UErrorCode& status);
- void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const;
+ void loadAllDisplayNames(UErrorCode& status) override;
+ void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const override;
- MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
+ MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const override;
private:
TimeZoneNamesDelegate();
TimeZoneNamesCacheEntry* fTZnamesCacheEntry;
@@ -219,10 +219,10 @@ TimeZoneNamesDelegate::~TimeZoneNamesDelegate() {
umtx_unlock(&gTimeZoneNamesLock);
}
-UBool
+bool
TimeZoneNamesDelegate::operator==(const TimeZoneNames& other) const {
if (this == &other) {
- return TRUE;
+ return true;
}
// Just compare if the other object also use the same
// cache entry
@@ -230,7 +230,7 @@ TimeZoneNamesDelegate::operator==(const TimeZoneNames& other) const {
if (rhs) {
return fTZnamesCacheEntry == rhs->fTZnamesCacheEntry;
}
- return FALSE;
+ return false;
}
TimeZoneNamesDelegate*
@@ -345,7 +345,7 @@ TimeZoneNames::getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type,
return name;
}
-// Empty default implementation, to be overriden in tznames_impl.cpp.
+// Empty default implementation, to be overridden in tznames_impl.cpp.
void
TimeZoneNames::loadAllDisplayNames(UErrorCode& /*status*/) {
}
@@ -419,7 +419,7 @@ TimeZoneNames::MatchInfoCollection::addZone(UTimeZoneNameType nameType, int32_t
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
- matches(status)->addElement(matchInfo, status);
+ matches(status)->addElementX(matchInfo, status);
if (U_FAILURE(status)) {
delete matchInfo;
}
@@ -436,7 +436,7 @@ TimeZoneNames::MatchInfoCollection::addMetaZone(UTimeZoneNameType nameType, int3
status = U_MEMORY_ALLOCATION_ERROR;
return;
}
- matches(status)->addElement(matchInfo, status);
+ matches(status)->addElementX(matchInfo, status);
if (U_FAILURE(status)) {
delete matchInfo;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.cpp b/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.cpp
index 186aaaf74d0..d450b745648 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.cpp
@@ -155,12 +155,12 @@ CharacterNode::addValue(void *value, UObjectDeleter *valueDeleter, UErrorCode &s
}
return;
}
- values->addElement(fValues, status);
+ values->addElementX(fValues, status);
fValues = values;
fHasValuesVector = TRUE;
}
// Add the new value.
- ((UVector *)fValues)->addElement(value, status);
+ ((UVector *)fValues)->addElementX(value, status);
}
}
@@ -233,7 +233,7 @@ TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) {
U_ASSERT(fLazyContents != NULL);
UChar *s = const_cast<UChar *>(key);
- fLazyContents->addElement(s, status);
+ fLazyContents->addElementX(s, status);
if (U_FAILURE(status)) {
if (fValueDeleter) {
fValueDeleter((void*) key);
@@ -241,7 +241,7 @@ TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) {
return;
}
- fLazyContents->addElement(value, status);
+ fLazyContents->addElementX(value, status);
}
void
@@ -533,7 +533,7 @@ const UChar *ZNStringPool::get(const UChar *s, UErrorCode &status) {
//
// ZNStringPool::adopt() Put a string into the hash, but do not copy the string data
// into the pool's storage. Used for strings from resource bundles,
-// which will perisist for the life of the zone string formatter, and
+// which will persist for the life of the zone string formatter, and
// therefore can be used directly without copying.
const UChar *ZNStringPool::adopt(const UChar * s, UErrorCode &status) {
const UChar *pooledString;
@@ -776,7 +776,7 @@ struct ZNames::ZNamesLoader : public ResourceSink {
clear();
ures_getAllItemsWithFallback(zoneStrings, key, *this, localStatus);
- // Ignore errors, but propogate possible warnings.
+ // Ignore errors, but propagate possible warnings.
if (U_SUCCESS(localStatus)) {
errorCode = localStatus;
}
@@ -794,7 +794,7 @@ struct ZNames::ZNamesLoader : public ResourceSink {
}
virtual void put(const char* key, ResourceValue& value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
+ UErrorCode &errorCode) override {
ResourceTable namesTable = value.getTable(errorCode);
if (U_FAILURE(errorCode)) { return; }
for (int32_t i = 0; namesTable.getKeyAndValue(i, key, value); ++i) {
@@ -857,10 +857,10 @@ public:
MetaZoneIDsEnumeration(UVector* mzIDs);
virtual ~MetaZoneIDsEnumeration();
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
- virtual const UnicodeString* snext(UErrorCode& status);
- virtual void reset(UErrorCode& status);
- virtual int32_t count(UErrorCode& status) const;
+ virtual UClassID getDynamicClassID(void) const override;
+ virtual const UnicodeString* snext(UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
+ virtual int32_t count(UErrorCode& status) const override;
private:
int32_t fLen;
int32_t fPos;
@@ -920,7 +920,7 @@ public:
ZNameSearchHandler(uint32_t types);
virtual ~ZNameSearchHandler();
- UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status);
+ UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status) override;
TimeZoneNames::MatchInfoCollection* getMatches(int32_t& maxMatchLen);
private:
@@ -1104,13 +1104,13 @@ TimeZoneNamesImpl::cleanup() {
}
}
-UBool
+bool
TimeZoneNamesImpl::operator==(const TimeZoneNames& other) const {
if (this == &other) {
- return TRUE;
+ return true;
}
// No implementation for now
- return FALSE;
+ return false;
}
TimeZoneNamesImpl*
@@ -1165,7 +1165,7 @@ TimeZoneNamesImpl::_getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCod
OlsonToMetaMappingEntry *map = (OlsonToMetaMappingEntry *)mappings->elementAt(i);
const UChar *mzID = map->mzid;
if (!mzIDs->contains((void *)mzID)) {
- mzIDs->addElement((void *)mzID, status);
+ mzIDs->addElementX((void *)mzID, status);
}
}
if (U_SUCCESS(status)) {
@@ -1194,7 +1194,7 @@ TimeZoneNamesImpl::getReferenceZoneID(const UnicodeString& mzID, const char* reg
return TimeZoneNamesImpl::_getReferenceZoneID(mzID, region, tzID);
}
-// static implementaion of getReferenceZoneID
+// static implementation of getReferenceZoneID
UnicodeString&
TimeZoneNamesImpl::_getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) {
ZoneMeta::getZoneIdByMetazone(mzID, UnicodeString(region, -1, US_INV), tzID);
@@ -1560,7 +1560,7 @@ struct TimeZoneNamesImpl::ZoneStringsLoader : public ResourceSink {
}
virtual void put(const char *key, ResourceValue &value, UBool noFallback,
- UErrorCode &status) {
+ UErrorCode &status) override {
ResourceTable timeZonesTable = value.getTable(status);
if (U_FAILURE(status)) { return; }
for (int32_t i = 0; timeZonesTable.getKeyAndValue(i, key, value); ++i) {
@@ -1891,7 +1891,7 @@ public:
TZDBNameSearchHandler(uint32_t types, const char* region);
virtual ~TZDBNameSearchHandler();
- UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status);
+ UBool handleMatch(int32_t matchLength, const CharacterNode *node, UErrorCode &status) override;
TimeZoneNames::MatchInfoCollection* getMatches(int32_t& maxMatchLen);
private:
@@ -2156,13 +2156,13 @@ TZDBTimeZoneNames::TZDBTimeZoneNames(const Locale& locale)
TZDBTimeZoneNames::~TZDBTimeZoneNames() {
}
-UBool
+bool
TZDBTimeZoneNames::operator==(const TimeZoneNames& other) const {
if (this == &other) {
- return TRUE;
+ return true;
}
// No implementation for now
- return FALSE;
+ return false;
}
TZDBTimeZoneNames*
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h b/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
index 417c0511f81..d047fa35418 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
@@ -74,7 +74,7 @@ class U_I18N_API ZNStringPool: public UMemory {
*/
struct CharacterNode {
// No constructor or destructor.
- // We malloc and free an uninitalized array of CharacterNode objects
+ // We malloc and free an uninitialized array of CharacterNode objects
// and clear and delete them ourselves.
void clear();
@@ -173,24 +173,24 @@ public:
virtual ~TimeZoneNamesImpl();
- virtual UBool operator==(const TimeZoneNames& other) const;
- virtual TimeZoneNamesImpl* clone() const;
+ virtual bool operator==(const TimeZoneNames& other) const override;
+ virtual TimeZoneNamesImpl* clone() const override;
- StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const;
- StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const;
+ StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const override;
+ StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const override;
- UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const;
- UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const;
+ UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const override;
+ UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const override;
- UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const;
- UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const;
+ UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const override;
+ UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const override;
- UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const;
+ UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const override;
- TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
+ TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const override;
- void loadAllDisplayNames(UErrorCode& status);
- void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const;
+ void loadAllDisplayNames(UErrorCode& status) override;
+ void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const override;
static UnicodeString& getDefaultExemplarLocationName(const UnicodeString& tzID, UnicodeString& name);
@@ -235,19 +235,19 @@ public:
TZDBTimeZoneNames(const Locale& locale);
virtual ~TZDBTimeZoneNames();
- virtual UBool operator==(const TimeZoneNames& other) const;
- virtual TZDBTimeZoneNames* clone() const;
+ virtual bool operator==(const TimeZoneNames& other) const override;
+ virtual TZDBTimeZoneNames* clone() const override;
- StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const;
- StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const;
+ StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const override;
+ StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const override;
- UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const;
- UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const;
+ UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const override;
+ UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const override;
- UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const;
- UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const;
+ UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const override;
+ UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const override;
- TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const;
+ TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const override;
// When TZDBNames for the metazone is not available, this method returns NULL,
// but does NOT set U_MISSING_RESOURCE_ERROR to status.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tzrule.cpp b/Build/source/libs/icu/icu-src/source/i18n/tzrule.cpp
index 759a2d4c673..a60fffbe020 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tzrule.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tzrule.cpp
@@ -53,7 +53,7 @@ TimeZoneRule::operator=(const TimeZoneRule& right) {
return *this;
}
-UBool
+bool
TimeZoneRule::operator==(const TimeZoneRule& that) const {
return ((this == &that) ||
(typeid(*this) == typeid(that) &&
@@ -62,7 +62,7 @@ TimeZoneRule::operator==(const TimeZoneRule& that) const {
fDSTSavings == that.fDSTSavings));
}
-UBool
+bool
TimeZoneRule::operator!=(const TimeZoneRule& that) const {
return !operator==(that);
}
@@ -120,14 +120,14 @@ InitialTimeZoneRule::operator=(const InitialTimeZoneRule& right) {
return *this;
}
-UBool
+bool
InitialTimeZoneRule::operator==(const TimeZoneRule& that) const {
return ((this == &that) ||
(typeid(*this) == typeid(that) &&
TimeZoneRule::operator==(that)));
}
-UBool
+bool
InitialTimeZoneRule::operator!=(const TimeZoneRule& that) const {
return !operator==(that);
}
@@ -226,13 +226,13 @@ AnnualTimeZoneRule::operator=(const AnnualTimeZoneRule& right) {
return *this;
}
-UBool
+bool
AnnualTimeZoneRule::operator==(const TimeZoneRule& that) const {
if (this == &that) {
- return TRUE;
+ return true;
}
if (typeid(*this) != typeid(that)) {
- return FALSE;
+ return false;
}
AnnualTimeZoneRule *atzr = (AnnualTimeZoneRule*)&that;
return (*fDateTimeRule == *(atzr->fDateTimeRule) &&
@@ -240,7 +240,7 @@ AnnualTimeZoneRule::operator==(const TimeZoneRule& that) const {
fEndYear == atzr->fEndYear);
}
-UBool
+bool
AnnualTimeZoneRule::operator!=(const TimeZoneRule& that) const {
return !operator==(that);
}
@@ -445,31 +445,31 @@ TimeArrayTimeZoneRule::operator=(const TimeArrayTimeZoneRule& right) {
return *this;
}
-UBool
+bool
TimeArrayTimeZoneRule::operator==(const TimeZoneRule& that) const {
if (this == &that) {
- return TRUE;
+ return true;
}
- if (typeid(*this) != typeid(that) || TimeZoneRule::operator==(that) == FALSE) {
- return FALSE;
+ if (typeid(*this) != typeid(that) || !TimeZoneRule::operator==(that)) {
+ return false;
}
TimeArrayTimeZoneRule *tatzr = (TimeArrayTimeZoneRule*)&that;
if (fTimeRuleType != tatzr->fTimeRuleType ||
fNumStartTimes != tatzr->fNumStartTimes) {
- return FALSE;
+ return false;
}
// Compare start times
- UBool res = TRUE;
+ bool res = true;
for (int32_t i = 0; i < fNumStartTimes; i++) {
if (fStartTimes[i] != tatzr->fStartTimes[i]) {
- res = FALSE;
+ res = false;
break;
}
}
return res;
}
-UBool
+bool
TimeArrayTimeZoneRule::operator!=(const TimeZoneRule& that) const {
return !operator==(that);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/tztrans.cpp b/Build/source/libs/icu/icu-src/source/i18n/tztrans.cpp
index 3199b78ea83..900e4be5408 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/tztrans.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/tztrans.cpp
@@ -63,28 +63,28 @@ TimeZoneTransition::operator=(const TimeZoneTransition& right) {
return *this;
}
-UBool
+bool
TimeZoneTransition::operator==(const TimeZoneTransition& that) const {
if (this == &that) {
- return TRUE;
+ return true;
}
if (typeid(*this) != typeid(that)) {
- return FALSE;
+ return false;
}
if (fTime != that.fTime) {
- return FALSE;
+ return false;
}
if ((fFrom == NULL && that.fFrom == NULL)
|| (fFrom != NULL && that.fFrom != NULL && *fFrom == *(that.fFrom))) {
if ((fTo == NULL && that.fTo == NULL)
|| (fTo != NULL && that.fTo != NULL && *fTo == *(that.fTo))) {
- return TRUE;
+ return true;
}
}
- return FALSE;
+ return false;
}
-UBool
+bool
TimeZoneTransition::operator!=(const TimeZoneTransition& that) const {
return !operator==(that);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp b/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
index c30ce093352..33f72589c50 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
@@ -33,8 +33,8 @@ U_NAMESPACE_USE
static TimeZone*
_createTimeZone(const UChar* zoneID, int32_t len, UErrorCode* ec) {
- TimeZone* zone = NULL;
- if (ec != NULL && U_SUCCESS(*ec)) {
+ TimeZone* zone = nullptr;
+ if (ec != nullptr && U_SUCCESS(*ec)) {
// Note that if zoneID is invalid, we get back GMT. This odd
// behavior is by design and goes back to the JDK. The only
// failure we will see is a memory allocation failure.
@@ -42,7 +42,7 @@ _createTimeZone(const UChar* zoneID, int32_t len, UErrorCode* ec) {
UnicodeString zoneStrID;
zoneStrID.setTo((UBool)(len < 0), zoneID, l); /* temporary read-only alias */
zone = TimeZone::createTimeZone(zoneStrID);
- if (zone == NULL) {
+ if (zone == nullptr) {
*ec = U_MEMORY_ALLOCATION_ERROR;
}
}
@@ -58,20 +58,20 @@ ucal_openTimeZoneIDEnumeration(USystemTimeZoneType zoneType, const char* region,
U_CAPI UEnumeration* U_EXPORT2
ucal_openTimeZones(UErrorCode* ec) {
- return uenum_openFromStringEnumeration(TimeZone::createEnumeration(), ec);
+ return ucal_openTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, nullptr, nullptr, ec);
}
U_CAPI UEnumeration* U_EXPORT2
ucal_openCountryTimeZones(const char* country, UErrorCode* ec) {
- return uenum_openFromStringEnumeration(TimeZone::createEnumeration(country), ec);
+ return ucal_openTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, country, nullptr, ec);
}
U_CAPI int32_t U_EXPORT2
ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec) {
int32_t len = 0;
- if (ec != NULL && U_SUCCESS(*ec)) {
+ if (ec != nullptr && U_SUCCESS(*ec)) {
TimeZone* zone = TimeZone::createDefault();
- if (zone == NULL) {
+ if (zone == nullptr) {
*ec = U_MEMORY_ALLOCATION_ERROR;
} else {
UnicodeString id;
@@ -86,7 +86,7 @@ ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec) {
U_CAPI void U_EXPORT2
ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec) {
TimeZone* zone = _createTimeZone(zoneID, -1, ec);
- if (zone != NULL) {
+ if (zone != nullptr) {
TimeZone::adoptDefault(zone);
}
}
@@ -94,9 +94,9 @@ ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec) {
U_CAPI int32_t U_EXPORT2
ucal_getHostTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec) {
int32_t len = 0;
- if (ec != NULL && U_SUCCESS(*ec)) {
+ if (ec != nullptr && U_SUCCESS(*ec)) {
TimeZone *zone = TimeZone::detectHostTimeZone();
- if (zone == NULL) {
+ if (zone == nullptr) {
*ec = U_MEMORY_ALLOCATION_ERROR;
} else {
UnicodeString id;
@@ -114,7 +114,7 @@ ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec) {
TimeZone* zone = _createTimeZone(zoneID, -1, ec);
if (U_SUCCESS(*ec)) {
SimpleTimeZone* stz = dynamic_cast<SimpleTimeZone*>(zone);
- if (stz != NULL) {
+ if (stz != nullptr) {
result = stz->getDSTSavings();
} else {
// Since there is no getDSTSavings on TimeZone, we use a
@@ -219,10 +219,10 @@ ucal_setTimeZone( UCalendar* cal,
if(U_FAILURE(*status))
return;
- TimeZone* zone = (zoneID==NULL) ? TimeZone::createDefault()
+ TimeZone* zone = (zoneID==nullptr) ? TimeZone::createDefault()
: _createTimeZone(zoneID, len, status);
- if (zone != NULL) {
+ if (zone != nullptr) {
((Calendar*)cal)->adoptTimeZone(zone);
}
}
@@ -255,8 +255,8 @@ ucal_getTimeZoneDisplayName(const UCalendar* cal,
const TimeZone& tz = ((Calendar*)cal)->getTimeZone();
UnicodeString id;
- if(!(result==NULL && resultLength==0)) {
- // NULL destination for pure preflighting: empty dummy string
+ if (!(result == nullptr && resultLength == 0)) {
+ // Null destination for pure preflighting: empty dummy string
// otherwise, alias the destination buffer
id.setTo(result, 0, resultLength);
}
@@ -298,12 +298,12 @@ ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode) {
}
Calendar *cpp_cal = (Calendar *)cal;
GregorianCalendar *gregocal = dynamic_cast<GregorianCalendar *>(cpp_cal);
- // Not if(gregocal == NULL) {
+ // Not if(gregocal == nullptr) {
// because we really want to work only with a GregorianCalendar, not with
// its subclasses like BuddhistCalendar.
- if (cpp_cal == NULL) {
- // We normally don't check "this" pointers for NULL, but this here avoids
- // compiler-generated exception-throwing code in case cal == NULL.
+ if (cpp_cal == nullptr) {
+ // We normally don't check "this" pointers for nullptr, but this here avoids
+ // compiler-generated exception-throwing code in case cal == nullptr.
*pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
@@ -321,11 +321,11 @@ ucal_getGregorianChange(const UCalendar *cal, UErrorCode *pErrorCode) {
}
const Calendar *cpp_cal = (const Calendar *)cal;
const GregorianCalendar *gregocal = dynamic_cast<const GregorianCalendar *>(cpp_cal);
- // Not if(gregocal == NULL) {
+ // Not if(gregocal == nullptr) {
// see comments in ucal_setGregorianChange().
- if (cpp_cal == NULL) {
- // We normally don't check "this" pointers for NULL, but this here avoids
- // compiler-generated exception-throwing code in case cal == NULL.
+ if (cpp_cal == nullptr) {
+ // We normally don't check "this" pointers for nullptr, but this here avoids
+ // compiler-generated exception-throwing code in case cal == nullptr.
*pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
return (UDate)0;
}
@@ -572,11 +572,11 @@ ucal_getLimit( const UCalendar* cal,
U_CAPI const char * U_EXPORT2
ucal_getLocaleByType(const UCalendar *cal, ULocDataLocaleType type, UErrorCode* status)
{
- if (cal == NULL) {
+ if (cal == nullptr) {
if (U_SUCCESS(*status)) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
}
- return NULL;
+ return nullptr;
}
return ((Calendar*)cal)->getLocaleID(type, *status);
}
@@ -617,7 +617,7 @@ U_CAPI const char * U_EXPORT2
ucal_getType(const UCalendar *cal, UErrorCode* status)
{
if (U_FAILURE(*status)) {
- return NULL;
+ return nullptr;
}
return ((Calendar*)cal)->getType();
}
@@ -662,8 +662,8 @@ ucal_getFieldDifference(UCalendar* cal, UDate target,
static const UEnumeration defaultKeywordValues = {
- NULL,
- NULL,
+ nullptr,
+ nullptr,
ulist_close_keyword_values_iterator,
ulist_count_keyword_values,
uenum_unextDefault,
@@ -690,7 +690,7 @@ static const char * const CAL_TYPES[] = {
"islamic-umalqura",
"islamic-tbla",
"islamic-rgsa",
- NULL
+ nullptr
};
U_CAPI UEnumeration* U_EXPORT2
@@ -700,16 +700,16 @@ ucal_getKeywordValuesForLocale(const char * /* key */, const char* locale, UBool
(void)ulocimp_getRegionForSupplementalData(locale, TRUE, prefRegion, sizeof(prefRegion), status);
// Read preferred calendar values from supplementalData calendarPreference
- UResourceBundle *rb = ures_openDirect(NULL, "supplementalData", status);
+ UResourceBundle *rb = ures_openDirect(nullptr, "supplementalData", status);
ures_getByKey(rb, "calendarPreferenceData", rb, status);
- UResourceBundle *order = ures_getByKey(rb, prefRegion, NULL, status);
- if (*status == U_MISSING_RESOURCE_ERROR && rb != NULL) {
+ UResourceBundle *order = ures_getByKey(rb, prefRegion, nullptr, status);
+ if (*status == U_MISSING_RESOURCE_ERROR && rb != nullptr) {
*status = U_ZERO_ERROR;
- order = ures_getByKey(rb, "001", NULL, status);
+ order = ures_getByKey(rb, "001", nullptr, status);
}
// Create a list of calendar type strings
- UList *values = NULL;
+ UList *values = nullptr;
if (U_SUCCESS(*status)) {
values = ulist_createEmptyList(status);
if (U_SUCCESS(*status)) {
@@ -717,7 +717,7 @@ ucal_getKeywordValuesForLocale(const char * /* key */, const char* locale, UBool
int32_t len;
const UChar *type = ures_getStringByIndex(order, i, &len, status);
char *caltype = (char*)uprv_malloc(len + 1);
- if (caltype == NULL) {
+ if (caltype == nullptr) {
*status = U_MEMORY_ALLOCATION_ERROR;
break;
}
@@ -732,7 +732,7 @@ ucal_getKeywordValuesForLocale(const char * /* key */, const char* locale, UBool
if (U_SUCCESS(*status) && !commonlyUsed) {
// If not commonlyUsed, add other available values
- for (int32_t i = 0; CAL_TYPES[i] != NULL; i++) {
+ for (int32_t i = 0; CAL_TYPES[i] != nullptr; i++) {
if (!ulist_containsString(values, CAL_TYPES[i], (int32_t)uprv_strlen(CAL_TYPES[i]))) {
ulist_addItemEndList(values, CAL_TYPES[i], FALSE, status);
if (U_FAILURE(*status)) {
@@ -743,7 +743,7 @@ ucal_getKeywordValuesForLocale(const char * /* key */, const char* locale, UBool
}
if (U_FAILURE(*status)) {
ulist_deleteList(values);
- values = NULL;
+ values = nullptr;
}
}
}
@@ -751,16 +751,16 @@ ucal_getKeywordValuesForLocale(const char * /* key */, const char* locale, UBool
ures_close(order);
ures_close(rb);
- if (U_FAILURE(*status) || values == NULL) {
- return NULL;
+ if (U_FAILURE(*status) || values == nullptr) {
+ return nullptr;
}
// Create string enumeration
UEnumeration *en = (UEnumeration*)uprv_malloc(sizeof(UEnumeration));
- if (en == NULL) {
+ if (en == nullptr) {
*status = U_MEMORY_ALLOCATION_ERROR;
ulist_deleteList(values);
- return NULL;
+ return nullptr;
}
ulist_resetList(values);
memcpy(en, &defaultKeywordValues, sizeof(UEnumeration));
@@ -778,7 +778,7 @@ ucal_getTimeZoneTransitionDate(const UCalendar* cal, UTimeZoneTransitionType typ
UDate base = ((Calendar*)cal)->getTime(*status);
const TimeZone& tz = ((Calendar*)cal)->getTimeZone();
const BasicTimeZone * btz = dynamic_cast<const BasicTimeZone *>(&tz);
- if (btz != NULL && U_SUCCESS(*status)) {
+ if (btz != nullptr && U_SUCCESS(*status)) {
TimeZoneTransition tzt;
UBool inclusive = (type == UCAL_TZ_TRANSITION_NEXT_INCLUSIVE || type == UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE);
UBool result = (type == UCAL_TZ_TRANSITION_NEXT || type == UCAL_TZ_TRANSITION_NEXT_INCLUSIVE)?
@@ -828,4 +828,28 @@ ucal_getTimeZoneIDForWindowsID(const UChar* winid, int32_t len, const char* regi
return resultLen;
}
+U_CAPI void U_EXPORT2 ucal_getTimeZoneOffsetFromLocal(
+ const UCalendar* cal,
+ UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status)
+{
+ if (U_FAILURE(*status)) {
+ return;
+ }
+ UDate date = ((Calendar*)cal)->getTime(*status);
+ if (U_FAILURE(*status)) {
+ return;
+ }
+ const TimeZone& tz = ((Calendar*)cal)->getTimeZone();
+ const BasicTimeZone* btz = dynamic_cast<const BasicTimeZone *>(&tz);
+ if (btz == nullptr) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ btz->getOffsetFromLocal(
+ date, nonExistingTimeOpt, duplicatedTimeOpt,
+ *rawOffset, *dstOffset, *status);
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/ucol_res.cpp b/Build/source/libs/icu/icu-src/source/i18n/ucol_res.cpp
index aa4027eb872..b277cf3b280 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/ucol_res.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/ucol_res.cpp
@@ -623,7 +623,7 @@ public:
virtual ~KeywordsSink();
virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
- UErrorCode &errorCode) {
+ UErrorCode &errorCode) override {
if (U_FAILURE(errorCode)) { return; }
ResourceTable collations = value.getTable(errorCode);
for (int32_t i = 0; collations.getKeyAndValue(i, key, value); ++i) {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/udat.cpp b/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
index ba44710ca0a..d9549d04c57 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
@@ -34,7 +34,7 @@ U_NAMESPACE_USE
/**
* Verify that fmt is a SimpleDateFormat. Invalid error if not.
* @param fmt the UDateFormat, definitely a DateFormat, maybe something else
- * @param status error code, will be set to failure if there is a familure or the fmt is NULL.
+ * @param status error code, will be set to failure if there is a failure or the fmt is NULL.
*/
static void verifyIsSimpleDateFormat(const UDateFormat* fmt, UErrorCode *status) {
if(U_SUCCESS(*status) &&
@@ -704,6 +704,10 @@ udat_getSymbols(const UDateFormat *fmt,
res = syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED);
break;
+ case UDAT_NARROW_QUARTERS:
+ res = syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW);
+ break;
+
case UDAT_STANDALONE_QUARTERS:
res = syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE);
break;
@@ -712,6 +716,10 @@ udat_getSymbols(const UDateFormat *fmt,
res = syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED);
break;
+ case UDAT_STANDALONE_NARROW_QUARTERS:
+ res = syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW);
+ break;
+
case UDAT_CYCLIC_YEARS_WIDE:
res = syms->getYearNames(count, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE);
break;
@@ -842,6 +850,10 @@ udat_countSymbols( const UDateFormat *fmt,
syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED);
break;
+ case UDAT_NARROW_QUARTERS:
+ syms->getQuarters(count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW);
+ break;
+
case UDAT_STANDALONE_QUARTERS:
syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE);
break;
@@ -850,6 +862,10 @@ udat_countSymbols( const UDateFormat *fmt,
syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED);
break;
+ case UDAT_STANDALONE_NARROW_QUARTERS:
+ syms->getQuarters(count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW);
+ break;
+
case UDAT_CYCLIC_YEARS_WIDE:
syms->getYearNames(count, DateFormatSymbols::FORMAT, DateFormatSymbols::WIDE);
break;
@@ -1049,6 +1065,13 @@ public:
}
static void
+ setNarrowQuarter(DateFormatSymbols *syms, int32_t index,
+ const UChar *value, int32_t valueLength, UErrorCode &errorCode)
+ {
+ setSymbol(syms->fNarrowQuarters, syms->fNarrowQuartersCount, index, value, valueLength, errorCode);
+ }
+
+ static void
setStandaloneQuarter(DateFormatSymbols *syms, int32_t index,
const UChar *value, int32_t valueLength, UErrorCode &errorCode)
{
@@ -1063,6 +1086,13 @@ public:
}
static void
+ setStandaloneNarrowQuarter(DateFormatSymbols *syms, int32_t index,
+ const UChar *value, int32_t valueLength, UErrorCode &errorCode)
+ {
+ setSymbol(syms->fStandaloneNarrowQuarters, syms->fStandaloneNarrowQuartersCount, index, value, valueLength, errorCode);
+ }
+
+ static void
setShortYearNames(DateFormatSymbols *syms, int32_t index,
const UChar *value, int32_t valueLength, UErrorCode &errorCode)
{
@@ -1179,6 +1209,10 @@ udat_setSymbols( UDateFormat *format,
DateFormatSymbolsSingleSetter::setShortQuarter(syms, index, value, valueLength, *status);
break;
+ case UDAT_NARROW_QUARTERS:
+ DateFormatSymbolsSingleSetter::setNarrowQuarter(syms, index, value, valueLength, *status);
+ break;
+
case UDAT_STANDALONE_QUARTERS:
DateFormatSymbolsSingleSetter::setStandaloneQuarter(syms, index, value, valueLength, *status);
break;
@@ -1187,6 +1221,10 @@ udat_setSymbols( UDateFormat *format,
DateFormatSymbolsSingleSetter::setStandaloneShortQuarter(syms, index, value, valueLength, *status);
break;
+ case UDAT_STANDALONE_NARROW_QUARTERS:
+ DateFormatSymbolsSingleSetter::setStandaloneNarrowQuarter(syms, index, value, valueLength, *status);
+ break;
+
case UDAT_CYCLIC_YEARS_ABBREVIATED:
DateFormatSymbolsSingleSetter::setShortYearNames(syms, index, value, valueLength, *status);
break;
@@ -1247,7 +1285,7 @@ udat_getContext(const UDateFormat* fmt, UDisplayContextType type, UErrorCode* st
/**
* Verify that fmt is a RelativeDateFormat. Invalid error if not.
* @param fmt the UDateFormat, definitely a DateFormat, maybe something else
- * @param status error code, will be set to failure if there is a familure or the fmt is NULL.
+ * @param status error code, will be set to failure if there is a failure or the fmt is NULL.
*/
static void verifyIsRelativeDateFormat(const UDateFormat* fmt, UErrorCode *status) {
if(U_SUCCESS(*status) &&
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h b/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
index 3a7b1a0ec23..e0da353f268 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
@@ -39,22 +39,22 @@ public:
virtual ~UIterCollationIterator();
- virtual void resetToOffset(int32_t newOffset);
+ virtual void resetToOffset(int32_t newOffset) override;
- virtual int32_t getOffset() const;
+ virtual int32_t getOffset() const override;
- virtual UChar32 nextCodePoint(UErrorCode &errorCode);
+ virtual UChar32 nextCodePoint(UErrorCode &errorCode) override;
- virtual UChar32 previousCodePoint(UErrorCode &errorCode);
+ virtual UChar32 previousCodePoint(UErrorCode &errorCode) override;
protected:
- virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode);
+ virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode) override;
- virtual UChar handleGetTrailSurrogate();
+ virtual UChar handleGetTrailSurrogate() override;
- virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
- virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
UCharIterator &iter;
};
@@ -71,22 +71,23 @@ public:
virtual ~FCDUIterCollationIterator();
- virtual void resetToOffset(int32_t newOffset);
+ virtual void resetToOffset(int32_t newOffset) override;
- virtual int32_t getOffset() const;
+ virtual int32_t getOffset() const override;
- virtual UChar32 nextCodePoint(UErrorCode &errorCode);
+ virtual UChar32 nextCodePoint(UErrorCode &errorCode) override;
- virtual UChar32 previousCodePoint(UErrorCode &errorCode);
+ virtual UChar32 previousCodePoint(UErrorCode &errorCode) override;
protected:
- virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode);
+ virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode) override;
- virtual UChar handleGetTrailSurrogate();
+ virtual UChar handleGetTrailSurrogate() override;
- virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode);
- virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
+
+ virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/umsg.cpp b/Build/source/libs/icu/icu-src/source/i18n/umsg.cpp
index 9a5344e0191..c2d5a9a1f5a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/umsg.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/umsg.cpp
@@ -68,7 +68,7 @@ u_formatMessage(const char *locale,
{
va_list ap;
int32_t actLen;
- //argument checking defered to subsequent method calls
+ //argument checking deferred to subsequent method calls
// start vararg processing
va_start(ap, status);
@@ -89,7 +89,7 @@ u_vformatMessage( const char *locale,
UErrorCode *status)
{
- //argument checking defered to subsequent method calls
+ //argument checking deferred to subsequent method calls
UMessageFormat *fmt = umsg_open(pattern,patternLength,locale,NULL,status);
int32_t retVal = umsg_vformat(fmt,result,resultLength,ap,status);
umsg_close(fmt);
@@ -108,7 +108,7 @@ u_formatMessageWithError(const char *locale,
{
va_list ap;
int32_t actLen;
- //argument checking defered to subsequent method calls
+ //argument checking deferred to subsequent method calls
// start vararg processing
va_start(ap, status);
@@ -130,7 +130,7 @@ u_vformatMessageWithError( const char *locale,
UErrorCode *status)
{
- //argument checking defered to subsequent method calls
+ //argument checking deferred to subsequent method calls
UMessageFormat *fmt = umsg_open(pattern,patternLength,locale,parseError,status);
int32_t retVal = umsg_vformat(fmt,result,resultLength,ap,status);
umsg_close(fmt);
@@ -152,7 +152,7 @@ u_parseMessage( const char *locale,
...)
{
va_list ap;
- //argument checking defered to subsequent method calls
+ //argument checking deferred to subsequent method calls
// start vararg processing
va_start(ap, status);
@@ -171,7 +171,7 @@ u_vparseMessage(const char *locale,
va_list ap,
UErrorCode *status)
{
- //argument checking defered to subsequent method calls
+ //argument checking deferred to subsequent method calls
UMessageFormat *fmt = umsg_open(pattern,patternLength,locale,NULL,status);
int32_t count = 0;
umsg_vparse(fmt,source,sourceLength,&count,ap,status);
@@ -190,7 +190,7 @@ u_parseMessageWithError(const char *locale,
{
va_list ap;
- //argument checking defered to subsequent method calls
+ //argument checking deferred to subsequent method calls
// start vararg processing
va_start(ap, status);
@@ -209,7 +209,7 @@ u_vparseMessageWithError(const char *locale,
UParseError *error,
UErrorCode* status)
{
- //argument checking defered to subsequent method calls
+ //argument checking deferred to subsequent method calls
UMessageFormat *fmt = umsg_open(pattern,patternLength,locale,error,status);
int32_t count = 0;
umsg_vparse(fmt,source,sourceLength,&count,ap,status);
@@ -369,8 +369,8 @@ umsg_format( const UMessageFormat *fmt,
{
va_list ap;
int32_t actLen;
- //argument checking defered to last method call umsg_vformat which
- //saves time when arguments are valid and we dont care when arguments are not
+ //argument checking deferred to last method call umsg_vformat which
+ //saves time when arguments are valid and we don't care when arguments are not
//since we return an error anyway
@@ -463,7 +463,7 @@ umsg_vformat( const UMessageFormat *fmt,
default:
// Unknown/unsupported argument type.
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
UnicodeString resultStr;
@@ -490,8 +490,8 @@ umsg_parse( const UMessageFormat *fmt,
...)
{
va_list ap;
- //argument checking defered to last method call umsg_vparse which
- //saves time when arguments are valid and we dont care when arguments are not
+ //argument checking deferred to last method call umsg_vparse which
+ //saves time when arguments are valid and we don't care when arguments are not
//since we return an error anyway
// start vararg processing
@@ -590,11 +590,11 @@ umsg_vparse(const UMessageFormat *fmt,
// support kObject. When MessageFormat is changed to
// understand MeasureFormats, modify this code to do the
// right thing. [alan]
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
// better not happen!
case Formattable::kArray:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unesctrn.h b/Build/source/libs/icu/icu-src/source/i18n/unesctrn.h
index 57dd8d32cf5..e905c5bc5f5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unesctrn.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unesctrn.h
@@ -77,12 +77,12 @@ class UnescapeTransliterator : public Transliterator {
/**
* Transliterator API.
*/
- virtual UnescapeTransliterator* clone() const;
+ virtual UnescapeTransliterator* clone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -101,7 +101,7 @@ class UnescapeTransliterator : public Transliterator {
* pos.contextLimit. Otherwise, assume the text is complete.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uni2name.cpp b/Build/source/libs/icu/icu-src/source/i18n/uni2name.cpp
index 41d5c931e40..904da0207bc 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uni2name.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/uni2name.cpp
@@ -81,7 +81,7 @@ void UnicodeNameTransliterator::handleTransliterate(Replaceable& text, UTransPos
return;
}
- // Accomodate the longest possible name plus padding
+ // Accommodate the longest possible name plus padding
char* buf = (char*) uprv_malloc(maxLen);
if (buf == NULL) {
offsets.start = offsets.limit;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uni2name.h b/Build/source/libs/icu/icu-src/source/i18n/uni2name.h
index 99309c8e0f8..1e01d784237 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uni2name.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/uni2name.h
@@ -48,12 +48,12 @@ class UnicodeNameTransliterator : public Transliterator {
/**
* Transliterator API.
*/
- virtual UnicodeNameTransliterator* clone() const;
+ virtual UnicodeNameTransliterator* clone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -72,7 +72,7 @@ class UnicodeNameTransliterator : public Transliterator {
* pos.contextLimit. Otherwise, assume the text is complete.
*/
virtual void handleTransliterate(Replaceable& text, UTransPosition& offset,
- UBool isIncremental) const;
+ UBool isIncremental) const override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
index edab16bd604..d0cdd817fba 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
@@ -44,7 +44,7 @@ typedef enum UAlphabeticIndexLabelType {
U_ALPHAINDEX_NORMAL = 0,
/**
- * Undeflow Label. The bucket with this label contains names
+ * Underflow Label. The bucket with this label contains names
* in scripts that sort before any of the bucket labels in this index.
* @stable ICU 4.8
*/
@@ -61,7 +61,7 @@ typedef enum UAlphabeticIndexLabelType {
U_ALPHAINDEX_INFLOW = 2,
/**
- * Overflow Label. Te bucket with this label contains names in scripts
+ * Overflow Label. The bucket with this label contains names in scripts
* that sort after all of the bucket labels in this index.
* @stable ICU 4.8
*/
@@ -647,7 +647,7 @@ public:
private:
/**
* No Copy constructor.
- * @internal
+ * @internal (private)
*/
AlphabeticIndex(const AlphabeticIndex &other);
@@ -658,15 +658,15 @@ private:
/**
* No Equality operators.
- * @internal
+ * @internal (private)
*/
- virtual UBool operator==(const AlphabeticIndex& other) const;
+ virtual bool operator==(const AlphabeticIndex& other) const;
/**
* Inequality operator.
- * @internal
+ * @internal (private)
*/
- virtual UBool operator!=(const AlphabeticIndex& other) const;
+ virtual bool operator!=(const AlphabeticIndex& other) const;
// Common initialization, for use from all constructors.
void init(const Locale *locale, UErrorCode &status);
@@ -723,7 +723,7 @@ private:
/**
* Holds all user records before they are distributed into buckets.
* Type of contents is (Record *)
- * @internal
+ * @internal (private)
*/
UVector *inputList_;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
index 7dd981abf93..250ea309279 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
@@ -49,7 +49,7 @@ public:
* @return clone, or nullptr if an error occurred
* @stable ICU 3.8
*/
- virtual BasicTimeZone* clone() const = 0;
+ virtual BasicTimeZone* clone() const override = 0;
/**
* Gets the first time zone transition after the base time.
@@ -84,7 +84,7 @@ public:
* changes will be ignored, except either of them is zero.
* For example, a transition from rawoffset 3:00/dstsavings 1:00
* to rawoffset 2:00/dstsavings 2:00 is excluded from the comparison,
- * but a transtion from rawoffset 2:00/dstsavings 1:00 to
+ * but a transition from rawoffset 2:00/dstsavings 1:00 to
* rawoffset 3:00/dstsavings 0:00 is included.
* @param ec Output param to filled in with a success or an error.
* @return true if the other time zone has the equivalent transitions in the
@@ -152,6 +152,17 @@ public:
virtual void getSimpleRulesNear(UDate date, InitialTimeZoneRule*& initial,
AnnualTimeZoneRule*& std, AnnualTimeZoneRule*& dst, UErrorCode& status) const;
+#ifndef U_FORCE_HIDE_DRAFT_API
+ /**
+ * Get time zone offsets from local wall time.
+ * @draft ICU 69
+ */
+ virtual void getOffsetFromLocal(
+ UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt, int32_t& rawOffset,
+ int32_t& dstOffset, UErrorCode& status) const;
+
+#endif /* U_FORCE_HIDE_DRAFT_API */
#ifndef U_HIDE_INTERNAL_API
/**
@@ -161,17 +172,17 @@ public:
enum {
kStandard = 0x01,
kDaylight = 0x03,
- kFormer = 0x04,
- kLatter = 0x0C
+ kFormer = 0x04, /* UCAL_TZ_LOCAL_FORMER */
+ kLatter = 0x0C /* UCAL_TZ_LOCAL_LATTER */
};
-#endif /* U_HIDE_INTERNAL_API */
/**
* Get time zone offsets from local wall time.
* @internal
*/
- virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
+ void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
+#endif /* U_HIDE_INTERNAL_API */
protected:
@@ -215,8 +226,11 @@ protected:
/**
* Gets the set of TimeZoneRule instances applicable to the specified time and after.
* @param start The start date used for extracting time zone rules
- * @param initial Receives the InitialTimeZone, always not NULL
- * @param transitionRules Receives the transition rules, could be NULL
+ * @param initial Output parameter, receives the InitialTimeZone.
+ * Always not nullptr (except in case of error)
+ * @param transitionRules Output parameter, a UVector of transition rules.
+ * May be nullptr, if there are no transition rules.
+ * The caller owns the returned vector; the UVector owns the rules.
* @param status Receives error status code
*/
void getTimeZoneRulesAfter(UDate start, InitialTimeZoneRule*& initial, UVector*& transitionRules,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
index cc84bb274de..c1bdf928203 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
@@ -47,6 +47,8 @@ U_NAMESPACE_BEGIN
class ICUServiceFactory;
+// Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API,
+// it is a return type for a virtual method (@internal)
/**
* @internal
*/
@@ -447,21 +449,21 @@ public:
* represented time, use equals() instead.
*
* @param that The Calendar object to be compared with.
- * @return True if the given Calendar is the same as this Calendar; false
+ * @return true if the given Calendar is the same as this Calendar; false
* otherwise.
* @stable ICU 2.0
*/
- virtual UBool operator==(const Calendar& that) const;
+ virtual bool operator==(const Calendar& that) const;
/**
* Compares the inequality of two Calendar objects.
*
* @param that The Calendar object to be compared with.
- * @return True if the given Calendar is not the same as this Calendar; false
+ * @return true if the given Calendar is not the same as this Calendar; false
* otherwise.
* @stable ICU 2.0
*/
- UBool operator!=(const Calendar& that) const {return !operator==(that);}
+ bool operator!=(const Calendar& that) const {return !operator==(that);}
/**
* Returns true if the given Calendar object is equivalent to this
@@ -1339,7 +1341,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const = 0;
+ virtual UClassID getDynamicClassID(void) const override = 0;
/**
* Returns the calendar type name string for this Calendar object.
@@ -1849,7 +1851,7 @@ private:
* @param startValue starting (least max) value of field
* @param endValue ending (greatest max) value of field
* @param status return type
- * @internal
+ * @internal (private)
*/
int32_t getActualHelper(UCalendarDateFields field, int32_t startValue, int32_t endValue, UErrorCode &status) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
index cb01fca2533..0e7ae186d4d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
@@ -251,7 +251,7 @@ public:
* @return a copy of this object
* @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments.
*/
- virtual ChoiceFormat* clone() const;
+ virtual ChoiceFormat* clone() const override;
/**
* Returns true if the given Format objects are semantically equal.
@@ -261,7 +261,7 @@ public:
* @return true if other is the same as this.
* @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments.
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
/**
* Sets the pattern.
@@ -375,7 +375,7 @@ public:
*/
virtual UnicodeString& format(double number,
UnicodeString& appendTo,
- FieldPosition& pos) const;
+ FieldPosition& pos) const override;
/**
* Formats an int32_t number using this object's choices.
*
@@ -389,7 +389,7 @@ public:
*/
virtual UnicodeString& format(int32_t number,
UnicodeString& appendTo,
- FieldPosition& pos) const;
+ FieldPosition& pos) const override;
/**
* Formats an int64_t number using this object's choices.
@@ -404,7 +404,7 @@ public:
*/
virtual UnicodeString& format(int64_t number,
UnicodeString& appendTo,
- FieldPosition& pos) const;
+ FieldPosition& pos) const override;
/**
* Formats an array of objects using this object's choices.
@@ -444,7 +444,7 @@ public:
*/
virtual void parse(const UnicodeString& text,
Formattable& result,
- ParsePosition& parsePosition) const;
+ ParsePosition& parsePosition) const override;
/**
* Returns a unique class ID POLYMORPHICALLY. Part of ICU's "poor man's RTTI".
@@ -454,7 +454,7 @@ public:
* other classes have different class IDs.
* @deprecated ICU 49 Use MessageFormat instead, with plural and select arguments.
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Returns the class ID for this class. This is useful only for
@@ -528,7 +528,7 @@ private:
const UnicodeString &source, int32_t sourceOffset);
/**
- * Some of the ChoiceFormat constructors do not have a UErrorCode paramater.
+ * Some of the ChoiceFormat constructors do not have a UErrorCode parameter.
* We need _some_ way to provide one for the MessagePattern constructor.
* Alternatively, the MessagePattern could be a pointer field, but that is
* not nice either.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
index aa0b08f5e73..4e68c6f1749 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
@@ -103,7 +103,7 @@ class UVector32;
* to reset the status, shifting pointers to either the end or the start of
* the string (reset() or setText()), or the specified position (setOffset()).
* Hence at the next call of next() or previous(), the first or last collation order,
-* or collation order at the spefcifieid position will be returned. If a change of
+* or collation order at the specified position will be returned. If a change of
* direction is done without one of these calls, the result is undefined.
* <p>
* The result of a forward iterate (next()) and reversed result of the backward
@@ -125,7 +125,7 @@ public:
enum {
/**
- * NULLORDER indicates that an error has occured while processing
+ * NULLORDER indicates that an error has occurred while processing
* @stable ICU 2.0
*/
NULLORDER = (int32_t)0xffffffff
@@ -156,7 +156,7 @@ public:
* @return true if "other" is the same as "this"
* @stable ICU 2.0
*/
- UBool operator==(const CollationElementIterator& other) const;
+ bool operator==(const CollationElementIterator& other) const;
/**
* Returns true if "other" is not the same as "this".
@@ -165,7 +165,7 @@ public:
* @return true if "other" is not the same as "this"
* @stable ICU 2.0
*/
- UBool operator!=(const CollationElementIterator& other) const;
+ bool operator!=(const CollationElementIterator& other) const;
/**
* Resets the cursor to the beginning of the string.
@@ -177,7 +177,7 @@ public:
* Gets the ordering priority of the next character in the string.
* @param status the error code status.
* @return the next character's ordering. otherwise returns NULLORDER if an
- * error has occured or if the end of string has been reached
+ * error has occurred or if the end of string has been reached
* @stable ICU 2.0
*/
int32_t next(UErrorCode& status);
@@ -186,7 +186,7 @@ public:
* Get the ordering priority of the previous collation element in the string.
* @param status the error code status.
* @return the previous element's ordering. otherwise returns NULLORDER if an
- * error has occured or if the start of string has been reached
+ * error has occurred or if the start of string has been reached
* @stable ICU 2.0
*/
int32_t previous(UErrorCode& status);
@@ -279,7 +279,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
index c750711fc15..9e0050ba6ce 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
@@ -253,7 +253,7 @@ public:
* @return true if other is the same as this.
* @stable ICU 2.0
*/
- virtual UBool operator==(const Collator& other) const;
+ virtual bool operator==(const Collator& other) const;
/**
* Returns true if "other" is not the same as "this".
@@ -262,7 +262,7 @@ public:
* @return true if other is not the same as this.
* @stable ICU 2.0
*/
- virtual UBool operator!=(const Collator& other) const;
+ virtual bool operator!=(const Collator& other) const;
/**
* Makes a copy of this object.
@@ -864,7 +864,7 @@ public:
* IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const = 0;
+ virtual UClassID getDynamicClassID(void) const override = 0;
/**
* Universal attribute setter
@@ -1094,7 +1094,7 @@ protected:
/**
* Default constructor.
* Constructor is different from the old default Collator constructor.
- * The task for determing the default collation strength and normalization
+ * The task for determining the default collation strength and normalization
* mode is left to the child class.
* @stable ICU 2.0
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
index e4c35c18111..818b11ae5bd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
@@ -81,7 +81,7 @@ class U_I18N_API CurrencyAmount: public Measure {
* have the same class as returned by getDynamicClassID().
* @stable ICU 3.0
*/
- virtual CurrencyAmount* clone() const;
+ virtual CurrencyAmount* clone() const override;
/**
* Destructor
@@ -97,7 +97,7 @@ class U_I18N_API CurrencyAmount: public Measure {
* different class IDs.
* @stable ICU 3.0
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* Returns the class ID for this class. This is used to compare to
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/currpinf.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/currpinf.h
index fb0b2a7dbc0..e3ca34b26f2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/currpinf.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/currpinf.h
@@ -92,7 +92,7 @@ public:
*
* @stable ICU 4.2
*/
- UBool operator==(const CurrencyPluralInfo& info) const;
+ bool operator==(const CurrencyPluralInfo& info) const;
/**
@@ -100,7 +100,7 @@ public:
*
* @stable ICU 4.2
*/
- UBool operator!=(const CurrencyPluralInfo& info) const;
+ bool operator!=(const CurrencyPluralInfo& info) const;
/**
@@ -184,7 +184,7 @@ public:
*
* @stable ICU 4.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -259,7 +259,7 @@ private:
};
-inline UBool
+inline bool
CurrencyPluralInfo::operator!=(const CurrencyPluralInfo& info) const {
return !operator==(info);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
index 9b608fdeef2..8da3f1ffd87 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
@@ -94,7 +94,7 @@ class U_I18N_API CurrencyUnit: public MeasureUnit {
* have the same class as returned by getDynamicClassID().
* @stable ICU 3.0
*/
- virtual CurrencyUnit* clone() const;
+ virtual CurrencyUnit* clone() const override;
/**
* Destructor
@@ -110,7 +110,7 @@ class U_I18N_API CurrencyUnit: public MeasureUnit {
* different class IDs.
* @stable ICU 3.0
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* Returns the class ID for this class. This is used to compare to
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/datefmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/datefmt.h
index f106e821a76..027fb1712f4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/datefmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/datefmt.h
@@ -139,7 +139,7 @@ template class U_I18N_API EnumSet<UDateFormatBooleanAttribute,
* more control over the format or parsing, (or want to give your users more
* control), you can try casting the DateFormat you get from the factory methods
* to a SimpleDateFormat. This will work for the majority of countries; just
- * remember to chck getDynamicClassID() before carrying out the cast.
+ * remember to check getDynamicClassID() before carrying out the cast.
* <P>
* You can also use forms of the parse and format methods with ParsePosition and
* FieldPosition to allow you to
@@ -229,13 +229,13 @@ public:
* @return clone, or nullptr if an error occurred
* @stable ICU 2.0
*/
- virtual DateFormat* clone() const = 0;
+ virtual DateFormat* clone() const override = 0;
/**
* Equality operator. Returns true if the two formats have the same behavior.
* @stable ICU 2.0
*/
- virtual UBool operator==(const Format&) const;
+ virtual bool operator==(const Format&) const override;
using Format::format;
@@ -257,7 +257,7 @@ public:
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPosition& pos,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Format an object to produce a string. This method handles Formattable
@@ -277,7 +277,7 @@ public:
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPositionIterator* posIter,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Formats a date into a date/time string. This is an abstract method which
* concrete subclasses must implement.
@@ -291,12 +291,12 @@ public:
* statfieldPositionus.getEndIndex will be set to 0 and 4, respectively.
* <P> Notice
* that if the same time field appears more than once in a pattern, the status will
- * be set for the first occurence of that time field. For instance,
+ * be set for the first occurrence of that time field. For instance,
* formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)"
* using the pattern "h a z (zzzz)" and the alignment field
* DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and
* fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first
- * occurence of the timezone pattern character 'z'.
+ * occurrence of the timezone pattern character 'z'.
*
* @param cal Calendar set to the date and time to be formatted
* into a date/time string. When the calendar type is
@@ -349,12 +349,12 @@ public:
* statfieldPositionus.getEndIndex will be set to 0 and 4, respectively.
* <P> Notice
* that if the same time field appears more than once in a pattern, the status will
- * be set for the first occurence of that time field. For instance,
+ * be set for the first occurrence of that time field. For instance,
* formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)"
* using the pattern "h a z (zzzz)" and the alignment field
* DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and
* fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first
- * occurence of the timezone pattern character 'z'.
+ * occurrence of the timezone pattern character 'z'.
*
* @param date UDate to be formatted into a date/time string.
* @param appendTo Output parameter to receive result.
@@ -523,7 +523,7 @@ public:
*/
virtual void parseObject(const UnicodeString& source,
Formattable& result,
- ParsePosition& parse_pos) const;
+ ParsePosition& parse_pos) const override;
/**
* Create a default date/time formatter that uses the SHORT style for both
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
index b2c39a0236e..c5f7404416f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
@@ -169,8 +169,14 @@ public:
* @stable ICU 54
*/
kExponentMultiplicationSymbol,
+#ifndef U_HIDE_INTERNAL_API
+ /** Approximately sign.
+ * @internal
+ */
+ kApproximatelySignSymbol,
+#endif /* U_HIDE_INTERNAL_API */
/** count symbol constants */
- kFormatSymbolCount = kNineDigitSymbol + 2
+ kFormatSymbolCount = kExponentMultiplicationSymbol + 2
};
/**
@@ -255,7 +261,7 @@ public:
* @return true if another object is semantically equal to this one.
* @stable ICU 2.0
*/
- UBool operator==(const DecimalFormatSymbols& other) const;
+ bool operator==(const DecimalFormatSymbols& other) const;
/**
* Return true if another object is semantically unequal to this one.
@@ -264,7 +270,7 @@ public:
* @return true if another object is semantically unequal to this one.
* @stable ICU 2.0
*/
- UBool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
+ bool operator!=(const DecimalFormatSymbols& other) const { return !operator==(other); }
/**
* Get one of the format symbols by its enum constant.
@@ -284,12 +290,12 @@ public:
*
* @param symbol Constant to indicate a number format symbol.
* @param value value of the format symbol
- * @param propogateDigits If false, setting the zero digit will not automatically set 1-9.
+ * @param propagateDigits If false, setting the zero digit will not automatically set 1-9.
* The default behavior is to automatically set 1-9 if zero is being set and the value
* it is being set to corresponds to a known Unicode zero digit.
* @stable ICU 2.0
*/
- void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propogateDigits);
+ void setSymbol(ENumberFormatSymbol symbol, const UnicodeString &value, const UBool propagateDigits);
#ifndef U_HIDE_INTERNAL_API
/**
@@ -353,7 +359,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -419,7 +425,7 @@ public:
*
* This is not currently stable API, but if you think it should be stable,
* post a comment on the following ticket and the ICU team will take a look:
- * http://bugs.icu-project.org/trac/ticket/13580
+ * https://unicode-org.atlassian.net/browse/ICU-13580
*
* @param symbol Constant to indicate a number format symbol.
* @return the format symbol by the param 'symbol'
@@ -436,7 +442,7 @@ public:
*
* This is not currently stable API, but if you think it should be stable,
* post a comment on the following ticket and the ICU team will take a look:
- * http://bugs.icu-project.org/trac/ticket/13580
+ * https://unicode-org.atlassian.net/browse/ICU-13580
*
* @param digit The digit, an integer between 0 and 9 inclusive.
* If outside the range 0 to 9, the zero digit is returned.
@@ -446,7 +452,7 @@ public:
inline const UnicodeString& getConstDigitSymbol(int32_t digit) const;
/**
- * Returns that pattern stored in currecy info. Internal API for use by NumberFormat API.
+ * Returns that pattern stored in currency info. Internal API for use by NumberFormat API.
* @internal
*/
inline const char16_t* getCurrencyPattern(void) const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
index b9be18f768c..ab6cd14e187 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
@@ -909,7 +909,7 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* @return true if the given Format objects are semantically equal.
* @stable ICU 2.0
*/
- UBool operator==(const Format& other) const U_OVERRIDE;
+ bool operator==(const Format& other) const U_OVERRIDE;
using NumberFormat::format;
@@ -1831,13 +1831,13 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* This means a minimum of 2 integer digits, 1 fraction digit, and
* a maximum of 2 fraction digits.
* <pre>
- * . Example: "#,#00.0#;(#,#00.0#)" for negatives in parantheses.
+ * . Example: "#,#00.0#;(#,#00.0#)" for negatives in parentheses.
* </pre>
* In negative patterns, the minimum and maximum counts are ignored;
* these are presumed to be set in the positive pattern.
*
* @param pattern The pattern to be applied.
- * @param parseError Struct to recieve information on position
+ * @param parseError Struct to receive information on position
* of error if an error is encountered
* @param status Output param set to success/failure code on
* exit. If the pattern is invalid, this will be
@@ -1873,13 +1873,13 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* This means a minimum of 2 integer digits, 1 fraction digit, and
* a maximum of 2 fraction digits.
*
- * Example: "#,#00.0#;(#,#00.0#)" for negatives in parantheses.
+ * Example: "#,#00.0#;(#,#00.0#)" for negatives in parentheses.
*
* In negative patterns, the minimum and maximum counts are ignored;
* these are presumed to be set in the positive pattern.
*
* @param pattern The localized pattern to be applied.
- * @param parseError Struct to recieve information on position
+ * @param parseError Struct to receive information on position
* of error if an error is encountered
* @param status Output param set to success/failure code on
* exit. If the pattern is invalid, this will be
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
index 69f9f9759ec..200b3a6ef17 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
@@ -174,7 +174,7 @@ public:
* @return true if other is semantically equal to this.
* @stable ICU 2.0
*/
- UBool operator==(const DateFormatSymbols& other) const;
+ bool operator==(const DateFormatSymbols& other) const;
/**
* Return true if another object is semantically unequal to this one.
@@ -183,7 +183,7 @@ public:
* @return true if other is semantically unequal to this.
* @stable ICU 2.0
*/
- UBool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
+ bool operator!=(const DateFormatSymbols& other) const { return !operator==(other); }
/**
* Gets abbreviated era strings. For example: "AD" and "BC".
@@ -388,8 +388,7 @@ public:
* Gets quarter strings by width and context. For example: "1st Quarter", "2nd Quarter", etc.
* @param count Filled in with length of the array.
* @param context The formatting context, either FORMAT or STANDALONE
- * @param width The width of returned strings, either WIDE or ABBREVIATED. There
- * are no NARROW quarters.
+ * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW.
* @return the quarter strings. (DateFormatSymbols retains ownership.)
* @stable ICU 3.6
*/
@@ -401,8 +400,7 @@ public:
* @param quarters The new quarter strings. (not adopted; caller retains ownership)
* @param count Filled in with length of the array.
* @param context The formatting context, either FORMAT or STANDALONE
- * @param width The width of returned strings, either WIDE or ABBREVIATED. There
- * are no NARROW quarters.
+ * @param width The width of returned strings, either WIDE, ABBREVIATED, or NARROW.
* @stable ICU 3.6
*/
void setQuarters(const UnicodeString* quarters, int32_t count, DtContextType context, DtWidthType width);
@@ -554,7 +552,7 @@ public:
/**
* Sets timezone strings. These strings are stored in a 2-dimensional array.
* <p><b>Note:</b> SimpleDateFormat no longer use the zone strings stored in
- * a DateFormatSymbols. Therefore, the time zone strings set by this mthod
+ * a DateFormatSymbols. Therefore, the time zone strings set by this method
* have no effects in an instance of SimpleDateFormat for formatting time
* zones.
* @param strings The timezone strings as a 2-d array to be copied. (not adopted; caller retains ownership)
@@ -630,7 +628,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -776,6 +774,13 @@ private:
int32_t fShortQuartersCount;
/**
+ * Narrow quarters. For example: "1", "2", etc.
+ * (In many, but not all, locales, this is the same as "Q", but there are locales for which this isn't true.)
+ */
+ UnicodeString *fNarrowQuarters;
+ int32_t fNarrowQuartersCount;
+
+ /**
* Standalone quarter strings. For example: "1st quarter", "2nd quarter", etc.
*/
UnicodeString *fStandaloneQuarters;
@@ -788,6 +793,13 @@ private:
int32_t fStandaloneShortQuartersCount;
/**
+ * Standalone narrow quarter strings. For example: "1", "2", etc.
+ * (In many, but not all, locales, this is the same as "q", but there are locales for which this isn't true.)
+ */
+ UnicodeString *fStandaloneNarrowQuarters;
+ int32_t fStandaloneNarrowQuartersCount;
+
+ /**
* All leap month patterns, for example "{0}bis".
*/
UnicodeString *fLeapMonthPatterns;
@@ -926,7 +938,7 @@ private:
* Copy or alias an array in another object, as appropriate.
*
* @param dstArray the copy destination array.
- * @param dstCount fill in with the lenth of 'dstArray'.
+ * @param dstCount fill in with the length of 'dstArray'.
* @param srcArray the source array to be copied.
* @param srcCount the length of items to be copied from the 'srcArray'.
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
index f45e68038ac..85a1b365d83 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
@@ -434,7 +434,7 @@ public:
* @return A copy of the object.
* @stable ICU 4.0
*/
- virtual DateIntervalFormat* clone() const;
+ virtual DateIntervalFormat* clone() const override;
/**
* Return true if the given Format objects are semantically equal. Objects
@@ -443,7 +443,7 @@ public:
* @return true if the given Format objects are semantically equal.
* @stable ICU 4.0
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
/**
* Return true if the given Format objects are not semantically equal.
@@ -452,7 +452,7 @@ public:
* @return true if the given Format objects are not semantically equal.
* @stable ICU 4.0
*/
- UBool operator!=(const Format& other) const;
+ bool operator!=(const Format& other) const;
using Format::format;
@@ -479,7 +479,7 @@ public:
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPosition& fieldPosition,
- UErrorCode& status) const ;
+ UErrorCode& status) const override;
@@ -595,7 +595,7 @@ public:
*/
virtual void parseObject(const UnicodeString& source,
Formattable& result,
- ParsePosition& parse_pos) const;
+ ParsePosition& parse_pos) const override;
/**
@@ -652,7 +652,6 @@ public:
*/
virtual void setTimeZone(const TimeZone& zone);
-#ifndef U_FORCE_HIDE_DRAFT_API
/**
* Set a particular UDisplayContext value in the formatter, such as
* UDISPCTX_CAPITALIZATION_FOR_STANDALONE. This causes the formatted
@@ -663,7 +662,7 @@ public:
* @param status Input/output status. If at entry this indicates a failure
* status, the function will do nothing; otherwise this will be
* updated with any new status from the function.
- * @draft ICU 68
+ * @stable ICU 68
*/
virtual void setContext(UDisplayContext value, UErrorCode& status);
@@ -675,10 +674,9 @@ public:
* status, the function will do nothing; otherwise this will be
* updated with any new status from the function.
* @return The UDisplayContextValue for the specified type.
- * @draft ICU 68
+ * @stable ICU 68
*/
virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
-#endif // U_FORCE_HIDE_DRAFT_API
/**
* Return the class ID for this class. This is useful only for comparing to
@@ -704,7 +702,7 @@ public:
* other classes have different class IDs.
* @stable ICU 4.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
protected:
@@ -742,7 +740,7 @@ private:
* Whether the first date in interval pattern is later date or not.
* Fallback format set the default ordering.
* And for a particular interval pattern, the order can be
- * overriden by prefixing the interval pattern with "latestFirst:" or
+ * overridden by prefixing the interval pattern with "latestFirst:" or
* "earliestFirst:"
* For example, given 2 date, Jan 10, 2007 to Feb 10, 2007.
* if the fallback format is "{0} - {1}",
@@ -1199,7 +1197,7 @@ private:
UDisplayContext fCapitalizationContext;
};
-inline UBool
+inline bool
DateIntervalFormat::operator!=(const Format& other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
index e55bea83537..d8de6a75ad5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
@@ -45,7 +45,7 @@ U_NAMESPACE_BEGIN
* <P>
* For power users, who want to create their own date interval patterns,
* or want to re-set date interval patterns, they could do so by
- * directly creating DateIntervalInfo and manupulating it.
+ * directly creating DateIntervalInfo and manipulating it.
*
* <P>
* Logically, the interval patterns are mappings
@@ -114,7 +114,7 @@ U_NAMESPACE_BEGIN
* the first date in the interval pattern for this locale is earlier date.
* If the fallback format is &quot;{1} - {0}&quot;, it means the first date is the
* later date.
- * For a particular interval pattern, the default order can be overriden
+ * For a particular interval pattern, the default order can be overridden
* by prefixing &quot;latestFirst:&quot; or &quot;earliestFirst:&quot; to the interval pattern.
* For example, if the fallback format is &quot;{0}-{1}&quot;,
* but for skeleton &quot;yMMMd&quot;, the interval pattern when day is different is
@@ -214,7 +214,7 @@ public:
* @return true if other is semantically equal to this.
* @stable ICU 4.0
*/
- virtual UBool operator==(const DateIntervalInfo& other) const;
+ virtual bool operator==(const DateIntervalInfo& other) const;
/**
* Return true if another object is semantically unequal to this one.
@@ -223,7 +223,7 @@ public:
* @return true if other is semantically unequal to this.
* @stable ICU 4.0
*/
- UBool operator!=(const DateIntervalInfo& other) const;
+ bool operator!=(const DateIntervalInfo& other) const;
@@ -319,7 +319,7 @@ public:
*
* @stable ICU 4.0
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -407,7 +407,7 @@ public:
* and the best match skeleton.
*
* TODO (xji): set field weight or
- * isolate the funtionality in DateTimePatternGenerator
+ * isolate the functionality in DateTimePatternGenerator
* @param skeleton input skeleton
* @param bestMatchDistanceInfo the difference between input skeleton
* and best match skeleton.
@@ -509,7 +509,7 @@ public:
};// end class DateIntervalInfo
-inline UBool
+inline bool
DateIntervalInfo::operator!=(const DateIntervalInfo& other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
index 828c0a9854b..250a0e089fe 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
@@ -120,7 +120,7 @@ public:
* @return true if other is semantically equal to this.
* @stable ICU 3.8
*/
- UBool operator==(const DateTimePatternGenerator& other) const;
+ bool operator==(const DateTimePatternGenerator& other) const;
/**
* Return true if another object is semantically unequal to this one.
@@ -129,7 +129,7 @@ public:
* @return true if other is semantically unequal to this.
* @stable ICU 3.8
*/
- UBool operator!=(const DateTimePatternGenerator& other) const;
+ bool operator!=(const DateTimePatternGenerator& other) const;
/**
* Utility to return a unique skeleton from a given pattern. For example,
@@ -202,7 +202,7 @@ public:
/**
* Adds a pattern to the generator. If the pattern has the same skeleton as
* an existing pattern, and the override parameter is set, then the previous
- * value is overriden. Otherwise, the previous value is retained. In either
+ * value is overridden. Otherwise, the previous value is retained. In either
* case, the conflicting status is set and previous vale is stored in
* conflicting pattern.
* <p>
@@ -492,7 +492,6 @@ public:
#if !UCONFIG_NO_FORMATTING
-#ifndef U_HIDE_DRAFT_API
/**
* Get the default hour cycle for a locale. Uses the locale that the
* DateTimePatternGenerator was initially created with.
@@ -503,10 +502,9 @@ public:
* which must not indicate a failure before the function call.
* Set to U_UNSUPPORTED_ERROR if used on an empty instance.
* @return the default hour cycle.
- * @draft ICU 67
+ * @stable ICU 67
*/
UDateFormatHourCycle getDefaultHourCycle(UErrorCode& status) const;
-#endif /* U_HIDE_DRAFT_API */
#endif /* #if !UCONFIG_NO_FORMATTING */
@@ -515,7 +513,7 @@ public:
*
* @stable ICU 3.8
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtrule.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtrule.h
index adab8967f63..19e94bc981c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/dtrule.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/dtrule.h
@@ -40,11 +40,11 @@ public:
enum DateRuleType {
DOM = 0, /**< The exact day of month,
for example, March 11. */
- DOW, /**< The Nth occurence of the day of week,
+ DOW, /**< The Nth occurrence of the day of week,
for example, 2nd Sunday in March. */
- DOW_GEQ_DOM, /**< The first occurence of the day of week on or after the day of monnth,
+ DOW_GEQ_DOM, /**< The first occurrence of the day of week on or after the day of monnth,
for example, first Sunday on or after March 8. */
- DOW_LEQ_DOM /**< The last occurence of the day of week on or before the day of month,
+ DOW_LEQ_DOM /**< The last occurrence of the day of week on or before the day of month,
for example, first Sunday on or before March 14. */
};
@@ -74,7 +74,7 @@ public:
int32_t millisInDay, TimeRuleType timeType);
/**
- * Constructs a <code>DateTimeRule</code> by the day of week and its oridinal
+ * Constructs a <code>DateTimeRule</code> by the day of week and its ordinal
* number and the time rule. The date rule type for an instance created
* by this constructor is <code>DOW</code>.
*
@@ -144,7 +144,7 @@ public:
* @return true if the given DateTimeRule objects are semantically equal.
* @stable ICU 3.8
*/
- UBool operator==(const DateTimeRule& that) const;
+ bool operator==(const DateTimeRule& that) const;
/**
* Return true if the given DateTimeRule objects are semantically unequal. Objects
@@ -153,7 +153,7 @@ public:
* @return true if the given DateTimeRule objects are semantically unequal.
* @stable ICU 3.8
*/
- UBool operator!=(const DateTimeRule& that) const;
+ bool operator!=(const DateTimeRule& that) const;
/**
* Gets the date rule type, such as <code>DOM</code>
@@ -194,7 +194,7 @@ public:
int32_t getRuleDayOfWeek(void) const;
/**
- * Gets the ordinal number of the occurence of the day of week
+ * Gets the ordinal number of the occurrence of the day of week
* in the month. When the date rule type is not <code>DOW</code>,
* the value is always 0.
* @return The rule day of week ordinal number in the month.
@@ -243,7 +243,7 @@ public:
* other classes have different class IDs.
* @stable ICU 3.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
index ea0a23b13ec..b985f3b2f76 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
@@ -164,7 +164,7 @@ public:
* @return true if the two field positions are equal, false otherwise.
* @stable ICU 2.0
*/
- UBool operator==(const FieldPosition& that) const;
+ bool operator==(const FieldPosition& that) const;
/**
* Equality operator.
@@ -172,7 +172,7 @@ public:
* @return true if the two field positions are not equal, false otherwise.
* @stable ICU 2.0
*/
- UBool operator!=(const FieldPosition& that) const;
+ bool operator!=(const FieldPosition& that) const;
/**
* Clone this object.
@@ -236,7 +236,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -274,7 +274,7 @@ FieldPosition::operator=(const FieldPosition& copy)
return *this;
}
-inline UBool
+inline bool
FieldPosition::operator==(const FieldPosition& copy) const
{
return (fField == copy.fField &&
@@ -282,7 +282,7 @@ FieldPosition::operator==(const FieldPosition& copy) const
fBeginIndex == copy.fBeginIndex);
}
-inline UBool
+inline bool
FieldPosition::operator!=(const FieldPosition& copy) const
{
return !operator==(copy);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
index 3a090393ac4..e1c6dec35e4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
@@ -182,7 +182,7 @@ public:
* @return true if other are equal to this, false otherwise.
* @stable ICU 2.0
*/
- UBool operator==(const Formattable &other) const;
+ bool operator==(const Formattable &other) const;
/**
* Equality operator.
@@ -190,7 +190,7 @@ public:
* @return true if other are unequal to this, false otherwise.
* @stable ICU 2.0
*/
- UBool operator!=(const Formattable& other) const
+ bool operator!=(const Formattable& other) const
{ return !operator==(other); }
/**
@@ -294,7 +294,7 @@ public:
/**
* Gets the double value of this object. If this object is of type
- * long, int64 or Decimal Number then a conversion is peformed, with
+ * long, int64 or Decimal Number then a conversion is performed, with
* possible loss of precision. If the type is kObject and the
* object is a Measure, then the result of
* getNumber().getDouble(status) is returned. If this object is
@@ -320,7 +320,7 @@ public:
* as appropriate, is returned and the status is set to
* U_INVALID_FORMAT_ERROR. If this object is of type kInt64 and
* it fits within a long, then no precision is lost. If it is of
- * type kDouble, then a conversion is peformed, with
+ * type kDouble, then a conversion is performed, with
* truncation of any fractional part. If the type is kObject and
* the object is a Measure, then the result of
* getNumber().getLong(status) is returned. If this object is
@@ -346,7 +346,7 @@ public:
* the maximum or minimum int64 value, as appropriate, is returned
* and the status is set to U_INVALID_FORMAT_ERROR. If the
* magnitude fits in an int64, then a casting conversion is
- * peformed, with truncation of any fractional part. If the type
+ * performed, with truncation of any fractional part. If the type
* is kObject and the object is a Measure, then the result of
* getNumber().getDouble(status) is returned. If this object is
* neither a numeric type nor a Measure, then 0 is returned and
@@ -479,7 +479,7 @@ public:
* the full precision and range of the original input, unconstrained by
* the limits of a double floating point or a 64 bit int.
*
- * This function is not thread safe, and therfore is not declared const,
+ * This function is not thread safe, and therefore is not declared const,
* even though it is logically const.
*
* Possible errors include U_MEMORY_ALLOCATION_ERROR, and
@@ -587,7 +587,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/format.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/format.h
index 96883a81a2e..a21e61ad56d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/format.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/format.h
@@ -88,7 +88,7 @@ U_NAMESPACE_BEGIN
* 0xFFFD is returned.
* <P>
* If there is no match when parsing, a parse failure UErrorCode is
- * retured for methods which take no ParsePosition. For the method
+ * returned for methods which take no ParsePosition. For the method
* that takes a ParsePosition, the index parameter is left unchanged.
* <P>
* <em>User subclasses are not supported.</em> While clients may write
@@ -111,7 +111,7 @@ public:
* Objects of different subclasses are considered unequal.
* @stable ICU 2.0
*/
- virtual UBool operator==(const Format& other) const = 0;
+ virtual bool operator==(const Format& other) const = 0;
/**
* Return true if the given Format objects are not semantically
@@ -120,7 +120,7 @@ public:
* @return Return true if the given Format objects are not semantically.
* @stable ICU 2.0
*/
- UBool operator!=(const Format& other) const { return !operator==(other); }
+ bool operator!=(const Format& other) const { return !operator==(other); }
/**
* Clone this object polymorphically. The caller is responsible
@@ -288,7 +288,7 @@ protected:
* Simple function for initializing a UParseError from a UnicodeString.
*
* @param pattern The pattern to copy into the parseError
- * @param pos The position in pattern where the error occured
+ * @param pos The position in pattern where the error occurred
* @param parseError The UParseError object to fill in
* @stable ICU 2.4
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h
index 87e811ea232..0e38d0b78b3 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h
@@ -84,7 +84,7 @@ public:
* equal array of run values.
* @stable ICU 4.4
*/
- UBool operator==(const FieldPositionIterator&) const;
+ bool operator==(const FieldPositionIterator&) const;
/**
* Returns the complement of the result of operator==
@@ -92,7 +92,7 @@ public:
* @return the complement of the result of operator==
* @stable ICU 4.4
*/
- UBool operator!=(const FieldPositionIterator& rhs) const { return !operator==(rhs); }
+ bool operator!=(const FieldPositionIterator& rhs) const { return !operator==(rhs); }
/**
* If the current position is valid, updates the FieldPosition values, advances the iterator,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
index e5e6df17fda..4c2be18251f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
@@ -78,9 +78,9 @@ U_NAMESPACE_BEGIN
* \code
* // get the supported ids for GMT-08:00 (Pacific Standard Time)
* UErrorCode success = U_ZERO_ERROR;
- * const StringEnumeration *ids = TimeZone::createEnumeration(-8 * 60 * 60 * 1000);
+ * const StringEnumeration *ids = TimeZone::createEnumeration(-8 * 60 * 60 * 1000, success);
* // if no ids were returned, something is wrong. get out.
- * if (ids == 0 || ids->count(success) == 0) {
+ * if (U_FAILURE(success)) {
* return;
* }
*
@@ -141,7 +141,7 @@ U_NAMESPACE_BEGIN
* cout << "DST_OFFSET: " << (calendar->get( UCAL_DST_OFFSET, success )/(60*60*1000)) << endl; // in hours
*
* if (U_FAILURE(success)) {
- * cout << "An error occured. success=" << u_errorName(success) << endl;
+ * cout << "An error occurred. success=" << u_errorName(success) << endl;
* }
*
* delete ids;
@@ -303,7 +303,7 @@ public:
* @return return a polymorphic copy of this calendar.
* @stable ICU 2.0
*/
- virtual GregorianCalendar* clone() const;
+ virtual GregorianCalendar* clone() const override;
/**
* Sets the GregorianCalendar change date. This is the point when the switch from
@@ -350,7 +350,7 @@ public:
* @param other the Calendar to be compared with this Calendar
* @stable ICU 2.4
*/
- virtual UBool isEquivalentTo(const Calendar& other) const;
+ virtual UBool isEquivalentTo(const Calendar& other) const override;
#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
@@ -364,7 +364,7 @@ public:
* an error status.
* @deprecated ICU 2.6. Use roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) instead.
*/
- virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
+ virtual void roll(EDateFields field, int32_t amount, UErrorCode& status) override;
#endif // U_FORCE_HIDE_DEPRECATED_API
/**
@@ -378,7 +378,7 @@ public:
* an error status.
* @stable ICU 2.6.
*/
- virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
+ virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status) override;
#ifndef U_HIDE_DEPRECATED_API
/**
@@ -409,7 +409,7 @@ public:
* @return the minimum value that this field could have, given the current date.
* @stable ICU 3.0
*/
- int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
+ int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const override;
#ifndef U_HIDE_DEPRECATED_API
/**
@@ -434,7 +434,7 @@ public:
* @return the maximum value that this field could have, given the current date.
* @stable ICU 2.6
*/
- virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
+ virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const override;
/**
* (Overrides Calendar) Return true if the current date for this Calendar is in
@@ -445,7 +445,7 @@ public:
* false, otherwise.
* @stable ICU 2.0
*/
- virtual UBool inDaylightTime(UErrorCode& status) const;
+ virtual UBool inDaylightTime(UErrorCode& status) const override;
public:
@@ -459,7 +459,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
@@ -484,7 +484,7 @@ public:
* @return legacy calendar type name string
* @stable ICU 49
*/
- virtual const char * getType() const;
+ virtual const char * getType() const override;
private:
GregorianCalendar(); // default constructor not implemented
@@ -512,7 +512,7 @@ public:
* @internal
*/
virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
- UBool useMonth) const;
+ UBool useMonth) const override;
/**
* Subclasses may override this. This method calls
@@ -522,7 +522,7 @@ public:
* @return julian day specified by calendar fields.
* @internal
*/
- virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ;
+ virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) override;
/**
* Return the number of days in the given month of the given extended
@@ -531,7 +531,7 @@ public:
* implementation than the default implementation in Calendar.
* @internal
*/
- virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
+ virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const override;
/**
* Return the number of days in the given extended year of this
@@ -540,7 +540,7 @@ public:
* default implementation in Calendar.
* @stable ICU 2.0
*/
- virtual int32_t handleGetYearLength(int32_t eyear) const;
+ virtual int32_t handleGetYearLength(int32_t eyear) const override;
/**
* return the length of the given month.
@@ -615,7 +615,7 @@ public:
* <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
* @internal
*/
- virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
+ virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const override;
/**
* Return the extended year defined by the current fields. This will
@@ -625,7 +625,7 @@ public:
* @return the extended year
* @internal
*/
- virtual int32_t handleGetExtendedYear();
+ virtual int32_t handleGetExtendedYear() override;
/**
* Subclasses may override this to convert from week fields
@@ -635,7 +635,7 @@ public:
* @return the extended year, UCAL_EXTENDED_YEAR
* @internal
*/
- virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
+ virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy) override;
/**
@@ -653,7 +653,7 @@ public:
* a calendar with the specified Julian/Gregorian cutover date.
* @internal
*/
- virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
+ virtual void handleComputeFields(int32_t julianDay, UErrorCode &status) override;
private:
/**
@@ -759,19 +759,19 @@ public:
* @return true if this calendar has the notion of a default century
* @internal
*/
- virtual UBool haveDefaultCentury() const;
+ virtual UBool haveDefaultCentury() const override;
/**
* @return the start of the default century
* @internal
*/
- virtual UDate defaultCenturyStart() const;
+ virtual UDate defaultCenturyStart() const override;
/**
* @return the beginning year of the default century
* @internal
*/
- virtual int32_t defaultCenturyStartYear() const;
+ virtual int32_t defaultCenturyStartYear() const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h
index 76a728942d9..d7ab1d20865 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/listformatter.h
@@ -197,22 +197,6 @@ class U_I18N_API ListFormatter : public UObject{
*/
static ListFormatter* createInstance(
const Locale& locale, UListFormatterType type, UListFormatterWidth width, UErrorCode& errorCode);
-
-#ifndef U_HIDE_INTERNAL_API
- /**
- * Creates a ListFormatter appropriate for a locale and style.
- *
- * TODO(ICU-20888): Remove this in ICU 68.
- *
- * @param locale The locale.
- * @param style the style, either "standard", "or", "unit", "unit-narrow", or "unit-short"
- * @param errorCode ICU error code, set if no data available for the given locale.
- * @return A ListFormatter object created from internal data derived from
- * CLDR data.
- * @internal
- */
- static ListFormatter* createInstance(const Locale& locale, const char* style, UErrorCode& errorCode);
-#endif /* U_HIDE_INTERNAL_API */
/**
* Destructor.
@@ -273,6 +257,15 @@ class U_I18N_API ListFormatter : public UObject{
#endif /* U_HIDE_INTERNAL_API */
private:
+
+ /**
+ * Creates a ListFormatter appropriate for a locale and style.
+ *
+ * @param locale The locale.
+ * @param style the style, either "standard", "or", "unit", "unit-narrow", or "unit-short"
+ */
+ static ListFormatter* createInstance(const Locale& locale, const char* style, UErrorCode& errorCode);
+
static void initializeHash(UErrorCode& errorCode);
static const ListFormatInternal* getListFormatInternal(const Locale& locale, const char *style, UErrorCode& errorCode);
struct ListPatternsSink;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
index 2155ad531aa..893076145f5 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
@@ -91,7 +91,8 @@ class DateFormat;
/**
* <p><strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* numberformatter.h fits their use case. Although not deprecated, this header
- * is provided for backwards compatibility only.
+ * is provided for backwards compatibility only, and has much more limited
+ * capabilities.
*
* @see Format
* @author Alan Liu
@@ -147,13 +148,13 @@ class U_I18N_API MeasureFormat : public Format {
* Return true if given Format objects are semantically equal.
* @stable ICU 53
*/
- virtual UBool operator==(const Format &other) const;
+ virtual bool operator==(const Format &other) const override;
/**
* Clones this object polymorphically.
* @stable ICU 53
*/
- virtual MeasureFormat *clone() const;
+ virtual MeasureFormat *clone() const override;
/**
* Formats object to produce a string.
@@ -163,7 +164,7 @@ class U_I18N_API MeasureFormat : public Format {
const Formattable &obj,
UnicodeString &appendTo,
FieldPosition &pos,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
#ifndef U_FORCE_HIDE_DRAFT_API
/**
@@ -175,7 +176,7 @@ class U_I18N_API MeasureFormat : public Format {
virtual void parseObject(
const UnicodeString &source,
Formattable &reslt,
- ParsePosition &pos) const;
+ ParsePosition &pos) const override;
#endif // U_FORCE_HIDE_DRAFT_API
/**
@@ -285,7 +286,7 @@ class U_I18N_API MeasureFormat : public Format {
* other classes have different class IDs.
* @stable ICU 53
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
protected:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
index d86bab39095..61da62e71f2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
@@ -23,208 +23,342 @@
#include "unicode/localpointer.h"
/**
- * \file
+ * \file
* \brief C++ API: A unit for measuring a quantity.
*/
-
+
U_NAMESPACE_BEGIN
class StringEnumeration;
-struct MeasureUnitImpl;
+class MeasureUnitImpl;
+
+namespace number {
+namespace impl {
+class LongNameHandler;
+}
+} // namespace number
-#ifndef U_HIDE_DRAFT_API
/**
* Enumeration for unit complexity. There are three levels:
- *
- * - SINGLE: A single unit, optionally with a power and/or SI prefix. Examples: hectare,
- * square-kilometer, kilojoule, per-second.
+ *
+ * - SINGLE: A single unit, optionally with a power and/or SI or binary prefix.
+ * Examples: hectare, square-kilometer, kilojoule, per-second, mebibyte.
* - COMPOUND: A unit composed of the product of multiple single units. Examples:
* meter-per-second, kilowatt-hour, kilogram-meter-per-square-second.
* - MIXED: A unit composed of the sum of multiple single units. Examples: foot+inch,
* hour+minute+second, degree+arcminute+arcsecond.
*
* The complexity determines which operations are available. For example, you cannot set the power
- * or SI prefix of a compound unit.
+ * or prefix of a compound unit.
*
- * @draft ICU 67
+ * @stable ICU 67
*/
enum UMeasureUnitComplexity {
/**
* A single unit, like kilojoule.
*
- * @draft ICU 67
+ * @stable ICU 67
*/
UMEASURE_UNIT_SINGLE,
/**
* A compound unit, like meter-per-second.
- *
- * @draft ICU 67
+ *
+ * @stable ICU 67
*/
UMEASURE_UNIT_COMPOUND,
/**
* A mixed unit, like hour+minute.
*
- * @draft ICU 67
+ * @stable ICU 67
*/
UMEASURE_UNIT_MIXED
};
+
+#ifndef U_HIDE_DRAFT_API
/**
- * Enumeration for SI prefixes, such as "kilo".
+ * Enumeration for SI and binary prefixes, e.g. "kilo-", "nano-", "mebi-".
*
- * @draft ICU 67
+ * Enum values should be treated as opaque: use umeas_getPrefixPower() and
+ * umeas_getPrefixBase() to find their corresponding values.
+ *
+ * @draft ICU 69
+ * @see umeas_getPrefixBase
+ * @see umeas_getPrefixPower
*/
-typedef enum UMeasureSIPrefix {
+typedef enum UMeasurePrefix {
+ /**
+ * The absence of an SI or binary prefix.
+ *
+ * The integer representation of this enum value is an arbitrary
+ * implementation detail and should not be relied upon: use
+ * umeas_getPrefixPower() to obtain meaningful values.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_ONE = 30 + 0,
/**
* SI prefix: yotta, 10^24.
*
- * @draft ICU 67
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_YOTTA = UMEASURE_PREFIX_ONE + 24,
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * ICU use only.
+ * Used to determine the set of base-10 SI prefixes.
+ * @internal
*/
- UMEASURE_SI_PREFIX_YOTTA = 24,
+ UMEASURE_PREFIX_INTERNAL_MAX_SI = UMEASURE_PREFIX_YOTTA,
+#endif /* U_HIDE_INTERNAL_API */
/**
* SI prefix: zetta, 10^21.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_ZETTA = 21,
+ UMEASURE_PREFIX_ZETTA = UMEASURE_PREFIX_ONE + 21,
/**
* SI prefix: exa, 10^18.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_EXA = 18,
+ UMEASURE_PREFIX_EXA = UMEASURE_PREFIX_ONE + 18,
/**
* SI prefix: peta, 10^15.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_PETA = 15,
+ UMEASURE_PREFIX_PETA = UMEASURE_PREFIX_ONE + 15,
/**
* SI prefix: tera, 10^12.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_TERA = 12,
+ UMEASURE_PREFIX_TERA = UMEASURE_PREFIX_ONE + 12,
/**
* SI prefix: giga, 10^9.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_GIGA = 9,
+ UMEASURE_PREFIX_GIGA = UMEASURE_PREFIX_ONE + 9,
/**
* SI prefix: mega, 10^6.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_MEGA = 6,
+ UMEASURE_PREFIX_MEGA = UMEASURE_PREFIX_ONE + 6,
/**
* SI prefix: kilo, 10^3.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_KILO = 3,
+ UMEASURE_PREFIX_KILO = UMEASURE_PREFIX_ONE + 3,
/**
* SI prefix: hecto, 10^2.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_HECTO = 2,
+ UMEASURE_PREFIX_HECTO = UMEASURE_PREFIX_ONE + 2,
/**
* SI prefix: deka, 10^1.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_DEKA = 1,
-
- /**
- * The absence of an SI prefix.
- *
- * @draft ICU 67
- */
- UMEASURE_SI_PREFIX_ONE = 0,
+ UMEASURE_PREFIX_DEKA = UMEASURE_PREFIX_ONE + 1,
/**
* SI prefix: deci, 10^-1.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_DECI = -1,
+ UMEASURE_PREFIX_DECI = UMEASURE_PREFIX_ONE + -1,
/**
* SI prefix: centi, 10^-2.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_CENTI = -2,
+ UMEASURE_PREFIX_CENTI = UMEASURE_PREFIX_ONE + -2,
/**
* SI prefix: milli, 10^-3.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_MILLI = -3,
+ UMEASURE_PREFIX_MILLI = UMEASURE_PREFIX_ONE + -3,
/**
* SI prefix: micro, 10^-6.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_MICRO = -6,
+ UMEASURE_PREFIX_MICRO = UMEASURE_PREFIX_ONE + -6,
/**
* SI prefix: nano, 10^-9.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_NANO = -9,
+ UMEASURE_PREFIX_NANO = UMEASURE_PREFIX_ONE + -9,
/**
* SI prefix: pico, 10^-12.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_PICO = -12,
+ UMEASURE_PREFIX_PICO = UMEASURE_PREFIX_ONE + -12,
/**
* SI prefix: femto, 10^-15.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_FEMTO = -15,
+ UMEASURE_PREFIX_FEMTO = UMEASURE_PREFIX_ONE + -15,
/**
* SI prefix: atto, 10^-18.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_ATTO = -18,
+ UMEASURE_PREFIX_ATTO = UMEASURE_PREFIX_ONE + -18,
/**
* SI prefix: zepto, 10^-21.
*
- * @draft ICU 67
+ * @draft ICU 69
*/
- UMEASURE_SI_PREFIX_ZEPTO = -21,
+ UMEASURE_PREFIX_ZEPTO = UMEASURE_PREFIX_ONE + -21,
/**
* SI prefix: yocto, 10^-24.
*
- * @draft ICU 67
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_YOCTO = UMEASURE_PREFIX_ONE + -24,
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * ICU use only.
+ * Used to determine the set of base-10 SI prefixes.
+ * @internal
+ */
+ UMEASURE_PREFIX_INTERNAL_MIN_SI = UMEASURE_PREFIX_YOCTO,
+#endif // U_HIDE_INTERNAL_API
+
+ // Cannot conditionalize the following with #ifndef U_HIDE_INTERNAL_API,
+ // used in definitions of non-internal enum values
+ /**
+ * ICU use only.
+ * Sets the arbitrary offset of the base-1024 binary prefixes' enum values.
+ * @internal
+ */
+ UMEASURE_PREFIX_INTERNAL_ONE_BIN = -60,
+
+ /**
+ * Binary prefix: kibi, 1024^1.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_KIBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 1,
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * ICU use only.
+ * Used to determine the set of base-1024 binary prefixes.
+ * @internal
+ */
+ UMEASURE_PREFIX_INTERNAL_MIN_BIN = UMEASURE_PREFIX_KIBI,
+#endif // U_HIDE_INTERNAL_API
+
+ /**
+ * Binary prefix: mebi, 1024^2.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_MEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 2,
+
+ /**
+ * Binary prefix: gibi, 1024^3.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_GIBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 3,
+
+ /**
+ * Binary prefix: tebi, 1024^4.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_TEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 4,
+
+ /**
+ * Binary prefix: pebi, 1024^5.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_PEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 5,
+
+ /**
+ * Binary prefix: exbi, 1024^6.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_EXBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 6,
+
+ /**
+ * Binary prefix: zebi, 1024^7.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_ZEBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 7,
+
+ /**
+ * Binary prefix: yobi, 1024^8.
+ *
+ * @draft ICU 69
+ */
+ UMEASURE_PREFIX_YOBI = UMEASURE_PREFIX_INTERNAL_ONE_BIN + 8,
+
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * ICU use only.
+ * Used to determine the set of base-1024 binary prefixes.
+ * @internal
*/
- UMEASURE_SI_PREFIX_YOCTO = -24
-} UMeasureSIPrefix;
+ UMEASURE_PREFIX_INTERNAL_MAX_BIN = UMEASURE_PREFIX_YOBI,
+#endif // U_HIDE_INTERNAL_API
+} UMeasurePrefix;
+
+/**
+ * Returns the base of the factor associated with the given unit prefix: the
+ * base is 10 for SI prefixes (kilo, micro) and 1024 for binary prefixes (kibi,
+ * mebi).
+ *
+ * @draft ICU 69
+ */
+U_CAPI int32_t U_EXPORT2 umeas_getPrefixBase(UMeasurePrefix unitPrefix);
+
+/**
+ * Returns the exponent of the factor associated with the given unit prefix, for
+ * example 3 for kilo, -6 for micro, 1 for kibi, 2 for mebi, 3 for gibi.
+ *
+ * @draft ICU 69
+ */
+U_CAPI int32_t U_EXPORT2 umeas_getPrefixPower(UMeasurePrefix unitPrefix);
+
#endif // U_HIDE_DRAFT_API
/**
@@ -243,34 +377,33 @@ class U_I18N_API MeasureUnit: public UObject {
* @stable ICU 3.0
*/
MeasureUnit();
-
+
/**
* Copy constructor.
* @stable ICU 3.0
*/
MeasureUnit(const MeasureUnit &other);
-#ifndef U_HIDE_DRAFT_API
/**
* Move constructor.
- * @draft ICU 67
+ * @stable ICU 67
*/
MeasureUnit(MeasureUnit &&other) noexcept;
/**
- * Construct a MeasureUnit from a CLDR Unit Identifier, defined in UTS 35.
- * Validates and canonicalizes the identifier.
+ * Construct a MeasureUnit from a CLDR Core Unit Identifier, defined in UTS
+ * 35. (Core unit identifiers and mixed unit identifiers are supported, long
+ * unit identifiers are not.) Validates and canonicalizes the identifier.
*
* <pre>
* MeasureUnit example = MeasureUnit::forIdentifier("furlong-per-nanosecond")
* </pre>
*
- * @param identifier The CLDR Unit Identifier
+ * @param identifier The CLDR Unit Identifier.
* @param status Set if the identifier is invalid.
- * @draft ICU 67
+ * @stable ICU 67
*/
static MeasureUnit forIdentifier(StringPiece identifier, UErrorCode& status);
-#endif // U_HIDE_DRAFT_API
/**
* Copy assignment operator.
@@ -278,13 +411,11 @@ class U_I18N_API MeasureUnit: public UObject {
*/
MeasureUnit &operator=(const MeasureUnit &other);
-#ifndef U_HIDE_DRAFT_API
/**
* Move assignment operator.
- * @draft ICU 67
+ * @stable ICU 67
*/
MeasureUnit &operator=(MeasureUnit &&other) noexcept;
-#endif // U_HIDE_DRAFT_API
/**
* Returns a polymorphic clone of this object. The result will
@@ -304,14 +435,14 @@ class U_I18N_API MeasureUnit: public UObject {
* to the given object.
* @stable ICU 3.0
*/
- virtual UBool operator==(const UObject& other) const;
+ virtual bool operator==(const UObject& other) const;
/**
* Inequality operator. Return true if this object is not equal
* to the given object.
* @stable ICU 53
*/
- UBool operator!=(const UObject& other) const {
+ bool operator!=(const UObject& other) const {
return !(*this == other);
}
@@ -333,12 +464,11 @@ class U_I18N_API MeasureUnit: public UObject {
*/
const char *getSubtype() const;
-#ifndef U_HIDE_DRAFT_API
/**
- * Get the CLDR Unit Identifier for this MeasureUnit, as defined in UTS 35.
+ * Get CLDR Unit Identifier for this MeasureUnit, as defined in UTS 35.
*
* @return The string form of this unit, owned by this MeasureUnit.
- * @draft ICU 67
+ * @stable ICU 67
*/
const char* getIdentifier() const;
@@ -347,38 +477,43 @@ class U_I18N_API MeasureUnit: public UObject {
*
* @param status Set if an error occurs.
* @return The unit complexity.
- * @draft ICU 67
+ * @stable ICU 67
*/
UMeasureUnitComplexity getComplexity(UErrorCode& status) const;
+#ifndef U_HIDE_DRAFT_API
/**
- * Creates a MeasureUnit which is this SINGLE unit augmented with the specified SI prefix.
- * For example, UMEASURE_SI_PREFIX_KILO for "kilo".
+ * Creates a MeasureUnit which is this SINGLE unit augmented with the specified prefix.
+ * For example, UMEASURE_PREFIX_KILO for "kilo", or UMEASURE_PREFIX_KIBI for "kibi".
*
- * There is sufficient locale data to format all standard SI prefixes.
+ * There is sufficient locale data to format all standard prefixes.
*
* NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
* occur. For more information, see UMeasureUnitComplexity.
*
- * @param prefix The SI prefix, from UMeasureSIPrefix.
+ * @param prefix The prefix, from UMeasurePrefix.
* @param status Set if this is not a SINGLE unit or if another error occurs.
* @return A new SINGLE unit.
- * @draft ICU 67
+ * @draft ICU 69
*/
- MeasureUnit withSIPrefix(UMeasureSIPrefix prefix, UErrorCode& status) const;
+ MeasureUnit withPrefix(UMeasurePrefix prefix, UErrorCode& status) const;
/**
- * Gets the current SI prefix of this SINGLE unit. For example, if the unit has the SI prefix
- * "kilo", then UMEASURE_SI_PREFIX_KILO is returned.
+ * Returns the current SI or binary prefix of this SINGLE unit. For example,
+ * if the unit has the prefix "kilo", then UMEASURE_PREFIX_KILO is
+ * returned.
*
* NOTE: Only works on SINGLE units. If this is a COMPOUND or MIXED unit, an error will
* occur. For more information, see UMeasureUnitComplexity.
*
* @param status Set if this is not a SINGLE unit or if another error occurs.
- * @return The SI prefix of this SINGLE unit, from UMeasureSIPrefix.
- * @draft ICU 67
+ * @return The prefix of this SINGLE unit, from UMeasurePrefix.
+ * @see umeas_getPrefixBase
+ * @see umeas_getPrefixPower
+ * @draft ICU 69
*/
- UMeasureSIPrefix getSIPrefix(UErrorCode& status) const;
+ UMeasurePrefix getPrefix(UErrorCode& status) const;
+#endif // U_HIDE_DRAFT_API
/**
* Creates a MeasureUnit which is this SINGLE unit augmented with the specified dimensionality
@@ -392,7 +527,7 @@ class U_I18N_API MeasureUnit: public UObject {
* @param dimensionality The dimensionality (power).
* @param status Set if this is not a SINGLE unit or if another error occurs.
* @return A new SINGLE unit.
- * @draft ICU 67
+ * @stable ICU 67
*/
MeasureUnit withDimensionality(int32_t dimensionality, UErrorCode& status) const;
@@ -407,7 +542,7 @@ class U_I18N_API MeasureUnit: public UObject {
*
* @param status Set if this is not a SINGLE unit or if another error occurs.
* @return The dimensionality (power) of this simple unit.
- * @draft ICU 67
+ * @stable ICU 67
*/
int32_t getDimensionality(UErrorCode& status) const;
@@ -421,7 +556,7 @@ class U_I18N_API MeasureUnit: public UObject {
*
* @param status Set if this is a MIXED unit or if another error occurs.
* @return The reciprocal of the target unit.
- * @draft ICU 67
+ * @stable ICU 67
*/
MeasureUnit reciprocal(UErrorCode& status) const;
@@ -440,12 +575,10 @@ class U_I18N_API MeasureUnit: public UObject {
* @param other The MeasureUnit to multiply with the target.
* @param status Set if this or other is a MIXED unit or if another error occurs.
* @return The product of the target unit with the provided unit.
- * @draft ICU 67
+ * @stable ICU 67
*/
MeasureUnit product(const MeasureUnit& other, UErrorCode& status) const;
-#endif // U_HIDE_DRAFT_API
-#ifndef U_HIDE_DRAFT_API
/**
* Gets the list of SINGLE units contained within a MIXED or COMPOUND unit.
*
@@ -459,10 +592,9 @@ class U_I18N_API MeasureUnit: public UObject {
*
* @param status Set if an error occurs.
* @return A pair with the list of units as a LocalArray and the number of units in the list.
- * @draft ICU 68
+ * @stable ICU 68
*/
inline std::pair<LocalArray<MeasureUnit>, int32_t> splitToSingleUnits(UErrorCode& status) const;
-#endif // U_HIDE_DRAFT_API
/**
* getAvailable gets all of the available units.
@@ -532,7 +664,7 @@ class U_I18N_API MeasureUnit: public UObject {
* other classes have different class IDs.
* @stable ICU 53
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
#ifndef U_HIDE_INTERNAL_API
/**
@@ -547,7 +679,7 @@ class U_I18N_API MeasureUnit: public UObject {
// the "End generated createXXX methods" comment is auto generated code
// and must not be edited manually. For instructions on how to correctly
// update this code, refer to:
-// http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
+// docs/processes/release/tasks/updating-measure-unit.md
//
// Start generated createXXX methods
@@ -823,6 +955,24 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getSquareYard();
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of concentr: item.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getItem()}.
+ * @param status ICU error code.
+ * @draft ICU 70
+ */
+ static MeasureUnit *createItem(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of concentr: item.
+ * Also see {@link #createItem()}.
+ * @draft ICU 70
+ */
+ static MeasureUnit getItem();
+#endif /* U_HIDE_DRAFT_API */
+
/**
* Returns by pointer, unit of concentr: karat.
* Caller owns returned value and must free it.
@@ -839,6 +989,24 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getKarat();
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of concentr: milligram-ofglucose-per-deciliter.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getMilligramOfglucosePerDeciliter()}.
+ * @param status ICU error code.
+ * @draft ICU 69
+ */
+ static MeasureUnit *createMilligramOfglucosePerDeciliter(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of concentr: milligram-ofglucose-per-deciliter.
+ * Also see {@link #createMilligramOfglucosePerDeciliter()}.
+ * @draft ICU 69
+ */
+ static MeasureUnit getMilligramOfglucosePerDeciliter();
+#endif /* U_HIDE_DRAFT_API */
+
/**
* Returns by pointer, unit of concentr: milligram-per-deciliter.
* Caller owns returned value and must free it.
@@ -1655,6 +1823,24 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getThermUs();
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Returns by pointer, unit of force: kilowatt-hour-per-100-kilometer.
+ * Caller owns returned value and must free it.
+ * Also see {@link #getKilowattHourPer100Kilometer()}.
+ * @param status ICU error code.
+ * @draft ICU 70
+ */
+ static MeasureUnit *createKilowattHourPer100Kilometer(UErrorCode &status);
+
+ /**
+ * Returns by value, unit of force: kilowatt-hour-per-100-kilometer.
+ * Also see {@link #createKilowattHourPer100Kilometer()}.
+ * @draft ICU 70
+ */
+ static MeasureUnit getKilowattHourPer100Kilometer();
+#endif /* U_HIDE_DRAFT_API */
+
/**
* Returns by pointer, unit of force: newton.
* Caller owns returned value and must free it.
@@ -1751,23 +1937,21 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getMegahertz();
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of graphics: dot.
* Caller owns returned value and must free it.
* Also see {@link #getDot()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createDot(UErrorCode &status);
/**
* Returns by value, unit of graphics: dot.
* Also see {@link #createDot()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getDot();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of graphics: dot-per-centimeter.
@@ -1929,23 +2113,21 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getDecimeter();
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of length: earth-radius.
* Caller owns returned value and must free it.
* Also see {@link #getEarthRadius()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createEarthRadius(UErrorCode &status);
/**
* Returns by value, unit of length: earth-radius.
* Also see {@link #createEarthRadius()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getEarthRadius();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of length: fathom.
@@ -2235,41 +2417,37 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getYard();
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of light: candela.
* Caller owns returned value and must free it.
* Also see {@link #getCandela()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createCandela(UErrorCode &status);
/**
* Returns by value, unit of light: candela.
* Also see {@link #createCandela()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getCandela();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of light: lumen.
* Caller owns returned value and must free it.
* Also see {@link #getLumen()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createLumen(UErrorCode &status);
/**
* Returns by value, unit of light: lumen.
* Also see {@link #createLumen()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getLumen();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of light: lux.
@@ -2351,23 +2529,21 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getEarthMass();
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of mass: grain.
* Caller owns returned value and must free it.
* Also see {@link #getGrain()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createGrain(UErrorCode &status);
/**
* Returns by value, unit of mass: grain.
* Also see {@link #createGrain()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getGrain();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of mass: gram.
@@ -3185,77 +3361,69 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getDeciliter();
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: dessert-spoon.
* Caller owns returned value and must free it.
* Also see {@link #getDessertSpoon()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createDessertSpoon(UErrorCode &status);
/**
* Returns by value, unit of volume: dessert-spoon.
* Also see {@link #createDessertSpoon()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getDessertSpoon();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: dessert-spoon-imperial.
* Caller owns returned value and must free it.
* Also see {@link #getDessertSpoonImperial()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createDessertSpoonImperial(UErrorCode &status);
/**
* Returns by value, unit of volume: dessert-spoon-imperial.
* Also see {@link #createDessertSpoonImperial()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getDessertSpoonImperial();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: dram.
* Caller owns returned value and must free it.
* Also see {@link #getDram()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createDram(UErrorCode &status);
/**
* Returns by value, unit of volume: dram.
* Also see {@link #createDram()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getDram();
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: drop.
* Caller owns returned value and must free it.
* Also see {@link #getDrop()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createDrop(UErrorCode &status);
/**
* Returns by value, unit of volume: drop.
* Also see {@link #createDrop()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getDrop();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: fluid-ounce.
@@ -3337,23 +3505,21 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getHectoliter();
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: jigger.
* Caller owns returned value and must free it.
* Also see {@link #getJigger()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createJigger(UErrorCode &status);
/**
* Returns by value, unit of volume: jigger.
* Also see {@link #createJigger()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getJigger();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: liter.
@@ -3403,23 +3569,21 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getMilliliter();
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: pinch.
* Caller owns returned value and must free it.
* Also see {@link #getPinch()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createPinch(UErrorCode &status);
/**
* Returns by value, unit of volume: pinch.
* Also see {@link #createPinch()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getPinch();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: pint.
@@ -3469,23 +3633,21 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getQuart();
-#ifndef U_HIDE_DRAFT_API
/**
* Returns by pointer, unit of volume: quart-imperial.
* Caller owns returned value and must free it.
* Also see {@link #getQuartImperial()}.
* @param status ICU error code.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit *createQuartImperial(UErrorCode &status);
/**
* Returns by value, unit of volume: quart-imperial.
* Also see {@link #createQuartImperial()}.
- * @draft ICU 68
+ * @stable ICU 68
*/
static MeasureUnit getQuartImperial();
-#endif /* U_HIDE_DRAFT_API */
/**
* Returns by pointer, unit of volume: tablespoon.
@@ -3519,7 +3681,6 @@ class U_I18N_API MeasureUnit: public UObject {
*/
static MeasureUnit getTeaspoon();
-
// End generated createXXX methods
protected:
@@ -3569,17 +3730,19 @@ private:
/** Internal version of public API */
LocalArray<MeasureUnit> splitToSingleUnitsImpl(int32_t& outCount, UErrorCode& status) const;
- friend struct MeasureUnitImpl;
+ friend class MeasureUnitImpl;
+
+ // For access to findBySubType
+ friend class number::impl::LongNameHandler;
};
-#ifndef U_HIDE_DRAFT_API // @draft ICU 68
+// inline impl of @stable ICU 68 method
inline std::pair<LocalArray<MeasureUnit>, int32_t>
MeasureUnit::splitToSingleUnits(UErrorCode& status) const {
int32_t length;
auto array = splitToSingleUnitsImpl(length, status);
return std::make_pair(std::move(array), length);
}
-#endif // U_HIDE_DRAFT_API
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
index aeb1dace43d..7b118acfcfa 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
@@ -87,7 +87,7 @@ class U_I18N_API Measure: public UObject {
* to the given object.
* @stable ICU 3.0
*/
- UBool operator==(const UObject& other) const;
+ bool operator==(const UObject& other) const;
/**
* Return a reference to the numeric value of this object. The
@@ -127,7 +127,7 @@ class U_I18N_API Measure: public UObject {
* other classes have different class IDs.
* @stable ICU 53
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
protected:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
index 2d9bc8f2e2b..c949132fdae 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
@@ -132,7 +132,7 @@ class NumberFormat;
* <li>messageText can contain quoted literal strings including syntax characters.
* A quoted literal string begins with an ASCII apostrophe and a syntax character
* (usually a {curly brace}) and continues until the next single apostrophe.
- * A double ASCII apostrohpe inside or outside of a quoted string represents
+ * A double ASCII apostrophe inside or outside of a quoted string represents
* one literal apostrophe.
* <li>Quotable syntax characters are the {curly braces} in all messageText parts,
* plus the '#' sign in a messageText immediately inside a pluralStyle,
@@ -420,7 +420,7 @@ public:
* result and should delete it when done.
* @stable ICU 2.0
*/
- virtual MessageFormat* clone() const;
+ virtual MessageFormat* clone() const override;
/**
* Returns true if the given Format objects are semantically equal.
@@ -429,7 +429,7 @@ public:
* @return true if the given Format objects are semantically equal.
* @stable ICU 2.0
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
/**
* Sets the locale to be used for creating argument Format objects.
@@ -589,7 +589,7 @@ public:
* arguments. If numbered, the formatName is the
* corresponding UnicodeStrings (e.g. "0", "1", "2"...).
* The returned Format object should not be deleted by the caller,
- * nor should the ponter of other object . The pointer and its
+ * nor should the pointer of other object . The pointer and its
* contents remain valid only until the next call to any method
* of this class is made with this object.
* @param formatName the name or number specifying a format
@@ -715,7 +715,7 @@ public:
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPosition& pos,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Formats the given array of arguments into a user-defined argument name
@@ -790,7 +790,7 @@ public:
*/
virtual void parseObject(const UnicodeString& source,
Formattable& result,
- ParsePosition& pos) const;
+ ParsePosition& pos) const override;
/**
* Convert an 'apostrophe-friendly' pattern into a standard
@@ -850,7 +850,7 @@ public:
* other classes have different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for
@@ -898,7 +898,7 @@ private:
public:
PluralSelectorProvider(const MessageFormat &mf, UPluralType type);
virtual ~PluralSelectorProvider();
- virtual UnicodeString select(void *ctx, double number, UErrorCode& ec) const;
+ virtual UnicodeString select(void *ctx, double number, UErrorCode& ec) const override;
void reset();
private:
@@ -1088,22 +1088,22 @@ private:
*/
class U_I18N_API DummyFormat : public Format {
public:
- virtual UBool operator==(const Format&) const;
- virtual DummyFormat* clone() const;
+ virtual bool operator==(const Format&) const override;
+ virtual DummyFormat* clone() const override;
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
UErrorCode& status) const;
virtual UnicodeString& format(const Formattable&,
UnicodeString& appendTo,
FieldPosition&,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPositionIterator* posIter,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
virtual void parseObject(const UnicodeString&,
Formattable&,
- ParsePosition&) const;
+ ParsePosition&) const override;
};
friend class MessageFormatAdapter; // getFormatTypeList() access
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h
index cee45e352df..96aca35d013 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h
@@ -18,8 +18,6 @@
#include "unicode/measunit.h"
-#ifndef U_HIDE_DRAFT_API
-
/**
* \file
* \brief C++ API: units for percent and permille
@@ -31,7 +29,7 @@ U_NAMESPACE_BEGIN
* Dimensionless unit for percent and permille.
* Prior to ICU 68, this namespace was a class with the same name.
* @see NumberFormatter
- * @draft ICU 68
+ * @stable ICU 68
*/
namespace NoUnit {
/**
@@ -42,7 +40,7 @@ namespace NoUnit {
* Since ICU 68, this function returns the same value as the default MeasureUnit constructor.
*
* @return a MeasureUnit instance
- * @draft ICU 68
+ * @stable ICU 68
*/
static inline MeasureUnit U_EXPORT2 base() {
return MeasureUnit();
@@ -56,7 +54,7 @@ namespace NoUnit {
* Since ICU 68, this function returns the same value as MeasureUnit::getPercent().
*
* @return a MeasureUnit instance
- * @draft ICU 68
+ * @stable ICU 68
*/
static inline MeasureUnit U_EXPORT2 percent() {
return MeasureUnit::getPercent();
@@ -70,7 +68,7 @@ namespace NoUnit {
* Since ICU 68, this function returns the same value as MeasureUnit::getPermille().
*
* @return a MeasureUnit instance
- * @draft ICU 68
+ * @stable ICU 68
*/
static inline MeasureUnit U_EXPORT2 permille() {
return MeasureUnit::getPermille();
@@ -79,7 +77,6 @@ namespace NoUnit {
U_NAMESPACE_END
-#endif /* U_HIDE_DRAFT_API */
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif /* U_SHOW_CPLUSPLUS_API */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
index 06329b8e7aa..ece433b55f0 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
@@ -28,10 +28,9 @@
/**
* \file
- * \brief C++ API: Library for localized number formatting introduced in ICU 60.
- *
- * This library was introduced in ICU 60 to simplify the process of formatting localized number strings.
- * Basic usage examples:
+ * \brief C++ API: All-in-one formatter for localized numbers, currencies, and units.
+ *
+ * For a full list of options, see icu::number::NumberFormatterSettings.
*
* <pre>
* // Most basic usage:
@@ -347,15 +346,15 @@ class U_I18N_API Notation : public UMemory {
union NotationUnion {
// For NTN_SCIENTIFIC
- /** @internal */
+ /** @internal (private) */
struct ScientificSettings {
- /** @internal */
+ /** @internal (private) */
int8_t fEngineeringInterval;
- /** @internal */
+ /** @internal (private) */
bool fRequireMinInt;
- /** @internal */
+ /** @internal (private) */
impl::digits_t fMinExponentDigits;
- /** @internal */
+ /** @internal (private) */
UNumberSignDisplay fExponentSignDisplay;
} scientific;
@@ -660,6 +659,17 @@ class U_I18N_API Precision : public UMemory {
*/
static CurrencyPrecision currency(UCurrencyUsage currencyUsage);
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Configure how trailing zeros are displayed on numbers. For example, to hide trailing zeros
+ * when the number is an integer, use UNUM_TRAILING_ZERO_HIDE_IF_WHOLE.
+ *
+ * @param trailingZeroDisplay Option to configure the display of trailing zeros.
+ * @draft ICU 69
+ */
+ Precision trailingZeroDisplay(UNumberTrailingZeroDisplay trailingZeroDisplay) const;
+#endif // U_HIDE_DRAFT_API
+
private:
enum PrecisionType {
RND_BOGUS,
@@ -684,32 +694,36 @@ class U_I18N_API Precision : public UMemory {
} fType;
union PrecisionUnion {
- /** @internal */
+ /** @internal (private) */
struct FractionSignificantSettings {
// For RND_FRACTION, RND_SIGNIFICANT, and RND_FRACTION_SIGNIFICANT
- /** @internal */
+ /** @internal (private) */
impl::digits_t fMinFrac;
- /** @internal */
+ /** @internal (private) */
impl::digits_t fMaxFrac;
- /** @internal */
+ /** @internal (private) */
impl::digits_t fMinSig;
- /** @internal */
+ /** @internal (private) */
impl::digits_t fMaxSig;
+ /** @internal (private) */
+ UNumberRoundingPriority fPriority;
} fracSig;
- /** @internal */
+ /** @internal (private) */
struct IncrementSettings {
// For RND_INCREMENT, RND_INCREMENT_ONE, and RND_INCREMENT_FIVE
- /** @internal */
+ /** @internal (private) */
double fIncrement;
- /** @internal */
+ /** @internal (private) */
impl::digits_t fMinFrac;
- /** @internal */
+ /** @internal (private) */
impl::digits_t fMaxFrac;
} increment;
UCurrencyUsage currencyUsage; // For RND_CURRENCY
UErrorCode errorCode; // For RND_ERROR
} fUnion;
+ UNumberTrailingZeroDisplay fTrailingZeroDisplay = UNUM_TRAILING_ZERO_AUTO;
+
typedef PrecisionUnion::FractionSignificantSettings FractionSignificantSettings;
typedef PrecisionUnion::IncrementSettings IncrementSettings;
@@ -741,8 +755,11 @@ class U_I18N_API Precision : public UMemory {
static Precision constructSignificant(int32_t minSig, int32_t maxSig);
- static Precision
- constructFractionSignificant(const FractionPrecision &base, int32_t minSig, int32_t maxSig);
+ static Precision constructFractionSignificant(
+ const FractionPrecision &base,
+ int32_t minSig,
+ int32_t maxSig,
+ UNumberRoundingPriority priority);
static IncrementPrecision constructIncrement(double increment, int32_t minFrac);
@@ -784,16 +801,38 @@ class U_I18N_API Precision : public UMemory {
*/
class U_I18N_API FractionPrecision : public Precision {
public:
+#ifndef U_HIDE_DRAFT_API
/**
- * Ensure that no less than this number of significant digits are retained when rounding according to fraction
- * rules.
+ * Override maximum fraction digits with maximum significant digits depending on the magnitude
+ * of the number. See UNumberRoundingPriority.
*
- * <p>
- * For example, with integer rounding, the number 3.141 becomes "3". However, with minimum figures set to 2, 3.141
- * becomes "3.1" instead.
+ * @param minSignificantDigits
+ * Pad trailing zeros to achieve this minimum number of significant digits.
+ * @param maxSignificantDigits
+ * Round the number to achieve this maximum number of significant digits.
+ * @param priority
+ * How to disambiguate between fraction digits and significant digits.
+ * @return A precision for chaining or passing to the NumberFormatter precision() setter.
*
- * <p>
- * This setting does not affect the number of trailing zeros. For example, 3.01 would print as "3", not "3.0".
+ * @draft ICU 69
+ */
+ Precision withSignificantDigits(
+ int32_t minSignificantDigits,
+ int32_t maxSignificantDigits,
+ UNumberRoundingPriority priority) const;
+#endif // U_HIDE_DRAFT_API
+
+ /**
+ * Ensure that no less than this number of significant digits are retained when rounding
+ * according to fraction rules.
+ *
+ * For example, with integer rounding, the number 3.141 becomes "3". However, with minimum
+ * figures set to 2, 3.141 becomes "3.1" instead.
+ *
+ * This setting does not affect the number of trailing zeros. For example, 3.01 would print as
+ * "3", not "3.0".
+ *
+ * This is equivalent to `withSignificantDigits(1, minSignificantDigits, RELAXED)`.
*
* @param minSignificantDigits
* The number of significant figures to guarantee.
@@ -803,16 +842,16 @@ class U_I18N_API FractionPrecision : public Precision {
Precision withMinDigits(int32_t minSignificantDigits) const;
/**
- * Ensure that no more than this number of significant digits are retained when rounding according to fraction
- * rules.
+ * Ensure that no more than this number of significant digits are retained when rounding
+ * according to fraction rules.
*
- * <p>
- * For example, with integer rounding, the number 123.4 becomes "123". However, with maximum figures set to 2, 123.4
- * becomes "120" instead.
+ * For example, with integer rounding, the number 123.4 becomes "123". However, with maximum
+ * figures set to 2, 123.4 becomes "120" instead.
*
- * <p>
- * This setting does not affect the number of trailing zeros. For example, with fixed fraction of 2, 123.4 would
- * become "120.00".
+ * This setting does not affect the number of trailing zeros. For example, with fixed fraction
+ * of 2, 123.4 would become "120.00".
+ *
+ * This is equivalent to `withSignificantDigits(1, maxSignificantDigits, STRICT)`.
*
* @param maxSignificantDigits
* Round the number to no more than this number of significant figures.
@@ -1131,33 +1170,35 @@ class U_I18N_API Scale : public UMemory {
namespace impl {
-// Do not enclose entire Usage with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
+// Do not enclose entire StringProp with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
/**
* Manages NumberFormatterSettings::usage()'s char* instance on the heap.
* @internal
*/
-class U_I18N_API Usage : public UMemory {
+class U_I18N_API StringProp : public UMemory {
#ifndef U_HIDE_INTERNAL_API
public:
/** @internal */
- Usage(const Usage& other);
+ StringProp(const StringProp &other);
/** @internal */
- Usage& operator=(const Usage& other);
+ StringProp &operator=(const StringProp &other);
/** @internal */
- Usage(Usage &&src) U_NOEXCEPT;
+ StringProp(StringProp &&src) U_NOEXCEPT;
/** @internal */
- Usage& operator=(Usage&& src) U_NOEXCEPT;
+ StringProp &operator=(StringProp &&src) U_NOEXCEPT;
/** @internal */
- ~Usage();
+ ~StringProp();
/** @internal */
- int16_t length() const { return fLength; }
+ int16_t length() const {
+ return fLength;
+ }
/** @internal
* Makes a copy of value. Set to "" to unset.
@@ -1165,18 +1206,21 @@ class U_I18N_API Usage : public UMemory {
void set(StringPiece value);
/** @internal */
- bool isSet() const { return fLength > 0; }
+ bool isSet() const {
+ return fLength > 0;
+ }
#endif // U_HIDE_INTERNAL_API
private:
- char *fUsage;
+ char *fValue;
int16_t fLength;
UErrorCode fError;
- Usage() : fUsage(nullptr), fLength(0), fError(U_ZERO_ERROR) {}
+ StringProp() : fValue(nullptr), fLength(0), fError(U_ZERO_ERROR) {
+ }
- /** @internal */
+ /** @internal (private) */
UBool copyErrorTo(UErrorCode &status) const {
if (U_FAILURE(fError)) {
status = fError;
@@ -1185,7 +1229,7 @@ class U_I18N_API Usage : public UMemory {
return false;
}
- // Allow NumberFormatterImpl to access fUsage.
+ // Allow NumberFormatterImpl to access fValue.
friend class impl::NumberFormatterImpl;
// Allow skeleton generation code to access private members.
@@ -1474,13 +1518,19 @@ struct U_I18N_API MacroProps : public UMemory {
UNumberSignDisplay sign = UNUM_SIGN_COUNT;
/** @internal */
+ bool approximately = false;
+
+ /** @internal */
UNumberDecimalSeparatorDisplay decimal = UNUM_DECIMAL_SEPARATOR_COUNT;
/** @internal */
Scale scale; // = Scale(); (benign value)
/** @internal */
- Usage usage; // = Usage(); (no usage)
+ StringProp usage; // = StringProp(); (no usage)
+
+ /** @internal */
+ StringProp unitDisplayCase; // = StringProp(); (nominative)
/** @internal */
const AffixPatternProvider* affixProvider = nullptr; // no ownership
@@ -1503,7 +1553,8 @@ struct U_I18N_API MacroProps : public UMemory {
bool copyErrorTo(UErrorCode &status) const {
return notation.copyErrorTo(status) || precision.copyErrorTo(status) ||
padder.copyErrorTo(status) || integerWidth.copyErrorTo(status) ||
- symbols.copyErrorTo(status) || scale.copyErrorTo(status) || usage.copyErrorTo(status);
+ symbols.copyErrorTo(status) || scale.copyErrorTo(status) || usage.copyErrorTo(status) ||
+ unitDisplayCase.copyErrorTo(status);
}
};
@@ -2116,7 +2167,6 @@ class U_I18N_API NumberFormatterSettings {
*/
Derived scale(const Scale &scale) &&;
-#ifndef U_HIDE_DRAFT_API
/**
* Specifies the usage for which numbers will be formatted ("person-height",
* "road", "rainfall", etc.)
@@ -2155,9 +2205,9 @@ class U_I18N_API NumberFormatterSettings {
* @param usage A `usage` parameter from the units resource. See the
* unitPreferenceData in *source/data/misc/units.txt*, generated from
* `unitPreferenceData` in [CLDR's
- * supplemental/units.xml](https://github.com/unicode-org/cldr/blob/master/common/supplemental/units.xml).
+ * supplemental/units.xml](https://github.com/unicode-org/cldr/blob/main/common/supplemental/units.xml).
* @return The fluent chain.
- * @draft ICU 68
+ * @stable ICU 68
*/
Derived usage(StringPiece usage) const &;
@@ -2166,9 +2216,27 @@ class U_I18N_API NumberFormatterSettings {
*
* @param usage The unit `usage`.
* @return The fluent chain.
- * @draft ICU 68
+ * @stable ICU 68
*/
Derived usage(StringPiece usage) &&;
+
+#ifndef U_HIDE_DRAFT_API
+#ifndef U_HIDE_INTERNAL_API
+ /**
+ * Specifies the desired case for a unit formatter's output (e.g.
+ * accusative, dative, genitive).
+ *
+ * @internal ICU 69 technology preview
+ */
+ Derived unitDisplayCase(StringPiece unitDisplayCase) const &;
+
+ /**
+ * Overload of unitDisplayCase() for use on an rvalue reference.
+ *
+ * @internal ICU 69 technology preview
+ */
+ Derived unitDisplayCase(StringPiece unitDisplayCase) &&;
+#endif // U_HIDE_INTERNAL_API
#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_INTERNAL_API
@@ -2223,6 +2291,9 @@ class U_I18N_API NumberFormatterSettings {
* The returned skeleton is in normalized form, such that two number formatters with equivalent
* behavior should produce the same skeleton.
*
+ * For more information on number skeleton strings, see:
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html
+ *
* @return A number skeleton string with behavior corresponding to this number formatter.
* @stable ICU 62
*/
@@ -2416,6 +2487,12 @@ class U_I18N_API LocalizedNumberFormatter
#ifndef U_HIDE_INTERNAL_API
+
+ /**
+ * @internal
+ */
+ const DecimalFormatSymbols* getDecimalFormatSymbols() const;
+
/** Internal method.
* @internal
*/
@@ -2645,7 +2722,6 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
template<typename StringClass>
inline StringClass toDecimalNumber(UErrorCode& status) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Gets the resolved output unit.
*
@@ -2655,12 +2731,18 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
* as "foot-and-inch" or "hour-and-minute-and-second".
*
* @return `MeasureUnit`.
- * @draft ICU 68
+ * @stable ICU 68
*/
MeasureUnit getOutputUnit(UErrorCode& status) const;
-#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_INTERNAL_API
+ /**
+ * Gets the gender of the formatted output. Returns "" when the gender is
+ * unknown, or for ungendered languages.
+ *
+ * @internal ICU 69 technology preview.
+ */
+ const char *getGender(UErrorCode& status) const;
/**
* Gets the raw DecimalQuantity for plural rule selection.
@@ -2685,7 +2767,7 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
/**
* Internal constructor from data type. Adopts the data pointer.
- * @internal
+ * @internal (private)
*/
explicit FormattedNumber(impl::UFormattedNumberData *results)
: fData(results), fErrorCode(U_ZERO_ERROR) {}
@@ -2702,8 +2784,6 @@ class U_I18N_API FormattedNumber : public UMemory, public FormattedValue {
friend struct impl::UFormattedNumberImpl;
};
-#ifndef U_HIDE_DRAFT_API
-// Note: This is draft ICU 65
template<typename StringClass>
StringClass FormattedNumber::toDecimalNumber(UErrorCode& status) const {
StringClass result;
@@ -2711,7 +2791,6 @@ StringClass FormattedNumber::toDecimalNumber(UErrorCode& status) const {
toDecimalNumber(sink, status);
return result;
}
-#endif // U_HIDE_DRAFT_API
/**
* See the main description in numberformatter.h for documentation and examples.
@@ -2747,6 +2826,9 @@ class U_I18N_API NumberFormatter final {
* It is possible for an error to occur while parsing. See the overload of this method if you are
* interested in the location of a possible parse error.
*
+ * For more information on number skeleton strings, see:
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html
+ *
* @param skeleton
* The skeleton string off of which to base this NumberFormatter.
* @param status
@@ -2763,6 +2845,9 @@ class U_I18N_API NumberFormatter final {
* If an error occurs while parsing the skeleton string, the offset into the skeleton string at
* which the error occurred will be saved into the UParseError, if provided.
*
+ * For more information on number skeleton strings, see:
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html
+ *
* @param skeleton
* The skeleton string off of which to base this NumberFormatter.
* @param perror
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h
index 4e0a15badb1..363f7d48cfe 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/numberrangeformatter.h
@@ -73,7 +73,7 @@ struct UFormattedNumberRangeImpl;
* Export an explicit template instantiation. See datefmt.h
* (When building DLLs for Windows this is required.)
*/
-#if U_PLATFORM == U_PF_WINDOWS && !defined(U_IN_DOXYGEN)
+#if U_PLATFORM == U_PF_WINDOWS && !defined(U_IN_DOXYGEN) && !defined(U_STATIC_IMPLEMENTATION)
} // namespace icu::number
U_NAMESPACE_END
@@ -608,50 +608,6 @@ class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue {
/** @copydoc FormattedValue::nextPosition() */
UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE;
-#ifndef U_HIDE_DEPRECATED_API
- /**
- * Export the first formatted number as a decimal number. This endpoint
- * is useful for obtaining the exact number being printed after scaling
- * and rounding have been applied by the number range formatting pipeline.
- *
- * The syntax of the unformatted number is a "numeric string"
- * as defined in the Decimal Arithmetic Specification, available at
- * http://speleotrove.com/decimal
- *
- * TODO(ICU-21275): This function will be removed in ICU 69.
- * Use getDecimalNumbers() instead.
- *
- * @param status Set if an error occurs.
- * @return A decimal representation of the first formatted number.
- * @deprecated ICU 68 Use getDecimalNumbers instead.
- * @see NumberRangeFormatter
- * @see #getSecondDecimal
- */
- UnicodeString getFirstDecimal(UErrorCode& status) const;
-
- /**
- * Export the second formatted number as a decimal number. This endpoint
- * is useful for obtaining the exact number being printed after scaling
- * and rounding have been applied by the number range formatting pipeline.
- *
- * The syntax of the unformatted number is a "numeric string"
- * as defined in the Decimal Arithmetic Specification, available at
- * http://speleotrove.com/decimal
- *
- * TODO(ICU-21275): This function will be removed in ICU 69.
- * Use getDecimalNumbers() instead.
- *
- * @param status Set if an error occurs.
- * @return A decimal representation of the second formatted number.
- * @deprecated ICU 68 Use getDecimalNumbers instead.
- * @see NumberRangeFormatter
- * @see #getFirstDecimal
- */
- UnicodeString getSecondDecimal(UErrorCode& status) const;
-#endif // U_HIDE_DEPRECATED_API
-
-
-#ifndef U_HIDE_DRAFT_API
/**
* Extracts the formatted range as a pair of decimal numbers. This endpoint
* is useful for obtaining the exact number being printed after scaling
@@ -669,11 +625,10 @@ class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue {
* for example, std::string.
* @param status Set if an error occurs.
* @return A pair of StringClasses containing the numeric strings.
- * @draft ICU 68
+ * @stable ICU 68
*/
template<typename StringClass>
inline std::pair<StringClass, StringClass> getDecimalNumbers(UErrorCode& status) const;
-#endif // U_HIDE_DRAFT_API
/**
* Returns whether the pair of numbers was successfully formatted as a range or whether an identity fallback was
@@ -686,6 +641,15 @@ class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue {
*/
UNumberRangeIdentityResult getIdentityResult(UErrorCode& status) const;
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Default constructor; makes an empty FormattedNumberRange.
+ * @draft ICU 70
+ */
+ FormattedNumberRange()
+ : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
+#endif /* U_HIDE_DRAFT_API */
+
/**
* Copying not supported; use move constructor instead.
*/
@@ -748,8 +712,7 @@ class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue {
friend struct impl::UFormattedNumberRangeImpl;
};
-#ifndef U_HIDE_DRAFT_API
-// Note: This is draft ICU 68
+// inline impl of @stable ICU 68 method
template<typename StringClass>
std::pair<StringClass, StringClass> FormattedNumberRange::getDecimalNumbers(UErrorCode& status) const {
StringClass str1;
@@ -759,7 +722,6 @@ std::pair<StringClass, StringClass> FormattedNumberRange::getDecimalNumbers(UErr
getDecimalNumbers(sink1, sink2, status);
return std::make_pair(str1, str2);
}
-#endif // U_HIDE_DRAFT_API
/**
* See the main description in numberrangeformatter.h for documentation and examples.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
index 61fb59d2108..135fe5b6609 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
@@ -16,7 +16,7 @@
* 04/17/97 aliu Changed DigitCount to int per code review.
* 07/20/98 stephen JDK 1.2 sync up. Added scientific support.
* Changed naming conventions to match C++ guidelines
-* Derecated Java style constants (eg, INTEGER_FIELD)
+* Deprecated Java style constants (eg, INTEGER_FIELD)
********************************************************************************
*/
@@ -266,7 +266,7 @@ public:
* @return clone, or nullptr if an error occurred
* @stable ICU 2.0
*/
- virtual NumberFormat* clone() const = 0;
+ virtual NumberFormat* clone() const override = 0;
/**
* Return true if the given Format objects are semantically equal.
@@ -274,7 +274,7 @@ public:
* @return true if the given Format objects are semantically equal.
* @stable ICU 2.0
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
using Format::format;
@@ -297,7 +297,7 @@ public:
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPosition& pos,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Format an object to produce a string. This method handles
@@ -318,7 +318,7 @@ public:
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPositionIterator* posIter,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Parse a string to produce an object. This methods handles
@@ -350,7 +350,7 @@ public:
*/
virtual void parseObject(const UnicodeString& source,
Formattable& result,
- ParsePosition& parse_pos) const;
+ ParsePosition& parse_pos) const override;
/**
* Format a double number. These methods call the NumberFormat
@@ -685,7 +685,7 @@ public:
* true, the string "1234." would be parsed as the integer value
* 1234 and parsing would stop at the "." character. Of course,
* the exact format accepted by the parse operation is locale
- * dependant and determined by sub-classes of NumberFormat.
+ * dependent and determined by sub-classes of NumberFormat.
* @return true if this format will parse numbers as integers
* only.
* @stable ICU 2.0
@@ -1077,7 +1077,7 @@ public:
* other classes have different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const = 0;
+ virtual UClassID getDynamicClassID(void) const override = 0;
protected:
@@ -1238,12 +1238,12 @@ public:
/**
* @stable ICU 2.6
*/
- virtual UBool visible(void) const;
+ virtual UBool visible(void) const override;
/**
* @stable ICU 2.6
*/
- virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const;
+ virtual const UnicodeString * getSupportedIDs(int32_t &count, UErrorCode& status) const override;
};
#endif /* #if !UCONFIG_NO_SERVICE */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
index 1646729777f..4f839d0f354 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
@@ -192,7 +192,7 @@ public:
*
* @stable ICU 4.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
index fd60857b065..db160546057 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
@@ -70,7 +70,7 @@ class NFRule;
* use the predefined keywords. The whole plural formatting of messages can
* be done using localized patterns from resource bundles. For predefined plural
* rules, see the CLDR <i>Language Plural Rules</i> page at
- * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ * https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html
* </ul>
* </p>
* <h4>Usage of <code>PluralFormat</code></h4>
@@ -434,7 +434,7 @@ public:
* @return true if other is semantically equal to this.
* @stable ICU 4.0
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
/**
* Return true if another object is semantically unequal to this one.
@@ -443,14 +443,14 @@ public:
* @return true if other is semantically unequal to this.
* @stable ICU 4.0
*/
- virtual UBool operator!=(const Format& other) const;
+ virtual bool operator!=(const Format& other) const;
/**
* Clones this Format object polymorphically. The caller owns the
* result and should delete it when done.
* @stable ICU 4.0
*/
- virtual PluralFormat* clone() const;
+ virtual PluralFormat* clone() const override;
/**
* Formats a plural message for a number taken from a Formattable object.
@@ -469,7 +469,7 @@ public:
UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPosition& pos,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Returns the pattern from applyPattern() or constructor().
@@ -505,7 +505,7 @@ public:
*/
virtual void parseObject(const UnicodeString& source,
Formattable& result,
- ParsePosition& parse_pos) const;
+ ParsePosition& parse_pos) const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -520,7 +520,7 @@ public:
*
* @stable ICU 4.0
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
/**
@@ -548,7 +548,7 @@ private:
virtual ~PluralSelectorAdapter();
- virtual UnicodeString select(void *context, double number, UErrorCode& /*ec*/) const;
+ virtual UnicodeString select(void *context, double number, UErrorCode& /*ec*/) const override;
void reset();
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
index 7b30f69b077..e90cd66a7f7 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
@@ -71,8 +71,8 @@ class UFormattedNumberRangeData;
* default rule(other) is returned.
*
* For more information, details, and tips for writing rules, see the
- * LDML spec, C.11 Language Plural Rules:
- * http://www.unicode.org/draft/reports/tr35/tr35.html#Language_Plural_Rules
+ * LDML spec, Part 3.5 Language Plural Rules:
+ * https://www.unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules
*
* Examples:<pre>
* "one: n is 1; few: n in 2..4"</pre>
@@ -200,7 +200,7 @@ class UFormattedNumberRangeData;
* <p>
* ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
* For these predefined rules, see CLDR page at
- * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ * https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html
* </p>
*/
class U_I18N_API PluralRules : public UObject {
@@ -373,7 +373,6 @@ public:
*/
UnicodeString select(const number::FormattedNumber& number, UErrorCode& status) const;
-#ifndef U_HIDE_DRAFT_API
/**
* Given a formatted number range, returns the overall plural form of the
* range. For example, "3-5" returns "other" in English.
@@ -388,10 +387,9 @@ public:
* This could happen if the FormattedNumberRange is invalid,
* or if plural ranges data is unavailable.
* @return The keyword of the selected rule.
- * @draft ICU 68
+ * @stable ICU 68
*/
UnicodeString select(const number::FormattedNumberRange& range, UErrorCode& status) const;
-#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_INTERNAL_API
/**
@@ -534,21 +532,21 @@ public:
* Compares the equality of two PluralRules objects.
*
* @param other The other PluralRules object to be compared with.
- * @return True if the given PluralRules is the same as this
+ * @return true if the given PluralRules is the same as this
* PluralRules; false otherwise.
* @stable ICU 4.0
*/
- virtual UBool operator==(const PluralRules& other) const;
+ virtual bool operator==(const PluralRules& other) const;
/**
* Compares the inequality of two PluralRules objects.
*
* @param other The PluralRules object to be compared with.
- * @return True if the given PluralRules is not the same as this
+ * @return true if the given PluralRules is not the same as this
* PluralRules; false otherwise.
* @stable ICU 4.0
*/
- UBool operator!=(const PluralRules& other) const {return !operator==(other);}
+ bool operator!=(const PluralRules& other) const {return !operator==(other);}
/**
@@ -564,7 +562,7 @@ public:
*
* @stable ICU 4.0
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
index 283e9696fb9..0a5a378e13b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
@@ -108,7 +108,7 @@ enum URBNFRuleSetTag {
* <p>In these rules, the <em>base value</em> is spelled out explicitly and set off from the
* rule's output text with a colon. The rules are in a sorted list, and a rule is applicable
* to all numbers from its own base value to one less than the next rule's base value. The
- * &quot;&gt;&gt;&quot; token is called a <em>substitution</em> and tells the fomatter to
+ * &quot;&gt;&gt;&quot; token is called a <em>substitution</em> and tells the formatter to
* isolate the number's ones digit, format it using this same set of rules, and place the
* result at the position of the &quot;&gt;&gt;&quot; token. Text in brackets is omitted if
* the number being formatted is an even multiple of 10 (the hyphen is a literal hyphen; 24
@@ -543,7 +543,7 @@ enum URBNFRuleSetTag {
* names in this array will be treated as public rule set names by the API. Each subsequent
* element is an array of localizations of these names. The first element of one of these
* subarrays is the locale name, and the remaining elements are localizations of the
- * public rule set names, in the same order as they were listed in the first arrray.</p>
+ * public rule set names, in the same order as they were listed in the first array.</p>
* <p>In the syntax, angle brackets '<', '>' are used to delimit the arrays, and comma ',' is used
* to separate elements of an array. Whitespace is ignored, unless quoted.</p>
* <p>For example:<pre>
@@ -653,7 +653,7 @@ public:
/**
* Creates a RuleBasedNumberFormat from a predefined ruleset. The selector
- * code choosed among three possible predefined formats: spellout, ordinal,
+ * code chose among three possible predefined formats: spellout, ordinal,
* and duration.
* @param tag A selector code specifying which kind of formatter to create for that
* locale. There are four legal values: URBNF_SPELLOUT, which creates a formatter that
@@ -698,7 +698,7 @@ public:
* @return A copy of the object.
* @stable ICU 2.6
*/
- virtual RuleBasedNumberFormat* clone() const;
+ virtual RuleBasedNumberFormat* clone() const override;
/**
* Return true if the given Format objects are semantically equal.
@@ -707,7 +707,7 @@ public:
* @return true if the given Format objects are semantically equal.
* @stable ICU 2.6
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
//-----------------------------------------------------------------------
// public API functions
@@ -793,7 +793,7 @@ public:
*/
virtual UnicodeString& format(int32_t number,
UnicodeString& toAppendTo,
- FieldPosition& pos) const;
+ FieldPosition& pos) const override;
/**
* Formats the specified 64-bit number using the default ruleset.
@@ -805,7 +805,7 @@ public:
*/
virtual UnicodeString& format(int64_t number,
UnicodeString& toAppendTo,
- FieldPosition& pos) const;
+ FieldPosition& pos) const override;
/**
* Formats the specified number using the default ruleset.
* @param number The number to format.
@@ -816,7 +816,7 @@ public:
*/
virtual UnicodeString& format(double number,
UnicodeString& toAppendTo,
- FieldPosition& pos) const;
+ FieldPosition& pos) const override;
/**
* Formats the specified number using the named ruleset.
@@ -888,13 +888,13 @@ protected:
virtual UnicodeString& format(const number::impl::DecimalQuantity &number,
UnicodeString& appendTo,
FieldPosition& pos,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
public:
using NumberFormat::parse;
/**
- * Parses the specfied string, beginning at the specified position, according
+ * Parses the specified string, beginning at the specified position, according
* to this formatter's rules. This will match the string against all of the
* formatter's public rule sets and return the value corresponding to the longest
* parseable substring. This function's behavior is affected by the lenient
@@ -909,7 +909,7 @@ public:
*/
virtual void parse(const UnicodeString& text,
Formattable& result,
- ParsePosition& parsePosition) const;
+ ParsePosition& parsePosition) const override;
#if !UCONFIG_NO_COLLATION
@@ -946,7 +946,7 @@ public:
* @see RuleBasedCollator
* @stable ICU 2.0
*/
- virtual void setLenient(UBool enabled);
+ virtual void setLenient(UBool enabled) override;
/**
* Returns true if lenient-parse mode is turned on. Lenient parsing is off
@@ -955,7 +955,7 @@ public:
* @see #setLenient
* @stable ICU 2.0
*/
- virtual inline UBool isLenient(void) const;
+ virtual inline UBool isLenient(void) const override;
#endif
@@ -987,21 +987,21 @@ public:
* updated with any new status from the function.
* @stable ICU 53
*/
- virtual void setContext(UDisplayContext value, UErrorCode& status);
+ virtual void setContext(UDisplayContext value, UErrorCode& status) override;
/**
* Get the rounding mode.
* @return A rounding mode
* @stable ICU 60
*/
- virtual ERoundingMode getRoundingMode(void) const;
+ virtual ERoundingMode getRoundingMode(void) const override;
/**
* Set the rounding mode.
* @param roundingMode A rounding mode
* @stable ICU 60
*/
- virtual void setRoundingMode(ERoundingMode roundingMode);
+ virtual void setRoundingMode(ERoundingMode roundingMode) override;
public:
/**
@@ -1016,7 +1016,7 @@ public:
*
* @stable ICU 2.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Sets the decimal format symbols, which is generally not changed
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
index d481e9bf399..1eca70c338b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
@@ -76,7 +76,7 @@ public:
*semantically equal.
* @stable ICU 3.8
*/
- virtual UBool operator==(const TimeZone& that) const;
+ virtual bool operator==(const TimeZone& that) const override;
/**
* Return true if the given <code>TimeZone</code> objects are
@@ -86,20 +86,21 @@ public:
* semantically unequal.
* @stable ICU 3.8
*/
- virtual UBool operator!=(const TimeZone& that) const;
+ virtual bool operator!=(const TimeZone& that) const;
/**
- * Adds the <code>TimeZoneRule</code> which represents time transitions.
- * The <code>TimeZoneRule</code> must have start times, that is, the result
- * of isTransitionRule() must be true. Otherwise, U_ILLEGAL_ARGUMENT_ERROR
+ * Adds the `TimeZoneRule` which represents time transitions.
+ * The `TimeZoneRule` must have start times, that is, the result
+ * of `isTransitionRule()` must be true. Otherwise, U_ILLEGAL_ARGUMENT_ERROR
* is set to the error code.
- * The input <code>TimeZoneRule</code> is adopted by this
- * <code>RuleBasedTimeZone</code> on successful completion of this method,
- * thus, the caller must not delete it when no error is returned.
- * After all rules are added, the caller must call complete() method to
- * make this <code>RuleBasedTimeZone</code> ready to handle common time
+ * The input `TimeZoneRule` is adopted by this `RuleBasedTimeZone`;
+ * the caller must not delete it. Should an error condition prevent
+ * the successful adoption of the rule, this function will delete it.
+ *
+ * After all rules are added, the caller must call `complete()` method to
+ * make this `RuleBasedTimeZone` ready to handle common time
* zone functions.
- * @param rule The <code>TimeZoneRule</code>.
+ * @param rule The `TimeZoneRule`.
* @param status Output param to filled in with a success or an error.
* @stable ICU 3.8
*/
@@ -107,7 +108,7 @@ public:
/**
* Makes the <code>TimeZoneRule</code> ready to handle actual timezone
- * calcuation APIs. This method collects time zone rules specified
+ * calculation APIs. This method collects time zone rules specified
* by the caller via the constructor and addTransitionRule() and
* builds internal structure for making the object ready to support
* time zone APIs such as getOffset(), getNextTransition() and others.
@@ -123,7 +124,7 @@ public:
* @return A new copy of this TimeZone object.
* @stable ICU 3.8
*/
- virtual RuleBasedTimeZone* clone() const;
+ virtual RuleBasedTimeZone* clone() const override;
/**
* Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add
@@ -150,7 +151,7 @@ public:
* @stable ICU 3.8
*/
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
+ uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const override;
/**
* Gets the time zone offset, for current date, modified in case of
@@ -173,7 +174,7 @@ public:
*/
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
uint8_t dayOfWeek, int32_t millis,
- int32_t monthLength, UErrorCode& status) const;
+ int32_t monthLength, UErrorCode& status) const override;
/**
* Returns the time zone raw and GMT offset for the given moment
@@ -198,7 +199,7 @@ public:
* @stable ICU 3.8
*/
virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
- int32_t& dstOffset, UErrorCode& ec) const;
+ int32_t& dstOffset, UErrorCode& ec) const override;
/**
* Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
@@ -207,7 +208,7 @@ public:
* @param offsetMillis The new raw GMT offset for this time zone.
* @stable ICU 3.8
*/
- virtual void setRawOffset(int32_t offsetMillis);
+ virtual void setRawOffset(int32_t offsetMillis) override;
/**
* Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
@@ -216,7 +217,7 @@ public:
* @return The TimeZone's raw GMT offset.
* @stable ICU 3.8
*/
- virtual int32_t getRawOffset(void) const;
+ virtual int32_t getRawOffset(void) const override;
/**
* Queries if this time zone uses daylight savings time.
@@ -224,7 +225,7 @@ public:
* false, otherwise.
* @stable ICU 3.8
*/
- virtual UBool useDaylightTime(void) const;
+ virtual UBool useDaylightTime(void) const override;
#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
@@ -240,7 +241,7 @@ public:
* false, otherwise.
* @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead.
*/
- virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
+ virtual UBool inDaylightTime(UDate date, UErrorCode& status) const override;
#endif // U_FORCE_HIDE_DEPRECATED_API
/**
@@ -251,7 +252,7 @@ public:
* with the possible exception of the ID
* @stable ICU 3.8
*/
- virtual UBool hasSameRules(const TimeZone& other) const;
+ virtual UBool hasSameRules(const TimeZone& other) const override;
/**
* Gets the first time zone transition after the base time.
@@ -261,7 +262,7 @@ public:
* @return true if the transition is found.
* @stable ICU 3.8
*/
- virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
+ virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
/**
* Gets the most recent time zone transition before the base time.
@@ -271,7 +272,7 @@ public:
* @return true if the transition is found.
* @stable ICU 3.8
*/
- virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
+ virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
/**
* Returns the number of <code>TimeZoneRule</code>s which represents time transitions,
@@ -281,7 +282,7 @@ public:
* @return The number of <code>TimeZoneRule</code>s representing time transitions.
* @stable ICU 3.8
*/
- virtual int32_t countTransitionRules(UErrorCode& status) const;
+ virtual int32_t countTransitionRules(UErrorCode& status) const override;
/**
* Gets the <code>InitialTimeZoneRule</code> and the set of <code>TimeZoneRule</code>
@@ -300,14 +301,18 @@ public:
* @stable ICU 3.8
*/
virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
- const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
+ const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override;
+#ifndef U_FORCE_HIDE_DRAFT_API
/**
* Get time zone offsets from local wall time.
- * @internal
+ * @draft ICU 69
*/
- virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
- int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
+ virtual void getOffsetFromLocal(
+ UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override;
+#endif /* U_FORCE_HIDE_DRAFT_API */
private:
void deleteRules(void);
@@ -356,7 +361,7 @@ public:
* other classes have different class IDs.
* @stable ICU 3.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
index 98ef6a749fe..f8e32922f4e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
@@ -119,7 +119,7 @@ public:
* @return true if the objects are equivalent.
* @stable ICU 2.4
*/
- UBool operator==(const RegexPattern& that) const;
+ bool operator==(const RegexPattern& that) const;
/**
* Comparison operator. Two RegexPattern objects are considered equal if they
@@ -129,7 +129,7 @@ public:
* @return true if the objects are different.
* @stable ICU 2.4
*/
- inline UBool operator!=(const RegexPattern& that) const {return ! operator ==(that);}
+ inline bool operator!=(const RegexPattern& that) const {return ! operator ==(that);}
/**
* Assignment operator. After assignment, this RegexPattern will behave identically
@@ -569,7 +569,7 @@ public:
*
* @stable ICU 2.4
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -1746,7 +1746,7 @@ public:
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
// Constructors and other object boilerplate are private.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/region.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/region.h
index 9ec8dd45156..ba4a650f4f9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/region.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/region.h
@@ -81,13 +81,13 @@ public:
* Returns true if the two regions are equal.
* @stable ICU 51
*/
- UBool operator==(const Region &that) const;
+ bool operator==(const Region &that) const;
/**
* Returns true if the two regions are NOT equal; that is, if operator ==() returns false.
* @stable ICU 51
*/
- UBool operator!=(const Region &that) const;
+ bool operator!=(const Region &that) const;
/**
* Returns a pointer to a Region using the given region code. The region code can be either 2-letter ISO code,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/scientificnumberformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/scientificnumberformatter.h
index 7f860d4f592..aa7e80543e4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/scientificnumberformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/scientificnumberformatter.h
@@ -159,14 +159,14 @@ public:
class U_I18N_API SuperscriptStyle : public Style {
public:
- virtual SuperscriptStyle *clone() const;
+ virtual SuperscriptStyle *clone() const override;
protected:
virtual UnicodeString &format(
const UnicodeString &original,
FieldPositionIterator &fpi,
const UnicodeString &preExponent,
UnicodeString &appendTo,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
};
class U_I18N_API MarkupStyle : public Style {
@@ -177,14 +177,14 @@ public:
: Style(),
fBeginMarkup(beginMarkup),
fEndMarkup(endMarkup) { }
- virtual MarkupStyle *clone() const;
+ virtual MarkupStyle *clone() const override;
protected:
virtual UnicodeString &format(
const UnicodeString &original,
FieldPositionIterator &fpi,
const UnicodeString &preExponent,
UnicodeString &appendTo,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
private:
UnicodeString fBeginMarkup;
UnicodeString fEndMarkup;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
index f1c4b2bc97e..295a3ce67e9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
@@ -59,7 +59,7 @@ U_NAMESPACE_BEGIN
* <p>
* <tt>SearchIterator</tt> provides an API that is similar to that of
* other text iteration classes such as <tt>BreakIterator</tt>. Using
- * this class, it is easy to scan through text looking for all occurances of
+ * this class, it is easy to scan through text looking for all occurrences of
* a given pattern. The following example uses a <tt>StringSearch</tt>
* object to find all instances of "fox" in the target string. Any other
* subclass of <tt>SearchIterator</tt> can be used in an identical
@@ -272,7 +272,7 @@ public:
* attributes. false otherwise.
* @stable ICU 2.0
*/
- virtual UBool operator==(const SearchIterator &that) const;
+ virtual bool operator==(const SearchIterator &that) const;
/**
* Not-equal operator.
@@ -280,7 +280,7 @@ public:
* @return false if operator== returns true, and vice versa.
* @stable ICU 2.0
*/
- UBool operator!=(const SearchIterator &that) const;
+ bool operator!=(const SearchIterator &that) const;
// public methods ----------------------------------------------------
@@ -566,7 +566,7 @@ protected:
void setMatchNotFound();
};
-inline UBool SearchIterator::operator!=(const SearchIterator &that) const
+inline bool SearchIterator::operator!=(const SearchIterator &that) const
{
return !operator==(that);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/selfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/selfmt.h
index 9b98f6db7ad..bdce00e593e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/selfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/selfmt.h
@@ -259,7 +259,7 @@ public:
* @return true if other is semantically equal to this.
* @stable ICU 4.4
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
/**
* Return true if another object is semantically unequal to this one.
@@ -268,14 +268,14 @@ public:
* @return true if other is semantically unequal to this.
* @stable ICU 4.4
*/
- virtual UBool operator!=(const Format& other) const;
+ virtual bool operator!=(const Format& other) const;
/**
* Clones this Format object polymorphically. The caller owns the
* result and should delete it when done.
* @stable ICU 4.4
*/
- virtual SelectFormat* clone() const;
+ virtual SelectFormat* clone() const override;
/**
* Format an object to produce a string.
@@ -295,7 +295,7 @@ public:
UnicodeString& format(const Formattable& obj,
UnicodeString& appendTo,
FieldPosition& pos,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Returns the pattern from applyPattern() or constructor.
@@ -331,7 +331,7 @@ public:
*/
virtual void parseObject(const UnicodeString& source,
Formattable& result,
- ParsePosition& parse_pos) const;
+ ParsePosition& parse_pos) const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -343,7 +343,7 @@ public:
* ICU "poor man's RTTI", returns a UClassID for the actual class.
* @stable ICU 4.4
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
private:
friend class MessageFormat;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
index 792fddb4d9d..f5c155de466 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
@@ -107,11 +107,11 @@ public:
* the same ID, raw GMT offset, and DST rules.
*
* @param that The SimpleTimeZone object to be compared with.
- * @return True if the given time zone is equal to this time zone; false
+ * @return true if the given time zone is equal to this time zone; false
* otherwise.
* @stable ICU 2.0
*/
- virtual UBool operator==(const TimeZone& that) const;
+ virtual bool operator==(const TimeZone& that) const override;
/**
* Constructs a SimpleTimeZone with the given raw GMT offset and time zone ID,
@@ -134,7 +134,7 @@ public:
* TimeZone.createInstance() to create a TimeZone instead of creating a
* SimpleTimeZone directly with this constructor.
* <P>
- * Various types of daylight-savings time rules can be specfied by using different
+ * Various types of daylight-savings time rules can be specified by using different
* values for startDay and startDayOfWeek and endDay and endDayOfWeek. For a
* complete explanation of how these parameters work, see the documentation for
* setStartRule().
@@ -175,7 +175,7 @@ public:
* TimeZone.createInstance() to create a TimeZone instead of creating a
* SimpleTimeZone directly with this constructor.
* <P>
- * Various types of daylight-savings time rules can be specfied by using different
+ * Various types of daylight-savings time rules can be specified by using different
* values for startDay and startDayOfWeek and endDay and endDayOfWeek. For a
* complete explanation of how these parameters work, see the documentation for
* setStartRule().
@@ -219,7 +219,7 @@ public:
* TimeZone.createInstance() to create a TimeZone instead of creating a
* SimpleTimeZone directly with this constructor.
* <P>
- * Various types of daylight-savings time rules can be specfied by using different
+ * Various types of daylight-savings time rules can be specified by using different
* values for startDay and startDayOfWeek and endDay and endDayOfWeek. For a
* complete explanation of how these parameters work, see the documentation for
* setStartRule().
@@ -293,7 +293,7 @@ public:
* month, regardless of what day of the week it is (e.g., (-2, 0) is the
* next-to-last day of the month).</li>
* <li>If dayOfWeek is negative and dayOfWeekInMonth is positive, they specify the
- * first specified day of the week on or after the specfied day of the month.
+ * first specified day of the week on or after the specified day of the month.
* (e.g., (15, -SUNDAY) is the first Sunday after the 15th of the month
* [or the 15th itself if the 15th is a Sunday].)</li>
* <li>If dayOfWeek and DayOfWeekInMonth are both negative, they specify the
@@ -337,7 +337,7 @@ public:
* month, regardless of what day of the week it is (e.g., (-2, 0) is the
* next-to-last day of the month).</li>
* <li>If dayOfWeek is negative and dayOfWeekInMonth is positive, they specify the
- * first specified day of the week on or after the specfied day of the month.
+ * first specified day of the week on or after the specified day of the month.
* (e.g., (15, -SUNDAY) is the first Sunday after the 15th of the month
* [or the 15th itself if the 15th is a Sunday].)</li>
* <li>If dayOfWeek and DayOfWeekInMonth are both negative, they specify the
@@ -571,7 +571,7 @@ public:
* @stable ICU 2.0
*/
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
+ uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const override;
/**
* Gets the time zone offset, for current date, modified in case of
@@ -590,7 +590,7 @@ public:
*/
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
uint8_t dayOfWeek, int32_t milliseconds,
- int32_t monthLength, UErrorCode& status) const;
+ int32_t monthLength, UErrorCode& status) const override;
/**
* Gets the time zone offset, for current date, modified in case of
* daylight savings. This is the offset to add *to* UTC to get local time.
@@ -618,14 +618,18 @@ public:
* @stable ICU 2.8
*/
virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
- int32_t& dstOffset, UErrorCode& ec) const;
+ int32_t& dstOffset, UErrorCode& ec) const override;
+#ifndef U_FORCE_HIDE_DRAFT_API
/**
* Get time zone offsets from local wall time.
- * @internal
+ * @draft ICU 69
*/
- virtual void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
- int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const;
+ virtual void getOffsetFromLocal(
+ UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override;
+#endif /* U_FORCE_HIDE_DRAFT_API */
/**
* Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
@@ -634,7 +638,7 @@ public:
* @return The TimeZone's raw GMT offset.
* @stable ICU 2.0
*/
- virtual int32_t getRawOffset(void) const;
+ virtual int32_t getRawOffset(void) const override;
/**
* Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
@@ -643,7 +647,7 @@ public:
* @param offsetMillis The new raw GMT offset for this time zone.
* @stable ICU 2.0
*/
- virtual void setRawOffset(int32_t offsetMillis);
+ virtual void setRawOffset(int32_t offsetMillis) override;
/**
* Sets the amount of time in ms that the clock is advanced during DST.
@@ -664,7 +668,7 @@ public:
* but not 0.
* @stable ICU 2.0
*/
- virtual int32_t getDSTSavings(void) const;
+ virtual int32_t getDSTSavings(void) const override;
/**
* Queries if this TimeZone uses Daylight Savings Time.
@@ -672,7 +676,7 @@ public:
* @return True if this TimeZone uses Daylight Savings Time; false otherwise.
* @stable ICU 2.0
*/
- virtual UBool useDaylightTime(void) const;
+ virtual UBool useDaylightTime(void) const override;
#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
@@ -689,7 +693,7 @@ public:
* false otherwise.
* @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead.
*/
- virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
+ virtual UBool inDaylightTime(UDate date, UErrorCode& status) const override;
#endif // U_FORCE_HIDE_DEPRECATED_API
/**
@@ -698,7 +702,7 @@ public:
* @return true if the given zone has the same rules and offset as this one
* @stable ICU 2.0
*/
- UBool hasSameRules(const TimeZone& other) const;
+ UBool hasSameRules(const TimeZone& other) const override;
/**
* Clones TimeZone objects polymorphically. Clients are responsible for deleting
@@ -707,7 +711,7 @@ public:
* @return A new copy of this TimeZone object.
* @stable ICU 2.0
*/
- virtual SimpleTimeZone* clone() const;
+ virtual SimpleTimeZone* clone() const override;
/**
* Gets the first time zone transition after the base time.
@@ -717,7 +721,7 @@ public:
* @return true if the transition is found.
* @stable ICU 3.8
*/
- virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
+ virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
/**
* Gets the most recent time zone transition before the base time.
@@ -727,7 +731,7 @@ public:
* @return true if the transition is found.
* @stable ICU 3.8
*/
- virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
+ virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
/**
* Returns the number of <code>TimeZoneRule</code>s which represents time transitions,
@@ -737,7 +741,7 @@ public:
* @return The number of <code>TimeZoneRule</code>s representing time transitions.
* @stable ICU 3.8
*/
- virtual int32_t countTransitionRules(UErrorCode& status) const;
+ virtual int32_t countTransitionRules(UErrorCode& status) const override;
/**
* Gets the <code>InitialTimeZoneRule</code> and the set of <code>TimeZoneRule</code>
@@ -756,7 +760,7 @@ public:
* @stable ICU 3.8
*/
virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
- const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
+ const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override;
public:
@@ -771,7 +775,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Return the class ID for this class. This is useful only for comparing to a return
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
index 3296c6b3ab7..733a1cff13b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
@@ -756,7 +756,7 @@ public:
* names of the months), but not to provide the pattern.
* <P>
* A numbering system override is a string containing either the name of a known numbering system,
- * or a set of field and numbering system pairs that specify which fields are to be formattied with
+ * or a set of field and numbering system pairs that specify which fields are to be formatted with
* the alternate numbering system. For example, to specify that all numeric fields in the specified
* date or time pattern are to be rendered using Thai digits, simply specify the numbering system override
* as "thai". To specify that just the year portion of the date be formatted using Hebrew numbering,
@@ -797,7 +797,7 @@ public:
* names of the months), but not to provide the pattern.
* <P>
* A numbering system override is a string containing either the name of a known numbering system,
- * or a set of field and numbering system pairs that specify which fields are to be formattied with
+ * or a set of field and numbering system pairs that specify which fields are to be formatted with
* the alternate numbering system. For example, to specify that all numeric fields in the specified
* date or time pattern are to be rendered using Thai digits, simply specify the numbering system override
* as "thai". To specify that just the year portion of the date be formatted using Hebrew numbering,
@@ -867,7 +867,7 @@ public:
* @return A copy of the object.
* @stable ICU 2.0
*/
- virtual SimpleDateFormat* clone() const;
+ virtual SimpleDateFormat* clone() const override;
/**
* Return true if the given Format objects are semantically equal. Objects
@@ -876,7 +876,7 @@ public:
* @return true if the given Format objects are semantically equal.
* @stable ICU 2.0
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
using DateFormat::format;
@@ -899,7 +899,7 @@ public:
*/
virtual UnicodeString& format( Calendar& cal,
UnicodeString& appendTo,
- FieldPosition& pos) const;
+ FieldPosition& pos) const override;
/**
* Format a date or time, which is the standard millis since 24:00 GMT, Jan
@@ -922,7 +922,7 @@ public:
virtual UnicodeString& format( Calendar& cal,
UnicodeString& appendTo,
FieldPositionIterator* posIter,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
using DateFormat::parse;
@@ -954,7 +954,7 @@ public:
*/
virtual void parse( const UnicodeString& text,
Calendar& cal,
- ParsePosition& pos) const;
+ ParsePosition& pos) const override;
/**
@@ -1097,7 +1097,7 @@ public:
* other classes have different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Set the calendar to be used by this date format. Initially, the default
@@ -1108,7 +1108,7 @@ public:
* @param calendarToAdopt Calendar object to be adopted.
* @stable ICU 2.0
*/
- virtual void adoptCalendar(Calendar* calendarToAdopt);
+ virtual void adoptCalendar(Calendar* calendarToAdopt) override;
/* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */
/**
@@ -1144,7 +1144,7 @@ public:
* updated with any new status from the function.
* @stable ICU 53
*/
- virtual void setContext(UDisplayContext value, UErrorCode& status);
+ virtual void setContext(UDisplayContext value, UErrorCode& status) override;
/**
* Overrides base class method and
@@ -1153,7 +1153,7 @@ public:
* @param formatToAdopt the NumbeferFormat used
* @stable ICU 54
*/
- void adoptNumberFormat(NumberFormat *formatToAdopt);
+ void adoptNumberFormat(NumberFormat *formatToAdopt) override;
/**
* Allow the user to set the NumberFormat for several fields
@@ -1299,7 +1299,7 @@ private:
int32_t maxDigits) const;
/**
- * Return true if the given format character, occuring count
+ * Return true if the given format character, occurring count
* times, represents a numeric field.
*/
static UBool isNumeric(char16_t formatChar, int32_t count);
@@ -1386,7 +1386,7 @@ private:
*
* @param pattern the pattern string
* @param patternOffset the starting offset into the pattern text. On
- * outupt will be set the offset of the first non-literal character in the pattern
+ * output will be set the offset of the first non-literal character in the pattern
* @param text the text being parsed
* @param textOffset the starting offset into the text. On output
* will be set to the offset of the character after the match
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
index 1ca074477c7..b1231f18b78 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
@@ -145,7 +145,7 @@ public:
* @return Returns true if two collation keys are equal, false otherwise.
* @stable ICU 2.0
*/
- UBool operator==(const CollationKey& source) const;
+ bool operator==(const CollationKey& source) const;
/**
* Compare if two collation keys are not the same.
@@ -153,7 +153,7 @@ public:
* @return Returns true if two collation keys are different, false otherwise.
* @stable ICU 2.0
*/
- UBool operator!=(const CollationKey& source) const;
+ bool operator!=(const CollationKey& source) const;
/**
@@ -237,7 +237,7 @@ public:
* ICU "poor man's RTTI", returns a UClassID for the actual class.
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -316,7 +316,7 @@ private:
} fUnion;
};
-inline UBool
+inline bool
CollationKey::operator!=(const CollationKey& other) const
{
return !(*this == other);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
index 9bf3df07df5..c23e651d897 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
@@ -37,7 +37,7 @@ U_NAMESPACE_BEGIN
* StringSearch ensures that language eccentricity can be
* handled, e.g. for the German collator, characters &szlig; and SS will be matched
* if case is chosen to be ignored.
- * See the <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm">
+ * See the <a href="https://htmlpreview.github.io/?https://github.com/unicode-org/icu-docs/blob/main/design/collation/ICU_collation_design.htm">
* "ICU Collation Design Document"</a> for more information.
* <p>
* There are 2 match options for selection:<br>
@@ -297,7 +297,7 @@ public:
* while looking for the same pattern.
* @stable ICU 2.0
*/
- virtual UBool operator==(const SearchIterator &that) const;
+ virtual bool operator==(const SearchIterator &that) const override;
// public get and set methods ----------------------------------------
@@ -314,7 +314,7 @@ public:
* @param status for errors if it occurs
* @stable ICU 2.0
*/
- virtual void setOffset(int32_t position, UErrorCode &status);
+ virtual void setOffset(int32_t position, UErrorCode &status) override;
/**
* Return the current index in the text being searched.
@@ -324,7 +324,7 @@ public:
* @return current index in the text being searched.
* @stable ICU 2.0
*/
- virtual int32_t getOffset(void) const;
+ virtual int32_t getOffset(void) const override;
/**
* Set the target text to be searched.
@@ -337,7 +337,7 @@ public:
* U_ILLEGAL_ARGUMENT_ERROR is returned.
* @stable ICU 2.0
*/
- virtual void setText(const UnicodeString &text, UErrorCode &status);
+ virtual void setText(const UnicodeString &text, UErrorCode &status) override;
/**
* Set the target text to be searched.
@@ -353,7 +353,7 @@ public:
* U_ILLEGAL_ARGUMENT_ERROR is returned.
* @stable ICU 2.0
*/
- virtual void setText(CharacterIterator &text, UErrorCode &status);
+ virtual void setText(CharacterIterator &text, UErrorCode &status) override;
/**
* Gets the collator used for the language rules.
@@ -403,7 +403,7 @@ public:
* search will begin at the end of the text string.
* @stable ICU 2.0
*/
- virtual void reset();
+ virtual void reset() override;
/**
* Returns a copy of StringSearch with the same behavior, and
@@ -413,14 +413,14 @@ public:
* @return cloned object
* @stable ICU 2.0
*/
- virtual StringSearch * safeClone() const;
+ virtual StringSearch * safeClone() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*
* @stable ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -455,7 +455,7 @@ protected:
* USEARCH_DONE if no match was found.
* @stable ICU 2.0
*/
- virtual int32_t handleNext(int32_t position, UErrorCode &status);
+ virtual int32_t handleNext(int32_t position, UErrorCode &status) override;
/**
* Search backward for matching text, starting at a given location.
@@ -479,7 +479,7 @@ protected:
* USEARCH_DONE if no match was found.
* @stable ICU 2.0
*/
- virtual int32_t handlePrev(int32_t position, UErrorCode &status);
+ virtual int32_t handlePrev(int32_t position, UErrorCode &status) override;
private :
StringSearch(); // default constructor not implemented
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
index a004dd6644c..2de1af85392 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
@@ -112,7 +112,7 @@ class UVector64;
* Note, RuleBasedCollator is not to be subclassed.
* @see Collator
*/
-class U_I18N_API RuleBasedCollator : public Collator {
+class U_I18N_API RuleBasedCollator U_FINAL : public Collator {
public:
/**
* RuleBasedCollator constructor. This takes the table rules and builds a
@@ -223,14 +223,14 @@ public:
* @return true if arguments is the same as this object.
* @stable ICU 2.0
*/
- virtual UBool operator==(const Collator& other) const;
+ virtual bool operator==(const Collator& other) const override;
/**
* Makes a copy of this object.
* @return a copy of this object, owned by the caller
* @stable ICU 2.0
*/
- virtual RuleBasedCollator* clone() const;
+ virtual RuleBasedCollator* clone() const override;
/**
* Creates a collation element iterator for the source string. The caller of
@@ -274,7 +274,7 @@ public:
**/
virtual UCollationResult compare(const UnicodeString& source,
const UnicodeString& target,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
/**
* Does the same thing as compare but limits the comparison to a specified
@@ -292,7 +292,7 @@ public:
virtual UCollationResult compare(const UnicodeString& source,
const UnicodeString& target,
int32_t length,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
/**
* The comparison function compares the character data stored in two
@@ -312,7 +312,7 @@ public:
*/
virtual UCollationResult compare(const char16_t* source, int32_t sourceLength,
const char16_t* target, int32_t targetLength,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
/**
* Compares two strings using the Collator.
@@ -327,7 +327,7 @@ public:
*/
virtual UCollationResult compare(UCharIterator &sIter,
UCharIterator &tIter,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
/**
* Compares two UTF-8 strings using the Collator.
@@ -344,7 +344,7 @@ public:
*/
virtual UCollationResult compareUTF8(const StringPiece &source,
const StringPiece &target,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
/**
* Transforms the string into a series of characters
@@ -362,7 +362,7 @@ public:
*/
virtual CollationKey& getCollationKey(const UnicodeString& source,
CollationKey& key,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Transforms a specified region of the string into a series of characters
@@ -382,14 +382,14 @@ public:
virtual CollationKey& getCollationKey(const char16_t *source,
int32_t sourceLength,
CollationKey& key,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Generates the hash code for the rule-based collation object.
* @return the hash code.
* @stable ICU 2.0
*/
- virtual int32_t hashCode() const;
+ virtual int32_t hashCode() const override;
#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
@@ -402,7 +402,7 @@ public:
* was instantiated from rules, locale is empty.
* @deprecated ICU 2.8 likely to change in ICU 3.0, based on feedback
*/
- virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
+ virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const override;
#endif // U_FORCE_HIDE_DEPRECATED_API
/**
@@ -417,7 +417,7 @@ public:
* @param info the version # information, the result will be filled in
* @stable ICU 2.0
*/
- virtual void getVersion(UVersionInfo info) const;
+ virtual void getVersion(UVersionInfo info) const override;
#ifndef U_HIDE_DEPRECATED_API
/**
@@ -449,7 +449,7 @@ public:
* IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Returns the class ID for this class. This is useful only for comparing to
@@ -511,7 +511,7 @@ public:
* @stable ICU 2.2
*/
virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
- UErrorCode &status);
+ UErrorCode &status) override;
/**
* Universal attribute getter.
@@ -521,7 +521,7 @@ public:
* @stable ICU 2.2
*/
virtual UColAttributeValue getAttribute(UColAttribute attr,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
/**
* Sets the variable top to the top of the specified reordering group.
@@ -539,7 +539,7 @@ public:
* @see getMaxVariable
* @stable ICU 53
*/
- virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode);
+ virtual Collator &setMaxVariable(UColReorderCode group, UErrorCode &errorCode) override;
/**
* Returns the maximum reordering group whose characters are affected by UCOL_ALTERNATE_HANDLING.
@@ -547,7 +547,7 @@ public:
* @see setMaxVariable
* @stable ICU 53
*/
- virtual UColReorderCode getMaxVariable() const;
+ virtual UColReorderCode getMaxVariable() const override;
#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
@@ -566,7 +566,7 @@ public:
* @return variable top primary weight
* @deprecated ICU 53 Call setMaxVariable() instead.
*/
- virtual uint32_t setVariableTop(const char16_t *varTop, int32_t len, UErrorCode &status);
+ virtual uint32_t setVariableTop(const char16_t *varTop, int32_t len, UErrorCode &status) override;
/**
* Sets the variable top to the primary weight of the specified string.
@@ -583,7 +583,7 @@ public:
* @return variable top primary weight
* @deprecated ICU 53 Call setMaxVariable() instead.
*/
- virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status);
+ virtual uint32_t setVariableTop(const UnicodeString &varTop, UErrorCode &status) override;
/**
* Sets the variable top to the specified primary weight.
@@ -596,7 +596,7 @@ public:
* @param status error code
* @deprecated ICU 53 Call setMaxVariable() instead.
*/
- virtual void setVariableTop(uint32_t varTop, UErrorCode &status);
+ virtual void setVariableTop(uint32_t varTop, UErrorCode &status) override;
#endif // U_FORCE_HIDE_DEPRECATED_API
/**
@@ -606,7 +606,7 @@ public:
* @see getMaxVariable
* @stable ICU 2.0
*/
- virtual uint32_t getVariableTop(UErrorCode &status) const;
+ virtual uint32_t getVariableTop(UErrorCode &status) const override;
/**
* Get a UnicodeSet that contains all the characters and sequences tailored in
@@ -617,7 +617,7 @@ public:
* in the root collator. The object must be disposed of by using delete
* @stable ICU 2.4
*/
- virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
+ virtual UnicodeSet *getTailoredSet(UErrorCode &status) const override;
/**
* Get the sort key as an array of bytes from a UnicodeString.
@@ -634,7 +634,7 @@ public:
* @stable ICU 2.0
*/
virtual int32_t getSortKey(const UnicodeString& source, uint8_t *result,
- int32_t resultLength) const;
+ int32_t resultLength) const override;
/**
* Get the sort key as an array of bytes from a char16_t buffer.
@@ -653,7 +653,7 @@ public:
* @stable ICU 2.2
*/
virtual int32_t getSortKey(const char16_t *source, int32_t sourceLength,
- uint8_t *result, int32_t resultLength) const;
+ uint8_t *result, int32_t resultLength) const override;
/**
* Retrieves the reordering codes for this collator.
@@ -670,7 +670,7 @@ public:
*/
virtual int32_t getReorderCodes(int32_t *dest,
int32_t destCapacity,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
/**
* Sets the ordering of scripts for this collator.
@@ -685,7 +685,7 @@ public:
*/
virtual void setReorderCodes(const int32_t* reorderCodes,
int32_t reorderCodesLength,
- UErrorCode& status) ;
+ UErrorCode& status) override;
/**
* Implements ucol_strcollUTF8().
@@ -694,7 +694,7 @@ public:
virtual UCollationResult internalCompareUTF8(
const char *left, int32_t leftLength,
const char *right, int32_t rightLength,
- UErrorCode &errorCode) const;
+ UErrorCode &errorCode) const override;
/** Get the short definition string for a collator. This internal API harvests the collator's
* locale and the attribute set and produces a string that can be used for opening
@@ -722,7 +722,7 @@ public:
virtual int32_t internalGetShortDefinitionString(const char *locale,
char *buffer,
int32_t capacity,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
/**
* Implements ucol_nextSortKeyPart().
@@ -730,7 +730,7 @@ public:
*/
virtual int32_t internalNextSortKeyPart(
UCharIterator *iter, uint32_t state[2],
- uint8_t *dest, int32_t count, UErrorCode &errorCode) const;
+ uint8_t *dest, int32_t count, UErrorCode &errorCode) const override;
// Do not enclose the default constructor with #ifndef U_HIDE_INTERNAL_API
/**
@@ -806,7 +806,7 @@ protected:
* @param actualLocale the actual locale
* @internal
*/
- virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
+ virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale) override;
private:
friend class CollationElementIterator;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
index 90e5f254f48..382ad97d5bf 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
@@ -199,16 +199,29 @@ public:
const int32_t* rawOffset,
UErrorCode& ec);
+#ifndef U_HIDE_DEPRECATED_API
/**
* Returns an enumeration over all recognized time zone IDs. (i.e.,
* all strings that createTimeZone() accepts)
*
* @return an enumeration object, owned by the caller.
- * @stable ICU 2.4
+ * @deprecated ICU 70 Use createEnumeration(UErrorCode&) instead.
*/
static StringEnumeration* U_EXPORT2 createEnumeration();
+#endif // U_HIDE_DEPRECATED_API
/**
+ * Returns an enumeration over all recognized time zone IDs. (i.e.,
+ * all strings that createTimeZone() accepts)
+ *
+ * @param status Receives the status.
+ * @return an enumeration object, owned by the caller.
+ * @stable ICU 70
+ */
+ static StringEnumeration* U_EXPORT2 createEnumeration(UErrorCode& status);
+
+#ifndef U_HIDE_DEPRECATED_API
+ /**
* Returns an enumeration over time zone IDs with a given raw
* offset from GMT. There may be several times zones with the
* same GMT offset that differ in the way they handle daylight
@@ -223,21 +236,57 @@ public:
* @param rawOffset an offset from GMT in milliseconds, ignoring
* the effect of daylight savings time, if any
* @return an enumeration object, owned by the caller
- * @stable ICU 2.4
+ * @deprecated ICU 70 Use createEnumerationForRawOffset(int32_t,UErrorCode&) instead.
*/
static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset);
+#endif // U_HIDE_DEPRECATED_API
+
+ /**
+ * Returns an enumeration over time zone IDs with a given raw
+ * offset from GMT. There may be several times zones with the
+ * same GMT offset that differ in the way they handle daylight
+ * savings time. For example, the state of Arizona doesn't
+ * observe daylight savings time. If you ask for the time zone
+ * IDs corresponding to GMT-7:00, you'll get back an enumeration
+ * over two time zone IDs: "America/Denver," which corresponds to
+ * Mountain Standard Time in the winter and Mountain Daylight Time
+ * in the summer, and "America/Phoenix", which corresponds to
+ * Mountain Standard Time year-round, even in the summer.
+ *
+ * @param rawOffset an offset from GMT in milliseconds, ignoring
+ * the effect of daylight savings time, if any
+ * @param status Receives the status.
+ * @return an enumeration object, owned by the caller
+ * @stable ICU 70
+ */
+ static StringEnumeration* U_EXPORT2 createEnumerationForRawOffset(int32_t rawOffset, UErrorCode& status);
+#ifndef U_HIDE_DEPRECATED_API
/**
* Returns an enumeration over time zone IDs associated with the
- * given country. Some zones are affiliated with no country
+ * given region. Some zones are affiliated with no region
* (e.g., "UTC"); these may also be retrieved, as a group.
*
- * @param country The ISO 3166 two-letter country code, or NULL to
- * retrieve zones not affiliated with any country.
+ * @param region The ISO 3166 two-letter country code, or NULL to
+ * retrieve zones not affiliated with any region.
* @return an enumeration object, owned by the caller
- * @stable ICU 2.4
+ * @deprecated ICU 70 Use createEnumerationForRegion(const char*,UErrorCode&) instead.
+ */
+ static StringEnumeration* U_EXPORT2 createEnumeration(const char* region);
+#endif // U_HIDE_DEPRECATED_API
+
+ /**
+ * Returns an enumeration over time zone IDs associated with the
+ * given region. Some zones are affiliated with no region
+ * (e.g., "UTC"); these may also be retrieved, as a group.
+ *
+ * @param region The ISO 3166 two-letter country code, or NULL to
+ * retrieve zones not affiliated with any region.
+ * @param status Receives the status.
+ * @return an enumeration object, owned by the caller
+ * @stable ICU 70
*/
- static StringEnumeration* U_EXPORT2 createEnumeration(const char* country);
+ static StringEnumeration* U_EXPORT2 createEnumerationForRegion(const char* region, UErrorCode& status);
/**
* Returns the number of IDs in the equivalency group that
@@ -454,22 +503,22 @@ public:
* IDs, but subclasses are expected to also compare the fields they add.)
*
* @param that The TimeZone object to be compared with.
- * @return True if the given TimeZone is equal to this TimeZone; false
+ * @return true if the given TimeZone is equal to this TimeZone; false
* otherwise.
* @stable ICU 2.0
*/
- virtual UBool operator==(const TimeZone& that) const;
+ virtual bool operator==(const TimeZone& that) const;
/**
* Returns true if the two TimeZones are NOT equal; that is, if operator==() returns
* false.
*
* @param that The TimeZone object to be compared with.
- * @return True if the given TimeZone is not equal to this TimeZone; false
+ * @return true if the given TimeZone is not equal to this TimeZone; false
* otherwise.
* @stable ICU 2.0
*/
- UBool operator!=(const TimeZone& that) const {return !operator==(that);}
+ bool operator!=(const TimeZone& that) const {return !operator==(that);}
/**
* Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add
@@ -790,7 +839,7 @@ public:
* same class ID. Objects of other classes have different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const = 0;
+ virtual UClassID getDynamicClassID(void) const override = 0;
/**
* Returns the amount of time to be added to local standard time
@@ -923,7 +972,7 @@ private:
* Parses the given custom time zone identifier
* @param id id A string of the form GMT[+-]hh:mm, GMT[+-]hhmm, or
* GMT[+-]hh.
- * @param sign Receves parsed sign, 1 for positive, -1 for negative.
+ * @param sign Receives parsed sign, 1 for positive, -1 for negative.
* @param hour Receives parsed hour field
* @param minute Receives parsed minute field
* @param second Receives parsed second field
@@ -951,7 +1000,7 @@ private:
* @param min offset minutes
* @param sec offset seconds
* @param negative sign of the offset, true for negative offset.
- * @param id Receves the format result (normalized custom ID)
+ * @param id Receives the format result (normalized custom ID)
* @return The reference to id
*/
static UnicodeString& formatCustomID(int32_t hour, int32_t min, int32_t sec,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tmunit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tmunit.h
index 2e949ddfbd5..24abb49f198 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tmunit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tmunit.h
@@ -73,7 +73,7 @@ public:
* Override clone.
* @stable ICU 4.2
*/
- virtual TimeUnit* clone() const;
+ virtual TimeUnit* clone() const override;
/**
* Copy operator.
@@ -95,7 +95,7 @@ public:
* different class IDs.
* @stable ICU 4.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* Returns the class ID for this class. This is used to compare to
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h
index d5972e7991e..88e892fb0c2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h
@@ -87,7 +87,7 @@ public:
* @return a polymorphic clone of this object. The result will have the same class as returned by getDynamicClassID().
* @stable ICU 4.2
*/
- virtual TimeUnitAmount* clone() const;
+ virtual TimeUnitAmount* clone() const override;
/**
@@ -103,7 +103,7 @@ public:
* @return true if this object is equal to the given object.
* @stable ICU 4.2
*/
- virtual UBool operator==(const UObject& other) const;
+ virtual bool operator==(const UObject& other) const;
/**
@@ -112,7 +112,7 @@ public:
* @return true if this object is not equal to the given object.
* @stable ICU 4.2
*/
- UBool operator!=(const UObject& other) const;
+ bool operator!=(const UObject& other) const;
/**
@@ -140,7 +140,7 @@ public:
* other classes have different class IDs.
* @stable ICU 4.2
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
@@ -160,7 +160,7 @@ public:
-inline UBool
+inline bool
TimeUnitAmount::operator!=(const UObject& other) const {
return !operator==(other);
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutfmt.h
index ad871f7c09f..02e0563a010 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutfmt.h
@@ -126,7 +126,7 @@ public:
* @return A copy of the object.
* @deprecated ICU 53
*/
- virtual TimeUnitFormat* clone() const;
+ virtual TimeUnitFormat* clone() const override;
/**
* Assignment operator
@@ -135,15 +135,6 @@ public:
TimeUnitFormat& operator=(const TimeUnitFormat& other);
/**
- * Return true if the given Format objects are not semantically equal.
- * Objects of different subclasses are considered unequal.
- * @param other the object to be compared with.
- * @return true if the given Format objects are not semantically equal.
- * @deprecated ICU 53
- */
- UBool operator!=(const Format& other) const;
-
- /**
* Set the locale used for formatting or parsing.
* @param locale the locale to be set
* @param status output param set to success/failure code on exit
@@ -167,7 +158,7 @@ public:
*/
virtual void parseObject(const UnicodeString& source,
Formattable& result,
- ParsePosition& pos) const;
+ ParsePosition& pos) const override;
/**
* Return the class ID for this class. This is useful only for comparing to
@@ -193,7 +184,7 @@ public:
* other classes have different class IDs.
* @deprecated ICU 53
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
private:
Hashtable* fTimeUnitToCountToPatterns[TimeUnit::UTIMEUNIT_FIELD_COUNT];
@@ -236,11 +227,6 @@ private:
friend struct TimeUnitFormatReadSink;
};
-inline UBool
-TimeUnitFormat::operator!=(const Format& other) const {
- return !operator==(other);
-}
-
U_NAMESPACE_END
#endif /* U_HIDE_DEPRECATED_API */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
index 2aa02c39f13..56eb6448ca4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
@@ -18,7 +18,7 @@
/**
* \file
- * \brief C++ API: Tranforms text from one format to another.
+ * \brief C++ API: Transforms text from one format to another.
*/
#if !UCONFIG_NO_TRANSLITERATION
@@ -157,7 +157,7 @@ class TransliteratorIDParser;
* transliterator <b>B</b> decrements character values, then <b>A</b>
* is an inverse of <b>B</b> and vice versa. If we compose <b>A</b>
* with <b>B</b> in a compound transliterator, the result is the
- * indentity transliterator, that is, a transliterator that does not
+ * identity transliterator, that is, a transliterator that does not
* change its input text.
*
* The <code>Transliterator</code> method <code>getInverse()</code>
@@ -219,7 +219,7 @@ class TransliteratorIDParser;
* acts a template; future calls to {@link #createInstance } with the ID
* of the registered object return clones of that object. Thus any
* object passed to <tt>registerInstance()</tt> must implement
- * <tt>clone()</tt> propertly. To register a transliterator subclass
+ * <tt>clone()</tt> properly. To register a transliterator subclass
* without instantiating it (until it is needed), users may call
* {@link #registerFactory }. In this case, the objects are
* instantiated by invoking the zero-argument public constructor of
@@ -317,7 +317,7 @@ class TransliteratorIDParser;
* replacement. The cursor is the point in the text at which the
* next replacement, if any, will be applied. The cursor is usually
* placed within the replacement text; however, it can actually be
- * placed into the precending or following context by using the
+ * placed into the preceding or following context by using the
* special character '@'. Examples:
*
* <pre>
@@ -375,7 +375,7 @@ class TransliteratorIDParser;
*
* <p>It is also possible to match the beginning or the end of the text using a <code>UnicodeSet</code>.
* This is done by including a virtual anchor character '<code>$</code>' at the end of the
- * set pattern. Although this is usually the match chafacter for the end anchor, the set will
+ * set pattern. Although this is usually the match character for the end anchor, the set will
* match either the beginning or the end of the text, depending on its placement. For
* example:
*
@@ -683,8 +683,8 @@ public:
* unambiguous transliterations. After the last call to this
* method, there may be untransliterated text that is waiting for
* more input to resolve an ambiguity. In order to perform these
- * pending transliterations, clients should call {@link
- * #finishTransliteration } after the last call to this
+ * pending transliterations, clients should call
+ * {@link #finishTransliteration } after the last call to this
* method has been made.
*
* @param text the buffer holding transliterated and untransliterated text
@@ -741,8 +741,7 @@ public:
/**
* Transliterates the portion of the text buffer that can be
* transliterated unambiguosly. This is a convenience method; see
- * {@link
- * #transliterate(Replaceable&, UTransPosition&, const UnicodeString&, UErrorCode&) const }
+ * {@link #transliterate(Replaceable&, UTransPosition&, const UnicodeString&, UErrorCode&) const }
* for details.
* @param text the buffer holding transliterated and
* untransliterated text
@@ -761,8 +760,7 @@ public:
* <code>transliterate()</code>.
* @param text the buffer holding transliterated and
* untransliterated text.
- * @param index the array of indices previously passed to {@link
- * #transliterate }
+ * @param index the array of indices previously passed to {@link #transliterate }
* @stable ICU 2.0
*/
virtual void finishTransliteration(Replaceable& text,
@@ -883,7 +881,7 @@ public:
* @param text the text to be transliterated
* @param index the position indices
* @param incremental if true, then assume more characters may be inserted
- * at index.limit, and postpone processing to accomodate future incoming
+ * at index.limit, and postpone processing to accommodate future incoming
* characters
* @stable ICU 2.4
*/
@@ -913,7 +911,7 @@ private:
* @param text the text to be transliterated
* @param index the position indices
* @param incremental if true, then assume more characters may be inserted
- * at index.limit, and postpone processing to accomodate future incoming
+ * at index.limit, and postpone processing to accommodate future incoming
* characters
* @param rollback if true and if incremental is true, then perform special
* incremental processing, as described above, and undo partial
@@ -968,8 +966,8 @@ public:
/**
* Returns a name for this transliterator that is appropriate for
- * display to the user in the default locale. See {@link
- * #getDisplayName } for details.
+ * display to the user in the default locale. See {@link #getDisplayName }
+ * for details.
* @param ID the string identifier for this transliterator
* @param result Output param to receive the display name
* @return A reference to 'result'.
@@ -1063,7 +1061,7 @@ public:
*
* @param ID a valid ID, as enumerated by <code>getAvailableIDs()</code>
* @param dir either FORWARD or REVERSE.
- * @param parseError Struct to recieve information on position
+ * @param parseError Struct to receive information on position
* of error if an error is encountered
* @param status Output param to filled in with a success or an error.
* @return A <code>Transliterator</code> object with the given ID
@@ -1168,8 +1166,8 @@ public:
* input text by this Transliterator. This incorporates this
* object's current filter; if the filter is changed, the return
* value of this function will change. The default implementation
- * returns an empty set. Some subclasses may override {@link
- * #handleGetSourceSet } to return a more precise result. The
+ * returns an empty set. Some subclasses may override
+ * {@link #handleGetSourceSet } to return a more precise result. The
* return result is approximate in any case and is intended for
* use by tests, tools, or utilities.
* @param result receives result set; previous contents lost
@@ -1382,7 +1380,7 @@ public:
* Return a registered source specifier.
* @param index which specifier to return, from 0 to n-1, where
* n = countAvailableSources()
- * @param result fill-in paramter to receive the source specifier.
+ * @param result fill-in parameter to receive the source specifier.
* If index is out of range, result will be empty.
* @return reference to result
* @stable ICU 2.0
@@ -1405,7 +1403,7 @@ public:
* @param index which specifier to return, from 0 to n-1, where
* n = countAvailableTargets(source)
* @param source the source specifier
- * @param result fill-in paramter to receive the target specifier.
+ * @param result fill-in parameter to receive the target specifier.
* If source is invalid or if index is out of range, result will
* be empty.
* @return reference to result
@@ -1432,7 +1430,7 @@ public:
* n = countAvailableVariants(source, target)
* @param source the source specifier
* @param target the target specifier
- * @param result fill-in paramter to receive the variant
+ * @param result fill-in parameter to receive the variant
* specifier. If source is invalid or if target is invalid or if
* index is out of range, result will be empty.
* @return reference to result
@@ -1529,7 +1527,7 @@ public:
* different class IDs.
* @stable ICU 2.0
*/
- virtual UClassID getDynamicClassID(void) const = 0;
+ virtual UClassID getDynamicClassID(void) const override = 0;
private:
static UBool initializeRegistry(UErrorCode &status);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
index 4411865984b..6db8477026a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
@@ -299,7 +299,7 @@ public:
* Objects of different subclasses are considered unequal.
* @stable ICU 50
*/
- virtual UBool operator==(const Format& other) const;
+ virtual bool operator==(const Format& other) const override;
/**
* Clone this object polymorphically. The caller is responsible
@@ -307,7 +307,7 @@ public:
* @return A copy of the object
* @stable ICU 50
*/
- virtual TimeZoneFormat* clone() const;
+ virtual TimeZoneFormat* clone() const override;
/**
* Creates an instance of <code>TimeZoneFormat</code> for the given locale.
@@ -327,7 +327,7 @@ public:
const TimeZoneNames* getTimeZoneNames() const;
/**
- * Sets the time zone display name data to this format instnace.
+ * Sets the time zone display name data to this format instance.
* The caller should not delete the TimeZoenNames object after it is adopted
* by this call.
* @param tznames TimeZoneNames object to be adopted.
@@ -336,7 +336,7 @@ public:
void adoptTimeZoneNames(TimeZoneNames *tznames);
/**
- * Sets the time zone display name data to this format instnace.
+ * Sets the time zone display name data to this format instance.
* @param tznames TimeZoneNames object to be set.
* @stable ICU 50
*/
@@ -355,7 +355,7 @@ public:
* Sets the localized GMT format pattern. The pattern must contain
* a single argument {0}, for example "GMT {0}".
* @param pattern The localized GMT format pattern to be used by this object.
- * @param status Recieves the status.
+ * @param status Receives the status.
* @see #getGMTPattern
* @stable ICU 50
*/
@@ -437,7 +437,7 @@ public:
* Sets the default parse options.
* <p><b>Note</b>: By default, an instance of <code>TimeZoneFormat</code>
* created by {@link #createInstance} has no parse options set (UTZFMT_PARSE_OPTION_NONE).
- * To specify multipe options, use bitwise flags of UTimeZoneFormatParseOption.
+ * To specify multiple options, use bitwise flags of UTimeZoneFormatParseOption.
* @see #UTimeZoneFormatParseOption
* @stable ICU 50
*/
@@ -590,7 +590,7 @@ public:
* @param text The text contains a time zone string at the position.
* @param style The format style
* @param pos The position.
- * @param parseOptions The parse options repesented by bitwise flags of UTimeZoneFormatParseOption.
+ * @param parseOptions The parse options represented by bitwise flags of UTimeZoneFormatParseOption.
* @param timeType The output argument for receiving the time type (standard/daylight/unknown),
* or NULL if the information is not necessary.
* @return A <code>TimeZone</code>, or null if the input could not be parsed.
@@ -636,7 +636,7 @@ public:
* @stable ICU 50
*/
virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo,
- FieldPosition& pos, UErrorCode& status) const;
+ FieldPosition& pos, UErrorCode& status) const override;
/**
* Parse a string to produce an object. This methods handles parsing of
@@ -650,7 +650,7 @@ public:
* delete it when done.
* @stable ICU 50
*/
- virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const;
+ virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -662,7 +662,7 @@ public:
* ICU "poor man's RTTI", returns a UClassID for the actual class.
* @stable ICU 50
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
protected:
/**
@@ -1058,7 +1058,7 @@ private:
* Returns the time zone ID of a match at the specified index within
* the MatchInfoCollection.
* @param matches the collection of matches
- * @param idx the index withing matches
+ * @param idx the index within matches
* @param tzID receives the resolved time zone ID
* @return a reference to tzID.
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
index 2e20eff6089..b32e9562d5e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
@@ -142,7 +142,7 @@ public:
* @return Return true if the given Format objects are semantically equal.
* @stable ICU 50
*/
- virtual UBool operator==(const TimeZoneNames& other) const = 0;
+ virtual bool operator==(const TimeZoneNames& other) const = 0;
/**
* Return true if the given TimeZoneNames objects are not semantically
@@ -151,7 +151,7 @@ public:
* @return Return true if the given Format objects are not semantically equal.
* @stable ICU 50
*/
- UBool operator!=(const TimeZoneNames& other) const { return !operator==(other); }
+ bool operator!=(const TimeZoneNames& other) const { return !operator==(other); }
/**
* Clone this object polymorphically. The caller is responsible
@@ -193,7 +193,7 @@ public:
/**
* Returns an enumeration of all available meta zone IDs used by the given time zone.
- * @param tzID The canoical tiem zone ID.
+ * @param tzID The canonical time zone ID.
* @param status Receives the status.
* @return an enumeration object, owned by the caller.
* @stable ICU 50
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tzrule.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tzrule.h
index 795806d90fb..ab0b97b6fd2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tzrule.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tzrule.h
@@ -56,7 +56,7 @@ public:
* @return true if the given <code>TimeZoneRule</code> objects are semantically equal.
* @stable ICU 3.8
*/
- virtual UBool operator==(const TimeZoneRule& that) const;
+ virtual bool operator==(const TimeZoneRule& that) const;
/**
* Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects
@@ -65,7 +65,7 @@ public:
* @return true if the given <code>TimeZoneRule</code> objects are semantically unequal.
* @stable ICU 3.8
*/
- virtual UBool operator!=(const TimeZoneRule& that) const;
+ virtual bool operator!=(const TimeZoneRule& that) const;
/**
* Fills in "name" with the name of this time zone.
@@ -231,7 +231,7 @@ public:
* @return A copy of the object.
* @stable ICU 3.8
*/
- virtual InitialTimeZoneRule* clone() const;
+ virtual InitialTimeZoneRule* clone() const override;
/**
* Assignment operator.
@@ -247,7 +247,7 @@ public:
* @return true if the given <code>TimeZoneRule</code> objects are semantically equal.
* @stable ICU 3.8
*/
- virtual UBool operator==(const TimeZoneRule& that) const;
+ virtual bool operator==(const TimeZoneRule& that) const override;
/**
* Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects
@@ -256,7 +256,7 @@ public:
* @return true if the given <code>TimeZoneRule</code> objects are semantically unequal.
* @stable ICU 3.8
*/
- virtual UBool operator!=(const TimeZoneRule& that) const;
+ virtual bool operator!=(const TimeZoneRule& that) const override;
/**
* Gets the time when this rule takes effect in the given year.
@@ -280,7 +280,7 @@ public:
* @return true if the other <code>TimeZoneRule</code> is equivalent to this one.
* @stable ICU 3.8
*/
- virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
+ virtual UBool isEquivalentTo(const TimeZoneRule& that) const override;
/**
* Gets the very first time when this rule takes effect.
@@ -293,7 +293,7 @@ public:
* "result" is unchanged.
* @stable ICU 3.8
*/
- virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
+ virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
/**
* Gets the final time when this rule takes effect.
@@ -306,7 +306,7 @@ public:
* "result" is unchanged.
* @stable ICU 3.8
*/
- virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
+ virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
/**
* Gets the first time when this rule takes effect after the specified time.
@@ -323,7 +323,7 @@ public:
* @stable ICU 3.8
*/
virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
- UBool inclusive, UDate& result) const;
+ UBool inclusive, UDate& result) const override;
/**
* Gets the most recent time when this rule takes effect before the specified time.
@@ -340,7 +340,7 @@ public:
* @stable ICU 3.8
*/
virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
- UBool inclusive, UDate& result) const;
+ UBool inclusive, UDate& result) const override;
public:
/**
@@ -367,12 +367,12 @@ public:
* other classes have different class IDs.
* @stable ICU 3.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
/**
* <code>AnnualTimeZoneRule</code> is a class used for representing a time zone
- * rule which takes effect annually. The calenday system used for the rule is
+ * rule which takes effect annually. The calendar system used for the rule is
* is based on Gregorian calendar
*
* @stable ICU 3.8
@@ -442,7 +442,7 @@ public:
* @return A copy of the object.
* @stable ICU 3.8
*/
- virtual AnnualTimeZoneRule* clone() const;
+ virtual AnnualTimeZoneRule* clone() const override;
/**
* Assignment operator.
@@ -458,7 +458,7 @@ public:
* @return true if the given <code>TimeZoneRule</code> objects are semantically equal.
* @stable ICU 3.8
*/
- virtual UBool operator==(const TimeZoneRule& that) const;
+ virtual bool operator==(const TimeZoneRule& that) const override;
/**
* Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects
@@ -467,7 +467,7 @@ public:
* @return true if the given <code>TimeZoneRule</code> objects are semantically unequal.
* @stable ICU 3.8
*/
- virtual UBool operator!=(const TimeZoneRule& that) const;
+ virtual bool operator!=(const TimeZoneRule& that) const override;
/**
* Gets the start date/time rule used by this rule.
@@ -515,7 +515,7 @@ public:
* @return true if the other <code>TimeZoneRule</code> is equivalent to this one.
* @stable ICU 3.8
*/
- virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
+ virtual UBool isEquivalentTo(const TimeZoneRule& that) const override;
/**
* Gets the very first time when this rule takes effect.
@@ -528,7 +528,7 @@ public:
* "result" is unchanged.
* @stable ICU 3.8
*/
- virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
+ virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
/**
* Gets the final time when this rule takes effect.
@@ -541,7 +541,7 @@ public:
* "result" is unchanged.
* @stable ICU 3.8
*/
- virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
+ virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
/**
* Gets the first time when this rule takes effect after the specified time.
@@ -558,7 +558,7 @@ public:
* @stable ICU 3.8
*/
virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
- UBool inclusive, UDate& result) const;
+ UBool inclusive, UDate& result) const override;
/**
* Gets the most recent time when this rule takes effect before the specified time.
@@ -575,7 +575,7 @@ public:
* @stable ICU 3.8
*/
virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
- UBool inclusive, UDate& result) const;
+ UBool inclusive, UDate& result) const override;
private:
@@ -608,7 +608,7 @@ public:
* other classes have different class IDs.
* @stable ICU 3.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
/**
@@ -658,7 +658,7 @@ public:
* @return A copy of the object.
* @stable ICU 3.8
*/
- virtual TimeArrayTimeZoneRule* clone() const;
+ virtual TimeArrayTimeZoneRule* clone() const override;
/**
* Assignment operator.
@@ -674,7 +674,7 @@ public:
* @return true if the given <code>TimeZoneRule</code> objects are semantically equal.
* @stable ICU 3.8
*/
- virtual UBool operator==(const TimeZoneRule& that) const;
+ virtual bool operator==(const TimeZoneRule& that) const override;
/**
* Return true if the given <code>TimeZoneRule</code> objects are semantically unequal. Objects
@@ -683,7 +683,7 @@ public:
* @return true if the given <code>TimeZoneRule</code> objects are semantically unequal.
* @stable ICU 3.8
*/
- virtual UBool operator!=(const TimeZoneRule& that) const;
+ virtual bool operator!=(const TimeZoneRule& that) const override;
/**
* Gets the time type of the start times used by this rule. The return value
@@ -721,7 +721,7 @@ public:
* @return true if the other <code>TimeZoneRule</code> is equivalent to this one.
* @stable ICU 3.8
*/
- virtual UBool isEquivalentTo(const TimeZoneRule& that) const;
+ virtual UBool isEquivalentTo(const TimeZoneRule& that) const override;
/**
* Gets the very first time when this rule takes effect.
@@ -734,7 +734,7 @@ public:
* "result" is unchanged.
* @stable ICU 3.8
*/
- virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
+ virtual UBool getFirstStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
/**
* Gets the final time when this rule takes effect.
@@ -747,7 +747,7 @@ public:
* "result" is unchanged.
* @stable ICU 3.8
*/
- virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const;
+ virtual UBool getFinalStart(int32_t prevRawOffset, int32_t prevDSTSavings, UDate& result) const override;
/**
* Gets the first time when this rule takes effect after the specified time.
@@ -764,7 +764,7 @@ public:
* @stable ICU 3.8
*/
virtual UBool getNextStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
- UBool inclusive, UDate& result) const;
+ UBool inclusive, UDate& result) const override;
/**
* Gets the most recent time when this rule takes effect before the specified time.
@@ -781,7 +781,7 @@ public:
* @stable ICU 3.8
*/
virtual UBool getPreviousStart(UDate base, int32_t prevRawOffset, int32_t prevDSTSavings,
- UBool inclusive, UDate& result) const;
+ UBool inclusive, UDate& result) const override;
private:
@@ -819,7 +819,7 @@ public:
* other classes have different class IDs.
* @stable ICU 3.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/tztrans.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/tztrans.h
index 217d711eec3..5adbeb35e43 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/tztrans.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/tztrans.h
@@ -86,7 +86,7 @@ public:
* @return true if the given TimeZoneTransition objects are semantically equal.
* @stable ICU 3.8
*/
- UBool operator==(const TimeZoneTransition& that) const;
+ bool operator==(const TimeZoneTransition& that) const;
/**
* Return true if the given TimeZoneTransition objects are semantically unequal. Objects
@@ -95,7 +95,7 @@ public:
* @return true if the given TimeZoneTransition objects are semantically unequal.
* @stable ICU 3.8
*/
- UBool operator!=(const TimeZoneTransition& that) const;
+ bool operator!=(const TimeZoneTransition& that) const;
/**
* Returns the time of transition in milliseconds.
@@ -187,7 +187,7 @@ public:
* other classes have different class IDs.
* @stable ICU 3.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
index 89b16042437..94abae83919 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
@@ -1289,7 +1289,7 @@ enum UCalendarLimitType {
UCAL_MAXIMUM,
/** Greatest minimum value */
UCAL_GREATEST_MINIMUM,
- /** Leaest maximum value */
+ /** Least maximum value */
UCAL_LEAST_MAXIMUM,
/** Actual minimum value */
UCAL_ACTUAL_MINIMUM,
@@ -1617,6 +1617,109 @@ U_CAPI int32_t U_EXPORT2
ucal_getTimeZoneIDForWindowsID(const UChar* winid, int32_t len, const char* region,
UChar* id, int32_t idCapacity, UErrorCode* status);
+#ifndef U_FORCE_HIDE_DRAFT_API
+/**
+ * Options used by ucal_getTimeZoneOffsetFromLocal and BasicTimeZone::getOffsetFromLocal()
+ * to specify how to interpret an input time when it does not exist, or when it is ambiguous,
+ * around a time zone transition.
+ * @draft ICU 69
+ */
+enum UTimeZoneLocalOption {
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * An input time is always interpreted as local time before
+ * a time zone transition.
+ * @draft ICU 69
+ */
+ UCAL_TZ_LOCAL_FORMER = 0x04,
+ /**
+ * An input time is always interpreted as local time after
+ * a time zone transition.
+ * @draft ICU 69
+ */
+ UCAL_TZ_LOCAL_LATTER = 0x0C,
+ /**
+ * An input time is interpreted as standard time when local
+ * time is switched to/from daylight saving time. When both
+ * sides of a time zone transition are standard time,
+ * or daylight saving time, the local time before the
+ * transition is used.
+ * @draft ICU 69
+ */
+ UCAL_TZ_LOCAL_STANDARD_FORMER = UCAL_TZ_LOCAL_FORMER | 0x01,
+ /**
+ * An input time is interpreted as standard time when local
+ * time is switched to/from daylight saving time. When both
+ * sides of a time zone transition are standard time,
+ * or daylight saving time, the local time after the
+ * transition is used.
+ * @draft ICU 69
+ */
+ UCAL_TZ_LOCAL_STANDARD_LATTER = UCAL_TZ_LOCAL_LATTER | 0x01,
+ /**
+ * An input time is interpreted as daylight saving time when
+ * local time is switched to/from standard time. When both
+ * sides of a time zone transition are standard time,
+ * or daylight saving time, the local time before the
+ * transition is used.
+ * @draft ICU 69
+ */
+ UCAL_TZ_LOCAL_DAYLIGHT_FORMER = UCAL_TZ_LOCAL_FORMER | 0x03,
+ /**
+ * An input time is interpreted as daylight saving time when
+ * local time is switched to/from standard time. When both
+ * sides of a time zone transition are standard time,
+ * or daylight saving time, the local time after the
+ * transition is used.
+ * @draft ICU 69
+ */
+ UCAL_TZ_LOCAL_DAYLIGHT_LATTER = UCAL_TZ_LOCAL_LATTER | 0x03,
+#else /* U_HIDE_DRAFT_API */
+ /**
+ * Dummy value to prevent empty enum if U_HIDE_DRAFT_API.
+ * This will go away when draft conditionals are removed.
+ * @internal
+ */
+ UCAL_TZ_LOCAL_NONE = 0,
+#endif /* U_HIDE_DRAFT_API */
+};
+typedef enum UTimeZoneLocalOption UTimeZoneLocalOption; /**< @draft ICU 69 */
+
+/**
+* Returns the time zone raw and GMT offset for the given moment
+* in time. Upon return, local-millis = GMT-millis + rawOffset +
+* dstOffset. All computations are performed in the proleptic
+* Gregorian calendar.
+*
+* @param cal The UCalendar which specify the local date and time value to query.
+* @param nonExistingTimeOpt The option to indicate how to interpret the date and
+* time in the calendar represent a local time that skipped at a positive time
+* zone transitions (e.g. when the daylight saving time starts or the time zone
+* offset is increased due to a time zone rule change).
+* @param duplicatedTimeOpt The option to indicate how to interpret the date and
+* time in the calendar represent a local time that repeating multiple times at a
+* negative time zone transition (e.g. when the daylight saving time ends or the
+* time zone offset is decreased due to a time zone rule change)
+* @param rawOffset output parameter to receive the raw offset, that
+* is, the offset not including DST adjustments.
+* If the status is set to one of the error code, the value set is unspecified.
+* @param dstOffset output parameter to receive the DST offset,
+* that is, the offset to be added to `rawOffset' to obtain the
+* total offset between local and GMT time. If DST is not in
+* effect, this value is zero; otherwise it is a positive value,
+* typically one hour.
+* If the status is set to one of the error code, the value set is unspecified.
+* @param status A pointer to a UErrorCode to receive any errors.
+* @draft ICU 69
+*/
+U_CAPI void U_EXPORT2
+ucal_getTimeZoneOffsetFromLocal(
+ const UCalendar* cal,
+ UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status);
+#endif /* U_FORCE_HIDE_DRAFT_API */
+
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
index a01d0ae9af8..6d22eb6069e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
@@ -83,7 +83,7 @@ typedef enum {
} UCollationResult ;
-/** Enum containing attribute values for controling collation behavior.
+/** Enum containing attribute values for controlling collation behavior.
* Here are all the allowable values. Not every attribute can take every value. The only
* universal value is UCOL_DEFAULT, which resets the attribute value to the predefined
* value for that locale
@@ -418,7 +418,7 @@ ucol_open(const char *loc, UErrorCode *status);
* UCOL_DEFAULT (set the mode according to the rules)
* @param strength The default collation strength; one of UCOL_PRIMARY, UCOL_SECONDARY,
* UCOL_TERTIARY, UCOL_IDENTICAL,UCOL_DEFAULT_STRENGTH - can be also set in the rules.
- * @param parseError A pointer to UParseError to recieve information about errors
+ * @param parseError A pointer to UParseError to receive information about errors
* occurred during parsing. This argument can currently be set
* to NULL, but at users own risk. Please provide a real structure.
* @param status A pointer to a UErrorCode to receive any errors
@@ -443,7 +443,7 @@ ucol_openRules( const UChar *rules,
* The structure and the syntax of the string is defined in the "Naming collators"
* section of the users guide:
* https://unicode-org.github.io/icu/userguide/collation/concepts#collator-naming-scheme
- * Attributes are overriden by the subsequent attributes. So, for "S2_S3", final
+ * Attributes are overridden by the subsequent attributes. So, for "S2_S3", final
* strength will be 3. 3066bis locale overrides individual locale parts.
* The call to this function is equivalent to a call to ucol_open, followed by a
* series of calls to ucol_setAttribute and ucol_setVariableTop.
@@ -462,7 +462,7 @@ ucol_openRules( const UChar *rules,
* instantiating collators (like out of memory or similar), this
* API will return an error if an invalid attribute or attribute/value
* combination is specified.
- * @return A pointer to a UCollator or 0 if an error occured (including an
+ * @return A pointer to a UCollator or 0 if an error occurred (including an
* invalid attribute).
* @see ucol_open
* @see ucol_setAttribute
@@ -653,7 +653,7 @@ ucol_equal(const UCollator *coll,
const UChar *target, int32_t targetLength);
/**
- * Compare two UTF-8 encoded trings.
+ * Compare two UTF-8 encoded strings.
* The strings will be compared using the options already specified.
* @param coll The UCollator containing the comparison rules.
* @param sIter The source string iterator.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h
index d50003622a2..25efcf2a08e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h
@@ -167,7 +167,7 @@ ucol_next(UCollationElements *elems, UErrorCode *status);
* A single character may contain more than one collation element.
* Note that internally a stack is used to store buffered collation elements.
* @param elems The UCollationElements containing the text.
- * @param status A pointer to a UErrorCode to receive any errors. Noteably
+ * @param status A pointer to a UErrorCode to receive any errors. Notably
* a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack
* buffer has been exhausted.
* @return The previous collation elements ordering, otherwise returns
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h
index ec25eba8085..0e6e6b76daa 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h
@@ -976,37 +976,35 @@ udat_getBooleanAttribute(const UDateFormat* fmt, UDateFormatBooleanAttribute att
U_CAPI void U_EXPORT2
udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status);
-#ifndef U_HIDE_DRAFT_API
/**
* Hour Cycle.
- * @draft ICU 67
+ * @stable ICU 67
*/
typedef enum UDateFormatHourCycle {
/**
* Hour in am/pm (0~11)
- * @draft ICU 67
+ * @stable ICU 67
*/
UDAT_HOUR_CYCLE_11,
/**
* Hour in am/pm (1~12)
- * @draft ICU 67
+ * @stable ICU 67
*/
UDAT_HOUR_CYCLE_12,
/**
* Hour in day (0~23)
- * @draft ICU 67
+ * @stable ICU 67
*/
UDAT_HOUR_CYCLE_23,
/**
* Hour in day (1~24)
- * @draft ICU 67
+ * @stable ICU 67
*/
UDAT_HOUR_CYCLE_24
} UDateFormatHourCycle;
-#endif /* U_HIDE_DRAFT_API */
#if U_SHOW_CPLUSPLUS_API
@@ -1532,7 +1530,21 @@ typedef enum UDateFormatSymbolType {
* udat_setSymbols not supported for UDAT_ZODIAC_NAMES_NARROW)
* @stable ICU 54
*/
- UDAT_ZODIAC_NAMES_NARROW
+ UDAT_ZODIAC_NAMES_NARROW,
+
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * The narrow quarter names, for example 1
+ * @draft ICU 70
+ */
+ UDAT_NARROW_QUARTERS,
+
+ /**
+ * The narrow standalone quarter names, for example 1
+ * @draft ICU 70
+ */
+ UDAT_STANDALONE_NARROW_QUARTERS
+#endif // U_HIDE_DRAFT_API
} UDateFormatSymbolType;
struct UDateFormatSymbols;
@@ -1568,7 +1580,7 @@ udat_getSymbols(const UDateFormat *fmt,
/**
* Count the number of particular symbols for an UDateFormat.
-* This function is most useful as for detemining the loop termination condition
+* This function is most useful as for determining the loop termination condition
* for calls to {@link #udat_getSymbols }.
* @param fmt The formatter to query.
* @param type The type of symbols to count. One of UDAT_ERAS, UDAT_MONTHS, UDAT_SHORT_MONTHS,
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h
index b100ea6d84f..8439444d079 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h
@@ -252,7 +252,6 @@ udtitvfmt_format(const UDateIntervalFormat* formatter,
UErrorCode* status);
-#ifndef U_HIDE_DRAFT_API
/**
* Formats a date/time range using the conventions established for the
* UDateIntervalFormat object.
@@ -267,7 +266,7 @@ udtitvfmt_format(const UDateIntervalFormat* formatter,
* formatting operation.
* @param status
* A pointer to a UErrorCode to receive any errors.
- * @draft ICU 67
+ * @stable ICU 67
*/
U_CAPI void U_EXPORT2
udtitvfmt_formatToResult(
@@ -291,7 +290,7 @@ udtitvfmt_formatToResult(
* formatting operation.
* @param status
* A pointer to a UErrorCode to receive any errors.
- * @draft ICU 67
+ * @stable ICU 67
*/
U_CAPI void U_EXPORT2
@@ -301,9 +300,7 @@ udtitvfmt_formatCalendarToResult(
UCalendar* toCalendar,
UFormattedDateInterval* result,
UErrorCode* status);
-#endif /* U_HIDE_DRAFT_API */
-#ifndef U_HIDE_DRAFT_API
/**
* Set a particular UDisplayContext value in the formatter, such as
* UDISPCTX_CAPITALIZATION_FOR_STANDALONE. This causes the formatted
@@ -313,7 +310,7 @@ udtitvfmt_formatCalendarToResult(
* @param formatter The formatter for which to set a UDisplayContext value.
* @param value The UDisplayContext value to set.
* @param status A pointer to an UErrorCode to receive any errors
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI void U_EXPORT2
udtitvfmt_setContext(UDateIntervalFormat* formatter, UDisplayContext value, UErrorCode* status);
@@ -325,13 +322,11 @@ udtitvfmt_setContext(UDateIntervalFormat* formatter, UDisplayContext value, UErr
* @param type The UDisplayContextType whose value to return
* @param status A pointer to an UErrorCode to receive any errors
* @return The UDisplayContextValue for the specified type.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI UDisplayContext U_EXPORT2
udtitvfmt_getContext(const UDateIntervalFormat* formatter, UDisplayContextType type, UErrorCode* status);
-#endif /* U_HIDE_DRAFT_API */
-
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
index 5e44cd8985d..efe4357bfee 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
@@ -341,7 +341,7 @@ udatpg_getBaseSkeleton(UDateTimePatternGenerator *unusedDtpg,
/**
* Adds a pattern to the generator. If the pattern has the same skeleton as
* an existing pattern, and the override parameter is set, then the previous
- * value is overriden. Otherwise, the previous value is retained. In either
+ * value is overridden. Otherwise, the previous value is retained. In either
* case, the conflicting status is set and previous vale is stored in
* conflicting pattern.
* <p>
@@ -657,7 +657,6 @@ udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,
#if !UCONFIG_NO_FORMATTING
-#ifndef U_HIDE_DRAFT_API
/**
* Return the default hour cycle for a locale. Uses the locale that the
* UDateTimePatternGenerator was initially created with.
@@ -669,11 +668,10 @@ udatpg_getPatternForSkeleton(const UDateTimePatternGenerator *dtpg,
* failure before the function call. Set to U_UNSUPPORTED_ERROR
* if used on an empty instance.
* @return the default hour cycle.
- * @draft ICU 67
+ * @stable ICU 67
*/
U_CAPI UDateFormatHourCycle U_EXPORT2
udatpg_getDefaultHourCycle(const UDateTimePatternGenerator *dtpg, UErrorCode* pErrorCode);
-#endif /* U_HIDE_DRAFT_API */
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h
index 6b8bee1f3df..4c4a307a24b 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h
@@ -173,7 +173,7 @@ ufmt_getDouble(UFormattable* fmt, UErrorCode *status);
* as appropriate, is returned and the status is set to
* U_INVALID_FORMAT_ERROR. If this object is of type UFMT_INT64 and
* it fits within a long, then no precision is lost. If it is of
- * type kDouble or kDecimalNumber, then a conversion is peformed, with
+ * type kDouble or kDecimalNumber, then a conversion is performed, with
* truncation of any fractional part. If the type is UFMT_OBJECT and
* the object is a Measure, then the result of
* getNumber().getLong(status) is returned. If this object is
@@ -195,7 +195,7 @@ ufmt_getLong(UFormattable* fmt, UErrorCode *status);
* the maximum or minimum int64 value, as appropriate, is returned
* and the status is set to U_INVALID_FORMAT_ERROR. If the
* magnitude fits in an int64, then a casting conversion is
- * peformed, with truncation of any fractional part. If the type
+ * performed, with truncation of any fractional part. If the type
* is UFMT_OBJECT and the object is a Measure, then the result of
* getNumber().getDouble(status) is returned. If this object is
* neither a numeric type nor a Measure, then 0 is returned and
@@ -267,7 +267,7 @@ ufmt_getArrayItemByIndex(UFormattable* fmt, int32_t n, UErrorCode *status);
* the full precision and range of the original input, unconstrained by
* the limits of a double floating point or a 64 bit int.
*
- * This function is not thread safe, and therfore is not declared const,
+ * This function is not thread safe, and therefore is not declared const,
* even though it is logically const.
* The resulting buffer is owned by the UFormattable and is invalid if any other functions are
* called on the UFormattable.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h
index c358629c051..1a550e87589 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattedvalue.h
@@ -93,6 +93,15 @@ typedef enum UFieldCategory {
*/
UFIELD_CATEGORY_DATE_INTERVAL_SPAN = 0x1000 + UFIELD_CATEGORY_DATE_INTERVAL,
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Category for spans in a number range.
+ *
+ * @draft ICU 69
+ */
+ UFIELD_CATEGORY_NUMBER_RANGE_SPAN = 0x1000 + UFIELD_CATEGORY_NUMBER,
+#endif // U_HIDE_DRAFT_API
+
} UFieldCategory;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h
index 3977743e323..3647df9596a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h
@@ -229,15 +229,15 @@ ulocdata_getMeasurementSystem(const char *localeID, UErrorCode *status);
/**
* Returns the element gives the normal business letter size, and customary units.
* The units for the numbers are always in <em>milli-meters</em>.
- * For US since 8.5 and 11 do not yeild an integral value when converted to milli-meters,
+ * For US since 8.5 and 11 do not yield an integral value when converted to milli-meters,
* the values are rounded off.
- * So for A4 size paper the height and width are 297 mm and 210 mm repectively,
+ * So for A4 size paper the height and width are 297 mm and 210 mm respectively,
* and for US letter size the height and width are 279 mm and 216 mm respectively.
* Please note that this API will change in ICU 3.6 and will use an ulocdata object.
*
* @param localeID The id of the locale for which the paper size information to be retrieved.
- * @param height A pointer to int to recieve the height information.
- * @param width A pointer to int to recieve the width information.
+ * @param height A pointer to int to receive the height information.
+ * @param width A pointer to int to receive the width information.
* @param status Must be a valid pointer to an error code value,
* which must not indicate a failure before the function call.
* @stable ICU 2.8
@@ -247,7 +247,7 @@ ulocdata_getPaperSize(const char *localeID, int32_t *height, int32_t *width, UEr
/**
* Return the current CLDR version used by the library.
- * @param versionArray fillin that will recieve the version number
+ * @param versionArray fill-in that will receive the version number
* @param status error code - could be U_MISSING_RESOURCE_ERROR if the version was not found.
* @stable ICU 4.2
*/
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h
index db660dbe7e8..c955dc18ac4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h
@@ -393,7 +393,7 @@ typedef void* UMessageFormat;
* @param patternLength Length of the pattern to use
* @param locale The locale for which the messages are formatted.
* @param parseError A pointer to UParseError struct to receive any errors
- * occured during parsing. Can be NULL.
+ * occurred during parsing. Can be NULL.
* @param status A pointer to an UErrorCode to receive any errors.
* @return A pointer to a UMessageFormat to use for formatting
* messages, or 0 if an error occurred.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
index 68207a9bec1..14f76168b61 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
@@ -302,7 +302,24 @@ typedef enum UNumberFormatRoundingMode {
* ROUND_UNNECESSARY reports an error if formatted result is not exact.
* @stable ICU 4.8
*/
- UNUM_ROUND_UNNECESSARY
+ UNUM_ROUND_UNNECESSARY,
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Rounds ties toward the odd number.
+ * @draft ICU 69
+ */
+ UNUM_ROUND_HALF_ODD,
+ /**
+ * Rounds ties toward +∞.
+ * @draft ICU 69
+ */
+ UNUM_ROUND_HALF_CEILING,
+ /**
+ * Rounds ties toward -∞.
+ * @draft ICU 69
+ */
+ UNUM_ROUND_HALF_FLOOR,
+#endif // U_HIDE_DRAFT_API
} UNumberFormatRoundingMode;
/** The possible number format pad positions.
@@ -395,29 +412,27 @@ typedef enum UNumberFormatFields {
} UNumberFormatFields;
-#ifndef U_HIDE_DRAFT_API
/**
* Selectors with special numeric values to use locale default minimum grouping
* digits for the DecimalFormat/UNumberFormat setMinimumGroupingDigits method.
* Do not use these constants with the [U]NumberFormatter API.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
typedef enum UNumberFormatMinimumGroupingDigits {
/**
* Display grouping using the default strategy for all locales.
- * @draft ICU 68
+ * @stable ICU 68
*/
UNUM_MINIMUM_GROUPING_DIGITS_AUTO = -2,
/**
* Display grouping using locale defaults, except do not show grouping on
* values smaller than 10000 (such that there is a minimum of two digits
* before the first separator).
- * @draft ICU 68
+ * @stable ICU 68
*/
UNUM_MINIMUM_GROUPING_DIGITS_MIN2 = -3,
} UNumberFormatMinimumGroupingDigits;
-#endif // U_HIDE_DRAFT_API
/**
* Create and return a new UNumberFormat for formatting and parsing
@@ -692,6 +707,12 @@ unum_formatDecimal( const UNumberFormat* fmt,
/**
* Format a double currency amount using a UNumberFormat.
* The double will be formatted according to the UNumberFormat's locale.
+ *
+ * To format an exact decimal value with a currency, use
+ * `unum_setTextAttribute(UNUM_CURRENCY_CODE, ...)` followed by unum_formatDecimal.
+ * Your UNumberFormat must be created with the UNUM_CURRENCY style. Alternatively,
+ * consider using unumf_openForSkeletonAndLocale.
+ *
* @param fmt the formatter to use
* @param number the number to format
* @param currency the 3-letter null-terminated ISO 4217 currency code
@@ -1069,7 +1090,7 @@ typedef enum UNumberFormatAttribute {
/**
* if this attribute is set to 0, it is set to UNUM_CURRENCY_STANDARD purpose,
- * otherwise it is UNUM_CURRENCY_CASH purpose
+ * otherwise it is UNUM_CASH_CURRENCY purpose
* Default: 0 (UNUM_CURRENCY_STANDARD purpose)
* @stable ICU 54
*/
@@ -1406,12 +1427,19 @@ typedef enum UNumberFormatSymbol {
*/
UNUM_EXPONENT_MULTIPLICATION_SYMBOL = 27,
+#ifndef U_HIDE_INTERNAL_API
+ /** Approximately sign.
+ * @internal
+ */
+ UNUM_APPROXIMATELY_SIGN_SYMBOL = 28,
+#endif
+
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest normal UNumberFormatSymbol value.
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
- UNUM_FORMAT_SYMBOL_COUNT = 28
+ UNUM_FORMAT_SYMBOL_COUNT = 29
#endif /* U_HIDE_DEPRECATED_API */
} UNumberFormatSymbol;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h
index 754987aea09..cb980cd94dd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberformatter.h
@@ -78,6 +78,62 @@
* </pre>
*/
+#ifndef U_FORCE_HIDE_DRAFT_API
+/**
+ * An enum declaring how to resolve conflicts between maximum fraction digits and maximum
+ * significant digits.
+ *
+ * There are two modes, RELAXED and STRICT:
+ *
+ * - RELAXED: Relax one of the two constraints (fraction digits or significant digits) in order
+ * to round the number to a higher level of precision.
+ * - STRICT: Enforce both constraints, resulting in the number being rounded to a lower
+ * level of precision.
+ *
+ * The default settings for compact notation rounding are Max-Fraction = 0 (round to the nearest
+ * integer), Max-Significant = 2 (round to 2 significant digits), and priority RELAXED (choose
+ * the constraint that results in more digits being displayed).
+ *
+ * Conflicting *minimum* fraction and significant digits are always resolved in the direction that
+ * results in more trailing zeros.
+ *
+ * Example 1: Consider the number 3.141, with various different settings:
+ *
+ * - Max-Fraction = 1: "3.1"
+ * - Max-Significant = 3: "3.14"
+ *
+ * The rounding priority determines how to resolve the conflict when both Max-Fraction and
+ * Max-Significant are set. With RELAXED, the less-strict setting (the one that causes more digits
+ * to be displayed) will be used; Max-Significant wins. With STRICT, the more-strict setting (the
+ * one that causes fewer digits to be displayed) will be used; Max-Fraction wins.
+ *
+ * Example 2: Consider the number 8317, with various different settings:
+ *
+ * - Max-Fraction = 1: "8317"
+ * - Max-Significant = 3: "8320"
+ *
+ * Here, RELAXED favors Max-Fraction and STRICT favors Max-Significant. Note that this larger
+ * number caused the two modes to favor the opposite result.
+ *
+ * @draft ICU 69
+ */
+typedef enum UNumberRoundingPriority {
+ /**
+ * Favor greater precision by relaxing one of the rounding constraints.
+ *
+ * @draft ICU 69
+ */
+ UNUM_ROUNDING_PRIORITY_RELAXED,
+
+ /**
+ * Favor adherence to all rounding constraints by producing lower precision.
+ *
+ * @draft ICU 69
+ */
+ UNUM_ROUNDING_PRIORITY_STRICT,
+} UNumberRoundingPriority;
+#endif // U_FORCE_HIDE_DRAFT_API
+
/**
* An enum declaring how to render units, including currencies. Example outputs when formatting 123 USD and 123
* meters in <em>en-CA</em>:
@@ -108,7 +164,7 @@ typedef enum UNumberUnitWidth {
*
* @stable ICU 60
*/
- UNUM_UNIT_WIDTH_NARROW,
+ UNUM_UNIT_WIDTH_NARROW = 0,
/**
* Print an abbreviated version of the unit name. Similar to NARROW, but use a slightly wider abbreviation or
@@ -124,7 +180,7 @@ typedef enum UNumberUnitWidth {
*
* @stable ICU 60
*/
- UNUM_UNIT_WIDTH_SHORT,
+ UNUM_UNIT_WIDTH_SHORT = 1,
/**
* Print the full name of the unit, without any abbreviations.
@@ -135,7 +191,7 @@ typedef enum UNumberUnitWidth {
*
* @stable ICU 60
*/
- UNUM_UNIT_WIDTH_FULL_NAME,
+ UNUM_UNIT_WIDTH_FULL_NAME = 2,
/**
* Use the three-digit ISO XXX code in place of the symbol for displaying currencies. The behavior of this
@@ -146,9 +202,8 @@ typedef enum UNumberUnitWidth {
*
* @stable ICU 60
*/
- UNUM_UNIT_WIDTH_ISO_CODE,
+ UNUM_UNIT_WIDTH_ISO_CODE = 3,
-#ifndef U_HIDE_DRAFT_API
/**
* Use the formal variant of the currency symbol; for example, "NT$" for the New Taiwan
* dollar in zh-TW.
@@ -156,9 +211,9 @@ typedef enum UNumberUnitWidth {
* <p>
* Behavior of this option with non-currency units is not defined at this time.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
- UNUM_UNIT_WIDTH_FORMAL,
+ UNUM_UNIT_WIDTH_FORMAL = 4,
/**
* Use the alternate variant of the currency symbol; for example, "TL" for the Turkish
@@ -167,10 +222,9 @@ typedef enum UNumberUnitWidth {
* <p>
* Behavior of this option with non-currency units is not defined at this time.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
- UNUM_UNIT_WIDTH_VARIANT,
-#endif // U_HIDE_DRAFT_API
+ UNUM_UNIT_WIDTH_VARIANT = 5,
/**
* Format the number according to the specified unit, but do not display the unit. For currencies, apply
@@ -179,14 +233,16 @@ typedef enum UNumberUnitWidth {
*
* @stable ICU 60
*/
- UNUM_UNIT_WIDTH_HIDDEN,
+ UNUM_UNIT_WIDTH_HIDDEN = 6,
+ // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API,
+ // needed for unconditionalized struct MacroProps
/**
* One more than the highest UNumberUnitWidth value.
*
* @internal ICU 60: The numeric value may change over time; see ICU ticket #12420.
*/
- UNUM_UNIT_WIDTH_COUNT
+ UNUM_UNIT_WIDTH_COUNT = 7
} UNumberUnitWidth;
/**
@@ -314,9 +370,12 @@ typedef enum UNumberSignDisplay {
* Show the minus sign on negative numbers, and do not show the sign on positive numbers. This is the default
* behavior.
*
+ * If using this option, a sign will be displayed on negative zero, including negative numbers
+ * that round to zero. To hide the sign on negative zero, use the NEGATIVE option.
+ *
* @stable ICU 60
*/
- UNUM_SIGN_AUTO,
+ UNUM_SIGN_AUTO,
/**
* Show the minus sign on negative numbers and the plus sign on positive numbers, including zero.
@@ -324,14 +383,14 @@ typedef enum UNumberSignDisplay {
*
* @stable ICU 60
*/
- UNUM_SIGN_ALWAYS,
+ UNUM_SIGN_ALWAYS,
/**
* Do not show the sign on positive or negative numbers.
*
* @stable ICU 60
*/
- UNUM_SIGN_NEVER,
+ UNUM_SIGN_NEVER,
/**
* Use the locale-dependent accounting format on negative numbers, and do not show the sign on positive numbers.
@@ -347,7 +406,7 @@ typedef enum UNumberSignDisplay {
*
* @stable ICU 60
*/
- UNUM_SIGN_ACCOUNTING,
+ UNUM_SIGN_ACCOUNTING,
/**
* Use the locale-dependent accounting format on negative numbers, and show the plus sign on
@@ -357,7 +416,7 @@ typedef enum UNumberSignDisplay {
*
* @stable ICU 60
*/
- UNUM_SIGN_ACCOUNTING_ALWAYS,
+ UNUM_SIGN_ACCOUNTING_ALWAYS,
/**
* Show the minus sign on negative numbers and the plus sign on positive numbers. Do not show a
@@ -365,7 +424,7 @@ typedef enum UNumberSignDisplay {
*
* @stable ICU 61
*/
- UNUM_SIGN_EXCEPT_ZERO,
+ UNUM_SIGN_EXCEPT_ZERO,
/**
* Use the locale-dependent accounting format on negative numbers, and show the plus sign on
@@ -374,14 +433,32 @@ typedef enum UNumberSignDisplay {
*
* @stable ICU 61
*/
- UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO,
+ UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO,
+#ifndef U_HIDE_DRAFT_API
+ /**
+ * Same as AUTO, but do not show the sign on negative zero.
+ *
+ * @draft ICU 69
+ */
+ UNUM_SIGN_NEGATIVE,
+
+ /**
+ * Same as ACCOUNTING, but do not show the sign on negative zero.
+ *
+ * @draft ICU 69
+ */
+ UNUM_SIGN_ACCOUNTING_NEGATIVE,
+#endif // U_HIDE_DRAFT_API
+
+ // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API,
+ // needed for unconditionalized struct MacroProps
/**
* One more than the highest UNumberSignDisplay value.
*
* @internal ICU 60: The numeric value may change over time; see ICU ticket #12420.
*/
- UNUM_SIGN_COUNT
+ UNUM_SIGN_COUNT = 9,
} UNumberSignDisplay;
/**
@@ -411,6 +488,8 @@ typedef enum UNumberDecimalSeparatorDisplay {
*/
UNUM_DECIMAL_SEPARATOR_ALWAYS,
+ // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API,
+ // needed for unconditionalized struct MacroProps
/**
* One more than the highest UNumberDecimalSeparatorDisplay value.
*
@@ -419,6 +498,32 @@ typedef enum UNumberDecimalSeparatorDisplay {
UNUM_DECIMAL_SEPARATOR_COUNT
} UNumberDecimalSeparatorDisplay;
+#ifndef U_FORCE_HIDE_DRAFT_API
+/**
+ * An enum declaring how to render trailing zeros.
+ *
+ * - UNUM_TRAILING_ZERO_AUTO: 0.90, 1.00, 1.10
+ * - UNUM_TRAILING_ZERO_HIDE_IF_WHOLE: 0.90, 1, 1.10
+ *
+ * @draft ICU 69
+ */
+typedef enum UNumberTrailingZeroDisplay {
+ /**
+ * Display trailing zeros according to the settings for minimum fraction and significant digits.
+ *
+ * @draft ICU 69
+ */
+ UNUM_TRAILING_ZERO_AUTO,
+
+ /**
+ * Same as AUTO, but hide trailing zeros after the decimal separator if they are all zero.
+ *
+ * @draft ICU 69
+ */
+ UNUM_TRAILING_ZERO_HIDE_IF_WHOLE,
+} UNumberTrailingZeroDisplay;
+#endif // U_FORCE_HIDE_DRAFT_API
+
struct UNumberFormatter;
/**
* C-compatible version of icu::number::LocalizedNumberFormatter.
@@ -449,6 +554,9 @@ typedef struct UFormattedNumber UFormattedNumber;
* For more details on skeleton strings, see the documentation in numberformatter.h. For more details on
* the usage of this API, see the documentation at the top of unumberformatter.h.
*
+ * For more information on number skeleton strings, see:
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html
+ *
* NOTE: This is a C-compatible API; C++ users should build against numberformatter.h instead.
*
* @param skeleton The skeleton string, like u"percent precision-integer"
@@ -466,6 +574,9 @@ unumf_openForSkeletonAndLocale(const UChar* skeleton, int32_t skeletonLen, const
* Like unumf_openForSkeletonAndLocale, but accepts a UParseError, which will be populated with the
* location of a skeleton syntax error if such a syntax error exists.
*
+ * For more information on number skeleton strings, see:
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html
+ *
* @param skeleton The skeleton string, like u"percent precision-integer"
* @param skeletonLen The number of UChars in the skeleton string, or -1 if it is NUL-terminated.
* @param locale The NUL-terminated locale ID.
@@ -659,7 +770,6 @@ unumf_resultGetAllFieldPositions(const UFormattedNumber* uresult, UFieldPosition
UErrorCode* ec);
-#ifndef U_HIDE_DRAFT_API
/**
* Extracts the formatted number as a "numeric string" conforming to the
* syntax defined in the Decimal Arithmetic Specification, available at
@@ -676,7 +786,7 @@ unumf_resultGetAllFieldPositions(const UFormattedNumber* uresult, UFieldPosition
* If U_BUFFER_OVERFLOW_ERROR: Returns number of chars for
* preflighting.
* @return Number of chars in the data. Does not include a trailing NUL.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI int32_t U_EXPORT2
unumf_resultToDecimalNumber(
@@ -684,7 +794,6 @@ unumf_resultToDecimalNumber(
char* dest,
int32_t destCapacity,
UErrorCode* ec);
-#endif // U_HIDE_DRAFT_API
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h
index e28fe51aa6a..4e92fe29e25 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/unumberrangeformatter.h
@@ -193,20 +193,18 @@ typedef enum UNumberRangeIdentityResult {
* @internal
*/
UNUM_IDENTITY_RESULT_COUNT
-#endif
+#endif /* U_HIDE_INTERNAL_API */
} UNumberRangeIdentityResult;
-#ifndef U_HIDE_DRAFT_API
-
struct UNumberRangeFormatter;
/**
* C-compatible version of icu::number::LocalizedNumberRangeFormatter.
*
* NOTE: This is a C-compatible API; C++ users should build against numberrangeformatter.h instead.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
typedef struct UNumberRangeFormatter UNumberRangeFormatter;
@@ -217,7 +215,7 @@ struct UFormattedNumberRange;
*
* NOTE: This is a C-compatible API; C++ users should build against numberrangeformatter.h instead.
*
- * @draft ICU 68
+ * @stable ICU 68
*/
typedef struct UFormattedNumberRange UFormattedNumberRange;
@@ -241,7 +239,7 @@ typedef struct UFormattedNumberRange UFormattedNumberRange;
* @param perror A parse error struct populated if an error occurs when parsing. Can be NULL.
* If no error occurs, perror->offset will be set to -1.
* @param ec Set if an error occurs.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI UNumberRangeFormatter* U_EXPORT2
unumrf_openForSkeletonWithCollapseAndIdentityFallback(
@@ -260,7 +258,7 @@ unumrf_openForSkeletonWithCollapseAndIdentityFallback(
* passed to a format function.
*
* @param ec Set if an error occurs.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI UFormattedNumberRange* U_EXPORT2
unumrf_openResult(UErrorCode* ec);
@@ -279,7 +277,7 @@ unumrf_openResult(UErrorCode* ec);
* @param second The second (usually larger) number in the range.
* @param uresult The object that will be mutated to store the result; see unumrf_openResult.
* @param ec Set if an error occurs.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI void U_EXPORT2
unumrf_formatDoubleRange(
@@ -307,7 +305,7 @@ unumrf_formatDoubleRange(
* @param secondLen The length of the second decimal number string.
* @param uresult The object that will be mutated to store the result; see unumrf_openResult.
* @param ec Set if an error occurs.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI void U_EXPORT2
unumrf_formatDecimalRange(
@@ -332,7 +330,7 @@ unumrf_formatDecimalRange(
* @param uresult The object containing the formatted number range.
* @param ec Set if an error occurs.
* @return A UFormattedValue owned by the input object.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI const UFormattedValue* U_EXPORT2
unumrf_resultAsValue(const UFormattedNumberRange* uresult, UErrorCode* ec);
@@ -346,7 +344,7 @@ unumrf_resultAsValue(const UFormattedNumberRange* uresult, UErrorCode* ec);
* @param uresult The object containing the formatted number range.
* @param ec Set if an error occurs.
* @return The identity result; see UNumberRangeIdentityResult.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI UNumberRangeIdentityResult U_EXPORT2
unumrf_resultGetIdentityResult(
@@ -354,7 +352,6 @@ unumrf_resultGetIdentityResult(
UErrorCode* ec);
-#ifndef U_HIDE_DRAFT_API
/**
* Extracts the first formatted number as a decimal number. This endpoint
* is useful for obtaining the exact number being printed after scaling
@@ -372,7 +369,7 @@ unumrf_resultGetIdentityResult(
* If U_BUFFER_OVERFLOW_ERROR: Returns number of chars for
* preflighting.
* @return Number of chars in the data. Does not include a trailing NUL.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI int32_t U_EXPORT2
unumrf_resultGetFirstDecimalNumber(
@@ -399,7 +396,7 @@ unumrf_resultGetFirstDecimalNumber(
* If U_BUFFER_OVERFLOW_ERROR: Returns number of chars for
* preflighting.
* @return Number of chars in the data. Does not include a trailing NUL.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI int32_t U_EXPORT2
unumrf_resultGetSecondDecimalNumber(
@@ -407,14 +404,13 @@ unumrf_resultGetSecondDecimalNumber(
char* dest,
int32_t destCapacity,
UErrorCode* ec);
-#endif // U_HIDE_DRAFT_API
/**
* Releases the UNumberFormatter created by unumf_openForSkeletonAndLocale().
*
* @param uformatter An object created by unumf_openForSkeletonAndLocale().
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI void U_EXPORT2
unumrf_close(UNumberRangeFormatter* uformatter);
@@ -424,7 +420,7 @@ unumrf_close(UNumberRangeFormatter* uformatter);
* Releases the UFormattedNumber created by unumf_openResult().
*
* @param uresult An object created by unumf_openResult().
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI void U_EXPORT2
unumrf_closeResult(UFormattedNumberRange* uresult);
@@ -447,7 +443,7 @@ U_NAMESPACE_BEGIN
*
* @see LocalPointerBase
* @see LocalPointer
- * @draft ICU 68
+ * @stable ICU 68
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberRangeFormatterPointer, UNumberRangeFormatter, unumrf_close);
@@ -464,14 +460,12 @@ U_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberRangeFormatterPointer, UNumberRangeForma
*
* @see LocalPointerBase
* @see LocalPointer
- * @draft ICU 68
+ * @stable ICU 68
*/
U_DEFINE_LOCAL_OPEN_POINTER(LocalUFormattedNumberRangePointer, UFormattedNumberRange, unumrf_closeResult);
U_NAMESPACE_END
#endif // U_SHOW_CPLUSPLUS_API
-#endif // U_HIDE_DRAFT_API
-
#endif /* #if !UCONFIG_NO_FORMATTING */
#endif //__UNUMBERRANGEFORMATTER_H__
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h
index 71a45ddf85b..983651b1cac 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h
@@ -39,8 +39,9 @@ struct UFormattedNumberRange;
* returns the keyword for the first condition that matches the number.
* If none match, the default rule(other) is returned.
*
- * For more information, see the LDML spec, C.11 Language Plural Rules:
- * http://www.unicode.org/reports/tr35/#Language_Plural_Rules
+ * For more information, see the
+ * LDML spec, Part 3.5 Language Plural Rules:
+ * https://www.unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules
*
* Keywords: ICU locale data has 6 predefined values -
* 'zero', 'one', 'two', 'few', 'many' and 'other'. Callers need to check
@@ -48,7 +49,7 @@ struct UFormattedNumberRange;
*
* These are based on CLDR <i>Language Plural Rules</i>. For these
* predefined rules, see the CLDR page at
- * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ * https://unicode-org.github.io/cldr-staging/charts/latest/supplemental/language_plural_rules.html
*/
/**
@@ -180,7 +181,6 @@ uplrules_selectFormatted(const UPluralRules *uplrules,
UChar *keyword, int32_t capacity,
UErrorCode *status);
-#ifndef U_HIDE_DRAFT_API
/**
* Given a formatted number range, returns the overall plural form of the
* range. For example, "3-5" returns "other" in English.
@@ -194,14 +194,13 @@ uplrules_selectFormatted(const UPluralRules *uplrules,
* @param capacity The capacity of the keyword buffer.
* @param status A pointer to a UErrorCode to receive any errors.
* @return The length of the keyword.
- * @draft ICU 68
+ * @stable ICU 68
*/
U_CAPI int32_t U_EXPORT2
uplrules_selectForRange(const UPluralRules *uplrules,
const struct UFormattedNumberRange* urange,
UChar *keyword, int32_t capacity,
UErrorCode *status);
-#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_INTERNAL_API
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h
index 65747cb1ed4..fd0b84f6723 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h
@@ -32,11 +32,12 @@
* see <code>ucol.h</code>. This ensures that language eccentricity can be
* handled, e.g. for the German collator, characters &szlig; and SS will be matched
* if case is chosen to be ignored.
- * See the <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm">
+ * See the <a href="https://htmlpreview.github.io/?https://github.com/unicode-org/icu-docs/blob/main/design/collation/ICU_collation_design.htm">
* "ICU Collation Design Document"</a> for more information.
* <p>
- * The implementation may use a linear search or a modified form of the Boyer-Moore
- * search; for more information on the latter see
+ * As of ICU4C 4.0 / ICU4J 53, the implementation uses a linear search. In previous versions,
+ * a modified form of the Boyer-Moore searching algorithm was used. For more information
+ * on the modified Boyer-Moore algorithm see
* <a href="http://icu-project.org/docs/papers/efficient_text_searching_in_java.html">
* "Efficient Text Searching in Java"</a>, published in <i>Java Report</i>
* in February, 1999.
@@ -595,8 +596,8 @@ U_CAPI UCollator * U_EXPORT2 usearch_getCollator(
/**
* Sets the collator used for the language rules. User retains the ownership
* of this collator, thus the responsibility of deletion lies with the user.
-* This method causes internal data such as Boyer-Moore shift tables to
-* be recalculated, but the iterator's position is unchanged.
+* This method causes internal data such as the pattern collation elements
+* and shift tables to be recalculated, but the iterator's position is unchanged.
* @param strsrch search iterator data struct
* @param collator to be used
* @param status for errors if it occurs
@@ -608,7 +609,7 @@ U_CAPI void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch,
/**
* Sets the pattern used for matching.
-* Internal data like the Boyer Moore table will be recalculated, but the
+* Internal data like the pattern collation elements will be recalculated, but the
* iterator's position is unchanged.
*
* The UStringSearch retains a pointer to the pattern string. The caller must not
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
index 7680c687ce4..b674c91b2c2 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
@@ -502,7 +502,7 @@ typedef enum USpoofChecks {
USPOOF_ALL_CHECKS = 0xFFFF,
/**
- * Enable the return of auxillary (non-error) information in the
+ * Enable the return of auxiliary (non-error) information in the
* upper bits of the check results value.
*
* If this "check" is not enabled, the results of {@link uspoof_check} will be
@@ -1134,7 +1134,7 @@ uspoof_getCheckResultNumerics(const USpoofCheckResult *checkResult, UErrorCode *
* @param sc The USpoofChecker
* @param id1 The first of the two identifiers to be compared for
* confusability. The strings are in UTF-16 format.
- * @param length1 the length of the first identifer, expressed in
+ * @param length1 the length of the first identifier, expressed in
* 16 bit UTF-16 code units, or -1 if the string is
* nul terminated.
* @param id2 The second of the two identifiers to be compared for
diff --git a/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h b/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
index 34b371b16bf..e7d2f515410 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
@@ -72,7 +72,7 @@ public:
*semantically equal.
* @stable ICU 3.8
*/
- virtual UBool operator==(const TimeZone& that) const;
+ virtual bool operator==(const TimeZone& that) const override;
/**
* Return true if the given <code>TimeZone</code> objects are
@@ -82,7 +82,7 @@ public:
* semantically unequal.
* @stable ICU 3.8
*/
- virtual UBool operator!=(const TimeZone& that) const;
+ virtual bool operator!=(const TimeZone& that) const;
/**
* Create a <code>VTimeZone</code> instance by the time zone ID.
@@ -157,7 +157,7 @@ public:
void write(UnicodeString& result, UErrorCode& status) const;
/**
- * Writes RFC2445 VTIMEZONE data for this time zone applicalbe
+ * Writes RFC2445 VTIMEZONE data for this time zone applicable
* for dates after the specified start time.
* @param start The start date.
* @param result Output param to filled in with the VTIMEZONE data.
@@ -167,7 +167,7 @@ public:
void write(UDate start, UnicodeString& result, UErrorCode& status) const;
/**
- * Writes RFC2445 VTIMEZONE data applicalbe for the specified date.
+ * Writes RFC2445 VTIMEZONE data applicable for the specified date.
* Some common iCalendar implementations can only handle a single time
* zone property or a pair of standard and daylight time properties using
* BYDAY rule with day of week (such as BYDAY=1SUN). This method produce
@@ -187,7 +187,7 @@ public:
* @return A new copy of this TimeZone object.
* @stable ICU 3.8
*/
- virtual VTimeZone* clone() const;
+ virtual VTimeZone* clone() const override;
/**
* Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add
@@ -214,7 +214,7 @@ public:
* @stable ICU 3.8
*/
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
- uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const;
+ uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const override;
/**
* Gets the time zone offset, for current date, modified in case of
@@ -237,7 +237,7 @@ public:
*/
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
uint8_t dayOfWeek, int32_t millis,
- int32_t monthLength, UErrorCode& status) const;
+ int32_t monthLength, UErrorCode& status) const override;
/**
* Returns the time zone raw and GMT offset for the given moment
@@ -262,7 +262,18 @@ public:
* @stable ICU 3.8
*/
virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
- int32_t& dstOffset, UErrorCode& ec) const;
+ int32_t& dstOffset, UErrorCode& ec) const override;
+
+#ifndef U_FORCE_HIDE_DRAFT_API
+ /**
+ * Get time zone offsets from local wall time.
+ * @draft ICU 69
+ */
+ virtual void getOffsetFromLocal(
+ UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const override;
+#endif /* U_FORCE_HIDE_DRAFT_API */
/**
* Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
@@ -271,7 +282,7 @@ public:
* @param offsetMillis The new raw GMT offset for this time zone.
* @stable ICU 3.8
*/
- virtual void setRawOffset(int32_t offsetMillis);
+ virtual void setRawOffset(int32_t offsetMillis) override;
/**
* Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add
@@ -280,7 +291,7 @@ public:
* @return The TimeZone's raw GMT offset.
* @stable ICU 3.8
*/
- virtual int32_t getRawOffset(void) const;
+ virtual int32_t getRawOffset(void) const override;
/**
* Queries if this time zone uses daylight savings time.
@@ -288,7 +299,7 @@ public:
* false, otherwise.
* @stable ICU 3.8
*/
- virtual UBool useDaylightTime(void) const;
+ virtual UBool useDaylightTime(void) const override;
#ifndef U_FORCE_HIDE_DEPRECATED_API
/**
@@ -304,7 +315,7 @@ public:
* false, otherwise.
* @deprecated ICU 2.4. Use Calendar::inDaylightTime() instead.
*/
- virtual UBool inDaylightTime(UDate date, UErrorCode& status) const;
+ virtual UBool inDaylightTime(UDate date, UErrorCode& status) const override;
#endif // U_FORCE_HIDE_DEPRECATED_API
/**
@@ -315,7 +326,7 @@ public:
* with the possible exception of the ID
* @stable ICU 3.8
*/
- virtual UBool hasSameRules(const TimeZone& other) const;
+ virtual UBool hasSameRules(const TimeZone& other) const override;
/**
* Gets the first time zone transition after the base time.
@@ -325,7 +336,7 @@ public:
* @return true if the transition is found.
* @stable ICU 3.8
*/
- virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
+ virtual UBool getNextTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
/**
* Gets the most recent time zone transition before the base time.
@@ -335,7 +346,7 @@ public:
* @return true if the transition is found.
* @stable ICU 3.8
*/
- virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const;
+ virtual UBool getPreviousTransition(UDate base, UBool inclusive, TimeZoneTransition& result) const override;
/**
* Returns the number of <code>TimeZoneRule</code>s which represents time transitions,
@@ -345,7 +356,7 @@ public:
* @return The number of <code>TimeZoneRule</code>s representing time transitions.
* @stable ICU 3.8
*/
- virtual int32_t countTransitionRules(UErrorCode& status) const;
+ virtual int32_t countTransitionRules(UErrorCode& status) const override;
/**
* Gets the <code>InitialTimeZoneRule</code> and the set of <code>TimeZoneRule</code>
@@ -364,7 +375,7 @@ public:
* @stable ICU 3.8
*/
virtual void getTimeZoneRules(const InitialTimeZoneRule*& initial,
- const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const;
+ const TimeZoneRule* trsrules[], int32_t& trscount, UErrorCode& status) const override;
private:
enum { DEFAULT_VTIMEZONE_LINES = 100 };
@@ -450,7 +461,7 @@ public:
* other classes have different class IDs.
* @stable ICU 3.8
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
};
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp b/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp
index 27f835e6dd4..78cefbf7ebb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.cpp
@@ -10,6 +10,7 @@
#include "cmemory.h"
#include "number_decimalquantity.h"
#include "number_roundingutils.h"
+#include "putilimp.h"
#include "uarrsort.h"
#include "uassert.h"
#include "unicode/fmtable.h"
@@ -21,44 +22,73 @@
U_NAMESPACE_BEGIN
namespace units {
+ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnitImpl &targetUnit,
+ const ConversionRates &ratesInfo, UErrorCode &status)
+ : units_(targetUnit.extractIndividualUnitsWithIndices(status)) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ U_ASSERT(units_.length() != 0);
+
+ // Just borrowing a pointer to the instance
+ MeasureUnitImpl *biggestUnit = &units_[0]->unitImpl;
+ for (int32_t i = 1; i < units_.length(); i++) {
+ if (UnitsConverter::compareTwoUnits(units_[i]->unitImpl, *biggestUnit, ratesInfo, status) > 0 &&
+ U_SUCCESS(status)) {
+ biggestUnit = &units_[i]->unitImpl;
+ }
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+ }
+
+ this->init(*biggestUnit, ratesInfo, status);
+}
+
+ComplexUnitsConverter::ComplexUnitsConverter(StringPiece inputUnitIdentifier,
+ StringPiece outputUnitsIdentifier, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+ MeasureUnitImpl inputUnit = MeasureUnitImpl::forIdentifier(inputUnitIdentifier, status);
+ MeasureUnitImpl outputUnits = MeasureUnitImpl::forIdentifier(outputUnitsIdentifier, status);
+
+ this->units_ = outputUnits.extractIndividualUnitsWithIndices(status);
+ U_ASSERT(units_.length() != 0);
+
+ this->init(inputUnit, ConversionRates(status), status);
+}
ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnitImpl &inputUnit,
const MeasureUnitImpl &outputUnits,
const ConversionRates &ratesInfo, UErrorCode &status)
- : units_(outputUnits.extractIndividualUnits(status)) {
+ : units_(outputUnits.extractIndividualUnitsWithIndices(status)) {
if (U_FAILURE(status)) {
return;
}
U_ASSERT(units_.length() != 0);
- // Save the desired order of output units before we sort units_
- for (int32_t i = 0; i < units_.length(); i++) {
- outputUnits_.emplaceBackAndCheckErrorCode(status, units_[i]->copy(status).build(status));
- }
+ this->init(inputUnit, ratesInfo, status);
+}
- // NOTE:
- // This comparator is used to sort the units in a descending order. Therefore, we return -1 if
- // the left is bigger than right and so on.
+void ComplexUnitsConverter::init(const MeasureUnitImpl &inputUnit,
+ const ConversionRates &ratesInfo,
+ UErrorCode &status) {
+ // Sorts units in descending order. Therefore, we return -1 if
+ // the left is bigger than right and so on.
auto descendingCompareUnits = [](const void *context, const void *left, const void *right) {
UErrorCode status = U_ZERO_ERROR;
- const auto *leftPointer = static_cast<const MeasureUnitImpl *const *>(left);
- const auto *rightPointer = static_cast<const MeasureUnitImpl *const *>(right);
+ const auto *leftPointer = static_cast<const MeasureUnitImplWithIndex *const *>(left);
+ const auto *rightPointer = static_cast<const MeasureUnitImplWithIndex *const *>(right);
- UnitConverter fromLeftToRight(**leftPointer, //
- **rightPointer, //
- *static_cast<const ConversionRates *>(context), //
- status);
-
- double rightFromOneLeft = fromLeftToRight.convert(1.0);
- if (std::abs(rightFromOneLeft - 1.0) < 0.0000000001) { // Equals To
- return 0;
- } else if (rightFromOneLeft > 1.0) { // Greater Than
- return -1;
- }
-
- return 1; // Less Than
+ // Multiply by -1 to sort in descending order
+ return (-1) * UnitsConverter::compareTwoUnits((**leftPointer).unitImpl, //
+ (**rightPointer).unitImpl, //
+ *static_cast<const ConversionRates *>(context), //
+ status);
};
uprv_sortArray(units_.getAlias(), //
@@ -86,11 +116,11 @@ ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnitImpl &inputUnit,
// 3. then, the final result will be (6 feet and 6.74016 inches)
for (int i = 0, n = units_.length(); i < n; i++) {
if (i == 0) { // first element
- unitConverters_.emplaceBackAndCheckErrorCode(status, inputUnit, *units_[i], ratesInfo,
- status);
+ unitsConverters_.emplaceBackAndCheckErrorCode(status, inputUnit, units_[i]->unitImpl,
+ ratesInfo, status);
} else {
- unitConverters_.emplaceBackAndCheckErrorCode(status, *units_[i - 1], *units_[i], ratesInfo,
- status);
+ unitsConverters_.emplaceBackAndCheckErrorCode(status, units_[i - 1]->unitImpl,
+ units_[i]->unitImpl, ratesInfo, status);
}
if (U_FAILURE(status)) {
@@ -100,17 +130,17 @@ ComplexUnitsConverter::ComplexUnitsConverter(const MeasureUnitImpl &inputUnit,
}
UBool ComplexUnitsConverter::greaterThanOrEqual(double quantity, double limit) const {
- U_ASSERT(unitConverters_.length() > 0);
+ U_ASSERT(unitsConverters_.length() > 0);
// First converter converts to the biggest quantity.
- double newQuantity = unitConverters_[0]->convert(quantity);
+ double newQuantity = unitsConverters_[0]->convert(quantity);
return newQuantity >= limit;
}
MaybeStackVector<Measure> ComplexUnitsConverter::convert(double quantity,
icu::number::impl::RoundingImpl *rounder,
UErrorCode &status) const {
- // TODO(hugovdm): return an error for "foot-and-foot"?
+ // TODO: return an error for "foot-and-foot"?
MaybeStackVector<Measure> result;
int sign = 1;
if (quantity < 0) {
@@ -120,133 +150,118 @@ MaybeStackVector<Measure> ComplexUnitsConverter::convert(double quantity,
// For N converters:
// - the first converter converts from the input unit to the largest unit,
- // - N-1 converters convert to bigger units for which we want integers,
+ // - the following N-2 converters convert to bigger units for which we want integers,
// - the Nth converter (index N-1) converts to the smallest unit, for which
// we keep a double.
- MaybeStackArray<int64_t, 5> intValues(unitConverters_.length() - 1, status);
+ MaybeStackArray<int64_t, 5> intValues(unitsConverters_.length() - 1, status);
if (U_FAILURE(status)) {
return result;
}
- uprv_memset(intValues.getAlias(), 0, (unitConverters_.length() - 1) * sizeof(int64_t));
+ uprv_memset(intValues.getAlias(), 0, (unitsConverters_.length() - 1) * sizeof(int64_t));
- for (int i = 0, n = unitConverters_.length(); i < n; ++i) {
- quantity = (*unitConverters_[i]).convert(quantity);
+ for (int i = 0, n = unitsConverters_.length(); i < n; ++i) {
+ quantity = (*unitsConverters_[i]).convert(quantity);
if (i < n - 1) {
- // The double type has 15 decimal digits of precision. For choosing
- // whether to use the current unit or the next smaller unit, we
- // therefore nudge up the number with which the thresholding
- // decision is made. However after the thresholding, we use the
- // original values to ensure unbiased accuracy (to the extent of
- // double's capabilities).
- int64_t roundedQuantity = floor(quantity * (1 + DBL_EPSILON));
- intValues[i] = roundedQuantity;
+ // If quantity is at the limits of double's precision from an
+ // integer value, we take that integer value.
+ int64_t flooredQuantity = static_cast<int64_t>(floor(quantity * (1 + DBL_EPSILON)));
+ if (uprv_isNaN(quantity)) {
+ // With clang on Linux: floor does not support NaN, resulting in
+ // a giant negative number. For now, we produce "0 feet, NaN
+ // inches". TODO(icu-units#131): revisit desired output.
+ flooredQuantity = 0;
+ }
+ intValues[i] = flooredQuantity;
// Keep the residual of the quantity.
// For example: `3.6 feet`, keep only `0.6 feet`
- //
- // When the calculation is near enough +/- DBL_EPSILON, we round to
- // zero. (We also ensure no negative values here.)
- if ((quantity - roundedQuantity) / quantity < DBL_EPSILON) {
+ double remainder = quantity - flooredQuantity;
+ if (remainder < 0) {
+ // Because we nudged flooredQuantity up by eps, remainder may be
+ // negative: we must treat such a remainder as zero.
quantity = 0;
} else {
- quantity -= roundedQuantity;
- }
- } else { // LAST ELEMENT
- if (rounder == nullptr) {
- // Nothing to do for the last element.
- break;
+ quantity = remainder;
}
+ }
+ }
- // Round the last value
- // TODO(ICU-21288): get smarter about precision for mixed units.
- number::impl::DecimalQuantity quant;
- quant.setToDouble(quantity);
- rounder->apply(quant, status);
- if (U_FAILURE(status)) {
- return result;
- }
- quantity = quant.toDouble();
- if (i == 0) {
- // Last element is also the first element, so we're done
- break;
- }
+ applyRounder(intValues, quantity, rounder, status);
- // Check if there's a carry, and bubble it back up the resulting intValues.
- int64_t carry = floor(unitConverters_[i]->convertInverse(quantity) * (1 + DBL_EPSILON));
- if (carry <= 0) {
- break;
- }
- quantity -= unitConverters_[i]->convert(carry);
- intValues[i - 1] += carry;
-
- // We don't use the first converter: that one is for the input unit
- for (int32_t j = i - 1; j > 0; j--) {
- carry = floor(unitConverters_[j]->convertInverse(intValues[j]) * (1 + DBL_EPSILON));
- if (carry <= 0) {
- break;
- }
- intValues[j] -= round(unitConverters_[j]->convert(carry));
- intValues[j - 1] += carry;
- }
- }
+ // Initialize empty result. We use a MaybeStackArray directly so we can
+ // assign pointers - for this privilege we have to take care of cleanup.
+ MaybeStackArray<Measure *, 4> tmpResult(unitsConverters_.length(), status);
+ if (U_FAILURE(status)) {
+ return result;
}
- // Package values into Measure instances in result:
- for (int i = 0, n = unitConverters_.length(); i < n; ++i) {
+ // Package values into temporary Measure instances in tmpResult:
+ for (int i = 0, n = unitsConverters_.length(); i < n; ++i) {
if (i < n - 1) {
Formattable formattableQuantity(intValues[i] * sign);
// Measure takes ownership of the MeasureUnit*
- MeasureUnit *type = new MeasureUnit(units_[i]->copy(status).build(status));
- if (result.emplaceBackAndCheckErrorCode(status, formattableQuantity, type, status) ==
- nullptr) {
- // Ownership wasn't taken
- U_ASSERT(U_FAILURE(status));
- delete type;
- }
- if (U_FAILURE(status)) {
- return result;
- }
+ MeasureUnit *type = new MeasureUnit(units_[i]->unitImpl.copy(status).build(status));
+ tmpResult[units_[i]->index] = new Measure(formattableQuantity, type, status);
} else { // LAST ELEMENT
- // Add the last element, not an integer:
Formattable formattableQuantity(quantity * sign);
// Measure takes ownership of the MeasureUnit*
- MeasureUnit *type = new MeasureUnit(units_[i]->copy(status).build(status));
- if (result.emplaceBackAndCheckErrorCode(status, formattableQuantity, type, status) ==
- nullptr) {
- // Ownership wasn't taken
- U_ASSERT(U_FAILURE(status));
- delete type;
- }
- if (U_FAILURE(status)) {
- return result;
- }
- U_ASSERT(result.length() == i + 1);
- U_ASSERT(result[i] != nullptr);
+ MeasureUnit *type = new MeasureUnit(units_[i]->unitImpl.copy(status).build(status));
+ tmpResult[units_[i]->index] = new Measure(formattableQuantity, type, status);
}
}
- MaybeStackVector<Measure> orderedResult;
- int32_t unitsCount = outputUnits_.length();
- U_ASSERT(unitsCount == units_.length());
- Measure **arr = result.getAlias();
- // O(N^2) is fine: mixed units' unitsCount is usually 2 or 3.
- for (int32_t i = 0; i < unitsCount; i++) {
- for (int32_t j = i; j < unitsCount; j++) {
- // Find the next expected unit, and swap it into place.
- U_ASSERT(result[j] != nullptr);
- if (result[j]->getUnit() == *outputUnits_[i]) {
- if (j != i) {
- Measure *tmp = arr[j];
- arr[j] = arr[i];
- arr[i] = tmp;
- }
- }
- }
+
+ // Transfer values into result and return:
+ for(int32_t i = 0, n = unitsConverters_.length(); i < n; ++i) {
+ U_ASSERT(tmpResult[i] != nullptr);
+ result.emplaceBackAndCheckErrorCode(status, *tmpResult[i]);
+ delete tmpResult[i];
}
return result;
}
+void ComplexUnitsConverter::applyRounder(MaybeStackArray<int64_t, 5> &intValues, double &quantity,
+ icu::number::impl::RoundingImpl *rounder,
+ UErrorCode &status) const {
+ if (rounder == nullptr) {
+ // Nothing to do for the quantity.
+ return;
+ }
+
+ number::impl::DecimalQuantity decimalQuantity;
+ decimalQuantity.setToDouble(quantity);
+ rounder->apply(decimalQuantity, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
+ quantity = decimalQuantity.toDouble();
+
+ int32_t lastIndex = unitsConverters_.length() - 1;
+ if (lastIndex == 0) {
+ // Only one element, no need to bubble up the carry
+ return;
+ }
+
+ // Check if there's a carry, and bubble it back up the resulting intValues.
+ int64_t carry = static_cast<int64_t>(floor(unitsConverters_[lastIndex]->convertInverse(quantity) * (1 + DBL_EPSILON)));
+ if (carry <= 0) {
+ return;
+ }
+ quantity -= unitsConverters_[lastIndex]->convert(static_cast<double>(carry));
+ intValues[lastIndex - 1] += carry;
+
+ // We don't use the first converter: that one is for the input unit
+ for (int32_t j = lastIndex - 1; j > 0; j--) {
+ carry = static_cast<int64_t>(floor(unitsConverters_[j]->convertInverse(static_cast<double>(intValues[j])) * (1 + DBL_EPSILON)));
+ if (carry <= 0) {
+ return;
+ }
+ intValues[j] -= static_cast<int64_t>(round(unitsConverters_[j]->convert(static_cast<double>(carry))));
+ intValues[j - 1] += carry;
+ }
+}
+
} // namespace units
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h b/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h
index 83c5b94342f..5c669b45ddd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_complexconverter.h
@@ -24,9 +24,9 @@ U_NAMESPACE_BEGIN
// Note: These need to be outside of the units namespace, or Clang will generate
// a compile error.
#if U_PF_WINDOWS <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN
-template class U_I18N_API MaybeStackArray<units::UnitConverter*, 8>;
-template class U_I18N_API MemoryPool<units::UnitConverter, 8>;
-template class U_I18N_API MaybeStackVector<units::UnitConverter, 8>;
+template class U_I18N_API MaybeStackArray<units::UnitsConverter*, 8>;
+template class U_I18N_API MemoryPool<units::UnitsConverter, 8>;
+template class U_I18N_API MaybeStackVector<units::UnitsConverter, 8>;
template class U_I18N_API MaybeStackArray<MeasureUnitImpl*, 8>;
template class U_I18N_API MemoryPool<MeasureUnitImpl, 8>;
template class U_I18N_API MaybeStackVector<MeasureUnitImpl, 8>;
@@ -42,13 +42,43 @@ namespace units {
* For example, from `meter` to `foot+inch`.
*
* DESIGN:
- * This class uses `UnitConverter` in order to perform the single converter (i.e. converters from a
+ * This class uses `UnitsConverter` in order to perform the single converter (i.e. converters from a
* single unit to another single unit). Therefore, `ComplexUnitsConverter` class contains multiple
- * instances of the `UnitConverter` to perform the conversion.
+ * instances of the `UnitsConverter` to perform the conversion.
*/
class U_I18N_API ComplexUnitsConverter : public UMemory {
public:
/**
+ * Constructs `ComplexUnitsConverter` for an `targetUnit` that could be Single, Compound or Mixed.
+ * In case of:
+ * 1- Single and Compound units,
+ * the conversion will not perform anything, the input will be equal to the output.
+ * 2- Mixed Unit
+ * the conversion will consider the input is the biggest unit. And will convert it to be spread
+ * through the target units. For example: if target unit is "inch-and-foot", and the input is 2.5.
+ * The converter will consider the input value in "foot", because foot is the biggest unit.
+ * Then, it will convert 2.5 feet to "inch-and-foot".
+ *
+ * @param targetUnit could be any units type (single, compound or mixed).
+ * @param ratesInfo
+ * @param status
+ */
+ ComplexUnitsConverter(const MeasureUnitImpl &targetUnit, const ConversionRates &ratesInfo,
+ UErrorCode &status);
+ /**
+ * Constructor of `ComplexUnitsConverter`.
+ * NOTE:
+ * - inputUnit and outputUnits must be under the same category
+ * - e.g. meter to feet and inches --> all of them are length units.
+ *
+ * @param inputUnit represents the source unit. (should be single or compound unit).
+ * @param outputUnits represents the output unit. could be any type. (single, compound or mixed).
+ * @param status
+ */
+ ComplexUnitsConverter(StringPiece inputUnitIdentifier, StringPiece outputUnitsIdentifier,
+ UErrorCode &status);
+
+ /**
* Constructor of `ComplexUnitsConverter`.
* NOTE:
* - inputUnit and outputUnits must be under the same category
@@ -56,6 +86,7 @@ class U_I18N_API ComplexUnitsConverter : public UMemory {
*
* @param inputUnit represents the source unit. (should be single or compound unit).
* @param outputUnits represents the output unit. could be any type. (single, compound or mixed).
+ * @param ratesInfo a ConversionRates instance containing the unit conversion rates.
* @param status
*/
ComplexUnitsConverter(const MeasureUnitImpl &inputUnit, const MeasureUnitImpl &outputUnits,
@@ -78,11 +109,21 @@ class U_I18N_API ComplexUnitsConverter : public UMemory {
convert(double quantity, icu::number::impl::RoundingImpl *rounder, UErrorCode &status) const;
private:
- MaybeStackVector<UnitConverter> unitConverters_;
- // Individual units of mixed units, sorted big to small
- MaybeStackVector<MeasureUnitImpl> units_;
- // Individual units of mixed units, sorted in desired output order
- MaybeStackVector<MeasureUnit> outputUnits_;
+ MaybeStackVector<UnitsConverter> unitsConverters_;
+
+ // Individual units of mixed units, sorted big to small, with indices
+ // indicating the requested output mixed unit order.
+ MaybeStackVector<MeasureUnitImplWithIndex> units_;
+
+ // Sorts units_, which must be populated before calling this, and populates
+ // unitsConverters_.
+ void init(const MeasureUnitImpl &inputUnit, const ConversionRates &ratesInfo, UErrorCode &status);
+
+ // Applies the rounder to the quantity (last element) and bubble up any carried value to all the
+ // intValues.
+ // TODO(ICU-21288): get smarter about precision for mixed units.
+ void applyRounder(MaybeStackArray<int64_t, 5> &intValues, double &quantity,
+ icu::number::impl::RoundingImpl *rounder, UErrorCode &status) const;
};
} // namespace units
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp b/Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp
index a777d026b98..7e946e584bb 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_converter.cpp
@@ -26,7 +26,7 @@ void U_I18N_API Factor::multiplyBy(const Factor &rhs) {
factorNum *= rhs.factorNum;
factorDen *= rhs.factorDen;
for (int i = 0; i < CONSTANTS_COUNT; i++) {
- constants[i] += rhs.constants[i];
+ constantExponents[i] += rhs.constantExponents[i];
}
// NOTE
@@ -39,7 +39,7 @@ void U_I18N_API Factor::divideBy(const Factor &rhs) {
factorNum *= rhs.factorDen;
factorDen *= rhs.factorNum;
for (int i = 0; i < CONSTANTS_COUNT; i++) {
- constants[i] -= rhs.constants[i];
+ constantExponents[i] -= rhs.constantExponents[i];
}
// NOTE
@@ -51,7 +51,7 @@ void U_I18N_API Factor::divideBy(const Factor &rhs) {
void U_I18N_API Factor::power(int32_t power) {
// multiply all the constant by the power.
for (int i = 0; i < CONSTANTS_COUNT; i++) {
- constants[i] *= power;
+ constantExponents[i] *= power;
}
bool shouldFlip = power < 0; // This means that after applying the absolute power, we should flip
@@ -66,35 +66,29 @@ void U_I18N_API Factor::power(int32_t power) {
}
}
-void U_I18N_API Factor::flip() {
- std::swap(factorNum, factorDen);
-
- for (int i = 0; i < CONSTANTS_COUNT; i++) {
- constants[i] *= -1;
- }
-}
-
-void U_I18N_API Factor::applySiPrefix(UMeasureSIPrefix siPrefix) {
- if (siPrefix == UMeasureSIPrefix::UMEASURE_SI_PREFIX_ONE) return; // No need to do anything
-
- double siApplied = std::pow(10.0, std::abs(siPrefix));
-
- if (siPrefix < 0) {
- factorDen *= siApplied;
+void U_I18N_API Factor::applyPrefix(UMeasurePrefix unitPrefix) {
+ if (unitPrefix == UMeasurePrefix::UMEASURE_PREFIX_ONE) {
+ // No need to do anything
return;
}
- factorNum *= siApplied;
+ int32_t prefixPower = umeas_getPrefixPower(unitPrefix);
+ double prefixFactor = std::pow((double)umeas_getPrefixBase(unitPrefix), (double)std::abs(prefixPower));
+ if (prefixPower >= 0) {
+ factorNum *= prefixFactor;
+ } else {
+ factorDen *= prefixFactor;
+ }
}
void U_I18N_API Factor::substituteConstants() {
for (int i = 0; i < CONSTANTS_COUNT; i++) {
- if (this->constants[i] == 0) {
+ if (this->constantExponents[i] == 0) {
continue;
}
- auto absPower = std::abs(this->constants[i]);
- Signum powerSig = this->constants[i] < 0 ? Signum::NEGATIVE : Signum::POSITIVE;
+ auto absPower = std::abs(this->constantExponents[i]);
+ Signum powerSig = this->constantExponents[i] < 0 ? Signum::NEGATIVE : Signum::POSITIVE;
double absConstantValue = std::pow(constantsValues[i], absPower);
if (powerSig == Signum::NEGATIVE) {
@@ -103,7 +97,7 @@ void U_I18N_API Factor::substituteConstants() {
this->factorNum *= absConstantValue;
}
- this->constants[i] = 0;
+ this->constantExponents[i] = 0;
}
}
@@ -221,18 +215,21 @@ Factor loadSingleFactor(StringPiece source, const ConversionRates &ratesInfo, UE
}
// Load Factor of a compound source unit.
+// In ICU4J, this is a pair of ConversionRates.getFactorToBase() functions.
Factor loadCompoundFactor(const MeasureUnitImpl &source, const ConversionRates &ratesInfo,
UErrorCode &status) {
Factor result;
- for (int32_t i = 0, n = source.units.length(); i < n; i++) {
- SingleUnitImpl singleUnit = *source.units[i];
+ for (int32_t i = 0, n = source.singleUnits.length(); i < n; i++) {
+ SingleUnitImpl singleUnit = *source.singleUnits[i];
Factor singleFactor = loadSingleFactor(singleUnit.getSimpleUnitID(), ratesInfo, status);
if (U_FAILURE(status)) return result;
- // Apply SiPrefix before the power, because the power may be will flip the factor.
- singleFactor.applySiPrefix(singleUnit.siPrefix);
+ // Prefix before power, because:
+ // - square-kilometer to square-meter: (1000)^2
+ // - square-kilometer to square-foot (approximate): (3.28*1000)^2
+ singleFactor.applyPrefix(singleUnit.unitPrefix);
// Apply the power of the `dimensionality`
singleFactor.power(singleUnit.dimensionality);
@@ -249,6 +246,8 @@ Factor loadCompoundFactor(const MeasureUnitImpl &source, const ConversionRates &
*
* NOTE:
* Empty unit means simple unit.
+ *
+ * In ICU4J, this is ConversionRates.checkSimpleUnit().
*/
UBool checkSimpleUnit(const MeasureUnitImpl &unit, UErrorCode &status) {
if (U_FAILURE(status)) return false;
@@ -256,14 +255,14 @@ UBool checkSimpleUnit(const MeasureUnitImpl &unit, UErrorCode &status) {
if (unit.complexity != UMEASURE_UNIT_SINGLE) {
return false;
}
- if (unit.units.length() == 0) {
+ if (unit.singleUnits.length() == 0) {
// Empty units means simple unit.
return true;
}
- auto singleUnit = *(unit.units[0]);
+ auto singleUnit = *(unit.singleUnits[0]);
- if (singleUnit.dimensionality != 1 || singleUnit.siPrefix != UMEASURE_SI_PREFIX_ONE) {
+ if (singleUnit.dimensionality != 1 || singleUnit.unitPrefix != UMEASURE_PREFIX_ONE) {
return false;
}
@@ -273,6 +272,7 @@ UBool checkSimpleUnit(const MeasureUnitImpl &unit, UErrorCode &status) {
/**
* Extract conversion rate from `source` to `target`
*/
+// In ICU4J, this function is partially inlined in the UnitsConverter constructor.
void loadConversionRate(ConversionRate &conversionRate, const MeasureUnitImpl &source,
const MeasureUnitImpl &target, Convertibility unitsState,
const ConversionRates &ratesInfo, UErrorCode &status) {
@@ -300,6 +300,7 @@ void loadConversionRate(ConversionRate &conversionRate, const MeasureUnitImpl &s
conversionRate.factorNum = finalFactor.factorNum;
conversionRate.factorDen = finalFactor.factorDen;
+ // This code corresponds to ICU4J's ConversionRates.getOffset().
// In case of simple units (such as: celsius or fahrenheit), offsets are considered.
if (checkSimpleUnit(source, status) && checkSimpleUnit(target, status)) {
conversionRate.sourceOffset =
@@ -307,6 +308,8 @@ void loadConversionRate(ConversionRate &conversionRate, const MeasureUnitImpl &s
conversionRate.targetOffset =
targetToBase.offset * targetToBase.factorDen / targetToBase.factorNum;
}
+ // TODO(icu-units#127): should we consider failure if there's an offset for
+ // a not-simple-unit? What about kilokelvin / kilocelsius?
conversionRate.reciprocal = unitsState == Convertibility::RECIPROCAL;
}
@@ -336,8 +339,8 @@ void mergeSingleUnitWithDimension(MaybeStackVector<UnitIndexAndDimension> &unitI
void mergeUnitsAndDimensions(MaybeStackVector<UnitIndexAndDimension> &unitIndicesWithDimension,
const MeasureUnitImpl &shouldBeMerged, int32_t multiplier) {
- for (int32_t unit_i = 0; unit_i < shouldBeMerged.units.length(); unit_i++) {
- auto singleUnit = *shouldBeMerged.units[unit_i];
+ for (int32_t unit_i = 0; unit_i < shouldBeMerged.singleUnits.length(); unit_i++) {
+ auto singleUnit = *shouldBeMerged.singleUnits[unit_i];
mergeSingleUnitWithDimension(unitIndicesWithDimension, singleUnit, multiplier);
}
}
@@ -361,28 +364,32 @@ UBool checkAllDimensionsAreZeros(const MaybeStackVector<UnitIndexAndDimension> &
void U_I18N_API addSingleFactorConstant(StringPiece baseStr, int32_t power, Signum signum,
Factor &factor, UErrorCode &status) {
if (baseStr == "ft_to_m") {
- factor.constants[CONSTANT_FT2M] += power * signum;
+ factor.constantExponents[CONSTANT_FT2M] += power * signum;
} else if (baseStr == "ft2_to_m2") {
- factor.constants[CONSTANT_FT2M] += 2 * power * signum;
+ factor.constantExponents[CONSTANT_FT2M] += 2 * power * signum;
} else if (baseStr == "ft3_to_m3") {
- factor.constants[CONSTANT_FT2M] += 3 * power * signum;
+ factor.constantExponents[CONSTANT_FT2M] += 3 * power * signum;
} else if (baseStr == "in3_to_m3") {
- factor.constants[CONSTANT_FT2M] += 3 * power * signum;
+ factor.constantExponents[CONSTANT_FT2M] += 3 * power * signum;
factor.factorDen *= 12 * 12 * 12;
} else if (baseStr == "gal_to_m3") {
factor.factorNum *= 231;
- factor.constants[CONSTANT_FT2M] += 3 * power * signum;
+ factor.constantExponents[CONSTANT_FT2M] += 3 * power * signum;
factor.factorDen *= 12 * 12 * 12;
} else if (baseStr == "gal_imp_to_m3") {
- factor.constants[CONSTANT_GAL_IMP2M3] += power * signum;
+ factor.constantExponents[CONSTANT_GAL_IMP2M3] += power * signum;
} else if (baseStr == "G") {
- factor.constants[CONSTANT_G] += power * signum;
+ factor.constantExponents[CONSTANT_G] += power * signum;
} else if (baseStr == "gravity") {
- factor.constants[CONSTANT_GRAVITY] += power * signum;
+ factor.constantExponents[CONSTANT_GRAVITY] += power * signum;
} else if (baseStr == "lb_to_kg") {
- factor.constants[CONSTANT_LB2KG] += power * signum;
+ factor.constantExponents[CONSTANT_LB2KG] += power * signum;
+ } else if (baseStr == "glucose_molar_mass") {
+ factor.constantExponents[CONSTANT_GLUCOSE_MOLAR_MASS] += power * signum;
+ } else if (baseStr == "item_per_mole") {
+ factor.constantExponents[CONSTANT_ITEM_PER_MOLE] += power * signum;
} else if (baseStr == "PI") {
- factor.constants[CONSTANT_PI] += power * signum;
+ factor.constantExponents[CONSTANT_PI] += power * signum;
} else {
if (signum == Signum::NEGATIVE) {
factor.factorDen *= std::pow(strToDouble(baseStr, status), power);
@@ -403,7 +410,7 @@ MeasureUnitImpl U_I18N_API extractCompoundBaseUnit(const MeasureUnitImpl &source
MeasureUnitImpl result;
if (U_FAILURE(status)) return result;
- const auto &singleUnits = source.units;
+ const auto &singleUnits = source.singleUnits;
for (int i = 0, count = singleUnits.length(); i < count; ++i) {
const auto &singleUnit = *singleUnits[i];
// Extract `ConversionRateInfo` using the absolute unit. For example: in case of `square-meter`,
@@ -421,11 +428,11 @@ MeasureUnitImpl U_I18N_API extractCompoundBaseUnit(const MeasureUnitImpl &source
// Multiply the power of the singleUnit by the power of the baseUnit. For example, square-hectare
// must be pow4-meter. (NOTE: hectare --> square-meter)
auto baseUnits =
- MeasureUnitImpl::forIdentifier(rateInfo->baseUnit.toStringPiece(), status).units;
+ MeasureUnitImpl::forIdentifier(rateInfo->baseUnit.toStringPiece(), status).singleUnits;
for (int32_t i = 0, baseUnitsCount = baseUnits.length(); i < baseUnitsCount; i++) {
baseUnits[i]->dimensionality *= singleUnit.dimensionality;
// TODO: Deal with SI-prefix
- result.append(*baseUnits[i], status);
+ result.appendSingleUnit(*baseUnits[i], status);
if (U_FAILURE(status)) {
return result;
@@ -454,7 +461,7 @@ Convertibility U_I18N_API extractConvertibility(const MeasureUnitImpl &source,
if (source.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED ||
target.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
- status = U_INTERNAL_PROGRAM_ERROR;
+ status = U_ARGUMENT_TYPE_MISMATCH;
return UNCONVERTIBLE;
}
@@ -482,27 +489,96 @@ Convertibility U_I18N_API extractConvertibility(const MeasureUnitImpl &source,
return UNCONVERTIBLE;
}
-UnitConverter::UnitConverter(const MeasureUnitImpl &source, const MeasureUnitImpl &target,
- const ConversionRates &ratesInfo, UErrorCode &status)
+UnitsConverter::UnitsConverter(const MeasureUnitImpl &source, const MeasureUnitImpl &target,
+ const ConversionRates &ratesInfo, UErrorCode &status)
: conversionRate_(source.copy(status), target.copy(status)) {
- if (source.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED ||
- target.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
- status = U_INTERNAL_PROGRAM_ERROR;
+ this->init(ratesInfo, status);
+}
+
+UnitsConverter::UnitsConverter(StringPiece sourceIdentifier, StringPiece targetIdentifier,
+ UErrorCode &status)
+ : conversionRate_(MeasureUnitImpl::forIdentifier(sourceIdentifier, status),
+ MeasureUnitImpl::forIdentifier(targetIdentifier, status)) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ ConversionRates ratesInfo(status);
+ this->init(ratesInfo, status);
+}
+
+void UnitsConverter::init(const ConversionRates &ratesInfo, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return;
+ }
+
+ if (this->conversionRate_.source.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED ||
+ this->conversionRate_.target.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
+ status = U_ARGUMENT_TYPE_MISMATCH;
return;
}
- Convertibility unitsState = extractConvertibility(source, target, ratesInfo, status);
+ Convertibility unitsState = extractConvertibility(this->conversionRate_.source,
+ this->conversionRate_.target, ratesInfo, status);
if (U_FAILURE(status)) return;
if (unitsState == Convertibility::UNCONVERTIBLE) {
- status = U_INTERNAL_PROGRAM_ERROR;
+ status = U_ARGUMENT_TYPE_MISMATCH;
return;
}
loadConversionRate(conversionRate_, conversionRate_.source, conversionRate_.target, unitsState,
ratesInfo, status);
+
}
-double UnitConverter::convert(double inputValue) const {
+int32_t UnitsConverter::compareTwoUnits(const MeasureUnitImpl &firstUnit,
+ const MeasureUnitImpl &secondUnit,
+ const ConversionRates &ratesInfo, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return 0;
+ }
+
+ if (firstUnit.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED ||
+ secondUnit.complexity == UMeasureUnitComplexity::UMEASURE_UNIT_MIXED) {
+ status = U_ARGUMENT_TYPE_MISMATCH;
+ return 0;
+ }
+
+ Convertibility unitsState = extractConvertibility(firstUnit, secondUnit, ratesInfo, status);
+ if (U_FAILURE(status)) {
+ return 0;
+ }
+
+ if (unitsState == Convertibility::UNCONVERTIBLE || unitsState == Convertibility::RECIPROCAL) {
+ status = U_ARGUMENT_TYPE_MISMATCH;
+ return 0;
+ }
+
+ // Represents the conversion factor from the firstUnit to the base
+ // unit that specified in the conversion data which is considered as
+ // the root of the firstUnit and the secondUnit.
+ Factor firstUnitToBase = loadCompoundFactor(firstUnit, ratesInfo, status);
+ Factor secondUnitToBase = loadCompoundFactor(secondUnit, ratesInfo, status);
+
+ firstUnitToBase.substituteConstants();
+ secondUnitToBase.substituteConstants();
+
+ double firstUnitToBaseConversionRate = firstUnitToBase.factorNum / firstUnitToBase.factorDen;
+ double secondUnitToBaseConversionRate = secondUnitToBase.factorNum / secondUnitToBase.factorDen;
+
+ double diff = firstUnitToBaseConversionRate - secondUnitToBaseConversionRate;
+ if (diff > 0) {
+ return 1;
+ }
+
+ if (diff < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+double UnitsConverter::convert(double inputValue) const {
double result =
inputValue + conversionRate_.sourceOffset; // Reset the input to the target zero index.
// Convert the quantity to from the source scale to the target scale.
@@ -523,7 +599,7 @@ double UnitConverter::convert(double inputValue) const {
return result;
}
-double UnitConverter::convertInverse(double inputValue) const {
+double UnitsConverter::convertInverse(double inputValue) const {
double result = inputValue;
if (conversionRate_.reciprocal) {
if (result == 0) {
@@ -540,6 +616,17 @@ double UnitConverter::convertInverse(double inputValue) const {
return result;
}
+ConversionInfo UnitsConverter::getConversionInfo() const {
+ ConversionInfo result;
+ result.conversionRate = conversionRate_.factorNum / conversionRate_.factorDen;
+ result.offset =
+ (conversionRate_.sourceOffset * (conversionRate_.factorNum / conversionRate_.factorDen)) -
+ conversionRate_.targetOffset;
+ result.reciprocal = conversionRate_.reciprocal;
+
+ return result;
+}
+
} // namespace units
U_NAMESPACE_END
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_converter.h b/Build/source/libs/icu/icu-src/source/i18n/units_converter.h
index 7650131b1f6..5c002f4147e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/units_converter.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_converter.h
@@ -20,13 +20,16 @@ namespace units {
/* Internal Structure */
+// Constants corresponding to unitConstants in CLDR's units.xml.
enum Constants {
- CONSTANT_FT2M, // ft2m stands for foot to meter.
- CONSTANT_PI, // PI
- CONSTANT_GRAVITY, // Gravity
- CONSTANT_G,
+ CONSTANT_FT2M, // ft_to_m
+ CONSTANT_PI, // PI
+ CONSTANT_GRAVITY, // Gravity of earth (9.80665 m/s^2), "g".
+ CONSTANT_G, // Newtonian constant of gravitation, "G".
CONSTANT_GAL_IMP2M3, // Gallon imp to m3
CONSTANT_LB2KG, // Pound to Kilogram
+ CONSTANT_GLUCOSE_MOLAR_MASS,
+ CONSTANT_ITEM_PER_MOLE,
// Must be the last element.
CONSTANTS_COUNT
@@ -36,6 +39,7 @@ enum Constants {
// resources file. A unit test checks that all constants in the resource
// file are at least recognised by the code. Derived constants' values or
// hard-coded derivations are not checked.
+// In ICU4J, these constants live in UnitConverter.Factor.getConversionRate().
static const double constantsValues[CONSTANTS_COUNT] = {
0.3048, // CONSTANT_FT2M
411557987.0 / 131002976.0, // CONSTANT_PI
@@ -43,6 +47,8 @@ static const double constantsValues[CONSTANTS_COUNT] = {
6.67408E-11, // CONSTANT_G
0.00454609, // CONSTANT_GAL_IMP2M3
0.45359237, // CONSTANT_LB2KG
+ 180.1557, // CONSTANT_GLUCOSE_MOLAR_MASS
+ 6.02214076E+23, // CONSTANT_ITEM_PER_MOLE
};
typedef enum Signum {
@@ -56,7 +62,9 @@ struct U_I18N_API Factor {
double factorDen = 1;
double offset = 0;
bool reciprocal = false;
- int32_t constants[CONSTANTS_COUNT] = {};
+
+ // Exponents for the symbolic constants
+ int32_t constantExponents[CONSTANTS_COUNT] = {};
void multiplyBy(const Factor &rhs);
void divideBy(const Factor &rhs);
@@ -64,14 +72,22 @@ struct U_I18N_API Factor {
// Apply the power to the factor.
void power(int32_t power);
- // Flip the `Factor`, for example, factor= 2/3, flippedFactor = 3/2
- void flip();
+ // Apply SI or binary prefix to the Factor.
+ void applyPrefix(UMeasurePrefix unitPrefix);
- // Apply SI prefix to the `Factor`
- void applySiPrefix(UMeasureSIPrefix siPrefix);
+ // Does an in-place substitution of the "symbolic constants" based on
+ // constantExponents (resetting the exponents).
+ //
+ // In ICU4J, see UnitConverter.Factor.getConversionRate().
void substituteConstants();
};
+struct U_I18N_API ConversionInfo {
+ double conversionRate;
+ double offset;
+ bool reciprocal;
+};
+
/*
* Adds a single factor element to the `Factor`. e.g "ft3m", "2.333" or "cup2m3". But not "cup2m3^3".
*/
@@ -127,23 +143,47 @@ Convertibility U_I18N_API extractConvertibility(const MeasureUnitImpl &source,
* Only works with SINGLE and COMPOUND units. If one of the units is a
* MIXED unit, an error will occur. For more information, see UMeasureUnitComplexity.
*/
-class U_I18N_API UnitConverter : public UMemory {
+class U_I18N_API UnitsConverter : public UMemory {
public:
/**
* Constructor of `UnitConverter`.
* NOTE:
* - source and target must be under the same category
* - e.g. meter to mile --> both of them are length units.
+ * NOTE:
+ * This constructor creates an instance of `ConversionRates` internally.
+ *
+ * @param sourceIdentifier represents the source unit identifier.
+ * @param targetIdentifier represents the target unit identifier.
+ * @param status
+ */
+ UnitsConverter(StringPiece sourceIdentifier, StringPiece targetIdentifier, UErrorCode &status);
+
+ /**
+ * Constructor of `UnitConverter`.
+ * NOTE:
+ * - source and target must be under the same category
+ * - e.g. meter to mile --> both of them are length units.
*
* @param source represents the source unit.
* @param target represents the target unit.
* @param ratesInfo Contains all the needed conversion rates.
* @param status
*/
- UnitConverter(const MeasureUnitImpl &source, const MeasureUnitImpl &target,
+ UnitsConverter(const MeasureUnitImpl &source, const MeasureUnitImpl &target,
const ConversionRates &ratesInfo, UErrorCode &status);
/**
+ * Compares two single units and returns 1 if the first one is greater, -1 if the second
+ * one is greater and 0 if they are equal.
+ *
+ * NOTE:
+ * Compares only single units that are convertible.
+ */
+ static int32_t compareTwoUnits(const MeasureUnitImpl &firstUnit, const MeasureUnitImpl &SecondUnit,
+ const ConversionRates &ratesInfo, UErrorCode &status);
+
+ /**
* Convert a measurement expressed in the source unit to a measurement
* expressed in the target unit.
*
@@ -161,8 +201,15 @@ class U_I18N_API UnitConverter : public UMemory {
*/
double convertInverse(double inputValue) const;
+ ConversionInfo getConversionInfo() const;
+
private:
ConversionRate conversionRate_;
+
+ /**
+ * Initialises the object.
+ */
+ void init(const ConversionRates &ratesInfo, UErrorCode &status);
};
} // namespace units
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_data.cpp b/Build/source/libs/icu/icu-src/source/i18n/units_data.cpp
index 42bd6248b0b..d1d1fc5bc05 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/units_data.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_data.cpp
@@ -59,7 +59,7 @@ class ConversionRateDataSink : public ResourceSink {
* @param noFallback Ignored.
* @param status The standard ICU error code output parameter.
*/
- void put(const char *source, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) {
+ void put(const char *source, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) override {
if (U_FAILURE(status)) { return; }
if (uprv_strcmp(source, "convertUnits") != 0) {
// This is very strict, however it is the cheapest way to be sure
@@ -146,7 +146,7 @@ class UnitPreferencesSink : public ResourceSink {
* @param status The standard ICU error code output parameter. Note: if an
* error is returned, outPrefs and outMetadata may be inconsistent.
*/
- void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) {
+ void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &status) override {
if (U_FAILURE(status)) { return; }
if (uprv_strcmp(key, "unitPreferenceData") != 0) {
// This is very strict, however it is the cheapest way to be sure
@@ -282,6 +282,10 @@ int32_t getPreferenceMetadataIndex(const MaybeStackVector<UnitPreferenceMetadata
if (U_FAILURE(status)) { return -1; }
if (idx >= 0) { return idx; }
if (!foundCategory) {
+ // TODO: failures can happen if units::getUnitCategory returns a category
+ // that does not appear in unitPreferenceData. Do we want a unit test that
+ // checks unitPreferenceData has full coverage of categories? Or just trust
+ // CLDR?
status = U_ILLEGAL_ARGUMENT_ERROR;
return -1;
}
@@ -360,29 +364,6 @@ int32_t UnitPreferenceMetadata::compareTo(const UnitPreferenceMetadata &other, b
return cmp;
}
-CharString U_I18N_API getUnitCategory(const char *baseUnitIdentifier, UErrorCode &status) {
- CharString result;
- LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
- LocalUResourceBundlePointer unitQuantities(
- ures_getByKey(unitsBundle.getAlias(), "unitQuantities", NULL, &status));
- int32_t categoryLength;
- if (U_FAILURE(status)) { return result; }
- const UChar *uCategory =
- ures_getStringByKey(unitQuantities.getAlias(), baseUnitIdentifier, &categoryLength, &status);
- if (U_FAILURE(status)) {
- // TODO(CLDR-13787,hugovdm): special-casing the consumption-inverse
- // case. Once CLDR-13787 is clarified, this should be generalised (or
- // possibly removed):
- if (uprv_strcmp(baseUnitIdentifier, "meter-per-cubic-meter") == 0) {
- status = U_ZERO_ERROR;
- result.append("consumption-inverse", status);
- return result;
- }
- }
- result.appendInvariantChars(uCategory, categoryLength, status);
- return result;
-}
-
// TODO: this may be unnecessary. Fold into ConversionRates class? Or move to anonymous namespace?
void U_I18N_API getAllConversionRates(MaybeStackVector<ConversionRateInfo> &result, UErrorCode &status) {
LocalUResourceBundlePointer unitsBundle(ures_openDirect(NULL, "units", &status));
@@ -415,7 +396,11 @@ void U_I18N_API UnitPreferences::getPreferencesFor(StringPiece category, StringP
const UnitPreference *const *&outPreferences,
int32_t &preferenceCount, UErrorCode &status) const {
int32_t idx = getPreferenceMetadataIndex(&metadata_, category, usage, region, status);
- if (U_FAILURE(status)) { return; }
+ if (U_FAILURE(status)) {
+ outPreferences = nullptr;
+ preferenceCount = 0;
+ return;
+ }
U_ASSERT(idx >= 0); // Failures should have been taken care of by `status`.
const UnitPreferenceMetadata *m = metadata_[idx];
outPreferences = unitPrefs_.getAlias() + m->prefsOffset;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_data.h b/Build/source/libs/icu/icu-src/source/i18n/units_data.h
index b6fe8e88de3..2c19b9434bd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/units_data.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_data.h
@@ -18,22 +18,6 @@ U_NAMESPACE_BEGIN
namespace units {
/**
- * Looks up the unit category of a base unit identifier.
- *
- * Only supports base units, other units must be resolved to base units before
- * passing to this function.
- *
- * Categories are found in `unitQuantities` in the `units` resource (see
- * `units.txt`).
- *
- * TODO(hugovdm): if we give units_data.cpp access to the functionality of
- * `extractCompoundBaseUnit` which is currently in units_converter.cpp, we could
- * support all units for which there is a category. Does it make sense to move
- * that function to units_data.cpp?
- */
-CharString U_I18N_API getUnitCategory(const char *baseUnitIdentifier, UErrorCode &status);
-
-/**
* Encapsulates "convertUnits" information from units resources, specifying how
* to convert from one unit to another.
*
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_router.cpp b/Build/source/libs/icu/icu-src/source/i18n/units_router.cpp
index 3158718fd22..0e6082fae5c 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/units_router.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_router.cpp
@@ -43,23 +43,43 @@ Precision UnitsRouter::parseSkeletonToPrecision(icu::UnicodeString precisionSkel
return result;
}
-UnitsRouter::UnitsRouter(MeasureUnit inputUnit, StringPiece region, StringPiece usage,
+UnitsRouter::UnitsRouter(StringPiece inputUnitIdentifier, StringPiece region, StringPiece usage,
UErrorCode &status) {
+ this->init(MeasureUnit::forIdentifier(inputUnitIdentifier, status), region, usage, status);
+}
+
+UnitsRouter::UnitsRouter(const MeasureUnit &inputUnit, StringPiece region, StringPiece usage,
+ UErrorCode &status) {
+ this->init(std::move(inputUnit), region, usage, status);
+}
+
+void UnitsRouter::init(const MeasureUnit &inputUnit, StringPiece region, StringPiece usage,
+ UErrorCode &status) {
+
+ if (U_FAILURE(status)) {
+ return;
+ }
+
// TODO: do we want to pass in ConversionRates and UnitPreferences instead
// of loading in each UnitsRouter instance? (Or make global?)
ConversionRates conversionRates(status);
UnitPreferences prefs(status);
MeasureUnitImpl inputUnitImpl = MeasureUnitImpl::forMeasureUnitMaybeCopy(inputUnit, status);
- MeasureUnit baseUnit =
- (extractCompoundBaseUnit(inputUnitImpl, conversionRates, status)).build(status);
- CharString category = getUnitCategory(baseUnit.getIdentifier(), status);
+ MeasureUnitImpl baseUnitImpl =
+ (extractCompoundBaseUnit(inputUnitImpl, conversionRates, status));
+ CharString category = getUnitQuantity(baseUnitImpl, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
const UnitPreference *const *unitPreferences;
- int32_t preferencesCount;
- prefs.getPreferencesFor(category.data(), usage, region, unitPreferences, preferencesCount, status);
+ int32_t preferencesCount = 0;
+ prefs.getPreferencesFor(category.toStringPiece(), usage, region, unitPreferences, preferencesCount,
+ status);
for (int i = 0; i < preferencesCount; ++i) {
+ U_ASSERT(unitPreferences[i] != nullptr);
const auto &preference = *unitPreferences[i];
MeasureUnitImpl complexTargetUnitImpl =
diff --git a/Build/source/libs/icu/icu-src/source/i18n/units_router.h b/Build/source/libs/icu/icu-src/source/i18n/units_router.h
index bd7a93d2d8c..b3300f7e277 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/units_router.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/units_router.h
@@ -109,7 +109,7 @@ namespace units {
*
* NOTE:
* the output units and their limits will be extracted from the units preferences database by knowing
- * the followings:
+ * the following:
* - input unit
* - locale
* - usage
@@ -120,7 +120,9 @@ namespace units {
*/
class U_I18N_API UnitsRouter {
public:
- UnitsRouter(MeasureUnit inputUnit, StringPiece locale, StringPiece usage, UErrorCode &status);
+ UnitsRouter(StringPiece inputUnitIdentifier, StringPiece locale, StringPiece usage,
+ UErrorCode &status);
+ UnitsRouter(const MeasureUnit &inputUnit, StringPiece locale, StringPiece usage, UErrorCode &status);
/**
* Performs locale and usage sensitive unit conversion.
@@ -152,6 +154,8 @@ class U_I18N_API UnitsRouter {
static number::Precision parseSkeletonToPrecision(icu::UnicodeString precisionSkeleton,
UErrorCode &status);
+
+ void init(const MeasureUnit &inputUnit, StringPiece locale, StringPiece usage, UErrorCode &status);
};
} // namespace units
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp b/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
index 7f41918cff9..514159e8b7a 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
@@ -1169,7 +1169,7 @@ uregex_replaceAll(URegularExpression *regexp2,
uregex_reset(regexp2, 0, status);
- // Note: Seperate error code variables for findNext() and appendReplacement()
+ // Note: Separate error code variables for findNext() and appendReplacement()
// are used so that destination buffer overflow errors
// in appendReplacement won't stop findNext() from working.
// appendReplacement() and appendTail() special case incoming buffer
@@ -1353,7 +1353,7 @@ int32_t RegexCImpl::appendReplacement(RegularExpression *regexp,
}
//
- // Validate all paramters
+ // Validate all parameters
//
if (validateRE(regexp, TRUE, status) == FALSE) {
return 0;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/usearch.cpp b/Build/source/libs/icu/icu-src/source/i18n/usearch.cpp
index 8866de70337..80b80fa3b43 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/usearch.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/usearch.cpp
@@ -26,17 +26,13 @@
U_NAMESPACE_USE
-// don't use Boyer-Moore
-// (and if we decide to turn this on again there are several new TODOs that will need to be addressed)
-#define BOYER_MOORE 0
-
// internal definition ---------------------------------------------------
#define LAST_BYTE_MASK_ 0xFF
#define SECOND_LAST_BYTE_SHIFT_ 8
#define SUPPLEMENTARY_MIN_VALUE_ 0x10000
-static const Normalizer2Impl *g_nfcImpl = NULL;
+static const Normalizer2Impl *g_nfcImpl = nullptr;
// internal methods -------------------------------------------------
@@ -48,11 +44,11 @@ static const Normalizer2Impl *g_nfcImpl = NULL;
*/
static
inline void setColEIterOffset(UCollationElements *elems,
- int32_t offset)
+ int32_t offset,
+ UErrorCode &status)
{
// Note: Not "fast" any more after the 2013 collation rewrite.
// We do not want to expose more internals than necessary.
- UErrorCode status = U_ZERO_ERROR;
ucol_setOffset(elems, offset, &status);
}
@@ -76,29 +72,10 @@ inline uint32_t getMask(UCollationStrength strength)
}
}
-/**
-* @param ce 32-bit collation element
-* @return hash code
-*/
-static
-inline int hashFromCE32(uint32_t ce)
-{
- int hc = (int)(
- ((((((ce >> 24) * 37) +
- (ce >> 16)) * 37) +
- (ce >> 8)) * 37) +
- ce);
- hc %= MAX_TABLE_SIZE_;
- if (hc < 0) {
- hc += MAX_TABLE_SIZE_;
- }
- return hc;
-}
-
U_CDECL_BEGIN
static UBool U_CALLCONV
usearch_cleanup(void) {
- g_nfcImpl = NULL;
+ g_nfcImpl = nullptr;
return TRUE;
}
U_CDECL_END
@@ -112,7 +89,7 @@ U_CDECL_END
static
inline void initializeFCD(UErrorCode *status)
{
- if (g_nfcImpl == NULL) {
+ if (g_nfcImpl == nullptr) {
g_nfcImpl = Normalizer2Factory::getNFCImpl(*status);
ucln_i18n_registerCleanup(UCLN_I18N_USEARCH, usearch_cleanup);
}
@@ -175,18 +152,18 @@ inline int32_t getCE(const UStringSearch *strsrch, uint32_t sourcece)
}
/**
-* Allocate a memory and returns NULL if it failed.
+* Allocate a memory and returns nullptr if it failed.
* Internal method, status assumed to be a success.
* @param size to allocate
* @param status output error if any, caller to check status before calling
* method, status assumed to be success when passed in.
-* @return newly allocated array, NULL otherwise
+* @return newly allocated array, nullptr otherwise
*/
static
inline void * allocateMemory(uint32_t size, UErrorCode *status)
{
uint32_t *result = (uint32_t *)uprv_malloc(size);
- if (result == NULL) {
+ if (result == nullptr) {
*status = U_MEMORY_ALLOCATION_ERROR;
}
return result;
@@ -197,7 +174,7 @@ inline void * allocateMemory(uint32_t size, UErrorCode *status)
* Creates a new array if we run out of space. The caller will have to
* manually deallocate the newly allocated array.
* Internal method, status assumed to be success, caller has to check status
-* before calling this method. destination not to be NULL and has at least
+* before calling this method. destination not to be nullptr and has at least
* size destinationlength.
* @param destination target array
* @param offset destination offset to add value
@@ -222,7 +199,7 @@ inline int32_t * addTouint32_tArray(int32_t *destination,
int32_t *temp = (int32_t *)allocateMemory(
sizeof(int32_t) * newlength, status);
if (U_FAILURE(*status)) {
- return NULL;
+ return nullptr;
}
uprv_memcpy(temp, destination, sizeof(int32_t) * (size_t)offset);
*destinationlength = newlength;
@@ -237,7 +214,7 @@ inline int32_t * addTouint32_tArray(int32_t *destination,
* Creates a new array if we run out of space. The caller will have to
* manually deallocate the newly allocated array.
* Internal method, status assumed to be success, caller has to check status
-* before calling this method. destination not to be NULL and has at least
+* before calling this method. destination not to be nullptr and has at least
* size destinationlength.
* @param destination target array
* @param offset destination offset to add value
@@ -263,7 +240,7 @@ inline int64_t * addTouint64_tArray(int64_t *destination,
sizeof(int64_t) * newlength, status);
if (U_FAILURE(*status)) {
- return NULL;
+ return nullptr;
}
uprv_memcpy(temp, destination, sizeof(int64_t) * (size_t)offset);
@@ -286,11 +263,9 @@ inline int64_t * addTouint64_tArray(int64_t *destination,
* @param strsrch string search data
* @param status output error if any, caller to check status before calling
* method, status assumed to be success when passed in.
-* @return total number of expansions
*/
static
-inline uint16_t initializePatternCETable(UStringSearch *strsrch,
- UErrorCode *status)
+inline void initializePatternCETable(UStringSearch *strsrch, UErrorCode *status)
{
UPattern *pattern = &(strsrch->pattern);
uint32_t cetablesize = INITIAL_ARRAY_SIZE_;
@@ -298,7 +273,7 @@ inline uint16_t initializePatternCETable(UStringSearch *strsrch,
uint32_t patternlength = pattern->textLength;
UCollationElements *coleiter = strsrch->utilIter;
- if (coleiter == NULL) {
+ if (coleiter == nullptr) {
coleiter = ucol_openElements(strsrch->collator, pattern->text,
patternlength, status);
// status will be checked in ucol_next(..) later and if it is an
@@ -310,7 +285,7 @@ inline uint16_t initializePatternCETable(UStringSearch *strsrch,
ucol_setText(coleiter, pattern->text, pattern->textLength, status);
}
if(U_FAILURE(*status)) {
- return 0;
+ return;
}
if (pattern->ces != cetable && pattern->ces) {
@@ -318,7 +293,6 @@ inline uint16_t initializePatternCETable(UStringSearch *strsrch,
}
uint32_t offset = 0;
- uint16_t result = 0;
int32_t ce;
while ((ce = ucol_next(coleiter, status)) != UCOL_NULLORDER &&
@@ -330,7 +304,7 @@ inline uint16_t initializePatternCETable(UStringSearch *strsrch,
patternlength - ucol_getOffset(coleiter) + 1,
status);
if (U_FAILURE(*status)) {
- return 0;
+ return;
}
offset ++;
if (cetable != temp && cetable != pattern->cesBuffer) {
@@ -338,14 +312,11 @@ inline uint16_t initializePatternCETable(UStringSearch *strsrch,
}
cetable = temp;
}
- result += (uint16_t)(ucol_getMaxExpansion(coleiter, ce) - 1);
}
cetable[offset] = 0;
pattern->ces = cetable;
pattern->cesLength = offset;
-
- return result;
}
/**
@@ -358,11 +329,10 @@ inline uint16_t initializePatternCETable(UStringSearch *strsrch,
* @param strsrch string search data
* @param status output error if any, caller to check status before calling
* method, status assumed to be success when passed in.
-* @return total number of expansions
*/
static
-inline uint16_t initializePatternPCETable(UStringSearch *strsrch,
- UErrorCode *status)
+inline void initializePatternPCETable(UStringSearch *strsrch,
+ UErrorCode *status)
{
UPattern *pattern = &(strsrch->pattern);
uint32_t pcetablesize = INITIAL_ARRAY_SIZE_;
@@ -370,26 +340,25 @@ inline uint16_t initializePatternPCETable(UStringSearch *strsrch,
uint32_t patternlength = pattern->textLength;
UCollationElements *coleiter = strsrch->utilIter;
- if (coleiter == NULL) {
+ if (coleiter == nullptr) {
coleiter = ucol_openElements(strsrch->collator, pattern->text,
patternlength, status);
- // status will be checked in ucol_next(..) later and if it is an
- // error UCOL_NULLORDER the result of ucol_next(..) and 0 will be
+ // status will be checked in nextProcessed(..) later and if it is an error
+ // then UCOL_PROCESSED_NULLORDER is returned by nextProcessed(..), so 0 will be
// returned.
strsrch->utilIter = coleiter;
} else {
ucol_setText(coleiter, pattern->text, pattern->textLength, status);
}
if(U_FAILURE(*status)) {
- return 0;
+ return;
}
- if (pattern->pces != pcetable && pattern->pces != NULL) {
+ if (pattern->pces != pcetable && pattern->pces != nullptr) {
uprv_free(pattern->pces);
}
uint32_t offset = 0;
- uint16_t result = 0;
int64_t pce;
icu::UCollationPCE iter(coleiter);
@@ -397,7 +366,7 @@ inline uint16_t initializePatternPCETable(UStringSearch *strsrch,
// ** Should processed CEs be signed or unsigned?
// ** (the rest of the code in this file seems to play fast-and-loose with
// ** whether a CE is signed or unsigned. For example, look at routine above this one.)
- while ((pce = iter.nextProcessed(NULL, NULL, status)) != UCOL_PROCESSED_NULLORDER &&
+ while ((pce = iter.nextProcessed(nullptr, nullptr, status)) != UCOL_PROCESSED_NULLORDER &&
U_SUCCESS(*status)) {
int64_t *temp = addTouint64_tArray(pcetable, offset, &pcetablesize,
pce,
@@ -405,7 +374,7 @@ inline uint16_t initializePatternPCETable(UStringSearch *strsrch,
status);
if (U_FAILURE(*status)) {
- return 0;
+ return;
}
offset += 1;
@@ -415,28 +384,24 @@ inline uint16_t initializePatternPCETable(UStringSearch *strsrch,
}
pcetable = temp;
- //result += (uint16_t)(ucol_getMaxExpansion(coleiter, ce) - 1);
}
pcetable[offset] = 0;
pattern->pces = pcetable;
pattern->pcesLength = offset;
-
- return result;
}
/**
* Initializes the pattern struct.
-* Internal method, status assumed to be success.
* @param strsrch UStringSearch data storage
* @param status output error if any, caller to check status before calling
* method, status assumed to be success when passed in.
-* @return expansionsize the total expansion size of the pattern
*/
static
-inline int16_t initializePattern(UStringSearch *strsrch, UErrorCode *status)
+inline void initializePattern(UStringSearch *strsrch, UErrorCode *status)
{
- if (U_FAILURE(*status)) { return 0; }
+ if (U_FAILURE(*status)) { return; }
+
UPattern *pattern = &(strsrch->pattern);
const UChar *patterntext = pattern->text;
int32_t length = pattern->textLength;
@@ -456,90 +421,19 @@ inline int16_t initializePattern(UStringSearch *strsrch, UErrorCode *status)
}
// ** HACK **
- if (strsrch->pattern.pces != NULL) {
+ if (strsrch->pattern.pces != nullptr) {
if (strsrch->pattern.pces != strsrch->pattern.pcesBuffer) {
uprv_free(strsrch->pattern.pces);
}
- strsrch->pattern.pces = NULL;
- }
-
- // since intializePattern is an internal method status is a success.
- return initializePatternCETable(strsrch, status);
-}
-
-/**
-* Initializing shift tables, with the default values.
-* If a corresponding default value is 0, the shift table is not set.
-* @param shift table for forwards shift
-* @param backshift table for backwards shift
-* @param cetable table containing pattern ce
-* @param cesize size of the pattern ces
-* @param expansionsize total size of the expansions
-* @param defaultforward the default forward value
-* @param defaultbackward the default backward value
-*/
-static
-inline void setShiftTable(int16_t shift[], int16_t backshift[],
- int32_t *cetable, int32_t cesize,
- int16_t expansionsize,
- int16_t defaultforward,
- int16_t defaultbackward)
-{
- // estimate the value to shift. to do that we estimate the smallest
- // number of characters to give the relevant ces, ie approximately
- // the number of ces minus their expansion, since expansions can come
- // from a character.
- int32_t count;
- for (count = 0; count < MAX_TABLE_SIZE_; count ++) {
- shift[count] = defaultforward;
- }
- cesize --; // down to the last index
- for (count = 0; count < cesize; count ++) {
- // number of ces from right of array to the count
- int temp = defaultforward - count - 1;
- shift[hashFromCE32(cetable[count])] = temp > 1 ? static_cast<int16_t>(temp) : 1;
+ strsrch->pattern.pces = nullptr;
}
- shift[hashFromCE32(cetable[cesize])] = 1;
- // for ignorables we just shift by one. see test examples.
- shift[hashFromCE32(0)] = 1;
- for (count = 0; count < MAX_TABLE_SIZE_; count ++) {
- backshift[count] = defaultbackward;
- }
- for (count = cesize; count > 0; count --) {
- // the original value count does not seem to work
- backshift[hashFromCE32(cetable[count])] = count > expansionsize ?
- (int16_t)(count - expansionsize) : 1;
- }
- backshift[hashFromCE32(cetable[0])] = 1;
- backshift[hashFromCE32(0)] = 1;
+ initializePatternCETable(strsrch, status);
}
/**
-* Building of the pattern collation element list and the boyer moore strsrch
-* table.
-* The canonical match will only be performed after the default match fails.
-* For both cases we need to remember the size of the composed and decomposed
-* versions of the string. Since the Boyer-Moore shift calculations shifts by
-* a number of characters in the text and tries to match the pattern from that
-* offset, the shift value can not be too large in case we miss some
-* characters. To choose a right shift size, we estimate the NFC form of the
-* and use its size as a shift guide. The NFC form should be the small
-* possible representation of the pattern. Anyways, we'll err on the smaller
-* shift size. Hence the calculation for minlength.
-* Canonical match will be performed slightly differently. We'll split the
-* pattern into 3 parts, the prefix accents (PA), the middle string bounded by
-* the first and last base character (MS), the ending accents (EA). Matches
-* will be done on MS first, and only when we match MS then some processing
-* will be required for the prefix and end accents in order to determine if
-* they match PA and EA. Hence the default shift values
-* for the canonical match will take the size of either end's accent into
-* consideration. Forwards search will take the end accents into consideration
-* for the default shift values and the backwards search will take the prefix
-* accents into consideration.
-* If pattern has no non-ignorable ce, we return a illegal argument error.
-* Internal method, status assumed to be success.
+* Initializes the pattern struct and builds the pattern collation element table.
* @param strsrch UStringSearch data storage
* @param status for output errors if it occurs, status is assumed to be a
* success when it is passed in.
@@ -547,512 +441,64 @@ inline void setShiftTable(int16_t shift[], int16_t backshift[],
static
inline void initialize(UStringSearch *strsrch, UErrorCode *status)
{
- int16_t expandlength = initializePattern(strsrch, status);
- if (U_SUCCESS(*status) && strsrch->pattern.cesLength > 0) {
- UPattern *pattern = &strsrch->pattern;
- int32_t cesize = pattern->cesLength;
-
- int16_t minlength = cesize > expandlength
- ? (int16_t)cesize - expandlength : 1;
- pattern->defaultShiftSize = minlength;
- setShiftTable(pattern->shift, pattern->backShift, pattern->ces,
- cesize, expandlength, minlength, minlength);
- return;
- }
- strsrch->pattern.defaultShiftSize = 0;
+ initializePattern(strsrch, status);
}
-#if BOYER_MOORE
-/**
-* Check to make sure that the match length is at the end of the character by
-* using the breakiterator.
-* @param strsrch string search data
-* @param start target text start offset
-* @param end target text end offset
-*/
-static
-void checkBreakBoundary(const UStringSearch *strsrch, int32_t * /*start*/,
- int32_t *end)
-{
#if !UCONFIG_NO_BREAK_ITERATION
- UBreakIterator *breakiterator = strsrch->search->internalBreakIter;
- if (breakiterator) {
- int32_t matchend = *end;
- //int32_t matchstart = *start;
-
- if (!ubrk_isBoundary(breakiterator, matchend)) {
- *end = ubrk_following(breakiterator, matchend);
- }
-
- /* Check the start of the matched text to make sure it doesn't have any accents
- * before it. This code may not be necessary and so it is commented out */
- /*if (!ubrk_isBoundary(breakiterator, matchstart) && !ubrk_isBoundary(breakiterator, matchstart-1)) {
- *start = ubrk_preceding(breakiterator, matchstart);
- }*/
- }
-#endif
-}
-
-/**
-* Determine whether the target text in UStringSearch bounded by the offset
-* start and end is one or more whole units of text as
-* determined by the breakiterator in UStringSearch.
-* @param strsrch string search data
-* @param start target text start offset
-* @param end target text end offset
-*/
-static
-UBool isBreakUnit(const UStringSearch *strsrch, int32_t start,
- int32_t end)
+// If the caller provided a character breakiterator we'll return that,
+// otherwise we lazily create the internal break iterator.
+static UBreakIterator* getBreakIterator(UStringSearch *strsrch, UErrorCode &status)
{
-#if !UCONFIG_NO_BREAK_ITERATION
- UBreakIterator *breakiterator = strsrch->search->breakIter;
- //TODO: Add here.
- if (breakiterator) {
- int32_t startindex = ubrk_first(breakiterator);
- int32_t endindex = ubrk_last(breakiterator);
-
- // out-of-range indexes are never boundary positions
- if (start < startindex || start > endindex ||
- end < startindex || end > endindex) {
- return FALSE;
- }
- // otherwise, we can use following() on the position before the
- // specified one and return true of the position we get back is the
- // one the user specified
- UBool result = (start == startindex ||
- ubrk_following(breakiterator, start - 1) == start) &&
- (end == endindex ||
- ubrk_following(breakiterator, end - 1) == end);
- if (result) {
- // iterates the individual ces
- UCollationElements *coleiter = strsrch->utilIter;
- const UChar *text = strsrch->search->text +
- start;
- UErrorCode status = U_ZERO_ERROR;
- ucol_setText(coleiter, text, end - start, &status);
- for (int32_t count = 0; count < strsrch->pattern.cesLength;
- count ++) {
- int32_t ce = getCE(strsrch, ucol_next(coleiter, &status));
- if (ce == UCOL_IGNORABLE) {
- count --;
- continue;
- }
- if (U_FAILURE(status) || ce != strsrch->pattern.ces[count]) {
- return FALSE;
- }
- }
- int32_t nextce = ucol_next(coleiter, &status);
- while (ucol_getOffset(coleiter) == (end - start)
- && getCE(strsrch, nextce) == UCOL_IGNORABLE) {
- nextce = ucol_next(coleiter, &status);
- }
- if (ucol_getOffset(coleiter) == (end - start)
- && nextce != UCOL_NULLORDER) {
- // extra collation elements at the end of the match
- return FALSE;
- }
- }
- return result;
+ if (U_FAILURE(status)) {
+ return nullptr;
}
-#endif
- return TRUE;
-}
-/**
-* Getting the next base character offset if current offset is an accent,
-* or the current offset if the current character contains a base character.
-* accents the following base character will be returned
-* @param text string
-* @param textoffset current offset
-* @param textlength length of text string
-* @return the next base character or the current offset
-* if the current character is contains a base character.
-*/
-static
-inline int32_t getNextBaseOffset(const UChar *text,
- int32_t textoffset,
- int32_t textlength)
-{
- if (textoffset < textlength) {
- int32_t temp = textoffset;
- if (getFCD(text, &temp, textlength) >> SECOND_LAST_BYTE_SHIFT_) {
- while (temp < textlength) {
- int32_t result = temp;
- if ((getFCD(text, &temp, textlength) >>
- SECOND_LAST_BYTE_SHIFT_) == 0) {
- return result;
- }
- }
- return textlength;
- }
+ if (strsrch->search->breakIter != nullptr) {
+ return strsrch->search->breakIter;
}
- return textoffset;
-}
-/**
-* Gets the next base character offset depending on the string search pattern
-* data
-* @param strsrch string search data
-* @param textoffset current offset, one offset away from the last character
-* to search for.
-* @return start index of the next base character or the current offset
-* if the current character is contains a base character.
-*/
-static
-inline int32_t getNextUStringSearchBaseOffset(UStringSearch *strsrch,
- int32_t textoffset)
-{
- int32_t textlength = strsrch->search->textLength;
- if (strsrch->pattern.hasSuffixAccents &&
- textoffset < textlength) {
- int32_t temp = textoffset;
- const UChar *text = strsrch->search->text;
- U16_BACK_1(text, 0, temp);
- if (getFCD(text, &temp, textlength) & LAST_BYTE_MASK_) {
- return getNextBaseOffset(text, textoffset, textlength);
- }
+ if (strsrch->search->internalBreakIter != nullptr) {
+ return strsrch->search->internalBreakIter;
}
- return textoffset;
-}
-/**
-* Shifting the collation element iterator position forward to prepare for
-* a following match. If the last character is a unsafe character, we'll only
-* shift by 1 to capture contractions, normalization etc.
-* Internal method, status assumed to be success.
-* @param text strsrch string search data
-* @param textoffset start text position to do search
-* @param ce the text ce which failed the match.
-* @param patternceindex index of the ce within the pattern ce buffer which
-* failed the match
-* @return final offset
-*/
-static
-inline int32_t shiftForward(UStringSearch *strsrch,
- int32_t textoffset,
- int32_t ce,
- int32_t patternceindex)
-{
- UPattern *pattern = &(strsrch->pattern);
- if (ce != UCOL_NULLORDER) {
- int32_t shift = pattern->shift[hashFromCE32(ce)];
- // this is to adjust for characters in the middle of the
- // substring for matching that failed.
- int32_t adjust = pattern->cesLength - patternceindex;
- if (adjust > 1 && shift >= adjust) {
- shift -= adjust - 1;
- }
- textoffset += shift;
- }
- else {
- textoffset += pattern->defaultShiftSize;
- }
+ // Need to create the internal break iterator.
+ strsrch->search->internalBreakIter = ubrk_open(UBRK_CHARACTER,
+ ucol_getLocaleByType(strsrch->collator, ULOC_VALID_LOCALE, &status),
+ strsrch->search->text, strsrch->search->textLength, &status);
- textoffset = getNextUStringSearchBaseOffset(strsrch, textoffset);
- // check for unsafe characters
- // * if it is the start or middle of a contraction: to be done after
- // a initial match is found
- // * thai or lao base consonant character: similar to contraction
- // * high surrogate character: similar to contraction
- // * next character is a accent: shift to the next base character
- return textoffset;
+ return strsrch->search->internalBreakIter;
}
-#endif // #if BOYER_MOORE
+#endif
/**
-* sets match not found
+* Sets the match result to "not found", regardless of the incoming error status.
+* If an error occurs while setting the result, it is reported back.
+*
* @param strsrch string search data
+* @param status for output errors, if they occur.
*/
static
-inline void setMatchNotFound(UStringSearch *strsrch)
+inline void setMatchNotFound(UStringSearch *strsrch, UErrorCode &status)
{
- // this method resets the match result regardless of the error status.
+ UErrorCode localStatus = U_ZERO_ERROR;
+
strsrch->search->matchedIndex = USEARCH_DONE;
strsrch->search->matchedLength = 0;
if (strsrch->search->isForwardSearching) {
- setColEIterOffset(strsrch->textIter, strsrch->search->textLength);
+ setColEIterOffset(strsrch->textIter, strsrch->search->textLength, localStatus);
}
else {
- setColEIterOffset(strsrch->textIter, 0);
- }
-}
-
-#if BOYER_MOORE
-/**
-* Gets the offset to the next safe point in text.
-* ie. not the middle of a contraction, swappable characters or supplementary
-* characters.
-* @param collator collation sata
-* @param text string to work with
-* @param textoffset offset in string
-* @param textlength length of text string
-* @return offset to the next safe character
-*/
-static
-inline int32_t getNextSafeOffset(const UCollator *collator,
- const UChar *text,
- int32_t textoffset,
- int32_t textlength)
-{
- int32_t result = textoffset; // first contraction character
- while (result != textlength && ucol_unsafeCP(text[result], collator)) {
- result ++;
- }
- return result;
-}
-
-/**
-* This checks for accents in the potential match started with a .
-* composite character.
-* This is really painful... we have to check that composite character do not
-* have any extra accents. We have to normalize the potential match and find
-* the immediate decomposed character before the match.
-* The first composite character would have been taken care of by the fcd
-* checks in checkForwardExactMatch.
-* This is the slow path after the fcd of the first character and
-* the last character has been checked by checkForwardExactMatch and we
-* determine that the potential match has extra non-ignorable preceding
-* ces.
-* E.g. looking for \u0301 acute in \u01FA A ring above and acute,
-* checkExtraMatchAccent should fail since there is a middle ring in \u01FA
-* Note here that accents checking are slow and cautioned in the API docs.
-* Internal method, status assumed to be a success, caller should check status
-* before calling this method
-* @param strsrch string search data
-* @param start index of the potential unfriendly composite character
-* @param end index of the potential unfriendly composite character
-* @param status output error status if any.
-* @return TRUE if there is non-ignorable accents before at the beginning
-* of the match, FALSE otherwise.
-*/
-
-static
-UBool checkExtraMatchAccents(const UStringSearch *strsrch, int32_t start,
- int32_t end,
- UErrorCode *status)
-{
- UBool result = FALSE;
- if (strsrch->pattern.hasPrefixAccents) {
- int32_t length = end - start;
- int32_t offset = 0;
- const UChar *text = strsrch->search->text + start;
-
- U16_FWD_1(text, offset, length);
- // we are only concerned with the first composite character
- if (unorm_quickCheck(text, offset, UNORM_NFD, status) == UNORM_NO) {
- int32_t safeoffset = getNextSafeOffset(strsrch->collator,
- text, 0, length);
- if (safeoffset != length) {
- safeoffset ++;
- }
- UChar *norm = NULL;
- UChar buffer[INITIAL_ARRAY_SIZE_];
- int32_t size = unorm_normalize(text, safeoffset, UNORM_NFD, 0,
- buffer, INITIAL_ARRAY_SIZE_,
- status);
- if (U_FAILURE(*status)) {
- return FALSE;
- }
- if (size >= INITIAL_ARRAY_SIZE_) {
- norm = (UChar *)allocateMemory((size + 1) * sizeof(UChar),
- status);
- // if allocation failed, status will be set to
- // U_MEMORY_ALLOCATION_ERROR and unorm_normalize internally
- // checks for it.
- size = unorm_normalize(text, safeoffset, UNORM_NFD, 0, norm,
- size, status);
- if (U_FAILURE(*status) && norm != NULL) {
- uprv_free(norm);
- return FALSE;
- }
- }
- else {
- norm = buffer;
- }
-
- UCollationElements *coleiter = strsrch->utilIter;
- ucol_setText(coleiter, norm, size, status);
- uint32_t firstce = strsrch->pattern.ces[0];
- UBool ignorable = TRUE;
- uint32_t ce = UCOL_IGNORABLE;
- while (U_SUCCESS(*status) && ce != firstce && ce != (uint32_t)UCOL_NULLORDER) {
- offset = ucol_getOffset(coleiter);
- if (ce != firstce && ce != UCOL_IGNORABLE) {
- ignorable = FALSE;
- }
- ce = ucol_next(coleiter, status);
- }
- UChar32 codepoint;
- U16_PREV(norm, 0, offset, codepoint);
- result = !ignorable && (u_getCombiningClass(codepoint) != 0);
-
- if (norm != buffer) {
- uprv_free(norm);
- }
- }
+ setColEIterOffset(strsrch->textIter, 0, localStatus);
}
- return result;
-}
-
-/**
-* Used by exact matches, checks if there are accents before the match.
-* This is really painful... we have to check that composite characters at
-* the start of the matches have to not have any extra accents.
-* We check the FCD of the character first, if it starts with an accent and
-* the first pattern ce does not match the first ce of the character, we bail.
-* Otherwise we try normalizing the first composite
-* character and find the immediate decomposed character before the match to
-* see if it is an non-ignorable accent.
-* Now normalizing the first composite character is enough because we ensure
-* that when the match is passed in here with extra beginning ces, the
-* first or last ce that match has to occur within the first character.
-* E.g. looking for \u0301 acute in \u01FA A ring above and acute,
-* checkExtraMatchAccent should fail since there is a middle ring in \u01FA
-* Note here that accents checking are slow and cautioned in the API docs.
-* @param strsrch string search data
-* @param start offset
-* @param end offset
-* @return TRUE if there are accents on either side of the match,
-* FALSE otherwise
-*/
-static
-UBool hasAccentsBeforeMatch(const UStringSearch *strsrch, int32_t start,
- int32_t end)
-{
- if (strsrch->pattern.hasPrefixAccents) {
- UCollationElements *coleiter = strsrch->textIter;
- UErrorCode status = U_ZERO_ERROR;
- // we have been iterating forwards previously
- uint32_t ignorable = TRUE;
- int32_t firstce = strsrch->pattern.ces[0];
-
- setColEIterOffset(coleiter, start);
- int32_t ce = getCE(strsrch, ucol_next(coleiter, &status));
- if (U_FAILURE(status)) {
- return TRUE;
- }
- while (ce != firstce) {
- if (ce != UCOL_IGNORABLE) {
- ignorable = FALSE;
- }
- ce = getCE(strsrch, ucol_next(coleiter, &status));
- if (U_FAILURE(status) || ce == UCOL_NULLORDER) {
- return TRUE;
- }
- }
- if (!ignorable && inNormBuf(coleiter)) {
- // within normalization buffer, discontiguous handled here
- return TRUE;
- }
-
- // within text
- int32_t temp = start;
- // original code
- // accent = (getFCD(strsrch->search->text, &temp,
- // strsrch->search->textLength)
- // >> SECOND_LAST_BYTE_SHIFT_);
- // however this code does not work well with VC7 .net in release mode.
- // maybe the inlines for getFCD combined with shifting has bugs in
- // VC7. anyways this is a work around.
- UBool accent = getFCD(strsrch->search->text, &temp,
- strsrch->search->textLength) > 0xFF;
- if (!accent) {
- return checkExtraMatchAccents(strsrch, start, end, &status);
- }
- if (!ignorable) {
- return TRUE;
- }
- if (start > 0) {
- temp = start;
- U16_BACK_1(strsrch->search->text, 0, temp);
- if (getFCD(strsrch->search->text, &temp,
- strsrch->search->textLength) & LAST_BYTE_MASK_) {
- setColEIterOffset(coleiter, start);
- ce = ucol_previous(coleiter, &status);
- if (U_FAILURE(status) ||
- (ce != UCOL_NULLORDER && ce != UCOL_IGNORABLE)) {
- return TRUE;
- }
- }
- }
+ // If an error occurred while setting the result to not found (ex: OOM),
+ // then we want to report that error back to the caller.
+ if (U_SUCCESS(status) && U_FAILURE(localStatus)) {
+ status = localStatus;
}
-
- return FALSE;
}
/**
-* Used by exact matches, checks if there are accents bounding the match.
-* Note this is the initial boundary check. If the potential match
-* starts or ends with composite characters, the accents in those
-* characters will be determined later.
-* Not doing backwards iteration here, since discontiguos contraction for
-* backwards collation element iterator, use up too many characters.
-* E.g. looking for \u030A ring in \u01FA A ring above and acute,
-* should fail since there is a acute at the end of \u01FA
-* Note here that accents checking are slow and cautioned in the API docs.
-* @param strsrch string search data
-* @param start offset of match
-* @param end end offset of the match
-* @return TRUE if there are accents on either side of the match,
-* FALSE otherwise
-*/
-static
-UBool hasAccentsAfterMatch(const UStringSearch *strsrch, int32_t start,
- int32_t end)
-{
- if (strsrch->pattern.hasSuffixAccents) {
- const UChar *text = strsrch->search->text;
- int32_t temp = end;
- int32_t textlength = strsrch->search->textLength;
- U16_BACK_1(text, 0, temp);
- if (getFCD(text, &temp, textlength) & LAST_BYTE_MASK_) {
- int32_t firstce = strsrch->pattern.ces[0];
- UCollationElements *coleiter = strsrch->textIter;
- UErrorCode status = U_ZERO_ERROR;
- int32_t ce;
- setColEIterOffset(coleiter, start);
- while ((ce = getCE(strsrch, ucol_next(coleiter, &status))) != firstce) {
- if (U_FAILURE(status) || ce == UCOL_NULLORDER) {
- return TRUE;
- }
- }
- int32_t count = 1;
- while (count < strsrch->pattern.cesLength) {
- if (getCE(strsrch, ucol_next(coleiter, &status))
- == UCOL_IGNORABLE) {
- // Thai can give an ignorable here.
- count --;
- }
- if (U_FAILURE(status)) {
- return TRUE;
- }
- count ++;
- }
-
- ce = ucol_next(coleiter, &status);
- if (U_FAILURE(status)) {
- return TRUE;
- }
- if (ce != UCOL_NULLORDER && ce != UCOL_IGNORABLE) {
- ce = getCE(strsrch, ce);
- }
- if (ce != UCOL_NULLORDER && ce != UCOL_IGNORABLE) {
- if (ucol_getOffset(coleiter) <= end) {
- return TRUE;
- }
- if (getFCD(text, &end, textlength) >> SECOND_LAST_BYTE_SHIFT_) {
- return TRUE;
- }
- }
- }
- }
- return FALSE;
-}
-#endif // #if BOYER_MOORE
-
-/**
* Checks if the offset runs out of the text string
* @param offset
* @param textlength of the text string
@@ -1072,8 +518,7 @@ inline UBool isOutOfBounds(int32_t textlength, int32_t offset)
* @return TRUE if identical match is found
*/
static
-inline UBool checkIdentical(const UStringSearch *strsrch, int32_t start,
- int32_t end)
+inline UBool checkIdentical(const UStringSearch *strsrch, int32_t start, int32_t end)
{
if (strsrch->strength != UCOL_IDENTICAL) {
return TRUE;
@@ -1091,1503 +536,6 @@ inline UBool checkIdentical(const UStringSearch *strsrch, int32_t start,
return U_SUCCESS(status) && t2 == p2;
}
-#if BOYER_MOORE
-/**
-* Checks to see if the match is repeated
-* @param strsrch string search data
-* @param start new match start index
-* @param end new match end index
-* @return TRUE if the the match is repeated, FALSE otherwise
-*/
-static
-inline UBool checkRepeatedMatch(UStringSearch *strsrch,
- int32_t start,
- int32_t end)
-{
- int32_t lastmatchindex = strsrch->search->matchedIndex;
- UBool result;
- if (lastmatchindex == USEARCH_DONE) {
- return FALSE;
- }
- if (strsrch->search->isForwardSearching) {
- result = start <= lastmatchindex;
- }
- else {
- result = start >= lastmatchindex;
- }
- if (!result && !strsrch->search->isOverlap) {
- if (strsrch->search->isForwardSearching) {
- result = start < lastmatchindex + strsrch->search->matchedLength;
- }
- else {
- result = end > lastmatchindex;
- }
- }
- return result;
-}
-
-/**
-* Gets the collation element iterator's current offset.
-* @param coleiter collation element iterator
-* @param forwards flag TRUE if we are moving in th forwards direction
-* @return current offset
-*/
-static
-inline int32_t getColElemIterOffset(const UCollationElements *coleiter,
- UBool forwards)
-{
- int32_t result = ucol_getOffset(coleiter);
- // intricacies of the the backwards collation element iterator
- if (FALSE && !forwards && inNormBuf(coleiter) && !isFCDPointerNull(coleiter)) {
- result ++;
- }
- return result;
-}
-
-/**
-* Checks match for contraction.
-* If the match ends with a partial contraction we fail.
-* If the match starts too far off (because of backwards iteration) we try to
-* chip off the extra characters depending on whether a breakiterator has
-* been used.
-* Internal method, error assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param start offset of potential match, to be modified if necessary
-* @param end offset of potential match, to be modified if necessary
-* @param status output error status if any
-* @return TRUE if match passes the contraction test, FALSE otherwise
-*/
-
-static
-UBool checkNextExactContractionMatch(UStringSearch *strsrch,
- int32_t *start,
- int32_t *end, UErrorCode *status)
-{
- UCollationElements *coleiter = strsrch->textIter;
- int32_t textlength = strsrch->search->textLength;
- int32_t temp = *start;
- const UCollator *collator = strsrch->collator;
- const UChar *text = strsrch->search->text;
- // This part checks if either ends of the match contains potential
- // contraction. If so we'll have to iterate through them
- // The start contraction needs to be checked since ucol_previous dumps
- // all characters till the first safe character into the buffer.
- // *start + 1 is used to test for the unsafe characters instead of *start
- // because ucol_prev takes all unsafe characters till the first safe
- // character ie *start. so by testing *start + 1, we can estimate if
- // excess prefix characters has been included in the potential search
- // results.
- if ((*end < textlength && ucol_unsafeCP(text[*end], collator)) ||
- (*start + 1 < textlength
- && ucol_unsafeCP(text[*start + 1], collator))) {
- int32_t expansion = getExpansionPrefix(coleiter);
- UBool expandflag = expansion > 0;
- setColEIterOffset(coleiter, *start);
- while (expansion > 0) {
- // getting rid of the redundant ce, caused by setOffset.
- // since backward contraction/expansion may have extra ces if we
- // are in the normalization buffer, hasAccentsBeforeMatch would
- // have taken care of it.
- // E.g. the character \u01FA will have an expansion of 3, but if
- // we are only looking for acute and ring \u030A and \u0301, we'll
- // have to skip the first ce in the expansion buffer.
- ucol_next(coleiter, status);
- if (U_FAILURE(*status)) {
- return FALSE;
- }
- if (ucol_getOffset(coleiter) != temp) {
- *start = temp;
- temp = ucol_getOffset(coleiter);
- }
- expansion --;
- }
-
- int32_t *patternce = strsrch->pattern.ces;
- int32_t patterncelength = strsrch->pattern.cesLength;
- int32_t count = 0;
- while (count < patterncelength) {
- int32_t ce = getCE(strsrch, ucol_next(coleiter, status));
- if (ce == UCOL_IGNORABLE) {
- continue;
- }
- if (expandflag && count == 0 && ucol_getOffset(coleiter) != temp) {
- *start = temp;
- temp = ucol_getOffset(coleiter);
- }
- if (U_FAILURE(*status) || ce != patternce[count]) {
- (*end) ++;
- *end = getNextUStringSearchBaseOffset(strsrch, *end);
- return FALSE;
- }
- count ++;
- }
- }
- return TRUE;
-}
-
-/**
-* Checks and sets the match information if found.
-* Checks
-* <ul>
-* <li> the potential match does not repeat the previous match
-* <li> boundaries are correct
-* <li> exact matches has no extra accents
-* <li> identical matchesb
-* <li> potential match does not end in the middle of a contraction
-* <\ul>
-* Otherwise the offset will be shifted to the next character.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param textoffset offset in the collation element text. the returned value
-* will be the truncated end offset of the match or the new start
-* search offset.
-* @param status output error status if any
-* @return TRUE if the match is valid, FALSE otherwise
-*/
-static
-inline UBool checkNextExactMatch(UStringSearch *strsrch,
- int32_t *textoffset, UErrorCode *status)
-{
- UCollationElements *coleiter = strsrch->textIter;
- int32_t start = getColElemIterOffset(coleiter, FALSE);
-
- if (!checkNextExactContractionMatch(strsrch, &start, textoffset, status)) {
- return FALSE;
- }
-
- // this totally matches, however we need to check if it is repeating
- if (!isBreakUnit(strsrch, start, *textoffset) ||
- checkRepeatedMatch(strsrch, start, *textoffset) ||
- hasAccentsBeforeMatch(strsrch, start, *textoffset) ||
- !checkIdentical(strsrch, start, *textoffset) ||
- hasAccentsAfterMatch(strsrch, start, *textoffset)) {
-
- (*textoffset) ++;
- *textoffset = getNextUStringSearchBaseOffset(strsrch, *textoffset);
- return FALSE;
- }
-
- //Add breakiterator boundary check for primary strength search.
- if (!strsrch->search->breakIter && strsrch->strength == UCOL_PRIMARY) {
- checkBreakBoundary(strsrch, &start, textoffset);
- }
-
- // totally match, we will get rid of the ending ignorables.
- strsrch->search->matchedIndex = start;
- strsrch->search->matchedLength = *textoffset - start;
- return TRUE;
-}
-
-/**
-* Getting the previous base character offset, or the current offset if the
-* current character is a base character
-* @param text string
-* @param textoffset one offset after the current character
-* @return the offset of the next character after the base character or the first
-* composed character with accents
-*/
-static
-inline int32_t getPreviousBaseOffset(const UChar *text,
- int32_t textoffset)
-{
- if (textoffset > 0) {
- for (;;) {
- int32_t result = textoffset;
- U16_BACK_1(text, 0, textoffset);
- int32_t temp = textoffset;
- uint16_t fcd = getFCD(text, &temp, result);
- if ((fcd >> SECOND_LAST_BYTE_SHIFT_) == 0) {
- if (fcd & LAST_BYTE_MASK_) {
- return textoffset;
- }
- return result;
- }
- if (textoffset == 0) {
- return 0;
- }
- }
- }
- return textoffset;
-}
-
-/**
-* Getting the indexes of the accents that are not blocked in the argument
-* accent array
-* @param accents array of accents in nfd terminated by a 0.
-* @param accentsindex array of indexes of the accents that are not blocked
-*/
-static
-inline int getUnblockedAccentIndex(UChar *accents, int32_t *accentsindex)
-{
- int32_t index = 0;
- int32_t length = u_strlen(accents);
- UChar32 codepoint = 0;
- int cclass = 0;
- int result = 0;
- int32_t temp;
- while (index < length) {
- temp = index;
- U16_NEXT(accents, index, length, codepoint);
- if (u_getCombiningClass(codepoint) != cclass) {
- cclass = u_getCombiningClass(codepoint);
- accentsindex[result] = temp;
- result ++;
- }
- }
- accentsindex[result] = length;
- return result;
-}
-
-/**
-* Appends 3 UChar arrays to a destination array.
-* Creates a new array if we run out of space. The caller will have to
-* manually deallocate the newly allocated array.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method. destination not to be NULL and has at least
-* size destinationlength.
-* @param destination target array
-* @param destinationlength target array size, returning the appended length
-* @param source1 null-terminated first array
-* @param source2 second array
-* @param source2length length of second array
-* @param source3 null-terminated third array
-* @param status error status if any
-* @return new destination array, destination if there was no new allocation
-*/
-static
-inline UChar * addToUCharArray( UChar *destination,
- int32_t *destinationlength,
- const UChar *source1,
- const UChar *source2,
- int32_t source2length,
- const UChar *source3,
- UErrorCode *status)
-{
- int32_t source1length = source1 ? u_strlen(source1) : 0;
- int32_t source3length = source3 ? u_strlen(source3) : 0;
- if (*destinationlength < source1length + source2length + source3length +
- 1)
- {
- destination = (UChar *)allocateMemory(
- (source1length + source2length + source3length + 1) * sizeof(UChar),
- status);
- // if error allocating memory, status will be
- // U_MEMORY_ALLOCATION_ERROR
- if (U_FAILURE(*status)) {
- *destinationlength = 0;
- return NULL;
- }
- }
- if (source1length != 0) {
- u_memcpy(destination, source1, source1length);
- }
- if (source2length != 0) {
- uprv_memcpy(destination + source1length, source2,
- sizeof(UChar) * source2length);
- }
- if (source3length != 0) {
- uprv_memcpy(destination + source1length + source2length, source3,
- sizeof(UChar) * source3length);
- }
- *destinationlength = source1length + source2length + source3length;
- return destination;
-}
-
-/**
-* Running through a collation element iterator to see if the contents matches
-* pattern in string search data
-* @param strsrch string search data
-* @param coleiter collation element iterator
-* @return TRUE if a match if found, FALSE otherwise
-*/
-static
-inline UBool checkCollationMatch(const UStringSearch *strsrch,
- UCollationElements *coleiter)
-{
- int patternceindex = strsrch->pattern.cesLength;
- int32_t *patternce = strsrch->pattern.ces;
- UErrorCode status = U_ZERO_ERROR;
- while (patternceindex > 0) {
- int32_t ce = getCE(strsrch, ucol_next(coleiter, &status));
- if (ce == UCOL_IGNORABLE) {
- continue;
- }
- if (U_FAILURE(status) || ce != *patternce) {
- return FALSE;
- }
- patternce ++;
- patternceindex --;
- }
- return TRUE;
-}
-
-/**
-* Rearranges the front accents to try matching.
-* Prefix accents in the text will be grouped according to their combining
-* class and the groups will be mixed and matched to try find the perfect
-* match with the pattern.
-* So for instance looking for "\u0301" in "\u030A\u0301\u0325"
-* step 1: split "\u030A\u0301" into 6 other type of potential accent substrings
-* "\u030A", "\u0301", "\u0325", "\u030A\u0301", "\u030A\u0325",
-* "\u0301\u0325".
-* step 2: check if any of the generated substrings matches the pattern.
-* Internal method, status is assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search match
-* @param start first offset of the accents to start searching
-* @param end start of the last accent set
-* @param status output error status if any
-* @return USEARCH_DONE if a match is not found, otherwise return the starting
-* offset of the match. Note this start includes all preceding accents.
-*/
-static
-int32_t doNextCanonicalPrefixMatch(UStringSearch *strsrch,
- int32_t start,
- int32_t end,
- UErrorCode *status)
-{
- const UChar *text = strsrch->search->text;
- int32_t textlength = strsrch->search->textLength;
- int32_t tempstart = start;
-
- if ((getFCD(text, &tempstart, textlength) & LAST_BYTE_MASK_) == 0) {
- // die... failed at a base character
- return USEARCH_DONE;
- }
-
- int32_t offset = getNextBaseOffset(text, tempstart, textlength);
- start = getPreviousBaseOffset(text, tempstart);
-
- UChar accents[INITIAL_ARRAY_SIZE_];
- // normalizing the offensive string
- unorm_normalize(text + start, offset - start, UNORM_NFD, 0, accents,
- INITIAL_ARRAY_SIZE_, status);
- if (U_FAILURE(*status)) {
- return USEARCH_DONE;
- }
-
- int32_t accentsindex[INITIAL_ARRAY_SIZE_];
- int32_t accentsize = getUnblockedAccentIndex(accents,
- accentsindex);
- int32_t count = (2 << (accentsize - 1)) - 1;
- UChar buffer[INITIAL_ARRAY_SIZE_];
- UCollationElements *coleiter = strsrch->utilIter;
- while (U_SUCCESS(*status) && count > 0) {
- UChar *rearrange = strsrch->canonicalPrefixAccents;
- // copy the base characters
- for (int k = 0; k < accentsindex[0]; k ++) {
- *rearrange ++ = accents[k];
- }
- // forming all possible canonical rearrangement by dropping
- // sets of accents
- for (int i = 0; i <= accentsize - 1; i ++) {
- int32_t mask = 1 << (accentsize - i - 1);
- if (count & mask) {
- for (int j = accentsindex[i]; j < accentsindex[i + 1]; j ++) {
- *rearrange ++ = accents[j];
- }
- }
- }
- *rearrange = 0;
- int32_t matchsize = INITIAL_ARRAY_SIZE_;
- UChar *match = addToUCharArray(buffer, &matchsize,
- strsrch->canonicalPrefixAccents,
- strsrch->search->text + offset,
- end - offset,
- strsrch->canonicalSuffixAccents,
- status);
-
- // if status is a failure, ucol_setText does nothing.
- // run the collator iterator through this match
- ucol_setText(coleiter, match, matchsize, status);
- if (U_SUCCESS(*status)) {
- if (checkCollationMatch(strsrch, coleiter)) {
- if (match != buffer) {
- uprv_free(match);
- }
- return start;
- }
- }
- count --;
- }
- return USEARCH_DONE;
-}
-
-/**
-* Gets the offset to the safe point in text before textoffset.
-* ie. not the middle of a contraction, swappable characters or supplementary
-* characters.
-* @param collator collation sata
-* @param text string to work with
-* @param textoffset offset in string
-* @param textlength length of text string
-* @return offset to the previous safe character
-*/
-static
-inline uint32_t getPreviousSafeOffset(const UCollator *collator,
- const UChar *text,
- int32_t textoffset)
-{
- int32_t result = textoffset; // first contraction character
- while (result != 0 && ucol_unsafeCP(text[result - 1], collator)) {
- result --;
- }
- if (result != 0) {
- // the first contraction character is consider unsafe here
- result --;
- }
- return result;
-}
-
-/**
-* Cleaning up after we passed the safe zone
-* @param strsrch string search data
-* @param safetext safe text array
-* @param safebuffer safe text buffer
-* @param coleiter collation element iterator for safe text
-*/
-static
-inline void cleanUpSafeText(const UStringSearch *strsrch, UChar *safetext,
- UChar *safebuffer)
-{
- if (safetext != safebuffer && safetext != strsrch->canonicalSuffixAccents)
- {
- uprv_free(safetext);
- }
-}
-
-/**
-* Take the rearranged end accents and tries matching. If match failed at
-* a separate preceding set of accents (separated from the rearranged on by
-* at least a base character) then we rearrange the preceding accents and
-* tries matching again.
-* We allow skipping of the ends of the accent set if the ces do not match.
-* However if the failure is found before the accent set, it fails.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param textoffset of the start of the rearranged accent
-* @param status output error status if any
-* @return USEARCH_DONE if a match is not found, otherwise return the starting
-* offset of the match. Note this start includes all preceding accents.
-*/
-static
-int32_t doNextCanonicalSuffixMatch(UStringSearch *strsrch,
- int32_t textoffset,
- UErrorCode *status)
-{
- const UChar *text = strsrch->search->text;
- const UCollator *collator = strsrch->collator;
- int32_t safelength = 0;
- UChar *safetext;
- int32_t safetextlength;
- UChar safebuffer[INITIAL_ARRAY_SIZE_];
- UCollationElements *coleiter = strsrch->utilIter;
- int32_t safeoffset = textoffset;
-
- if (textoffset != 0 && ucol_unsafeCP(strsrch->canonicalSuffixAccents[0],
- collator)) {
- safeoffset = getPreviousSafeOffset(collator, text, textoffset);
- safelength = textoffset - safeoffset;
- safetextlength = INITIAL_ARRAY_SIZE_;
- safetext = addToUCharArray(safebuffer, &safetextlength, NULL,
- text + safeoffset, safelength,
- strsrch->canonicalSuffixAccents,
- status);
- }
- else {
- safetextlength = u_strlen(strsrch->canonicalSuffixAccents);
- safetext = strsrch->canonicalSuffixAccents;
- }
-
- // if status is a failure, ucol_setText does nothing
- ucol_setText(coleiter, safetext, safetextlength, status);
- // status checked in loop below
-
- int32_t *ce = strsrch->pattern.ces;
- int32_t celength = strsrch->pattern.cesLength;
- int ceindex = celength - 1;
- UBool isSafe = TRUE; // indication flag for position in safe zone
-
- while (ceindex >= 0) {
- int32_t textce = ucol_previous(coleiter, status);
- if (U_FAILURE(*status)) {
- if (isSafe) {
- cleanUpSafeText(strsrch, safetext, safebuffer);
- }
- return USEARCH_DONE;
- }
- if (textce == UCOL_NULLORDER) {
- // check if we have passed the safe buffer
- if (coleiter == strsrch->textIter) {
- cleanUpSafeText(strsrch, safetext, safebuffer);
- return USEARCH_DONE;
- }
- cleanUpSafeText(strsrch, safetext, safebuffer);
- safetext = safebuffer;
- coleiter = strsrch->textIter;
- setColEIterOffset(coleiter, safeoffset);
- // status checked at the start of the loop
- isSafe = FALSE;
- continue;
- }
- textce = getCE(strsrch, textce);
- if (textce != UCOL_IGNORABLE && textce != ce[ceindex]) {
- // do the beginning stuff
- int32_t failedoffset = getColElemIterOffset(coleiter, FALSE);
- if (isSafe && failedoffset >= safelength) {
- // alas... no hope. failed at rearranged accent set
- cleanUpSafeText(strsrch, safetext, safebuffer);
- return USEARCH_DONE;
- }
- else {
- if (isSafe) {
- failedoffset += safeoffset;
- cleanUpSafeText(strsrch, safetext, safebuffer);
- }
-
- // try rearranging the front accents
- int32_t result = doNextCanonicalPrefixMatch(strsrch,
- failedoffset, textoffset, status);
- if (result != USEARCH_DONE) {
- // if status is a failure, ucol_setOffset does nothing
- setColEIterOffset(strsrch->textIter, result);
- }
- if (U_FAILURE(*status)) {
- return USEARCH_DONE;
- }
- return result;
- }
- }
- if (textce == ce[ceindex]) {
- ceindex --;
- }
- }
- // set offset here
- if (isSafe) {
- int32_t result = getColElemIterOffset(coleiter, FALSE);
- // sets the text iterator here with the correct expansion and offset
- int32_t leftoverces = getExpansionPrefix(coleiter);
- cleanUpSafeText(strsrch, safetext, safebuffer);
- if (result >= safelength) {
- result = textoffset;
- }
- else {
- result += safeoffset;
- }
- setColEIterOffset(strsrch->textIter, result);
- strsrch->textIter->iteratordata_.toReturn =
- setExpansionPrefix(strsrch->textIter, leftoverces);
- return result;
- }
-
- return ucol_getOffset(coleiter);
-}
-
-/**
-* Trying out the substring and sees if it can be a canonical match.
-* This will try normalizing the end accents and arranging them into canonical
-* equivalents and check their corresponding ces with the pattern ce.
-* Suffix accents in the text will be grouped according to their combining
-* class and the groups will be mixed and matched to try find the perfect
-* match with the pattern.
-* So for instance looking for "\u0301" in "\u030A\u0301\u0325"
-* step 1: split "\u030A\u0301" into 6 other type of potential accent substrings
-* "\u030A", "\u0301", "\u0325", "\u030A\u0301", "\u030A\u0325",
-* "\u0301\u0325".
-* step 2: check if any of the generated substrings matches the pattern.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param textoffset end offset in the collation element text that ends with
-* the accents to be rearranged
-* @param status error status if any
-* @return TRUE if the match is valid, FALSE otherwise
-*/
-static
-UBool doNextCanonicalMatch(UStringSearch *strsrch,
- int32_t textoffset,
- UErrorCode *status)
-{
- const UChar *text = strsrch->search->text;
- int32_t temp = textoffset;
- U16_BACK_1(text, 0, temp);
- if ((getFCD(text, &temp, textoffset) & LAST_BYTE_MASK_) == 0) {
- UCollationElements *coleiter = strsrch->textIter;
- int32_t offset = getColElemIterOffset(coleiter, FALSE);
- if (strsrch->pattern.hasPrefixAccents) {
- offset = doNextCanonicalPrefixMatch(strsrch, offset, textoffset,
- status);
- if (U_SUCCESS(*status) && offset != USEARCH_DONE) {
- setColEIterOffset(coleiter, offset);
- return TRUE;
- }
- }
- return FALSE;
- }
-
- if (!strsrch->pattern.hasSuffixAccents) {
- return FALSE;
- }
-
- UChar accents[INITIAL_ARRAY_SIZE_];
- // offset to the last base character in substring to search
- int32_t baseoffset = getPreviousBaseOffset(text, textoffset);
- // normalizing the offensive string
- unorm_normalize(text + baseoffset, textoffset - baseoffset, UNORM_NFD,
- 0, accents, INITIAL_ARRAY_SIZE_, status);
- // status checked in loop below
-
- int32_t accentsindex[INITIAL_ARRAY_SIZE_];
- int32_t size = getUnblockedAccentIndex(accents, accentsindex);
-
- // 2 power n - 1 plus the full set of accents
- int32_t count = (2 << (size - 1)) - 1;
- while (U_SUCCESS(*status) && count > 0) {
- UChar *rearrange = strsrch->canonicalSuffixAccents;
- // copy the base characters
- for (int k = 0; k < accentsindex[0]; k ++) {
- *rearrange ++ = accents[k];
- }
- // forming all possible canonical rearrangement by dropping
- // sets of accents
- for (int i = 0; i <= size - 1; i ++) {
- int32_t mask = 1 << (size - i - 1);
- if (count & mask) {
- for (int j = accentsindex[i]; j < accentsindex[i + 1]; j ++) {
- *rearrange ++ = accents[j];
- }
- }
- }
- *rearrange = 0;
- int32_t offset = doNextCanonicalSuffixMatch(strsrch, baseoffset,
- status);
- if (offset != USEARCH_DONE) {
- return TRUE; // match found
- }
- count --;
- }
- return FALSE;
-}
-
-/**
-* Gets the previous base character offset depending on the string search
-* pattern data
-* @param strsrch string search data
-* @param textoffset current offset, current character
-* @return the offset of the next character after this base character or itself
-* if it is a composed character with accents
-*/
-static
-inline int32_t getPreviousUStringSearchBaseOffset(UStringSearch *strsrch,
- int32_t textoffset)
-{
- if (strsrch->pattern.hasPrefixAccents && textoffset > 0) {
- const UChar *text = strsrch->search->text;
- int32_t offset = textoffset;
- if (getFCD(text, &offset, strsrch->search->textLength) >>
- SECOND_LAST_BYTE_SHIFT_) {
- return getPreviousBaseOffset(text, textoffset);
- }
- }
- return textoffset;
-}
-
-/**
-* Checks match for contraction.
-* If the match ends with a partial contraction we fail.
-* If the match starts too far off (because of backwards iteration) we try to
-* chip off the extra characters
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param start offset of potential match, to be modified if necessary
-* @param end offset of potential match, to be modified if necessary
-* @param status output error status if any
-* @return TRUE if match passes the contraction test, FALSE otherwise
-*/
-static
-UBool checkNextCanonicalContractionMatch(UStringSearch *strsrch,
- int32_t *start,
- int32_t *end,
- UErrorCode *status)
-{
- UCollationElements *coleiter = strsrch->textIter;
- int32_t textlength = strsrch->search->textLength;
- int32_t temp = *start;
- const UCollator *collator = strsrch->collator;
- const UChar *text = strsrch->search->text;
- // This part checks if either ends of the match contains potential
- // contraction. If so we'll have to iterate through them
- if ((*end < textlength && ucol_unsafeCP(text[*end], collator)) ||
- (*start + 1 < textlength
- && ucol_unsafeCP(text[*start + 1], collator))) {
- int32_t expansion = getExpansionPrefix(coleiter);
- UBool expandflag = expansion > 0;
- setColEIterOffset(coleiter, *start);
- while (expansion > 0) {
- // getting rid of the redundant ce, caused by setOffset.
- // since backward contraction/expansion may have extra ces if we
- // are in the normalization buffer, hasAccentsBeforeMatch would
- // have taken care of it.
- // E.g. the character \u01FA will have an expansion of 3, but if
- // we are only looking for acute and ring \u030A and \u0301, we'll
- // have to skip the first ce in the expansion buffer.
- ucol_next(coleiter, status);
- if (U_FAILURE(*status)) {
- return FALSE;
- }
- if (ucol_getOffset(coleiter) != temp) {
- *start = temp;
- temp = ucol_getOffset(coleiter);
- }
- expansion --;
- }
-
- int32_t *patternce = strsrch->pattern.ces;
- int32_t patterncelength = strsrch->pattern.cesLength;
- int32_t count = 0;
- int32_t textlength = strsrch->search->textLength;
- while (count < patterncelength) {
- int32_t ce = getCE(strsrch, ucol_next(coleiter, status));
- // status checked below, note that if status is a failure
- // ucol_next returns UCOL_NULLORDER
- if (ce == UCOL_IGNORABLE) {
- continue;
- }
- if (expandflag && count == 0 && ucol_getOffset(coleiter) != temp) {
- *start = temp;
- temp = ucol_getOffset(coleiter);
- }
-
- if (count == 0 && ce != patternce[0]) {
- // accents may have extra starting ces, this occurs when a
- // pure accent pattern is matched without rearrangement
- // text \u0325\u0300 and looking for \u0300
- int32_t expected = patternce[0];
- if (getFCD(text, start, textlength) & LAST_BYTE_MASK_) {
- ce = getCE(strsrch, ucol_next(coleiter, status));
- while (U_SUCCESS(*status) && ce != expected &&
- ce != UCOL_NULLORDER &&
- ucol_getOffset(coleiter) <= *end) {
- ce = getCE(strsrch, ucol_next(coleiter, status));
- }
- }
- }
- if (U_FAILURE(*status) || ce != patternce[count]) {
- (*end) ++;
- *end = getNextUStringSearchBaseOffset(strsrch, *end);
- return FALSE;
- }
- count ++;
- }
- }
- return TRUE;
-}
-
-/**
-* Checks and sets the match information if found.
-* Checks
-* <ul>
-* <li> the potential match does not repeat the previous match
-* <li> boundaries are correct
-* <li> potential match does not end in the middle of a contraction
-* <li> identical matches
-* <\ul>
-* Otherwise the offset will be shifted to the next character.
-* Internal method, status assumed to be success, caller has to check the
-* status before calling this method.
-* @param strsrch string search data
-* @param textoffset offset in the collation element text. the returned value
-* will be the truncated end offset of the match or the new start
-* search offset.
-* @param status output error status if any
-* @return TRUE if the match is valid, FALSE otherwise
-*/
-static
-inline UBool checkNextCanonicalMatch(UStringSearch *strsrch,
- int32_t *textoffset,
- UErrorCode *status)
-{
- // to ensure that the start and ends are not composite characters
- UCollationElements *coleiter = strsrch->textIter;
- // if we have a canonical accent match
- if ((strsrch->pattern.hasSuffixAccents &&
- strsrch->canonicalSuffixAccents[0]) ||
- (strsrch->pattern.hasPrefixAccents &&
- strsrch->canonicalPrefixAccents[0])) {
- strsrch->search->matchedIndex = getPreviousUStringSearchBaseOffset(
- strsrch,
- ucol_getOffset(coleiter));
- strsrch->search->matchedLength = *textoffset -
- strsrch->search->matchedIndex;
- return TRUE;
- }
-
- int32_t start = getColElemIterOffset(coleiter, FALSE);
- if (!checkNextCanonicalContractionMatch(strsrch, &start, textoffset,
- status) || U_FAILURE(*status)) {
- return FALSE;
- }
-
- start = getPreviousUStringSearchBaseOffset(strsrch, start);
- // this totally matches, however we need to check if it is repeating
- if (checkRepeatedMatch(strsrch, start, *textoffset) ||
- !isBreakUnit(strsrch, start, *textoffset) ||
- !checkIdentical(strsrch, start, *textoffset)) {
- (*textoffset) ++;
- *textoffset = getNextBaseOffset(strsrch->search->text, *textoffset,
- strsrch->search->textLength);
- return FALSE;
- }
-
- strsrch->search->matchedIndex = start;
- strsrch->search->matchedLength = *textoffset - start;
- return TRUE;
-}
-
-/**
-* Shifting the collation element iterator position forward to prepare for
-* a preceding match. If the first character is a unsafe character, we'll only
-* shift by 1 to capture contractions, normalization etc.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param text strsrch string search data
-* @param textoffset start text position to do search
-* @param ce the text ce which failed the match.
-* @param patternceindex index of the ce within the pattern ce buffer which
-* failed the match
-* @return final offset
-*/
-static
-inline int32_t reverseShift(UStringSearch *strsrch,
- int32_t textoffset,
- int32_t ce,
- int32_t patternceindex)
-{
- if (strsrch->search->isOverlap) {
- if (textoffset != strsrch->search->textLength) {
- textoffset --;
- }
- else {
- textoffset -= strsrch->pattern.defaultShiftSize;
- }
- }
- else {
- if (ce != UCOL_NULLORDER) {
- int32_t shift = strsrch->pattern.backShift[hashFromCE32(ce)];
-
- // this is to adjust for characters in the middle of the substring
- // for matching that failed.
- int32_t adjust = patternceindex;
- if (adjust > 1 && shift > adjust) {
- shift -= adjust - 1;
- }
- textoffset -= shift;
- }
- else {
- textoffset -= strsrch->pattern.defaultShiftSize;
- }
- }
- textoffset = getPreviousUStringSearchBaseOffset(strsrch, textoffset);
- return textoffset;
-}
-
-/**
-* Checks match for contraction.
-* If the match starts with a partial contraction we fail.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param start offset of potential match, to be modified if necessary
-* @param end offset of potential match, to be modified if necessary
-* @param status output error status if any
-* @return TRUE if match passes the contraction test, FALSE otherwise
-*/
-static
-UBool checkPreviousExactContractionMatch(UStringSearch *strsrch,
- int32_t *start,
- int32_t *end, UErrorCode *status)
-{
- UCollationElements *coleiter = strsrch->textIter;
- int32_t textlength = strsrch->search->textLength;
- int32_t temp = *end;
- const UCollator *collator = strsrch->collator;
- const UChar *text = strsrch->search->text;
- // This part checks if either if the start of the match contains potential
- // contraction. If so we'll have to iterate through them
- // Since we used ucol_next while previously looking for the potential
- // match, this guarantees that our end will not be a partial contraction,
- // or a partial supplementary character.
- if (*start < textlength && ucol_unsafeCP(text[*start], collator)) {
- int32_t expansion = getExpansionSuffix(coleiter);
- UBool expandflag = expansion > 0;
- setColEIterOffset(coleiter, *end);
- while (U_SUCCESS(*status) && expansion > 0) {
- // getting rid of the redundant ce
- // since forward contraction/expansion may have extra ces
- // if we are in the normalization buffer, hasAccentsBeforeMatch
- // would have taken care of it.
- // E.g. the character \u01FA will have an expansion of 3, but if
- // we are only looking for A ring A\u030A, we'll have to skip the
- // last ce in the expansion buffer
- ucol_previous(coleiter, status);
- if (U_FAILURE(*status)) {
- return FALSE;
- }
- if (ucol_getOffset(coleiter) != temp) {
- *end = temp;
- temp = ucol_getOffset(coleiter);
- }
- expansion --;
- }
-
- int32_t *patternce = strsrch->pattern.ces;
- int32_t patterncelength = strsrch->pattern.cesLength;
- int32_t count = patterncelength;
- while (count > 0) {
- int32_t ce = getCE(strsrch, ucol_previous(coleiter, status));
- // status checked below, note that if status is a failure
- // ucol_previous returns UCOL_NULLORDER
- if (ce == UCOL_IGNORABLE) {
- continue;
- }
- if (expandflag && count == 0 &&
- getColElemIterOffset(coleiter, FALSE) != temp) {
- *end = temp;
- temp = ucol_getOffset(coleiter);
- }
- if (U_FAILURE(*status) || ce != patternce[count - 1]) {
- (*start) --;
- *start = getPreviousBaseOffset(text, *start);
- return FALSE;
- }
- count --;
- }
- }
- return TRUE;
-}
-
-/**
-* Checks and sets the match information if found.
-* Checks
-* <ul>
-* <li> the current match does not repeat the last match
-* <li> boundaries are correct
-* <li> exact matches has no extra accents
-* <li> identical matches
-* <\ul>
-* Otherwise the offset will be shifted to the preceding character.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param collator
-* @param coleiter collation element iterator
-* @param text string
-* @param textoffset offset in the collation element text. the returned value
-* will be the truncated start offset of the match or the new start
-* search offset.
-* @param status output error status if any
-* @return TRUE if the match is valid, FALSE otherwise
-*/
-static
-inline UBool checkPreviousExactMatch(UStringSearch *strsrch,
- int32_t *textoffset,
- UErrorCode *status)
-{
- // to ensure that the start and ends are not composite characters
- int32_t end = ucol_getOffset(strsrch->textIter);
- if (!checkPreviousExactContractionMatch(strsrch, textoffset, &end, status)
- || U_FAILURE(*status)) {
- return FALSE;
- }
-
- // this totally matches, however we need to check if it is repeating
- // the old match
- if (checkRepeatedMatch(strsrch, *textoffset, end) ||
- !isBreakUnit(strsrch, *textoffset, end) ||
- hasAccentsBeforeMatch(strsrch, *textoffset, end) ||
- !checkIdentical(strsrch, *textoffset, end) ||
- hasAccentsAfterMatch(strsrch, *textoffset, end)) {
- (*textoffset) --;
- *textoffset = getPreviousBaseOffset(strsrch->search->text,
- *textoffset);
- return FALSE;
- }
-
- //Add breakiterator boundary check for primary strength search.
- if (!strsrch->search->breakIter && strsrch->strength == UCOL_PRIMARY) {
- checkBreakBoundary(strsrch, textoffset, &end);
- }
-
- strsrch->search->matchedIndex = *textoffset;
- strsrch->search->matchedLength = end - *textoffset;
- return TRUE;
-}
-
-/**
-* Rearranges the end accents to try matching.
-* Suffix accents in the text will be grouped according to their combining
-* class and the groups will be mixed and matched to try find the perfect
-* match with the pattern.
-* So for instance looking for "\u0301" in "\u030A\u0301\u0325"
-* step 1: split "\u030A\u0301" into 6 other type of potential accent substrings
-* "\u030A", "\u0301", "\u0325", "\u030A\u0301", "\u030A\u0325",
-* "\u0301\u0325".
-* step 2: check if any of the generated substrings matches the pattern.
-* Internal method, status assumed to be success, user has to check status
-* before calling this method.
-* @param strsrch string search match
-* @param start offset of the first base character
-* @param end start of the last accent set
-* @param status only error status if any
-* @return USEARCH_DONE if a match is not found, otherwise return the ending
-* offset of the match. Note this start includes all following accents.
-*/
-static
-int32_t doPreviousCanonicalSuffixMatch(UStringSearch *strsrch,
- int32_t start,
- int32_t end,
- UErrorCode *status)
-{
- const UChar *text = strsrch->search->text;
- int32_t tempend = end;
-
- U16_BACK_1(text, 0, tempend);
- if (!(getFCD(text, &tempend, strsrch->search->textLength) &
- LAST_BYTE_MASK_)) {
- // die... failed at a base character
- return USEARCH_DONE;
- }
- end = getNextBaseOffset(text, end, strsrch->search->textLength);
-
- if (U_SUCCESS(*status)) {
- UChar accents[INITIAL_ARRAY_SIZE_];
- int32_t offset = getPreviousBaseOffset(text, end);
- // normalizing the offensive string
- unorm_normalize(text + offset, end - offset, UNORM_NFD, 0, accents,
- INITIAL_ARRAY_SIZE_, status);
-
- int32_t accentsindex[INITIAL_ARRAY_SIZE_];
- int32_t accentsize = getUnblockedAccentIndex(accents,
- accentsindex);
- int32_t count = (2 << (accentsize - 1)) - 1;
- UChar buffer[INITIAL_ARRAY_SIZE_];
- UCollationElements *coleiter = strsrch->utilIter;
- while (U_SUCCESS(*status) && count > 0) {
- UChar *rearrange = strsrch->canonicalSuffixAccents;
- // copy the base characters
- for (int k = 0; k < accentsindex[0]; k ++) {
- *rearrange ++ = accents[k];
- }
- // forming all possible canonical rearrangement by dropping
- // sets of accents
- for (int i = 0; i <= accentsize - 1; i ++) {
- int32_t mask = 1 << (accentsize - i - 1);
- if (count & mask) {
- for (int j = accentsindex[i]; j < accentsindex[i + 1]; j ++) {
- *rearrange ++ = accents[j];
- }
- }
- }
- *rearrange = 0;
- int32_t matchsize = INITIAL_ARRAY_SIZE_;
- UChar *match = addToUCharArray(buffer, &matchsize,
- strsrch->canonicalPrefixAccents,
- strsrch->search->text + start,
- offset - start,
- strsrch->canonicalSuffixAccents,
- status);
-
- // run the collator iterator through this match
- // if status is a failure ucol_setText does nothing
- ucol_setText(coleiter, match, matchsize, status);
- if (U_SUCCESS(*status)) {
- if (checkCollationMatch(strsrch, coleiter)) {
- if (match != buffer) {
- uprv_free(match);
- }
- return end;
- }
- }
- count --;
- }
- }
- return USEARCH_DONE;
-}
-
-/**
-* Take the rearranged start accents and tries matching. If match failed at
-* a separate following set of accents (separated from the rearranged on by
-* at least a base character) then we rearrange the preceding accents and
-* tries matching again.
-* We allow skipping of the ends of the accent set if the ces do not match.
-* However if the failure is found before the accent set, it fails.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param textoffset of the ends of the rearranged accent
-* @param status output error status if any
-* @return USEARCH_DONE if a match is not found, otherwise return the ending
-* offset of the match. Note this start includes all following accents.
-*/
-static
-int32_t doPreviousCanonicalPrefixMatch(UStringSearch *strsrch,
- int32_t textoffset,
- UErrorCode *status)
-{
- const UChar *text = strsrch->search->text;
- const UCollator *collator = strsrch->collator;
- int32_t safelength = 0;
- UChar *safetext;
- int32_t safetextlength;
- UChar safebuffer[INITIAL_ARRAY_SIZE_];
- int32_t safeoffset = textoffset;
-
- if (textoffset &&
- ucol_unsafeCP(strsrch->canonicalPrefixAccents[
- u_strlen(strsrch->canonicalPrefixAccents) - 1
- ], collator)) {
- safeoffset = getNextSafeOffset(collator, text, textoffset,
- strsrch->search->textLength);
- safelength = safeoffset - textoffset;
- safetextlength = INITIAL_ARRAY_SIZE_;
- safetext = addToUCharArray(safebuffer, &safetextlength,
- strsrch->canonicalPrefixAccents,
- text + textoffset, safelength,
- NULL, status);
- }
- else {
- safetextlength = u_strlen(strsrch->canonicalPrefixAccents);
- safetext = strsrch->canonicalPrefixAccents;
- }
-
- UCollationElements *coleiter = strsrch->utilIter;
- // if status is a failure, ucol_setText does nothing
- ucol_setText(coleiter, safetext, safetextlength, status);
- // status checked in loop below
-
- int32_t *ce = strsrch->pattern.ces;
- int32_t celength = strsrch->pattern.cesLength;
- int ceindex = 0;
- UBool isSafe = TRUE; // safe zone indication flag for position
- int32_t prefixlength = u_strlen(strsrch->canonicalPrefixAccents);
-
- while (ceindex < celength) {
- int32_t textce = ucol_next(coleiter, status);
- if (U_FAILURE(*status)) {
- if (isSafe) {
- cleanUpSafeText(strsrch, safetext, safebuffer);
- }
- return USEARCH_DONE;
- }
- if (textce == UCOL_NULLORDER) {
- // check if we have passed the safe buffer
- if (coleiter == strsrch->textIter) {
- cleanUpSafeText(strsrch, safetext, safebuffer);
- return USEARCH_DONE;
- }
- cleanUpSafeText(strsrch, safetext, safebuffer);
- safetext = safebuffer;
- coleiter = strsrch->textIter;
- setColEIterOffset(coleiter, safeoffset);
- // status checked at the start of the loop
- isSafe = FALSE;
- continue;
- }
- textce = getCE(strsrch, textce);
- if (textce != UCOL_IGNORABLE && textce != ce[ceindex]) {
- // do the beginning stuff
- int32_t failedoffset = ucol_getOffset(coleiter);
- if (isSafe && failedoffset <= prefixlength) {
- // alas... no hope. failed at rearranged accent set
- cleanUpSafeText(strsrch, safetext, safebuffer);
- return USEARCH_DONE;
- }
- else {
- if (isSafe) {
- failedoffset = safeoffset - failedoffset;
- cleanUpSafeText(strsrch, safetext, safebuffer);
- }
-
- // try rearranging the end accents
- int32_t result = doPreviousCanonicalSuffixMatch(strsrch,
- textoffset, failedoffset, status);
- if (result != USEARCH_DONE) {
- // if status is a failure, ucol_setOffset does nothing
- setColEIterOffset(strsrch->textIter, result);
- }
- if (U_FAILURE(*status)) {
- return USEARCH_DONE;
- }
- return result;
- }
- }
- if (textce == ce[ceindex]) {
- ceindex ++;
- }
- }
- // set offset here
- if (isSafe) {
- int32_t result = ucol_getOffset(coleiter);
- // sets the text iterator here with the correct expansion and offset
- int32_t leftoverces = getExpansionSuffix(coleiter);
- cleanUpSafeText(strsrch, safetext, safebuffer);
- if (result <= prefixlength) {
- result = textoffset;
- }
- else {
- result = textoffset + (safeoffset - result);
- }
- setColEIterOffset(strsrch->textIter, result);
- setExpansionSuffix(strsrch->textIter, leftoverces);
- return result;
- }
-
- return ucol_getOffset(coleiter);
-}
-
-/**
-* Trying out the substring and sees if it can be a canonical match.
-* This will try normalizing the starting accents and arranging them into
-* canonical equivalents and check their corresponding ces with the pattern ce.
-* Prefix accents in the text will be grouped according to their combining
-* class and the groups will be mixed and matched to try find the perfect
-* match with the pattern.
-* So for instance looking for "\u0301" in "\u030A\u0301\u0325"
-* step 1: split "\u030A\u0301" into 6 other type of potential accent substrings
-* "\u030A", "\u0301", "\u0325", "\u030A\u0301", "\u030A\u0325",
-* "\u0301\u0325".
-* step 2: check if any of the generated substrings matches the pattern.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param textoffset start offset in the collation element text that starts
-* with the accents to be rearranged
-* @param status output error status if any
-* @return TRUE if the match is valid, FALSE otherwise
-*/
-static
-UBool doPreviousCanonicalMatch(UStringSearch *strsrch,
- int32_t textoffset,
- UErrorCode *status)
-{
- const UChar *text = strsrch->search->text;
- int32_t temp = textoffset;
- int32_t textlength = strsrch->search->textLength;
- if ((getFCD(text, &temp, textlength) >> SECOND_LAST_BYTE_SHIFT_) == 0) {
- UCollationElements *coleiter = strsrch->textIter;
- int32_t offset = ucol_getOffset(coleiter);
- if (strsrch->pattern.hasSuffixAccents) {
- offset = doPreviousCanonicalSuffixMatch(strsrch, textoffset,
- offset, status);
- if (U_SUCCESS(*status) && offset != USEARCH_DONE) {
- setColEIterOffset(coleiter, offset);
- return TRUE;
- }
- }
- return FALSE;
- }
-
- if (!strsrch->pattern.hasPrefixAccents) {
- return FALSE;
- }
-
- UChar accents[INITIAL_ARRAY_SIZE_];
- // offset to the last base character in substring to search
- int32_t baseoffset = getNextBaseOffset(text, textoffset, textlength);
- // normalizing the offensive string
- unorm_normalize(text + textoffset, baseoffset - textoffset, UNORM_NFD,
- 0, accents, INITIAL_ARRAY_SIZE_, status);
- // status checked in loop
-
- int32_t accentsindex[INITIAL_ARRAY_SIZE_];
- int32_t size = getUnblockedAccentIndex(accents, accentsindex);
-
- // 2 power n - 1 plus the full set of accents
- int32_t count = (2 << (size - 1)) - 1;
- while (U_SUCCESS(*status) && count > 0) {
- UChar *rearrange = strsrch->canonicalPrefixAccents;
- // copy the base characters
- for (int k = 0; k < accentsindex[0]; k ++) {
- *rearrange ++ = accents[k];
- }
- // forming all possible canonical rearrangement by dropping
- // sets of accents
- for (int i = 0; i <= size - 1; i ++) {
- int32_t mask = 1 << (size - i - 1);
- if (count & mask) {
- for (int j = accentsindex[i]; j < accentsindex[i + 1]; j ++) {
- *rearrange ++ = accents[j];
- }
- }
- }
- *rearrange = 0;
- int32_t offset = doPreviousCanonicalPrefixMatch(strsrch,
- baseoffset, status);
- if (offset != USEARCH_DONE) {
- return TRUE; // match found
- }
- count --;
- }
- return FALSE;
-}
-
-/**
-* Checks match for contraction.
-* If the match starts with a partial contraction we fail.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param start offset of potential match, to be modified if necessary
-* @param end offset of potential match, to be modified if necessary
-* @param status only error status if any
-* @return TRUE if match passes the contraction test, FALSE otherwise
-*/
-static
-UBool checkPreviousCanonicalContractionMatch(UStringSearch *strsrch,
- int32_t *start,
- int32_t *end, UErrorCode *status)
-{
- UCollationElements *coleiter = strsrch->textIter;
- int32_t textlength = strsrch->search->textLength;
- int32_t temp = *end;
- const UCollator *collator = strsrch->collator;
- const UChar *text = strsrch->search->text;
- // This part checks if either if the start of the match contains potential
- // contraction. If so we'll have to iterate through them
- // Since we used ucol_next while previously looking for the potential
- // match, this guarantees that our end will not be a partial contraction,
- // or a partial supplementary character.
- if (*start < textlength && ucol_unsafeCP(text[*start], collator)) {
- int32_t expansion = getExpansionSuffix(coleiter);
- UBool expandflag = expansion > 0;
- setColEIterOffset(coleiter, *end);
- while (expansion > 0) {
- // getting rid of the redundant ce
- // since forward contraction/expansion may have extra ces
- // if we are in the normalization buffer, hasAccentsBeforeMatch
- // would have taken care of it.
- // E.g. the character \u01FA will have an expansion of 3, but if
- // we are only looking for A ring A\u030A, we'll have to skip the
- // last ce in the expansion buffer
- ucol_previous(coleiter, status);
- if (U_FAILURE(*status)) {
- return FALSE;
- }
- if (ucol_getOffset(coleiter) != temp) {
- *end = temp;
- temp = ucol_getOffset(coleiter);
- }
- expansion --;
- }
-
- int32_t *patternce = strsrch->pattern.ces;
- int32_t patterncelength = strsrch->pattern.cesLength;
- int32_t count = patterncelength;
- while (count > 0) {
- int32_t ce = getCE(strsrch, ucol_previous(coleiter, status));
- // status checked below, note that if status is a failure
- // ucol_previous returns UCOL_NULLORDER
- if (ce == UCOL_IGNORABLE) {
- continue;
- }
- if (expandflag && count == 0 &&
- getColElemIterOffset(coleiter, FALSE) != temp) {
- *end = temp;
- temp = ucol_getOffset(coleiter);
- }
- if (count == patterncelength &&
- ce != patternce[patterncelength - 1]) {
- // accents may have extra starting ces, this occurs when a
- // pure accent pattern is matched without rearrangement
- int32_t expected = patternce[patterncelength - 1];
- U16_BACK_1(text, 0, *end);
- if (getFCD(text, end, textlength) & LAST_BYTE_MASK_) {
- ce = getCE(strsrch, ucol_previous(coleiter, status));
- while (U_SUCCESS(*status) && ce != expected &&
- ce != UCOL_NULLORDER &&
- ucol_getOffset(coleiter) <= *start) {
- ce = getCE(strsrch, ucol_previous(coleiter, status));
- }
- }
- }
- if (U_FAILURE(*status) || ce != patternce[count - 1]) {
- (*start) --;
- *start = getPreviousBaseOffset(text, *start);
- return FALSE;
- }
- count --;
- }
- }
- return TRUE;
-}
-
-/**
-* Checks and sets the match information if found.
-* Checks
-* <ul>
-* <li> the potential match does not repeat the previous match
-* <li> boundaries are correct
-* <li> potential match does not end in the middle of a contraction
-* <li> identical matches
-* <\ul>
-* Otherwise the offset will be shifted to the next character.
-* Internal method, status assumed to be success, caller has to check status
-* before calling this method.
-* @param strsrch string search data
-* @param textoffset offset in the collation element text. the returned value
-* will be the truncated start offset of the match or the new start
-* search offset.
-* @param status only error status if any
-* @return TRUE if the match is valid, FALSE otherwise
-*/
-static
-inline UBool checkPreviousCanonicalMatch(UStringSearch *strsrch,
- int32_t *textoffset,
- UErrorCode *status)
-{
- // to ensure that the start and ends are not composite characters
- UCollationElements *coleiter = strsrch->textIter;
- // if we have a canonical accent match
- if ((strsrch->pattern.hasSuffixAccents &&
- strsrch->canonicalSuffixAccents[0]) ||
- (strsrch->pattern.hasPrefixAccents &&
- strsrch->canonicalPrefixAccents[0])) {
- strsrch->search->matchedIndex = *textoffset;
- strsrch->search->matchedLength =
- getNextUStringSearchBaseOffset(strsrch,
- getColElemIterOffset(coleiter, FALSE))
- - *textoffset;
- return TRUE;
- }
-
- int32_t end = ucol_getOffset(coleiter);
- if (!checkPreviousCanonicalContractionMatch(strsrch, textoffset, &end,
- status) ||
- U_FAILURE(*status)) {
- return FALSE;
- }
-
- end = getNextUStringSearchBaseOffset(strsrch, end);
- // this totally matches, however we need to check if it is repeating
- if (checkRepeatedMatch(strsrch, *textoffset, end) ||
- !isBreakUnit(strsrch, *textoffset, end) ||
- !checkIdentical(strsrch, *textoffset, end)) {
- (*textoffset) --;
- *textoffset = getPreviousBaseOffset(strsrch->search->text,
- *textoffset);
- return FALSE;
- }
-
- strsrch->search->matchedIndex = *textoffset;
- strsrch->search->matchedLength = end - *textoffset;
- return TRUE;
-}
-#endif // #if BOYER_MOORE
-
// constructors and destructor -------------------------------------------
U_CAPI UStringSearch * U_EXPORT2 usearch_open(const UChar *pattern,
@@ -2599,12 +547,12 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_open(const UChar *pattern,
UErrorCode *status)
{
if (U_FAILURE(*status)) {
- return NULL;
+ return nullptr;
}
#if UCONFIG_NO_BREAK_ITERATION
- if (breakiter != NULL) {
+ if (breakiter != nullptr) {
*status = U_UNSUPPORTED_ERROR;
- return NULL;
+ return nullptr;
}
#endif
if (locale) {
@@ -2615,11 +563,11 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_open(const UChar *pattern,
patternlength, text, textlength,
collator, breakiter, status);
- if (result == NULL || U_FAILURE(*status)) {
+ if (result == nullptr || U_FAILURE(*status)) {
if (collator) {
ucol_close(collator);
}
- return NULL;
+ return nullptr;
}
else {
result->ownCollator = TRUE;
@@ -2627,7 +575,7 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_open(const UChar *pattern,
return result;
}
*status = U_ILLEGAL_ARGUMENT_ERROR;
- return NULL;
+ return nullptr;
}
U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator(
@@ -2640,29 +588,29 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator(
UErrorCode *status)
{
if (U_FAILURE(*status)) {
- return NULL;
+ return nullptr;
}
#if UCONFIG_NO_BREAK_ITERATION
- if (breakiter != NULL) {
+ if (breakiter != nullptr) {
*status = U_UNSUPPORTED_ERROR;
- return NULL;
+ return nullptr;
}
#endif
- if (pattern == NULL || text == NULL || collator == NULL) {
+ if (pattern == nullptr || text == nullptr || collator == nullptr) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
- return NULL;
+ return nullptr;
}
// string search does not really work when numeric collation is turned on
if(ucol_getAttribute(collator, UCOL_NUMERIC_COLLATION, status) == UCOL_ON) {
*status = U_UNSUPPORTED_ERROR;
- return NULL;
+ return nullptr;
}
if (U_SUCCESS(*status)) {
initializeFCD(status);
if (U_FAILURE(*status)) {
- return NULL;
+ return nullptr;
}
UStringSearch *result;
@@ -2674,13 +622,13 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator(
}
if (textlength <= 0 || patternlength <= 0) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
- return NULL;
+ return nullptr;
}
result = (UStringSearch *)uprv_malloc(sizeof(UStringSearch));
- if (result == NULL) {
+ if (result == nullptr) {
*status = U_MEMORY_ALLOCATION_ERROR;
- return NULL;
+ return nullptr;
}
result->collator = collator;
@@ -2695,14 +643,14 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator(
if (U_FAILURE(*status)) {
uprv_free(result);
- return NULL;
+ return nullptr;
}
result->search = (USearch *)uprv_malloc(sizeof(USearch));
- if (result->search == NULL) {
+ if (result->search == nullptr) {
*status = U_MEMORY_ALLOCATION_ERROR;
uprv_free(result);
- return NULL;
+ return nullptr;
}
result->search->text = text;
@@ -2710,12 +658,12 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator(
result->pattern.text = pattern;
result->pattern.textLength = patternlength;
- result->pattern.ces = NULL;
- result->pattern.pces = NULL;
+ result->pattern.ces = nullptr;
+ result->pattern.pces = nullptr;
result->search->breakIter = breakiter;
#if !UCONFIG_NO_BREAK_ITERATION
- result->search->internalBreakIter = ubrk_open(UBRK_CHARACTER, ucol_getLocaleByType(result->collator, ULOC_VALID_LOCALE, status), text, textlength, status);
+ result->search->internalBreakIter = nullptr; // Lazily created.
if (breakiter) {
ubrk_setText(breakiter, text, textlength, status);
}
@@ -2724,13 +672,13 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator(
result->ownCollator = FALSE;
result->search->matchedLength = 0;
result->search->matchedIndex = USEARCH_DONE;
- result->utilIter = NULL;
+ result->utilIter = nullptr;
result->textIter = ucol_openElements(collator, text,
textlength, status);
- result->textProcessedIter = NULL;
+ result->textProcessedIter = nullptr;
if (U_FAILURE(*status)) {
usearch_close(result);
- return NULL;
+ return nullptr;
}
result->search->isOverlap = FALSE;
@@ -2743,12 +691,12 @@ U_CAPI UStringSearch * U_EXPORT2 usearch_openFromCollator(
if (U_FAILURE(*status)) {
usearch_close(result);
- return NULL;
+ return nullptr;
}
return result;
}
- return NULL;
+ return nullptr;
}
U_CAPI void U_EXPORT2 usearch_close(UStringSearch *strsrch)
@@ -2759,7 +707,7 @@ U_CAPI void U_EXPORT2 usearch_close(UStringSearch *strsrch)
uprv_free(strsrch->pattern.ces);
}
- if (strsrch->pattern.pces != NULL &&
+ if (strsrch->pattern.pces != nullptr &&
strsrch->pattern.pces != strsrch->pattern.pcesBuffer) {
uprv_free(strsrch->pattern.pces);
}
@@ -2773,7 +721,7 @@ U_CAPI void U_EXPORT2 usearch_close(UStringSearch *strsrch)
}
#if !UCONFIG_NO_BREAK_ITERATION
- if (strsrch->search->internalBreakIter) {
+ if (strsrch->search->internalBreakIter != nullptr) {
ubrk_close(strsrch->search->internalBreakIter);
}
#endif
@@ -2787,9 +735,9 @@ namespace {
UBool initTextProcessedIter(UStringSearch *strsrch, UErrorCode *status) {
if (U_FAILURE(*status)) { return FALSE; }
- if (strsrch->textProcessedIter == NULL) {
+ if (strsrch->textProcessedIter == nullptr) {
strsrch->textProcessedIter = new icu::UCollationPCE(strsrch->textIter);
- if (strsrch->textProcessedIter == NULL) {
+ if (strsrch->textProcessedIter == nullptr) {
*status = U_MEMORY_ALLOCATION_ERROR;
return FALSE;
}
@@ -2804,7 +752,7 @@ UBool initTextProcessedIter(UStringSearch *strsrch, UErrorCode *status) {
// set and get methods --------------------------------------------------
U_CAPI void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch,
- int32_t position,
+ int32_t position,
UErrorCode *status)
{
if (U_SUCCESS(*status) && strsrch) {
@@ -2812,7 +760,7 @@ U_CAPI void U_EXPORT2 usearch_setOffset(UStringSearch *strsrch,
*status = U_INDEX_OUTOFBOUNDS_ERROR;
}
else {
- setColEIterOffset(strsrch->textIter, position);
+ setColEIterOffset(strsrch->textIter, position, *status);
}
strsrch->search->matchedIndex = USEARCH_DONE;
strsrch->search->matchedLength = 0;
@@ -2832,10 +780,10 @@ U_CAPI int32_t U_EXPORT2 usearch_getOffset(const UStringSearch *strsrch)
return USEARCH_DONE;
}
-U_CAPI void U_EXPORT2 usearch_setAttribute(UStringSearch *strsrch,
- USearchAttribute attribute,
- USearchAttributeValue value,
- UErrorCode *status)
+U_CAPI void U_EXPORT2 usearch_setAttribute(UStringSearch *strsrch,
+ USearchAttribute attribute,
+ USearchAttributeValue value,
+ UErrorCode *status)
{
if (U_SUCCESS(*status) && strsrch) {
switch (attribute)
@@ -2895,7 +843,7 @@ U_CAPI USearchAttributeValue U_EXPORT2 usearch_getAttribute(
U_CAPI int32_t U_EXPORT2 usearch_getMatchedStart(
const UStringSearch *strsrch)
{
- if (strsrch == NULL) {
+ if (strsrch == nullptr) {
return USEARCH_DONE;
}
return strsrch->search->matchedIndex;
@@ -2910,8 +858,8 @@ U_CAPI int32_t U_EXPORT2 usearch_getMatchedText(const UStringSearch *strsrch,
if (U_FAILURE(*status)) {
return USEARCH_DONE;
}
- if (strsrch == NULL || resultCapacity < 0 || (resultCapacity > 0 &&
- result == NULL)) {
+ if (strsrch == nullptr || resultCapacity < 0 || (resultCapacity > 0 &&
+ result == nullptr)) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
return USEARCH_DONE;
}
@@ -2964,7 +912,7 @@ usearch_getBreakIterator(const UStringSearch *strsrch)
if (strsrch) {
return strsrch->search->breakIter;
}
- return NULL;
+ return nullptr;
}
#endif
@@ -2975,7 +923,7 @@ U_CAPI void U_EXPORT2 usearch_setText( UStringSearch *strsrch,
UErrorCode *status)
{
if (U_SUCCESS(*status)) {
- if (strsrch == NULL || text == NULL || textlength < -1 ||
+ if (strsrch == nullptr || text == nullptr || textlength < -1 ||
textlength == 0) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
}
@@ -2990,11 +938,13 @@ U_CAPI void U_EXPORT2 usearch_setText( UStringSearch *strsrch,
strsrch->search->matchedLength = 0;
strsrch->search->reset = TRUE;
#if !UCONFIG_NO_BREAK_ITERATION
- if (strsrch->search->breakIter != NULL) {
+ if (strsrch->search->breakIter != nullptr) {
ubrk_setText(strsrch->search->breakIter, text,
textlength, status);
}
- ubrk_setText(strsrch->search->internalBreakIter, text, textlength, status);
+ if (strsrch->search->internalBreakIter != nullptr) {
+ ubrk_setText(strsrch->search->internalBreakIter, text, textlength, status);
+ }
#endif
}
}
@@ -3007,7 +957,7 @@ U_CAPI const UChar * U_EXPORT2 usearch_getText(const UStringSearch *strsrch,
*length = strsrch->search->textLength;
return strsrch->search->text;
}
- return NULL;
+ return nullptr;
}
U_CAPI void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch,
@@ -3015,17 +965,17 @@ U_CAPI void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch,
UErrorCode *status)
{
if (U_SUCCESS(*status)) {
- if (collator == NULL) {
+ if (collator == nullptr) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
if (strsrch) {
delete strsrch->textProcessedIter;
- strsrch->textProcessedIter = NULL;
+ strsrch->textProcessedIter = nullptr;
ucol_closeElements(strsrch->textIter);
ucol_closeElements(strsrch->utilIter);
- strsrch->textIter = strsrch->utilIter = NULL;
+ strsrch->textIter = strsrch->utilIter = nullptr;
if (strsrch->ownCollator && (strsrch->collator != collator)) {
ucol_close((UCollator *)strsrch->collator);
strsrch->ownCollator = FALSE;
@@ -3034,9 +984,10 @@ U_CAPI void U_EXPORT2 usearch_setCollator( UStringSearch *strsrch,
strsrch->strength = ucol_getStrength(collator);
strsrch->ceMask = getMask(strsrch->strength);
#if !UCONFIG_NO_BREAK_ITERATION
- ubrk_close(strsrch->search->internalBreakIter);
- strsrch->search->internalBreakIter = ubrk_open(UBRK_CHARACTER, ucol_getLocaleByType(collator, ULOC_VALID_LOCALE, status),
- strsrch->search->text, strsrch->search->textLength, status);
+ if (strsrch->search->internalBreakIter != nullptr) {
+ ubrk_close(strsrch->search->internalBreakIter);
+ strsrch->search->internalBreakIter = nullptr; // Lazily created.
+ }
#endif
// if status is a failure, ucol_getAttribute returns UCOL_DEFAULT
strsrch->toShift =
@@ -3069,7 +1020,7 @@ U_CAPI UCollator * U_EXPORT2 usearch_getCollator(const UStringSearch *strsrch)
if (strsrch) {
return (UCollator *)strsrch->collator;
}
- return NULL;
+ return nullptr;
}
U_CAPI void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch,
@@ -3078,7 +1029,7 @@ U_CAPI void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch,
UErrorCode *status)
{
if (U_SUCCESS(*status)) {
- if (strsrch == NULL || pattern == NULL) {
+ if (strsrch == nullptr || pattern == nullptr) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
}
else {
@@ -3098,19 +1049,19 @@ U_CAPI void U_EXPORT2 usearch_setPattern( UStringSearch *strsrch,
U_CAPI const UChar* U_EXPORT2
usearch_getPattern(const UStringSearch *strsrch,
- int32_t *length)
+ int32_t *length)
{
if (strsrch) {
*length = strsrch->pattern.textLength;
return strsrch->pattern.text;
}
- return NULL;
+ return nullptr;
}
-// miscellanous methods --------------------------------------------------
+// miscellaneous methods --------------------------------------------------
U_CAPI int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch,
- UErrorCode *status)
+ UErrorCode *status)
{
if (strsrch && U_SUCCESS(*status)) {
strsrch->search->isForwardSearching = TRUE;
@@ -3123,8 +1074,8 @@ U_CAPI int32_t U_EXPORT2 usearch_first(UStringSearch *strsrch,
}
U_CAPI int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch,
- int32_t position,
- UErrorCode *status)
+ int32_t position,
+ UErrorCode *status)
{
if (strsrch && U_SUCCESS(*status)) {
strsrch->search->isForwardSearching = TRUE;
@@ -3138,7 +1089,7 @@ U_CAPI int32_t U_EXPORT2 usearch_following(UStringSearch *strsrch,
}
U_CAPI int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch,
- UErrorCode *status)
+ UErrorCode *status)
{
if (strsrch && U_SUCCESS(*status)) {
strsrch->search->isForwardSearching = FALSE;
@@ -3151,8 +1102,8 @@ U_CAPI int32_t U_EXPORT2 usearch_last(UStringSearch *strsrch,
}
U_CAPI int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch,
- int32_t position,
- UErrorCode *status)
+ int32_t position,
+ UErrorCode *status)
{
if (strsrch && U_SUCCESS(*status)) {
strsrch->search->isForwardSearching = FALSE;
@@ -3188,7 +1139,7 @@ U_CAPI int32_t U_EXPORT2 usearch_preceding(UStringSearch *strsrch,
* element iterator before using this method.
*/
U_CAPI int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
- UErrorCode *status)
+ UErrorCode *status)
{
if (U_SUCCESS(*status) && strsrch) {
// note offset is either equivalent to the start of the previous match
@@ -3198,26 +1149,14 @@ U_CAPI int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
search->reset = FALSE;
int32_t textlength = search->textLength;
if (search->isForwardSearching) {
-#if BOYER_MOORE
- if (offset == textlength
- || (!search->isOverlap &&
- (offset + strsrch->pattern.defaultShiftSize > textlength ||
- (search->matchedIndex != USEARCH_DONE &&
- offset + search->matchedLength >= textlength)))) {
- // not enough characters to match
- setMatchNotFound(strsrch);
- return USEARCH_DONE;
- }
-#else
if (offset == textlength ||
(! search->isOverlap &&
(search->matchedIndex != USEARCH_DONE &&
offset + search->matchedLength > textlength))) {
// not enough characters to match
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return USEARCH_DONE;
}
-#endif
}
else {
// switching direction.
@@ -3243,7 +1182,7 @@ U_CAPI int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
}
search->matchedLength = 0;
- setColEIterOffset(strsrch->textIter, search->matchedIndex);
+ setColEIterOffset(strsrch->textIter, search->matchedIndex, *status);
// status checked below
if (search->matchedIndex == textlength) {
search->matchedIndex = USEARCH_DONE;
@@ -3262,7 +1201,7 @@ U_CAPI int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
}
else {
// for boundary check purposes. this will ensure that the
- // next match will not preceed the current offset
+ // next match will not precede the current offset
// note search->matchedIndex will always be set to something
// in the code
search->matchedIndex = offset - 1;
@@ -3281,13 +1220,11 @@ U_CAPI int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
return USEARCH_DONE;
}
-#if !BOYER_MOORE
if (search->matchedIndex == USEARCH_DONE) {
ucol_setOffset(strsrch->textIter, search->textLength, status);
} else {
ucol_setOffset(strsrch->textIter, search->matchedIndex, status);
}
-#endif
return search->matchedIndex;
}
@@ -3296,7 +1233,7 @@ U_CAPI int32_t U_EXPORT2 usearch_next(UStringSearch *strsrch,
}
U_CAPI int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch,
- UErrorCode *status)
+ UErrorCode *status)
{
if (U_SUCCESS(*status) && strsrch) {
int32_t offset;
@@ -3305,7 +1242,7 @@ U_CAPI int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch,
offset = search->textLength;
search->isForwardSearching = FALSE;
search->reset = FALSE;
- setColEIterOffset(strsrch->textIter, offset);
+ setColEIterOffset(strsrch->textIter, offset, *status);
}
else {
offset = usearch_getOffset(strsrch);
@@ -3324,24 +1261,13 @@ U_CAPI int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch,
}
}
else {
-#if BOYER_MOORE
- if (offset == 0 || matchedindex == 0 ||
- (!search->isOverlap &&
- (offset < strsrch->pattern.defaultShiftSize ||
- (matchedindex != USEARCH_DONE &&
- matchedindex < strsrch->pattern.defaultShiftSize)))) {
- // not enough characters to match
- setMatchNotFound(strsrch);
- return USEARCH_DONE;
- }
-#else
+
// Could check pattern length, but the
// linear search will do the right thing
if (offset == 0 || matchedindex == 0) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return USEARCH_DONE;
}
-#endif
}
if (U_SUCCESS(*status)) {
@@ -3349,12 +1275,12 @@ U_CAPI int32_t U_EXPORT2 usearch_previous(UStringSearch *strsrch,
search->matchedIndex =
(matchedindex == USEARCH_DONE ? offset : matchedindex);
if (search->matchedIndex == 0) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
// status checked below
}
else { // move by codepoints
U16_BACK_1(search->text, 0, search->matchedIndex);
- setColEIterOffset(strsrch->textIter, search->matchedIndex);
+ setColEIterOffset(strsrch->textIter, search->matchedIndex, *status);
// status checked below
search->matchedLength = 0;
}
@@ -3509,7 +1435,7 @@ CEIBuffer::CEIBuffer(UStringSearch *ss, UErrorCode *status) {
if (bufSize>DEFAULT_CEBUFFER_SIZE) {
buf = (CEI *)uprv_malloc(bufSize * sizeof(CEI));
- if (buf == NULL) {
+ if (buf == nullptr) {
*status = U_MEMORY_ALLOCATION_ERROR;
}
}
@@ -3544,12 +1470,13 @@ const CEI *CEIBuffer::get(int32_t index) {
// Verify that it is the next one in sequence, which is all
// that is allowed.
if (index != limitIx) {
- U_ASSERT(FALSE);
- // TODO: In ICU 64 the above assert was changed to use UPRV_UNREACHABLE instead
- // which unconditionally calls abort(). However, there were cases where this was
- // being hit. This change is reverted for now, restoring the existing behavior.
+ UPRV_UNREACHABLE_ASSERT;
+ // TODO: In ICU 64 the above was changed from U_ASSERT to UPRV_UNREACHABLE,
+ // which unconditionally called abort(). However, there were cases in which it
+ // was being hit, so it was changed back to U_ASSERT per ICU-20680. In ICU 70,
+ // we now use the new UPRV_UNREACHABLE_ASSERT to better indicate the situation.
// ICU-20792 tracks the follow-up work/further investigation on this.
- return NULL;
+ return nullptr;
}
// Manage the circular CE buffer indexing
@@ -3586,12 +1513,13 @@ const CEI *CEIBuffer::getPrevious(int32_t index) {
// Verify that it is the next one in sequence, which is all
// that is allowed.
if (index != limitIx) {
- U_ASSERT(FALSE);
- // TODO: In ICU 64 the above assert was changed to use UPRV_UNREACHABLE instead
- // which unconditionally calls abort(). However, there were cases where this was
- // being hit. This change is reverted for now, restoring the existing behavior.
+ UPRV_UNREACHABLE_ASSERT;
+ // TODO: In ICU 64 the above was changed from U_ASSERT to UPRV_UNREACHABLE,
+ // which unconditionally called abort(). However, there were cases in which it
+ // was being hit, so it was changed back to U_ASSERT per ICU-20680. In ICU 70,
+ // we now use the new UPRV_UNREACHABLE_ASSERT to better indicate the situation.
// ICU-20792 tracks the follow-up work/further investigation on this.
- return NULL;
+ return nullptr;
}
// Manage the circular CE buffer indexing
@@ -3626,7 +1554,10 @@ U_NAMESPACE_END
* has an external break iterator, use that. Otherwise use the internal character
* break iterator.
*/
-static int32_t nextBoundaryAfter(UStringSearch *strsrch, int32_t startIndex) {
+static int32_t nextBoundaryAfter(UStringSearch *strsrch, int32_t startIndex, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return startIndex;
+ }
#if 0
const UChar *text = strsrch->search->text;
int32_t textLen = strsrch->search->textLength;
@@ -3665,17 +1596,12 @@ static int32_t nextBoundaryAfter(UStringSearch *strsrch, int32_t startIndex) {
}
return indexOfLastCharChecked;
#elif !UCONFIG_NO_BREAK_ITERATION
- UBreakIterator *breakiterator = strsrch->search->breakIter;
-
- if (breakiterator == NULL) {
- breakiterator = strsrch->search->internalBreakIter;
- }
-
- if (breakiterator != NULL) {
- return ubrk_following(breakiterator, startIndex);
+ UBreakIterator *breakiterator = getBreakIterator(strsrch, status);
+ if (U_FAILURE(status)) {
+ return startIndex;
}
- return startIndex;
+ return ubrk_following(breakiterator, startIndex);
#else
// **** or should we use the original code? ****
return startIndex;
@@ -3688,7 +1614,10 @@ static int32_t nextBoundaryAfter(UStringSearch *strsrch, int32_t startIndex) {
* has an external break iterator, test using that, otherwise test
* using the internal character break iterator.
*/
-static UBool isBreakBoundary(UStringSearch *strsrch, int32_t index) {
+static UBool isBreakBoundary(UStringSearch *strsrch, int32_t index, UErrorCode &status) {
+ if (U_FAILURE(status)) {
+ return TRUE;
+ }
#if 0
const UChar *text = strsrch->search->text;
int32_t textLen = strsrch->search->textLength;
@@ -3716,13 +1645,12 @@ static UBool isBreakBoundary(UStringSearch *strsrch, int32_t index) {
UBool combining = !(gcProperty==U_GCB_CONTROL || gcProperty==U_GCB_LF || gcProperty==U_GCB_CR);
return !combining;
#elif !UCONFIG_NO_BREAK_ITERATION
- UBreakIterator *breakiterator = strsrch->search->breakIter;
-
- if (breakiterator == NULL) {
- breakiterator = strsrch->search->internalBreakIter;
+ UBreakIterator *breakiterator = getBreakIterator(strsrch, status);
+ if (U_FAILURE(status)) {
+ return TRUE;
}
- return (breakiterator != NULL && ubrk_isBoundary(breakiterator, index));
+ return ubrk_isBoundary(breakiterator, index);
#else
// **** or use the original code? ****
return TRUE;
@@ -3730,12 +1658,15 @@ static UBool isBreakBoundary(UStringSearch *strsrch, int32_t index) {
}
#if 0
-static UBool onBreakBoundaries(const UStringSearch *strsrch, int32_t start, int32_t end)
+static UBool onBreakBoundaries(const UStringSearch *strsrch, int32_t start, int32_t end, UErrorCode &status)
{
-#if !UCONFIG_NO_BREAK_ITERATION
- UBreakIterator *breakiterator = strsrch->search->breakIter;
+ if (U_FAILURE(status)) {
+ return TRUE;
+ }
- if (breakiterator != NULL) {
+#if !UCONFIG_NO_BREAK_ITERATION
+ UBreakIterator *breakiterator = getBreakIterator(strsrch, status);
+ if (U_SUCCESS(status)) {
int32_t startindex = ubrk_first(breakiterator);
int32_t endindex = ubrk_last(breakiterator);
@@ -3813,10 +1744,6 @@ static UCompareCEsResult compareCE64s(int64_t targCE, int64_t patCE, int16_t com
return U_CE_MATCH;
}
-#if BOYER_MOORE
-// TODO: #if BOYER_MOORE, need 32-bit version of compareCE64s
-#endif
-
namespace {
UChar32 codePointAt(const USearch &search, int32_t index) {
@@ -3852,7 +1779,7 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
// TODO: reject search patterns beginning with a combining char.
#ifdef USEARCH_DEBUG
- if (getenv("USEARCH_DEBUG") != NULL) {
+ if (getenv("USEARCH_DEBUG") != nullptr) {
printf("Pattern CEs\n");
for (int ii=0; ii<strsrch->pattern.cesLength; ii++) {
printf(" %8x", strsrch->pattern.ces[ii]);
@@ -3867,21 +1794,26 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
if(strsrch->pattern.cesLength == 0 ||
startIdx < 0 ||
startIdx > strsrch->search->textLength ||
- strsrch->pattern.ces == NULL) {
+ strsrch->pattern.ces == nullptr) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
return FALSE;
}
- if (strsrch->pattern.pces == NULL) {
+ if (strsrch->pattern.pces == nullptr) {
initializePatternPCETable(strsrch, status);
}
ucol_setOffset(strsrch->textIter, startIdx, status);
CEIBuffer ceb(strsrch, status);
+ // An out-of-memory (OOM) failure can occur in the initializePatternPCETable function
+ // or CEIBuffer constructor above, so we need to check the status.
+ if (U_FAILURE(*status)) {
+ return FALSE;
+ }
int32_t targetIx = 0;
- const CEI *targetCEI = NULL;
+ const CEI *targetCEI = nullptr;
int32_t patIx;
UBool found;
@@ -3900,7 +1832,7 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
// 2. An int64_t CE weight is determined for each resulting unit (high 16 bits are primary strength, next
// 16 bits are secondary, next 16 (the high 16 bits of the low 32-bit half) are tertiary. Any of these
// fields that are for strengths below that of the collator are set to 0. If this makes the int64_t
- // CE weight 0 (as for a combining diacritic with secondary weight when the collator strentgh is primary),
+ // CE weight 0 (as for a combining diacritic with secondary weight when the collator strength is primary),
// then the CE is deleted, so the following code sees only CEs that are relevant.
// For each CE, the lowIndex and highIndex correspond to where this CE begins and ends in the original text.
// If lowIndex==highIndex, either the CE resulted from an expansion/decomposition of one of the original text
@@ -3915,9 +1847,9 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
int64_t patCE = 0;
// For targetIx > 0, this ceb.get gets a CE that is as far back in the ring buffer
// (compared to the last CE fetched for the previous targetIx value) as we need to go
- // for this targetIx value, so if it is non-NULL then other ceb.get calls should be OK.
+ // for this targetIx value, so if it is non-nullptr then other ceb.get calls should be OK.
const CEI *firstCEI = ceb.get(targetIx);
- if (firstCEI == NULL) {
+ if (firstCEI == nullptr) {
*status = U_INTERNAL_PROGRAM_ERROR;
found = FALSE;
break;
@@ -3946,7 +1878,7 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
}
targetIxOffset += strsrch->pattern.pcesLength; // this is now the offset in target CE space to end of the match so far
- if (!found && ((targetCEI == NULL) || (targetCEI->ce != UCOL_PROCESSED_NULLORDER))) {
+ if (!found && ((targetCEI == nullptr) || (targetCEI->ce != UCOL_PROCESSED_NULLORDER))) {
// No match at this targetIx. Try again at the next.
continue;
}
@@ -4018,9 +1950,12 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
// to something else.
// This type of match should be rejected for not completely consuming a
// combining sequence.
- if (!isBreakBoundary(strsrch, mStart)) {
+ if (!isBreakBoundary(strsrch, mStart, *status)) {
found = FALSE;
}
+ if (U_FAILURE(*status)) {
+ break;
+ }
// Check for the start of the match being within an Collation Element Expansion,
// meaning that the first char of the match is only partially matched.
@@ -4044,10 +1979,10 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
// tests in any case)
// * the match limit is a normalization boundary
UBool allowMidclusterMatch = FALSE;
- if (strsrch->search->text != NULL && strsrch->search->textLength > maxLimit) {
+ if (strsrch->search->text != nullptr && strsrch->search->textLength > maxLimit) {
allowMidclusterMatch =
- strsrch->search->breakIter == NULL &&
- nextCEI != NULL && (((nextCEI->ce) >> 32) & 0xFFFF0000UL) != 0 &&
+ strsrch->search->breakIter == nullptr &&
+ nextCEI != nullptr && (((nextCEI->ce) >> 32) & 0xFFFF0000UL) != 0 &&
maxLimit >= lastCEI->highIndex && nextCEI->highIndex > maxLimit &&
(strsrch->nfd->hasBoundaryBefore(codePointAt(*strsrch->search, maxLimit)) ||
strsrch->nfd->hasBoundaryAfter(codePointBefore(*strsrch->search, maxLimit)));
@@ -4061,7 +1996,7 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
// * do NOT require that match limit be on a breakIter boundary
// Advance the match end position to the first acceptable match boundary.
- // This advances the index over any combining charcters.
+ // This advances the index over any combining characters.
mLimit = maxLimit;
if (minLimit < maxLimit) {
// When the last CE's low index is same with its high index, the CE is likely
@@ -4070,10 +2005,10 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
// at the break boundary, move the position to the next boundary will result
// incorrect match length when there are ignorable characters exist between
// the position and the next character produces CE(s). See ticket#8482.
- if (minLimit == lastCEI->highIndex && isBreakBoundary(strsrch, minLimit)) {
+ if (minLimit == lastCEI->highIndex && isBreakBoundary(strsrch, minLimit, *status)) {
mLimit = minLimit;
} else {
- int32_t nba = nextBoundaryAfter(strsrch, minLimit);
+ int32_t nba = nextBoundaryAfter(strsrch, minLimit, *status);
// Note that we can have nba < maxLimit && nba >= minLImit, in which
// case we want to set mLimit to nba regardless of allowMidclusterMatch
// (i.e. we back off mLimit to the previous breakIterator boundary).
@@ -4083,8 +2018,12 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
}
}
+ if (U_FAILURE(*status)) {
+ break;
+ }
+
#ifdef USEARCH_DEBUG
- if (getenv("USEARCH_DEBUG") != NULL) {
+ if (getenv("USEARCH_DEBUG") != nullptr) {
printf("minLimit, maxLimit, mLimit = %d, %d, %d\n", minLimit, maxLimit, mLimit);
}
#endif
@@ -4096,9 +2035,12 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
found = FALSE;
}
- if (!isBreakBoundary(strsrch, mLimit)) {
+ if (!isBreakBoundary(strsrch, mLimit, *status)) {
found = FALSE;
}
+ if (U_FAILURE(*status)) {
+ break;
+ }
}
if (! checkIdentical(strsrch, mStart, mLimit)) {
@@ -4111,7 +2053,7 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
}
#ifdef USEARCH_DEBUG
- if (getenv("USEARCH_DEBUG") != NULL) {
+ if (getenv("USEARCH_DEBUG") != nullptr) {
printf("Target CEs [%d .. %d]\n", ceb.firstIx, ceb.limitIx);
int32_t lastToPrint = ceb.limitIx+2;
for (int ii=ceb.firstIx; ii<lastToPrint; ii++) {
@@ -4123,16 +2065,21 @@ U_CAPI UBool U_EXPORT2 usearch_search(UStringSearch *strsrch,
// All Done. Store back the match bounds to the caller.
//
+
+ if (U_FAILURE(*status)) {
+ found = FALSE; // No match if a failure occured.
+ }
+
if (found==FALSE) {
mLimit = -1;
mStart = -1;
}
- if (matchStart != NULL) {
+ if (matchStart != nullptr) {
*matchStart= mStart;
}
- if (matchLimit != NULL) {
+ if (matchLimit != nullptr) {
*matchLimit = mLimit;
}
@@ -4152,7 +2099,7 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
// TODO: reject search patterns beginning with a combining char.
#ifdef USEARCH_DEBUG
- if (getenv("USEARCH_DEBUG") != NULL) {
+ if (getenv("USEARCH_DEBUG") != nullptr) {
printf("Pattern CEs\n");
for (int ii=0; ii<strsrch->pattern.cesLength; ii++) {
printf(" %8x", strsrch->pattern.ces[ii]);
@@ -4162,17 +2109,17 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
#endif
// Input parameter sanity check.
- // TODO: should input indicies clip to the text length
+ // TODO: should input indices clip to the text length
// in the same way that UText does.
- if(strsrch->pattern.cesLength == 0 ||
+ if(strsrch->pattern.cesLength == 0 ||
startIdx < 0 ||
startIdx > strsrch->search->textLength ||
- strsrch->pattern.ces == NULL) {
+ strsrch->pattern.ces == nullptr) {
*status = U_ILLEGAL_ARGUMENT_ERROR;
return FALSE;
}
- if (strsrch->pattern.pces == NULL) {
+ if (strsrch->pattern.pces == nullptr) {
initializePatternPCETable(strsrch, status);
}
@@ -4189,8 +2136,11 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
* consider for the match.
*/
if (startIdx < strsrch->search->textLength) {
- UBreakIterator *bi = strsrch->search->internalBreakIter;
- int32_t next = ubrk_following(bi, startIdx);
+ UBreakIterator *breakiterator = getBreakIterator(strsrch, *status);
+ if (U_FAILURE(*status)) {
+ return FALSE;
+ }
+ int32_t next = ubrk_following(breakiterator, startIdx);
ucol_setOffset(strsrch->textIter, next, status);
@@ -4203,8 +2153,12 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
ucol_setOffset(strsrch->textIter, startIdx, status);
}
+ // An out-of-memory (OOM) failure can occur above, so we need to check the status.
+ if (U_FAILURE(*status)) {
+ return FALSE;
+ }
- const CEI *targetCEI = NULL;
+ const CEI *targetCEI = nullptr;
int32_t patIx;
UBool found;
@@ -4227,9 +2181,9 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
found = TRUE;
// For targetIx > limitIx, this ceb.getPrevious gets a CE that is as far back in the ring buffer
// (compared to the last CE fetched for the previous targetIx value) as we need to go
- // for this targetIx value, so if it is non-NULL then other ceb.getPrevious calls should be OK.
+ // for this targetIx value, so if it is non-nullptr then other ceb.getPrevious calls should be OK.
const CEI *lastCEI = ceb.getPrevious(targetIx);
- if (lastCEI == NULL) {
+ if (lastCEI == nullptr) {
*status = U_INTERNAL_PROGRAM_ERROR;
found = FALSE;
break;
@@ -4260,7 +2214,7 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
}
}
- if (!found && ((targetCEI == NULL) || (targetCEI->ce != UCOL_PROCESSED_NULLORDER))) {
+ if (!found && ((targetCEI == nullptr) || (targetCEI->ce != UCOL_PROCESSED_NULLORDER))) {
// No match at this targetIx. Try again at the next.
continue;
}
@@ -4285,9 +2239,12 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
// to something else.
// This type of match should be rejected for not completely consuming a
// combining sequence.
- if (!isBreakBoundary(strsrch, mStart)) {
+ if (!isBreakBoundary(strsrch, mStart, *status)) {
found = FALSE;
}
+ if (U_FAILURE(*status)) {
+ break;
+ }
// Look at the high index of the first CE in the match. If it's the same as the
// low index, the first CE in the match is in the middle of an expansion.
@@ -4327,10 +2284,10 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
// tests in any case)
// * the match limit is a normalization boundary
UBool allowMidclusterMatch = FALSE;
- if (strsrch->search->text != NULL && strsrch->search->textLength > maxLimit) {
+ if (strsrch->search->text != nullptr && strsrch->search->textLength > maxLimit) {
allowMidclusterMatch =
- strsrch->search->breakIter == NULL &&
- nextCEI != NULL && (((nextCEI->ce) >> 32) & 0xFFFF0000UL) != 0 &&
+ strsrch->search->breakIter == nullptr &&
+ nextCEI != nullptr && (((nextCEI->ce) >> 32) & 0xFFFF0000UL) != 0 &&
maxLimit >= lastCEI->highIndex && nextCEI->highIndex > maxLimit &&
(strsrch->nfd->hasBoundaryBefore(codePointAt(*strsrch->search, maxLimit)) ||
strsrch->nfd->hasBoundaryAfter(codePointBefore(*strsrch->search, maxLimit)));
@@ -4346,7 +2303,7 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
// Advance the match end position to the first acceptable match boundary.
// This advances the index over any combining characters.
if (minLimit < maxLimit) {
- int32_t nba = nextBoundaryAfter(strsrch, minLimit);
+ int32_t nba = nextBoundaryAfter(strsrch, minLimit, *status);
// Note that we can have nba < maxLimit && nba >= minLImit, in which
// case we want to set mLimit to nba regardless of allowMidclusterMatch
// (i.e. we back off mLimit to the previous breakIterator boundary).
@@ -4363,9 +2320,12 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
}
// Make sure the end of the match is on a break boundary
- if (!isBreakBoundary(strsrch, mLimit)) {
+ if (!isBreakBoundary(strsrch, mLimit, *status)) {
found = FALSE;
}
+ if (U_FAILURE(*status)) {
+ break;
+ }
}
} else {
@@ -4373,12 +2333,12 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
// The maximum position is detected by boundary after
// the last non-ignorable CE. Combining sequence
// across the start index will be truncated.
- int32_t nba = nextBoundaryAfter(strsrch, minLimit);
+ int32_t nba = nextBoundaryAfter(strsrch, minLimit, *status);
mLimit = maxLimit = (nba > 0) && (startIdx > nba) ? nba : startIdx;
}
#ifdef USEARCH_DEBUG
- if (getenv("USEARCH_DEBUG") != NULL) {
+ if (getenv("USEARCH_DEBUG") != nullptr) {
printf("minLimit, maxLimit, mLimit = %d, %d, %d\n", minLimit, maxLimit, mLimit);
}
#endif
@@ -4394,7 +2354,7 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
}
#ifdef USEARCH_DEBUG
- if (getenv("USEARCH_DEBUG") != NULL) {
+ if (getenv("USEARCH_DEBUG") != nullptr) {
printf("Target CEs [%d .. %d]\n", ceb.firstIx, ceb.limitIx);
int32_t lastToPrint = ceb.limitIx+2;
for (int ii=ceb.firstIx; ii<lastToPrint; ii++) {
@@ -4406,16 +2366,21 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
// All Done. Store back the match bounds to the caller.
//
+
+ if (U_FAILURE(*status)) {
+ found = FALSE; // No match if a failure occured.
+ }
+
if (found==FALSE) {
mLimit = -1;
mStart = -1;
}
- if (matchStart != NULL) {
+ if (matchStart != nullptr) {
*matchStart= mStart;
}
- if (matchLimit != NULL) {
+ if (matchLimit != nullptr) {
*matchLimit = mLimit;
}
@@ -4427,102 +2392,10 @@ U_CAPI UBool U_EXPORT2 usearch_searchBackwards(UStringSearch *strsrch,
UBool usearch_handleNextExact(UStringSearch *strsrch, UErrorCode *status)
{
if (U_FAILURE(*status)) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
-#if BOYER_MOORE
- UCollationElements *coleiter = strsrch->textIter;
- int32_t textlength = strsrch->search->textLength;
- int32_t *patternce = strsrch->pattern.ces;
- int32_t patterncelength = strsrch->pattern.cesLength;
- int32_t textoffset = ucol_getOffset(coleiter);
-
- // status used in setting coleiter offset, since offset is checked in
- // shiftForward before setting the coleiter offset, status never
- // a failure
- textoffset = shiftForward(strsrch, textoffset, UCOL_NULLORDER,
- patterncelength);
- while (textoffset <= textlength)
- {
- uint32_t patternceindex = patterncelength - 1;
- int32_t targetce;
- UBool found = FALSE;
- int32_t lastce = UCOL_NULLORDER;
-
- setColEIterOffset(coleiter, textoffset);
-
- for (;;) {
- // finding the last pattern ce match, imagine composite characters
- // for example: search for pattern A in text \u00C0
- // we'll have to skip \u0300 the grave first before we get to A
- targetce = ucol_previous(coleiter, status);
- if (U_FAILURE(*status) || targetce == UCOL_NULLORDER) {
- found = FALSE;
- break;
- }
- targetce = getCE(strsrch, targetce);
- if (targetce == UCOL_IGNORABLE && inNormBuf(coleiter)) {
- // this is for the text \u0315\u0300 that requires
- // normalization and pattern \u0300, where \u0315 is ignorable
- continue;
- }
- if (lastce == UCOL_NULLORDER || lastce == UCOL_IGNORABLE) {
- lastce = targetce;
- }
- // TODO: #if BOYER_MOORE, replace with code using 32-bit version of compareCE64s
- if (targetce == patternce[patternceindex]) {
- // the first ce can be a contraction
- found = TRUE;
- break;
- }
- if (!hasExpansion(coleiter)) {
- found = FALSE;
- break;
- }
- }
-
- //targetce = lastce;
-
- while (found && patternceindex > 0) {
- lastce = targetce;
- targetce = ucol_previous(coleiter, status);
- if (U_FAILURE(*status) || targetce == UCOL_NULLORDER) {
- found = FALSE;
- break;
- }
- targetce = getCE(strsrch, targetce);
- if (targetce == UCOL_IGNORABLE) {
- continue;
- }
-
- patternceindex --;
- // TODO: #if BOYER_MOORE, replace with code using 32-bit version of compareCE64s
- found = found && targetce == patternce[patternceindex];
- }
-
- targetce = lastce;
-
- if (!found) {
- if (U_FAILURE(*status)) {
- break;
- }
- textoffset = shiftForward(strsrch, textoffset, lastce,
- patternceindex);
- // status checked at loop.
- patternceindex = patterncelength;
- continue;
- }
-
- if (checkNextExactMatch(strsrch, &textoffset, status)) {
- // status checked in ucol_setOffset
- setColEIterOffset(coleiter, strsrch->search->matchedIndex);
- return TRUE;
- }
- }
- setMatchNotFound(strsrch);
- return FALSE;
-#else
int32_t textOffset = ucol_getOffset(strsrch->textIter);
int32_t start = -1;
int32_t end = -1;
@@ -4532,112 +2405,18 @@ UBool usearch_handleNextExact(UStringSearch *strsrch, UErrorCode *status)
strsrch->search->matchedLength = end - start;
return TRUE;
} else {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
-#endif
}
UBool usearch_handleNextCanonical(UStringSearch *strsrch, UErrorCode *status)
{
if (U_FAILURE(*status)) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
-#if BOYER_MOORE
- UCollationElements *coleiter = strsrch->textIter;
- int32_t textlength = strsrch->search->textLength;
- int32_t *patternce = strsrch->pattern.ces;
- int32_t patterncelength = strsrch->pattern.cesLength;
- int32_t textoffset = ucol_getOffset(coleiter);
- UBool hasPatternAccents =
- strsrch->pattern.hasSuffixAccents || strsrch->pattern.hasPrefixAccents;
-
- textoffset = shiftForward(strsrch, textoffset, UCOL_NULLORDER,
- patterncelength);
- strsrch->canonicalPrefixAccents[0] = 0;
- strsrch->canonicalSuffixAccents[0] = 0;
-
- while (textoffset <= textlength)
- {
- int32_t patternceindex = patterncelength - 1;
- int32_t targetce;
- UBool found = FALSE;
- int32_t lastce = UCOL_NULLORDER;
-
- setColEIterOffset(coleiter, textoffset);
-
- for (;;) {
- // finding the last pattern ce match, imagine composite characters
- // for example: search for pattern A in text \u00C0
- // we'll have to skip \u0300 the grave first before we get to A
- targetce = ucol_previous(coleiter, status);
- if (U_FAILURE(*status) || targetce == UCOL_NULLORDER) {
- found = FALSE;
- break;
- }
- targetce = getCE(strsrch, targetce);
- if (lastce == UCOL_NULLORDER || lastce == UCOL_IGNORABLE) {
- lastce = targetce;
- }
- // TODO: #if BOYER_MOORE, replace with code using 32-bit version of compareCE64s
- if (targetce == patternce[patternceindex]) {
- // the first ce can be a contraction
- found = TRUE;
- break;
- }
- if (!hasExpansion(coleiter)) {
- found = FALSE;
- break;
- }
- }
-
- while (found && patternceindex > 0) {
- targetce = ucol_previous(coleiter, status);
- if (U_FAILURE(*status) || targetce == UCOL_NULLORDER) {
- found = FALSE;
- break;
- }
- targetce = getCE(strsrch, targetce);
- if (targetce == UCOL_IGNORABLE) {
- continue;
- }
-
- patternceindex --;
- // TODO: #if BOYER_MOORE, replace with code using 32-bit version of compareCE64s
- found = found && targetce == patternce[patternceindex];
- }
-
- // initializing the rearranged accent array
- if (hasPatternAccents && !found) {
- strsrch->canonicalPrefixAccents[0] = 0;
- strsrch->canonicalSuffixAccents[0] = 0;
- if (U_FAILURE(*status)) {
- break;
- }
- found = doNextCanonicalMatch(strsrch, textoffset, status);
- }
-
- if (!found) {
- if (U_FAILURE(*status)) {
- break;
- }
- textoffset = shiftForward(strsrch, textoffset, lastce,
- patternceindex);
- // status checked at loop
- patternceindex = patterncelength;
- continue;
- }
-
- if (checkNextCanonicalMatch(strsrch, &textoffset, status)) {
- setColEIterOffset(coleiter, strsrch->search->matchedIndex);
- return TRUE;
- }
- }
- setMatchNotFound(strsrch);
- return FALSE;
-#else
int32_t textOffset = ucol_getOffset(strsrch->textIter);
int32_t start = -1;
int32_t end = -1;
@@ -4647,114 +2426,18 @@ UBool usearch_handleNextCanonical(UStringSearch *strsrch, UErrorCode *status)
strsrch->search->matchedLength = end - start;
return TRUE;
} else {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
-#endif
}
UBool usearch_handlePreviousExact(UStringSearch *strsrch, UErrorCode *status)
{
if (U_FAILURE(*status)) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
-#if BOYER_MOORE
- UCollationElements *coleiter = strsrch->textIter;
- int32_t *patternce = strsrch->pattern.ces;
- int32_t patterncelength = strsrch->pattern.cesLength;
- int32_t textoffset = ucol_getOffset(coleiter);
-
- // shifting it check for setting offset
- // if setOffset is called previously or there was no previous match, we
- // leave the offset as it is.
- if (strsrch->search->matchedIndex != USEARCH_DONE) {
- textoffset = strsrch->search->matchedIndex;
- }
-
- textoffset = reverseShift(strsrch, textoffset, UCOL_NULLORDER,
- patterncelength);
-
- while (textoffset >= 0)
- {
- int32_t patternceindex = 1;
- int32_t targetce;
- UBool found = FALSE;
- int32_t firstce = UCOL_NULLORDER;
-
- // if status is a failure, ucol_setOffset does nothing
- setColEIterOffset(coleiter, textoffset);
-
- for (;;) {
- // finding the first pattern ce match, imagine composite
- // characters. for example: search for pattern \u0300 in text
- // \u00C0, we'll have to skip A first before we get to
- // \u0300 the grave accent
- targetce = ucol_next(coleiter, status);
- if (U_FAILURE(*status) || targetce == UCOL_NULLORDER) {
- found = FALSE;
- break;
- }
- targetce = getCE(strsrch, targetce);
- if (firstce == UCOL_NULLORDER || firstce == UCOL_IGNORABLE) {
- firstce = targetce;
- }
- if (targetce == UCOL_IGNORABLE && strsrch->strength != UCOL_PRIMARY) {
- continue;
- }
- // TODO: #if BOYER_MOORE, replace with code using 32-bit version of compareCE64s
- if (targetce == patternce[0]) {
- found = TRUE;
- break;
- }
- if (!hasExpansion(coleiter)) {
- // checking for accents in composite character
- found = FALSE;
- break;
- }
- }
-
- //targetce = firstce;
-
- while (found && (patternceindex < patterncelength)) {
- firstce = targetce;
- targetce = ucol_next(coleiter, status);
- if (U_FAILURE(*status) || targetce == UCOL_NULLORDER) {
- found = FALSE;
- break;
- }
- targetce = getCE(strsrch, targetce);
- if (targetce == UCOL_IGNORABLE) {
- continue;
- }
-
- // TODO: #if BOYER_MOORE, replace with code using 32-bit version of compareCE64s
- found = found && targetce == patternce[patternceindex];
- patternceindex ++;
- }
-
- targetce = firstce;
-
- if (!found) {
- if (U_FAILURE(*status)) {
- break;
- }
-
- textoffset = reverseShift(strsrch, textoffset, targetce,
- patternceindex);
- patternceindex = 0;
- continue;
- }
-
- if (checkPreviousExactMatch(strsrch, &textoffset, status)) {
- setColEIterOffset(coleiter, textoffset);
- return TRUE;
- }
- }
- setMatchNotFound(strsrch);
- return FALSE;
-#else
int32_t textOffset;
if (strsrch->search->isOverlap) {
@@ -4764,18 +2447,18 @@ UBool usearch_handlePreviousExact(UStringSearch *strsrch, UErrorCode *status)
// move the start position at the end of possible match
initializePatternPCETable(strsrch, status);
if (!initTextProcessedIter(strsrch, status)) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
for (int32_t nPCEs = 0; nPCEs < strsrch->pattern.pcesLength - 1; nPCEs++) {
- int64_t pce = strsrch->textProcessedIter->nextProcessed(NULL, NULL, status);
+ int64_t pce = strsrch->textProcessedIter->nextProcessed(nullptr, nullptr, status);
if (pce == UCOL_PROCESSED_NULLORDER) {
// at the end of the text
break;
}
}
if (U_FAILURE(*status)) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
textOffset = ucol_getOffset(strsrch->textIter);
@@ -4792,122 +2475,19 @@ UBool usearch_handlePreviousExact(UStringSearch *strsrch, UErrorCode *status)
strsrch->search->matchedLength = end - start;
return TRUE;
} else {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
-#endif
}
UBool usearch_handlePreviousCanonical(UStringSearch *strsrch,
UErrorCode *status)
{
if (U_FAILURE(*status)) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
-#if BOYER_MOORE
- UCollationElements *coleiter = strsrch->textIter;
- int32_t *patternce = strsrch->pattern.ces;
- int32_t patterncelength = strsrch->pattern.cesLength;
- int32_t textoffset = ucol_getOffset(coleiter);
- UBool hasPatternAccents =
- strsrch->pattern.hasSuffixAccents || strsrch->pattern.hasPrefixAccents;
-
- // shifting it check for setting offset
- // if setOffset is called previously or there was no previous match, we
- // leave the offset as it is.
- if (strsrch->search->matchedIndex != USEARCH_DONE) {
- textoffset = strsrch->search->matchedIndex;
- }
-
- textoffset = reverseShift(strsrch, textoffset, UCOL_NULLORDER,
- patterncelength);
- strsrch->canonicalPrefixAccents[0] = 0;
- strsrch->canonicalSuffixAccents[0] = 0;
-
- while (textoffset >= 0)
- {
- int32_t patternceindex = 1;
- int32_t targetce;
- UBool found = FALSE;
- int32_t firstce = UCOL_NULLORDER;
-
- setColEIterOffset(coleiter, textoffset);
- for (;;) {
- // finding the first pattern ce match, imagine composite
- // characters. for example: search for pattern \u0300 in text
- // \u00C0, we'll have to skip A first before we get to
- // \u0300 the grave accent
- targetce = ucol_next(coleiter, status);
- if (U_FAILURE(*status) || targetce == UCOL_NULLORDER) {
- found = FALSE;
- break;
- }
- targetce = getCE(strsrch, targetce);
- if (firstce == UCOL_NULLORDER || firstce == UCOL_IGNORABLE) {
- firstce = targetce;
- }
-
- // TODO: #if BOYER_MOORE, replace with code using 32-bit version of compareCE64s
- if (targetce == patternce[0]) {
- // the first ce can be a contraction
- found = TRUE;
- break;
- }
- if (!hasExpansion(coleiter)) {
- // checking for accents in composite character
- found = FALSE;
- break;
- }
- }
-
- targetce = firstce;
-
- while (found && patternceindex < patterncelength) {
- targetce = ucol_next(coleiter, status);
- if (U_FAILURE(*status) || targetce == UCOL_NULLORDER) {
- found = FALSE;
- break;
- }
- targetce = getCE(strsrch, targetce);
- if (targetce == UCOL_IGNORABLE) {
- continue;
- }
-
- // TODO: #if BOYER_MOORE, replace with code using 32-bit version of compareCE64s
- found = found && targetce == patternce[patternceindex];
- patternceindex ++;
- }
-
- // initializing the rearranged accent array
- if (hasPatternAccents && !found) {
- strsrch->canonicalPrefixAccents[0] = 0;
- strsrch->canonicalSuffixAccents[0] = 0;
- if (U_FAILURE(*status)) {
- break;
- }
- found = doPreviousCanonicalMatch(strsrch, textoffset, status);
- }
-
- if (!found) {
- if (U_FAILURE(*status)) {
- break;
- }
- textoffset = reverseShift(strsrch, textoffset, targetce,
- patternceindex);
- patternceindex = 0;
- continue;
- }
-
- if (checkPreviousCanonicalMatch(strsrch, &textoffset, status)) {
- setColEIterOffset(coleiter, textoffset);
- return TRUE;
- }
- }
- setMatchNotFound(strsrch);
- return FALSE;
-#else
int32_t textOffset;
if (strsrch->search->isOverlap) {
@@ -4917,18 +2497,18 @@ UBool usearch_handlePreviousCanonical(UStringSearch *strsrch,
// move the start position at the end of possible match
initializePatternPCETable(strsrch, status);
if (!initTextProcessedIter(strsrch, status)) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
for (int32_t nPCEs = 0; nPCEs < strsrch->pattern.pcesLength - 1; nPCEs++) {
- int64_t pce = strsrch->textProcessedIter->nextProcessed(NULL, NULL, status);
+ int64_t pce = strsrch->textProcessedIter->nextProcessed(nullptr, nullptr, status);
if (pce == UCOL_PROCESSED_NULLORDER) {
// at the end of the text
break;
}
}
if (U_FAILURE(*status)) {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
textOffset = ucol_getOffset(strsrch->textIter);
@@ -4945,10 +2525,9 @@ UBool usearch_handlePreviousCanonical(UStringSearch *strsrch,
strsrch->search->matchedLength = end - start;
return TRUE;
} else {
- setMatchNotFound(strsrch);
+ setMatchNotFound(strsrch, *status);
return FALSE;
}
-#endif
}
#endif /* #if !UCONFIG_NO_COLLATION */
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp b/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
index 33682389f5b..dd4618baa70 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
@@ -82,63 +82,66 @@ void U_CALLCONV initializeStatics(UErrorCode &status) {
u"\\u04FF\\u0510-\\u0529\\u052E\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0586"
u"\\u05B4\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u0655\\u0660-"
u"\\u0669\\u0670-\\u0672\\u0674\\u0679-\\u068D\\u068F-\\u06A0\\u06A2-\\u06D3"
- u"\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0750-\\u07B1\\u08A0-\\u08AC"
- u"\\u08B2\\u08B6-\\u08C7\\u0901-\\u094D\\u094F\\u0950\\u0956\\u0957\\u0960-"
- u"\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-"
- u"\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9"
- u"\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09E0-\\u09E3\\u09E6-"
- u"\\u09F1\\u09FE\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28"
- u"\\u0A2A-\\u0A30\\u0A32\\u0A35\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47"
- u"\\u0A48\\u0A4B-\\u0A4D\\u0A5C\\u0A66-\\u0A74\\u0A81-\\u0A83\\u0A85-\\u0A8D"
- u"\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9"
- u"\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-"
- u"\\u0AEF\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-"
- u"\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B43\\u0B47"
- u"\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71"
- u"\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A"
- u"\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-"
- u"\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-"
- u"\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-"
- u"\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C60\\u0C61\\u0C66-"
- u"\\u0C6F\\u0C80\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8"
- u"\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD"
- u"\\u0CD5\\u0CD6\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00\\u0D02"
- u"\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D43\\u0D46-"
- u"\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D60\\u0D61\\u0D66-\\u0D6F\\u0D7A-"
- u"\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D8E\\u0D91-\\u0D96\\u0D9A-\\u0DA5\\u0DA7-"
- u"\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6"
- u"\\u0DD8-\\u0DDE\\u0DF2\\u0E01-\\u0E32\\u0E34-\\u0E3A\\u0E40-\\u0E4E\\u0E50-"
- u"\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-"
- u"\\u0EB2\\u0EB4-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9"
- u"\\u0EDE\\u0EDF\\u0F00\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F3E-\\u0F42\\u0F44-"
- u"\\u0F47\\u0F49-\\u0F4C\\u0F4E-\\u0F51\\u0F53-\\u0F56\\u0F58-\\u0F5B\\u0F5D-"
- u"\\u0F68\\u0F6A-\\u0F6C\\u0F71\\u0F72\\u0F74\\u0F7A-\\u0F80\\u0F82-\\u0F84"
- u"\\u0F86-\\u0F92\\u0F94-\\u0F97\\u0F99-\\u0F9C\\u0F9E-\\u0FA1\\u0FA3-\\u0FA6"
- u"\\u0FA8-\\u0FAB\\u0FAD-\\u0FB8\\u0FBA-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-"
- u"\\u109D\\u10C7\\u10CD\\u10D0-\\u10F0\\u10F7-\\u10FA\\u10FD-\\u10FF\\u1200-"
- u"\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288"
- u"\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-"
- u"\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-"
- u"\\u135F\\u1380-\\u138F\\u1780-\\u17A2\\u17A5-\\u17A7\\u17A9-\\u17B3\\u17B6-"
- u"\\u17CA\\u17D2\\u17D7\\u17DC\\u17E0-\\u17E9\\u1C90-\\u1CBA\\u1CBD-\\u1CBF"
- u"\\u1E00-\\u1E99\\u1E9E\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-"
- u"\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F70"
- u"\\u1F72\\u1F74\\u1F76\\u1F78\\u1F7A\\u1F7C\\u1F80-\\u1FB4\\u1FB6-\\u1FBA"
- u"\\u1FBC\\u1FC2-\\u1FC4\\u1FC6-\\u1FC8\\u1FCA\\u1FCC\\u1FD0-\\u1FD2\\u1FD6-"
- u"\\u1FDA\\u1FE0-\\u1FE2\\u1FE4-\\u1FEA\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FF8"
- u"\\u1FFA\\u1FFC\\u2D27\\u2D2D\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE"
- u"\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6"
- u"\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3041-\\u3096\\u3099\\u309A\\u309D\\u309E"
- u"\\u30A1-\\u30FA\\u30FC-\\u30FE\\u3105-\\u312D\\u312F\\u31A0-\\u31BF\\u3400-"
- u"\\u4DBF\\u4E00-\\u9FFC\\uA67F\\uA717-\\uA71F\\uA788\\uA78D\\uA792\\uA793"
- u"\\uA7AA\\uA7AE\\uA7B8\\uA7B9\\uA7C2-\\uA7CA\\uA9E7-\\uA9FE\\uAA60-\\uAA76"
- u"\\uAA7A-\\uAA7F\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26"
- u"\\uAB28-\\uAB2E\\uAB66\\uAB67\\uAC00-\\uD7A3\\uFA0E\\uFA0F\\uFA11\\uFA13"
- u"\\uFA14\\uFA1F\\uFA21\\uFA23\\uFA24\\uFA27-\\uFA29\\U00011301\\U00011303"
- u"\\U0001133B\\U0001133C\\U00016FF0\\U00016FF1\\U0001B150-\\U0001B152"
- u"\\U0001B164-\\U0001B167\\U00020000-\\U0002A6DD\\U0002A700-\\U0002B734"
- u"\\U0002B740-\\U0002B81D\\U0002B820-\\U0002CEA1\\U0002CEB0-\\U0002EBE0"
- u"\\U00030000-\\U0003134A]";
+ u"\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0750-\\u07B1\\u0870-\\u0887"
+ u"\\u0889-\\u088E\\u08A0-\\u08AC\\u08B2\\u08B5-\\u08C9\\u0901-\\u094D\\u094F"
+ u"\\u0950\\u0956\\u0957\\u0960-\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-"
+ u"\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-"
+ u"\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE"
+ u"\\u09D7\\u09E0-\\u09E3\\u09E6-\\u09F1\\u09FE\\u0A01-\\u0A03\\u0A05-\\u0A0A"
+ u"\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A35\\u0A38\\u0A39"
+ u"\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A5C\\u0A66-\\u0A74"
+ u"\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0"
+ u"\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD"
+ u"\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B05-"
+ u"\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-"
+ u"\\u0B39\\u0B3C-\\u0B43\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B5F-"
+ u"\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90"
+ u"\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-"
+ u"\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0"
+ u"\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-"
+ u"\\u0C33\\u0C35-\\u0C39\\u0C3C-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55"
+ u"\\u0C56\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80\\u0C82\\u0C83\\u0C85-"
+ u"\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-"
+ u"\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDD\\u0CE0-\\u0CE3"
+ u"\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0D0E-"
+ u"\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-"
+ u"\\u0D57\\u0D60\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-"
+ u"\\u0D8E\\u0D91-\\u0D96\\u0D9A-\\u0DA5\\u0DA7-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD"
+ u"\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDE\\u0DF2\\u0E01-"
+ u"\\u0E32\\u0E34-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84"
+ u"\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB2\\u0EB4-\\u0EBD\\u0EC0-"
+ u"\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDE\\u0EDF\\u0F00\\u0F20-"
+ u"\\u0F29\\u0F35\\u0F37\\u0F3E-\\u0F42\\u0F44-\\u0F47\\u0F49-\\u0F4C\\u0F4E-"
+ u"\\u0F51\\u0F53-\\u0F56\\u0F58-\\u0F5B\\u0F5D-\\u0F68\\u0F6A-\\u0F6C\\u0F71"
+ u"\\u0F72\\u0F74\\u0F7A-\\u0F80\\u0F82-\\u0F84\\u0F86-\\u0F92\\u0F94-\\u0F97"
+ u"\\u0F99-\\u0F9C\\u0F9E-\\u0FA1\\u0FA3-\\u0FA6\\u0FA8-\\u0FAB\\u0FAD-\\u0FB8"
+ u"\\u0FBA-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10C7\\u10CD\\u10D0-"
+ u"\\u10F0\\u10F7-\\u10FA\\u10FD-\\u10FF\\u1200-\\u1248\\u124A-\\u124D\\u1250-"
+ u"\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0"
+ u"\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-"
+ u"\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u1780-"
+ u"\\u17A2\\u17A5-\\u17A7\\u17A9-\\u17B3\\u17B6-\\u17CD\\u17D0\\u17D2\\u17D7"
+ u"\\u17DC\\u17E0-\\u17E9\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1E00-\\u1E99\\u1E9E"
+ u"\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D"
+ u"\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F70\\u1F72\\u1F74\\u1F76"
+ u"\\u1F78\\u1F7A\\u1F7C\\u1F80-\\u1FB4\\u1FB6-\\u1FBA\\u1FBC\\u1FC2-\\u1FC4"
+ u"\\u1FC6-\\u1FC8\\u1FCA\\u1FCC\\u1FD0-\\u1FD2\\u1FD6-\\u1FDA\\u1FE0-\\u1FE2"
+ u"\\u1FE4-\\u1FEA\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FF8\\u1FFA\\u1FFC\\u2D27"
+ u"\\u2D2D\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-"
+ u"\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-"
+ u"\\u3007\\u3041-\\u3096\\u3099\\u309A\\u309D\\u309E\\u30A1-\\u30FA\\u30FC-"
+ u"\\u30FE\\u3105-\\u312D\\u312F\\u31A0-\\u31BF\\u3400-\\u4DBF\\u4E00-\\u9FFF"
+ u"\\uA67F\\uA717-\\uA71F\\uA788\\uA78D\\uA792\\uA793\\uA7AA\\uA7AE\\uA7B8"
+ u"\\uA7B9\\uA7C0-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA9E7-\\uA9FE"
+ u"\\uAA60-\\uAA76\\uAA7A-\\uAA7F\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16"
+ u"\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB66\\uAB67\\uAC00-\\uD7A3\\uFA0E\\uFA0F"
+ u"\\uFA11\\uFA13\\uFA14\\uFA1F\\uFA21\\uFA23\\uFA24\\uFA27-\\uFA29\\U00011301"
+ u"\\U00011303\\U0001133B\\U0001133C\\U00016FF0\\U00016FF1\\U0001B11F-"
+ u"\\U0001B122\\U0001B150-\\U0001B152\\U0001B164-\\U0001B167\\U0001DF00-"
+ u"\\U0001DF1E\\U0001E7E0-\\U0001E7E6\\U0001E7E8-\\U0001E7EB\\U0001E7ED"
+ u"\\U0001E7EE\\U0001E7F0-\\U0001E7FE\\U00020000-\\U0002A6DF\\U0002A700-"
+ u"\\U0002B738\\U0002B740-\\U0002B81D\\U0002B820-\\U0002CEA1\\U0002CEB0-"
+ u"\\U0002EBE0\\U00030000-\\U0003134A]";
gRecommendedSet = new UnicodeSet(UnicodeString(recommendedPat), status);
if (gRecommendedSet == NULL) {
@@ -483,7 +486,7 @@ uspoof_areConfusableUnicodeString(const USpoofChecker *sc,
// and for definitions of the types (single, whole, mixed-script) of confusables.
// We only care about a few of the check flags. Ignore the others.
- // If no tests relavant to this function have been specified, return an error.
+ // If no tests relevant to this function have been specified, return an error.
// TODO: is this really the right thing to do? It's probably an error on the caller's part,
// but logically we would just return 0 (no error).
if ((This->fChecks & USPOOF_CONFUSABLE) == 0) {
@@ -603,7 +606,7 @@ int32_t checkImpl(const SpoofImpl* This, const UnicodeString& id, CheckResult* c
gNfdNormalizer->normalize(id, nfdText, *status);
int32_t nfdLength = nfdText.length();
- // scan for more than one occurence of the same non-spacing mark
+ // scan for more than one occurrence of the same non-spacing mark
// in a sequence of non-spacing marks.
int32_t i;
UChar32 c;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.cpp b/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.cpp
index 1a7cdad60ac..04081cabfb0 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.cpp
@@ -15,7 +15,7 @@
* created on: 2009Jan05 (refactoring earlier files)
* created by: Andy Heninger
*
-* Internal classes for compililing confusable data into its binary (runtime) form.
+* Internal classes for compiling confusable data into its binary (runtime) form.
*/
#include "unicode/utypes.h"
@@ -113,7 +113,7 @@ SPUString *SPUStringPool::getByIndex(int32_t index) {
// by code point order.
// Conforms to the type signature for a USortComparator in uvector.h
-static int8_t U_CALLCONV SPUStringCompare(UHashTok left, UHashTok right) {
+static int32_t U_CALLCONV SPUStringCompare(UHashTok left, UHashTok right) {
const SPUString *sL = const_cast<const SPUString *>(
static_cast<SPUString *>(left.pointer));
const SPUString *sR = const_cast<const SPUString *>(
@@ -145,7 +145,7 @@ SPUString *SPUStringPool::addString(UnicodeString *src, UErrorCode &status) {
return NULL;
}
uhash_put(fHash, src, hashedString, &status);
- fVec->addElement(hashedString, status);
+ fVec->addElementX(hashedString, status);
}
return hashedString;
}
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.h b/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.h
index cfa80e7ca76..600d7ea42a4 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.h
@@ -110,7 +110,7 @@ class ConfusabledataBuilder : public UMemory {
// Add an entry to the key and value tables being built
// input: data from SLTable, MATable, etc.
- // outut: entry added to fKeyVec and fValueVec
+ // output: entry added to fKeyVec and fValueVec
void addKeyEntry(UChar32 keyChar, // The key character
UHashtable *table, // The table, one of SATable, MATable, etc.
int32_t tableFlag, // One of USPOOF_SA_TABLE_FLAG, etc.
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.cpp b/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.cpp
index 88245b7f8f9..b283d813210 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.cpp
@@ -729,7 +729,7 @@ void *SpoofData::reserveSpace(int32_t numBytes, UErrorCode &status) {
return NULL;
}
if (!fDataOwned) {
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
numBytes = (numBytes + 15) & ~15; // Round up to a multiple of 16
diff --git a/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h b/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
index 43b23a8692c..e75ae262bdd 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
@@ -8,7 +8,7 @@
*
* uspoof_impl.h
*
-* Implemenation header for spoof detection
+* Implementation header for spoof detection
*
*/
@@ -31,7 +31,7 @@
U_NAMESPACE_BEGIN
-// The maximium length (in UTF-16 UChars) of the skeleton replacement string resulting from
+// The maximum length (in UTF-16 UChars) of the skeleton replacement string resulting from
// a single input code point. This is function of the unicode.org data.
#define USPOOF_MAX_SKELETON_EXPANSION 20
@@ -93,7 +93,7 @@ public:
static UChar32 ScanHex(const UChar *s, int32_t start, int32_t limit, UErrorCode &status);
static UClassID U_EXPORT2 getStaticClassID(void);
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
//
// Data Members
@@ -157,7 +157,7 @@ public:
//
// String Table:
// The strings table contains all of the value strings (those of length two or greater)
-// concatentated together into one long UChar (UTF-16) array.
+// concatenated together into one long UChar (UTF-16) array.
//
// There is no nul character or other mark between adjacent strings.
//
@@ -248,7 +248,7 @@ class SpoofData: public UMemory {
// Get the confusable skeleton transform for a single code point.
// The result is a string with a length between 1 and 18 as of Unicode 9.
// This is the main public endpoint for this class.
- // @return The length in UTF-16 code units of the substition string.
+ // @return The length in UTF-16 code units of the substitution string.
int32_t confusableLookup(UChar32 inChar, UnicodeString &dest) const;
// Get the number of confusable entries in this SpoofData.
@@ -301,7 +301,7 @@ struct SpoofDataHeader {
int32_t fMagic; // (0x3845fdef)
uint8_t fFormatVersion[4]; // Data Format. Same as the value in struct UDataInfo
// if there is one associated with this data.
- int32_t fLength; // Total lenght in bytes of this spoof data,
+ int32_t fLength; // Total length in bytes of this spoof data,
// including all sections, not just the header.
// The following four sections refer to data representing the confusable data
diff --git a/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h b/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h
index f11816785f6..13d825f73be 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h
@@ -43,7 +43,7 @@
#define isContinuation(CE) (((CE) & UCOL_CONTINUATION_MARKER) == UCOL_CONTINUATION_MARKER)
/**
- * This indicates an error has occured during processing or there are no more CEs
+ * This indicates an error has occurred during processing or there are no more CEs
* to be returned.
*/
#define UCOL_PROCESSED_NULLORDER ((int64_t)U_INT64_MAX)
@@ -101,7 +101,7 @@ public:
* @param ixHigh a pointer to an int32_t to receive the iterator index after fetching the CE.
* @param status A pointer to an UErrorCode to receive any errors.
* @return The next collation elements ordering, otherwise returns UCOL_PROCESSED_NULLORDER
- * if an error has occured or if the end of string has been reached
+ * if an error has occurred or if the end of string has been reached
*/
int64_t nextProcessed(int32_t *ixLow, int32_t *ixHigh, UErrorCode *status);
/**
@@ -110,11 +110,11 @@ public:
*
* @param ixLow A pointer to an int32_t to receive the iterator index after fetching the CE
* @param ixHigh A pointer to an int32_t to receiver the iterator index before fetching the CE
- * @param status A pointer to an UErrorCode to receive any errors. Noteably
+ * @param status A pointer to an UErrorCode to receive any errors. Notably
* a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack
* buffer has been exhausted.
* @return The previous collation elements ordering, otherwise returns
- * UCOL_PROCESSED_NULLORDER if an error has occured or if the start of
+ * UCOL_PROCESSED_NULLORDER if an error has occurred or if the start of
* string has been reached.
*/
int64_t previousProcessed(int32_t *ixLow, int32_t *ixHigh, UErrorCode *status);
@@ -127,7 +127,6 @@ private:
U_NAMESPACE_END
#define INITIAL_ARRAY_SIZE_ 256
-#define MAX_TABLE_SIZE_ 257
struct USearch {
// required since collation element iterator does not have a getText API
@@ -136,8 +135,8 @@ struct USearch {
UBool isOverlap;
UBool isCanonicalMatch;
int16_t elementComparisonType;
- UBreakIterator *internalBreakIter; //internal character breakiterator
- UBreakIterator *breakIter;
+ UBreakIterator *internalBreakIter; // internal character breakiterator, lazily created.
+ UBreakIterator *breakIter; // caller provided character breakiterator
// value USEARCH_DONE is the default value
// if we are not at the start of the text or the end of the text,
// depending on the iteration direction and matchedIndex is USEARCH_DONE
@@ -160,9 +159,6 @@ struct UPattern {
int64_t pcesBuffer[INITIAL_ARRAY_SIZE_];
UBool hasPrefixAccents;
UBool hasSuffixAccents;
- int16_t defaultShiftSize;
- int16_t shift[MAX_TABLE_SIZE_];
- int16_t backShift[MAX_TABLE_SIZE_];
};
struct UStringSearch {
@@ -182,8 +178,6 @@ struct UStringSearch {
uint32_t ceMask;
uint32_t variableTop;
UBool toShift;
- UChar canonicalPrefixAccents[INITIAL_ARRAY_SIZE_];
- UChar canonicalSuffixAccents[INITIAL_ARRAY_SIZE_];
};
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.cpp b/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.cpp
index 7598b0ee521..f1bdfabe738 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.cpp
@@ -37,9 +37,9 @@ UTF16CollationIterator::UTF16CollationIterator(const UTF16CollationIterator &oth
UTF16CollationIterator::~UTF16CollationIterator() {}
-UBool
+bool
UTF16CollationIterator::operator==(const CollationIterator &other) const {
- if(!CollationIterator::operator==(other)) { return FALSE; }
+ if(!CollationIterator::operator==(other)) { return false; }
const UTF16CollationIterator &o = static_cast<const UTF16CollationIterator &>(other);
// Compare the iterator state but not the text: Assume that the caller does that.
return (pos - start) == (o.pos - o.start);
@@ -171,14 +171,14 @@ FCDUTF16CollationIterator::FCDUTF16CollationIterator(const FCDUTF16CollationIter
FCDUTF16CollationIterator::~FCDUTF16CollationIterator() {}
-UBool
+bool
FCDUTF16CollationIterator::operator==(const CollationIterator &other) const {
// Skip the UTF16CollationIterator and call its parent.
- if(!CollationIterator::operator==(other)) { return FALSE; }
+ if(!CollationIterator::operator==(other)) { return false; }
const FCDUTF16CollationIterator &o = static_cast<const FCDUTF16CollationIterator &>(other);
// Compare the iterator state but not the text: Assume that the caller does that.
- if(checkDir != o.checkDir) { return FALSE; }
- if(checkDir == 0 && (start == segmentStart) != (o.start == o.segmentStart)) { return FALSE; }
+ if(checkDir != o.checkDir) { return false; }
+ if(checkDir == 0 && (start == segmentStart) != (o.start == o.segmentStart)) { return false; }
if(checkDir != 0 || start == segmentStart) {
return (pos - rawStart) == (o.pos - o.rawStart);
} else {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h b/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
index 6305d81c30c..6db70511b0d 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
@@ -42,11 +42,11 @@ public:
virtual ~UTF16CollationIterator();
- virtual UBool operator==(const CollationIterator &other) const;
+ virtual bool operator==(const CollationIterator &other) const override;
- virtual void resetToOffset(int32_t newOffset);
+ virtual void resetToOffset(int32_t newOffset) override;
- virtual int32_t getOffset() const;
+ virtual int32_t getOffset() const override;
void setText(const UChar *s, const UChar *lim) {
reset();
@@ -54,9 +54,9 @@ public:
limit = lim;
}
- virtual UChar32 nextCodePoint(UErrorCode &errorCode);
+ virtual UChar32 nextCodePoint(UErrorCode &errorCode) override;
- virtual UChar32 previousCodePoint(UErrorCode &errorCode);
+ virtual UChar32 previousCodePoint(UErrorCode &errorCode) override;
protected:
// Copy constructor only for subclasses which set the pointers.
@@ -64,15 +64,15 @@ protected:
: CollationIterator(other),
start(NULL), pos(NULL), limit(NULL) {}
- virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode);
+ virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode) override;
- virtual UChar handleGetTrailSurrogate();
+ virtual UChar handleGetTrailSurrogate() override;
- virtual UBool foundNULTerminator();
+ virtual UBool foundNULTerminator() override;
- virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
- virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
// UTF-16 string pointers.
// limit can be NULL for NUL-terminated strings.
@@ -95,24 +95,24 @@ public:
virtual ~FCDUTF16CollationIterator();
- virtual UBool operator==(const CollationIterator &other) const;
+ virtual bool operator==(const CollationIterator &other) const override;
- virtual void resetToOffset(int32_t newOffset);
+ virtual void resetToOffset(int32_t newOffset) override;
- virtual int32_t getOffset() const;
+ virtual int32_t getOffset() const override;
- virtual UChar32 nextCodePoint(UErrorCode &errorCode);
+ virtual UChar32 nextCodePoint(UErrorCode &errorCode) override;
- virtual UChar32 previousCodePoint(UErrorCode &errorCode);
+ virtual UChar32 previousCodePoint(UErrorCode &errorCode) override;
protected:
- virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode);
+ virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode) override;
- virtual UBool foundNULTerminator();
+ virtual UBool foundNULTerminator() override;
- virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
- virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h b/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
index 9059e72dcf9..09cfce4369f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
@@ -40,13 +40,13 @@ public:
virtual ~UTF8CollationIterator();
- virtual void resetToOffset(int32_t newOffset);
+ virtual void resetToOffset(int32_t newOffset) override;
- virtual int32_t getOffset() const;
+ virtual int32_t getOffset() const override;
- virtual UChar32 nextCodePoint(UErrorCode &errorCode);
+ virtual UChar32 nextCodePoint(UErrorCode &errorCode) override;
- virtual UChar32 previousCodePoint(UErrorCode &errorCode);
+ virtual UChar32 previousCodePoint(UErrorCode &errorCode) override;
protected:
/**
@@ -59,15 +59,15 @@ protected:
* Valid lead surrogates are returned from inside a normalized text segment,
* where handleGetTrailSurrogate() will return the matching trail surrogate.
*/
- virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode);
+ virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode) override;
- virtual UBool foundNULTerminator();
+ virtual UBool foundNULTerminator() override;
- virtual UBool forbidSurrogateCodePoints() const;
+ virtual UBool forbidSurrogateCodePoints() const override;
- virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
- virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
const uint8_t *u8;
int32_t pos;
@@ -87,24 +87,24 @@ public:
virtual ~FCDUTF8CollationIterator();
- virtual void resetToOffset(int32_t newOffset);
+ virtual void resetToOffset(int32_t newOffset) override;
- virtual int32_t getOffset() const;
+ virtual int32_t getOffset() const override;
- virtual UChar32 nextCodePoint(UErrorCode &errorCode);
+ virtual UChar32 nextCodePoint(UErrorCode &errorCode) override;
- virtual UChar32 previousCodePoint(UErrorCode &errorCode);
+ virtual UChar32 previousCodePoint(UErrorCode &errorCode) override;
protected:
- virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode);
+ virtual uint32_t handleNextCE32(UChar32 &c, UErrorCode &errorCode) override;
- virtual UChar handleGetTrailSurrogate();
+ virtual UChar handleGetTrailSurrogate() override;
- virtual UBool foundNULTerminator();
+ virtual UBool foundNULTerminator() override;
- virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void forwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
- virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode);
+ virtual void backwardNumCodePoints(int32_t num, UErrorCode &errorCode) override;
private:
UBool nextHasLccc() const;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/utrans.cpp b/Build/source/libs/icu/icu-src/source/i18n/utrans.cpp
index 29013ead125..1cbba81d658 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/utrans.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/utrans.cpp
@@ -52,13 +52,13 @@ public:
virtual void handleReplaceBetween(int32_t start,
int32_t limit,
- const UnicodeString& text);
+ const UnicodeString& text) override;
virtual void extractBetween(int32_t start,
int32_t limit,
- UnicodeString& target) const;
+ UnicodeString& target) const override;
- virtual void copy(int32_t start, int32_t limit, int32_t dest);
+ virtual void copy(int32_t start, int32_t limit, int32_t dest) override;
// virtual Replaceable *clone() const { return NULL; } same as default
@@ -67,7 +67,7 @@ public:
*
* @draft ICU 2.2
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -78,11 +78,11 @@ public:
protected:
- virtual int32_t getLength() const;
+ virtual int32_t getLength() const override;
- virtual UChar getCharAt(int32_t offset) const;
+ virtual UChar getCharAt(int32_t offset) const override;
- virtual UChar32 getChar32At(int32_t offset) const;
+ virtual UChar32 getChar32At(int32_t offset) const override;
};
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ReplaceableGlue)
diff --git a/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp b/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
index 81208ab96d7..9111e08848f 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
@@ -240,7 +240,7 @@ static UDate parseDateTimeString(const UnicodeString& str, int32_t offset, UErro
break;
}
if (str.charAt(8) != 0x0054) {
- // charcter "T" must be used for separating date and time
+ // character "T" must be used for separating date and time
break;
}
if (length == 16) {
@@ -376,7 +376,7 @@ static void getDefaultTZName(const UnicodeString &tzid, UBool isDST, UnicodeStri
* dow day of week in BYDAY, or 0 when not found
* wim day of week ordinal number in BYDAY, or 0 when not found
* dom an array of day of month
- * domCount number of availble days in dom (domCount is specifying the size of dom on input)
+ * domCount number of available days in dom (domCount is specifying the size of dom on input)
* until time defined by UNTIL attribute or MIN_MILLIS if not available
*/
static void parseRRULE(const UnicodeString& rrule, int32_t& month, int32_t& dow, int32_t& wim,
@@ -479,7 +479,7 @@ static void parseRRULE(const UnicodeString& rrule, int32_t& month, int32_t& dow,
goto rruleParseError;
}
} else if (attr.compare(ICAL_BYMONTHDAY, -1) == 0) {
- // Note: BYMONTHDAY may contain multiple days delimitted by comma
+ // Note: BYMONTHDAY may contain multiple days delimited by comma
//
// A value of BYMONTHDAY could be negative, for example, -1 means
// the last day in a month
@@ -663,7 +663,7 @@ static TimeZoneRule* createRuleByRRULE(const UnicodeString& zonename, int rawOff
goto unsupportedRRule;
}
}
- // If ealier month, go through days to find the earliest day
+ // If earlier month, go through days to find the earliest day
if (tmp_month == earliestMonth) {
for (j = 0; j < tmp_daysCount; j++) {
tmp_days[j] = tmp_days[j] > 0 ? tmp_days[j] : MONTHLENGTH[tmp_month] + tmp_days[j] + 1;
@@ -881,7 +881,7 @@ static DateTimeRule *toWallTimeRule(const DateTimeRule *rule, int32_t rawOffset,
}
/*
- * Minumum implementations of stream writer/reader, writing/reading
+ * Minimum implementations of stream writer/reader, writing/reading
* UnicodeString. For now, we do not want to introduce the dependency
* on the ICU I/O stream in this module. But we want to keep the code
* equivalent to the ICU4J implementation, which utilizes java.io.Writer/
@@ -983,7 +983,7 @@ VTimeZone::VTimeZone(const VTimeZone& source)
if (U_SUCCESS(status)) {
for (int32_t i = 0; i < size; i++) {
UnicodeString *line = (UnicodeString*)source.vtzlines->elementAt(i);
- vtzlines->addElement(line->clone(), status);
+ vtzlines->addElementX(line->clone(), status);
if (U_FAILURE(status)) {
break;
}
@@ -1028,7 +1028,7 @@ VTimeZone::operator=(const VTimeZone& right) {
if (vtzlines != nullptr && U_SUCCESS(status)) {
for (int32_t i = 0; i < size; i++) {
UnicodeString *line = (UnicodeString*)right.vtzlines->elementAt(i);
- vtzlines->addElement(line->clone(), status);
+ vtzlines->addElementX(line->clone(), status);
if (U_FAILURE(status)) {
break;
}
@@ -1047,13 +1047,13 @@ VTimeZone::operator=(const VTimeZone& right) {
return *this;
}
-UBool
+bool
VTimeZone::operator==(const TimeZone& that) const {
if (this == &that) {
- return TRUE;
+ return true;
}
if (typeid(*this) != typeid(that) || !BasicTimeZone::operator==(that)) {
- return FALSE;
+ return false;
}
VTimeZone *vtz = (VTimeZone*)&that;
if (*tz == *(vtz->tz)
@@ -1061,12 +1061,12 @@ VTimeZone::operator==(const TimeZone& that) const {
&& lastmod == vtz->lastmod
/* && olsonzid = that.olsonzid */
/* && icutzver = that.icutzver */) {
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
-UBool
+bool
VTimeZone::operator!=(const TimeZone& that) const {
return !operator==(that);
}
@@ -1217,6 +1217,12 @@ VTimeZone::getOffset(UDate date, UBool local, int32_t& rawOffset,
return tz->getOffset(date, local, rawOffset, dstOffset, status);
}
+void VTimeZone::getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ UTimeZoneLocalOption duplicatedTimeOpt,
+ int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) const {
+ tz->getOffsetFromLocal(date, nonExistingTimeOpt, duplicatedTimeOpt, rawOffset, dstOffset, status);
+}
+
void
VTimeZone::setRawOffset(int32_t offsetMillis) {
tz->setRawOffset(offsetMillis);
@@ -1287,7 +1293,7 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) {
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
- vtzlines->addElement(element.getAlias(), status);
+ vtzlines->addElementX(element.getAlias(), status);
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
@@ -1309,7 +1315,7 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) {
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
- vtzlines->addElement(element.getAlias(), status);
+ vtzlines->addElementX(element.getAlias(), status);
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
@@ -1332,7 +1338,7 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) {
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
- vtzlines->addElement(element.getAlias(), status);
+ vtzlines->addElementX(element.getAlias(), status);
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
@@ -1346,7 +1352,7 @@ VTimeZone::load(VTZReader& reader, UErrorCode& status) {
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
- vtzlines->addElement(element.getAlias(), status);
+ vtzlines->addElementX(element.getAlias(), status);
if (U_FAILURE(status)) {
goto cleanupVtzlines;
}
@@ -1521,7 +1527,7 @@ VTimeZone::parse(UErrorCode& status) {
if (dstr == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
} else {
- dates->addElement(dstr, status);
+ dates->addElementX(dstr, status);
}
if (U_FAILURE(status)) {
goto cleanupParse;
@@ -1538,7 +1544,7 @@ VTimeZone::parse(UErrorCode& status) {
if (U_FAILURE(status)) {
goto cleanupParse;
}
- dates->addElement(element.getAlias(), status);
+ dates->addElementX(element.getAlias(), status);
if (U_FAILURE(status)) {
goto cleanupParse;
}
@@ -1603,7 +1609,7 @@ VTimeZone::parse(UErrorCode& status) {
if (startAvail && actualStart < firstStart) {
// save from offset information for the earliest rule
firstStart = actualStart;
- // If this is STD, assume the time before this transtion
+ // If this is STD, assume the time before this transition
// is DST when the difference is 1 hour. This might not be
// accurate, but VTIMEZONE data does not have such info.
if (dstSavings > 0) {
@@ -1620,7 +1626,7 @@ VTimeZone::parse(UErrorCode& status) {
}
}
}
- rules->addElement(rule, status);
+ rules->addElementX(rule, status);
if (U_FAILURE(status)) {
goto cleanupParse;
}
@@ -1726,7 +1732,7 @@ VTimeZone::parse(UErrorCode& status) {
goto cleanupParse;
}
rules->removeElementAt(finalRuleIdx);
- rules->addElement(newRule, status);
+ rules->addElementX(newRule, status);
if (U_FAILURE(status)) {
delete newRule;
goto cleanupParse;
@@ -1803,7 +1809,7 @@ VTimeZone::write(VTZWriter& writer, UErrorCode& status) const {
icutzprop.append(u'[');
icutzprop.append(icutzver);
icutzprop.append(u']');
- customProps.addElement(&icutzprop, status);
+ customProps.addElementX(&icutzprop, status);
}
writeZone(writer, *tz, &customProps, status);
}
@@ -1856,7 +1862,7 @@ VTimeZone::write(UDate start, VTZWriter& writer, UErrorCode& status) const {
icutzprop->append(ICU_TZINFO_PARTIAL, -1);
appendMillis(start, *icutzprop);
icutzprop->append((UChar)0x005D/*']'*/);
- customProps.addElement(icutzprop, status);
+ customProps.addElementX(icutzprop, status);
if (U_FAILURE(status)) {
delete icutzprop;
goto cleanupWritePartial;
@@ -1870,10 +1876,7 @@ cleanupWritePartial:
delete initial;
}
if (transitionRules != nullptr) {
- while (!transitionRules->isEmpty()) {
- TimeZoneRule *tr = (TimeZoneRule*)transitionRules->orphanElementAt(0);
- delete tr;
- }
+ U_ASSERT(transitionRules->hasDeleter());
delete transitionRules;
}
}
@@ -1891,23 +1894,25 @@ VTimeZone::writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const
InitialTimeZoneRule *initial = nullptr;
AnnualTimeZoneRule *std = nullptr, *dst = nullptr;
getSimpleRulesNear(time, initial, std, dst, status);
+ LocalPointer<InitialTimeZoneRule> lpInitial(initial);
+ LocalPointer<AnnualTimeZoneRule> lpStd(std);
+ LocalPointer<AnnualTimeZoneRule> lpDst(dst);
if (U_SUCCESS(status)) {
// Create a RuleBasedTimeZone with the subset rule
getID(tzid);
- RuleBasedTimeZone rbtz(tzid, initial);
- if (std != nullptr && dst != nullptr) {
- rbtz.addTransitionRule(std, status);
- rbtz.addTransitionRule(dst, status);
+ RuleBasedTimeZone rbtz(tzid, lpInitial.orphan());
+ if (lpStd.isValid() && lpDst.isValid()) {
+ rbtz.addTransitionRule(lpStd.orphan(), status);
+ rbtz.addTransitionRule(lpDst.orphan(), status);
}
if (U_FAILURE(status)) {
- goto cleanupWriteSimple;
+ return;
}
if (olsonzid.length() > 0 && icutzver.length() > 0) {
- UnicodeString *icutzprop = new UnicodeString(ICU_TZINFO_PROP);
- if (icutzprop == nullptr) {
- status = U_MEMORY_ALLOCATION_ERROR;
- goto cleanupWriteSimple;
+ LocalPointer<UnicodeString> icutzprop(new UnicodeString(ICU_TZINFO_PROP), status);
+ if (U_FAILURE(status)) {
+ return;
}
icutzprop->append(olsonzid);
icutzprop->append((UChar)0x005B/*'['*/);
@@ -1915,26 +1920,10 @@ VTimeZone::writeSimple(UDate time, VTZWriter& writer, UErrorCode& status) const
icutzprop->append(ICU_TZINFO_SIMPLE, -1);
appendMillis(time, *icutzprop);
icutzprop->append((UChar)0x005D/*']'*/);
- customProps.addElement(icutzprop, status);
- if (U_FAILURE(status)) {
- delete icutzprop;
- goto cleanupWriteSimple;
- }
+ customProps.adoptElement(icutzprop.orphan(), status);
}
writeZone(writer, rbtz, &customProps, status);
}
- return;
-
-cleanupWriteSimple:
- if (initial != nullptr) {
- delete initial;
- }
- if (std != nullptr) {
- delete std;
- }
- if (dst != nullptr) {
- delete dst;
- }
}
void
@@ -2515,7 +2504,7 @@ VTimeZone::writeZonePropsByDOW_LEQ_DOM(VTZWriter& writer, UBool isDst, const Uni
writeZonePropsByDOW(writer, isDst, zonename, fromOffset, toOffset,
month, -1*((MONTHLENGTH[month] - dayOfMonth)/7 + 1), dayOfWeek, startTime, untilTime, status);
} else if (month == UCAL_FEBRUARY && dayOfMonth == 29) {
- // Specical case for February
+ // Special case for February
writeZonePropsByDOW(writer, isDst, zonename, fromOffset, toOffset,
UCAL_FEBRUARY, -1, dayOfWeek, startTime, untilTime, status);
} else {
@@ -2649,7 +2638,7 @@ VTimeZone::endZoneProps(VTZWriter& writer, UBool isDst, UErrorCode& status) cons
}
/*
- * Write the beggining part of RRULE line
+ * Write the beginning part of RRULE line
*/
void
VTimeZone::beginRRULE(VTZWriter& writer, int32_t month, UErrorCode& status) const {
diff --git a/Build/source/libs/icu/icu-src/source/i18n/vzone.h b/Build/source/libs/icu/icu-src/source/i18n/vzone.h
index 96f5e858912..d1b6d8d8204 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/vzone.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/vzone.h
@@ -136,7 +136,7 @@ U_CAPI void U_EXPORT2
vzone_write(VZone* zone, UChar* & result, int32_t & resultLength, UErrorCode& status);
/**
- * Writes RFC2445 VTIMEZONE data for this time zone applicalbe
+ * Writes RFC2445 VTIMEZONE data for this time zone applicable
* for dates after the specified start time.
* @param zone, the vzone to use
* @param start The start date.
@@ -148,7 +148,7 @@ U_CAPI void U_EXPORT2
vzone_writeFromStart(VZone* zone, UDate start, UChar* & result, int32_t & resultLength, UErrorCode& status);
/**
- * Writes RFC2445 VTIMEZONE data applicalbe for the specified date.
+ * Writes RFC2445 VTIMEZONE data applicable for the specified date.
* Some common iCalendar implementations can only handle a single time
* zone property or a pair of standard and daylight time properties using
* BYDAY rule with day of week (such as BYDAY=1SUN). This method produce
diff --git a/Build/source/libs/icu/icu-src/source/i18n/windtfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/windtfmt.cpp
index bcf272bc612..f6a990ea29e 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/windtfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/windtfmt.cpp
@@ -193,6 +193,7 @@ Win32DateFormat::~Win32DateFormat()
Win32DateFormat &Win32DateFormat::operator=(const Win32DateFormat &other)
{
+ if (this == &other) { return *this; } // self-assignment: no-op
// The following handles fCalendar
DateFormat::operator=(other);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.cpp b/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.cpp
index 72da1be28b8..8b2a9a4f958 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.cpp
@@ -268,6 +268,7 @@ Win32NumberFormat::~Win32NumberFormat()
Win32NumberFormat &Win32NumberFormat::operator=(const Win32NumberFormat &other)
{
+ if (this == &other) { return *this; } // self-assignment: no-op
NumberFormat::operator=(other);
this->fCurrency = other.fCurrency;
diff --git a/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.cpp b/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.cpp
index 433ed4c2939..a6d93300638 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.cpp
@@ -145,7 +145,7 @@ static UBool getWindowsTimeZoneInfo(TIME_ZONE_INFORMATION *zoneInfo, const UChar
}
/*
- * Given the timezone icuid, fill in zoneInfo by calling auxillary functions that creates a timezone and extract the
+ * Given the timezone icuid, fill in zoneInfo by calling auxiliary functions that creates a timezone and extract the
* information to put into zoneInfo. This includes bias and standard time date and daylight saving date.
*/
U_CAPI UBool U_EXPORT2
diff --git a/Build/source/libs/icu/icu-src/source/i18n/zonemeta.cpp b/Build/source/libs/icu/icu-src/source/i18n/zonemeta.cpp
index 72c590f4247..b8afa4760f1 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/zonemeta.cpp
+++ b/Build/source/libs/icu/icu-src/source/i18n/zonemeta.cpp
@@ -477,11 +477,11 @@ ZoneMeta::getCanonicalCountry(const UnicodeString &tzid, UnicodeString &country,
UErrorCode ec = U_ZERO_ERROR;
if (singleZone) {
if (!gSingleZoneCountries->contains((void*)region)) {
- gSingleZoneCountries->addElement((void*)region, ec);
+ gSingleZoneCountries->addElementX((void*)region, ec);
}
} else {
if (!gMultiZonesCountries->contains((void*)region)) {
- gMultiZonesCountries->addElement((void*)region, ec);
+ gMultiZonesCountries->addElementX((void*)region, ec);
}
}
}
@@ -696,7 +696,7 @@ ZoneMeta::createMetazoneMappings(const UnicodeString &tzid) {
}
}
- mzMappings->addElement(entry, status);
+ mzMappings->addElementX(entry, status);
if (U_FAILURE(status)) {
break;
}
@@ -801,7 +801,7 @@ static void U_CALLCONV initAvailableMetaZoneIDs () {
uMzID[len] = 0;
UnicodeString *usMzID = new UnicodeString(uMzID);
if (uhash_get(gMetaZoneIDTable, usMzID) == NULL) {
- gMetaZoneIDs->addElement((void *)uMzID, status);
+ gMetaZoneIDs->addElementX((void *)uMzID, status);
uhash_put(gMetaZoneIDTable, (void *)usMzID, (void *)uMzID, &status);
} else {
uprv_free(uMzID);
diff --git a/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h b/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
index 58724ea3b7d..f21399342b9 100644
--- a/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
+++ b/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
@@ -40,7 +40,7 @@ public:
/**
* Return the canonical id for this tzid defined by CLDR, which might be the id itself.
- * This overload method returns a persistent const UChar*, which is guranteed to persist
+ * This overload method returns a persistent const UChar*, which is guaranteed to persist
* (a pointer to a resource). If the given system tzid is not known, U_ILLEGAL_ARGUMENT_ERROR
* is set in the status.
* @param tzid Zone ID
@@ -50,7 +50,7 @@ public:
static const UChar* U_EXPORT2 getCanonicalCLDRID(const UnicodeString &tzid, UErrorCode& status);
/*
- * Conveninent method returning CLDR canonical ID for the given time zone
+ * Convenient method returning CLDR canonical ID for the given time zone
*/
static const UChar* U_EXPORT2 getCanonicalCLDRID(const TimeZone& tz);
diff --git a/Build/source/libs/icu/icu-src/source/icudefs.mk.in b/Build/source/libs/icu/icu-src/source/icudefs.mk.in
index 1b40995ed5e..9a151629757 100644
--- a/Build/source/libs/icu/icu-src/source/icudefs.mk.in
+++ b/Build/source/libs/icu/icu-src/source/icudefs.mk.in
@@ -240,7 +240,7 @@ LIBDIR=$(top_builddir)/lib
# Location of the executables before "make install" is used
BINDIR=$(top_builddir)/bin
-# Defined here so that it can be overriden by mh-mingw*.
+# Defined here so that it can be overridden by mh-mingw*.
# For MinGW/MSYS2 we want the DLLs to go into the bin location.
MINGW_MOVEDLLSTOBINDIR = NO
diff --git a/Build/source/libs/icu/icu-src/source/io/io.vcxproj b/Build/source/libs/icu/icu-src/source/io/io.vcxproj
index c324236abee..56957edc8b9 100644
--- a/Build/source/libs/icu/icu-src/source/io/io.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/io/io.vcxproj
@@ -60,7 +60,7 @@
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuio68d.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuio70d.dll</OutputFile>
<ProgramDatabaseFile>..\..\$(IcuLibOutputDir)\icuiod.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuiod.lib</ImportLibrary>
<AdditionalDependencies>icuucd.lib;icuind.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -73,7 +73,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
</ClCompile>
<Link>
- <OutputFile>..\..\$(IcuBinOutputDir)\icuio68.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icuio70.dll</OutputFile>
<ProgramDatabaseFile>..\..\$(IcuLibOutputDir)\icuio.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icuio.lib</ImportLibrary>
<AdditionalDependencies>icuuc.lib;icuin.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.cpp b/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.cpp
index 0b6c18ff966..a475175f378 100644
--- a/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.cpp
+++ b/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.cpp
@@ -143,7 +143,7 @@ ufmt_uto64(const UChar *buffer,
uint64_t result;
- /* intialize parameters */
+ /* initialize parameters */
limit = buffer + *len;
count = 0;
result = 0;
@@ -175,7 +175,7 @@ ufmt_utop(const UChar *buffer,
uint8_t bytes[sizeof(void*)];
} result;
- /* intialize variables */
+ /* initialize variables */
count = 0;
offset = 0;
result.ptr = NULL;
diff --git a/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h b/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h
index 50a8815e3a7..5aad6b9bbea 100644
--- a/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h
+++ b/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h
@@ -51,7 +51,7 @@
wastes a lot of time and space.
* Test stdin and stdout with the u_f* functions
* Testing should be done for reading and writing multi-byte encodings,
- and make sure that a character that is contained across buffer boundries
+ and make sure that a character that is contained across buffer boundaries
works even for incomplete characters.
* Make sure that the last character is flushed when the file/string is closed.
* snprintf should follow the C99 standard for the return value, which is
@@ -102,7 +102,7 @@
* <p>This API provides an stdio-like API wrapper around ICU's other
* formatting and parsing APIs. It is meant to ease the transition of adding
* Unicode support to a preexisting applications using stdio. The following
- * is a small list of noticable differences between stdio and ICU I/O's
+ * is a small list of noticeable differences between stdio and ICU I/O's
* ustdio implementation.</p>
*
* <ul>
@@ -237,7 +237,7 @@ typedef enum {
* and parse output. If this parameter is NULL, the default locale will
* be used.
* @param codepage The codepage in which data will be written to and
- * read from the file. If this paramter is NULL the system default codepage
+ * read from the file. If this parameter is NULL the system default codepage
* will be used.
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 3.0
@@ -260,7 +260,7 @@ u_fopen(const char *filename,
* and parse output. If this parameter is NULL, the default locale will
* be used.
* @param codepage The codepage in which data will be written to and
- * read from the file. If this paramter is NULL the system default codepage
+ * read from the file. If this parameter is NULL the system default codepage
* will be used.
* @return A new UFILE, or NULL if an error occurred.
* @stable ICU 54
@@ -281,7 +281,7 @@ u_fopen_u(const UChar *filename,
* and parse output. If this parameter is NULL, the default locale will
* be used.
* @param codepage The codepage in which data will be written to and
- * read from the file. If this paramter is NULL, data will be written and
+ * read from the file. If this parameter is NULL, data will be written and
* read using the default codepage for <TT>locale</TT>, unless <TT>locale</TT>
* is NULL, in which case the system default codepage will be used.
* @return A new UFILE, or NULL if an error occurred.
@@ -301,7 +301,7 @@ u_finit(FILE *f,
* and parse output. If this parameter is NULL, the default locale will
* be used.
* @param codepage The codepage in which data will be written to and
- * read from the file. If this paramter is NULL, data will be written and
+ * read from the file. If this parameter is NULL, data will be written and
* read using the default codepage for <TT>locale</TT>, unless <TT>locale</TT>
* is NULL, in which case the system default codepage will be used.
* @return A new UFILE, or NULL if an error occurred. If an error occurs
@@ -725,7 +725,7 @@ u_fgetcx(UFILE *f);
* Unget a UChar from a UFILE.
* If this function is not the first to operate on <TT>f</TT> after a call
* to <TT>u_fgetc</TT>, the results are undefined.
- * If this function is passed a character that was not recieved from the
+ * If this function is passed a character that was not received from the
* previous <TT>u_fgetc</TT> or <TT>u_fgetcx</TT> call, the results are undefined.
* @param c The UChar to put back on the stream.
* @param f The UFILE to receive <TT>c</TT>.
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h b/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
index ce3f7e54114..b8a7aa3c17d 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
@@ -369,7 +369,7 @@ public:
* @param fontRuns a pointer to a <code>FontRuns</code> object representing the font runs.
*
* @param levelRuns is a pointer to a <code>ValueRuns</code> object representing the directional levels.
- * If this pointer in <code>NULL</code> the levels will be determined by running the Unicde
+ * If this pointer in <code>NULL</code> the levels will be determined by running the Unicode
* Bidi algorithm.
*
* @param scriptRuns is a pointer to a <code>ValueRuns</code> object representing script runs.
@@ -377,7 +377,7 @@ public:
* Unicode code points.
*
* @param localeRuns is a pointer to a <code>LocaleRuns</code> object representing locale runs.
- * The <code>Locale</code> objects are used to determind the language of the text. If this
+ * The <code>Locale</code> objects are used to determine the language of the text. If this
* pointer is <code>NULL</code> the default locale will be used for all of the text.
*
* @param paragraphLevel is the directionality of the paragraph, as in the UBiDi object.
@@ -403,7 +403,7 @@ public:
/**
* The destructor. Virtual so that it works correctly with
- * sublcasses.
+ * subclasses.
*
* @stable ICU 3.2
*/
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h b/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
index aa8b4ac5079..92dfc386a52 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
@@ -140,7 +140,7 @@ public:
*
* @param limit is the limit index to add to the array.
*
- * @return the run index where the limit index was stored, or -1 if the limit index cannt be stored.
+ * @return the run index where the limit index was stored, or -1 if the limit index cannot be stored.
*
* @see init
* @see grow
@@ -310,7 +310,7 @@ public:
virtual ~FontRuns();
/**
- * Get the <code>LEFontInstance</code> object assoicated with the given run
+ * Get the <code>LEFontInstance</code> object associated with the given run
* of text. Use <code>RunArray::getLimit(run)</code> to get the corresponding
* limit index.
*
@@ -447,7 +447,7 @@ public:
virtual ~LocaleRuns();
/**
- * Get the <code>Locale</code> object assoicated with the given run
+ * Get the <code>Locale</code> object associated with the given run
* of text. Use <code>RunArray::getLimit(run)</code> to get the corresponding
* limit index.
*
@@ -585,7 +585,7 @@ public:
virtual ~ValueRuns();
/**
- * Get the integer value assoicated with the given run
+ * Get the integer value associated with the given run
* of text. Use <code>RunArray::getLimit(run)</code> to get the corresponding
* limit index.
*
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h b/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h
index 98fc2127cb8..455f44a0e6c 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h
@@ -69,7 +69,7 @@ typedef void pl_visualRun;
* @param fontRuns a pointer to a <code>pl_fontRuns</code> object representing the font runs.
*
* @param levelRuns is a pointer to a <code>pl_valueRuns</code> object representing the directional levels.
- * If this pointer in <code>NULL</code> the levels will be determined by running the Unicde
+ * If this pointer in <code>NULL</code> the levels will be determined by running the Unicode
* Bidi algorithm.
*
* @param scriptRuns is a pointer to a <code>pl_valueRuns</code> object representing script runs.
@@ -77,7 +77,7 @@ typedef void pl_visualRun;
* Unicode code points.
*
* @param localeRuns is a pointer to a <code>pl_localeRuns</code> object representing locale runs.
- * The <code>Locale</code> objects are used to determind the language of the text. If this
+ * The <code>Locale</code> objects are used to determine the language of the text. If this
* pointer is <code>NULL</code> the default locale will be used for all of the text.
*
* @param paragraphLevel is the directionality of the paragraph, as in the UBiDi object.
@@ -164,11 +164,6 @@ U_CAPI UBiDiDirection U_EXPORT2
pl_getTextDirection(pl_paragraph *paragraph);
/**
- * Get the max ascent value for all the fonts
- * in the paragraph.
- *
- * @param paragraph the <code>pl_paragraph</code>
- *
* Return the max ascent value for all the fonts
* in the paragraph.
*
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h b/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h
index 48888fdc1fb..f58f64c2247 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h
@@ -138,7 +138,7 @@ pl_getFontRunLimit(const pl_fontRuns *fontRuns,
le_int32 run);
/**
- * Get the <code>le_font</code> object assoicated with the given run
+ * Get the <code>le_font</code> object associated with the given run
* of text. Use <code>pl_getFontRunLimit(run)</code> to get the corresponding
* limit index.
*
@@ -271,7 +271,7 @@ pl_getValueRunLimit(const pl_valueRuns *valueRuns,
le_int32 run);
/**
- * Get the value assoicated with the given run * of text. Use
+ * Get the value associated with the given run * of text. Use
* <code>pl_getValueRunLimit(run)</code> to get the corresponding
* limit index.
*
@@ -403,7 +403,7 @@ pl_getLocaleRunLimit(const pl_localeRuns *localeRuns,
le_int32 run);
/**
- * Get the <code>le_font</code> object assoicated with the given run
+ * Get the <code>le_font</code> object associated with the given run
* of text. Use <code>pl_getLocaleRunLimit(run)</code> to get the corresponding
* limit index.
*
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj b/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj
index 0a1556ed5dd..810bbba913c 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj
@@ -54,7 +54,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
- <OutputFile>..\..\bin\iculx68.dll</OutputFile>
+ <OutputFile>..\..\bin\iculx70.dll</OutputFile>
<AdditionalDependencies>icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ProgramDatabaseFile>.\..\..\lib\iculx.pdb</ProgramDatabaseFile>
@@ -79,7 +79,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
- <OutputFile>..\..\bin\iculx68d.dll</OutputFile>
+ <OutputFile>..\..\bin\iculx70d.dll</OutputFile>
<AdditionalDependencies>icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -104,7 +104,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
- <OutputFile>..\..\bin64\iculx68.dll</OutputFile>
+ <OutputFile>..\..\bin64\iculx70.dll</OutputFile>
<AdditionalDependencies>icuuc.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\..\..\lib64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ProgramDatabaseFile>.\..\..\lib64\iculx.pdb</ProgramDatabaseFile>
@@ -127,7 +127,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
- <OutputFile>..\..\bin64\iculx68d.dll</OutputFile>
+ <OutputFile>..\..\bin64\iculx70d.dll</OutputFile>
<AdditionalDependencies>icuucd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>.\..\..\lib64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
diff --git a/Build/source/libs/icu/icu-src/source/layoutex/plruns.cpp b/Build/source/libs/icu/icu-src/source/layoutex/plruns.cpp
index 95766d6d09b..282602364b8 100644
--- a/Build/source/libs/icu/icu-src/source/layoutex/plruns.cpp
+++ b/Build/source/libs/icu/icu-src/source/layoutex/plruns.cpp
@@ -251,7 +251,7 @@ public:
virtual ~ULocRuns();
/**
- * Get the name of the locale assoicated with the given run
+ * Get the name of the locale associated with the given run
* of text. Use <code>RunArray::getLimit(run)</code> to get the corresponding
* limit index.
*
diff --git a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py
index 5ad5f50e22b..27d08b0a772 100644
--- a/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py
+++ b/Build/source/libs/icu/icu-src/source/python/icutools/databuilder/filtration.py
@@ -273,7 +273,10 @@ def _preprocess_file_filters(requests, config, io):
default_filter_json = "exclude" if config.strategy == "additive" else "include"
for category in all_categories:
filter_json = default_filter_json
- # Figure out the correct filter to create
+ # Special default for category "brkitr_lstm" as "exclude" for now.
+ if "brkitr_lstm" == category:
+ filter_json = "exclude"
+ # Figure out the correct filter to create for now.
if "featureFilters" in json_data and category in json_data["featureFilters"]:
filter_json = json_data["featureFilters"][category]
if filter_json == "include" and "localeFilter" in json_data and category.endswith("_tree"):
diff --git a/Build/source/libs/icu/icu-src/source/runConfigureICU b/Build/source/libs/icu/icu-src/source/runConfigureICU
index 4b3d24a3826..25963505e44 100755
--- a/Build/source/libs/icu/icu-src/source/runConfigureICU
+++ b/Build/source/libs/icu/icu-src/source/runConfigureICU
@@ -143,8 +143,8 @@ case $platform in
if [ ! -x $CXX ]; then
echo "ERROR: xlclang++ was not found, please check the PATH to make sure it is correct."; exit 1
fi
- RELEASE_CFLAGS="-O3"
- RELEASE_CXXFLAGS="-O3"
+ RELEASE_CFLAGS="-O3 -qstrict=ieeefp"
+ RELEASE_CXXFLAGS="-O3 -qstrict=ieeefp"
;;
AIX/GCC)
THE_OS=AIX
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
index acfee82360c..75c1c013ffd 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
@@ -144,7 +144,7 @@ le_int32 FontMap::getFontIndex(const char *fontName)
// The font name table is full. Since there can
// only be scriptCodeCount fonts in use at once,
// there should be at least one that's not being
- // referenced; find it and resue it's index.
+ // referenced; find it and reuse it's index.
for (index = 0; index < fFontCount; index += 1) {
le_int32 script;
diff --git a/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h b/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
index 06f2c1af013..5b287a12afd 100644
--- a/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
+++ b/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
@@ -79,7 +79,7 @@ public:
/**
* This method maps a single character to a glyph index, using the
- * font's charcter to glyph map.
+ * font's character to glyph map.
*
* @param ch - the character
*
diff --git a/Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT b/Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT
index 5fc50b43a0a..d16d0136ee3 100644
--- a/Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT
+++ b/Build/source/libs/icu/icu-src/source/samples/msgfmt/README.TXT
@@ -18,8 +18,7 @@ The code currently provided in the solution file is the answer to the exercises,
Pre-requisites:
1. All the hardware and software requirements from Day 1.
2. Attended or fully understand Day 1 material.
- 3. Read through the ICU user's guide at
- http://www.icu-project.org/userguide/.
+ 3. Read through the ICU user's guide at https://unicode-org.github.io/icu/userguide/.
#Date/Time/Number Formatting Support
9:30am - 10:30am
diff --git a/Build/source/libs/icu/icu-src/source/samples/translit/README.TXT b/Build/source/libs/icu/icu-src/source/samples/translit/README.TXT
index 3e8c2742b91..a0302876c10 100644
--- a/Build/source/libs/icu/icu-src/source/samples/translit/README.TXT
+++ b/Build/source/libs/icu/icu-src/source/samples/translit/README.TXT
@@ -17,8 +17,7 @@ The code currently provided in the solution file is the answer to the exercises,
Pre-requisite:
1. All the hardware and software requirements from Day 1.
2. Attended or fully understand Day 1 material.
- 3. Read through the ICU user's guide at
- http://www.icu-project.org/userguide/.
+ 3. Read through the ICU user's guide at https://unicode-org.github.io/icu/userguide/.
#Transformation Support
10:45am - 12:00pm
diff --git a/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp b/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
index 2d6d0c14908..7347d054aec 100644
--- a/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
+++ b/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
@@ -270,7 +270,7 @@ UErrorCode convsample_03()
What is the best way to determine the buffer size?
The 'buffersize' is in bytes of input.
- For a given converter, divinding this by the minimum char size
+ For a given converter, dividing this by the minimum char size
give you the maximum number of Unicode characters that could be
expected for a given number of input bytes.
see: ucnv_getMinCharSize()
diff --git a/Build/source/libs/icu/icu-src/source/samples/udata/writer.c b/Build/source/libs/icu/icu-src/source/samples/udata/writer.c
index 05dd2fca395..a5b3a968516 100644
--- a/Build/source/libs/icu/icu-src/source/samples/udata/writer.c
+++ b/Build/source/libs/icu/icu-src/source/samples/udata/writer.c
@@ -58,7 +58,7 @@ static const UDataInfo dataInfo={
};
-/* Excersise: add writing out other data types */
+/* Exercise: add writing out other data types */
/* see icu/source/tools/toolutil/unewdata.h */
/* for other possibilities */
diff --git a/Build/source/libs/icu/icu-src/source/stubdata/BUILD b/Build/source/libs/icu/icu-src/source/stubdata/BUILD
new file mode 100644
index 00000000000..abb73519ec4
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/stubdata/BUILD
@@ -0,0 +1,23 @@
+# © 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# This file defines Bazel targets for the ICU4C "stubdata" library header and source files.
+
+load("@rules_cc//cc:defs.bzl", "cc_library")
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+# When compiling code in the `common` dir, the constant
+# `U_COMMON_IMPLEMENTATION` needs to be defined. See
+# https://unicode-org.github.io/icu/userguide/howtouseicu#c-with-your-own-build-system .
+
+cc_library(
+ name = "stubdata",
+ srcs = ["stubdata.cpp"],
+ deps = ["//icu4c/source/common:headers"],
+ local_defines = [
+ "U_COMMON_IMPLEMENTATION",
+ ],
+)
diff --git a/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj b/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj
index 7c58b7ea274..64a6ef1a03a 100644
--- a/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj
@@ -56,7 +56,7 @@
<SetChecksum>true</SetChecksum>
<TurnOffAssemblyGeneration>true</TurnOffAssemblyGeneration>
<!-- Note: stubdata is somewhat odd in that it doesn't suffix the Debug output DLL/LIB with a "d" like common/i18n/etc. -->
- <OutputFile>..\..\$(IcuBinOutputDir)\icudt68.dll</OutputFile>
+ <OutputFile>..\..\$(IcuBinOutputDir)\icudt70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\$(IcuLibOutputDir)\icudt.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\$(IcuLibOutputDir)\icudt.lib</ImportLibrary>
</Link>
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/bocu1tst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/bocu1tst.c
index edfe65002a6..00551c30eef 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/bocu1tst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/bocu1tst.c
@@ -273,7 +273,7 @@ bocu1Prev(int32_t c) {
* Encode a difference -0x10ffff..0x10ffff in 1..4 bytes
* and return a packed integer with them.
*
- * The encoding favors small absolut differences with short encodings
+ * The encoding favors small absolute differences with short encodings
* to compress runs of same-script characters.
*
* @param diff difference value -0x10ffff..0x10ffff
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.c
index f328b8afd66..831236d9dd7 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.c
@@ -90,6 +90,7 @@ void addCollAPITest(TestNode** root)
addTest(root, &TestBengaliSortKey, "tscoll/capitst/TestBengaliSortKey");
addTest(root, &TestGetKeywordValuesForLocale, "tscoll/capitst/TestGetKeywordValuesForLocale");
addTest(root, &TestStrcollNull, "tscoll/capitst/TestStrcollNull");
+ addTest(root, &TestLocaleIDWithUnderscoreAndExtension, "tscoll/capitst/TestLocaleIDWithUnderscoreAndExtension");
}
void TestGetSetAttr(void) {
@@ -657,7 +658,7 @@ void TestSafeClone() {
UCollator * someClonedCollators [CLONETEST_COLLATOR_COUNT];
UCollator * col;
UErrorCode err = U_ZERO_ERROR;
- int8_t idx = 6; /* Leave this here to test buffer alingment in memory*/
+ int8_t idx = 6; /* Leave this here to test buffer alignment in memory*/
uint8_t buffer [CLONETEST_COLLATOR_COUNT] [U_COL_SAFECLONE_BUFFERSIZE];
int32_t bufferSize = U_COL_SAFECLONE_BUFFERSIZE;
const char sampleRuleChars[] = "&Z < CH";
@@ -1174,7 +1175,7 @@ void TestSortKey()
free(sortk2);
free(sortk3);
- log_verbose("Use secondary comparision level testing ...\n");
+ log_verbose("Use secondary comparison level testing ...\n");
ucol_setStrength(col, UCOL_SECONDARY);
sortklen=ucol_getSortKey(col, test1, u_strlen(test1), NULL, 0);
sortk1=(uint8_t*)malloc(sizeof(uint8_t) * (sortklen+1));
@@ -1376,7 +1377,7 @@ doAssert( (ucol_tertiaryOrder(order1) != ucol_tertiaryOrder(order3)), "The terti
return;
}
/* this here, my friends, is either pure lunacy or something so obsolete that even it's mother
- * doesn't care about it. Essentialy, this test complains if secondary values for 'I' and '_'
+ * doesn't care about it. Essentially, this test complains if secondary values for 'I' and '_'
* are the same. According to the UCA, this is not true. Therefore, remove the test.
* Besides, if primary strengths for two code points are different, it doesn't matter one bit
* what is the relation between secondary or any other strengths.
@@ -2313,13 +2314,13 @@ TestOpenBinary(void)
int32_t imageSize;
if((coll==NULL)||(U_FAILURE(status))) {
- log_data_err("could not load collators or error occured: %s\n",
+ log_data_err("could not load collators or error occurred: %s\n",
u_errorName(status));
return;
}
UCA = ucol_open("root", &status);
if((UCA==NULL)||(U_FAILURE(status))) {
- log_data_err("could not load UCA collator or error occured: %s\n",
+ log_data_err("could not load UCA collator or error occurred: %s\n",
u_errorName(status));
return;
}
@@ -2565,4 +2566,18 @@ static void TestStrcollNull(void) {
ucol_close(coll);
}
+static void TestLocaleIDWithUnderscoreAndExtension(void) {
+ UErrorCode err = U_ZERO_ERROR;
+ UCollator* c1 = ucol_open("en-US-u-kn-true", &err);
+ UCollator* c2 = ucol_open("en_US-u-kn-true", &err);
+
+ if (assertSuccess("Failed to create collators", &err)) {
+ assertTrue("Comparison using \"normal\" collator failed", !ucol_greater(c1, u"2", -1, u"10", -1));
+ assertTrue("Comparison using \"bad\" collator failed", !ucol_greater(c2, u"2", -1, u"10", -1));
+ }
+
+ ucol_close(c1);
+ ucol_close(c2);
+}
+
#endif /* #if !UCONFIG_NO_COLLATION */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.h b/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.h
index 0dd20dcdc65..7f6f558b0d3 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.h
@@ -136,6 +136,11 @@
* test strcoll with null arg
*/
static void TestStrcollNull(void);
+
+ /**
+ * Simple test for ICU-21460. The issue affects all components, but was originally reported against collation.
+ */
+ static void TestLocaleIDWithUnderscoreAndExtension(void);
#endif /* #if !UCONFIG_NO_COLLATION */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.c
index c72de75bcd3..51cc8c43e3c 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.c
@@ -49,6 +49,7 @@
#if !UCONFIG_NO_FILE_IO
static void TestBreakIteratorSafeClone(void);
+static void TestBreakIteratorClone(void);
#endif
static void TestBreakIteratorRules(void);
static void TestBreakIteratorRuleError(void);
@@ -66,6 +67,7 @@ void addBrkIterAPITest(TestNode** root)
#if !UCONFIG_NO_FILE_IO
addTest(root, &TestBreakIteratorCAPI, "tstxtbd/cbiapts/TestBreakIteratorCAPI");
addTest(root, &TestBreakIteratorSafeClone, "tstxtbd/cbiapts/TestBreakIteratorSafeClone");
+ addTest(root, &TestBreakIteratorClone, "tstxtbd/cbiapts/TestBreakIteratorClone");
addTest(root, &TestBreakIteratorUText, "tstxtbd/cbiapts/TestBreakIteratorUText");
#endif
addTest(root, &TestBreakIteratorRules, "tstxtbd/cbiapts/TestBreakIteratorRules");
@@ -227,16 +229,16 @@ static void TestBreakIteratorCAPI()
status=U_ZERO_ERROR;
-/* ======= Test ubrk_countAvialable() and ubrk_getAvialable() */
+/* ======= Test ubrk_countAvailable() and ubrk_getAvailable() */
log_verbose("\nTesting ubrk_countAvailable() and ubrk_getAvailable()\n");
count=ubrk_countAvailable();
/* use something sensible w/o hardcoding the count */
if(count < 0){
- log_err("FAIL: Error in ubrk_countAvialable() returned %d\n", count);
+ log_err("FAIL: Error in ubrk_countAvailable() returned %d\n", count);
}
else{
- log_verbose("PASS: ubrk_countAvialable() successful returned %d\n", count);
+ log_verbose("PASS: ubrk_countAvailable() successful returned %d\n", count);
}
for(i=0;i<count;i++)
{
@@ -376,7 +378,7 @@ static void TestBreakIteratorCAPI()
static void TestBreakIteratorSafeClone(void)
{
UChar text[51]; /* Keep this odd to test for 64-bit memory alignment */
- /* NOTE: This doesn't reliably force mis-alignment of following items. */
+ /* NOTE: This doesn't reliably force misalignment of following items. */
uint8_t buffer [CLONETEST_ITERATOR_COUNT] [U_BRK_SAFECLONE_BUFFERSIZE];
int32_t bufferSize = U_BRK_SAFECLONE_BUFFERSIZE;
@@ -515,6 +517,88 @@ static void TestBreakIteratorSafeClone(void)
ubrk_close(someIterators[i]);
}
}
+
+static void TestBreakIteratorClone(void)
+{
+ const UChar text[] = u"He's from Africa. Mr. Livingston, I presume? Yeah";
+ UBreakIterator * someIterators [CLONETEST_ITERATOR_COUNT];
+
+ UBreakIterator * brk;
+ UErrorCode status = U_ZERO_ERROR;
+ int32_t start,pos;
+ int32_t i;
+
+ /*Testing ubrk_clone */
+
+ /* US & Thai - rule-based & dictionary based */
+ someIterators[0] = ubrk_open(UBRK_WORD, "en_US", text, u_strlen(text), &status);
+ if(!someIterators[0] || U_FAILURE(status)) {
+ log_data_err("Couldn't open en_US word break iterator - %s\n", u_errorName(status));
+ return;
+ }
+
+ someIterators[1] = ubrk_open(UBRK_WORD, "th_TH", text, u_strlen(text), &status);
+ if(!someIterators[1] || U_FAILURE(status)) {
+ log_data_err("Couldn't open th_TH word break iterator - %s\n", u_errorName(status));
+ return;
+ }
+
+ /* test each type of iterator */
+ for (i = 0; i < CLONETEST_ITERATOR_COUNT; i++)
+ {
+ /* error status - should return 0 & keep error the same */
+ status = U_MEMORY_ALLOCATION_ERROR;
+ if (NULL != ubrk_clone(someIterators[i], &status) || status != U_MEMORY_ALLOCATION_ERROR)
+ {
+ log_err("FAIL: Cloned Iterator failed to deal correctly with incoming error status\n");
+ }
+
+ status = U_ZERO_ERROR;
+
+ /* Do these cloned Iterators work at all - make a first & next call */
+ brk = ubrk_clone(someIterators[i], &status);
+
+ start = ubrk_first(brk);
+ if(start!=0)
+ log_err("error ubrk_start(clone) did not return 0, but %i\n", start);
+ pos=ubrk_next(brk);
+ if(pos!=4)
+ log_err("error ubrk_next(clone) did not return 4, but %i\n", pos);
+
+ ubrk_close(brk);
+
+ pos = ubrk_next(someIterators[i]);
+ if (pos != 4) {
+ log_err("error ubrk_next(iter) did not return 4, but %i\n", pos);
+ }
+
+ brk = ubrk_clone(someIterators[i], &status);
+ // The text position should be kept in the new clone.
+ start = ubrk_current(brk);
+ if (start != 4) {
+ log_err("error ubrk_current(clone) did not return 4, but %i\n", start);
+ }
+
+ pos = ubrk_next(brk);
+ if (pos != 5) {
+ log_err("error ubrk_next(clone) did not return 5, but %i\n", pos);
+ }
+ start = ubrk_current(brk);
+ if (start != 5) {
+ log_err("error ubrk_current(clone) did not return 5, but %i\n", start);
+ }
+
+ start = ubrk_current(someIterators[i]);
+ if (start != 4) {
+ log_err("error ubrk_current(iter) did not keep the same position of 4,"
+ " but %i after advancing the position in its clone.\n", start);
+ }
+
+ ubrk_close(brk);
+
+ ubrk_close(someIterators[i]);
+ }
+}
#endif
@@ -618,7 +702,7 @@ static void TestBreakIteratorRules() {
pos = ubrk_first(bi);
do {
if (pos2 != pos) {
- log_err("FAIL: interator from ubrk_openBinaryRules does not match original, get pos = %d instead of %d", pos2, pos);
+ log_err("FAIL: iterator from ubrk_openBinaryRules does not match original, get pos = %d instead of %d", pos2, pos);
}
pos2 = ubrk_next(bi2);
pos = ubrk_next(bi);
@@ -667,7 +751,7 @@ static void TestBreakIteratorRuleError() {
/*
-* TestsBreakIteratorStatusVals() Test the ubrk_getRuleStatusVec() funciton
+* TestsBreakIteratorStatusVals() Test the ubrk_getRuleStatusVec() function
*/
static void TestBreakIteratorStatusVec() {
#define RULE_STRING_LENGTH 200
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.c
index e183b913000..6d233130fe0 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.c
@@ -258,10 +258,12 @@ static void buildPseudoTables(void)
- & == RLM
- A-F == Arabic Letters 0631-0636
- G-V == Hebrew letters 05d7-05e6
- - W-Z == Unassigned RTL 08d0-08d3
+ - W-Z == Unassigned RTL 05CC..05CF
+ originally 08D0..08D3
Unicode 6.1 changes U+08A0..U+08FF from R to AL which works ok.
Unicode 11 adds U+08D3 ARABIC SMALL LOW WAW which has bc=NSM
so we stop using Z in this test.
+ Unicode 14 assigns 08D0..08D2 to diacritics (bc=NSM) so we switch to 05CC..05CF.
- 0-5 == western digits 0030-0035
- 6-9 == Arabic-Indic digits 0666-0669
- ` == Combining Grave Accent 0300 (NSM)
@@ -342,7 +344,7 @@ static void buildPseudoTables(void)
UCharToPseud2[uchar & 0x00ff] = c;
}
/* initialize Unassigned code points */
- for (i = 32, uchar=0x08D0; i < 36; i++, uchar++) {
+ for (i = 32, uchar=0x05CC; i < 36; i++, uchar++) {
c = (uint8_t)columns[i];
pseudoToUChar[c] = uchar;
UCharToPseud2[uchar & 0x00ff] = c;
@@ -2222,7 +2224,7 @@ testInverse(void) {
ubidi_close(pBiDi);
- log_verbose("inverse Bidi: rountrips: %5u\nnon-roundtrips: %5u\n", countRoundtrips, countNonRoundtrips);
+ log_verbose("inverse Bidi: roundtrips: %5u\nnon-roundtrips: %5u\n", countRoundtrips, countNonRoundtrips);
_testWriteReverse();
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
index c15d2771e5f..b30db4cce30 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
@@ -41,6 +41,7 @@ void TestGetWindowsTimeZoneID(void);
void TestGetTimeZoneIDByWindowsID(void);
void TestJpnCalAddSetNextEra(void);
void TestUcalOpenBufferRead(void);
+void TestGetTimeZoneOffsetFromLocal(void);
void addCalTest(TestNode** root);
@@ -65,6 +66,7 @@ void addCalTest(TestNode** root)
addTest(root, &TestGetTimeZoneIDByWindowsID, "tsformat/ccaltst/TestGetTimeZoneIDByWindowsID");
addTest(root, &TestJpnCalAddSetNextEra, "tsformat/ccaltst/TestJpnCalAddSetNextEra");
addTest(root, &TestUcalOpenBufferRead, "tsformat/ccaltst/TestUcalOpenBufferRead");
+ addTest(root, &TestGetTimeZoneOffsetFromLocal, "tsformat/ccaltst/TestGetTimeZoneOffsetFromLocal");
}
/* "GMT" */
@@ -118,6 +120,7 @@ static void TestCalendar()
char tempMsgBuf2[256]; // u_austrcpy() of some formatted dates & times.
UChar zone1[64], zone2[64];
const char *tzver = 0;
+ int32_t tzverLen = 0;
UChar canonicalID[64];
UBool isSystemID = FALSE;
const UCalGetTypeTest * ucalGetTypeTestPtr;
@@ -272,10 +275,13 @@ static void TestCalendar()
tzver = ucal_getTZDataVersion(&status);
if (U_FAILURE(status)) {
log_err_status(status, "FAIL: ucal_getTZDataVersion() => %s\n", u_errorName(status));
- } else if (uprv_strlen(tzver) != 5 /*4 digits + 1 letter*/) {
- log_err("FAIL: Bad version string was returned by ucal_getTZDataVersion\n");
} else {
- log_verbose("PASS: ucal_getTZDataVersion returned %s\n", tzver);
+ tzverLen = uprv_strlen(tzver);
+ if (tzverLen == 5 || tzverLen == 6 /* 4 digits + 1 or 2 letters */) {
+ log_verbose("PASS: ucal_getTZDataVersion returned %s\n", tzver);
+ } else {
+ log_err("FAIL: Bad version string was returned by ucal_getTZDataVersion\n");
+ }
}
/*Testing ucal_getCanonicalTimeZoneID*/
@@ -330,7 +336,7 @@ static void TestCalendar()
/* use something sensible w/o hardcoding the count */
if(count > 0) {
log_verbose("PASS: ucal_countAvailable() works fine\n");
- log_verbose("The no: of locales for which calendars are avilable are %d\n", count);
+ log_verbose("The no: of locales for which calendars are available are %d\n", count);
} else {
log_data_err("FAIL: Error in countAvailable()\n");
}
@@ -432,7 +438,7 @@ static void TestCalendar()
log_err("FAIL: there is an error in getAttributes or setAttributes\n");
else
log_verbose("PASS: attribute set and got successfully\n");
- /*set it back to orginal value */
+ /*set it back to original value */
log_verbose("Setting it back to normal\n");
ucal_setAttribute(calit, UCAL_LENIENT, count);
if(ucal_getAttribute(calit, UCAL_LENIENT)!=count)
@@ -1027,7 +1033,7 @@ static void TestAddRollExtensive()
checkDate(cal, y, m, d);
ucal_roll(cal, (UCalendarDateFields)-1, 10, &status);
if(status==U_ILLEGAL_ARGUMENT_ERROR)
- log_verbose("Pass: illegal arguement error as expected\n");
+ log_verbose("Pass: illegal argument error as expected\n");
else{
log_err("Fail: no illegal argument error got..: %s\n", u_errorName(status));
return;
@@ -1879,7 +1885,7 @@ static const UChar tzUSPacific[] = { 0x55,0x53,0x2F,0x50,0x61,0x63,0x69,0x66,0x6
static const UChar tzGMT[] = { 0x47,0x4D,0x54,0 }; /* "GMT" */
static const TFDItem tfdItems[] = {
- /* timezone locale start target progres yDf MDf dDf HDf mDf sDf */
+ /* timezone locale start target progress yDf MDf dDf HDf mDf sDf */
/* For these we compute the progressive difference for each field - not resetting the calendar after each call */
{ tzUSPacific, "en_US", 1267459800000.0, 1277772600000.0, TRUE, 0, 3, 27, 9, 40, 0 }, /* 2010-Mar-01 08:10 -> 2010-Jun-28 17:50 */
{ tzUSPacific, "en_US", 1267459800000.0, 1299089280000.0, TRUE, 1, 0, 1, 1, 58, 0 }, /* 2010-Mar-01 08:10 -> 2011-Mar-02 10:08 */
@@ -2553,4 +2559,220 @@ void TestUcalOpenBufferRead() {
ucal_close(cal);
}
+
+/*
+ * Testing ucal_getTimeZoneOffsetFromLocal
+ */
+void
+TestGetTimeZoneOffsetFromLocal() {
+ static const UChar utc[] = u"Etc/GMT";
+
+ const int32_t HOUR = 60*60*1000;
+ const int32_t MINUTE = 60*1000;
+
+ const int32_t DATES[][6] = {
+ {2006, UCAL_APRIL, 2, 1, 30, 1*HOUR+30*MINUTE},
+ {2006, UCAL_APRIL, 2, 2, 00, 2*HOUR},
+ {2006, UCAL_APRIL, 2, 2, 30, 2*HOUR+30*MINUTE},
+ {2006, UCAL_APRIL, 2, 3, 00, 3*HOUR},
+ {2006, UCAL_APRIL, 2, 3, 30, 3*HOUR+30*MINUTE},
+ {2006, UCAL_OCTOBER, 29, 0, 30, 0*HOUR+30*MINUTE},
+ {2006, UCAL_OCTOBER, 29, 1, 00, 1*HOUR},
+ {2006, UCAL_OCTOBER, 29, 1, 30, 1*HOUR+30*MINUTE},
+ {2006, UCAL_OCTOBER, 29, 2, 00, 2*HOUR},
+ {2006, UCAL_OCTOBER, 29, 2, 30, 2*HOUR+30*MINUTE},
+ };
+
+ // Expected offsets by
+ // void U_ucal_getTimeZoneOffsetFromLocal(
+ // const UCalendar* cal,
+ // UTimeZoneLocalOption nonExistingTimeOpt,
+ // UTimeZoneLocalOption duplicatedTimeOpt,
+ // int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status);
+ // with nonExistingTimeOpt=UCAL_TZ_LOCAL_STANDARD and
+ // duplicatedTimeOpt=UCAL_TZ_LOCAL_STANDARD
+ const int32_t OFFSETS2[][2] = {
+ // April 2, 2006
+ {-8*HOUR, 0},
+ {-8*HOUR, 0},
+ {-8*HOUR, 0},
+ {-8*HOUR, 1*HOUR},
+ {-8*HOUR, 1*HOUR},
+
+ // Oct 29, 2006
+ {-8*HOUR, 1*HOUR},
+ {-8*HOUR, 0},
+ {-8*HOUR, 0},
+ {-8*HOUR, 0},
+ {-8*HOUR, 0},
+ };
+
+ // Expected offsets by
+ // void U_ucal_getTimeZoneOffsetFromLocal(
+ // const UCalendar* cal,
+ // UTimeZoneLocalOption nonExistingTimeOpt,
+ // UTimeZoneLocalOption duplicatedTimeOpt,
+ // int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status);
+ // with nonExistingTimeOpt=UCAL_TZ_LOCAL_DAYLIGHT and
+ // duplicatedTimeOpt=UCAL_TZ_LOCAL_DAYLIGHT
+ const int32_t OFFSETS3[][2] = {
+ // April 2, 2006
+ {-8*HOUR, 0},
+ {-8*HOUR, 1*HOUR},
+ {-8*HOUR, 1*HOUR},
+ {-8*HOUR, 1*HOUR},
+ {-8*HOUR, 1*HOUR},
+
+ // October 29, 2006
+ {-8*HOUR, 1*HOUR},
+ {-8*HOUR, 1*HOUR},
+ {-8*HOUR, 1*HOUR},
+ {-8*HOUR, 0},
+ {-8*HOUR, 0},
+ };
+
+ UErrorCode status = U_ZERO_ERROR;
+
+ int32_t rawOffset, dstOffset;
+ UCalendar *cal = ucal_open(utc, -1, "en", UCAL_GREGORIAN, &status);
+ if (U_FAILURE(status)) {
+ log_data_err("ucal_open: %s", u_errorName(status));
+ return;
+ }
+
+ // Calculate millis
+ UDate MILLIS[UPRV_LENGTHOF(DATES)];
+ for (int32_t i = 0; i < UPRV_LENGTHOF(DATES); i++) {
+ ucal_setDateTime(cal, DATES[i][0], DATES[i][1], DATES[i][2],
+ DATES[i][3], DATES[i][4], 0, &status);
+ MILLIS[i] = ucal_getMillis(cal, &status);
+ if (U_FAILURE(status)) {
+ log_data_err("ucal_getMillis failed");
+ return;
+ }
+ }
+ ucal_setTimeZone(cal, AMERICA_LOS_ANGELES, -1, &status);
+
+ // Test void ucal_getTimeZoneOffsetFromLocal(
+ // const UCalendar* cal,
+ // UTimeZoneLocalOption nonExistingTimeOpt,
+ // UTimeZoneLocalOption duplicatedTimeOpt,
+ // int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status);
+ // with nonExistingTimeOpt=UCAL_TZ_LOCAL_STANDARD and
+ // duplicatedTimeOpt=UCAL_TZ_LOCAL_STANDARD
+ for (int m = 0; m < UPRV_LENGTHOF(DATES); m++) {
+ status = U_ZERO_ERROR;
+ ucal_setMillis(cal, MILLIS[m], &status);
+ if (U_FAILURE(status)) {
+ log_data_err("ucal_setMillis: %s\n", u_errorName(status));
+ }
+
+ ucal_getTimeZoneOffsetFromLocal(cal, UCAL_TZ_LOCAL_STANDARD_FORMER, UCAL_TZ_LOCAL_STANDARD_LATTER,
+ &rawOffset, &dstOffset, &status);
+ if (U_FAILURE(status)) {
+ log_err("ERROR: ucal_getTimeZoneOffsetFromLocal((%d-%d-%d %d:%d:0),"
+ "UCAL_TZ_LOCAL_STANDARD_FORMER, UCAL_TZ_LOCAL_STANDARD_LATTER: %s\n",
+ DATES[m][0], DATES[m][1], DATES[m][2], DATES[m][3], DATES[m][4],
+ u_errorName(status));
+ } else if (rawOffset != OFFSETS2[m][0] || dstOffset != OFFSETS2[m][1]) {
+ log_err("Bad offset returned at (%d-%d-%d %d:%d:0) "
+ "(wall/UCAL_TZ_LOCAL_STANDARD_FORMER/UCAL_TZ_LOCAL_STANDARD_LATTER) \n- Got: %d / %d "
+ " Expected %d / %d\n",
+ DATES[m][0], DATES[m][1], DATES[m][2], DATES[m][3], DATES[m][4],
+ rawOffset, dstOffset, OFFSETS2[m][0], OFFSETS2[m][1]);
+ }
+ }
+
+ // Test void ucal_getTimeZoneOffsetFromLocal(
+ // const UCalendar* cal,
+ // UTimeZoneLocalOption nonExistingTimeOpt,
+ // UTimeZoneLocalOption duplicatedTimeOpt,
+ // int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status);
+ // with nonExistingTimeOpt=UCAL_TZ_LOCAL_DAYLIGHT and
+ // duplicatedTimeOpt=UCAL_TZ_LOCAL_DAYLIGHT
+ for (int m = 0; m < UPRV_LENGTHOF(DATES); m++) {
+ status = U_ZERO_ERROR;
+ ucal_setMillis(cal, MILLIS[m], &status);
+ if (U_FAILURE(status)) {
+ log_data_err("ucal_setMillis: %s\n", u_errorName(status));
+ }
+
+ ucal_getTimeZoneOffsetFromLocal(cal, UCAL_TZ_LOCAL_DAYLIGHT_LATTER, UCAL_TZ_LOCAL_DAYLIGHT_FORMER,
+ &rawOffset, &dstOffset, &status);
+ if (U_FAILURE(status)) {
+ log_err("ERROR: ucal_getTimeZoneOffsetFromLocal((%d-%d-%d %d:%d:0),"
+ "UCAL_TZ_LOCAL_DAYLIGHT_LATTER, UCAL_TZ_LOCAL_DAYLIGHT_FORMER: %s\n",
+ DATES[m][0], DATES[m][1], DATES[m][2], DATES[m][3], DATES[m][4],
+ u_errorName(status));
+ } else if (rawOffset != OFFSETS3[m][0] || dstOffset != OFFSETS3[m][1]) {
+ log_err("Bad offset returned at (%d-%d-%d %d:%d:0) "
+ "(wall/UCAL_TZ_LOCAL_DAYLIGHT_LATTER/UCAL_TZ_LOCAL_DAYLIGHT_FORMER) \n- Got: %d / %d "
+ " Expected %d / %d\n",
+ DATES[m][0], DATES[m][1], DATES[m][2], DATES[m][3], DATES[m][4],
+ rawOffset, dstOffset, OFFSETS3[m][0], OFFSETS3[m][1]);
+ }
+ }
+
+ // Test void ucal_getTimeZoneOffsetFromLocal(
+ // const UCalendar* cal,
+ // UTimeZoneLocalOption nonExistingTimeOpt,
+ // UTimeZoneLocalOption duplicatedTimeOpt,
+ // int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status);
+ // with nonExistingTimeOpt=UCAL_TZ_LOCAL_FORMER and
+ // duplicatedTimeOpt=UCAL_TZ_LOCAL_LATTER
+ for (int m = 0; m < UPRV_LENGTHOF(DATES); m++) {
+ status = U_ZERO_ERROR;
+ ucal_setMillis(cal, MILLIS[m], &status);
+ if (U_FAILURE(status)) {
+ log_data_err("ucal_setMillis: %s\n", u_errorName(status));
+ }
+
+ ucal_getTimeZoneOffsetFromLocal(cal, UCAL_TZ_LOCAL_FORMER, UCAL_TZ_LOCAL_LATTER,
+ &rawOffset, &dstOffset, &status);
+ if (U_FAILURE(status)) {
+ log_err("ERROR: ucal_getTimeZoneOffsetFromLocal((%d-%d-%d %d:%d:0),"
+ "UCAL_TZ_LOCAL_FORMER, UCAL_TZ_LOCAL_LATTER: %s\n",
+ DATES[m][0], DATES[m][1], DATES[m][2], DATES[m][3], DATES[m][4],
+ u_errorName(status));
+ } else if (rawOffset != OFFSETS2[m][0] || dstOffset != OFFSETS2[m][1]) {
+ log_err("Bad offset returned at (%d-%d-%d %d:%d:0) "
+ "(wall/UCAL_TZ_LOCAL_FORMER/UCAL_TZ_LOCAL_LATTER) \n- Got: %d / %d "
+ " Expected %d / %d\n",
+ DATES[m][0], DATES[m][1], DATES[m][2], DATES[m][3], DATES[m][4],
+ rawOffset, dstOffset, OFFSETS2[m][0], OFFSETS2[m][1]);
+ }
+ }
+
+ // Test void ucal_getTimeZoneOffsetFromLocal(
+ // const UCalendar* cal,
+ // UTimeZoneLocalOption nonExistingTimeOpt,
+ // UTimeZoneLocalOption duplicatedTimeOpt,
+ // int32_t* rawOffset, int32_t* dstOffset, UErrorCode* status);
+ // with nonExistingTimeOpt=UCAL_TZ_LOCAL_LATTER and
+ // duplicatedTimeOpt=UCAL_TZ_LOCAL_FORMER
+ for (int m = 0; m < UPRV_LENGTHOF(DATES); m++) {
+ status = U_ZERO_ERROR;
+ ucal_setMillis(cal, MILLIS[m], &status);
+ if (U_FAILURE(status)) {
+ log_data_err("ucal_setMillis: %s\n", u_errorName(status));
+ }
+
+ ucal_getTimeZoneOffsetFromLocal(cal, UCAL_TZ_LOCAL_LATTER, UCAL_TZ_LOCAL_FORMER,
+ &rawOffset, &dstOffset, &status);
+ if (U_FAILURE(status)) {
+ log_err("ERROR: ucal_getTimeZoneOffsetFromLocal((%d-%d-%d %d:%d:0),"
+ "UCAL_TZ_LOCAL_LATTER, UCAL_TZ_LOCAL_FORMER: %s\n",
+ DATES[m][0], DATES[m][1], DATES[m][2], DATES[m][3], DATES[m][4],
+ u_errorName(status));
+ } else if (rawOffset != OFFSETS3[m][0] || dstOffset != OFFSETS3[m][1]) {
+ log_err("Bad offset returned at (%d-%d-%d %d:%d:0) "
+ "(wall/UCAL_TZ_LOCAL_LATTER/UCAL_TZ_LOCAL_FORMER) \n- Got: %d / %d "
+ " Expected %d / %d\n",
+ DATES[m][0], DATES[m][1], DATES[m][2], DATES[m][3], DATES[m][4],
+ rawOffset, dstOffset, OFFSETS3[m][0], OFFSETS3[m][1]);
+ }
+ }
+ ucal_close(cal);
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c
index aae16f98f44..50750137908 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c
@@ -163,7 +163,7 @@ static void ListNames(void) {
uenum_close(allNamesEnum);
err = U_ZERO_ERROR;
- /*Tests ucnv_getAvailableName(), getAvialableCount()*/
+ /*Tests ucnv_getAvailableName(), getAvailableCount()*/
log_verbose("Testing ucnv_countAvailable()...");
@@ -3262,7 +3262,7 @@ static void TestFromUCountPending(){
continue;
}
if(len != fromUnicodeTests[i].exp){
- log_err("Did not get the expeced output for ucnv_fromUInputConsumed.\n");
+ log_err("Did not get the expected output for ucnv_fromUInputConsumed.\n");
}
}
status = U_ZERO_ERROR;
@@ -3368,7 +3368,7 @@ TestToUCountPending(){
continue;
}
if(len != toUnicodeTests[i].exp){
- log_err("Did not get the expeced output for ucnv_toUInputConsumed.\n");
+ log_err("Did not get the expected output for ucnv_toUInputConsumed.\n");
}
}
status = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
index cded31edd5b..00b2d6a01a1 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
@@ -44,6 +44,7 @@ static void TestParseErrorReturnValue(void);
static void TestFormatForFields(void);
static void TestForceGannenNumbering(void);
static void TestMapDateToCalFields(void);
+static void TestNarrowQuarters(void);
void addDateForTest(TestNode** root);
@@ -65,6 +66,7 @@ void addDateForTest(TestNode** root)
TESTCASE(TestFormatForFields);
TESTCASE(TestForceGannenNumbering);
TESTCASE(TestMapDateToCalFields);
+ TESTCASE(TestNarrowQuarters);
}
/* Testing the DateFormat API */
static void TestDateFormat()
@@ -242,7 +244,7 @@ static void TestDateFormat()
log_err("FAIL: Error in parsing using udat_parse(.....) %s\n", myErrorName(status) );
}
else
- log_verbose("PASS: parsing succesful\n");
+ log_verbose("PASS: parsing successful\n");
/*format it back and check for equality */
@@ -260,7 +262,7 @@ static void TestDateFormat()
log_err("FAIL: udat_parse(\"bad string\") passed when it should have failed\n");
}
else
- log_verbose("PASS: parsing succesful\n");
+ log_verbose("PASS: parsing successful\n");
@@ -275,7 +277,7 @@ static void TestDateFormat()
myErrorName(status) );
}
else
- log_verbose("PASS: creating dateformat using udat_openPattern() succesful\n");
+ log_verbose("PASS: creating dateformat using udat_openPattern() successful\n");
/*Testing applyPattern and toPattern */
@@ -353,7 +355,7 @@ static void TestDateFormat()
if(u_strcmp(myNumformat(numformat1, num), myNumformat(numformat2, num)) !=0)
log_err("FAIL: error in setNumberFormat or getNumberFormat()\n");
else
- log_verbose("PASS:setNumberFormat and getNumberFormat succesful\n");
+ log_verbose("PASS:setNumberFormat and getNumberFormat successful\n");
/*Test getNumberFormat() and adoptNumberFormat() */
log_verbose("\nTesting the get and adopt NumberFormat properties of date format\n");
@@ -363,7 +365,7 @@ static void TestDateFormat()
if(u_strcmp(myNumformat(adoptNF, num), myNumformat(numformat2, num)) !=0)
log_err("FAIL: error in adoptNumberFormat or getNumberFormat()\n");
else
- log_verbose("PASS:adoptNumberFormat and getNumberFormat succesful\n");
+ log_verbose("PASS:adoptNumberFormat and getNumberFormat successful\n");
/*try setting the number format to another format */
numformat1=udat_getNumberFormat(def);
@@ -372,7 +374,7 @@ static void TestDateFormat()
if(u_strcmp(myNumformat(numformat1, num), myNumformat(numformat2, num)) !=0)
log_err("FAIL: error in setNumberFormat or getNumberFormat()\n");
else
- log_verbose("PASS: setNumberFormat and getNumberFormat succesful\n");
+ log_verbose("PASS: setNumberFormat and getNumberFormat successful\n");
@@ -579,7 +581,7 @@ static void TestRelativeDateFormat()
/*Testing udat_getSymbols() and udat_setSymbols() and udat_countSymbols()*/
static void TestSymbols()
{
- UDateFormat *def, *fr, *zhChiCal;
+ UDateFormat *def, *fr, *zhChiCal, *esMX;
UErrorCode status = U_ZERO_ERROR;
UChar *value=NULL;
UChar *result = NULL;
@@ -618,7 +620,15 @@ static void TestSymbols()
myErrorName(status) );
return;
}
-
+ /*creating a dateformat with es_MX locale */
+ log_verbose("\ncreating a date format with es_MX locale\n");
+ esMX = udat_open(UDAT_SHORT, UDAT_NONE, "es_MX", NULL, 0, NULL, 0, &status);
+ if(U_FAILURE(status))
+ {
+ log_data_err("error in creating the dateformat using no date, short time, locale es_MX -> %s (Are you missing data?)\n",
+ myErrorName(status) );
+ return;
+ }
/*Testing countSymbols, getSymbols and setSymbols*/
log_verbose("\nTesting countSymbols\n");
@@ -658,7 +668,7 @@ static void TestSymbols()
log_err("FAIL: Error in udat_getSymbols().... %s\n", myErrorName(status) );
}
else
- log_verbose("PASS: getSymbols succesful\n");
+ log_verbose("PASS: getSymbols successful\n");
if(u_strcmp(result, pattern)==0)
log_verbose("PASS: getSymbols retrieved the right value\n");
@@ -683,6 +693,8 @@ static void TestSymbols()
VerifygetSymbols(def, UDAT_QUARTERS, 3, "4th quarter");
VerifygetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "T2");
VerifygetSymbols(def, UDAT_SHORT_QUARTERS, 2, "Q3");
+ VerifygetSymbols(esMX, UDAT_STANDALONE_NARROW_QUARTERS, 1, "2T");
+ VerifygetSymbols(def, UDAT_NARROW_QUARTERS, 2, "3");
VerifygetSymbols(zhChiCal, UDAT_CYCLIC_YEARS_ABBREVIATED, 0, "\\u7532\\u5B50");
VerifygetSymbols(zhChiCal, UDAT_CYCLIC_YEARS_NARROW, 59, "\\u7678\\u4EA5");
VerifygetSymbols(zhChiCal, UDAT_ZODIAC_NAMES_ABBREVIATED, 0, "\\u9F20");
@@ -780,7 +792,7 @@ free(pattern);
log_err("FAIL: error in retrieving the value using getSymbols i.e roundtrip\n");
if(u_strcmp(result, value)!=0)
- log_data_err("FAIL: Error in settting and getting symbols\n");
+ log_data_err("FAIL: Error in setting and getting symbols\n");
else
log_verbose("PASS: setSymbols successful\n");
@@ -803,8 +815,10 @@ free(pattern);
VerifysetSymbols(fr, UDAT_STANDALONE_NARROW_MONTHS, 2, "M");
VerifysetSymbols(fr, UDAT_QUARTERS, 0, "1. Quart");
VerifysetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "QQ2");
+ VerifysetSymbols(fr, UDAT_NARROW_QUARTERS, 1, "!2");
VerifysetSymbols(fr, UDAT_STANDALONE_QUARTERS, 2, "3rd Quar.");
VerifysetSymbols(fr, UDAT_STANDALONE_SHORT_QUARTERS, 3, "4QQ");
+ VerifysetSymbols(fr, UDAT_STANDALONE_NARROW_QUARTERS, 3, "!4");
VerifysetSymbols(zhChiCal, UDAT_CYCLIC_YEARS_ABBREVIATED, 1, "yi-chou");
VerifysetSymbols(zhChiCal, UDAT_ZODIAC_NAMES_ABBREVIATED, 1, "Ox");
@@ -827,6 +841,7 @@ free(pattern);
udat_close(fr);
udat_close(def);
udat_close(zhChiCal);
+ udat_close(esMX);
if(result != NULL) {
free(result);
result = NULL;
@@ -1943,4 +1958,63 @@ static void TestMapDateToCalFields(void){
}
}
+static void TestNarrowQuarters(void) {
+ // Test for rdar://79238094
+ const UChar* testCases[] = {
+ u"en_US", u"QQQQ y", u"1st quarter 1970",
+ u"en_US", u"QQQ y", u"Q1 1970",
+ u"en_US", u"QQQQQ y", u"1 1970",
+ u"es_MX", u"QQQQ y", u"1.er trimestre 1970",
+ u"es_MX", u"QQQ y", u"T1 1970",
+ u"es_MX", u"QQQQQ y", u"1 1970",
+ u"en_US", u"qqqq", u"1st quarter",
+ u"en_US", u"qqq", u"Q1",
+ u"en_US", u"qqqqq", u"1",
+ u"es_MX", u"qqqq", u"1.er trimestre",
+ u"es_MX", u"qqq", u"T1",
+ u"es_MX", u"qqqqq", u"1T",
+ };
+
+ UErrorCode err = U_ZERO_ERROR;
+ UChar result[100];
+ UDate parsedDate = 0;
+ UDate expectedFormatParsedDate = 0;
+ UDate expectedStandaloneParsedDate = 0;
+
+ for (int32_t i = 0; i < UPRV_LENGTHOF(testCases); i += 3) {
+ const UChar* localeID = testCases[i];
+ const UChar* pattern = testCases[i + 1];
+ const UChar* expectedResult = testCases[i + 2];
+
+ err = U_ZERO_ERROR;
+
+ UDateFormat* df = udat_open(UDAT_PATTERN, UDAT_PATTERN, austrdup(localeID), u"UTC", 0, pattern, -1, &err);
+
+ udat_format(df, 0, result, 100, NULL, &err);
+
+ if (assertSuccess("Formatting date failed", &err)) {
+ assertUEquals("Wrong formatting result", expectedResult, result);
+ }
+
+ bool patternIsStandaloneQuarter = u_strchr(pattern, u'q') != NULL;
+
+ parsedDate = udat_parse(df, expectedResult, -1, NULL, &err);
+ if (!patternIsStandaloneQuarter && expectedFormatParsedDate == 0) {
+ expectedFormatParsedDate = parsedDate;
+ } else if (patternIsStandaloneQuarter && expectedStandaloneParsedDate == 0) {
+ expectedStandaloneParsedDate = parsedDate;
+ }
+
+ if (assertSuccess("Parsing date failed", &err)) {
+ if (patternIsStandaloneQuarter) {
+ assertDoubleEquals("Wrong parsing result", expectedStandaloneParsedDate, parsedDate);
+ } else {
+ assertDoubleEquals("Wrong parsing result", expectedFormatParsedDate, parsedDate);
+ }
+ }
+
+ udat_close(df);
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.c
index d7126eca616..f9132bd03b2 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.c
@@ -67,7 +67,7 @@ void TestTwoDigitYearDSTParse()
myErrorName(status) );
}
else {
- log_verbose("PASS: creating dateformat using udat_openPattern() succesful\n");
+ log_verbose("PASS: creating dateformat using udat_openPattern() successful\n");
u_uastrcpy(pattern, "dd-MMM-yy h:mm:ss 'o''clock' a z");
fmt= udat_open(UDAT_PATTERN,UDAT_PATTERN,"en_US", NULL, 0,pattern, u_strlen(pattern), &status);
@@ -135,7 +135,7 @@ void TestPartialParse994()
pos=0;
d = udat_parse(f, s, u_strlen(s), &pos, &status);
if(U_FAILURE(status)) {
- log_data_err("FAIL: could not parse - exitting");
+ log_data_err("FAIL: could not parse - exiting");
return;
}
fmtChars = myDateFormat(f, d);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.c
index e88327d138e..ab74880a330 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.c
@@ -85,7 +85,7 @@ void Test4029195()
if(fmdt) {
log_verbose("today: %s\n", austrdup(fmdt));
} else {
- log_data_err("ERROR: couldn't format, exitting test");
+ log_data_err("ERROR: couldn't format, exiting test");
return;
}
@@ -351,7 +351,7 @@ void Test4061287()
if(U_FAILURE(status))
ok = TRUE;
if(ok!=TRUE)
- log_err("Fail: Lenient not working: does lenient parsing in spite of setting Leninent as FALSE ");
+ log_err("Fail: Lenient not working: does lenient parsing in spite of setting Lenient as FALSE ");
udat_close(df);
@@ -424,7 +424,7 @@ void Test4073003()
result =myFormatit(fmt, d);
result2 =myFormatit(fmt, dd);
if(!result || !result2) {
- log_data_err("Fail: could not format - exitting test\n");
+ log_data_err("Fail: could not format - exiting test\n");
return;
}
if (u_strcmp(result, result2)!=0){
@@ -491,7 +491,7 @@ void Test714(void)
}
result =myFormatit(fmt, d);
if(!result) {
- log_data_err("Fail: could not format - exitting test\n");
+ log_data_err("Fail: could not format - exiting test\n");
return;
}
u_uastrcpy(temp, expect);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.h b/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.h
index bcee4c42f28..09c01f4ee6b 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.h
@@ -28,7 +28,7 @@
#include "unicode/uformattedvalue.h"
-/* Internal fucntion used by all the test format files */
+/* Internal function used by all the test format files */
UChar* myDateFormat(UDateFormat *dat, UDate d);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/chashtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/chashtst.c
index 5d1a4a8718f..405d56d4e5d 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/chashtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/chashtst.c
@@ -11,6 +11,7 @@
*******************************************************************************
*/
+#include <stdbool.h>
#include "cintltst.h"
#include "uhash.h"
#include "unicode/ctest.h"
@@ -22,6 +23,7 @@
*********************************************************************/
static void TestBasic(void);
+static void TestAllowZero(void);
static void TestOtherAPI(void);
static void hashIChars(void);
@@ -87,6 +89,7 @@ _compareLong(int32_t a, int32_t b) {
void addHashtableTest(TestNode** root) {
addTest(root, &TestBasic, "tsutil/chashtst/TestBasic");
+ addTest(root, &TestAllowZero, "tsutil/chashtst/TestAllowZero");
addTest(root, &TestOtherAPI, "tsutil/chashtst/TestOtherAPI");
addTest(root, &hashIChars, "tsutil/chashtst/hashIChars");
@@ -133,6 +136,9 @@ static void TestBasic(void) {
_get(hash, omega, 48);
_get(hash, two, 200);
+ // puti(key, value==0) removes the key's element.
+ _put(hash, two, 0, 200);
+
if(_compareChars((void*)one, (void*)three) == TRUE ||
_compareChars((void*)one, (void*)one2) != TRUE ||
_compareChars((void*)one, (void*)one) != TRUE ||
@@ -145,9 +151,56 @@ static void TestBasic(void) {
_compareIChars((void*)one, NULL) == TRUE ) {
log_err("FAIL: compareIChars failed\n");
}
-
+
uhash_close(hash);
+}
+static void TestAllowZero() {
+ UErrorCode status = U_ZERO_ERROR;
+ UHashtable *hash = uhash_open(hashChars, isEqualChars, NULL, &status);
+ if (U_FAILURE(status)) {
+ log_err("FAIL: uhash_open failed with %s and returned 0x%08x\n",
+ u_errorName(status), hash);
+ return;
+ }
+ if (hash == NULL) {
+ log_err("FAIL: uhash_open returned NULL\n");
+ return;
+ }
+ log_verbose("Ok: uhash_open returned 0x%08X\n", hash);
+
+ int32_t oldValue = uhash_putiAllowZero(hash, (char *)"one", 1, &status);
+ UBool found = false;
+ if (U_FAILURE(status) || oldValue != 0 || !uhash_containsKey(hash, "one") ||
+ uhash_geti(hash, "one") != 1 ||
+ uhash_getiAndFound(hash, "one", &found) != 1 || !found) {
+ log_err("FAIL: uhash_putiAllowZero(one, 1)");
+ }
+ oldValue = uhash_putiAllowZero(hash, (char *)"zero", 0, &status);
+ found = false;
+ if (U_FAILURE(status) || oldValue != 0 || !uhash_containsKey(hash, "zero") ||
+ uhash_geti(hash, "zero") != 0 ||
+ uhash_getiAndFound(hash, "zero", &found) != 0 || !found) {
+ log_err("FAIL: uhash_putiAllowZero(zero, 0)");
+ }
+ // Overwrite "one" to 0.
+ oldValue = uhash_putiAllowZero(hash, (char *)"one", 0, &status);
+ found = false;
+ if (U_FAILURE(status) || oldValue != 1 || !uhash_containsKey(hash, "one") ||
+ uhash_geti(hash, "one") != 0 ||
+ uhash_getiAndFound(hash, "one", &found) != 0 || !found) {
+ log_err("FAIL: uhash_putiAllowZero(one, 0)");
+ }
+ // Remove "zero" using puti(zero, 0).
+ oldValue = uhash_puti(hash, (char *)"zero", 0, &status);
+ found = true;
+ if (U_FAILURE(status) || oldValue != 0 || uhash_containsKey(hash, "zero") ||
+ uhash_geti(hash, "zero") != 0 ||
+ uhash_getiAndFound(hash, "zero", &found) != 0 || found) {
+ log_err("FAIL: uhash_puti(zero, 0)");
+ }
+
+ uhash_close(hash);
}
static void TestOtherAPI(void){
@@ -343,30 +396,46 @@ static void _put(UHashtable* hash,
int32_t oldValue =
uhash_puti(hash, (void*) key, value, &status);
if (U_FAILURE(status)) {
- log_err("FAIL: uhash_put(%s) failed with %s and returned %ld\n",
+ log_err("FAIL: uhash_puti(%s) failed with %s and returned %ld\n",
key, u_errorName(status), oldValue);
} else if (oldValue != expectedOldValue) {
- log_err("FAIL: uhash_put(%s) returned old value %ld; expected %ld\n",
+ log_err("FAIL: uhash_puti(%s) returned old value %ld; expected %ld\n",
key, oldValue, expectedOldValue);
} else {
- log_verbose("Ok: uhash_put(%s, %d) returned old value %ld\n",
+ log_verbose("Ok: uhash_puti(%s, %d) returned old value %ld\n",
key, value, oldValue);
}
+ int32_t newValue = uhash_geti(hash, key);
+ if (newValue != value) {
+ log_err("FAIL: uhash_puti(%s) failed to set the intended value %ld: "
+ "uhash_geti() returns %ld\n",
+ key, value, newValue);
+ }
+ UBool contained = uhash_containsKey(hash, key);
+ if (value == 0) {
+ if (contained) {
+ log_err("FAIL: uhash_puti(%s, zero) failed to remove the key item: "
+ "uhash_containsKey() returns true\n",
+ key);
+ }
+ } else {
+ if (!contained) {
+ log_err("FAIL: uhash_puti(%s, not zero) appears to have removed the key item: "
+ "uhash_containsKey() returns false\n",
+ key);
+ }
+ }
}
static void _get(UHashtable* hash,
const char* key,
int32_t expectedValue) {
- UErrorCode status = U_ZERO_ERROR;
int32_t value = uhash_geti(hash, key);
- if (U_FAILURE(status)) {
- log_err("FAIL: uhash_get(%s) failed with %s and returned %ld\n",
- key, u_errorName(status), value);
- } else if (value != expectedValue) {
- log_err("FAIL: uhash_get(%s) returned %ld; expected %ld\n",
+ if (value != expectedValue) {
+ log_err("FAIL: uhash_geti(%s) returned %ld; expected %ld\n",
key, value, expectedValue);
} else {
- log_verbose("Ok: uhash_get(%s) returned value %ld\n",
+ log_verbose("Ok: uhash_geti(%s) returned value %ld\n",
key, value);
}
}
@@ -376,11 +445,15 @@ static void _remove(UHashtable* hash,
int32_t expectedValue) {
int32_t value = uhash_removei(hash, key);
if (value != expectedValue) {
- log_err("FAIL: uhash_remove(%s) returned %ld; expected %ld\n",
+ log_err("FAIL: uhash_removei(%s) returned %ld; expected %ld\n",
key, value, expectedValue);
} else {
- log_verbose("Ok: uhash_remove(%s) returned old value %ld\n",
+ log_verbose("Ok: uhash_removei(%s) returned old value %ld\n",
key, value);
}
+ if (uhash_containsKey(hash, key)) {
+ log_err("FAIL: uhash_removei(%s) failed to remove the key item: "
+ "uhash_containsKey() returns false\n",
+ key);
+ }
}
-
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
index b4364a69096..8e3ece02aff 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
@@ -162,7 +162,7 @@ int main(int argc, const char* const argv[])
"*** Check the ICU_DATA environment variable and \n"
"*** check that the data files are present.\n", warnOrErr);
if(!getTestOption(WARN_ON_MISSING_DATA_OPTION)) {
- fprintf(stderr, "*** Exitting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n");
+ fprintf(stderr, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n");
u_cleanup();
return 1;
}
@@ -178,7 +178,7 @@ int main(int argc, const char* const argv[])
"*** Check the ICU_DATA environment variable and \n"
"*** check that the data files are present.\n", warnOrErr);
if(!getTestOption(WARN_ON_MISSING_DATA_OPTION)) {
- fprintf(stderr, "*** Exitting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n");
+ fprintf(stderr, "*** Exiting. Use the '-w' option if data files were\n*** purposely removed, to continue test anyway.\n");
u_cleanup();
return 1;
}
@@ -197,7 +197,7 @@ int main(int argc, const char* const argv[])
fprintf(stderr,
"*** %s! Can not open a resource bundle for the default locale %s\n", warnOrErr, uloc_getDefault());
if(!getTestOption(WARN_ON_MISSING_DATA_OPTION)) {
- fprintf(stderr, "*** Exitting. Use the '-w' option if data files were\n"
+ fprintf(stderr, "*** Exiting. Use the '-w' option if data files were\n"
"*** purposely removed, to continue test anyway.\n");
u_cleanup();
return 1;
@@ -210,7 +210,7 @@ int main(int argc, const char* const argv[])
root = NULL;
addAllTests(&root);
- /* Tests acutally run HERE. TODO: separate command line option parsing & setting from test execution!! */
+ /* Tests actually run HERE. TODO: separate command line option parsing & setting from test execution!! */
nerrors = runTestRequest(root, argc, argv);
setTestOption(REPEAT_TESTS_OPTION, DECREMENT_OPTION_VALUE);
@@ -576,6 +576,31 @@ const char* loadTestData(UErrorCode* err){
return _testDataPath;
}
+/**
+ * Returns the path to icu/source/test/testdata/
+ * Note: this function is parallel with C++ getSourceTestData in intltest.cpp
+ */
+const char *loadSourceTestData(UErrorCode* err) {
+ (void)err;
+ const char *srcDataDir = NULL;
+#ifdef U_TOPSRCDIR
+ srcDataDir = U_TOPSRCDIR U_FILE_SEP_STRING"test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING;
+#else
+ srcDataDir = ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING;
+ FILE *f = fopen(".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING "rbbitst.txt", "r");
+ if (f) {
+ /* We're in icu/source/test/intltest/ */
+ fclose(f);
+ }
+ else {
+ /* We're in icu/source/test/intltest/Platform/(Debug|Release) */
+ srcDataDir = ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING
+ "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING;
+ }
+#endif
+ return srcDataDir;
+}
+
#define CTEST_MAX_TIMEZONE_SIZE 256
static UChar gOriginalTimeZone[CTEST_MAX_TIMEZONE_SIZE] = {0};
@@ -769,4 +794,17 @@ U_CFUNC UBool assertPtrEquals(const char* message, const void* expected, const v
return TRUE;
}
+U_CFUNC UBool assertDoubleEquals(const char *message, double expected, double actual) {
+ if (expected != actual) {
+ log_err("FAIL: %s; got \"%f\"; expected \"%f\"\n", message, actual, expected);
+ return FALSE;
+ }
+#ifdef VERBOSE_ASSERTIONS
+ else {
+ log_verbose("Ok: %s; got \"%f\"\n", message, actual);
+ }
+#endif
+ return TRUE;
+}
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.h b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.h
index f66e4c6c07e..9e1035566b0 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.h
@@ -78,11 +78,19 @@ U_CFUNC char *aescstrdup(const UChar* unichars, int32_t length);
U_CFUNC void *ctst_malloc(size_t size);
/**
- * Return the path to cintltst's data ( icu/source/data/testdata ) directory.
+ * Return the path to cintltst's data ( icu/source/data/testdata ) directory.
+ * The path may be in the out/ directory.
* Return value is allocated by ctst_malloc and should not be deleted.
*/
U_CFUNC const char* loadTestData(UErrorCode* err);
+/*
+ * Returns the path to the icu/source/test/testdata directory.
+ * The path is always the source directory.
+ * Return value is static and should not be deleted.
+ */
+U_CFUNC const char* loadSourceTestData(UErrorCode* err);
+
/**
* function used to specify the error
* converts the errorcode to an error descriptive string(const char*)
@@ -143,7 +151,7 @@ U_CFUNC UBool assertUEquals(const char* msg, const UChar* expectedString,
const UChar* actualString);
/**
- * Assert that two 64-bit integers are equal, returning TRUE if they do.
+ * Assert that two 64-bit integers are equal, returning TRUE if they are.
*/
U_CFUNC UBool assertIntEquals(const char* msg, int64_t expected, int64_t actual);
@@ -153,6 +161,11 @@ U_CFUNC UBool assertIntEquals(const char* msg, int64_t expected, int64_t actual)
*/
U_CFUNC UBool assertPtrEquals(const char* msg, const void* expected, const void* actual);
+/**
+ * Assert that two doubles are equal, returning TRUE if they are.
+ */
+U_CFUNC UBool assertDoubleEquals(const char *msg, double expected, double actual);
+
/*
* note - isICUVersionBefore and isICUVersionAtLeast have been removed.
* use log_knownIssue() instead.
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.c
index 5ffc714cfb3..06ab2e1be3e 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.c
@@ -1004,7 +1004,7 @@ static void TestSmallBuffer()
}
/**
-* Testing the discontigous contractions
+* Testing the discontiguous contractions
*/
static void TestDiscontiguos() {
const char *rulestr =
@@ -1090,7 +1090,7 @@ static void TestDiscontiguos() {
while (ce != UCOL_NULLORDER) {
if (ce != ucol_next(iter, &status) ||
U_FAILURE(status)) {
- log_err("Discontiguos contraction test mismatch\n");
+ log_err("Discontiguous contraction test mismatch\n");
return;
}
ce = ucol_next(resultiter, &status);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.h b/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.h
index 5673e8fb14c..af30c85f843 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.h
@@ -82,7 +82,7 @@ static void TestBug672Normalize(void);
*/
static void TestSmallBuffer(void);
/**
-* Tests the discontiguos contractions
+* Tests the discontiguous contractions
*/
static void TestDiscontiguos(void);
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
index e50ccb3cd1f..7767cf9f097 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
@@ -998,6 +998,10 @@ static void VerifyTranslation(void) {
log_knownIssue("cldrbug:8899", "lrc and mzn locales don't have translated day names")) {
end = 0;
}
+ if ((uprv_strncmp(currLoc,"mai",3) == 0 || uprv_strncmp(currLoc,"sd_Deva",7) == 0) &&
+ log_knownIssue("cldrbug:14995", "mai/sd_Deva day names use chars not in exemplars")) {
+ end = 0;
+ }
for (idx = 0; idx < end; idx++) {
const UChar *fromBundleStr = ures_getStringByIndex(resArray, idx, &langSize, &errorCode);
@@ -1027,6 +1031,10 @@ static void VerifyTranslation(void) {
else {
end = ures_getSize(resArray);
}
+ if (uprv_strncmp(currLoc,"sd_Deva",7) == 0 &&
+ log_knownIssue("cldrbug:14995", "sd_Deva month names use chars not in exemplars")) {
+ end = 0;
+ }
for (idx = 0; idx < end; idx++) {
const UChar *fromBundleStr = ures_getStringByIndex(resArray, idx, &langSize, &errorCode);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
index 61cfd4cb7cf..8707babbbee 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
@@ -58,6 +58,10 @@ static void TestBug20370(void);
static void TestBug20321UnicodeLocaleKey(void);
static void TestUsingDefaultWarning(void);
+static void TestExcessivelyLongIDs(void);
+#if !UCONFIG_NO_FORMATTING
+static void TestUldnNameVariants(void);
+#endif
void PrintDataTable();
@@ -239,6 +243,7 @@ void addLocaleTest(TestNode** root)
TESTCASE(TestKeywordSet);
TESTCASE(TestKeywordSetError);
TESTCASE(TestDisplayKeywords);
+ TESTCASE(TestCanonicalization21749StackUseAfterScope);
TESTCASE(TestDisplayKeywordValues);
TESTCASE(TestGetBaseName);
#if !UCONFIG_NO_FILE_IO
@@ -280,6 +285,11 @@ void addLocaleTest(TestNode** root)
TESTCASE(TestBug20370);
TESTCASE(TestBug20321UnicodeLocaleKey);
TESTCASE(TestUsingDefaultWarning);
+ TESTCASE(TestBug21449InfiniteLoop);
+ TESTCASE(TestExcessivelyLongIDs);
+#if !UCONFIG_NO_FORMATTING
+ TESTCASE(TestUldnNameVariants);
+#endif
}
@@ -852,14 +862,14 @@ static void TestGetDisplayScriptPreFlighting21160()
free(result);
}
-/* test for uloc_getAvialable() and uloc_countAvilable()*/
+/* test for uloc_getAvailable() and uloc_countAvailable()*/
static void TestGetAvailableLocales()
{
const char *locList;
int32_t locCount,i;
- log_verbose("Testing the no of avialable locales\n");
+ log_verbose("Testing the no of available locales\n");
locCount=uloc_countAvailable();
if (locCount == 0)
log_data_err("countAvailable() returned an empty list!\n");
@@ -2486,6 +2496,19 @@ static void TestCanonicalizationBuffer(void)
}
}
+static void TestCanonicalization21749StackUseAfterScope(void)
+{
+ UErrorCode status = U_ZERO_ERROR;
+ char buffer[256];
+ const char* input = "- _";
+ uloc_canonicalize(input, buffer, -1, &status);
+ if (U_SUCCESS(status)) {
+ log_err("FAIL: uloc_canonicalize(%s) => %s, expected U_FAILURE()\n",
+ input, u_errorName(status));
+ return;
+ }
+}
+
static void TestDisplayKeywords(void)
{
int32_t i;
@@ -3720,13 +3743,13 @@ const char* const basic_maximize_data[][2] = {
""
}, {
"de_u_co_phonebk",
- "de_Latn_DE_U_CO_PHONEBK"
+ "de_Latn_DE@collation=phonebook"
}, {
"de_Latn_u_co_phonebk",
- "de_Latn_DE_U_CO_PHONEBK"
+ "de_Latn_DE@collation=phonebook"
}, {
"de_Latn_DE_u_co_phonebk",
- "de_Latn_DE_U_CO_PHONEBK"
+ "de_Latn_DE@collation=phonebook"
}, {
"_Arab@em=emoji",
"ar_Arab_EG@em=emoji"
@@ -4108,6 +4131,10 @@ const char* const full_data[][3] = {
"nn_Latn_NO",
"nn"
}, {
+ "no",
+ "no_Latn_NO",
+ "no"
+ }, {
"nr",
"nr_Latn_ZA",
"nr"
@@ -6164,7 +6191,7 @@ const char* const locale_to_langtag[][3] = {
{"it@collation=badcollationtype;colStrength=identical;cu=usd-eur", "it-u-cu-usd-eur-ks-identic", NULL},
{"en_US_POSIX", "en-US-u-va-posix", "en-US-u-va-posix"},
{"en_US_POSIX@calendar=japanese;currency=EUR","en-US-u-ca-japanese-cu-eur-va-posix", "en-US-u-ca-japanese-cu-eur-va-posix"},
- {"@x=elmer", "x-elmer", "x-elmer"},
+ {"@x=elmer", "und-x-elmer", "und-x-elmer"},
{"en@x=elmer", "en-x-elmer", "en-x-elmer"},
{"@x=elmer;a=exta", "und-a-exta-x-elmer", "und-a-exta-x-elmer"},
{"en_US@attribute=attr1-attr2;calendar=gregorian", "en-US-u-attr1-attr2-ca-gregory", "en-US-u-attr1-attr2-ca-gregory"},
@@ -6370,7 +6397,7 @@ static const struct {
{"hant-cmn-cn", "hant", 4},
{"zh-cmn-TW", "cmn_TW", FULL_LENGTH},
{"zh-x_t-ab", "zh", 2},
- {"zh-hans-cn-u-ca-x_t-u", "zh_Hans_CN@calendar=yes", 15},
+ {"zh-hans-cn-u-ca-x_t-u", "zh_Hans_CN@calendar=yes", 15},
/* #20140 dupe keys in U-extension */
{"zh-u-ca-chinese-ca-gregory", "zh@calendar=chinese", FULL_LENGTH},
{"zh-u-ca-gregory-co-pinyin-ca-chinese", "zh@calendar=gregorian;collation=pinyin", FULL_LENGTH},
@@ -6886,7 +6913,7 @@ static void TestBadLocaleIDs() {
}
// Test case for ICU-20370.
-// The issue shows as an Addresss Sanitizer failure.
+// The issue shows as an Address Sanitizer failure.
static void TestBug20370() {
const char *localeID = "x-privatebutreallylongtagfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar";
uint32_t lcid = uloc_getLCID(localeID);
@@ -6910,6 +6937,187 @@ static void TestBug20149() {
}
}
+#if !UCONFIG_NO_FORMATTING
+typedef enum UldnNameType {
+ TEST_ULDN_LOCALE,
+ TEST_ULDN_LANGUAGE,
+ TEST_ULDN_SCRIPT,
+ TEST_ULDN_REGION,
+ TEST_ULOC_LOCALE, // only valid with optStdMidLong
+ TEST_ULOC_LANGUAGE, // only valid with optStdMidLong
+ TEST_ULOC_SCRIPT, // only valid with optStdMidLong
+ TEST_ULOC_REGION, // only valid with optStdMidLong
+} UldnNameType;
+
+typedef struct {
+ const char * localeToName; // NULL to terminate a list of these
+ UldnNameType nameType;
+ const UChar * expectResult;
+} UldnItem;
+
+typedef struct {
+ const char * displayLocale;
+ const UDisplayContext * displayOptions; // set of 3 UDisplayContext items
+ const UldnItem * testItems;
+ int32_t countItems;
+} UldnLocAndOpts;
+
+static const UDisplayContext optStdMidLong[3] = {UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_FULL};
+static const UDisplayContext optStdMidShrt[3] = {UDISPCTX_STANDARD_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_SHORT};
+static const UDisplayContext optDiaMidLong[3] = {UDISPCTX_DIALECT_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_FULL};
+static const UDisplayContext optDiaMidShrt[3] = {UDISPCTX_DIALECT_NAMES, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, UDISPCTX_LENGTH_SHORT};
+
+static const UldnItem en_StdMidLong[] = {
+ { "en_US", TEST_ULDN_LOCALE, u"English (United States)" },
+ { "en", TEST_ULDN_LANGUAGE, u"English" },
+ { "en_US", TEST_ULOC_LOCALE, u"English (United States)" },
+ { "en_US", TEST_ULOC_LANGUAGE, u"English" },
+ { "en", TEST_ULOC_LANGUAGE, u"English" },
+ // https://unicode-org.atlassian.net/browse/ICU-20870
+ { "fa_AF", TEST_ULDN_LOCALE, u"Persian (Afghanistan)" },
+ { "prs", TEST_ULDN_LOCALE, u"Dari" },
+ { "prs_AF", TEST_ULDN_LOCALE, u"Dari (Afghanistan)" },
+ { "prs_TJ", TEST_ULDN_LOCALE, u"Dari (Tajikistan)" },
+ { "prs", TEST_ULDN_LANGUAGE, u"Dari" },
+ { "prs", TEST_ULOC_LANGUAGE, u"Dari" },
+ // https://unicode-org.atlassian.net/browse/ICU-21742
+ { "ji", TEST_ULDN_LOCALE, u"Yiddish" },
+ { "ji_US", TEST_ULDN_LOCALE, u"Yiddish (United States)" },
+ { "ji", TEST_ULDN_LANGUAGE, u"Yiddish" },
+ { "ji_US", TEST_ULOC_LOCALE, u"Yiddish (United States)" },
+ { "ji", TEST_ULOC_LANGUAGE, u"Yiddish" },
+ // https://unicode-org.atlassian.net/browse/ICU-11563
+ { "mo", TEST_ULDN_LOCALE, u"Romanian" },
+ { "mo_MD", TEST_ULDN_LOCALE, u"Romanian (Moldova)" },
+ { "mo", TEST_ULDN_LANGUAGE, u"Romanian" },
+ { "mo_MD", TEST_ULOC_LOCALE, u"Romanian (Moldova)" },
+ { "mo", TEST_ULOC_LANGUAGE, u"Romanian" },
+};
+
+static const UldnItem en_StdMidShrt[] = {
+ { "en_US", TEST_ULDN_LOCALE, u"English (US)" },
+ { "en", TEST_ULDN_LANGUAGE, u"English" },
+};
+
+static const UldnItem en_DiaMidLong[] = {
+ { "en_US", TEST_ULDN_LOCALE, u"American English" },
+ { "fa_AF", TEST_ULDN_LOCALE, u"Dari" },
+ { "prs", TEST_ULDN_LOCALE, u"Dari" },
+ { "prs_AF", TEST_ULDN_LOCALE, u"Dari (Afghanistan)" },
+ { "prs_TJ", TEST_ULDN_LOCALE, u"Dari (Tajikistan)" },
+ { "prs", TEST_ULDN_LANGUAGE, u"Dari" },
+ { "mo", TEST_ULDN_LOCALE, u"Romanian" },
+ { "mo", TEST_ULDN_LANGUAGE, u"Romanian" },
+};
+
+static const UldnItem en_DiaMidShrt[] = {
+ { "en_US", TEST_ULDN_LOCALE, u"US English" },
+};
+
+static const UldnItem ro_StdMidLong[] = { // https://unicode-org.atlassian.net/browse/ICU-11563
+ { "mo", TEST_ULDN_LOCALE, u"română" },
+ { "mo_MD", TEST_ULDN_LOCALE, u"română (Republica Moldova)" },
+ { "mo", TEST_ULDN_LANGUAGE, u"română" },
+ { "mo_MD", TEST_ULOC_LOCALE, u"română (Republica Moldova)" },
+ { "mo", TEST_ULOC_LANGUAGE, u"română" },
+};
+
+static const UldnItem yi_StdMidLong[] = { // https://unicode-org.atlassian.net/browse/ICU-21742
+ { "ji", TEST_ULDN_LOCALE, u"ייִדיש" },
+ { "ji_US", TEST_ULDN_LOCALE, u"ייִדיש (פֿאַראייניגטע שטאַטן)" },
+ { "ji", TEST_ULDN_LANGUAGE, u"ייִדיש" },
+ { "ji_US", TEST_ULOC_LOCALE, u"ייִדיש (פֿאַראייניגטע שטאַטן)" },
+ { "ji", TEST_ULOC_LANGUAGE, u"ייִדיש" },
+};
+
+static const UldnLocAndOpts uldnLocAndOpts[] = {
+ { "en", optStdMidLong, en_StdMidLong, UPRV_LENGTHOF(en_StdMidLong) },
+ { "en", optStdMidShrt, en_StdMidShrt, UPRV_LENGTHOF(en_StdMidShrt) },
+ { "en", optDiaMidLong, en_DiaMidLong, UPRV_LENGTHOF(en_DiaMidLong) },
+ { "en", optDiaMidShrt, en_DiaMidShrt, UPRV_LENGTHOF(en_DiaMidShrt) },
+ { "ro", optStdMidLong, ro_StdMidLong, UPRV_LENGTHOF(ro_StdMidLong) },
+ { "yi", optStdMidLong, yi_StdMidLong, UPRV_LENGTHOF(yi_StdMidLong) },
+ { NULL, NULL, NULL, 0 }
+};
+
+enum { kUNameBuf = 128, kBNameBuf = 256 };
+
+static void TestUldnNameVariants() {
+ const UldnLocAndOpts * uloPtr;
+ for (uloPtr = uldnLocAndOpts; uloPtr->displayLocale != NULL; uloPtr++) {
+ UErrorCode status = U_ZERO_ERROR;
+ ULocaleDisplayNames * uldn = uldn_openForContext(uloPtr->displayLocale, (UDisplayContext*)uloPtr->displayOptions, 3, &status);
+ if (U_FAILURE(status)) {
+ log_data_err("uldn_openForContext fails, displayLocale %s, contexts %03X %03X %03X: %s - Are you missing data?\n",
+ uloPtr->displayLocale, uloPtr->displayOptions[0], uloPtr->displayOptions[1], uloPtr->displayOptions[2],
+ u_errorName(status) );
+ continue;
+ }
+ const UldnItem * itemPtr = uloPtr->testItems;
+ int32_t itemCount = uloPtr->countItems;
+ for (; itemCount-- > 0; itemPtr++) {
+ UChar uget[kUNameBuf];
+ int32_t ulenget, ulenexp;
+ const char* typeString;
+ status = U_ZERO_ERROR;
+ switch (itemPtr->nameType) {
+ case TEST_ULDN_LOCALE:
+ ulenget = uldn_localeDisplayName(uldn, itemPtr->localeToName, uget, kUNameBuf, &status);
+ typeString = "uldn_localeDisplayName";
+ break;
+ case TEST_ULDN_LANGUAGE:
+ ulenget = uldn_languageDisplayName(uldn, itemPtr->localeToName, uget, kUNameBuf, &status);
+ typeString = "uldn_languageDisplayName";
+ break;
+ case TEST_ULDN_SCRIPT:
+ ulenget = uldn_scriptDisplayName(uldn, itemPtr->localeToName, uget, kUNameBuf, &status);
+ typeString = "uldn_scriptDisplayName";
+ break;
+ case TEST_ULDN_REGION:
+ ulenget = uldn_regionDisplayName(uldn, itemPtr->localeToName, uget, kUNameBuf, &status);
+ typeString = "uldn_regionDisplayName";
+ break;
+ case TEST_ULOC_LOCALE:
+ ulenget = uloc_getDisplayName(itemPtr->localeToName, uloPtr->displayLocale, uget, kUNameBuf, &status);
+ typeString = "uloc_getDisplayName";
+ break;
+ case TEST_ULOC_LANGUAGE:
+ ulenget = uloc_getDisplayLanguage(itemPtr->localeToName, uloPtr->displayLocale, uget, kUNameBuf, &status);
+ typeString = "uloc_getDisplayLanguage";
+ break;
+ case TEST_ULOC_SCRIPT:
+ ulenget = uloc_getDisplayScript(itemPtr->localeToName, uloPtr->displayLocale, uget, kUNameBuf, &status);
+ typeString = "uloc_getDisplayScript";
+ break;
+ case TEST_ULOC_REGION:
+ ulenget = uloc_getDisplayCountry(itemPtr->localeToName, uloPtr->displayLocale, uget, kUNameBuf, &status);
+ typeString = "uloc_getDisplayCountry";
+ break;
+ default:
+ continue;
+ }
+ if (U_FAILURE(status)) {
+ log_data_err("%s fails, displayLocale %s, contexts %03X %03X %03X, localeToName %s: %s\n",
+ typeString, uloPtr->displayLocale, uloPtr->displayOptions[0], uloPtr->displayOptions[1], uloPtr->displayOptions[2],
+ itemPtr->localeToName, u_errorName(status) );
+ continue;
+ }
+ ulenexp = u_strlen(itemPtr->expectResult);
+ if (ulenget != ulenexp || u_strncmp(uget, itemPtr->expectResult, ulenexp) != 0) {
+ char bexp[kBNameBuf], bget[kBNameBuf];
+ u_strToUTF8(bexp, kBNameBuf, NULL, itemPtr->expectResult, ulenexp, &status);
+ u_strToUTF8(bget, kBNameBuf, NULL, uget, ulenget, &status);
+ log_data_err("%s fails, displayLocale %s, contexts %03X %03X %03X, localeToName %s:\n expect %2d: %s\n get %2d: %s\n",
+ typeString, uloPtr->displayLocale, uloPtr->displayOptions[0], uloPtr->displayOptions[1], uloPtr->displayOptions[2],
+ itemPtr->localeToName, ulenexp, bexp, ulenget, bget );
+ }
+ }
+
+ uldn_close(uldn);
+ }
+}
+#endif
+
static void TestUsingDefaultWarning() {
UChar buff[256];
char errorOutputBuff[256];
@@ -6978,11 +7186,12 @@ static void TestUsingDefaultWarning() {
log_err("ERROR: in uloc_getDisplayKeywordValue %s %s return len:%d %s with status %d %s\n",
keyword_value, keyword, length, errorOutputBuff, status, myErrorName(status));
}
-}
+}
+
// Test case for ICU-20575
// This test checks if the environment variable LANG is set,
// and if so ensures that both C and C.UTF-8 cause ICU's default locale to be en_US_POSIX.
-static void TestCDefaultLocale(){
+static void TestCDefaultLocale() {
const char *defaultLocale = uloc_getDefault();
char *env_var = getenv("LANG");
if (env_var == NULL) {
@@ -6993,3 +7202,55 @@ static void TestCDefaultLocale(){
log_err("The default locale for LANG=%s should be en_US_POSIX, not %s\n", env_var, defaultLocale);
}
}
+
+// Test case for ICU-21449
+static void TestBug21449InfiniteLoop() {
+ UErrorCode status = U_ZERO_ERROR;
+ const char* invalidLocaleId = RES_PATH_SEPARATOR_S;
+
+ // The issue causes an infinite loop to occur when looking up a non-existent resource for the invalid locale ID,
+ // so the test is considered passed if the call to the API below returns anything at all.
+ uloc_getDisplayLanguage(invalidLocaleId, invalidLocaleId, NULL, 0, &status);
+}
+
+// rdar://79296849 and https://unicode-org.atlassian.net/browse/ICU-21639
+static void TestExcessivelyLongIDs(void) {
+ const char* reallyLongID =
+ "de-u-cu-eur-em-default-hc-h23-ks-level1-lb-strict-lw-normal-ms-metric"
+ "-nu-latn-rg-atzzzz-sd-atat1-ss-none-tz-atvie-va-posix";
+ char minimizedID[ULOC_FULLNAME_CAPACITY];
+ char maximizedID[ULOC_FULLNAME_CAPACITY];
+ int32_t actualMinimizedLength = 0;
+ int32_t actualMaximizedLength = 0;
+ UErrorCode err = U_ZERO_ERROR;
+
+ actualMinimizedLength = uloc_minimizeSubtags(reallyLongID, minimizedID, ULOC_FULLNAME_CAPACITY, &err);
+ assertTrue("uloc_minimizeSubtags() with too-small buffer didn't fail as expected",
+ U_FAILURE(err) && actualMinimizedLength > ULOC_FULLNAME_CAPACITY);
+
+ err = U_ZERO_ERROR;
+ actualMaximizedLength = uloc_addLikelySubtags(reallyLongID, maximizedID, ULOC_FULLNAME_CAPACITY, &err);
+ assertTrue("uloc_addLikelySubtags() with too-small buffer didn't fail as expected",
+ U_FAILURE(err) && actualMaximizedLength > ULOC_FULLNAME_CAPACITY);
+
+ err = U_ZERO_ERROR;
+ char* realMinimizedID = (char*)uprv_malloc(actualMinimizedLength + 1);
+ uloc_minimizeSubtags(reallyLongID, realMinimizedID, actualMinimizedLength + 1, &err);
+ if (assertSuccess("uloc_minimizeSubtags() failed", &err)) {
+ assertEquals("Wrong result from uloc_minimizeSubtags()",
+ "de__POSIX@colstrength=primary;currency=eur;em=default;hours=h23;lb=strict;"
+ "lw=normal;measure=metric;numbers=latn;rg=atzzzz;sd=atat1;ss=none;timezone=Europe/Vienna",
+ realMinimizedID);
+ }
+ uprv_free(realMinimizedID);
+
+ char* realMaximizedID = (char*)uprv_malloc(actualMaximizedLength + 1);
+ uloc_addLikelySubtags(reallyLongID, realMaximizedID, actualMaximizedLength + 1, &err);
+ if (assertSuccess("uloc_addLikelySubtags() failed", &err)) {
+ assertEquals("Wrong result from uloc_addLikelySubtags()",
+ "de_Latn_DE_POSIX@colstrength=primary;currency=eur;em=default;hours=h23;lb=strict;"
+ "lw=normal;measure=metric;numbers=latn;rg=atzzzz;sd=atat1;ss=none;timezone=Europe/Vienna",
+ realMaximizedID);
+ }
+ uprv_free(realMaximizedID);
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h b/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h
index af7fa5d06a3..9e8e547f725 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h
@@ -88,6 +88,7 @@ static void TestGetAvailableLocalesByType(void);
static void TestCanonicalization(void);
static void TestCanonicalizationBuffer(void);
+static void TestCanonicalization21749StackUseAfterScope(void);
static void TestDisplayKeywords(void);
@@ -100,7 +101,7 @@ static void TestTrailingNull(void);
static void TestGetLocale(void);
/**
- * additional intialization for datatables storing expected values
+ * additional initialization for datatables storing expected values
*/
static void setUpDataTable(void);
static void cleanUpDataTable(void);
@@ -142,6 +143,7 @@ static void TestToUnicodeLocaleType(void);
static void TestToLegacyType(void);
static void TestBug20149(void);
static void TestCDefaultLocale(void);
+static void TestBug21449InfiniteLoop(void);
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c
index 9f4dae438e2..206daa20a3d 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c
@@ -1043,7 +1043,7 @@ static void TestIncrementalNormalize(void) {
doTest(coll, strA, strB, UCOL_GREATER);
}
- /* Test 4: Imbedded nulls do not terminate a string when length is specified.*/
+ /* Test 4: Embedded nulls do not terminate a string when length is specified.*/
{
static const UChar strA[] = {0x41, 0x00, 0x42, 0x00};
@@ -1790,7 +1790,7 @@ static void TestVariableTopSetting(void) {
ucol_setVariableTop(coll, first, -1, &status);
if(U_SUCCESS(status)) {
- log_err("Invalid contraction succeded in setting variable top!\n");
+ log_err("Invalid contraction succeeded in setting variable top!\n");
}
}
@@ -2049,7 +2049,7 @@ static void TestPrefix(void) {
}
}
-/* This test uses data suplied by Masashiko Maedera to test the implementation */
+/* This test uses data supplied by Masashiko Maedera to test the implementation */
/* JIS X 4061 collation order implementation */
static void TestNewJapanese(void) {
@@ -3522,7 +3522,7 @@ TestJ5223(void)
ucol_setAttribute(coll, UCOL_STRENGTH, UCOL_PRIMARY, &status);
ucol_setAttribute(coll, UCOL_NORMALIZATION_MODE, UCOL_ON, &status);
if (U_FAILURE(status)) {
- log_err("Failed setting atributes\n");
+ log_err("Failed setting attributes\n");
return;
}
sortkey_length = ucol_getSortKey(coll, ustr, ustr_length, NULL, 0);
@@ -4007,7 +4007,7 @@ TestOutOfBuffer5468(void)
ucol_setAttribute(coll, UCOL_STRENGTH, UCOL_PRIMARY, &status);
ucol_setAttribute(coll, UCOL_NORMALIZATION_MODE, UCOL_ON, &status);
if (U_FAILURE(status)) {
- log_err("Failed setting atributes\n");
+ log_err("Failed setting attributes\n");
return;
}
@@ -4361,7 +4361,7 @@ static void TestSameStrengthListQwerty(void)
/* Quoted characters also will work if two quoted characters are not consecutive. */
"&\\u0071<*'\\u0077'\\u0065\\u0072 &\\u0077<<*\\u0074'\\u0079'\\u0075 &\\u0074<<<*\\u0069\\u006f'\\u0070' &'\\u006f'=*\\u0061\\u0073\\u0064",
- /* Consecutive quoted charactes do not work, because a '' will be treated as a quote character. */
+ /* Consecutive quoted characters do not work, because a '' will be treated as a quote character. */
/* "&\\u0071<*'\\u0077''\\u0065''\\u0072' &\\u0077<<*'\\u0074''\\u0079''\\u0075' &\\u0074<<<*'\\u0069''\\u006f''\\u0070' &'\\u006f'=*\\u0061\\u0073\\u0064",*/
};
@@ -4597,7 +4597,7 @@ static void TestBeforeRuleWithScriptReordering(void)
ucol_getSortKey(myCollation, base, baseLen, baseKey, 256);
ucol_getSortKey(myCollation, before, beforeLen, beforeKey, 256);
if (baseKey[0] != beforeKey[0]) {
- log_err("Different lead byte for sort keys using before fule and after script reordering. base character lead byte = %02x, before character lead byte = %02x\n", baseKey[0], beforeKey[0]);
+ log_err("Different lead byte for sort keys using before rule and after script reordering. base character lead byte = %02x, before character lead byte = %02x\n", baseKey[0], beforeKey[0]);
}
ucol_close(myCollation);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c
index 99a9ce23be7..9e9b42ac5fd 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c
@@ -93,7 +93,7 @@ static void TestPatterns(void)
}
u_uastrcpy(unewpat, newpat[i]);
if(u_strcmp(unewp, unewpat) != 0)
- log_err("FAIL: Pattern %s should be transmute to %s; %s seen instead\n", pat[i], newpat[i], austrdup(unewp) );
+ log_err("FAIL: Pattern %s should be transmuted to %s; %s seen instead\n", pat[i], newpat[i], austrdup(unewp) );
lneed=0;
lneed=unum_format(fmt, 0, NULL, lneed, NULL, &status);
@@ -131,7 +131,7 @@ static void TestQuotes(void)
u_uastrcpy(pat, "a'fo''o'b#");
fmt =unum_open(UNUM_IGNORE,pat, u_strlen(pat), "en_US",NULL, &status);
if(U_FAILURE(status)){
- log_err_status(status, "Error in number format costruction using pattern \"a'fo''o'b#\" -> %s\n", u_errorName(status));
+ log_err_status(status, "Error in number format construction using pattern \"a'fo''o'b#\" -> %s\n", u_errorName(status));
}
lneed=0;
lneed=unum_format(fmt, 123, NULL, lneed, NULL, &status);
@@ -160,7 +160,7 @@ static void TestQuotes(void)
fmt =unum_open(UNUM_IGNORE,pat, u_strlen(pat), "en_US",NULL, &status);
if(U_FAILURE(status)){
- log_err("Error in number format costruction using pattern \"a''b#\"\n");
+ log_err("Error in number format construction using pattern \"a''b#\"\n");
}
lneed=0;
lneed=unum_format(fmt, 123, NULL, lneed, NULL, &status);
@@ -419,7 +419,7 @@ static void TestCurrency(void)
UChar res[100];
UErrorCode status = U_ZERO_ERROR;
const char* locale[]={"fr_CA", "de_DE@currency=DEM", "fr_FR@currency=FRF"};
- const char* result[]={"1,50\\u00a0$\\u00a0CA", "1,50\\u00a0DM", "1,50\\u00a0F"};
+ const char* result[]={"1,50\\u00a0$", "1,50\\u00a0DM", "1,50\\u00a0F"};
log_verbose("\nTesting the number format with different currency patterns\n");
for(i=0; i < 3; i++)
{
@@ -968,7 +968,12 @@ static void TestRounding5350(void)
roundingTest2(nnf, -0.125, UNUM_ROUND_FLOOR, "-0.13");
roundingTest2(nnf, -0.125, UNUM_ROUND_DOWN, "-0.12");
roundingTest2(nnf, -0.125, UNUM_ROUND_UP, "-0.13");
- roundingTest2(nnf, 0.125, UNUM_FOUND_HALFEVEN, "0.12");
+ roundingTest2(nnf, 0.125, UNUM_ROUND_HALFEVEN, "0.12");
+ roundingTest2(nnf, 0.135, UNUM_ROUND_HALF_ODD, "0.13");
+ roundingTest2(nnf, 0.135, UNUM_ROUND_HALF_CEILING, "0.14");
+ roundingTest2(nnf, -0.135, UNUM_ROUND_HALF_CEILING, "-0.13");
+ roundingTest2(nnf, 0.135, UNUM_ROUND_HALF_FLOOR, "0.13");
+ roundingTest2(nnf, -0.135, UNUM_ROUND_HALF_FLOOR, "-0.14");
roundingTest2(nnf, 0.135, UNUM_ROUND_HALFDOWN, "0.13");
roundingTest2(nnf, 0.125, UNUM_ROUND_HALFUP, "0.13");
roundingTest2(nnf, 0.135, UNUM_FOUND_HALFEVEN, "0.14");
@@ -984,6 +989,9 @@ static void TestRounding5350(void)
roundingTest2(nnf, 1.0000001, UNUM_ROUND_DOWN, "1");
roundingTest2(nnf, 1.0000001, UNUM_ROUND_UP, "1.01");
roundingTest2(nnf, 1.0000001, UNUM_FOUND_HALFEVEN, "1");
+ roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALF_ODD, "1");
+ roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALF_CEILING, "1");
+ roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALF_FLOOR, "1");
roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALFDOWN, "1");
roundingTest2(nnf, 1.0000001, UNUM_ROUND_HALFUP, "1");
@@ -992,6 +1000,9 @@ static void TestRounding5350(void)
roundingTest2(nnf, -1.0000001, UNUM_ROUND_DOWN, "-1");
roundingTest2(nnf, -1.0000001, UNUM_ROUND_UP, "-1.01");
roundingTest2(nnf, -1.0000001, UNUM_FOUND_HALFEVEN, "-1");
+ roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALF_ODD, "-1");
+ roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALF_CEILING, "-1");
+ roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALF_FLOOR, "-1");
roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALFDOWN, "-1");
roundingTest2(nnf, -1.0000001, UNUM_ROUND_HALFUP, "-1");
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.h b/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.h
index 57484ea3d2e..a64ef96325d 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.h
@@ -26,7 +26,7 @@
#include "cintltst.h"
-/* The function used to test differnet format patterns*/
+/* The function used to test different format patterns*/
static void TestPatterns(void);
/* Test the handling of quotes*/
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.c
index a71a3f3a0e9..c16f8a62846 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.c
@@ -646,7 +646,7 @@ void TestCheckFCD()
{
UBool fcdresult = unorm_quickCheck(datastr[count], 4, UNORM_FCD, &status);
if (U_FAILURE(status)) {
- log_data_err("unorm_quickCheck(FCD) failed: exception occured at data set %d - (Are you missing data?)\n", count);
+ log_data_err("unorm_quickCheck(FCD) failed: exception occurred at data set %d - (Are you missing data?)\n", count);
break;
}
else {
@@ -678,7 +678,7 @@ void TestCheckFCD()
normsize += unorm_normalize(data + size, 1, UNORM_NFD, 0,
norm + normsize, 100 - normsize, &status);
if (U_FAILURE(status)) {
- log_data_err("unorm_quickCheck(FCD) failed: exception occured at data generation - (Are you missing data?)\n");
+ log_data_err("unorm_quickCheck(FCD) failed: exception occurred at data generation - (Are you missing data?)\n");
break;
}
size ++;
@@ -688,7 +688,7 @@ void TestCheckFCD()
nfdsize = unorm_normalize(data, size, UNORM_NFD, 0,
nfd, 100, &status);
if (U_FAILURE(status)) {
- log_data_err("unorm_quickCheck(FCD) failed: exception occured at normalized data generation - (Are you missing data?)\n");
+ log_data_err("unorm_quickCheck(FCD) failed: exception occurred at normalized data generation - (Are you missing data?)\n");
}
if (nfdsize != normsize || u_memcmp(nfd, norm, nfdsize) != 0) {
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
index daeff15b20a..3f00bcf8999 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
@@ -75,6 +75,7 @@ static void TestSetMaxFracAndRoundIncr(void);
static void TestIgnorePadding(void);
static void TestSciNotationMaxFracCap(void);
static void TestMinIntMinFracZero(void);
+static void Test21479_ExactCurrency(void);
#define TESTCASE(x) addTest(root, &x, "tsformat/cnumtst/" #x)
@@ -116,6 +117,7 @@ void addNumForTest(TestNode** root)
TESTCASE(TestIgnorePadding);
TESTCASE(TestSciNotationMaxFracCap);
TESTCASE(TestMinIntMinFracZero);
+ TESTCASE(Test21479_ExactCurrency);
}
/* test Parse int 64 */
@@ -262,8 +264,8 @@ static void TestNumberFormat()
if(numlocales < 0)
log_err("error in countAvailable");
else{
- log_verbose("unum_countAvialable() successful\n");
- log_verbose("The no: of locales where number formattting is applicable is %d\n", numlocales);
+ log_verbose("unum_countAvailable() successful\n");
+ log_verbose("The no: of locales where number formatting is applicable is %d\n", numlocales);
}
for(i=0;i<numlocales;i++)
{
@@ -671,17 +673,17 @@ free(result);
unum_getTextAttribute(cur_fr, UNUM_NEGATIVE_SUFFIX, temp, resultlength, &status);
if(U_FAILURE(status))
{
- log_err("Failure in gettting the Text attributes of number format: %s\n", myErrorName(status));
+ log_err("Failure in getting the Text attributes of number format: %s\n", myErrorName(status));
}
unum_setTextAttribute(cur_def, UNUM_NEGATIVE_SUFFIX, temp, u_strlen(temp), &status);
if(U_FAILURE(status))
{
- log_err("Failure in gettting the Text attributes of number format: %s\n", myErrorName(status));
+ log_err("Failure in getting the Text attributes of number format: %s\n", myErrorName(status));
}
unum_getTextAttribute(cur_def, UNUM_NEGATIVE_SUFFIX, suffix, resultlength, &status);
if(U_FAILURE(status))
{
- log_err("Failure in gettting the Text attributes of number format: %s\n", myErrorName(status));
+ log_err("Failure in getting the Text attributes of number format: %s\n", myErrorName(status));
}
if(u_strcmp(suffix,temp)!=0)
log_err("Fail:Error in setTextAttribute or getTextAttribute in setting and getting suffix\n");
@@ -882,7 +884,7 @@ free(result);
}
u_austrncpy(desta, dest, DESTCAPACITY);
if (strcmp(numFormatted, desta) != 0) {
- log_err("File %s, Line %d, (expected, acutal) = (\"%s\", \"%s\")\n",
+ log_err("File %s, Line %d, (expected, actual) = (\"%s\", \"%s\")\n",
__FILE__, __LINE__, numFormatted, desta);
}
if ((int32_t)strlen(numFormatted) != resultSize) {
@@ -899,15 +901,15 @@ free(result);
}
u_austrncpy(desta, dest, DESTCAPACITY);
if (strcmp(numFormatted, desta) != 0) {
- log_err("File %s, Line %d, (expected, acutal) = (\"%s\", \"%s\")\n",
+ log_err("File %s, Line %d, (expected, actual) = (\"%s\", \"%s\")\n",
__FILE__, __LINE__, numFormatted, desta);
}
if (fieldPos.beginIndex != 26) { /* index of "." in formatted number */
- log_err("File %s, Line %d, (expected, acutal) = (%d, %d)\n",
+ log_err("File %s, Line %d, (expected, actual) = (%d, %d)\n",
__FILE__, __LINE__, 0, fieldPos.beginIndex);
}
if (fieldPos.endIndex != 27) {
- log_err("File %s, Line %d, (expected, acutal) = (%d, %d)\n",
+ log_err("File %s, Line %d, (expected, actual) = (%d, %d)\n",
__FILE__, __LINE__, 0, fieldPos.endIndex);
}
@@ -2748,7 +2750,7 @@ static void TestCurrencyUsage(void) {
}
if(unum_getAttribute(unumFmt, UNUM_CURRENCY_USAGE) != UCURR_USAGE_CASH) {
- log_err("FAIL: currency usage attribute is not UNUM_CURRENCY_CASH\n");
+ log_err("FAIL: currency usage attribute is not UNUM_CASH_CURRENCY\n");
}
for (j=0; j<UPRV_LENGTHOF(DATA); ++j) {
@@ -3547,28 +3549,28 @@ static void TestMinIntMinFracZero(void) {
status = U_ZERO_ERROR;
ulen = unum_formatDouble(unum, 10.0, ubuf, kUBufMax, NULL, &status);
if ( U_FAILURE(status) ) {
- log_err("unum_formatDouble (CURRRENCY) 10.0 ulen %d fails with %s\n", ulen, u_errorName(status));
+ log_err("unum_formatDouble (CURRENCY) 10.0 ulen %d fails with %s\n", ulen, u_errorName(status));
} else if (u_strcmp(ubuf, u"$10") != 0) {
u_austrncpy(bbuf, ubuf, kUBufMax);
- log_err("unum_formatDouble (CURRRENCY) 10.0 expected \"$10\", got \"%s\"\n", bbuf);
+ log_err("unum_formatDouble (CURRENCY) 10.0 expected \"$10\", got \"%s\"\n", bbuf);
}
status = U_ZERO_ERROR;
ulen = unum_formatDouble(unum, 0.9, ubuf, kUBufMax, NULL, &status);
if ( U_FAILURE(status) ) {
- log_err("unum_formatDouble (CURRRENCY) 0.9 ulen %d fails with %s\n", ulen, u_errorName(status));
+ log_err("unum_formatDouble (CURRENCY) 0.9 ulen %d fails with %s\n", ulen, u_errorName(status));
} else if (u_strcmp(ubuf, u"$.9") != 0) {
u_austrncpy(bbuf, ubuf, kUBufMax);
- log_err("unum_formatDouble (CURRRENCY) 0.9 expected \"$.9\", got \"%s\"\n", bbuf);
+ log_err("unum_formatDouble (CURRENCY) 0.9 expected \"$.9\", got \"%s\"\n", bbuf);
}
status = U_ZERO_ERROR;
ulen = unum_formatDouble(unum, 0.0, ubuf, kUBufMax, NULL, &status);
if ( U_FAILURE(status) ) {
- log_err("unum_formatDouble (CURRRENCY) 0.0 ulen %d fails with %s\n", ulen, u_errorName(status));
+ log_err("unum_formatDouble (CURRENCY) 0.0 ulen %d fails with %s\n", ulen, u_errorName(status));
} else if (u_strcmp(ubuf, u"$0") != 0) {
u_austrncpy(bbuf, ubuf, kUBufMax);
- log_err("unum_formatDouble (CURRRENCY) 0.0 expected \"$0\", got \"%s\"\n", bbuf);
+ log_err("unum_formatDouble (CURRENCY) 0.0 expected \"$0\", got \"%s\"\n", bbuf);
}
unum_close(unum);
@@ -3576,4 +3578,23 @@ static void TestMinIntMinFracZero(void) {
}
}
+static void Test21479_ExactCurrency(void) {
+ UErrorCode status = U_ZERO_ERROR;
+ UNumberFormat* nf = unum_open(UNUM_CURRENCY, NULL, 0, "en_US", NULL, &status);
+ if ( U_FAILURE(status) ) {
+ log_data_err("unum_open UNUM_CURRENCY for en_US fails with %s\n", u_errorName(status));
+ goto cleanup;
+ }
+ unum_setTextAttribute(nf, UNUM_CURRENCY_CODE, u"EUR", -1, &status);
+ UChar result[40];
+ unum_formatDecimal(nf, "987654321000000000000001", -1, result, 40, NULL, &status);
+ if (!assertSuccess("Formatting currency decimal", &status)) {
+ goto cleanup;
+ }
+ assertUEquals("", u"€987,654,321,000,000,000,000,001.00", result);
+
+ cleanup:
+ unum_close(nf);
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
index 080301090d1..b3fd04d5c11 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
@@ -34,7 +34,6 @@
#include "uresimp.h"
static void TestOpenDirect(void);
-static void TestOpenDirectFillIn(void);
static void TestFallback(void);
static void TestTable32(void);
static void TestFileStream(void);
@@ -112,7 +111,6 @@ void addResourceBundleTest(TestNode** root)
#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION
addTest(root, &TestConstruction1, "tsutil/crestst/TestConstruction1");
addTest(root, &TestOpenDirect, "tsutil/crestst/TestOpenDirect");
- addTest(root, &TestOpenDirectFillIn, "tsutil/crestst/TestOpenDirectFillIn");
addTest(root, &TestResourceBundles, "tsutil/crestst/TestResourceBundles");
addTest(root, &TestTable32, "tsutil/crestst/TestTable32");
addTest(root, &TestFileStream, "tsutil/crestst/TestFileStream");
@@ -496,7 +494,7 @@ static void TestFallback()
static void
TestOpenDirect(void) {
- UResourceBundle *idna_rules, *casing, *te_IN, *ne, *item;
+ UResourceBundle *idna_rules, *casing, *te_IN, *ne, *item, *defaultLocale;
UErrorCode errorCode;
/*
@@ -641,47 +639,12 @@ TestOpenDirect(void) {
ures_close(item);
}
ures_close(te_IN);
-}
-
-static void
-TestOpenDirectFillIn(void) {
- // Test that ures_openDirectFillIn() opens a stack allocated resource bundle, similar to ures_open().
- // Since ures_openDirectFillIn is just a wrapper function, this is just a very basic test copied from
- // the TestOpenDirect test above.
- UErrorCode errorCode = U_ZERO_ERROR;
- UResourceBundle *item;
- UResourceBundle idna_rules;
- ures_initStackObject(&idna_rules);
-
- ures_openDirectFillIn(&idna_rules, loadTestData(&errorCode), "idna_rules", &errorCode);
- if(U_FAILURE(errorCode)) {
- log_data_err("ures_openDirectFillIn(\"idna_rules\") failed: %s\n", u_errorName(errorCode));
- return;
- }
-
- if(0!=uprv_strcmp("idna_rules", ures_getLocale(&idna_rules, &errorCode))) {
- log_err("ures_openDirectFillIn(\"idna_rules\").getLocale()!=idna_rules\n");
- }
- errorCode=U_ZERO_ERROR;
-
- /* try an item in idna_rules, must work */
- item=ures_getByKey(&idna_rules, "UnassignedSet", NULL, &errorCode);
- if(U_FAILURE(errorCode)) {
- log_err("translit_index.getByKey(local key) failed: %s\n", u_errorName(errorCode));
- errorCode=U_ZERO_ERROR;
- } else {
- ures_close(item);
- }
- /* try an item in root, must fail */
- item=ures_getByKey(&idna_rules, "ShortLanguage", NULL, &errorCode);
- if(U_FAILURE(errorCode)) {
- errorCode=U_ZERO_ERROR;
- } else {
- log_err("idna_rules.getByKey(root key) succeeded!\n");
- ures_close(item);
- }
- ures_close(&idna_rules);
+ // ICU-21705
+ // Verify that calling ures_openDirect() with a NULL localeID doesn't crash or assert.
+ errorCode = U_ZERO_ERROR;
+ defaultLocale = ures_openDirect(NULL, NULL, &errorCode);
+ ures_close(defaultLocale);
}
static int32_t
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c b/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
index 79b14a8c656..f8c50cb1a82 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
@@ -250,7 +250,6 @@ void addNEWResourceBundleTest(TestNode** root)
addTest(root, &TestGetKeywordValues, "tsutil/creststn/TestGetKeywordValues");
addTest(root, &TestGetFunctionalEquivalent,"tsutil/creststn/TestGetFunctionalEquivalent");
addTest(root, &TestJB3763, "tsutil/creststn/TestJB3763");
- addTest(root, &TestStackReuse, "tsutil/creststn/TestStackReuse");
}
@@ -267,8 +266,8 @@ static const char* norwayNames[] = {
static const char* norwayLocales[] = {
"nn_NO",
- "nb_NO",
- "nb",
+ "no",
+ "no",
"nn_NO",
"nn",
"nb_NO",
@@ -519,7 +518,7 @@ static void TestNewTypes() {
/* if everything is working correctly, the size of this string */
/* should be 7. Everything else is a wrong answer, esp. 3 and 6*/
- strcpy(action, "getting and testing of string with embeded zero");
+ strcpy(action, "getting and testing of string with embedded zero");
res = ures_getByKey(theBundle, "zerotest", res, &status);
CONFIRM_ErrorCode(status, U_ZERO_ERROR);
CONFIRM_INT_EQ(ures_getType(res), URES_STRING);
@@ -2181,7 +2180,7 @@ static void TestFallback()
UResourceBundle* myResB = ures_open(NULL,"no_NO_NY",&err);
UResourceBundle* resLocID = ures_getByKey(myResB, "Version", NULL, &err);
const UChar* version = NULL;
- static const UChar versionStr[] = u"38.1"; // 38.1 in nn_NO or in a parent bundle/root
+ static const UChar versionStr[] = u"40"; // 40 in nn_NO or in a parent bundle/root
if(U_FAILURE(err)) {
log_data_err("Expected success when trying to test no_NO_NY aliased to nn_NO for Version "
@@ -2319,16 +2318,12 @@ static void TestResourceLevelAliasing(void) {
/* test indexed aliasing */
- tb = ures_getByKey(aliasB, "zoneTests", tb, &status);
- tb = ures_getByKey(tb, "zoneAlias2", tb, &status);
- string = tres_getString(tb, -1, NULL, &strLen, &status);
-
en = ures_findResource("/ICUDATA-zone/en/zoneStrings/3/0", en, &status);
- sequence = tres_getString(en, -1, NULL, &seqLen, &status);
- if(U_FAILURE(status) || seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) {
- log_err("Referencing alias didn't get the right string (5)\n");
+ if(status != U_MISSING_RESOURCE_ERROR) {
+ log_err("Index lookup in a table resource didn't get U_MISSING_RESOURCE_ERROR!\n");
}
+ status = U_ZERO_ERROR;
}
/* test getting aliased string by index */
{
@@ -2373,7 +2368,7 @@ static void TestResourceLevelAliasing(void) {
}
uBufferLen = u_unescape(strings[i], uBuffer, 256);
if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) {
- log_err("(2) Didn't get correct string while accesing alias table by index (%s)\n", strings[i]);
+ log_err("(2) Didn't get correct string while accessing alias table by index (%s)\n", strings[i]);
}
}
for(i = 0; i < UPRV_LENGTHOF(strings); i++) {
@@ -2400,7 +2395,7 @@ static void TestResourceLevelAliasing(void) {
}
uBufferLen = u_unescape(strings[i], uBuffer, 256);
if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) {
- log_err("Didn't get correct string while accesing alias by index in an array (%s)\n", strings[i]);
+ log_err("Didn't get correct string while accessing alias by index in an array (%s)\n", strings[i]);
}
}
for(i = 0; i < UPRV_LENGTHOF(strings); i++) {
@@ -2899,23 +2894,6 @@ static void TestFallbackCodes(void) {
ures_close(res);
}
-/* This test will crash if this doesn't work. Results don't need testing. */
-static void TestStackReuse(void) {
- UResourceBundle table;
- UErrorCode errorCode = U_ZERO_ERROR;
- UResourceBundle *rb = ures_open(NULL, "en_US", &errorCode);
-
- if(U_FAILURE(errorCode)) {
- log_data_err("Could not load en_US locale. status=%s\n",myErrorName(errorCode));
- return;
- }
- ures_initStackObject(&table);
- ures_getByKeyWithFallback(rb, "Types", &table, &errorCode);
- ures_getByKeyWithFallback(&table, "collation", &table, &errorCode);
- ures_close(rb);
- ures_close(&table);
-}
-
/* Test ures_getUTF8StringXYZ() --------------------------------------------- */
/*
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.h b/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.h
index 4760d3a5a75..b939a34deec 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.h
@@ -81,8 +81,6 @@ static void TestJB3763(void);
static void TestXPath(void);
-static void TestStackReuse(void);
-
/**
* extensive subtests called by TestResourceBundles
**/
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.c
index 2a3cb19030c..31eebc49481 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.c
@@ -75,7 +75,7 @@ const static UCollationResult results[] = {
UCOL_GREATER,
/* test priamry > 8 */
UCOL_LESS,
- UCOL_LESS, /*Turkish translator made a primary differnce between dotted and dotless I */
+ UCOL_LESS, /*Turkish translator made a primary difference between dotted and dotless I */
UCOL_GREATER
};
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
index cacb203a27e..6501e585fba 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
@@ -421,6 +421,8 @@ void TestUScriptCodeAPI(){
"Elymaic", "Nyiakeng_Puachue_Hmong", "Nandinagari", "Wancho",
// new in ICU 66
"Chorasmian", "Dives_Akuru", "Khitan_Small_Script", "Yezidi",
+ // new in ICU 70
+ "Cypro_Minoan", "Old_Uyghur", "Tangsa", "Toto", "Vithkuqi",
};
static const char* expectedShort[] = {
"Bali", "Batk", "Blis", "Brah", "Cham", "Cirt", "Cyrs", "Egyd", "Egyh", "Egyp",
@@ -457,6 +459,8 @@ void TestUScriptCodeAPI(){
"Elym", "Hmnp", "Nand", "Wcho",
// new in ICU 66
"Chrs", "Diak", "Kits", "Yezi",
+ // new in ICU 70
+ "Cpmn", "Ougr", "Tnsa", "Toto", "Vith",
};
int32_t j = 0;
if(UPRV_LENGTHOF(expectedLong)!=(USCRIPT_CODE_LIMIT-USCRIPT_BALINESE)) {
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/cucdtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/cucdtst.c
index cd097320d9e..019292de1ef 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/cucdtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/cucdtst.c
@@ -1227,7 +1227,7 @@ enumDefaultsRange(const void *context, UChar32 start, UChar32 limit, UCharCatego
{ 0x07C0, U_RIGHT_TO_LEFT_ARABIC },
{ 0x0860, U_RIGHT_TO_LEFT },
{ 0x0870, U_RIGHT_TO_LEFT_ARABIC }, // Unicode 10 changes U+0860..U+086F from R to AL.
- { 0x08A0, U_RIGHT_TO_LEFT },
+ { 0x08A0, U_RIGHT_TO_LEFT_ARABIC }, // Unicode 14 changes U+0870..U+089F from R to AL.
{ 0x0900, U_RIGHT_TO_LEFT_ARABIC }, /* Unicode 6.1 changes U+08A0..U+08FF from R to AL */
{ 0x20A0, U_LEFT_TO_RIGHT },
{ 0x20D0, U_EUROPEAN_NUMBER_TERMINATOR }, /* Unicode 6.3 changes the currency symbols block U+20A0..U+20CF to default to ET not L */
@@ -2322,7 +2322,7 @@ TestUScriptRunAPI()
uscript_closeRun(scriptRun);
/*
- * Now open an interator over the testString
+ * Now open an iterator over the testString
* using uscript_openRun and make sure that it works
*/
scriptRun = uscript_openRun(testString, stringLimit, &err);
@@ -2548,7 +2548,6 @@ TestAdditionalProperties() {
{ 0x05ed, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT },
{ 0x07f2, UCHAR_BIDI_CLASS, U_DIR_NON_SPACING_MARK }, /* Nko, new in Unicode 5.0 */
{ 0x07fe, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT }, /* unassigned R */
- { 0x089f, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT },
{ 0xfb37, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT },
{ 0xfb42, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT },
{ 0x10806, UCHAR_BIDI_CLASS, U_RIGHT_TO_LEFT },
@@ -2568,7 +2567,7 @@ TestAdditionalProperties() {
{ 0x155A, UCHAR_BLOCK, UBLOCK_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS },
{ 0x1717, UCHAR_BLOCK, UBLOCK_TAGALOG },
{ 0x1900, UCHAR_BLOCK, UBLOCK_LIMBU },
- { 0x0870, UCHAR_BLOCK, UBLOCK_NO_BLOCK },
+ { 0x2FE0, UCHAR_BLOCK, UBLOCK_NO_BLOCK },
{ 0x3040, UCHAR_BLOCK, UBLOCK_HIRAGANA },
{ 0x1D0FF, UCHAR_BLOCK, UBLOCK_BYZANTINE_MUSICAL_SYMBOLS },
{ 0x50000, UCHAR_BLOCK, UBLOCK_NO_BLOCK },
@@ -2956,6 +2955,14 @@ TestAdditionalProperties() {
break;
}
}
+
+ // C API coverage
+ if (u_stringHasBinaryProperty(u"⏱", 1, UCHAR_BASIC_EMOJI) ||
+ u_stringHasBinaryProperty(u"⏱", -1, UCHAR_BASIC_EMOJI) ||
+ !u_stringHasBinaryProperty(u"⏱\uFE0F", 2, UCHAR_BASIC_EMOJI) ||
+ !u_stringHasBinaryProperty(u"⏱\uFE0F", -1, UCHAR_BASIC_EMOJI)) {
+ log_data_err("error: u_stringHasBinaryProperty(stopwatch variants) is wrong\n");
+ }
}
static void
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/currtest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/currtest.c
index 514278ad588..9f3254fe855 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/currtest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/currtest.c
@@ -83,6 +83,21 @@ static void TestEnumList(void) {
expectInList("XEU", UCURR_UNCOMMON|UCURR_DEPRECATED, TRUE);
expectInList("XEU", UCURR_UNCOMMON|UCURR_NON_DEPRECATED, FALSE);
+ // ICU-21622
+ expectInList("UYW", UCURR_ALL, TRUE);
+ expectInList("UYW", UCURR_COMMON, FALSE);
+ expectInList("UYW", UCURR_UNCOMMON, TRUE);
+ expectInList("UYW", UCURR_DEPRECATED, FALSE);
+ expectInList("UYW", UCURR_NON_DEPRECATED, TRUE);
+
+ // ICU-21685
+ expectInList("VES", UCURR_ALL, TRUE);
+ expectInList("VES", UCURR_COMMON, TRUE);
+ expectInList("VES", UCURR_UNCOMMON, FALSE);
+ expectInList("VES", UCURR_DEPRECATED, FALSE);
+ expectInList("VES", UCURR_NON_DEPRECATED, TRUE);
+
+ expectInList("EQE", UCURR_ALL, FALSE);
}
static void TestEnumListReset(void) {
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/custrtrn.c b/Build/source/libs/icu/icu-src/source/test/cintltst/custrtrn.c
index 895022e6029..615cdbf9b65 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/custrtrn.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/custrtrn.c
@@ -1239,7 +1239,7 @@ static void Test_UChar_WCHART_API(void){
free(uDest);
- /* test with embeded nulls */
+ /* test with embedded nulls */
uSrc = src16WithNulls;
uSrcLen = sizeof(src16WithNulls)/2;
wDestLen =0;
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c
index a1fc7b9c815..db503ff113d 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c
@@ -129,13 +129,13 @@ static void TestStringFunctions()
u_memcpy(temp,dataTable[i][j], 7);
if(temp[7] != 0xA4)
- log_err("an error occured in u_memcpy()\n");
+ log_err("an error occurred in u_memcpy()\n");
if(u_memcmp(temp, dataTable[i][j], 7)!=0)
- log_err("an error occured in u_memcpy() or u_memcmp()\n");
+ log_err("an error occurred in u_memcpy() or u_memcmp()\n");
}
}
if(u_memcmp(dataTable[0][0], dataTable[1][1], 7)==0)
- log_err("an error occured in u_memcmp()\n");
+ log_err("an error occurred in u_memcmp()\n");
log_verbose("Testing u_memset()\n");
nullTemp[0] = 0;
@@ -143,7 +143,7 @@ static void TestStringFunctions()
u_memset(nullTemp, 0xa4, 7);
for (i = 0; i < 7; i++) {
if(nullTemp[i] != 0xa4) {
- log_err("an error occured in u_memset()\n");
+ log_err("an error occurred in u_memset()\n");
}
}
if(nullTemp[7] != 0) {
@@ -155,7 +155,7 @@ static void TestStringFunctions()
temp[7] = 0;
u_memcpy(temp,nullTemp, 7);
if(u_memcmp(temp, nullTemp, 7)!=0 || temp[7]!=0)
- log_err("an error occured in u_memcpy() or u_memcmp()\n");
+ log_err("an error occurred in u_memcpy() or u_memcmp()\n");
log_verbose("Testing u_memmove()\n");
@@ -164,11 +164,11 @@ static void TestStringFunctions()
}
u_memmove(temp + 1, temp, 7);
if(temp[0] != 0) {
- log_err("an error occured in u_memmove()\n");
+ log_err("an error occurred in u_memmove()\n");
}
for (i = 1; i <= 7; i++) {
if(temp[i] != (i - 1)) {
- log_err("an error occured in u_memmove()\n");
+ log_err("an error occurred in u_memmove()\n");
}
}
@@ -187,7 +187,7 @@ static void TestStringFunctions()
}
}
if(u_strcmp(dataTable[0][0], dataTable[1][1])==0)
- log_err("an error occured in u_memcmp()\n");
+ log_err("an error occurred in u_memcmp()\n");
log_verbose("testing u_strcat()\n");
i=0;
@@ -208,7 +208,7 @@ static void TestStringFunctions()
log_err("Something threw an error in u_strncmp\n");
}
if(u_strncmp(dataTable[0][0], dataTable[1][1], 7)==0)
- log_err("an error occured in u_memcmp()\n");
+ log_err("an error occurred in u_memcmp()\n");
log_verbose("Testing u_strncat\n");
@@ -406,7 +406,7 @@ static void TestStringFunctions()
u_uastrcpy(delimBuf, "q"); /* Give it a delimiter that it can't find. */
ptr = u_strtok_r(currTokenBuf, delimBuf, &state);
if (ptr == NULL || u_strcmp(ptr, temp) != 0) {
- log_err("Should have recieved the same string when there are no delimiters\n");
+ log_err("Should have received the same string when there are no delimiters\n");
}
if (u_strtok_r(NULL, delimBuf, &state) != NULL) {
log_err("Should not have found another token in a one token string\n");
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/eurocreg.c b/Build/source/libs/icu/icu-src/source/test/cintltst/eurocreg.c
index 05f24700faf..19633c03486 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/eurocreg.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/eurocreg.c
@@ -27,7 +27,7 @@ void addTestEuroRegression(TestNode** root)
*
* After updating all ibm-*.ucm files with precise fallback indicators (|0, |1, |3),
* some of these codepages failed the Euro regression test.
- * This means that the actuall mappings changed when only the preciseness of fallback
+ * This means that the actual mappings changed when only the preciseness of fallback
* mappings should have changed.
* My (Markus) suspicion is that some files got Euro sign mappings added manually,
* changing their contents compared to the NLTC (IBM Toronto codepage database) definition.
@@ -156,7 +156,7 @@ UBool isEuroAware(UConverter* myConv)
&err);
if (U_FAILURE(err))
{
- log_err("Failure Occured in ucnv_fromUChars euro roundtrip test\n");
+ log_err("Failure occurred in ucnv_fromUChars euro roundtrip test\n");
return FALSE;
}
euroBackSize = ucnv_toUChars(myConv,
@@ -168,17 +168,17 @@ UBool isEuroAware(UConverter* myConv)
(void)euroBackSize; /* Suppress set but not used warning. */
if (U_FAILURE(err))
{
- log_err("Failure Occured in ucnv_toUChars euro roundtrip test\n");
+ log_err("Failure occurred in ucnv_toUChars euro roundtrip test\n");
return FALSE;
}
if (u_strcmp(euroString, euroBack))
{
- /* log_err("%s FAILED Euro rountrip\n", myName);*/
+ /* log_err("%s FAILED Euro roundtrip\n", myName);*/
return FALSE;
}
else
{
- /* log_verbose("%s PASSED Euro rountrip\n", myName);*/
+ /* log_verbose("%s PASSED Euro roundtrip\n", myName);*/
return TRUE;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/hpmufn.c b/Build/source/libs/icu/icu-src/source/test/cintltst/hpmufn.c
index 15ee5b4120c..558120de3d2 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/hpmufn.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/hpmufn.c
@@ -77,7 +77,7 @@ static char *safeGetICUDataDirectory() {
/*
* Test Heap Functions.
* Implemented on top of the standard malloc heap.
- * All blocks increased in size by 8 to 16 bytes, and the poiner returned to ICU is
+ * All blocks increased in size by 8 to 16 bytes, and the pointer returned to ICU is
* offset up by 8 to 16, which should cause a good heap corruption if one of our "blocks"
* ends up being freed directly, without coming through us.
* Allocations are counted, to check that ICU actually does call back to us.
@@ -134,7 +134,7 @@ static void TestHeapFunctions() {
/* Verify that ICU can be cleaned up and reinitialized successfully.
* Failure here usually means that some ICU service didn't clean up successfully,
- * probably because some earlier test accidently left something open. */
+ * probably because some earlier test accidentally left something open. */
ctest_resetICU();
/* Un-initialize ICU */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/idnatest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/idnatest.c
index e42aedea0c1..3025e85416e 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/idnatest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/idnatest.c
@@ -417,7 +417,7 @@ static const char * const domainNames[] = {
/*"www.\\u0021.com",*/
/*"www.\\u0024.com",*/
/*"\\u003f",*/
- /* These yeild U_IDNA_PROHIBITED_ERROR*/
+ /* These yield U_IDNA_PROHIBITED_ERROR*/
/*"\\u00CF\\u0082.com",*/
/*"\\u00CE\\u00B2\\u00C3\\u009Fss.com",*/
/*"\\u00E2\\u0098\\u00BA.com",*/
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.h b/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.h
index d1e8453b03b..dc91aa5e0ea 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.h
@@ -44,7 +44,7 @@ static void TestLegalAndOthers(int32_t inputsize, int32_t outputsize);
static void TestSingleByte(int32_t inputsize, int32_t outputsize);
static void TestEBCDIC_STATEFUL_Sub(int32_t inputsize, int32_t outputsize);
-/* Following will return FALSE *only* on a mismach. They will return TRUE on any other error OR success, because
+/* Following will return FALSE *only* on a mismatch. They will return TRUE on any other error OR success, because
* the error would have been emitted to log_err separately. */
UBool testConvertFromUnicode(const UChar *source, int sourceLen, const uint8_t *expect, int expectLen,
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.c
index 407e4fcbf41..d7e5efa2a8f 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.c
@@ -11,7 +11,7 @@
*
* Modification History:
* Name Date Description
-* Madhu Katragadda 06/23/2000 Tests for Conveter FallBack API and Functionality
+* Madhu Katragadda 06/23/2000 Tests for Converter FallBack API and Functionality
******************************************************************************
*/
#include <stdio.h>
@@ -376,7 +376,7 @@ static UBool testConvertToUnicode( const uint8_t *source, int sourcelen, const U
(const char **)&src,
(const char *)srcLimit,
checkOffsets ? offs : NULL,
- (UBool)(srcLimit == realSourceEnd), /* flush if we're at the end of hte source data */
+ (UBool)(srcLimit == realSourceEnd), /* flush if we're at the end of the source data */
&status);
} while ( (status == U_BUFFER_OVERFLOW_ERROR) || (srcLimit < realSourceEnd) ); /* while we just need another buffer */
@@ -574,7 +574,7 @@ static void TestConvertFallBackWithBufferSizes(int32_t outsize, int32_t insize )
retrievedMBCSText, UPRV_LENGTHOF(retrievedMBCSText),"ibm-950", TRUE, fromIBM950offs ))
log_err("ibm-950->u(MBCS) with Fallback did not match.\n");
- /*commented untill data table is available*/
+ /*commented until data table is available*/
log_verbose("toUnicode fallback with fallback data for MBCS\n");
{
const uint8_t IBM950input[] = {
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvtst.c
index 77f7fbc9669..7f56e644420 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvtst.c
@@ -1436,7 +1436,7 @@ static UBool testConvertToU( const uint8_t *source, int sourcelen, const UChar *
(const char **)&src,
(const char *)srcLimit,
offs,
- doFlush, /* flush if we're at the end of hte source data */
+ doFlush, /* flush if we're at the end of the source data */
&status);
if(testReset)
ucnv_resetFromUnicode(conv);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.c
index e85c4d07b5b..ce37bab8463 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.c
@@ -592,7 +592,7 @@ static ETestConvertResult testConvertToU( const uint8_t *source, int sourcelen,
&src,
srcLimit,
checkOffsets ? offs : NULL,
- (UBool)(srcLimit == realSourceEnd), /* flush if we're at the end of hte source data */
+ (UBool)(srcLimit == realSourceEnd), /* flush if we're at the end of the source data */
&status);
/* offs += (targ-oldTarg); */
@@ -698,7 +698,7 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize )
{ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0007, 0x000a, 0x000d, 0x000e, 0x000e };
#ifdef U_ENABLE_GENERIC_ISO_2022
- /* Same as UTF8, but with ^[%B preceeding */
+ /* Same as UTF8, but with ^[%B preceding */
static const const uint8_t expectedISO2022[] =
{ 0x1b, 0x25, 0x42, 0x31, 0x32, 0x33, 0x00, 0xe4, 0xb8, 0x80, 0xe4, 0xba, 0x8c, 0xe4, 0xb8, 0x89, 0x2E };
static const int32_t toISO2022Offs[] =
@@ -2557,7 +2557,7 @@ TestSBCS() {
{
static const uint8_t input1[]={ 0xA1 };
const char* illegalsource=(const char*)input1;
- TestNextUCharError(cnv, illegalsource, illegalsource+sizeof(illegalsource), U_INVALID_CHAR_FOUND, "source has a illegal characte");
+ TestNextUCharError(cnv, illegalsource, illegalsource+sizeof(illegalsource), U_INVALID_CHAR_FOUND, "source has a illegal character");
}
*/
ucnv_close(cnv);
@@ -4707,7 +4707,7 @@ TestEBCDIC_STATEFUL() {
/* Test the condition when source >= sourceLimit */
TestNextUCharError(cnv, source, source, U_INDEX_OUTOFBOUNDS_ERROR, "sourceLimit <= source");
ucnv_reset(cnv);
- /*Test for the condition where source > sourcelimit after consuming the shift chracter */
+ /*Test for the condition where source > sourcelimit after consuming the shift character */
{
static const uint8_t source1[]={0x0f};
TestNextUCharError(cnv, (const char*)source1, (const char*)source1+sizeof(source1), U_INDEX_OUTOFBOUNDS_ERROR, "a character is truncated");
@@ -5487,7 +5487,7 @@ static void TestJitterbug1293(){
numNeeded = bytes_needed;
} while (status == U_BUFFER_OVERFLOW_ERROR);
if(U_FAILURE(status)){
- log_err("An error occured in ucnv_fromUChars. Error: %s", u_errorName(status));
+ log_err("An error occurred in ucnv_fromUChars. Error: %s", u_errorName(status));
return;
}
ucnv_close(conv);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/reapits.c b/Build/source/libs/icu/icu-src/source/test/cintltst/reapits.c
index 73bc59a00f8..db961480147 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/reapits.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/reapits.c
@@ -2236,7 +2236,7 @@ static void TestRefreshInput(void) {
static void TestBug8421(void) {
- /* Bug 8421: setTimeLimit on a regular expresssion before setting text to be matched
+ /* Bug 8421: setTimeLimit on a regular expression before setting text to be matched
* was failing.
*/
URegularExpression *re;
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/spooftest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/spooftest.c
index c6ddbe09542..131d4c3d759 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/spooftest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/spooftest.c
@@ -10,7 +10,7 @@
* File spooftest.c
*
*********************************************************************************/
-/*C API TEST for the uspoof Unicode Indentifier Spoofing and Security API */
+/*C API TEST for the uspoof Unicode Identifier Spoofing and Security API */
/**
* This is an API test for ICU spoof detection in plain C. It doesn't test very many cases, and doesn't
* try to test the full functionality. It just calls each function and verifies that it
@@ -111,7 +111,7 @@ const UChar lll_Latin_b[] = {(UChar)0xff29, (UChar)0x217c, (UChar)0x196, 0};
const UChar lll_Cyrl[] = {(UChar)0x0406, (UChar)0x04C0, (UChar)0x31, 0};
-/* The skeleton transform for all of thes 'lll' lookalikes is all lower case l. */
+/* The skeleton transform for all of these 'lll' lookalikes is all lower case l. */
const UChar lll_Skel[] = {(UChar)0x6c, (UChar)0x6c, (UChar)0x6c, 0};
const UChar han_Hiragana[] = {(UChar)0x3086, (UChar)0x308A, (UChar)0x0020, (UChar)0x77F3, (UChar)0x7530, 0};
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/stdnmtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/stdnmtst.c
index 929bf48c80c..818478107ab 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/stdnmtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/stdnmtst.c
@@ -184,7 +184,7 @@ static UBool doTestNames(const char *name, const char *standard, const char **ex
return 0;
}
if (size < 0 && myEnum) {
- log_err("FAIL: size < 0, but recieved an actual object\n");
+ log_err("FAIL: size < 0, but received an actual object\n");
return 0;
}
log_verbose("\n%s %s\n", name, standard);
@@ -236,7 +236,7 @@ static UBool doTestUCharNames(const char *name, const char *standard, const char
return 0;
}
if (size < 0 && myEnum) {
- log_err("FAIL: size < 0, but recieved an actual object\n");
+ log_err("FAIL: size < 0, but received an actual object\n");
return 0;
}
log_verbose("\n%s %s\n", name, standard);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/trietest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/trietest.c
index b70bf539d50..f1cf243208d 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/trietest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/trietest.c
@@ -448,7 +448,7 @@ testTrieRanges(const char *testName,
const CheckRange checkRanges[], int32_t countCheckRanges,
UBool dataIs32, UBool latin1Linear) {
union{
- double bogus; /* needed for aligining the storage */
+ double bogus; /* needed for aligning the storage */
uint8_t storage[32768];
} storageHolder;
UTrieGetFoldingOffset *getFoldingOffset;
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c
index cbeb43d6419..af578f7a1a5 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ucptrietest.c
@@ -18,6 +18,8 @@
#include "cmemory.h"
#include "udataswp.h"
#include "cintltst.h"
+#include "writesrc.h"
+#include "toolutil.h"
void addUCPTrieTest(TestNode** root);
@@ -705,6 +707,62 @@ testBuilder(const char *testName, const UMutableCPTrie *mutableTrie,
testTrieGetRanges(testName, NULL, mutableTrie, UCPMAP_RANGE_NORMAL, 0, checkRanges, countCheckRanges);
}
+static void
+trieTestGolden(const char *testName,
+ const UCPTrie* trie,
+ const CheckRange checkRanges[],
+ int32_t countCheckRanges) {
+ log_verbose("golden testing Trie '%s'\n", testName);
+
+ UErrorCode status = U_ZERO_ERROR;
+ const char *testdatapath = loadSourceTestData(&status);
+ char goldendatapath[512];
+ // note: snprintf always writes a NUL terminator.
+ snprintf(goldendatapath, 512, "%scodepointtrie%s%s.toml",
+ testdatapath, U_FILE_SEP_STRING, testName);
+
+ // Write the data into a tmpfile (memstream is not portable)
+ FILE* stream = tmpfile();
+ usrc_writeCopyrightHeader(stream, "#", 2021);
+ usrc_writeFileNameGeneratedBy(stream, "#", testName, "ucptrietest.c");
+ fputs("[code_point_trie.struct]\n", stream);
+ fprintf(stream, "name = \"%s\"\n", testName);
+ usrc_writeUCPTrie(stream, testName, trie, UPRV_TARGET_SYNTAX_TOML);
+ fputs("\n[code_point_trie.testdata]\n", stream);
+ fputs("# Array of (limit, value) pairs\n", stream);
+ usrc_writeArray(stream, "checkRanges = [\n ",
+ // Note: CheckRange is a tuple of two 32-bit words
+ checkRanges, 32, countCheckRanges*2,
+ " ", "\n]\n");
+
+ // Convert the stream into a memory buffer
+ long fsize = ftell(stream);
+ void* memoryBuffer = malloc(fsize + 1);
+ if (memoryBuffer == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ log_err_status(status, "Could not allocate buffer: %s", goldendatapath);
+ goto cleanup;
+ }
+ fseek(stream, 0, SEEK_SET);
+ fread(memoryBuffer, 1, fsize, stream);
+
+ int32_t testResult = uprv_compareGoldenFiles(
+ memoryBuffer, fsize,
+ goldendatapath,
+ getTestOption(WRITE_GOLDEN_DATA_OPTION));
+
+ if (testResult >= 0) {
+ log_err(
+ "Golden files for '%s' differ at index %d; "
+ "run cintltst with -G to write new goldens",
+ testName, testResult);
+ }
+
+cleanup:
+ fclose(stream);
+ free(memoryBuffer);
+}
+
static uint32_t storage[120000];
static uint32_t swapped[120000];
@@ -761,6 +819,19 @@ testTrieSerialize(const char *testName, UMutableCPTrie *mutableTrie,
}
testTrie(testName, trie, type, valueWidth, checkRanges, countCheckRanges);
+
+ // Compare the tries with golden data, also used for ICU4X
+ // Don't print out cloning tests (redundant data)
+ // Don't print out stress tests (file size too large)
+ // Omit some of the short-all-same tests (~25KB apiece)
+ if (!withSwap &&
+ uprv_strncmp("many-", testName, 5) != 0 &&
+ uprv_strncmp("much-", testName, 5) != 0 &&
+ uprv_strncmp("short-all-same.16", testName, 17) != 0 &&
+ uprv_strncmp("short-all-same.32", testName, 17) != 0) {
+ trieTestGolden(testName, trie, checkRanges, countCheckRanges);
+ }
+
ucptrie_close(trie);
trie=NULL;
@@ -930,17 +1001,15 @@ testTrieSerializeAllValueWidth(const char *testName,
static UMutableCPTrie *
makeTrieWithRanges(const char *testName, UBool withClone,
const SetRange setRanges[], int32_t countSetRanges,
- const CheckRange checkRanges[], int32_t countCheckRanges) {
+ uint32_t initialValue, uint32_t errorValue) {
UMutableCPTrie *mutableTrie;
- uint32_t initialValue, errorValue;
uint32_t value;
UChar32 start, limit;
int32_t i;
UErrorCode errorCode;
- log_verbose("\ntesting Trie '%s'\n", testName);
+ log_verbose("testing Trie '%s'\n", testName);
errorCode=U_ZERO_ERROR;
- getSpecialValues(checkRanges, countCheckRanges, &initialValue, &errorValue);
mutableTrie = umutablecptrie_open(initialValue, errorValue, &errorCode);
if(U_FAILURE(errorCode)) {
log_err("error: umutablecptrie_open(%s) failed: %s\n", testName, u_errorName(errorCode));
@@ -985,8 +1054,10 @@ static void
testTrieRanges(const char *testName, UBool withClone,
const SetRange setRanges[], int32_t countSetRanges,
const CheckRange checkRanges[], int32_t countCheckRanges) {
+ uint32_t initialValue, errorValue;
+ getSpecialValues(checkRanges, countCheckRanges, &initialValue, &errorValue);
UMutableCPTrie *mutableTrie = makeTrieWithRanges(
- testName, withClone, setRanges, countSetRanges, checkRanges, countCheckRanges);
+ testName, withClone, setRanges, countSetRanges, initialValue, errorValue);
if (mutableTrie != NULL) {
mutableTrie = testTrieSerializeAllValueWidth(testName, mutableTrie, withClone,
checkRanges, countCheckRanges);
@@ -1451,9 +1522,13 @@ TrieTestGetRangesFixedSurr(void) {
{ 0x110000, 0 }
};
+ uint32_t initialValue, errorValue;
+ getSpecialValues(
+ checkRangesFixedLeadSurr1, UPRV_LENGTHOF(checkRangesFixedLeadSurr1),
+ &initialValue, &errorValue);
UMutableCPTrie *mutableTrie = makeTrieWithRanges(
"fixedSurr", FALSE, setRangesFixedSurr, UPRV_LENGTHOF(setRangesFixedSurr),
- checkRangesFixedLeadSurr1, UPRV_LENGTHOF(checkRangesFixedLeadSurr1));
+ initialValue, errorValue);
UErrorCode errorCode = U_ZERO_ERROR;
if (mutableTrie == NULL) {
return;
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/ucsdetst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/ucsdetst.c
index e39c46aaa7a..f65f8d79aa4 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/ucsdetst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/ucsdetst.c
@@ -208,7 +208,7 @@ try_le:
if (strcmp(name, "UTF-16LE") != 0) {
- log_err("Enconding detection failure for UTF-16LE: got %s\n", name);
+ log_err("Encoding detection failure for UTF-16LE: got %s\n", name);
}
if (conf != 100) {
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/udatatst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/udatatst.c
index 5c57d5aa437..109503db4d3 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/udatatst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/udatatst.c
@@ -569,10 +569,10 @@ isAcceptable1(void *context,
pInfo->dataFormat[3]==0x6c &&
pInfo->formatVersion[0]==3 )
{
- log_verbose("The data from \"%s.%s\" IS acceptable using the verifing function isAcceptable1()\n", name, type);
+ log_verbose("The data from \"%s.%s\" IS acceptable using the verifying function isAcceptable1()\n", name, type);
return TRUE;
} else {
- log_verbose("The data from \"%s.%s\" IS NOT acceptable using the verifing function isAcceptable1():-\n"
+ log_verbose("The data from \"%s.%s\" IS NOT acceptable using the verifying function isAcceptable1():-\n"
"\tsize = %d\n"
"\tisBigEndian = %d\n"
"\tcharsetFamily = %d\n"
@@ -582,7 +582,7 @@ isAcceptable1(void *context,
name, type, pInfo->size, pInfo->isBigEndian, pInfo->charsetFamily, pInfo->formatVersion[0],
pInfo->dataVersion[0], pInfo->dataFormat[0], pInfo->dataFormat[1], pInfo->dataFormat[2],
pInfo->dataFormat[3]);
- log_verbose("Call another verifing function to accept the data\n");
+ log_verbose("Call another verifying function to accept the data\n");
return FALSE;
}
}
@@ -606,10 +606,10 @@ isAcceptable2(void *context,
pInfo->formatVersion[0]==1 &&
pInfo->dataVersion[0]==unicodeVersion[0] )
{
- log_verbose("The data from \"%s.%s\" IS acceptable using the verifing function isAcceptable2()\n", name, type);
+ log_verbose("The data from \"%s.%s\" IS acceptable using the verifying function isAcceptable2()\n", name, type);
return TRUE;
} else {
- log_verbose("The data from \"%s.%s\" IS NOT acceptable using the verifing function isAcceptable2()\n", name, type);
+ log_verbose("The data from \"%s.%s\" IS NOT acceptable using the verifying function isAcceptable2()\n", name, type);
return FALSE;
}
@@ -631,11 +631,11 @@ isAcceptable3(void *context,
pInfo->dataFormat[3]==0x74 &&
pInfo->formatVersion[0]==1 &&
pInfo->dataVersion[0]==1 ) {
- log_verbose("The data from \"%s.%s\" IS acceptable using the verifing function isAcceptable3()\n", name, type);
+ log_verbose("The data from \"%s.%s\" IS acceptable using the verifying function isAcceptable3()\n", name, type);
return TRUE;
} else {
- log_verbose("The data from \"%s.%s\" IS NOT acceptable using the verifing function isAcceptable3()\n", name, type);
+ log_verbose("The data from \"%s.%s\" IS NOT acceptable using the verifying function isAcceptable3()\n", name, type);
return FALSE;
}
@@ -731,11 +731,11 @@ isAcceptable(void *context,
pInfo->formatVersion[0]==1 &&
pInfo->dataVersion[0]==1 &&
*((int*)context) == 2 ) {
- log_verbose("The data from\"%s.%s\" IS acceptable using the verifing function isAcceptable()\n", name, type);
+ log_verbose("The data from\"%s.%s\" IS acceptable using the verifying function isAcceptable()\n", name, type);
return TRUE;
} else {
- log_verbose("The data from \"%s.%s\" IS NOT acceptable using the verifing function isAcceptable()\n", name, type);
+ log_verbose("The data from \"%s.%s\" IS NOT acceptable using the verifying function isAcceptable()\n", name, type);
return FALSE;
}
}
@@ -1353,7 +1353,7 @@ static const struct {
#if !UCONFIG_NO_BREAK_ITERATION
{"char", "brk", ubrk_swap},
- {"thaidict", "dict",udict_swap},
+ {"laodict", "dict",udict_swap},
#endif
#if 0
@@ -1857,7 +1857,7 @@ static void TestTZDataDir(void) {
// whatever/.../testdata/out/testdata
// The test data puts an old (2014a) version of the time zone data there.
- // Switch ICU to the testdata version of zoneinfo64.res, which is verison 2014a.
+ // Switch ICU to the testdata version of zoneinfo64.res, which is version 2014a.
ctest_resetICU();
u_setTimeZoneFilesDirectory(testDataPath, &status);
tzDataVersion = ucal_getTZDataVersion(&status);
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c b/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c
index 3dc145d15d2..5f15577b264 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c
@@ -45,6 +45,7 @@ static void TestOptions(void);
static void TestGetFieldDisplayNames(void);
static void TestGetDefaultHourCycle(void);
static void TestGetDefaultHourCycleOnEmptyInstance(void);
+static void TestEras(void);
void addDateTimePatternGeneratorTest(TestNode** root) {
TESTCASE(TestOpenClose);
@@ -54,6 +55,7 @@ void addDateTimePatternGeneratorTest(TestNode** root) {
TESTCASE(TestGetFieldDisplayNames);
TESTCASE(TestGetDefaultHourCycle);
TESTCASE(TestGetDefaultHourCycleOnEmptyInstance);
+ TESTCASE(TestEras);
}
/*
@@ -531,7 +533,7 @@ static void TestGetDefaultHourCycle() {
{ "fi", UDAT_HOUR_CYCLE_23 },
{ "fr", UDAT_HOUR_CYCLE_23 },
{ "ja_JP", UDAT_HOUR_CYCLE_23 },
- { "zh_CN", UDAT_HOUR_CYCLE_12 },
+ { "zh_CN", UDAT_HOUR_CYCLE_23 },
{ "zh_HK", UDAT_HOUR_CYCLE_12 },
{ "zh_TW", UDAT_HOUR_CYCLE_12 },
{ "ko_KR", UDAT_HOUR_CYCLE_12 },
@@ -548,7 +550,7 @@ static void TestGetDefaultHourCycle() {
} else {
UDateFormatHourCycle actual = udatpg_getDefaultHourCycle(dtpgen, &status);
if (U_FAILURE(status) || testDataPtr->expected != actual) {
- log_err("ERROR dtpgen locale %s udatpg_getDefaultHourCycle expecte to get %d but get %d\n",
+ log_err("ERROR dtpgen locale %s udatpg_getDefaultHourCycle expected to get %d but get %d\n",
testDataPtr->locale, testDataPtr->expected, actual);
}
udatpg_close(dtpgen);
@@ -556,7 +558,7 @@ static void TestGetDefaultHourCycle() {
}
}
-// Ensure that calling udatpg_getDefaultHourCycle on an empty instance doesn't call UPRV_UNREACHABLE/abort.
+// Ensure that calling udatpg_getDefaultHourCycle on an empty instance doesn't call UPRV_UNREACHABLE_EXIT/abort.
static void TestGetDefaultHourCycleOnEmptyInstance() {
UErrorCode status = U_ZERO_ERROR;
UDateTimePatternGenerator * dtpgen = udatpg_openEmpty(&status);
@@ -580,4 +582,36 @@ static void TestGetDefaultHourCycleOnEmptyInstance() {
udatpg_close(dtpgen);
}
+// Test for ICU-21202: Make sure DateTimePatternGenerator supplies an era field for year formats using the
+// Buddhist and Japanese calendars for all English-speaking locales.
+static void TestEras(void) {
+ const char* localeIDs[] = {
+ "en_US@calendar=japanese",
+ "en_GB@calendar=japanese",
+ "en_150@calendar=japanese",
+ "en_001@calendar=japanese",
+ "en@calendar=japanese",
+ "en_US@calendar=buddhist",
+ "en_GB@calendar=buddhist",
+ "en_150@calendar=buddhist",
+ "en_001@calendar=buddhist",
+ "en@calendar=buddhist",
+ };
+
+ UErrorCode err = U_ZERO_ERROR;
+ for (int32_t i = 0; i < UPRV_LENGTHOF(localeIDs); i++) {
+ const char* locale = localeIDs[i];
+ UDateTimePatternGenerator* dtpg = udatpg_open(locale, &err);
+ if (U_SUCCESS(err)) {
+ UChar pattern[200];
+ udatpg_getBestPattern(dtpg, u"y", 1, pattern, 200, &err);
+
+ if (u_strchr(pattern, u'G') == NULL) {
+ log_err("missing era field for locale %s\n", locale);
+ }
+ }
+ udatpg_close(dtpg);
+ }
+}
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c
index 75f1cca4c44..ddba7fb059c 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/unumberformattertst.c
@@ -32,6 +32,8 @@ static void TestToDecimalNumber(void);
static void TestPerUnitInArabic(void);
+static void Test21674_State(void);
+
void addUNumberFormatterTest(TestNode** root);
#define TESTCASE(x) addTest(root, &x, "tsformat/unumberformatter/" #x)
@@ -44,6 +46,7 @@ void addUNumberFormatterTest(TestNode** root) {
TESTCASE(TestSkeletonParseError);
TESTCASE(TestToDecimalNumber);
TESTCASE(TestPerUnitInArabic);
+ TESTCASE(Test21674_State);
}
@@ -375,4 +378,47 @@ static void TestPerUnitInArabic() {
}
unumf_closeResult(formatted);
}
+
+
+static void Test21674_State() {
+ UErrorCode status = U_ZERO_ERROR;
+ UNumberFormatter* nf = NULL;
+ UFormattedNumber* result = NULL;
+
+ nf = unumf_openForSkeletonAndLocale(u"precision-increment/0.05/w", -1, "en", &status);
+ if (!assertSuccess("unumf_openForSkeletonAndLocale", &status)) { goto cleanup; }
+
+ result = unumf_openResult(&status);
+ if (!assertSuccess("unumf_openResult", &status)) { goto cleanup; }
+
+ typedef struct TestCase {
+ double num;
+ const UChar* expected;
+ } TestCase;
+ TestCase cases[] = {
+ { 1.975, u"2" },
+ { 1.97, u"1.95" },
+ { 1.975, u"2" },
+ };
+ for (int i=0; i<3; i++) {
+ unumf_formatDouble(nf, cases[i].num, result, &status);
+ if (!assertSuccess("unumf_formatDouble", &status)) { goto cleanup; }
+
+ const UFormattedValue* formattedValue = unumf_resultAsValue(result, &status);
+ if (!assertSuccess("unumf_resultAsValue", &status)) { goto cleanup; }
+
+ int32_t length;
+ const UChar* str = ufmtval_getString(formattedValue, &length, &status);
+ if (!assertSuccess("ufmtval_getString", &status)) { goto cleanup; }
+
+ char message[] = {i + '0', '\0'};
+ assertUEquals(message, cases[i].expected, str);
+ }
+
+cleanup:
+ unumf_close(nf);
+ unumf_closeResult(result);
+}
+
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c
index 35c21a2a510..4dc7a6b2409 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/unumberrangeformattertst.c
@@ -96,17 +96,18 @@ static void TestFormattedValue() {
if (assertSuccessCheck("Should format without error", &ec, TRUE)) {
const UFormattedValue* fv = unumrf_resultAsValue(uresult, &ec);
assertSuccess("Should convert without error", &ec);
- static const UFieldPosition expectedFieldPositions[] = {
- // field, begin index, end index
- {UNUM_INTEGER_FIELD, 0, 2},
- {UNUM_COMPACT_FIELD, 2, 3},
- {UNUM_INTEGER_FIELD, 6, 9},
- {UNUM_COMPACT_FIELD, 9, 10}};
- checkFormattedValue(
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // category, field, begin index, end index
+ {UFIELD_CATEGORY_NUMBER_RANGE_SPAN, 0, 0, 3},
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD, 0, 2},
+ {UFIELD_CATEGORY_NUMBER, UNUM_COMPACT_FIELD, 2, 3},
+ {UFIELD_CATEGORY_NUMBER_RANGE_SPAN, 1, 6, 10},
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD, 6, 9},
+ {UFIELD_CATEGORY_NUMBER, UNUM_COMPACT_FIELD, 9, 10}};
+ checkMixedFormattedValue(
"FormattedNumber as FormattedValue",
fv,
u"55K – 150K",
- UFIELD_CATEGORY_NUMBER,
expectedFieldPositions,
UPRV_LENGTHOF(expectedFieldPositions));
}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/uregiontest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/uregiontest.c
index 93e2f19b6e7..09fa74fae43 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/uregiontest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/uregiontest.c
@@ -24,6 +24,7 @@
static void TestKnownRegions(void);
static void TestGetContainedRegions(void);
+static void TestGroupingChildren(void);
static void TestGetContainedRegionsWithType(void);
static void TestGetContainingRegion(void);
static void TestGetContainingRegionWithType(void);
@@ -38,6 +39,7 @@ void addURegionTest(TestNode** root)
{
TESTCASE(TestKnownRegions);
TESTCASE(TestGetContainedRegions);
+ TESTCASE(TestGroupingChildren);
TESTCASE(TestGetContainedRegionsWithType);
TESTCASE(TestGetContainingRegion);
TESTCASE(TestGetContainingRegionWithType);
@@ -414,6 +416,58 @@ static void TestGetContainedRegions() {
}
}
+static void TestGroupingChildren() {
+ const char* testGroupings[] = {
+ "003", "021,013,029",
+ "419", "013,029,005",
+ "EU", "AT,BE,CY,CZ,DE,DK,EE,ES,FI,FR,GR,HR,HU,IE,IT,LT,LU,LV,MT,NL,PL,PT,SE,SI,SK,BG,RO"
+ };
+
+ for (int32_t i = 0; i < UPRV_LENGTHOF(testGroupings); i += 2) {
+ const char* groupingCode = testGroupings[i];
+ const char* expectedChildren = testGroupings[i + 1];
+
+ UErrorCode err = U_ZERO_ERROR;
+ const URegion* grouping = uregion_getRegionFromCode(groupingCode, &err);
+ if (U_SUCCESS(err)) {
+ UEnumeration* actualChildren = uregion_getContainedRegions(grouping, &err);
+ if (U_SUCCESS(err)) {
+ int32_t numActualChildren = uenum_count(actualChildren, &err);
+ int32_t numExpectedChildren = 0;
+ const char* expectedChildStart = expectedChildren;
+ const char* expectedChildEnd = NULL;
+ const char* actualChild = NULL;
+ while ((actualChild = uenum_next(actualChildren, NULL, &err)) != NULL && *expectedChildStart != '\0') {
+ expectedChildEnd = uprv_strchr(expectedChildStart, ',');
+ if (expectedChildEnd == NULL) {
+ expectedChildEnd = expectedChildStart + uprv_strlen(expectedChildStart);
+ }
+ if (uprv_strlen(actualChild) != (size_t)(expectedChildEnd - expectedChildStart) || uprv_strncmp(actualChild, expectedChildStart, expectedChildEnd - expectedChildStart) != 0) {
+ log_err("Mismatch in child list for %s at position %d: expected %s, got %s\n", groupingCode, i, expectedChildStart, actualChild);
+ }
+ expectedChildStart = (*expectedChildEnd != '\0') ? expectedChildEnd + 1 : expectedChildEnd;
+ ++numExpectedChildren;
+ }
+ if (expectedChildEnd == NULL) {
+ expectedChildEnd = expectedChildren;
+ }
+ while (expectedChildEnd != NULL && *expectedChildEnd != '\0') {
+ expectedChildEnd = uprv_strchr(expectedChildEnd + 1, ',');
+ ++numExpectedChildren;
+ }
+ if (numExpectedChildren != numActualChildren) {
+ log_err("Wrong number of children for %s: expected %d, got %d\n", groupingCode, numExpectedChildren, numActualChildren);
+ }
+ uenum_close(actualChildren);
+ } else {
+ log_err("Couldn't create iterator for children of %s\n", groupingCode);
+ }
+ } else {
+ log_err("Region %s not found\n", groupingCode);
+ }
+ }
+}
+
static void TestGetContainedRegionsWithType() {
const KnownRegion * rd;
for (rd = knownRegions; rd->code != NULL ; rd++ ) {
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/usettest.c b/Build/source/libs/icu/icu-src/source/test/cintltst/usettest.c
index d6569642c9e..f5528d05801 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/usettest.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/usettest.c
@@ -6,12 +6,15 @@
* Corporation and others. All Rights Reserved.
**********************************************************************
*/
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+
#include "unicode/uset.h"
#include "unicode/ustring.h"
#include "cintltst.h"
#include "cmemory.h"
-#include <stdlib.h>
-#include <string.h>
#define TEST(x) addTest(root, &x, "uset/" # x)
@@ -101,6 +104,9 @@ static void TestAPI() {
/* [ABC] */
set = uset_open(0x0041, 0x0043);
expect(set, "ABC", "DEF{ab}", NULL);
+ if(uset_hasStrings(set)) {
+ log_err("uset_hasStrings([ABC]) = true");
+ }
uset_close(set);
/* [a-c{ab}] */
@@ -113,6 +119,9 @@ static void TestAPI() {
if(!uset_resemblesPattern(PAT, PAT_LEN, 0)) {
log_err("uset_resemblesPattern of PAT failed\n");
}
+ if(!uset_hasStrings(set)) {
+ log_err("uset_hasStrings([a-c{ab}]) = false");
+ }
expect(set, "abc{ab}", "def{bc}", &ec);
/* [a-d{ab}] */
@@ -128,7 +137,7 @@ static void TestAPI() {
uset_removeString(set, STR_ab, STR_ab_LEN);
expect(set, "acd{bc}", "bfg{ab}", NULL);
- /* [^acd{bc}] */
+ /* [[^acd]{bc}] */
uset_complement(set);
expect(set, "bef{bc}", "acd{ac}", NULL);
@@ -167,13 +176,16 @@ static void TestAPI() {
return;
}
expect(set, "0123456789ABCDEFabcdef", "GHIjkl{bc}", NULL);
+ if (uset_size(set) != 22 || uset_getRangeCount(set) != 3 || uset_getItemCount(set) != 3) {
+ log_err("line %d: uset_size()/uset_getRangeCount()/uset_getItemCount() wrong", __LINE__);
+ }
/* [ab] */
uset_clear(set);
uset_addAllCodePoints(set, STR_ab, STR_ab_LEN);
expect(set, "ab", "def{ab}", NULL);
if (uset_containsAllCodePoints(set, STR_bc, STR_bc_LEN)){
- log_err("set should not conatin all characters of \"bc\" \n");
+ log_err("set should not contain all characters of \"bc\" \n");
}
/* [] */
@@ -211,6 +223,48 @@ static void TestAPI() {
uset_retainAll(set2, set);
expect(set2, "ghi", "abcdef{bc}", NULL);
+ // ICU 69 added some missing functions for parity with C++ and Java.
+ uset_applyPattern(set, u"[abcdef{ch}{sch}]", -1, 0, &ec);
+ if(U_FAILURE(ec)) {
+ log_err("uset_openPattern([abcdef{ch}{sch}]) failed - %s\n", u_errorName(ec));
+ return;
+ }
+ expect(set, "abcdef{ch}{sch}", "", NULL);
+
+ uset_removeAllCodePoints(set, u"ce", 2);
+ expect(set, "abdf{ch}{sch}", "ce", NULL);
+
+ uset_complementRange(set, u'b', u'f');
+ expect(set, "ace{ch}{sch}", "bdf", NULL);
+
+ uset_complementString(set, u"ch", -1);
+ expect(set, "ace{sch}", "bdf{ch}", NULL);
+
+ uset_complementString(set, u"xy", -1);
+ expect(set, "ace{sch}{xy}", "bdf{ch}", NULL);
+
+ uset_complementAllCodePoints(set, u"abef", 4);
+ expect(set, "bcf{sch}{xy}", "ade{ch}", NULL);
+
+ uset_retainAllCodePoints(set, u"abef", -1);
+ expect(set, "bf", "acde{ch}{sch}{xy}", NULL);
+
+ uset_applyPattern(set, u"[abcdef{ch}{sch}]", -1, 0, &ec);
+ if(U_FAILURE(ec)) {
+ log_err("uset_openPattern([abcdef{ch}{sch}]) failed - %s\n", u_errorName(ec));
+ return;
+ }
+ expect(set, "abcdef{ch}{sch}", "", NULL);
+ if (uset_size(set) != 8 || uset_getRangeCount(set) != 1 || uset_getItemCount(set) != 3) {
+ log_err("line %d: uset_size()/uset_getRangeCount()/uset_getItemCount() wrong", __LINE__);
+ }
+
+ uset_retainString(set, u"sch", 3);
+ expect(set, "{sch}", "abcdef{ch}", NULL);
+
+ uset_retainString(set, u"ch", 3);
+ expect(set, "", "abcdef{ch}{sch}", NULL);
+
uset_close(set);
uset_close(set2);
}
@@ -361,10 +415,12 @@ static void expectItems(const USet* set,
char *pat;
UErrorCode ec;
int32_t expectedSize = 0;
+ int32_t rangeCount = uset_getRangeCount(set);
int32_t itemCount = uset_getItemCount(set);
int32_t itemIndex = 0;
UChar32 start = 1, end = 0;
int32_t itemLen = 0, length;
+ bool isString = false;
ec = U_ZERO_ERROR;
length = uset_toPattern(set, ustr, sizeof(ustr), TRUE, &ec);
@@ -380,8 +436,8 @@ static void expectItems(const USet* set,
strlen(items)==0 ? "TRUE" : "FALSE");
}
- /* Don't test patterns starting with "[^" */
- if (u_strlen(ustr) > 2 && ustr[1] == 0x5e /*'^'*/) {
+ /* Don't test patterns starting with "[^" or "[\\u0000". */
+ if ((u_strlen(ustr) > 2 && ustr[1] == u'^') || uset_contains(set, 0)) {
return;
}
@@ -396,17 +452,26 @@ static void expectItems(const USet* set,
return;
}
- itemLen = uset_getItem(set, itemIndex, &start, &end,
- itemStr, sizeof(itemStr), &ec);
+ // Pass in NULL pointers where we expect them to be ok.
+ if (itemIndex < rangeCount) {
+ itemLen = uset_getItem(set, itemIndex, &start, &end, NULL, 0, &ec);
+ } else {
+ itemLen = uset_getItem(set, itemIndex, NULL, NULL,
+ itemStr, UPRV_LENGTHOF(itemStr), &ec);
+ isString = true;
+ }
if (U_FAILURE(ec) || itemLen < 0) {
log_err("FAIL: uset_getItem => %s\n", u_errorName(ec));
return;
}
- if (itemLen == 0) {
+ if (!isString) {
log_verbose("Ok: %s item %d is %c-%c\n", pat,
itemIndex, oneUCharToChar(start),
oneUCharToChar(end));
+ if (itemLen != 0) {
+ log_err("FAIL: uset_getItem(%d) => length %d\n", itemIndex, itemLen);
+ }
} else {
itemStr[itemLen] = 0;
u_UCharsToChars(itemStr, buf, itemLen+1);
@@ -430,7 +495,7 @@ static void expectItems(const USet* set,
u_charsToUChars(stringStart, ustr, stringLength);
ustr[stringLength] = 0;
- if (itemLen == 0) {
+ if (!isString) {
log_err("FAIL: for %s expect \"%s\" next, but got a char\n",
pat, strCopy);
return;
@@ -449,18 +514,19 @@ static void expectItems(const USet* set,
u_charsToUChars(p, ustr, 1);
c = ustr[0];
- if (itemLen != 0) {
+ if (isString) {
log_err("FAIL: for %s expect '%c' next, but got a string\n",
pat, *p);
return;
}
- if (c != start++) {
+ if (c != start) {
log_err("FAIL: for %s expect '%c' next\n",
pat, *p);
return;
}
+ ++start;
++p;
}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/usrchtst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/usrchtst.c
index 7a683a063d0..aa5618617e0 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/usrchtst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/usrchtst.c
@@ -302,7 +302,7 @@ static void TestInitialization(void)
{
UErrorCode status = U_ZERO_ERROR;
UChar pattern[512];
- const UChar text[] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66};
+ const UChar text[] = u"abcdef";
int32_t i = 0;
UStringSearch *result;
@@ -332,6 +332,15 @@ static void TestInitialization(void)
log_err("Error opening search %s\n", u_errorName(status));
}
usearch_close(result);
+
+ /* testing that a pattern with all ignoreables doesn't fail initialization with an error */
+ UChar patternIgnoreables[] = u"\u200b"; // Zero Width Space
+ result = usearch_openFromCollator(patternIgnoreables, 1, text, 3, EN_US_, NULL, &status);
+ if (U_FAILURE(status)) {
+ log_err("Error opening search %s\n", u_errorName(status));
+ }
+ usearch_close(result);
+
close();
}
@@ -1562,7 +1571,7 @@ static void TestSetMatch(void)
search.size[offsetIndex + 1] + 1,
&status) != search.offset[offsetIndex + 1] ||
U_FAILURE(status)) {
- log_err("Error getting preceeding match at index %d\n",
+ log_err("Error getting preceding match at index %d\n",
search.offset[offsetIndex + 1] + 1);
}
}
@@ -2648,7 +2657,7 @@ static void TestStrengthIdentical(void)
len = usearch_getMatchedLength(search);
if(pos != -1) {
- log_err("Expected failure for strentgh = UCOL_IDENTICAL: got %d instead.\n", pos);
+ log_err("Expected failure for strength = UCOL_IDENTICAL: got %d instead.\n", pos);
}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/utexttst.c b/Build/source/libs/icu/icu-src/source/test/cintltst/utexttst.c
index 8c70f0e803d..8f3974c9041 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/utexttst.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/utexttst.c
@@ -57,7 +57,7 @@ addUTextTest(TestNode** root)
* This is not intended to be a complete test of the API functionality. That is
* in the C++ intltest program.
* This test is intended to check that everything can be accessed and built in
- * a pure C enviornment.
+ * a pure C environment.
*/
diff --git a/Build/source/libs/icu/icu-src/source/test/cintltst/utransts.c b/Build/source/libs/icu/icu-src/source/test/cintltst/utransts.c
index cac40e392ec..45ba01631b5 100644
--- a/Build/source/libs/icu/icu-src/source/test/cintltst/utransts.c
+++ b/Build/source/libs/icu/icu-src/source/test/cintltst/utransts.c
@@ -443,7 +443,7 @@ static void TestSimpleRules() {
/* Example: rules 1. ab>x|y
* 2. yc>z
*
- * []|eabcd start - no match, copy e to tranlated buffer
+ * []|eabcd start - no match, copy e to translated buffer
* [e]|abcd match rule 1 - copy output & adjust cursor
* [ex|y]cd match rule 2 - copy output & adjust cursor
* [exz]|d no match, copy d to transliterated buffer
diff --git a/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt b/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
index 9367f1630dc..d15fbe0b399 100644
--- a/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
+++ b/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
@@ -9,7 +9,7 @@
# created on: 2011may26
# created by: Markus W. Scherer
#
-# See http://site.icu-project.org/processes/release/tasks/healthy-code#TOC-Check-library-dependencies
+# See https://unicode-org.github.io/icu/processes/release/tasks/healthy-code.html#check-library-dependencies
# Standard library symbols used by ICU --------------------------------------- #
@@ -19,6 +19,7 @@ system_symbols:
PIC system_misc system_debug malloc_functions ubsan
c_strings c_string_formatting
int_functions floating_point trigonometry
+ exp_and_tanhf
stdlib_qsort
system_locale
stdio_input stdio_output file_io readlink_function dir_io mmap_functions dlfcn
@@ -58,6 +59,8 @@ group: c_strings
# We must not use tolower and toupper because they are system-locale-sensitive (Turkish i).
strlen strchr strrchr strstr strcmp strncmp strcpy strncpy strcat strncat
memchr memcmp memcpy memmove memset
+ # BSD version of memcmp().
+ bcmp
# Additional symbols in an optimized build.
__strcpy_chk __strncpy_chk __strcat_chk __strncat_chk
__rawmemchr __memcpy_chk __memmove_chk __memset_chk
@@ -74,6 +77,9 @@ group: int_functions
group: floating_point
abs fabs floor ceil modf fmod log pow round sqrt trunc
+group: exp_and_tanhf
+ expf tanhf
+
group: trigonometry
acos asin atan atan2 cos sin tan
# Additional symbols in an optimized build.
@@ -166,7 +172,7 @@ library: common
static_unicode_sets
uiter edits
ucasemap ucasemap_titlecase_brkiter script_runs
- uprops ubidi_props ucase uscript uscript_props characterproperties
+ uprops ubidi_props ucase uscript uscript_props emojiprops characterproperties
ubidi ushape ubiditransform
resourcebundle service_registration resbund_cnv ures_cnv icudataver ucat
currency
@@ -205,7 +211,7 @@ group: breakiterator
brkiter.o brkeng.o ubrk.o
rbbi.o rbbinode.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o
rbbidata.o rbbirb.o rbbi_cache.o
- dictionarydata.o dictbe.o
+ dictionarydata.o dictbe.o lstmbe.o
# BreakIterator::makeInstance() factory implementation makes for circular dependency
# between BreakIterator base and FilteredBreakIteratorBuilder.
filteredbrk.o
@@ -217,6 +223,7 @@ group: breakiterator
ucharstriebuilder # for filteredbrk.o
normlzr # for dictbe.o, should switch to Normalizer2
uvector32 # for dictbe.o
+ exp_and_tanhf # for lstmbe.o
group: unormcmp # unorm_compare()
unormcmp.o
@@ -404,6 +411,7 @@ group: uprops
ubidi_props
unistr_case ustring_case # only for case folding
ucase
+ emojiprops
group: characterproperties
characterproperties.o
@@ -467,6 +475,12 @@ group: ubidi_props
deps
utrie2
+group: emojiprops
+ emojiprops.o
+ deps
+ ucharstrie ucharstrieiterator
+ ucptrie udata
+
group: unistr_props
unistr_props.o
deps
diff --git a/Build/source/libs/icu/icu-src/source/test/depstest/depstest.py b/Build/source/libs/icu/icu-src/source/test/depstest/depstest.py
index 83dbfc063ca..947181a4d37 100644
--- a/Build/source/libs/icu/icu-src/source/test/depstest/depstest.py
+++ b/Build/source/libs/icu/icu-src/source/test/depstest/depstest.py
@@ -1,4 +1,4 @@
-#! /usr/bin/python -B
+#! /usr/bin/python3 -B
# -*- coding: utf-8 -*-
#
# Copyright (C) 2016 and later: Unicode, Inc. and others.
@@ -124,7 +124,7 @@ def _Resolve(name, parents):
# Check if already cached.
exports = item.get("exports")
if exports != None: return item
- # Calculcate recursively.
+ # Calculate recursively.
parents.append(name)
imports = set()
exports = set()
diff --git a/Build/source/libs/icu/icu-src/source/test/fuzzer/collator_rulebased_ICU-21041.fuzz b/Build/source/libs/icu/icu-src/source/test/fuzzer/collator_rulebased_ICU-21041.fuzz
new file mode 100644
index 00000000000..41efe8040b3
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/fuzzer/collator_rulebased_ICU-21041.fuzz
Binary files differ
diff --git a/Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp b/Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp
index 9bffb93649b..9361d606a00 100644
--- a/Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/fuzzer/fuzzer_driver.cpp
@@ -32,7 +32,7 @@ int main(int argc, char* argv[])
<< " CXXFLAGS=\"-fsanitize=$SANITIZE\""
<< " ./runConfigureICU ... " << std::endl
<< " where $SANITIZE is 'address' or 'memory'" << std::endl
- << "Plesae run the above step and make tests to rebuild" << std::endl;
+ << "Please run the above step and make tests to rebuild" << std::endl;
// Do not return -1 here so we will pass the unit test.
}
if (argc < 2) {
diff --git a/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in b/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in
index af0e8485843..5e640a46209 100644
--- a/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in
@@ -17,6 +17,10 @@
##
## .. etc. Anything other than zero is an error. (except for the deprecation tests, where '1' is the correct value)
##
+## If the header test is run for a particular UCONFIG_NO_XXX=1 variation (see uconfig.h)
+## then invoke the test with 'make UCONFIG_NO="-DUCONFIG_NO_XXX=1 check'.
+## For standard header test run the UCONFIG_NO variable will evaluate to empty string.
+##
## If a header fails the C compile test it is likely because the header is a
## C++ header and it isn't properly guarded by the U_SHOW_CPLUSPLUS_API macro.
##
@@ -48,7 +52,7 @@ headertest:
echo "$(NAME.headers) unicode/$$incfile" ; \
echo "#include <unicode/$$incfile>" > $$stub ; \
echo 'void junk(){}' >> $$stub ; \
- $(COMPILE.headers) $(cppflags) $(FLAGS.headers) $$stub || FAIL=1 ; \
+ $(COMPILE.headers) $(cppflags) $(FLAGS.headers) $(UCONFIG_NO) $$stub || FAIL=1 ; \
rm -f $$stub; \
done ; \
exit $$FAIL
@@ -121,7 +125,7 @@ cppguardtest:
echo '#if !defined(U_SHOW_CPLUSPLUS_API)' >> $$stub ; \
echo "#error The header '$$incfile' refers to the macro U_SHOW_CPLUSPLUS_API (defined in utypes.h) but either does not include utypes.h or does so incorrectly." >> $$stub ; \
echo '#endif' >> $$stub ; \
- $(COMPILE.cc) $(cppflags) $$stub || FAIL=1 ; \
+ $(COMPILE.cc) $(cppflags) $(UCONFIG_NO) $$stub || FAIL=1 ; \
rm -f $$stub; \
else \
echo "$@ skipping unicode/$$incfile" ; \
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in b/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
index 13d3ea86dc9..4bb615f1b6e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
@@ -52,7 +52,7 @@ tfsmalls.o tmsgfmt.o trcoll.o tscoll.o tsdate.o tsdcfmsy.o tsdtfmsy.o \
tsmthred.o tsnmfmt.o tsputil.o tstnrapi.o tstnorm.o tzbdtest.o \
tzregts.o tztest.o ucdtest.o usettest.o ustrtest.o strcase.o transtst.o strtest.o thcoll.o \
bytestrietest.o ucharstrietest.o \
-itrbbi.o rbbiapts.o rbbitst.o rbbimonkeytest.o ittrans.o transapi.o cpdtrtst.o \
+itrbbi.o lstmbetst.o rbbiapts.o rbbitst.o rbbimonkeytest.o ittrans.o transapi.o cpdtrtst.o \
testutil.o transrt.o trnserr.o normconf.o sfwdchit.o \
jamotest.o srchtest.o reptest.o regextst.o \
itrbnf.o itrbnfrt.o itrbnfp.o ucaconf.o icusvtst.o \
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.h b/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.h
index c747efe3beb..62eedd212fa 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.h
@@ -20,7 +20,7 @@ public:
void TestULocale();
void TestUResourceBundle();
void TestDisplayName();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
LocaleAliasTest();
virtual ~LocaleAliasTest();
private:
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.h
index 3383d36a1b8..a5ae4b920b3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.h
@@ -30,7 +30,7 @@ public:
CollationDummyTest();
virtual ~CollationDummyTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par = NULL */);
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par = NULL */) override;
// perform test with strength PRIMARY
void TestPrimary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.h b/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.h
index a785fca08e7..66c7087b2ad 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.h
@@ -21,7 +21,7 @@ public:
AlphabeticIndexTest();
virtual ~AlphabeticIndexTest();
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL );
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
virtual void APITest();
virtual void ManyLocalesTest();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.cpp
index 88eefa92b98..a5dbf450e96 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.cpp
@@ -804,11 +804,11 @@ CollationAPITest::TestElemIter(/* char* par */)
coliter->reset();
coliter->setText(*chariter, success);
if(!U_FAILURE(success)){
- errln("Expeceted error");
+ errln("Expected error");
}
iterator1->setText((UnicodeString)"hello there", success);
if(!U_FAILURE(success)){
- errln("Expeceted error");
+ errln("Expected error");
}
delete chariter;
@@ -914,7 +914,7 @@ CollationAPITest::TestDuplicate(/* char* par */)
return;
}
Collator *col2 = col1->clone();
- doAssert((*col1 == *col2), "Cloned object is not equal to the orginal");
+ doAssert((*col1 == *col2), "Cloned object is not equal to the original");
UnicodeString ruleset("&9 < a, A < b, B < c, C < d, D, e, E");
RuleBasedCollator *col3 = new RuleBasedCollator(ruleset, status);
if (U_FAILURE(status)) {
@@ -923,7 +923,7 @@ CollationAPITest::TestDuplicate(/* char* par */)
}
doAssert((*col1 != *col3), "Cloned object is equal to some dummy");
*col3 = *((RuleBasedCollator*)col1);
- doAssert((*col1 == *col3), "Copied object is not equal to the orginal");
+ doAssert((*col1 == *col3), "Copied object is not equal to the original");
UCollationResult res;
UnicodeString first((UChar)0x0061);
@@ -1173,7 +1173,7 @@ void CollationAPITest::TestSortKey()
doAssert(memcmp(tempkey, sortkey3, keylength) == 0,
"Test3 string should have the same collation key and sort key");
- logln("Use secondary comparision level testing ...\n");
+ logln("Use secondary comparison level testing ...\n");
col->setStrength(Collator::SECONDARY);
col->getCollationKey(test1, u_strlen(test1), key1, status);
@@ -2000,66 +2000,66 @@ void CollationAPITest::TestUClassID()
class TestCollator : public Collator
{
public:
- virtual TestCollator* clone() const;
+ virtual TestCollator* clone() const override;
using Collator::compare;
virtual UCollationResult compare(const UnicodeString& source,
const UnicodeString& target,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
virtual UCollationResult compare(const UnicodeString& source,
const UnicodeString& target,
int32_t length,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
virtual UCollationResult compare(const UChar* source,
int32_t sourceLength,
const UChar* target,
int32_t targetLength,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
virtual CollationKey& getCollationKey(const UnicodeString& source,
CollationKey& key,
- UErrorCode& status) const;
+ UErrorCode& status) const override;
virtual CollationKey& getCollationKey(const UChar*source,
int32_t sourceLength,
CollationKey& key,
- UErrorCode& status) const;
- virtual int32_t hashCode(void) const;
- virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
- virtual ECollationStrength getStrength(void) const;
- virtual void setStrength(ECollationStrength newStrength);
- virtual UClassID getDynamicClassID(void) const;
- virtual void getVersion(UVersionInfo info) const;
+ UErrorCode& status) const override;
+ virtual int32_t hashCode(void) const override;
+ virtual Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const override;
+ virtual ECollationStrength getStrength(void) const override;
+ virtual void setStrength(ECollationStrength newStrength) override;
+ virtual UClassID getDynamicClassID(void) const override;
+ virtual void getVersion(UVersionInfo info) const override;
virtual void setAttribute(UColAttribute attr, UColAttributeValue value,
- UErrorCode &status);
+ UErrorCode &status) override;
virtual UColAttributeValue getAttribute(UColAttribute attr,
- UErrorCode &status) const;
+ UErrorCode &status) const override;
virtual uint32_t setVariableTop(const UChar *varTop, int32_t len,
- UErrorCode &status);
+ UErrorCode &status) override;
virtual uint32_t setVariableTop(const UnicodeString &varTop,
- UErrorCode &status);
- virtual void setVariableTop(uint32_t varTop, UErrorCode &status);
- virtual uint32_t getVariableTop(UErrorCode &status) const;
+ UErrorCode &status) override;
+ virtual void setVariableTop(uint32_t varTop, UErrorCode &status) override;
+ virtual uint32_t getVariableTop(UErrorCode &status) const override;
virtual int32_t getSortKey(const UnicodeString& source,
uint8_t* result,
- int32_t resultLength) const;
+ int32_t resultLength) const override;
virtual int32_t getSortKey(const UChar*source, int32_t sourceLength,
- uint8_t*result, int32_t resultLength) const;
- virtual UnicodeSet *getTailoredSet(UErrorCode &status) const;
- virtual UBool operator==(const Collator& other) const;
+ uint8_t*result, int32_t resultLength) const override;
+ virtual UnicodeSet *getTailoredSet(UErrorCode &status) const override;
+ virtual bool operator==(const Collator& other) const override;
// Collator::operator!= calls !Collator::operator== which works for all subclasses.
- virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale);
+ virtual void setLocales(const Locale& requestedLocale, const Locale& validLocale, const Locale& actualLocale) override;
TestCollator() : Collator() {}
TestCollator(UCollationStrength collationStrength,
UNormalizationMode decompositionMode) : Collator(collationStrength, decompositionMode) {}
};
-inline UBool TestCollator::operator==(const Collator& other) const {
+inline bool TestCollator::operator==(const Collator& other) const {
// TestCollator has no fields, so we test for identity.
return this == &other;
// Normally, subclasses should do something like the following:
- // if (this == &other) { return TRUE; }
- // if (!Collator::operator==(other)) { return FALSE; } // not the same class
+ // if (this == &other) { return true; }
+ // if (!Collator::operator==(other)) { return false; } // not the same class
//
// const TestCollator &o = (const TestCollator&)other;
// (compare this vs. o's subclass fields)
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.h
index 52aef260013..c97c49056f2 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.h
@@ -23,7 +23,7 @@
class CollationAPITest: public IntlTestCollator {
public:
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par = NULL */);
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par = NULL */) override;
void doAssert(UBool condition, const char *message);
/**
@@ -102,7 +102,7 @@ public:
* - creation of a CollationElementIterator object
* - == and != operators
* - iterating forward
- * - reseting the iterator index
+ * - resetting the iterator index
* - requesting the order properties(primary, secondary or tertiary)
*/
void TestElemIter(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.h b/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.h
index b956363b426..5d014392337 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.h
@@ -22,7 +22,7 @@
class AstroTest: public CalendarTimeZoneTest {
public:
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
AstroTest();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/bidiconf.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/bidiconf.cpp
index 8df8da627c6..d5336d42812 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/bidiconf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/bidiconf.cpp
@@ -36,7 +36,7 @@ public:
directionBits(0), lineNumber(0), levelsCount(0), orderingCount(0),
errorCount(0) {}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
void TestBidiTest();
void TestBidiCharacterTest();
@@ -362,7 +362,7 @@ void BiDiConformanceTest::TestBidiTest() {
This function performs a conformance test for implementations of the
Unicode Bidirectional Algorithm, specified in UAX #9: Unicode
-Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/
+Bidirectional Algorithm, at https://www.unicode.org/reports/tr9/
Each test case is represented in a single line which is read from a file
named BidiCharacter.txt. Empty, blank and comment lines may also appear
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/bytestrietest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/bytestrietest.cpp
index bdf0b9003bb..9835178c902 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/bytestrietest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/bytestrietest.cpp
@@ -34,7 +34,7 @@ public:
BytesTrieTest();
virtual ~BytesTrieTest();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
void TestBuilder();
void TestEmpty();
void Test_a();
@@ -56,6 +56,7 @@ public:
void TestTruncatingIteratorFromLinearMatchLong();
void TestIteratorFromBytes();
void TestFailedIterator();
+ void TestDelta();
void checkData(const StringAndValue data[], int32_t dataLength);
void checkData(const StringAndValue data[], int32_t dataLength, UStringTrieBuildOption buildOption);
@@ -110,6 +111,7 @@ void BytesTrieTest::runIndexedTest(int32_t index, UBool exec, const char *&name,
TESTCASE_AUTO(TestTruncatingIteratorFromLinearMatchLong);
TESTCASE_AUTO(TestIteratorFromBytes);
TESTCASE_AUTO(TestFailedIterator);
+ TESTCASE_AUTO(TestDelta);
TESTCASE_AUTO_END;
}
@@ -599,6 +601,45 @@ void BytesTrieTest::TestFailedIterator() {
}
}
+void BytesTrieTest::TestDelta() {
+ char intBytes0[5];
+ char intBytes1[5];
+ static constexpr int32_t sampleDeltas[] = {
+ -1, 0, 1, 2, 3, 0xa5, 0xbe, 0xbf,
+ -2, 0xc0, 0xc1, 0xeee, 0x1234, 0x2ffe, 0x2fff,
+ -3, 0x3000, 0x3001, 0x3003, 0x50005, 0xdfffe, 0xdffff,
+ -4, 0xe0000, 0xe0001, 0xef0123, 0xfffffe, 0xffffff,
+ -5, 0x1000000, 0x1000001, 0x7fffffff
+ };
+ int32_t expectedLength = 0;
+ for (int32_t delta : sampleDeltas) {
+ if (delta < 0) {
+ expectedLength = -delta;
+ continue;
+ }
+ // Encoding twice into differently-initialized arrays
+ // catches bytes that are not written to.
+ memset(intBytes0, 0, sizeof(intBytes0));
+ memset(intBytes1, 1, sizeof(intBytes1));
+ int32_t length0 = BytesTrieBuilder::internalEncodeDelta(delta, intBytes0);
+ int32_t length1 = BytesTrieBuilder::internalEncodeDelta(delta, intBytes1);
+ assertTrue(UnicodeString(u"non-zero length to encode delta ") + delta, length0 > 0);
+ assertEquals(UnicodeString(u"consistent length to encode delta ") + delta, length0, length1);
+ assertEquals(UnicodeString(u"expected length to encode delta ") + delta,
+ expectedLength, length0);
+ for (int32_t i = 0; i < length0; ++i) {
+ uint8_t b0 = intBytes0[i];
+ uint8_t b1 = intBytes1[i];
+ assertEquals(UnicodeString(u"differently encoded delta ") + delta +
+ u" at byte index " + i, b0, b1);
+ }
+ const uint8_t *start = (const uint8_t *)intBytes0;
+ const uint8_t *pos = BytesTrie::jumpByDelta(start);
+ assertEquals(UnicodeString(u"roundtrip for delta ") + delta,
+ delta, (int32_t)(pos - start) - length0);
+ }
+}
+
void BytesTrieTest::checkData(const StringAndValue data[], int32_t dataLength) {
logln("checkData(dataLength=%d, fast)", (int)dataLength);
checkData(data, dataLength, USTRINGTRIE_BUILD_FAST);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.h b/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.h
index 5b1cbc28e8d..ad55927f1f3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.h
@@ -23,7 +23,7 @@
class CalendarCaseTest: public CalendarTest {
public:
- virtual void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ virtual void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
/* Test case struct */
struct TestCase {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/callimts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/callimts.cpp
index 7208a08bb47..70913213e30 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/callimts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/callimts.cpp
@@ -479,7 +479,7 @@ CalendarLimitTest::doLimitsTest(Calendar& cal,
buf.remove();
buf.append((UnicodeString)"[" + cal.getType() + "] " + FIELD_NAME[f]);
- // Minumum
+ // Minimum
rangeLow = cal.getMinimum(f);
rangeHigh = cal.getGreatestMinimum(f);
if (limits[j][0] != rangeLow || limits[j][1] != rangeHigh) {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/callimts.h b/Build/source/libs/icu/icu-src/source/test/intltest/callimts.h
index 0aedfade738..82c50828c32 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/callimts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/callimts.h
@@ -23,7 +23,7 @@
*/
class CalendarLimitTest: public CalendarTimeZoneTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public: // package
//test routine used by TestCalendarLimit
virtual void test(UDate millis, Calendar *cal, DateFormat *fmt);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
index b3ac46e25eb..1a5a972810c 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
@@ -260,8 +260,8 @@ CalendarRegressionTest::test4031502()
// This bug actually occurs on Windows NT as well, and doesn't
// require the host zone to be set; it can be set in Java.
UErrorCode status = U_ZERO_ERROR;
- StringEnumeration* ids = TimeZone::createEnumeration();
- if (ids == NULL) {
+ StringEnumeration* ids = TimeZone::createEnumeration(status);
+ if (U_FAILURE(status)) {
dataerrln("Unable to create TimeZone Enumeration.");
return;
}
@@ -328,12 +328,12 @@ void CalendarRegressionTest::test4035301()
void CalendarRegressionTest::test4040996()
{
int32_t count = 0;
- StringEnumeration* ids = TimeZone::createEnumeration(-8 * 60 * 60 * 1000);
- if (ids == NULL) {
+ UErrorCode status = U_ZERO_ERROR;
+ StringEnumeration* ids = TimeZone::createEnumerationForRawOffset(-8 * 60 * 60 * 1000, status);
+ if (U_FAILURE(status)) {
dataerrln("Unable to create TimeZone enumeration.");
return;
}
- UErrorCode status = U_ZERO_ERROR;
count = ids->count(status);
(void)count; // Suppress set but not used warning.
SimpleTimeZone *pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, *ids->snext(status));
@@ -1740,7 +1740,7 @@ CalendarRegressionTest::Test4149677()
for (int32_t i=0; i < 3; ++i) {
GregorianCalendar *calendar = new GregorianCalendar(zones[i], status);
if(U_FAILURE(status)) {
- dataerrln("Couldnt' create calendar.: %s", u_errorName(status));
+ dataerrln("Couldn't create calendar.: %s", u_errorName(status));
return;
}
@@ -2682,9 +2682,13 @@ void CalendarRegressionTest::TestTimeZoneTransitionAdd() {
UErrorCode ec = U_ZERO_ERROR;
Locale locale(Locale::getUS()); // could also be CHINA
SimpleDateFormat dateFormat("MM/dd/yyyy HH:mm z", locale, ec);
+ if (U_FAILURE(ec)) {
+ dataerrln("FAIL: Constructing SimpleDateFormat");
+ return;
+ }
- StringEnumeration *tz = TimeZone::createEnumeration();
- if (tz == NULL) {
+ StringEnumeration *tz = TimeZone::createEnumeration(ec);
+ if (U_FAILURE(ec)) {
dataerrln("FAIL: TimeZone::createEnumeration");
return;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/calregts.h b/Build/source/libs/icu/icu-src/source/test/intltest/calregts.h
index 6fc4bdda16e..5770be51d63 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/calregts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/calregts.h
@@ -23,7 +23,7 @@
class CalendarRegressionTest: public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
void test4100311(void);
void test4074758(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
index 25f5f72ce2b..b9ae656690c 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
@@ -866,7 +866,7 @@ CalendarTest::TestDisambiguation765()
* desired. Using YEAR in combination with WOY is ambiguous, and
* results in the first WOY/DOW day of the year satisfying the
* given fields (there may be up to two such days). In this case,
- * it propertly resolves to Tue Dec 30 1997, which has a WOY value
+ * it properly resolves to Tue Dec 30 1997, which has a WOY value
* of 1 (for YEAR_WOY 1998) and a DOW of Tuesday, and falls in the
* _calendar_ year 1997, as specified. - aliu */
c->clear();
@@ -2475,8 +2475,8 @@ public:
CalFields(const Calendar& cal, UErrorCode& status);
void setTo(Calendar& cal) const;
char* toString(char* buf, int32_t len) const;
- UBool operator==(const CalFields& rhs) const;
- UBool operator!=(const CalFields& rhs) const;
+ bool operator==(const CalFields& rhs) const;
+ bool operator!=(const CalFields& rhs) const;
UBool isEquivalentTo(const Calendar& cal, UErrorCode& status) const;
private:
@@ -2519,7 +2519,7 @@ CalFields::toString(char* buf, int32_t len) const {
return buf;
}
-UBool
+bool
CalFields::operator==(const CalFields& rhs) const {
return year == rhs.year
&& month == rhs.month
@@ -2530,7 +2530,7 @@ CalFields::operator==(const CalFields& rhs) const {
&& ms == rhs.ms;
}
-UBool
+bool
CalFields::operator!=(const CalFields& rhs) const {
return !(*this == rhs);
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h b/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
index a3d9e1330c7..7c0e7a9003c 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
@@ -19,7 +19,7 @@
class CalendarTest: public CalendarTimeZoneTest {
public:
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
/**
* This test confirms the correct behavior of add when incrementing
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/canittst.h b/Build/source/libs/icu/icu-src/source/test/intltest/canittst.h
index dae33899689..a8b893e5b6b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/canittst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/canittst.h
@@ -38,7 +38,7 @@ public:
CanonicalIteratorTest();
virtual ~CanonicalIteratorTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
void TestCanonicalIterator(void);
void TestExhaustive(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.cpp
index dfd45aaba1f..d6c37ef96b6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.cpp
@@ -43,42 +43,42 @@ public:
text = newText;
}
- virtual void getText(UnicodeString& result) {
+ virtual void getText(UnicodeString& result) override {
text.extract(0,text.length(),result);
}
static UClassID getStaticClassID(void){
return (UClassID)(&fgClassID);
}
- virtual UClassID getDynamicClassID(void) const{
+ virtual UClassID getDynamicClassID(void) const override {
return getStaticClassID();
}
- virtual UBool operator==(const ForwardCharacterIterator& /*that*/) const{
- return TRUE;
+ virtual bool operator==(const ForwardCharacterIterator& /*that*/) const override {
+ return true;
}
- virtual SCharacterIterator* clone(void) const {
+ virtual SCharacterIterator* clone(void) const override {
return NULL;
}
- virtual int32_t hashCode(void) const{
+ virtual int32_t hashCode(void) const override {
return DONE;
}
- virtual UChar nextPostInc(void){ return text.charAt(pos++);}
- virtual UChar32 next32PostInc(void){return text.char32At(pos++);}
- virtual UBool hasNext() { return TRUE;}
- virtual UChar first(){return DONE;}
- virtual UChar32 first32(){return DONE;}
- virtual UChar last(){return DONE;}
- virtual UChar32 last32(){return DONE;}
- virtual UChar setIndex(int32_t /*pos*/){return DONE;}
- virtual UChar32 setIndex32(int32_t /*pos*/){return DONE;}
- virtual UChar current() const{return DONE;}
- virtual UChar32 current32() const{return DONE;}
- virtual UChar next(){return DONE;}
- virtual UChar32 next32(){return DONE;}
- virtual UChar previous(){return DONE;}
- virtual UChar32 previous32(){return DONE;}
- virtual int32_t move(int32_t delta,CharacterIterator::EOrigin origin){
+ virtual UChar nextPostInc(void) override { return text.charAt(pos++);}
+ virtual UChar32 next32PostInc(void) override {return text.char32At(pos++);}
+ virtual UBool hasNext() override { return TRUE;}
+ virtual UChar first() override {return DONE;}
+ virtual UChar32 first32() override {return DONE;}
+ virtual UChar last() override {return DONE;}
+ virtual UChar32 last32() override {return DONE;}
+ virtual UChar setIndex(int32_t /*pos*/) override {return DONE;}
+ virtual UChar32 setIndex32(int32_t /*pos*/) override {return DONE;}
+ virtual UChar current() const override {return DONE;}
+ virtual UChar32 current32() const override {return DONE;}
+ virtual UChar next() override {return DONE;}
+ virtual UChar32 next32() override {return DONE;}
+ virtual UChar previous() override {return DONE;}
+ virtual UChar32 previous32() override {return DONE;}
+ virtual int32_t move(int32_t delta,CharacterIterator::EOrigin origin) override {
switch(origin) {
case kStart:
pos = begin + delta;
@@ -101,7 +101,7 @@ public:
return pos;
}
- virtual int32_t move32(int32_t delta, CharacterIterator::EOrigin origin){
+ virtual int32_t move32(int32_t delta, CharacterIterator::EOrigin origin) override {
switch(origin) {
case kStart:
pos = begin;
@@ -128,7 +128,7 @@ public:
return pos;
}
- virtual UBool hasPrevious() {return TRUE;}
+ virtual UBool hasPrevious() override {return TRUE;}
SCharacterIterator& operator=(const SCharacterIterator& that){
text = that.text;
@@ -976,7 +976,7 @@ public:
}
// useful stuff, mostly dummy but testing coverage and subclassability
- virtual UChar nextPostInc() {
+ virtual UChar nextPostInc() override {
if(pos<UPRV_LENGTHOF(s)) {
return s[pos++];
} else {
@@ -984,7 +984,7 @@ public:
}
}
- virtual UChar32 next32PostInc() {
+ virtual UChar32 next32PostInc() override {
if(pos<UPRV_LENGTHOF(s)) {
UChar32 c;
U16_NEXT(s, pos, UPRV_LENGTHOF(s), c);
@@ -994,16 +994,16 @@ public:
}
}
- virtual UBool hasNext() {
+ virtual UBool hasNext() override {
return pos<UPRV_LENGTHOF(s);
}
- virtual UChar first() {
+ virtual UChar first() override {
pos=0;
return s[0];
}
- virtual UChar32 first32() {
+ virtual UChar32 first32() override {
UChar32 c;
pos=0;
U16_NEXT(s, pos, UPRV_LENGTHOF(s), c);
@@ -1011,7 +1011,7 @@ public:
return c;
}
- virtual UChar setIndex(int32_t position) {
+ virtual UChar setIndex(int32_t position) override {
if(0<=position && position<=UPRV_LENGTHOF(s)) {
pos=position;
if(pos<UPRV_LENGTHOF(s)) {
@@ -1021,7 +1021,7 @@ public:
return DONE;
}
- virtual UChar32 setIndex32(int32_t position) {
+ virtual UChar32 setIndex32(int32_t position) override {
if(0<=position && position<=UPRV_LENGTHOF(s)) {
pos=position;
if(pos<UPRV_LENGTHOF(s)) {
@@ -1033,7 +1033,7 @@ public:
return DONE;
}
- virtual UChar current() const {
+ virtual UChar current() const override {
if(pos<UPRV_LENGTHOF(s)) {
return s[pos];
} else {
@@ -1041,7 +1041,7 @@ public:
}
}
- virtual UChar32 current32() const {
+ virtual UChar32 current32() const override {
if(pos<UPRV_LENGTHOF(s)) {
UChar32 c;
U16_GET(s, 0, pos, UPRV_LENGTHOF(s), c);
@@ -1051,7 +1051,7 @@ public:
}
}
- virtual UChar next() {
+ virtual UChar next() override {
if(pos<UPRV_LENGTHOF(s) && ++pos<UPRV_LENGTHOF(s)) {
return s[pos];
} else {
@@ -1059,7 +1059,7 @@ public:
}
}
- virtual UChar32 next32() {
+ virtual UChar32 next32() override {
if(pos<UPRV_LENGTHOF(s)) {
U16_FWD_1(s, pos, UPRV_LENGTHOF(s));
}
@@ -1073,50 +1073,50 @@ public:
}
}
- virtual UBool hasPrevious() {
+ virtual UBool hasPrevious() override {
return pos>0;
}
- virtual void getText(UnicodeString &result) {
+ virtual void getText(UnicodeString &result) override {
result.setTo(s, UPRV_LENGTHOF(s));
}
// dummy implementations of other pure virtual base class functions
- virtual UBool operator==(const ForwardCharacterIterator &that) const {
+ virtual bool operator==(const ForwardCharacterIterator &that) const override {
return
this==&that ||
(typeid(*this)==typeid(that) && pos==((SubCharIter &)that).pos);
}
- virtual int32_t hashCode() const {
+ virtual int32_t hashCode() const override {
return 2;
}
- virtual CharacterIterator *clone() const {
+ virtual CharacterIterator *clone() const override {
return NULL;
}
- virtual UChar last() {
+ virtual UChar last() override {
return 0;
}
- virtual UChar32 last32() {
+ virtual UChar32 last32() override {
return 0;
}
- virtual UChar previous() {
+ virtual UChar previous() override {
return 0;
}
- virtual UChar32 previous32() {
+ virtual UChar32 previous32() override {
return 0;
}
- virtual int32_t move(int32_t /*delta*/, EOrigin /*origin*/) {
+ virtual int32_t move(int32_t /*delta*/, EOrigin /*origin*/) override {
return 0;
}
- virtual int32_t move32(int32_t /*delta*/, EOrigin /*origin*/) {
+ virtual int32_t move32(int32_t /*delta*/, EOrigin /*origin*/) override {
return 0;
}
@@ -1125,7 +1125,7 @@ public:
return (UClassID)(&fgClassID);
}
- virtual UClassID getDynamicClassID() const {
+ virtual UClassID getDynamicClassID() const override {
return getStaticClassID();
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.h
index b4d84586771..9c4f3bf23d7 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.h
@@ -19,7 +19,7 @@ class CharIterTest: public IntlTest {
public:
CharIterTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
/**
* Test Constructors and operators ==, != and a few other methods
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
index de51eece5c4..4ce9ada56ca 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
@@ -66,7 +66,7 @@ public:
delete coll;
}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
void TestMinMax();
void TestImplicits();
@@ -78,6 +78,7 @@ public:
void TestRootElements();
void TestTailoredElements();
void TestDataDriven();
+ void TestLongLocale();
private:
void checkFCD(const char *name, CollationIterator &ci, CodePointIterator &cpi);
@@ -148,6 +149,7 @@ void CollationTest::runIndexedTest(int32_t index, UBool exec, const char *&name,
TESTCASE_AUTO(TestRootElements);
TESTCASE_AUTO(TestTailoredElements);
TESTCASE_AUTO(TestDataDriven);
+ TESTCASE_AUTO(TestLongLocale);
TESTCASE_AUTO_END;
}
@@ -1852,4 +1854,12 @@ void CollationTest::TestDataDriven() {
}
}
+void CollationTest::TestLongLocale() {
+ IcuTestErrorCode errorCode(*this, "TestLongLocale");
+ Locale longLocale("sie__1G_C_CEIE_CEZCX_CSUE_E_EIESZNI2_GB_LM_LMCSUE_LMCSX_"
+ "LVARIANT_MMCSIE_STEU_SU1GCEIE_SU6G_SU6SU6G_U_UBGE_UC_"
+ "UCEZCSI_UCIE_UZSIU_VARIANT_X@collation=bcs-ukvsz");
+ LocalPointer<Collator> coll(Collator::createInstance(longLocale, errorCode));
+}
+
#endif // !UCONFIG_NO_COLLATION
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
index c3a6d8a7f8d..a06f871b1bb 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
@@ -321,7 +321,7 @@ CollData::CollData(UCollator *collator, UErrorCode &status)
USet *charsToTest = uset_openPattern(test_pattern, 20, &status);
// Han ext. A, Han, Jamo, Hangul, Han Ext. B
- // i.e. all the characers we handle implicitly
+ // i.e. all the characters we handle implicitly
U_STRING_DECL(remove_pattern, "[[\\u3400-\\u9FFF][\\u1100-\\u11F9][\\uAC00-\\uD7AF][\\U00020000-\\U0002A6DF]]", 70);
U_STRING_INIT(remove_pattern, "[[\\u3400-\\u9FFF][\\u1100-\\u11F9][\\uAC00-\\uD7AF][\\U00020000-\\U0002A6DF]]", 70);
USet *charsToRemove = uset_openPattern(remove_pattern, 70, &status);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/colldata.h b/Build/source/libs/icu/icu-src/source/test/intltest/colldata.h
index 7400d2b3ca3..d78425c70ec 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/colldata.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/colldata.h
@@ -14,10 +14,10 @@
*/
/*
- * Note: This module was incldued in ICU 4.0.1 as @internal technology preview for supporting
- * Boyer-Moore string search API. For now, only SSearchTest depends on this module. I temporaly
- * moved the module from i18n directory to intltest, because we have no plan to publish this
- * as public API. (2012-12-18 yoshito)
+ * Note: This module was included in ICU 4.0.1 as @internal technology preview for supporting
+ * Boyer-Moore string search API. For now, only SSearchTest depends on this module.
+ * I temporarily moved the module from i18n directory to intltest, because we have no plan to
+ * publish this as public API. (2012-12-18 yoshito)
*/
#ifndef COLL_DATA_H
@@ -171,7 +171,7 @@ public:
const UnicodeString *get(int32_t index) const;
/**
- * Get the number of stings in the list.
+ * Get the number of strings in the list.
*
* @return the number of strings in the list.
*/
@@ -195,7 +195,7 @@ class CEToStringsMap;
*
* This class holds the Collator-specific data needed to
* compute the length of the shortest string that can
- * generate a partcular list of CEs.
+ * generate a particular list of CEs.
*
* <code>CollData</code> objects are quite expensive to compute. Because
* of this, they are cached. When you call <code>CollData::open</code> it
@@ -236,17 +236,17 @@ public:
* @param ce - the CE
*
* return a <code>StringList</code> object containing all
- * the stirngs, or <code>NULL</code> if there are
+ * the strings, or <code>NULL</code> if there are
* no such strings.
*/
const StringList *getStringList(int32_t ce) const;
/**
- * Get a list of the CEs generated by a partcular stirng.
+ * Get a list of the CEs generated by a particular string.
*
* @param string - the string
*
- * @return a <code>CEList</code> object containt the CEs. You
+ * @return a <code>CEList</code> object containing the CEs. You
* must call <code>freeCEList</code> when you are finished
* using the <code>CEList</code>/
*/
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
index 1f51f70d010..483b89114c9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
@@ -226,7 +226,7 @@ public:
CompactDecimalFormatTest() {
}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void TestEnglishShort();
void TestSerbianShort();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
index a25a04be901..ee421deb5b5 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
@@ -35,6 +35,7 @@
#include "unicode/unistr.h"
#include "unicode/parsepos.h"
#include "unicode/uniset.h"
+#include "unicode/usetiter.h"
#include "unicode/ustring.h"
#include "unicode/ures.h"
#include "unicode/utf16.h"
@@ -643,14 +644,21 @@ ConversionTest::TestGetUnicodeSet2() {
delete [] s0;
}
-// Test all codepoints which has the default ignorable Unicode property are ignored if they have no mapping
-// If there are any failures, the hard coded list (IS_DEFAULT_IGNORABLE_CODE_POINT) in ucnv_err.c should be updated
+// Test that all code points which have the default ignorable Unicode property
+// are ignored if they have no mapping.
+// If there are any failures, the hard coded list (IS_DEFAULT_IGNORABLE_CODE_POINT)
+// in ucnv_err.cpp should be updated.
void
ConversionTest::TestDefaultIgnorableCallback() {
UErrorCode status = U_ZERO_ERROR;
const char *cnv_name = "euc-jp-2007";
const char *pattern_ignorable = "[:Default_Ignorable_Code_Point:]";
- const char *pattern_not_ignorable = "[:^Default_Ignorable_Code_Point:]";
+ const char *pattern_not_ignorable =
+ "[[:^Default_Ignorable_Code_Point:]"
+ // For test performance, skip large ranges that will likely remain unassigned
+ // for a long time, and private use code points.
+ "-[\\U00040000-\\U000DFFFF]-[:Co:]"
+ "]";
LocalPointer<UnicodeSet> set_ignorable(new UnicodeSet(pattern_ignorable, status));
if (U_FAILURE(status)) {
@@ -678,12 +686,12 @@ ConversionTest::TestDefaultIgnorableCallback() {
int32_t outputLength;
// test default ignorables are ignored
- int size = set_ignorable->size();
- for (int i = 0; i < size; i++) {
+ UnicodeSetIterator iter(*set_ignorable);
+ while (iter.next()) {
status = U_ZERO_ERROR;
outputLength= 0;
- input[0] = set_ignorable->charAt(i);
+ input[0] = iter.getCodepoint();
outputLength = ucnv_fromUChars(cnv.getAlias(), output, 10, UnicodeString::fromUTF32(input, 1).getTerminatedBuffer(), -1, &status);
if (U_FAILURE(status) || outputLength != 0) {
@@ -692,12 +700,12 @@ ConversionTest::TestDefaultIgnorableCallback() {
}
// test non-ignorables are not ignored
- size = set_not_ignorable->size();
- for (int i = 0; i < size; i++) {
+ iter.reset(*set_not_ignorable);
+ while (iter.next()) {
status = U_ZERO_ERROR;
outputLength= 0;
- input[0] = set_not_ignorable->charAt(i);
+ input[0] = iter.getCodepoint();
if (input[0] == 0) {
continue;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
index dda10cb5d27..9fb0d9af297 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
@@ -69,7 +69,7 @@ public:
ConversionTest();
virtual ~ConversionTest();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
void TestToUnicode();
void TestFromUnicode();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.h b/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.h
index 1733f1a6e42..dd0a0a0fd63 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.h
@@ -29,7 +29,7 @@
*/
class CompoundTransliteratorTest : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
/*Tests the constructors */
void TestConstruction(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.cpp
index 4068df3bd3e..66f9340b83a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.cpp
@@ -218,7 +218,7 @@ void CharsetDetectionTest::checkEncoding(const UnicodeString &testString, const
dLength = ucsdet_getUChars(matches[0], decoded, testLength, &status);
if (testString.compare(decoded, dLength) != 0) {
- errln("Round-trip error for " + id + ", " + eSplit[0] + ": getUChars() didn't yeild the original string.");
+ errln("Round-trip error for " + id + ", " + eSplit[0] + ": getUChars() didn't yield the original string.");
#ifdef DEBUG_DETECT
for(int32_t i = 0; i < testLength; i += 1) {
@@ -396,7 +396,7 @@ void CharsetDetectionTest::UTF16Test()
conf = ucsdet_getConfidence(match, &status);
if (strcmp(name, "UTF-16LE") != 0) {
- errln("Enconding detection failure for UTF-16LE: got %s", name);
+ errln("Encoding detection failure for UTF-16LE: got %s", name);
return;
}
@@ -780,7 +780,7 @@ void CharsetDetectionTest::Ticket6394Test() {
return;
}
- UnicodeSet setOfCharsetNames; // UnicodSets can hold strings.
+ UnicodeSet setOfCharsetNames; // UnicodeSets can hold strings.
int32_t i;
for (i=0; i<matchCount; i++) {
UnicodeString charSetName(ucsdet_getName(matches[i], &status));
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.h b/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.h
index 2e0fb3a567e..72d1ca92aea 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.h
@@ -21,7 +21,7 @@ public:
CharsetDetectionTest();
virtual ~CharsetDetectionTest();
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL );
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
virtual void ConstructionTest();
virtual void UTF8Test();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.h
index 9ee37631d7e..3527e939f0b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.h
@@ -31,7 +31,7 @@ public:
CollationCurrencyTest();
virtual ~CollationCurrencyTest();
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL) override;
void currencyTest(/*char *par*/);
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.h b/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.h
index fee2d8abe07..5589603a657 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.h
@@ -31,7 +31,7 @@ class CalendarFieldsSet;
class DataDrivenCalendarTest : public IntlTest {
void runIndexedTest(int32_t index, UBool exec, const char* &name,
- char* par = NULL);
+ char* par = NULL) override;
public:
DataDrivenCalendarTest();
virtual ~DataDrivenCalendarTest();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.h b/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.h
index ab94793eccf..7d3fc1909ea 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.h
@@ -31,7 +31,7 @@ class DataMap;
class DataDrivenFormatTest : public IntlTest {
void runIndexedTest(int32_t index, UBool exec, const char* &name,
- char* par = NULL);
+ char* par = NULL) override;
public:
DataDrivenFormatTest();
virtual ~DataDrivenFormatTest();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.h b/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.h
index 45c28468727..623ddad1a9e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.h
@@ -82,7 +82,7 @@ class DataDrivenNumberFormatTestSuite : public IntlTest {
UnicodeString &appendErrorMessage,
UErrorCode &status);
/**
- * If subclass is testing formatting with copy and assignmet, it
+ * If subclass is testing formatting with copy and assignment, it
* needs to override this method to return a newly allocated formatter.
*/
virtual UObject *newFormatter(UErrorCode &status);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.cpp
index c8bf97a6a21..1dde7c3ec9d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.cpp
@@ -175,15 +175,20 @@ void IntlTestDecimalFormatAPI::testAPI(/*char *par*/)
}
status = U_ZERO_ERROR;
- DecimalFormat cust1(pattern, symbols, status);
+ DecimalFormat cust1(pattern, *symbols, status);
if(U_FAILURE(status)) {
- errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)");
+ errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols)");
}
+ // NOTE: The test where you pass "symbols" as a pointer has to come second-- the DecimalFormat
+ // object is _adopting_ this object, meaning it's unavailable for use by this test (e.g.,
+ // to pass to another DecimalFormat) after the call to the DecimalFormat constructor.
+ // The call above, where we're passing it by reference, doesn't take ownership of the
+ // symbols object, so we can reuse it here.
status = U_ZERO_ERROR;
- DecimalFormat cust2(pattern, *symbols, status);
+ DecimalFormat cust2(pattern, symbols, status);
if(U_FAILURE(status)) {
- errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols)");
+ errln((UnicodeString)"ERROR: Could not create DecimalFormat (pattern, symbols*)");
}
DecimalFormat copy(pat);
@@ -1167,7 +1172,7 @@ void IntlTestDecimalFormatAPI::testInvalidObject() {
assertEquals(WHERE, U_MEMORY_ALLOCATION_ERROR, status);
// Two invalid objects should not be equal.
- // (Also verify that nullptr isn't t dereferenced in the comparision operator.)
+ // (Also verify that nullptr isn't t dereferenced in the comparison operator.)
assertTrue(WHERE, dfBogus != dfBogus2);
// Verify the comparison operator works for two valid objects.
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.h
index 090da6d7445..71595ed4ee1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.h
@@ -19,7 +19,7 @@
class IntlTestDecimalFormatAPI: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
public:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.cpp
index 0f4c943bf03..0734a44822f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.cpp
@@ -218,7 +218,7 @@ void DecimalFormatTest::DataDrivenTests() {
}
int32_t len;
- UChar *testData = ReadAndConvertFile(srcPath, len, status);
+ UChar *testData = ReadAndConvertFile(srcPath, len, "utf-8", status);
if (U_FAILURE(status)) {
return; /* something went wrong, error already output */
}
@@ -371,7 +371,7 @@ void DecimalFormatTest::execParseTest(int32_t lineNum,
case 'i': expectType = Formattable::kLong; break;
case 'l': expectType = Formattable::kInt64; break;
default:
- errln("file dcfmtest.tx, line %d: unrecongized expected type \"%s\"",
+ errln("file dcfmtest.tx, line %d: unrecognized expected type \"%s\"",
lineNum, InvariantStringPiece(expectedType).data());
return;
}
@@ -481,94 +481,5 @@ void DecimalFormatTest::execFormatTest(int32_t lineNum,
}
-//-------------------------------------------------------------------------------
-//
-// Read a text data file, convert it from UTF-8 to UChars, and return the data
-// in one big UChar * buffer, which the caller must delete.
-//
-// (Lightly modified version of a similar function in regextst.cpp)
-//
-//--------------------------------------------------------------------------------
-UChar *DecimalFormatTest::ReadAndConvertFile(const char *fileName, int32_t &ulen,
- UErrorCode &status) {
- UChar *retPtr = NULL;
- char *fileBuf = NULL;
- const char *fileBufNoBOM = NULL;
- FILE *f = NULL;
-
- ulen = 0;
- if (U_FAILURE(status)) {
- return retPtr;
- }
-
- //
- // Open the file.
- //
- f = fopen(fileName, "rb");
- if (f == 0) {
- dataerrln("Error opening test data file %s\n", fileName);
- status = U_FILE_ACCESS_ERROR;
- return NULL;
- }
- //
- // Read it in
- //
- int32_t fileSize;
- int32_t amtRead;
- int32_t amtReadNoBOM;
-
- fseek( f, 0, SEEK_END);
- fileSize = ftell(f);
- fileBuf = new char[fileSize];
- fseek(f, 0, SEEK_SET);
- amtRead = static_cast<int32_t>(fread(fileBuf, 1, fileSize, f));
- if (amtRead != fileSize || fileSize <= 0) {
- errln("Error reading test data file.");
- goto cleanUpAndReturn;
- }
-
- //
- // Look for a UTF-8 BOM on the data just read.
- // The test data file is UTF-8.
- // The BOM needs to be there in the source file to keep the Windows &
- // EBCDIC machines happy, so force an error if it goes missing.
- // Many Linux editors will silently strip it.
- //
- fileBufNoBOM = fileBuf + 3;
- amtReadNoBOM = amtRead - 3;
- if (fileSize<3 || uprv_strncmp(fileBuf, "\xEF\xBB\xBF", 3) != 0) {
- // TODO: restore this check.
- errln("Test data file %s is missing its BOM", fileName);
- fileBufNoBOM = fileBuf;
- amtReadNoBOM = amtRead;
- }
-
- //
- // Find the length of the input in UTF-16 UChars
- // (by preflighting the conversion)
- //
- u_strFromUTF8(NULL, 0, &ulen, fileBufNoBOM, amtReadNoBOM, &status);
-
- //
- // Convert file contents from UTF-8 to UTF-16
- //
- if (status == U_BUFFER_OVERFLOW_ERROR) {
- // Buffer Overflow is expected from the preflight operation.
- status = U_ZERO_ERROR;
- retPtr = new UChar[ulen+1];
- u_strFromUTF8(retPtr, ulen+1, NULL, fileBufNoBOM, amtReadNoBOM, &status);
- }
-
-cleanUpAndReturn:
- fclose(f);
- delete[] fileBuf;
- if (U_FAILURE(status)) {
- errln("ICU Error \"%s\"\n", u_errorName(status));
- delete retPtr;
- retPtr = NULL;
- }
- return retPtr;
-}
-
#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.h
index e7c43c15891..60d57a30aee 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.h
@@ -29,13 +29,11 @@ public:
DecimalFormatTest();
virtual ~DecimalFormatTest();
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL );
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// The following are test functions that are visible from the intltest test framework.
virtual void DataDrivenTests();
- // The following functions are internal to the decimal format tests.
- virtual UChar *ReadAndConvertFile(const char *fileName, int32_t &len, UErrorCode &status);
virtual const char *getPath(char buffer[2048], const char *filename);
virtual void execParseTest(int32_t lineNum,
const UnicodeString &inputText,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/decoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/decoll.h
index 10d1edaf29c..ee7e2afae05 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/decoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/decoll.h
@@ -28,7 +28,7 @@ public:
CollationGermanTest();
virtual ~CollationGermanTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// perform test with strength PRIMARY
void TestPrimary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.h
index 390b4e22c99..3ded5df2ff3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.h
@@ -22,7 +22,7 @@
* verifies that it works on a basic level.
*/
class IntlTestDateFormatAPI: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
index ecad4312c9a..050cdd9ba60 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
@@ -22,7 +22,7 @@
**/
class DateFormatRegressionTest: public CalendarTimeZoneTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
void Test4029195(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.h
index 57806661ee6..1f76c3e46be 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.h
@@ -25,7 +25,7 @@
class DateFormatRoundTripTest : public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
DateFormatRoundTripTest();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
index 3bd51368569..16f3002a95e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
@@ -264,8 +264,8 @@ void DateFormatTest::TestWallyWedel()
* A String array for the time zone ids.
*/
int32_t ids_length;
- StringEnumeration* ids = TimeZone::createEnumeration();
- if (ids == NULL) {
+ StringEnumeration* ids = TimeZone::createEnumeration(status);
+ if (U_FAILURE(status)) {
dataerrln("Unable to create TimeZone enumeration.");
if (sdf != NULL) {
delete sdf;
@@ -400,7 +400,7 @@ DateFormatTest::TestTwoDigitYearDSTParse(void)
UnicodeString str;
if(U_FAILURE(status)) {
- dataerrln("Could not set up test. exitting - %s", u_errorName(status));
+ dataerrln("Could not set up test. exiting - %s", u_errorName(status));
return;
}
@@ -1342,12 +1342,12 @@ DateFormatTest::TestLocaleDateFormat() // Bug 495
}
dfFrench->format(testDate, out);
- logln((UnicodeString)"Date Formated with French Locale " + out);
+ logln((UnicodeString)"Date Formatted with French Locale " + out);
if (!(out == expectedFRENCH))
errln((UnicodeString)"FAIL: Expected " + expectedFRENCH);
out.truncate(0);
dfUS->format(testDate, out);
- logln((UnicodeString)"Date Formated with US Locale " + out);
+ logln((UnicodeString)"Date Formatted with US Locale " + out);
if (!(out == expectedUS))
errln((UnicodeString)"FAIL: Expected " + expectedUS);
delete dfUS;
@@ -1892,21 +1892,34 @@ void DateFormatTest::TestQuarters()
const char *EN_DATA[] = {
"yyyy MM dd",
- "Q", "fp", "1970 01 01", "1", "1970 01 01",
- "QQ", "fp", "1970 04 01", "02", "1970 04 01",
- "QQQ", "fp", "1970 07 01", "Q3", "1970 07 01",
- "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01",
+ "Q", "fp", "1970 01 01", "1", "1970 01 01",
+ "QQ", "fp", "1970 04 01", "02", "1970 04 01",
+ "QQQ", "fp", "1970 07 01", "Q3", "1970 07 01",
+ "QQQQ", "fp", "1970 10 01", "4th quarter", "1970 10 01",
+ "QQQQQ", "fp", "1970 10 01", "4", "1970 10 01",
+
+ "q", "fp", "1970 01 01", "1", "1970 01 01",
+ "qq", "fp", "1970 04 01", "02", "1970 04 01",
+ "qqq", "fp", "1970 07 01", "Q3", "1970 07 01",
+ "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
+ "qqqqq", "fp", "1970 10 01", "4", "1970 10 01",
- "q", "fp", "1970 01 01", "1", "1970 01 01",
- "qq", "fp", "1970 04 01", "02", "1970 04 01",
- "qqq", "fp", "1970 07 01", "Q3", "1970 07 01",
- "qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
+ "Qyy", "fp", "2015 04 01", "215", "2015 04 01",
+ "QQyy", "fp", "2015 07 01", "0315", "2015 07 01",
+ };
+ const char *ES_MX_DATA[] = {
+ "yyyy MM dd",
- "Qyy", "fp", "2015 04 01", "215", "2015 04 01",
- "QQyy", "fp", "2015 07 01", "0315", "2015 07 01",
+ "QQQQ y", "fp", "1970 01 01", "1.er trimestre 1970", "1970 01 01",
+ "QQQ y", "fp", "1970 01 01", "T1 1970", "1970 01 01",
+ "QQQQQ y", "fp", "1970 01 01", "1 1970", "1970 01 01",
+ "qqqq", "fp", "1970 01 01", "1.er trimestre", "1970 01 01",
+ "qqq", "fp", "1970 01 01", "T1", "1970 01 01",
+ "qqqqq", "fp", "1970 01 01", "1T", "1970 01 01",
};
expect(EN_DATA, UPRV_LENGTHOF(EN_DATA), Locale("en", "", ""));
+ expect(ES_MX_DATA, UPRV_LENGTHOF(ES_MX_DATA), Locale("es", "MX", ""));
}
/**
@@ -3295,30 +3308,30 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-07:00", "-7:00" },
{ "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "z", "GMT-7", "-7:00" },
{ "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "zzzz", "GMT-07:00", "-7:00" },
- { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "Los Angeles", "America/Los_Angeles" },
- { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "Los Angeles", "America/Los_Angeles" },
+ { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "v", "\\u130D\\u12DC \\u120E\\u1235 \\u12A3\\u1295\\u1300\\u1208\\u1235", "America/Los_Angeles" },
+ { "ti", "America/Los_Angeles", "2004-07-15T00:00:00Z", "vvvv", "\\u130D\\u12DC \\u120E\\u1235 \\u12A3\\u1295\\u1300\\u1208\\u1235", "America/Los_Angeles" },
{ "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
{ "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
{ "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
- { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
+ { "ti", "America/Argentina/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u121D\\u12F1\\u1265 \\u130D\\u12DC \\u12A3\\u122D\\u1300\\u1295\\u1272\\u1293", "-3:00" },
{ "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
{ "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
{ "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
- { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
- { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires", "America/Buenos_Aires" },
- { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Buenos Aires", "America/Buenos_Aires" },
+ { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u121D\\u12F1\\u1265 \\u130D\\u12DC \\u12A3\\u122D\\u1300\\u1295\\u1272\\u1293", "-3:00" },
+ { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u130D\\u12DC \\u1265\\u12C8\\u1296\\u1235 \\u12A3\\u12ED\\u1228\\u1235", "America/Buenos_Aires" },
+ { "ti", "America/Argentina/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u121D\\u12F1\\u1265 \\u130D\\u12DC \\u12A3\\u122D\\u1300\\u1295\\u1272\\u1293", "America/Buenos_Aires" },
{ "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
{ "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
{ "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "z", "GMT-3", "-3:00" },
- { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
+ { "ti", "America/Buenos_Aires", "2004-01-15T00:00:00Z", "zzzz", "\\u121D\\u12F1\\u1265 \\u130D\\u12DC \\u12A3\\u122D\\u1300\\u1295\\u1272\\u1293", "-3:00" },
{ "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "Z", "-0300", "-3:00" },
{ "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
{ "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "z", "GMT-3", "-3:00" },
- { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "GMT-03:00", "-3:00" },
- { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "Buenos Aires", "America/Buenos_Aires" },
- { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "Buenos Aires", "America/Buenos_Aires" },
+ { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "zzzz", "\\u121D\\u12F1\\u1265 \\u130D\\u12DC \\u12A3\\u122D\\u1300\\u1295\\u1272\\u1293", "-3:00" },
+ { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "v", "\\u130D\\u12DC \\u1265\\u12C8\\u1296\\u1235 \\u12A3\\u12ED\\u1228\\u1235", "America/Buenos_Aires" },
+ { "ti", "America/Buenos_Aires", "2004-07-15T00:00:00Z", "vvvv", "\\u121D\\u12F1\\u1265 \\u130D\\u12DC \\u12A3\\u122D\\u1300\\u1295\\u1272\\u1293", "America/Buenos_Aires" },
{ "ti", "America/Havana", "2004-01-15T00:00:00Z", "Z", "-0500", "-5:00" },
{ "ti", "America/Havana", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-05:00", "-5:00" },
@@ -3328,8 +3341,8 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "ti", "America/Havana", "2004-07-15T00:00:00Z", "ZZZZ", "GMT-04:00", "-4:00" },
{ "ti", "America/Havana", "2004-07-15T00:00:00Z", "z", "GMT-4", "-4:00" },
{ "ti", "America/Havana", "2004-07-15T00:00:00Z", "zzzz", "GMT-04:00", "-4:00" },
- { "ti", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u12A9\\u1263", "America/Havana" },
- { "ti", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u12A9\\u1263", "America/Havana" },
+ { "ti", "America/Havana", "2004-07-15T00:00:00Z", "v", "\\u130D\\u12DC \\u12A9\\u1263", "America/Havana" },
+ { "ti", "America/Havana", "2004-07-15T00:00:00Z", "vvvv", "\\u130D\\u12DC \\u12A9\\u1263", "America/Havana" },
{ "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
{ "ti", "Australia/ACT", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
@@ -3339,8 +3352,8 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
{ "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
{ "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
- { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "Sydney", "Australia/Sydney" },
- { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "Sydney", "Australia/Sydney" },
+ { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "v", "\\u130D\\u12DC \\u1232\\u12F5\\u1292", "Australia/Sydney" },
+ { "ti", "Australia/ACT", "2004-07-15T00:00:00Z", "vvvv", "\\u130D\\u12DC \\u1232\\u12F5\\u1292", "Australia/Sydney" },
{ "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "Z", "+1100", "+11:00" },
{ "ti", "Australia/Sydney", "2004-01-15T00:00:00Z", "ZZZZ", "GMT+11:00", "+11:00" },
@@ -3350,8 +3363,8 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+10:00", "+10:00" },
{ "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "z", "GMT+10", "+10:00" },
{ "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "zzzz", "GMT+10:00", "+10:00" },
- { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "Sydney", "Australia/Sydney" },
- { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "Sydney", "Australia/Sydney" },
+ { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "v", "\\u130D\\u12DC \\u1232\\u12F5\\u1292", "Australia/Sydney" },
+ { "ti", "Australia/Sydney", "2004-07-15T00:00:00Z", "vvvv", "\\u130D\\u12DC \\u1232\\u12F5\\u1292", "Australia/Sydney" },
{ "ti", "Europe/London", "2004-01-15T00:00:00Z", "Z", "+0000", "+0:00" },
{ "ti", "Europe/London", "2004-01-15T00:00:00Z", "ZZZZ", "GMT", "+0:00" },
@@ -3360,9 +3373,9 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "ti", "Europe/London", "2004-07-15T00:00:00Z", "Z", "+0100", "+1:00" },
{ "ti", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+01:00", "+1:00" },
{ "ti", "Europe/London", "2004-07-15T00:00:00Z", "z", "GMT+1", "+1:00" },
- { "ti", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "British Summer Time", "+1:00" },
- { "ti", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u12A5\\u1295\\u130D\\u120A\\u12DD", "Europe/London" },
- { "ti", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u12A5\\u1295\\u130D\\u120A\\u12DD", "Europe/London" },
+ { "ti", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u130D\\u12DC \\u12AD\\u1228\\u121D\\u1272 \\u1265\\u122A\\u1323\\u1295\\u12EB", "+1:00" },
+ { "ti", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u130D\\u12DC \\u1265\\u122A\\u1323\\u1295\\u12EB", "Europe/London" },
+ { "ti", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u130D\\u12DC \\u1265\\u122A\\u1323\\u1295\\u12EB", "Europe/London" },
{ "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
{ "ti", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "GMT-03:00", "-3:00" },
@@ -3384,8 +3397,8 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "ZZZZ", "GMT+05:30", "+5:30" },
{ "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "z", "GMT+5:30", "+05:30" },
{ "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "zzzz", "GMT+05:30", "+5:30" },
- { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u1205\\u1295\\u12F2", "Alna/Calcutta" },
- { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u1205\\u1295\\u12F2", "Asia/Calcutta" },
+ { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\\u130D\\u12DC \\u1205\\u1295\\u12F2", "Alna/Calcutta" },
+ { "ti", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\\u130D\\u12DC \\u1205\\u1295\\u12F2", "Asia/Calcutta" },
// Ticket#8589 Partial location name to use country name if the zone is the golden
// zone for the time zone's country.
@@ -4491,7 +4504,7 @@ static const UDate TEST_DATE = 1326585600000.; // 2012-jan-15
void DateFormatTest::TestDotAndAtLeniency() {
// Test for date/time parsing regression with CLDR 22.1/ICU 50 pattern strings.
- // For details see http://bugs.icu-project.org/trac/ticket/9789
+ // For details see https://unicode-org.atlassian.net/browse/ICU-9789
static const char *locales[] = { "en", "fr" };
for (int32_t i = 0; i < UPRV_LENGTHOF(locales); ++i) {
Locale locale(locales[i]);
@@ -4563,7 +4576,7 @@ typedef struct {
} TestDateFormatLeniencyItem;
void DateFormatTest::TestDateFormatLeniency() {
- // For details see http://bugs.icu-project.org/trac/ticket/10261
+ // For details see https://unicode-org.atlassian.net/browse/ICU-10261
const UDate july022008 = 1215000001979.0;
const TestDateFormatLeniencyItem items[] = {
@@ -4642,7 +4655,7 @@ typedef struct {
} TestMultiPatternMatchItem;
void DateFormatTest::TestParseMultiPatternMatch() {
- // For details see http://bugs.icu-project.org/trac/ticket/10336
+ // For details see https://unicode-org.atlassian.net/browse/ICU-10336
const TestMultiPatternMatchItem items[] = {
// leniency parse String pattern expected result
{true, UnicodeString("2013-Sep 13"), UnicodeString("yyyy-MMM dd"), UnicodeString("2013-Sep 13")},
@@ -4744,7 +4757,7 @@ void DateFormatTest::TestParseLeniencyAPIs() {
// Set calendar to strict
fmt->setCalendarLenient(FALSE);
- assertFalse("isLeninent after setCalendarLenient(FALSE)", fmt->isLenient());
+ assertFalse("isLenient after setCalendarLenient(FALSE)", fmt->isLenient());
assertFalse("isCalendarLenient after setCalendarLenient(FALSE)", fmt->isCalendarLenient());
assertTrue("ALLOW_WHITESPACE after setCalendarLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
assertTrue("ALLOW_NUMERIC after setCalendarLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
@@ -4752,7 +4765,7 @@ void DateFormatTest::TestParseLeniencyAPIs() {
// Set to strict
fmt->setLenient(FALSE);
- assertFalse("isLeninent after setLenient(FALSE)", fmt->isLenient());
+ assertFalse("isLenient after setLenient(FALSE)", fmt->isLenient());
assertFalse("isCalendarLenient after setLenient(FALSE)", fmt->isCalendarLenient());
assertFalse("ALLOW_WHITESPACE after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
assertFalse("ALLOW_NUMERIC after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
@@ -4763,7 +4776,7 @@ void DateFormatTest::TestParseLeniencyAPIs() {
// Allow white space leniency
fmt->setBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, TRUE, status);
- assertFalse("isLeninent after ALLOW_WHITESPACE/TRUE", fmt->isLenient());
+ assertFalse("isLenient after ALLOW_WHITESPACE/TRUE", fmt->isLenient());
assertFalse("isCalendarLenient after ALLOW_WHITESPACE/TRUE", fmt->isCalendarLenient());
assertTrue("ALLOW_WHITESPACE after ALLOW_WHITESPACE/TRUE", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
assertFalse("ALLOW_NUMERIC after ALLOW_WHITESPACE/TRUE", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
@@ -4836,7 +4849,7 @@ void DateFormatTest::TestNumberFormatOverride() {
assertSuccess("adoptNumberFormat singleOverrideNF", status);
fmt->adoptNumberFormat(overrideNF);
- } else if (fields == (UnicodeString) "Mo"){ // o is invlid field
+ } else if (fields == (UnicodeString) "Mo"){ // o is invalid field
fmt->adoptNumberFormat(fields, overrideNF, status);
if(status == U_INVALID_FORMAT_ERROR) {
status = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
index eef0d224931..2fe94984470 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
@@ -22,7 +22,7 @@
**/
class DateFormatTest: public CalendarTimeZoneTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
/**
* Verify that patterns have the correct values and could produce
@@ -44,7 +44,7 @@ public:
virtual void TestTwoDigitYearDSTParse(void);
public: // package
- // internal utility routine (genrates escape sequences for characters)
+ // internal utility routine (generates escape sequences for characters)
static UnicodeString& escape(UnicodeString& s);
public:
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
index 22a1cb3bcac..dc9a78dbe16 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
@@ -45,25 +45,27 @@
void DateIntervalFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) {
if (exec) logln("TestSuite DateIntervalFormat");
- switch (index) {
- TESTCASE(0, testAPI);
- TESTCASE(1, testFormat);
- TESTCASE(2, testFormatUserDII);
- TESTCASE(3, testSetIntervalPatternNoSideEffect);
- TESTCASE(4, testYearFormats);
- TESTCASE(5, testStress);
- TESTCASE(6, testTicket11583_2);
- TESTCASE(7, testTicket11985);
- TESTCASE(8, testTicket11669);
- TESTCASE(9, testTicket12065);
- TESTCASE(10, testFormattedDateInterval);
- TESTCASE(11, testCreateInstanceForAllLocales);
- TESTCASE(12, testTicket20707);
- TESTCASE(13, testFormatMillisecond);
- TESTCASE(14, testHourMetacharacters);
- TESTCASE(15, testContext);
- default: name = ""; break;
- }
+ TESTCASE_AUTO_BEGIN;
+ TESTCASE_AUTO(testAPI);
+ TESTCASE_AUTO(testFormat);
+ TESTCASE_AUTO(testFormatUserDII);
+ TESTCASE_AUTO(testSetIntervalPatternNoSideEffect);
+ TESTCASE_AUTO(testYearFormats);
+ TESTCASE_AUTO(testStress);
+ TESTCASE_AUTO(testTicket11583_2);
+ TESTCASE_AUTO(testTicket11985);
+ TESTCASE_AUTO(testTicket11669);
+ TESTCASE_AUTO(testTicket12065);
+ TESTCASE_AUTO(testFormattedDateInterval);
+ TESTCASE_AUTO(testCreateInstanceForAllLocales);
+ TESTCASE_AUTO(testTicket20707);
+ TESTCASE_AUTO(testFormatMillisecond);
+ TESTCASE_AUTO(testHourMetacharacters);
+ TESTCASE_AUTO(testContext);
+ TESTCASE_AUTO(testTicket21222GregorianEraDiff);
+ TESTCASE_AUTO(testTicket21222ROCEraDiff);
+ TESTCASE_AUTO(testTicket21222JapaneseEraDiff);
+ TESTCASE_AUTO_END;
}
/**
@@ -78,7 +80,7 @@ void DateIntervalFormatTest::testAPI() {
DateIntervalFormat* dtitvfmt = DateIntervalFormat::createInstance(UDAT_YEAR_MONTH_DAY, status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + default locale) - exitting");
+ dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + default locale) - exiting");
return;
} else {
delete dtitvfmt;
@@ -92,7 +94,7 @@ void DateIntervalFormatTest::testAPI() {
dtitvfmt = DateIntervalFormat::createInstance(UDAT_YEAR_MONTH_DAY, Locale::getJapanese(), status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + locale) - exitting");
+ dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + locale) - exiting");
return;
} else {
delete dtitvfmt;
@@ -110,7 +112,7 @@ void DateIntervalFormatTest::testAPI() {
delete dtitvinf;
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + DateIntervalInfo + default locale) - exitting");
+ dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + DateIntervalInfo + default locale) - exiting");
return;
} else {
delete dtitvfmt;
@@ -127,7 +129,7 @@ void DateIntervalFormatTest::testAPI() {
dtitvfmt = DateIntervalFormat::createInstance("EEEdMMMyhms", Locale::getSimplifiedChinese(), *dtitvinf, status);
delete dtitvinf;
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + DateIntervalInfo + locale) - exitting");
+ dataerrln("ERROR: Could not create DateIntervalFormat (skeleton + DateIntervalInfo + locale) - exiting");
return;
}
// not deleted, test clone
@@ -252,7 +254,7 @@ void DateIntervalFormatTest::testAPI() {
// ====== test constructor/copy constructor and assignment
/* they are protected, no test
- logln("Testing DateIntervalFormat constructor and assigment operator");
+ logln("Testing DateIntervalFormat constructor and assignment operator");
status = U_ZERO_ERROR;
DateFormat* constFmt = dtitvfmt->getDateFormat()->clone();
@@ -261,19 +263,19 @@ void DateIntervalFormatTest::testAPI() {
DateIntervalFormat* dtifmt = new DateIntervalFormat(fmt, inf, status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateIntervalFormat (default) - exitting");
+ dataerrln("ERROR: Could not create DateIntervalFormat (default) - exiting");
return;
}
DateIntervalFormat* dtifmt2 = new(dtifmt);
if ( (*dtifmt) != (*dtifmt2) ) {
- dataerrln("ERROR: Could not create DateIntervalFormat (default) - exitting");
+ dataerrln("ERROR: Could not create DateIntervalFormat (default) - exiting");
return;
}
DateIntervalFormat dtifmt3 = (*dtifmt);
if ( (*dtifmt) != dtifmt3 ) {
- dataerrln("ERROR: Could not create DateIntervalFormat (default) - exitting");
+ dataerrln("ERROR: Could not create DateIntervalFormat (default) - exiting");
return;
}
@@ -291,7 +293,7 @@ void DateIntervalFormatTest::testAPI() {
status = U_ZERO_ERROR;
dtitvfmt->format(formattable, res, pos, status);
if ( status != U_ILLEGAL_ARGUMENT_ERROR ) {
- dataerrln("ERROR: format non-date-interval object should set U_ILLEGAL_ARGUMENT_ERROR - exitting");
+ dataerrln("ERROR: format non-date-interval object should set U_ILLEGAL_ARGUMENT_ERROR - exiting");
return;
}
@@ -302,7 +304,7 @@ void DateIntervalFormatTest::testAPI() {
status = U_ZERO_ERROR;
dtitvfmt->format(formattable, res, pos, status);
if ( U_FAILURE(status) ) {
- dataerrln("ERROR: format date interval failed - exitting");
+ dataerrln("ERROR: format date interval failed - exiting");
return;
}
@@ -314,7 +316,7 @@ void DateIntervalFormatTest::testAPI() {
status = U_ZERO_ERROR;
dtitvfmt->format(*fromCal, *toCal, res, pos, status);
if ( U_FAILURE(status) ) {
- dataerrln("ERROR: format date interval failed - exitting");
+ dataerrln("ERROR: format date interval failed - exiting");
return;
}
delete fromCal;
@@ -326,7 +328,7 @@ void DateIntervalFormatTest::testAPI() {
// TODO: why do I need cast?
((Format*)dtitvfmt)->parseObject(res, fmttable, status);
if ( status != U_INVALID_FORMAT_ERROR ) {
- dataerrln("ERROR: parse should set U_INVALID_FORMAT_ERROR - exitting");
+ dataerrln("ERROR: parse should set U_INVALID_FORMAT_ERROR - exiting");
return;
}
@@ -835,7 +837,7 @@ void DateIntervalFormatTest::testFormat() {
"zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "MMMMy", "2007\\u5e7410\\u6708\\u81f311\\u6708",
- "zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hmv", "2007/10/10\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10 \\u2013 2007/11/10\\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10",
+ "zh", "CE 2007 10 10 10:10:10", "CE 2007 11 10 10:10:10", "hmv", "2007/10/10 \\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10 \\u2013 2007/11/10 \\u6D1B\\u6749\\u77F6\\u65F6\\u95F4 \\u4E0A\\u534810:10",
"zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "EEEEdMMMMy", "2007\\u5e7411\\u670810\\u65e5\\u661f\\u671f\\u516d\\u81f320\\u65e5\\u661f\\u671f\\u4e8c",
@@ -864,9 +866,9 @@ void DateIntervalFormatTest::testFormat() {
"zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "MMM", "11\\u6708", // (fixed expected result per ticket:6626: and others)
- "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hmz", "2007/11/10GMT-8 \\u4e0a\\u534810:10 \\u2013 2007/11/20GMT-8 \\u4e0a\\u534810:10",
+ "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "hmz", "2007/11/10 GMT-8 \\u4e0a\\u534810:10 \\u2013 2007/11/20 GMT-8 \\u4e0a\\u534810:10",
- "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "h", "2007/11/10\\u4e0a\\u534810\\u65f6 \\u2013 2007/11/20\\u4e0a\\u534810\\u65f6",
+ "zh", "CE 2007 11 10 10:10:10", "CE 2007 11 20 10:10:10", "h", "2007/11/10 \\u4e0a\\u534810\\u65f6 \\u2013 2007/11/20 \\u4e0a\\u534810\\u65f6",
"zh", "CE 2007 01 10 10:00:10", "CE 2007 01 10 14:10:10", "EEEEdMMMMy", "2007\\u5e741\\u670810\\u65e5\\u661f\\u671f\\u4e09", // (fixed expected result per ticket:6626:)
@@ -1152,8 +1154,8 @@ void DateIntervalFormatTest::testHourMetacharacters() {
"zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jj", "\\u4E0A\\u534812\\u6642\\u81F31\\u6642",
"zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "\\u4E0A\\u534810\\u6642 \\u2013 \\u4E0B\\u53481\\u6642",
"zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "hB", "\\u51CC\\u666812\\u20131\\u6642",
- "zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CC", "\\u4E0A\\u534810\\u6642 \\u2013 \\u4E0B\\u53481\\u6642",
- "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CC", "\\u51CC\\u666812\\u20131\\u6642",
+ "zh_HK", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "CC", "\\u4E0A\\u534810\\u6642\\u81F3\\u4E0B\\u53481\\u6642",
+ "zh_HK", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "CC", "\\u4E0A\\u534812\\u6642\\u81F31\\u6642",
"hi_IN", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "jj", "10 am \\u2013 1 pm",
"hi_IN", "CE 2010 09 27 00:00:00", "CE 2010 09 27 01:00:00", "jj", "12\\u20131 am",
"hi_IN", "CE 2010 09 27 10:00:00", "CE 2010 09 27 13:00:00", "hB", "\\u0938\\u0941\\u092C\\u0939 10 \\u2013 \\u0926\\u094B\\u092A\\u0939\\u0930 1",
@@ -1726,7 +1728,7 @@ void DateIntervalFormatTest::testTicket11583_2() {
DateInterval interval((UDate) 1232364615000.0, (UDate) 1328787015000.0);
UnicodeString appendTo;
FieldPosition fpos(FieldPosition::DONT_CARE);
- UnicodeString expected("ene. de 2009 \\u2013 feb. de 2012");
+ UnicodeString expected("ene de 2009 \\u2013 feb de 2012");
assertEquals(
"",
expected.unescape(),
@@ -2135,4 +2137,212 @@ void DateIntervalFormatTest::testTicket20707() {
}
}
+void DateIntervalFormatTest::getCategoryAndField(
+ const FormattedDateInterval& formatted,
+ std::vector<int32_t>& categories,
+ std::vector<int32_t>& fields,
+ IcuTestErrorCode& status) {
+ categories.clear();
+ fields.clear();
+ ConstrainedFieldPosition cfpos;
+ while (formatted.nextPosition(cfpos, status)) {
+ categories.push_back(cfpos.getCategory());
+ fields.push_back(cfpos.getField());
+ }
+}
+
+void DateIntervalFormatTest::verifyCategoryAndField(
+ const FormattedDateInterval& formatted,
+ const std::vector<int32_t>& categories,
+ const std::vector<int32_t>& fields,
+ IcuTestErrorCode& status) {
+ ConstrainedFieldPosition cfpos;
+ int32_t i = 0;
+ while (formatted.nextPosition(cfpos, status)) {
+ assertEquals("Category", cfpos.getCategory(), categories[i]);
+ assertEquals("Field", cfpos.getField(), fields[i]);
+ i++;
+ }
+}
+
+void DateIntervalFormatTest::testTicket21222GregorianEraDiff() {
+ IcuTestErrorCode status(*this, "testTicket21222GregorianEraDiff");
+
+ LocalPointer<Calendar> cal(Calendar::createInstance(*TimeZone::getGMT(), status));
+ if (U_FAILURE(status)) {
+ errln("Failure encountered: %s", u_errorName(status));
+ return;
+ }
+ std::vector<int32_t> expectedCategory;
+ std::vector<int32_t> expectedField;
+
+ // Test Gregorian calendar
+ LocalPointer<DateIntervalFormat> g(
+ DateIntervalFormat::createInstance(
+ u"h", Locale("en"), status));
+ if (U_FAILURE(status)) {
+ errln("Failure encountered: %s", u_errorName(status));
+ return;
+ }
+ g->setTimeZone(*(TimeZone::getGMT()));
+ cal->setTime(Calendar::getNow(), status);
+ cal->set(123, UCAL_APRIL, 5, 6, 0);
+ FormattedDateInterval formatted;
+
+ UDate date0123Apr5AD = cal->getTime(status);
+
+ cal->set(UCAL_YEAR, 124);
+ UDate date0124Apr5AD = cal->getTime(status);
+
+ cal->set(UCAL_ERA, 0);
+ UDate date0124Apr5BC = cal->getTime(status);
+
+ cal->set(UCAL_YEAR, 123);
+ UDate date0123Apr5BC = cal->getTime(status);
+
+ DateInterval bothAD(date0123Apr5AD, date0124Apr5AD);
+ DateInterval bothBC(date0124Apr5BC, date0123Apr5BC);
+ DateInterval BCtoAD(date0123Apr5BC, date0124Apr5AD);
+
+ formatted = g->formatToValue(bothAD, status);
+ assertEquals("Gregorian - calendar both dates in AD",
+ u"4/5/123, 6 AM \u2013 4/5/124, 6 AM",
+ formatted.toString(status));
+
+ formatted = g->formatToValue(bothBC, status);
+ assertEquals("Gregorian - calendar both dates in BC",
+ u"4/5/124, 6 AM \u2013 4/5/123, 6 AM",
+ formatted.toString(status));
+
+ formatted = g->formatToValue(BCtoAD, status);
+ assertEquals("Gregorian - BC to AD",
+ u"4/5/123 B, 6 AM \u2013 4/5/124 A, 6 AM",
+ formatted.toString(status));
+}
+
+void DateIntervalFormatTest::testTicket21222ROCEraDiff() {
+ IcuTestErrorCode status(*this, "testTicket21222ROCEraDiff");
+
+ LocalPointer<Calendar> cal(Calendar::createInstance(*TimeZone::getGMT(), status));
+ if (U_FAILURE(status)) {
+ errln("Failure encountered: %s", u_errorName(status));
+ return;
+ }
+ std::vector<int32_t> expectedCategory;
+ std::vector<int32_t> expectedField;
+
+ // Test roc calendar
+ LocalPointer<DateIntervalFormat> roc(
+ DateIntervalFormat::createInstance(
+ u"h", Locale("zh-Hant-TW@calendar=roc"), status));
+ if (U_FAILURE(status)) {
+ errln("Failure encountered: %s", u_errorName(status));
+ return;
+ }
+ roc->setTimeZone(*(TimeZone::getGMT()));
+
+ FormattedDateInterval formatted;
+ // set date1910Jan2 to 1910/1/2 AD which is prior to MG
+ cal->set(1910, UCAL_JANUARY, 2, 6, 0);
+ UDate date1910Jan2 = cal->getTime(status);
+
+ // set date1911Jan2 to 1911/1/2 AD which is also prior to MG
+ cal->set(UCAL_YEAR, 1911);
+ UDate date1911Jan2 = cal->getTime(status);
+
+ // set date1912Jan2 to 1912/1/2 AD which is after MG
+ cal->set(UCAL_YEAR, 1912);
+ UDate date1912Jan2 = cal->getTime(status);
+
+ // set date1913Jan2 to 1913/1/2 AD which is also after MG
+ cal->set(UCAL_YEAR, 1913);
+ UDate date1913Jan2 = cal->getTime(status);
+
+ DateInterval bothBeforeMG(date1910Jan2, date1911Jan2);
+ DateInterval beforeAfterMG(date1911Jan2, date1913Jan2);
+ DateInterval bothAfterMG(date1912Jan2, date1913Jan2);
+
+ formatted = roc->formatToValue(bothAfterMG, status);
+ assertEquals("roc calendar - both dates in MG Era",
+ u"民國1/1/2 上午6時 – 民國2/1/2 上午6時",
+ formatted.toString(status));
+ getCategoryAndField(formatted, expectedCategory,
+ expectedField, status);
+
+ formatted = roc->formatToValue(beforeAfterMG, status);
+ assertEquals("roc calendar - prior MG Era and in MG Era",
+ u"民國前1/1/2 上午6時 – 民國2/1/2 上午6時",
+ formatted.toString(status));
+ verifyCategoryAndField(formatted, expectedCategory, expectedField, status);
+
+ formatted = roc->formatToValue(bothBeforeMG, status);
+ assertEquals("roc calendar - both dates prior MG Era",
+ u"民國前2/1/2 上午6時 – 民國前1/1/2 上午6時",
+ formatted.toString(status));
+ verifyCategoryAndField(formatted, expectedCategory, expectedField, status);
+}
+
+void DateIntervalFormatTest::testTicket21222JapaneseEraDiff() {
+ IcuTestErrorCode status(*this, "testTicket21222JapaneseEraDiff");
+
+ LocalPointer<Calendar> cal(Calendar::createInstance(*TimeZone::getGMT(), status));
+ if (U_FAILURE(status)) {
+ errln("Failure encountered: %s", u_errorName(status));
+ return;
+ }
+ std::vector<int32_t> expectedCategory;
+ std::vector<int32_t> expectedField;
+
+ // Test roc calendar
+ // Test Japanese calendar
+ LocalPointer<DateIntervalFormat> japanese(
+ DateIntervalFormat::createInstance(
+ u"h", Locale("ja@calendar=japanese"), status));
+ if (U_FAILURE(status)) {
+ errln("Failure encountered: %s", u_errorName(status));
+ return;
+ }
+ japanese->setTimeZone(*(TimeZone::getGMT()));
+
+ FormattedDateInterval formatted;
+
+ cal->set(2019, UCAL_MARCH, 2, 6, 0);
+ UDate date2019Mar2 = cal->getTime(status);
+
+ cal->set(UCAL_MONTH, UCAL_APRIL);
+ cal->set(UCAL_DAY_OF_MONTH, 3);
+ UDate date2019Apr3 = cal->getTime(status);
+
+ cal->set(UCAL_MONTH, UCAL_MAY);
+ cal->set(UCAL_DAY_OF_MONTH, 4);
+ UDate date2019May4 = cal->getTime(status);
+
+ cal->set(UCAL_MONTH, UCAL_JUNE);
+ cal->set(UCAL_DAY_OF_MONTH, 5);
+ UDate date2019Jun5 = cal->getTime(status);
+
+ DateInterval bothBeforeReiwa(date2019Mar2, date2019Apr3);
+ DateInterval beforeAfterReiwa(date2019Mar2, date2019May4);
+ DateInterval bothAfterReiwa(date2019May4, date2019Jun5);
+
+ formatted = japanese->formatToValue(bothAfterReiwa, status);
+ assertEquals("japanese calendar - both dates in Reiwa",
+ u"R1/5/4 午前6時~R1/6/5 午前6時",
+ formatted.toString(status));
+ getCategoryAndField(formatted, expectedCategory,
+ expectedField, status);
+
+ formatted = japanese->formatToValue(bothBeforeReiwa, status);
+ assertEquals("japanese calendar - both dates before Reiwa",
+ u"H31/3/2 午前6時~H31/4/3 午前6時",
+ formatted.toString(status));
+ verifyCategoryAndField(formatted, expectedCategory, expectedField, status);
+
+ formatted = japanese->formatToValue(beforeAfterReiwa, status);
+ assertEquals("japanese calendar - date before and in Reiwa",
+ u"H31/3/2 午前6時~R1/5/4 午前6時",
+ formatted.toString(status));
+ verifyCategoryAndField(formatted, expectedCategory, expectedField, status);
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
index 700eb4fb9e1..428b209a095 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
@@ -17,11 +17,15 @@
#include "intltest.h"
#include "itformat.h"
+U_NAMESPACE_BEGIN
+class FormattedDateInterval;
+U_NAMESPACE_END
+
/**
* Test basic functionality of various API functions
**/
class DateIntervalFormatTest: public IntlTestWithFieldPosition {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
public:
/**
@@ -81,6 +85,9 @@ public:
void testCreateInstanceForAllLocales();
void testTicket20707();
+ void testTicket21222GregorianEraDiff();
+ void testTicket21222ROCEraDiff();
+ void testTicket21222JapaneseEraDiff();
private:
/**
@@ -99,6 +106,19 @@ private:
*/
void stress(const char** data, int32_t data_length, const Locale& loc,
const char* locName);
+
+ void getCategoryAndField(
+ const FormattedDateInterval& formatted,
+ std::vector<int32_t>& categories,
+ std::vector<int32_t>& fields,
+ IcuTestErrorCode& status);
+
+ void verifyCategoryAndField(
+ const FormattedDateInterval& formatted,
+ const std::vector<int32_t>& categories,
+ const std::vector<int32_t>& fields,
+ IcuTestErrorCode& status);
+
};
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
index faa850aa838..6fe8af05b60 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
@@ -45,6 +45,7 @@ void IntlTestDateTimePatternGeneratorAPI::runIndexedTest( int32_t index, UBool e
TESTCASE(9, testFallbackWithDefaultRootLocale);
TESTCASE(10, testGetDefaultHourCycle_OnEmptyInstance);
TESTCASE(11, test_jConsistencyOddLocales);
+ TESTCASE(12, testBestPattern);
default: name = ""; break;
}
}
@@ -252,13 +253,13 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
CharsToUnicodeString("1999\\u5E74\\u7B2C1\\u5B63\\u5EA6"), // 07: yQQQ
CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm
UnicodeString("23:58"), // 09: HHmm
- CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm
+ CharsToUnicodeString("23:58"), // 10: jjmm
UnicodeString("58:59"), // 11: mmss
CharsToUnicodeString("1999\\u5E741\\u6708"), // 12: yyyyMMMM -> yyyy\u5E74MMM
CharsToUnicodeString("1\\u670813\\u65E5\\u5468\\u4E09"), // 13: MMMEd -> MMMd\u65E5EEE
CharsToUnicodeString("13\\u65E5\\u5468\\u4E09"), // 14: Ed -> d\u65E5EEE
- CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSSS -> "ah:mm:ss.SSS"
- UnicodeString("11:58"), // 16: JJmm
+ CharsToUnicodeString("23:58:59.123"), // 15: jmmssSSS -> "ah:mm:ss.SSS"
+ UnicodeString("23:58"), // 16: JJmm
};
UnicodeString patternResults_zh_TW_roc[] = {
@@ -315,13 +316,13 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
CharsToUnicodeString("1998\\u620A\\u5BC5\\u5E74\\u7b2c\\u56db\\u5B63\\u5EA6"), // 07: yQQQ
CharsToUnicodeString("\\u4E0B\\u534811:58"), // 08: hhmm
UnicodeString("23:58"), // 09: HHmm
- CharsToUnicodeString("\\u4E0B\\u534811:58"), // 10: jjmm
+ CharsToUnicodeString("23:58"), // 10: jjmm
UnicodeString("58:59"), // 11: mmss
CharsToUnicodeString("1998\\u620A\\u5BC5\\u5E74\\u5341\\u4E00\\u6708"), // 12: yyyyMMMM
CharsToUnicodeString("\\u5341\\u4E00\\u670826\\u65E5\\u5468\\u4E09"), // 13: MMMEd
CharsToUnicodeString("26\\u65E5\\u5468\\u4E09"), // 14: Ed -> d\u65E5EEE
- CharsToUnicodeString("\\u4E0B\\u534811:58:59.123"), // 15: jmmssSS
- UnicodeString("11:58"), // 16: JJmm
+ CharsToUnicodeString("23:58:59.123"), // 15: jmmssSS
+ UnicodeString("23:58"), // 16: JJmm
};
UnicodeString patternResults_ja_jp_traditional[] = {
@@ -444,7 +445,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
DateTimePatternGenerator *instFromDefaultLocale=DateTimePatternGenerator::createInstance(status);
if (U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateTimePatternGenerator (default) - exitting");
+ dataerrln("ERROR: Could not create DateTimePatternGenerator (default) - exiting");
return;
}
else {
@@ -456,7 +457,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
status = U_ZERO_ERROR;
DateTimePatternGenerator *instFromLocale=DateTimePatternGenerator::createInstance(Locale::getFrench(), status);
if (U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getFrench()) - exitting");
+ dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getFrench()) - exiting");
return;
}
@@ -492,7 +493,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
UDate sampleDate=LocaleTest::date(99, 9, 13, 23, 58, 59);
DateTimePatternGenerator *gen = DateTimePatternGenerator::createInstance(deLocale, status);
if (U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getGermany()) - exitting");
+ dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getGermany()) - exiting");
return;
}
UnicodeString findPattern = gen->getBestPattern(UnicodeString("MMMddHmm"), status);
@@ -701,7 +702,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
logln("\n\n Locale: %s_%s_%s@%s", testLocale[localeIndex][0], testLocale[localeIndex][1], testLocale[localeIndex][2], testLocale[localeIndex][3]);
DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(loc, status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateTimePatternGenerator with locale index:%d . - exitting\n", localeIndex);
+ dataerrln("ERROR: Could not create DateTimePatternGenerator with locale index:%d . - exiting\n", localeIndex);
return;
}
while (patternData[dataIndex].length() > 0) {
@@ -739,7 +740,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
logln("\n\n Test various skeletons for English locale...");
DateTimePatternGenerator *patGen=DateTimePatternGenerator::createInstance(Locale::getEnglish(), status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateTimePatternGenerator with locale English . - exitting\n");
+ dataerrln("ERROR: Could not create DateTimePatternGenerator with locale English . - exiting\n");
return;
}
TimeZone *enZone = TimeZone::createTimeZone(UnicodeString("ECT/GMT"));
@@ -776,7 +777,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
// ======= Test random skeleton
DateTimePatternGenerator *randDTGen= DateTimePatternGenerator::createInstance(status);
if (U_FAILURE(status)) {
- dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getFrench()) - exitting");
+ dataerrln("ERROR: Could not create DateTimePatternGenerator (Locale::getFrench()) - exiting");
return;
}
UChar newChar;
@@ -811,7 +812,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
test = DateTimePatternGenerator::createEmptyInstance(status);
if(U_FAILURE(status)) {
- errln("ERROR: Fail to create an empty instance ! - exitting.\n");
+ errln("ERROR: Fail to create an empty instance ! - exiting.\n");
delete test;
return;
}
@@ -949,8 +950,8 @@ void IntlTestDateTimePatternGeneratorAPI::testOptions(/*char *par*/)
{ "en@calendar=chinese", "Gy", "r(U)", UDATPG_MATCH_NO_OPTIONS },
{ "en@calendar=chinese", "GU", "r(U)", UDATPG_MATCH_NO_OPTIONS },
{ "en@calendar=chinese", "ULLL", "MMM U", UDATPG_MATCH_NO_OPTIONS },
- { "en@calendar=chinese", "yMMM", "MMM r(U)", UDATPG_MATCH_NO_OPTIONS },
- { "en@calendar=chinese", "GUMMM", "MMM r(U)", UDATPG_MATCH_NO_OPTIONS },
+ { "en@calendar=chinese", "yMMM", "MMM r", UDATPG_MATCH_NO_OPTIONS },
+ { "en@calendar=chinese", "GUMMM", "MMM r", UDATPG_MATCH_NO_OPTIONS },
{ "zh@calendar=chinese", "yyyy", "rU\\u5E74", UDATPG_MATCH_NO_OPTIONS },
{ "zh@calendar=chinese", "YYYY", "YY\\u5E74", UDATPG_MATCH_NO_OPTIONS }, // not a good result, may want r(Y) or r(U)
{ "zh@calendar=chinese", "U", "rU\\u5E74", UDATPG_MATCH_NO_OPTIONS },
@@ -1159,12 +1160,12 @@ void IntlTestDateTimePatternGeneratorAPI::testStaticGetSkeleton(/*char *par*/)
void IntlTestDateTimePatternGeneratorAPI::testC() {
const char* tests[][3] = {
// These may change with actual data for Bhmm/bhmm skeletons
- {"zh", "Cm", "Bh:mm"},
- {"zh", "CCm", "Bhh:mm"},
- {"zh", "CCCm", "BBBBh:mm"},
- {"zh", "CCCCm", "BBBBhh:mm"},
- {"zh", "CCCCCm", "BBBBBh:mm"},
- {"zh", "CCCCCCm", "BBBBBhh:mm"},
+ {"zh-TW", "Cm", "Bh:mm"},
+ {"zh-TW", "CCm", "Bhh:mm"},
+ {"zh-TW", "CCCm", "BBBBh:mm"},
+ {"zh-TW", "CCCCm", "BBBBhh:mm"},
+ {"zh-TW", "CCCCCm", "BBBBBh:mm"},
+ {"zh-TW", "CCCCCCm", "BBBBBhh:mm"},
{"de", "Cm", "HH:mm"},
{"de", "CCm", "HH:mm"},
{"de", "CCCm", "HH:mm"},
@@ -1486,7 +1487,7 @@ void IntlTestDateTimePatternGeneratorAPI::testFallbackWithDefaultRootLocale() {
}
}
-// ICU-21000 Ensure that calling getDefaultHourCycle on an empty instance doesn't call UPRV_UNREACHABLE/abort.
+// ICU-21000 Ensure that calling getDefaultHourCycle on an empty instance doesn't call UPRV_UNREACHABLE_EXIT/abort.
void IntlTestDateTimePatternGeneratorAPI::testGetDefaultHourCycle_OnEmptyInstance() {
UErrorCode status = U_ZERO_ERROR;
@@ -1557,4 +1558,77 @@ void IntlTestDateTimePatternGeneratorAPI::test_jConsistencyOddLocales() { // ICU
}
}
+void IntlTestDateTimePatternGeneratorAPI::testBestPattern() {
+ // generic test for DateTimePatternGenerator::getBestPattern() that can be used to test multiple
+ // bugs in the resource data
+ const struct TestCase {
+ const char* localeID;
+ const char* skeleton;
+ const UChar* expectedPattern;
+ } testCases[] = {
+ // ICU-21650: (See the "week day" section of https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
+ // for a full explanation of why this is the desired behavior)
+ // if the user asks for E, the minimum field length is 3, but if he asks for c or e, it's 1
+ { "en_US", "E", u"ccc" },
+ { "en_US", "c", u"c" },
+ { "en_US", "e", u"c" },
+ { "en_US", "EE", u"ccc" },
+ { "en_US", "cc", u"cc" },
+ { "en_US", "ee", u"cc" },
+ { "en_US", "EEE", u"ccc" },
+ { "en_US", "ccc", u"ccc" },
+ { "en_US", "eee", u"ccc" },
+ // and if the user asked for c or e and the field length is 1 or 2, the output pattern should contain
+ // e instead of E (e supports numeric abbreviations; E doesn't)
+ { "en_US", "yMEd", u"EEE, M/d/y" },
+ { "en_US", "yMcd", u"e, M/d/y" },
+ { "en_US", "yMed", u"e, M/d/y" },
+ { "en_US", "yMMEEdd", u"EEE, MM/dd/y" },
+ { "en_US", "yMMccdd", u"ee, MM/dd/y" },
+ { "en_US", "yMMeedd", u"ee, MM/dd/y" },
+ { "en_US", "yMMMEd", u"EEE, MMM d, y" },
+ { "en_US", "yMMMcccd", u"EEE, MMM d, y" },
+ { "en_US", "yMMMeeed", u"EEE, MMM d, y" },
+ { "en_US", "yMMMMEEEEd", u"EEEE, MMMM d, y" },
+ { "en_US", "yMMMMccccd", u"EEEE, MMMM d, y" },
+ { "en_US", "yMMMMeeeed", u"EEEE, MMMM d, y" },
+ // ICU-21428: Bad patterns for nonstandard calendars
+ { "en_GB", "yMd", u"dd/MM/y" },
+ { "en_GB@calendar=coptic", "yMd", u"dd/MM/y GGGGG" },
+ { "en_GB@calendar=japanese", "yMd", u"dd/MM/y GGGGG" },
+ { "en_GB@calendar=buddhist", "yMd", u"dd/MM/y GGGGG" },
+ // ICU-20992: Bad patterns for missing fields
+ { "ckb_IR", "mmSSS", u"mm:ss\u066bSSS" },
+ { "ckb_IR", "BSSS", u"SSS \u251c'Dayperiod': B\u2524" },
+ };
+
+ for (int32_t i = 0; i < UPRV_LENGTHOF(testCases); i++) {
+ UErrorCode err = U_ZERO_ERROR;
+ UnicodeString actualPattern;
+
+ if (uprv_strcmp(testCases[i].skeleton, "full") != 0) {
+ LocalPointer<DateTimePatternGenerator> dtpg(DateTimePatternGenerator::createInstance(testCases[i].localeID, err), err);
+ actualPattern = dtpg->getBestPattern(UnicodeString(testCases[i].skeleton), err);
+ } else {
+ LocalPointer<DateFormat> df(DateFormat::createDateInstance(DateFormat::kFull, testCases[i].localeID));
+ SimpleDateFormat* sdf = dynamic_cast<SimpleDateFormat*>(df.getAlias());
+
+ if (sdf != NULL) {
+ sdf->toPattern(actualPattern);
+ }
+ }
+
+ if (U_FAILURE(err)) {
+ errln("Failure for test case %s/%s: %s", testCases[i].localeID, testCases[i].skeleton, u_errorName(err));
+ } else {
+ char failureMessage[100];
+ strcpy(failureMessage, "Wrong result for test case ");
+ strcat(failureMessage, testCases[i].localeID);
+ strcat(failureMessage, "/");
+ strcat(failureMessage, testCases[i].skeleton);
+ assertEquals(failureMessage, testCases[i].expectedPattern, actualPattern);
+ }
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
index b3fb02e2bd2..4650fd7fcf6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
@@ -19,7 +19,7 @@
* Test basic functionality of various API functions
**/
class IntlTestDateTimePatternGeneratorAPI : public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
@@ -37,6 +37,7 @@ private:
void testFallbackWithDefaultRootLocale();
void testGetDefaultHourCycle_OnEmptyInstance();
void test_jConsistencyOddLocales();
+ void testBestPattern();
};
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/encoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/encoll.h
index cc794fb5ba9..0b4d3f495ae 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/encoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/encoll.h
@@ -30,7 +30,7 @@ public:
CollationEnglishTest();
virtual ~CollationEnglishTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// performs test with strength PRIMARY
void TestPrimary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/erarulestest.h b/Build/source/libs/icu/icu-src/source/test/intltest/erarulestest.h
index 28116af198d..f8eb7c24277 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/erarulestest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/erarulestest.h
@@ -12,7 +12,7 @@
class EraRulesTest : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL) override;
private:
void testAPIs();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/escoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/escoll.h
index 88a83072784..b2885636aa9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/escoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/escoll.h
@@ -30,7 +30,7 @@ public:
CollationSpanishTest();
virtual ~CollationSpanishTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// performs tests with strength PRIMARY
void TestPrimary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.h
index 103441351da..1346e45b21b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.h
@@ -29,7 +29,7 @@ public:
CollationFinnishTest();
virtual ~CollationFinnishTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// perform tests with strength PRIMARY
void TestPrimary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/fldset.h b/Build/source/libs/icu/icu-src/source/test/intltest/fldset.h
index e6e6ee0c6d0..49d14791b3a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/fldset.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/fldset.h
@@ -48,7 +48,7 @@ class FieldsSet {
public:
/**
- * Compare two sets. In typical test usage, 'this' is the resul of
+ * Compare two sets. In typical test usage, 'this' is the result of
* a tested operation, and 'other' is the predefined expected value.
*
* @param other the set to compare against.
@@ -255,7 +255,7 @@ protected:
void handleParseValue(const FieldsSet* inheritFrom,
int32_t field,
const U_NAMESPACE_QUALIFIER UnicodeString& substr,
- UErrorCode& status);
+ UErrorCode& status) override;
};
/**
@@ -282,11 +282,11 @@ class DateTimeStyleSet : public FieldsSet {
void handleParseValue(const FieldsSet* inheritFrom,
int32_t field,
const U_NAMESPACE_QUALIFIER UnicodeString& substr,
- UErrorCode& status);
+ UErrorCode& status) override;
int32_t handleParseName(const FieldsSet* inheritFrom,
const U_NAMESPACE_QUALIFIER UnicodeString& name,
const U_NAMESPACE_QUALIFIER UnicodeString& substr,
- UErrorCode& status);
+ UErrorCode& status) override;
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp
index 18f56d392dc..45721a320ac 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/formatted_string_builder_test.cpp
@@ -23,7 +23,7 @@ class FormattedStringBuilderTest : public IntlTest {
void testUnlimitedCapacity();
void testCodePoints();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
void assertEqualsImpl(const UnicodeString &a, const FormattedStringBuilder &b);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp
index 0edf4208673..d784f353ef3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/formattedvaluetest.cpp
@@ -16,7 +16,7 @@
class FormattedValueTest : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void testBasic();
void testSetters();
@@ -242,7 +242,7 @@ void IntlTestWithFieldPosition::checkMixedFormattedValue(
// Check nextPosition constrained over each category one at a time
for (int32_t category=0; category<UFIELD_CATEGORY_COUNT+1; category++) {
- if (category == UFIELD_CATEGORY_COUNT+1) {
+ if (category == UFIELD_CATEGORY_COUNT) {
category = UFIELD_CATEGORY_LIST_SPAN;
}
cfpos.reset();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.h
index 4cf19f10304..3299b991353 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.h
@@ -28,7 +28,7 @@ public:
CollationFrenchTest();
virtual ~CollationFrenchTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// perform tests with strength SECONDARY
void TestSecondary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.h b/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.h
index 9337aebcbf8..ade87247aee 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.h
@@ -52,7 +52,7 @@ public:
G7CollationTest() {}
virtual ~G7CollationTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// perform test for G7 locales
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/genderinfotest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/genderinfotest.cpp
index a4b9b7bf1ee..d62debbead2 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/genderinfotest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/genderinfotest.cpp
@@ -36,7 +36,7 @@ public:
GenderInfoTest() {
}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void TestGetListGender();
void TestFallback();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.cpp
index fb6fef188e1..aa2d9ca05ce 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.cpp
@@ -27,12 +27,12 @@ class WrongListener : public EventListener {
class ICUNSubclass : public ICUNotifier {
public:
- UBool acceptsListener(const EventListener& /*l*/) const {
+ UBool acceptsListener(const EventListener& /*l*/) const override {
return TRUE;
// return l instanceof MyListener;
}
- virtual void notifyListener(EventListener& /*l*/) const {
+ virtual void notifyListener(EventListener& /*l*/) const override {
}
};
@@ -57,7 +57,7 @@ class LKFSubclass : public LocaleKeyFactory {
}
protected:
- virtual const Hashtable* getSupportedIDs(UErrorCode &/*status*/) const {
+ virtual const Hashtable* getSupportedIDs(UErrorCode &/*status*/) const override {
return &table;
}
};
@@ -82,11 +82,11 @@ class Integer : public UObject {
return (UClassID)&fgClassID;
}
- virtual UClassID getDynamicClassID() const {
+ virtual UClassID getDynamicClassID() const override {
return getStaticClassID();
}
- virtual UBool operator==(const UObject& other) const
+ virtual bool operator==(const UObject& other) const
{
return typeid(*this) == typeid(other) &&
_val == ((Integer&)other)._val;
@@ -113,11 +113,11 @@ const char Integer::fgClassID = '\0';
// use locale keys
class TestIntegerService : public ICUService {
public:
- ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const {
+ ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const override {
return LocaleKey::createWithCanonicalFallback(id, NULL, status); // no fallback locale
}
- virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& status)
+ virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& status) override
{
Integer* i;
if (U_SUCCESS(status) && obj && (i = dynamic_cast<Integer*>(obj)) != NULL) {
@@ -126,7 +126,7 @@ class TestIntegerService : public ICUService {
return NULL;
}
- virtual UObject* cloneInstance(UObject* instance) const {
+ virtual UObject* cloneInstance(UObject* instance) const override {
return instance ? new Integer(*(Integer*)instance) : NULL;
}
};
@@ -478,7 +478,7 @@ ICUServiceTest::testAPI_One()
class TestStringSimpleKeyService : public ICUService {
public:
- virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& status)
+ virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& status) override
{
// We could put this type check into ICUService itself, but we'd still
// have to implement cloneInstance. Otherwise we could just tell the service
@@ -490,18 +490,18 @@ public:
return NULL;
}
- virtual UObject* cloneInstance(UObject* instance) const {
+ virtual UObject* cloneInstance(UObject* instance) const override {
return instance ? new UnicodeString(*(UnicodeString*)instance) : NULL;
}
};
class TestStringService : public ICUService {
public:
- ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const {
+ ICUServiceKey* createKey(const UnicodeString* id, UErrorCode& status) const override {
return LocaleKey::createWithCanonicalFallback(id, NULL, status); // no fallback locale
}
- virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& /* status */)
+ virtual ICUServiceFactory* createSimpleFactory(UObject* obj, const UnicodeString& id, UBool visible, UErrorCode& /* status */) override
{
UnicodeString* s;
if (obj && (s = dynamic_cast<UnicodeString*>(obj)) != NULL) {
@@ -510,7 +510,7 @@ class TestStringService : public ICUService {
return NULL;
}
- virtual UObject* cloneInstance(UObject* instance) const {
+ virtual UObject* cloneInstance(UObject* instance) const override {
return instance ? new UnicodeString(*(UnicodeString*)instance) : NULL;
}
};
@@ -519,15 +519,15 @@ class TestStringService : public ICUService {
class AnonymousStringFactory : public ICUServiceFactory
{
public:
- virtual UObject* create(const ICUServiceKey& key, const ICUService* /* service */, UErrorCode& /* status */) const {
+ virtual UObject* create(const ICUServiceKey& key, const ICUService* /* service */, UErrorCode& /* status */) const override {
return new UnicodeString(key.getID());
}
- virtual void updateVisibleIDs(Hashtable& /*result*/, UErrorCode& /*status*/) const {
+ virtual void updateVisibleIDs(Hashtable& /*result*/, UErrorCode& /*status*/) const override {
// do nothing
}
- virtual UnicodeString& getDisplayName(const UnicodeString& /*id*/, const Locale& /*locale*/, UnicodeString& result) const {
+ virtual UnicodeString& getDisplayName(const UnicodeString& /*id*/, const Locale& /*locale*/, UnicodeString& result) const override {
// do nothing
return result;
}
@@ -536,7 +536,7 @@ class AnonymousStringFactory : public ICUServiceFactory
return (UClassID)&fgClassID;
}
- virtual UClassID getDynamicClassID() const {
+ virtual UClassID getDynamicClassID() const override {
return getStaticClassID();
}
@@ -558,14 +558,14 @@ class TestMultipleKeyStringFactory : public ICUServiceFactory {
, _factoryID(factoryID + ": ")
{
for (int i = 0; i < count; ++i) {
- _ids.addElement(new UnicodeString(ids[i]), _status);
+ _ids.addElementX(new UnicodeString(ids[i]), _status);
}
}
~TestMultipleKeyStringFactory() {
}
- UObject* create(const ICUServiceKey& key, const ICUService* /* service */, UErrorCode& status) const {
+ UObject* create(const ICUServiceKey& key, const ICUService* /* service */, UErrorCode& status) const override {
if (U_FAILURE(status)) {
return NULL;
}
@@ -581,7 +581,7 @@ class TestMultipleKeyStringFactory : public ICUServiceFactory {
return NULL;
}
- void updateVisibleIDs(Hashtable& result, UErrorCode& status) const {
+ void updateVisibleIDs(Hashtable& result, UErrorCode& status) const override {
if (U_SUCCESS(_status)) {
for (int32_t i = 0; i < _ids.size(); ++i) {
result.put(*(UnicodeString*)_ids[i], (void*)this, status);
@@ -589,7 +589,7 @@ class TestMultipleKeyStringFactory : public ICUServiceFactory {
}
}
- UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const {
+ UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const override {
if (U_SUCCESS(_status) && _ids.contains((void*)&id)) {
char buffer[128];
UErrorCode status = U_ZERO_ERROR;
@@ -612,7 +612,7 @@ class TestMultipleKeyStringFactory : public ICUServiceFactory {
return (UClassID)&fgClassID;
}
- virtual UClassID getDynamicClassID() const {
+ virtual UClassID getDynamicClassID() const override {
return getStaticClassID();
}
@@ -833,7 +833,7 @@ class CalifornioLanguageFactory : public ICUResourceBundleFactory
supportedIDs = NULL;
}
- const Hashtable* getSupportedIDs(UErrorCode& status) const
+ const Hashtable* getSupportedIDs(UErrorCode& status) const override
{
if (supportedIDs == NULL) {
Hashtable* table = new Hashtable();
@@ -848,7 +848,7 @@ class CalifornioLanguageFactory : public ICUResourceBundleFactory
return supportedIDs;
}
- UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const
+ UnicodeString& getDisplayName(const UnicodeString& id, const Locale& locale, UnicodeString& result) const override
{
UnicodeString prefix = "";
UnicodeString suffix = "";
@@ -958,7 +958,7 @@ class SimpleListener : public ServiceListener {
public:
SimpleListener(ICUServiceTest* test, const UnicodeString& name) : _test(test), _name(name) {}
- virtual void serviceChanged(const ICUService& service) const {
+ virtual void serviceChanged(const ICUService& service) const override {
UnicodeString serviceName = "listener ";
serviceName.append(_name);
serviceName.append(" n++");
@@ -1030,7 +1030,7 @@ public void serviceChanged(ICUService s) {
class TestStringLocaleService : public ICULocaleService {
public:
- virtual UObject* cloneInstance(UObject* instance) const {
+ virtual UObject* cloneInstance(UObject* instance) const override {
return instance ? new UnicodeString(*(UnicodeString*)instance) : NULL;
}
};
@@ -1228,7 +1228,7 @@ class WrapFactory : public ICUServiceFactory {
greetingID = NULL;
}
- UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const {
+ UObject* create(const ICUServiceKey& key, const ICUService* service, UErrorCode& status) const override {
if (U_SUCCESS(status)) {
UnicodeString temp;
if (key.currentID(temp).compare(getGreetingID()) == 0) {
@@ -1243,13 +1243,13 @@ class WrapFactory : public ICUServiceFactory {
return NULL;
}
- void updateVisibleIDs(Hashtable& result, UErrorCode& status) const {
+ void updateVisibleIDs(Hashtable& result, UErrorCode& status) const override {
if (U_SUCCESS(status)) {
result.put("greeting", (void*)this, status);
}
}
- UnicodeString& getDisplayName(const UnicodeString& id, const Locale& /* locale */, UnicodeString& result) const {
+ UnicodeString& getDisplayName(const UnicodeString& id, const Locale& /* locale */, UnicodeString& result) const override {
result.append("wrap '");
result.append(id);
result.append("'");
@@ -1263,7 +1263,7 @@ class WrapFactory : public ICUServiceFactory {
return (UClassID)&fgClassID;
}
- virtual UClassID getDynamicClassID() const {
+ virtual UClassID getDynamicClassID() const override {
return getStaticClassID();
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.h b/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.h
index 67d6dd07344..1be6fa41fa7 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.h
@@ -26,7 +26,7 @@ class ICUServiceTest : public IntlTest
ICUServiceTest();
virtual ~ICUServiceTest();
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL) override;
void testAPI_One(void);
void testAPI_Two(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.cpp
index cc8d89a9426..3b5c490883f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.cpp
@@ -24,6 +24,7 @@
#include "unicode/uidna.h"
#include "unicode/utf16.h"
#include "idnaconf.h"
+#include "charstr.h"
static const UChar C_TAG[] = {0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0}; // =====
static const UChar C_NAMEZONE[] = {0x6E, 0x61, 0x6D, 0x65, 0x7A, 0x6F, 0x6E, 0x65, 0}; // namezone
@@ -55,82 +56,6 @@ IdnaConfTest::~IdnaConfTest(){
}
#if !UCONFIG_NO_IDNA
-/* this function is modified from RBBITest::ReadAndConvertFile()
- *
- */
-UBool IdnaConfTest::ReadAndConvertFile(){
-
- char * source = NULL;
- size_t source_len;
-
- // read the test data file to memory
- FILE* f = NULL;
- UErrorCode status = U_ZERO_ERROR;
-
- const char *path = IntlTest::getSourceTestData(status);
- if (U_FAILURE(status)) {
- errln("%s", u_errorName(status));
- return FALSE;
- }
-
- const char* name = "idna_conf.txt"; // test data file
- int t = static_cast<int>(strlen(path) + strlen(name) + 1);
- char* absolute_name = new char[t];
- strcpy(absolute_name, path);
- strcat(absolute_name, name);
- f = fopen(absolute_name, "rb");
- delete [] absolute_name;
-
- if (f == NULL){
- dataerrln("fopen error on %s", name);
- return FALSE;
- }
-
- fseek( f, 0, SEEK_END);
- if ((source_len = ftell(f)) <= 0){
- errln("Error reading test data file.");
- fclose(f);
- return FALSE;
- }
-
- source = new char[source_len];
- fseek(f, 0, SEEK_SET);
- if (fread(source, 1, source_len, f) != source_len) {
- errln("Error reading test data file.");
- delete [] source;
- fclose(f);
- return FALSE;
- }
- fclose(f);
-
- // convert the UTF-8 encoded stream to UTF-16 stream
- UConverter* conv = ucnv_open("utf-8", &status);
- int dest_len = ucnv_toUChars(conv,
- NULL, // dest,
- 0, // destCapacity,
- source,
- static_cast<int32_t>(source_len),
- &status);
- if (status == U_BUFFER_OVERFLOW_ERROR) {
- // Buffer Overflow is expected from the preflight operation.
- status = U_ZERO_ERROR;
- UChar * dest = NULL;
- dest = new UChar[ dest_len + 1];
- ucnv_toUChars(conv, dest, dest_len + 1, source, static_cast<int32_t>(source_len), &status);
- // Do not know the "if possible" behavior of ucnv_toUChars()
- // Do it by ourself.
- dest[dest_len] = 0;
- len = dest_len;
- base = dest;
- delete [] source;
- ucnv_close(conv);
- return TRUE; // The buffer will owned by caller.
- }
- errln("UConverter error: %s", u_errorName(status));
- delete [] source;
- ucnv_close(conv);
- return FALSE;
-}
int IdnaConfTest::isNewlineMark(){
static const UChar LF = 0x0a;
@@ -280,7 +205,18 @@ void IdnaConfTest::Call(){
}
void IdnaConfTest::Test(void){
- if (!ReadAndConvertFile())return;
+ UErrorCode status = U_ZERO_ERROR;
+ //
+ // Open and read the test data file.
+ //
+ const char *testDataDirectory = IntlTest::getSourceTestData(status);
+ CharString testFileName(testDataDirectory, -1, status);
+ testFileName.append("idna_conf.txt", -1, status);
+
+ base = ReadAndConvertFile(testFileName.data(), len, "UTF-8", status);
+ if (U_FAILURE(status)) {
+ return;
+ }
UnicodeString s;
UnicodeString key;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.h b/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.h
index 956cea6943d..3c940ac1c52 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.h
@@ -21,7 +21,7 @@
class IdnaConfTest: public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
IdnaConfTest();
virtual ~IdnaConfTest();
private:
@@ -32,7 +32,6 @@ private:
int len ;
int curOffset;
- UBool ReadAndConvertFile();
int isNewlineMark();
UBool ReadOneLine(UnicodeString&);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.h b/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.h
index 5b74ff21592..7c940a9d88b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.h
@@ -47,10 +47,10 @@
* If TRUE unassigned values are treated as normal Unicode code points.
* If FALSE the operation fails with U_UNASSIGNED_CODE_POINT_FOUND error code.
* - idnaref_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions
- * If TRUE and the input does not statisfy STD3 rules, the operation
+ * If TRUE and the input does not satisfy STD3 rules, the operation
* will fail with U_IDNA_STD3_ASCII_RULES_ERROR
*
- * @param parseError Pointer to UParseError struct to recieve information on position
+ * @param parseError Pointer to UParseError struct to receive information on position
* of error if an error is encountered. Can be NULL.
* @param status ICU in/out error code parameter.
* U_INVALID_CHAR_FOUND if src contains
@@ -85,10 +85,10 @@ idnaref_toASCII(const UChar* src, int32_t srcLength,
* If TRUE unassigned values are treated as normal Unicode code points.
* If FALSE the operation fails with U_UNASSIGNED_CODE_POINT_FOUND error code.
* - idnaref_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions
- * If TRUE and the input does not statisfy STD3 rules, the operation
+ * If TRUE and the input does not satisfy STD3 rules, the operation
* will fail with U_IDNA_STD3_ASCII_RULES_ERROR
*
- * @param parseError Pointer to UParseError struct to recieve information on position
+ * @param parseError Pointer to UParseError struct to receive information on position
* of error if an error is encountered. Can be NULL.
* @param status ICU in/out error code parameter.
* U_INVALID_CHAR_FOUND if src contains
@@ -128,10 +128,10 @@ idnaref_toUnicode(const UChar* src, int32_t srcLength,
* If TRUE unassigned values are treated as normal Unicode code points.
* If FALSE the operation fails with U_UNASSIGNED_CODE_POINT_FOUND error code.
* - idnaref_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions
- * If TRUE and the input does not statisfy STD3 rules, the operation
+ * If TRUE and the input does not satisfy STD3 rules, the operation
* will fail with U_IDNA_STD3_ASCII_RULES_ERROR
*
- * @param parseError Pointer to UParseError struct to recieve information on position
+ * @param parseError Pointer to UParseError struct to receive information on position
* of error if an error is encountered. Can be NULL.
* @param status ICU in/out error code parameter.
* U_INVALID_CHAR_FOUND if src contains
@@ -167,10 +167,10 @@ idnaref_IDNToASCII( const UChar* src, int32_t srcLength,
* If TRUE unassigned values are treated as normal Unicode code points.
* If FALSE the operation fails with U_UNASSIGNED_CODE_POINT_FOUND error code.
* - idnaref_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions
- * If TRUE and the input does not statisfy STD3 rules, the operation
+ * If TRUE and the input does not satisfy STD3 rules, the operation
* will fail with U_IDNA_STD3_ASCII_RULES_ERROR
*
- * @param parseError Pointer to UParseError struct to recieve information on position
+ * @param parseError Pointer to UParseError struct to receive information on position
* of error if an error is encountered. Can be NULL.
* @param status ICU in/out error code parameter.
* U_INVALID_CHAR_FOUND if src contains
@@ -207,7 +207,7 @@ idnaref_IDNToUnicode( const UChar* src, int32_t srcLength,
* If TRUE unassigned values are treated as normal Unicode code points.
* If FALSE the operation fails with U_UNASSIGNED_CODE_POINT_FOUND error code.
* - idnaref_USE_STD3_RULES Use STD3 ASCII rules for host name syntax restrictions
- * If TRUE and the input does not statisfy STD3 rules, the operation
+ * If TRUE and the input does not satisfy STD3 rules, the operation
* will fail with U_IDNA_STD3_ASCII_RULES_ERROR
*
* @param status ICU error code in/out parameter.
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
index ebc22cf128d..ad75f185f63 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
@@ -932,7 +932,7 @@ void IntlCalendarTest::TestPersianFormat() {
logln("Parsed OK: " + expected);
}
- CHECK(status, "Error occured testing Persian Calendar in English ");
+ CHECK(status, "Error occurred testing Persian Calendar in English ");
}
void IntlCalendarTest::TestConsistencyGregorian() {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h b/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
index fd3ab2ef741..876fb9e3a99 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
@@ -20,7 +20,7 @@
class IntlCalendarTest: public CalendarTimeZoneTest {
public:
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
void TestTypes(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
index 59d2c460bbd..7ff28961271 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
@@ -39,6 +39,7 @@
#include "cmemory.h"
#include "cstring.h"
#include "itmajor.h"
+#include "lstmbe.h"
#include "mutex.h"
#include "putilimp.h" // for uprv_getRawUTCtime()
#include "uassert.h"
@@ -1322,7 +1323,7 @@ main(int argc, char* argv[])
"### IntlTest [-option1 -option2 ...] [testname1 testname2 ...] \n"
"### \n"
"### Options are: verbose (v), all (a), noerrormsg (n), \n"
- "### exhaustive (e), leaks (l), -x xmlfile.xml, prop:<propery>=<value>, \n"
+ "### exhaustive (e), leaks (l), -x xmlfile.xml, prop:<property>=<value>, \n"
"### notime (T), \n"
"### threads:<threadCount>\n"
"### (The default thread count is 12.),\n"
@@ -1605,7 +1606,7 @@ main(int argc, char* argv[])
}
const char* IntlTest::loadTestData(UErrorCode& err){
- if( _testDataPath == NULL){
+ if ( _testDataPath == NULL){
const char* directory=NULL;
UResourceBundle* test =NULL;
char* tdpath=NULL;
@@ -1621,6 +1622,11 @@ const char* IntlTest::loadTestData(UErrorCode& err){
tdpath = (char*) malloc(sizeof(char) *(( strlen(directory) * strlen(tdrelativepath)) + 100));
+ if (tdpath == NULL) {
+ err = U_MEMORY_ALLOCATION_ERROR;
+ it_dataerrln((UnicodeString) "Could not allocate memory for _testDataPath " + u_errorName(err));
+ return "";
+ }
/* u_getDataDirectory shoul return \source\data ... set the
* directory to ..\source\data\..\test\testdata\out\testdata
@@ -1631,7 +1637,7 @@ const char* IntlTest::loadTestData(UErrorCode& err){
test=ures_open(tdpath, "testtypes", &err);
- if(U_FAILURE(err)){
+ if (U_FAILURE(err)) {
err = U_FILE_ACCESS_ERROR;
it_dataerrln((UnicodeString)"Could not load testtypes.res in testdata bundle with path " + tdpath + (UnicodeString)" - " + u_errorName(err));
return "";
@@ -1647,7 +1653,10 @@ const char* IntlTest::getTestDataPath(UErrorCode& err) {
return loadTestData(err);
}
-/* Returns the path to icu/source/test/testdata/ */
+/**
+ * Returns the path to icu/source/test/testdata/
+ * Note: this function is parallel with C loadSourceTestData in cintltst.c
+ */
const char *IntlTest::getSourceTestData(UErrorCode& /*err*/) {
const char *srcDataDir = NULL;
#ifdef U_TOPSRCDIR
@@ -1920,9 +1929,9 @@ UBool IntlTest::assertTrue(const char* message, UBool condition, UBool quiet, UB
UBool IntlTest::assertFalse(const char* message, UBool condition, UBool quiet, UBool possibleDataError) {
if (condition) {
if (possibleDataError) {
- dataerrln("FAIL: assertTrue() failed: %s", message);
+ dataerrln("FAIL: assertFalse() failed: %s", message);
} else {
- errln("FAIL: assertTrue() failed: %s", message);
+ errln("FAIL: assertFalse() failed: %s", message);
}
} else if (!quiet) {
logln("Ok: %s", message);
@@ -1974,6 +1983,8 @@ UBool IntlTest::assertEquals(const char* message,
UBool IntlTest::assertEquals(const char* message,
const char* expected,
const char* actual) {
+ U_ASSERT(expected != nullptr);
+ U_ASSERT(actual != nullptr);
if (uprv_strcmp(expected, actual) != 0) {
errln((UnicodeString)"FAIL: " + message + "; got \"" +
actual +
@@ -2307,6 +2318,143 @@ const char* IntlTest::getProperty(const char* prop) {
return val;
}
+//-------------------------------------------------------------------------------
+//
+// ReadAndConvertFile Read a text data file, convert it to UChars, and
+// return the data in one big UChar * buffer, which the caller must delete.
+//
+// parameters:
+// fileName: the name of the file, with no directory part. The test data directory
+// is assumed.
+// ulen an out parameter, receives the actual length (in UChars) of the file data.
+// encoding The file encoding. If the file contains a BOM, that will override the encoding
+// specified here. The BOM, if it exists, will be stripped from the returned data.
+// Pass NULL for the system default encoding.
+// status
+// returns:
+// The file data, converted to UChar.
+// The caller must delete this when done with
+// delete [] theBuffer;
+//
+//
+//--------------------------------------------------------------------------------
+UChar *IntlTest::ReadAndConvertFile(const char *fileName, int &ulen, const char *encoding, UErrorCode &status) {
+ UChar *retPtr = NULL;
+ char *fileBuf = NULL;
+ UConverter* conv = NULL;
+ FILE *f = NULL;
+
+ ulen = 0;
+ if (U_FAILURE(status)) {
+ return retPtr;
+ }
+
+ //
+ // Open the file.
+ //
+ f = fopen(fileName, "rb");
+ if (f == 0) {
+ dataerrln("Error opening test data file %s\n", fileName);
+ status = U_FILE_ACCESS_ERROR;
+ return NULL;
+ }
+ //
+ // Read it in
+ //
+ int fileSize;
+ int amt_read;
+
+ fseek( f, 0, SEEK_END);
+ fileSize = ftell(f);
+ fileBuf = new char[fileSize];
+ fseek(f, 0, SEEK_SET);
+ amt_read = static_cast<int>(fread(fileBuf, 1, fileSize, f));
+ if (amt_read != fileSize || fileSize <= 0) {
+ errln("Error reading test data file.");
+ goto cleanUpAndReturn;
+ }
+
+ //
+ // Look for a Unicode Signature (BOM) on the data just read
+ //
+ int32_t signatureLength;
+ const char * fileBufC;
+ const char* bomEncoding;
+
+ fileBufC = fileBuf;
+ bomEncoding = ucnv_detectUnicodeSignature(
+ fileBuf, fileSize, &signatureLength, &status);
+ if(bomEncoding!=NULL ){
+ fileBufC += signatureLength;
+ fileSize -= signatureLength;
+ encoding = bomEncoding;
+ }
+
+ //
+ // Open a converter to take the rule file to UTF-16
+ //
+ conv = ucnv_open(encoding, &status);
+ if (U_FAILURE(status)) {
+ goto cleanUpAndReturn;
+ }
+
+ //
+ // Convert the rules to UChar.
+ // Preflight first to determine required buffer size.
+ //
+ ulen = ucnv_toUChars(conv,
+ NULL, // dest,
+ 0, // destCapacity,
+ fileBufC,
+ fileSize,
+ &status);
+ if (status == U_BUFFER_OVERFLOW_ERROR) {
+ // Buffer Overflow is expected from the preflight operation.
+ status = U_ZERO_ERROR;
+
+ retPtr = new UChar[ulen+1];
+ ucnv_toUChars(conv,
+ retPtr, // dest,
+ ulen+1,
+ fileBufC,
+ fileSize,
+ &status);
+ }
+
+cleanUpAndReturn:
+ fclose(f);
+ delete []fileBuf;
+ ucnv_close(conv);
+ if (U_FAILURE(status)) {
+ errln("ucnv_toUChars: ICU Error \"%s\"\n", u_errorName(status));
+ delete []retPtr;
+ retPtr = 0;
+ ulen = 0;
+ }
+ return retPtr;
+}
+
+#if !UCONFIG_NO_BREAK_ITERATION
+UBool LSTMDataIsBuilt() {
+ // If we can find the LSTM data, the RBBI will use the LSTM engine.
+ // So we skip the test which depending on the dictionary data.
+ UErrorCode status = U_ZERO_ERROR;
+ DeleteLSTMData(CreateLSTMDataForScript(USCRIPT_THAI, status));
+ UBool thaiDataIsBuilt = U_SUCCESS(status);
+ status = U_ZERO_ERROR;
+ DeleteLSTMData(CreateLSTMDataForScript(USCRIPT_MYANMAR, status));
+ UBool burmeseDataIsBuilt = U_SUCCESS(status);
+ return thaiDataIsBuilt | burmeseDataIsBuilt;
+}
+
+UBool IntlTest::skipLSTMTest() {
+ return ! LSTMDataIsBuilt();
+}
+UBool IntlTest::skipDictionaryTest() {
+ return LSTMDataIsBuilt();
+}
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
/*
* Hey, Emacs, please set the following:
*
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
index 1d8146bb4a8..8c5777789c3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
@@ -142,7 +142,7 @@ public:
IntlTest();
// TestLog has a virtual destructor.
- virtual UBool runTest( char* name = NULL, char* par = NULL, char *baseName = NULL); // not to be overidden
+ virtual UBool runTest( char* name = NULL, char* par = NULL, char *baseName = NULL); // not to be overridden
virtual UBool setVerbose( UBool verbose = TRUE );
virtual UBool setNoErrMsg( UBool no_err_msg = TRUE );
@@ -161,7 +161,7 @@ public:
virtual void log( const UnicodeString &message );
- virtual void logln( const UnicodeString &message );
+ virtual void logln( const UnicodeString &message ) override;
virtual void logln( void );
@@ -192,6 +192,11 @@ public:
*/
UBool logKnownIssue( const char *ticket, const char *fmt, ...);
+#if !UCONFIG_NO_BREAK_ITERATION
+ UBool skipDictionaryTest();
+ UBool skipLSTMTest();
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
virtual void info( const UnicodeString &message );
virtual void infoln( const UnicodeString &message );
@@ -202,11 +207,11 @@ public:
virtual void err( const UnicodeString &message );
- virtual void errln( const UnicodeString &message );
+ virtual void errln( const UnicodeString &message ) override;
virtual void dataerr( const UnicodeString &message );
- virtual void dataerrln( const UnicodeString &message );
+ virtual void dataerrln( const UnicodeString &message ) override;
void errcheckln(UErrorCode status, const UnicodeString &message );
@@ -352,7 +357,7 @@ public:
const std::vector<std::string>& expected, const std::vector<std::string>& actual);
UBool assertNotEquals(const UnicodeString& message, int32_t expectedNot, int32_t actual);
- virtual void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); // overide !
+ virtual void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); // override !
virtual UBool runTestLoop( char* testname, char* par, char *baseName );
@@ -413,9 +418,11 @@ public:
public:
UBool run_phase2( char* name, char* par ); // internally, supports reporting memory leaks
static const char* loadTestData(UErrorCode& err);
- virtual const char* getTestDataPath(UErrorCode& err);
+ virtual const char* getTestDataPath(UErrorCode& err) override;
static const char* getSourceTestData(UErrorCode& err);
static char *getUnidataPath(char path[]);
+ UChar *ReadAndConvertFile(const char *fileName, int &ulen, const char *encoding, UErrorCode &status);
+
// static members
public:
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
index 319c3ab58f6..e8bdacd5fc9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
@@ -82,6 +82,7 @@
<ClCompile Include="regiontst.cpp" />
<ClCompile Include="ucharstrietest.cpp" />
<ClCompile Include="itrbbi.cpp" />
+ <ClCompile Include="lstmbetst.cpp" />
<ClCompile Include="rbbiapts.cpp">
<DisableLanguageExtensions>false</DisableLanguageExtensions>
</ClCompile>
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
index b7069801c5b..079cbbb1629 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
@@ -64,6 +64,9 @@
<ClCompile Include="itrbbi.cpp">
<Filter>break iteration</Filter>
</ClCompile>
+ <ClCompile Include="lstmbetst.cpp">
+ <Filter>break iteration</Filter>
+ </ClCompile>
<ClCompile Include="rbbiapts.cpp">
<Filter>break iteration</Filter>
</ClCompile>
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.cpp
index e78a6c5f472..207be63ac27 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.cpp
@@ -313,7 +313,7 @@ void CollationIteratorTest::TestSetText(/* char* par */)
assertEqual(*iter1, *iter2);
}
iter1->reset();
- //now use the overloaded setText(ChracterIterator&, UErrorCode) function to set the text
+ //now use the overloaded setText(CharacterIterator&, UErrorCode) function to set the text
CharacterIterator* chariter = new StringCharacterIterator(test1);
iter2->setText(*chariter, status);
if (U_FAILURE(status))
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.h
index 2aaaa1df00d..fc28c72e7dc 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.h
@@ -33,7 +33,7 @@ public:
CollationIteratorTest();
virtual ~CollationIteratorTest();
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL) override;
/**
* Test that results from CollationElementIterator.next is equivalent to
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h b/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
index feb55e2b3c3..49056d38fb9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
@@ -22,7 +22,7 @@
class IntlTestFormat: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.h b/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.h
index 263e5552646..f712e277384 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.h
@@ -18,11 +18,11 @@
class MajorTestLevel: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
};
class IntlTestNormalize: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
};
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.cpp
index 819f413427f..3c9d8a0ec01 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.cpp
@@ -20,6 +20,7 @@
#include "intltest.h"
#include "itrbbi.h"
+#include "lstmbetst.h"
#include "rbbiapts.h"
#include "rbbitst.h"
#include "rbbimonkeytest.h"
@@ -36,6 +37,7 @@ void IntlTestRBBI::runIndexedTest( int32_t index, UBool exec, const char* &name,
#if !UCONFIG_NO_FORMATTING
TESTCASE_AUTO_CLASS(RBBIMonkeyTest);
#endif
+ TESTCASE_AUTO_CLASS(LSTMBETest);
TESTCASE_AUTO_END;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.h b/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.h
index 67648f70d1e..a7ae7de8ff1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.h
@@ -25,7 +25,7 @@
class IntlTestRBBI: public IntlTest {
public:
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
};
#endif /* #if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_REGULAR_EXPRESSIONS */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
index efddaa76606..847b8412840 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
@@ -77,6 +77,7 @@ void IntlTestRBNF::runIndexedTest(int32_t index, UBool exec, const char* &name,
TESTCASE(25, TestCompactDecimalFormatStyle);
TESTCASE(26, TestParseFailure);
TESTCASE(27, TestMinMaxIntegerDigitsIgnored);
+ TESTCASE(28, TestNorwegianSpellout);
#else
TESTCASE(0, TestRBNFDisabled);
#endif
@@ -1522,8 +1523,8 @@ IntlTestRBNF::TestPortugueseSpellout()
{ "1,000", "mil" },
{ "2,000", "dois mil" },
{ "3,004", "tr\\u00EAs mil e quatro" },
- { "4,567", "quatro mil e quinhentos e sessenta e sete" },
- { "15,943", "quinze mil e novecentos e quarenta e tr\\u00EAs" },
+ { "4,567", "quatro mil quinhentos e sessenta e sete" },
+ { "15,943", "quinze mil novecentos e quarenta e tr\\u00EAs" },
{ "-36", "menos trinta e seis" },
{ "234.567", "duzentos e trinta e quatro v\\u00EDrgula cinco seis sete" },
{ NULL, NULL}
@@ -1605,6 +1606,38 @@ IntlTestRBNF::TestThaiSpellout()
}
void
+IntlTestRBNF::TestNorwegianSpellout()
+{
+ UErrorCode status = U_ZERO_ERROR;
+ RuleBasedNumberFormat* noFormatter
+ = new RuleBasedNumberFormat(URBNF_SPELLOUT, Locale("no"), status);
+ RuleBasedNumberFormat* nbFormatter
+ = new RuleBasedNumberFormat(URBNF_SPELLOUT, Locale("nb"), status);
+
+ if (U_FAILURE(status)) {
+ errcheckln(status, "FAIL: could not construct formatter - %s", u_errorName(status));
+ } else {
+ static const char* testDataDefault[][2] = {
+ { "1", "\\u00E9n" },
+ { "2", "to" },
+ { "3", "tre" },
+ { "4", "fire" },
+ { "101", "hundre og \\u00E9n" },
+ { "123", "hundre og tjue\\u00ADtre" },
+ { "1,001", "tusen og \\u00E9n" },
+ { "1,100", "tusen hundre" },
+ { "6.789", "seks komma sju \\u00E5tte ni" },
+ { "-5.678", "minus fem komma seks sju \\u00E5tte" },
+ { NULL, NULL }
+ };
+ doTest(noFormatter, testDataDefault, TRUE);
+ doTest(nbFormatter, testDataDefault, TRUE);
+ }
+ delete nbFormatter;
+ delete noFormatter;
+}
+
+void
IntlTestRBNF::TestSwedishSpellout()
{
UErrorCode status = U_ZERO_ERROR;
@@ -1829,7 +1862,7 @@ IntlTestRBNF::TestLocalizations(void)
"<<''>>", // empty string
" x<<%main>>", // first non space char not open angle bracket
"<%main>", // missing inner array
- "<<%main %other>>", // elements missing separating commma (spaces must be quoted)
+ "<<%main %other>>", // elements missing separating comma (spaces must be quoted)
"<<%main><en, Main>>", // arrays missing separating comma
"<<%main>,<en, main, foo>>", // too many elements in locale data
"<<%main>,<en>>", // too few elements in locale data
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.h b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.h
index c82b50d86fe..9fae1755cf1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.h
@@ -22,7 +22,7 @@ class IntlTestRBNF : public IntlTest {
public:
// IntlTest override
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par);
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par) override;
#if U_HAVE_RBNF
/**
@@ -102,6 +102,11 @@ class IntlTestRBNF : public IntlTest {
void TestThaiSpellout();
/**
+ * Perform a simple spot check on the Norwegian (no,nb) spellout rules
+ */
+ void TestNorwegianSpellout();
+
+ /**
* Perform a simple spot check on the Swedish spellout rules
*/
void TestSwedishSpellout();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.cpp
index ba1fba7fb4b..62e97fa8bff 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.cpp
@@ -104,7 +104,7 @@ IntlTestRBNFParse::TestParse() {
// these rules would throw exceptions when formatting, if we could throw exceptions
const char* exceptrules[] = {
"10:", // formatting any value with a one's digit will fail
- "11: << x", // formating a multiple of 10 causes rollback rule to fail
+ "11: << x", // formatting a multiple of 10 causes rollback rule to fail
"%%foo: 0 foo; 10: =%%bar=; %%bar: 0: bar; 10: =%%foo=;",
NULL,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.h b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.h
index 3b49aa6bea4..7dcbd1e629e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.h
@@ -22,7 +22,7 @@ class IntlTestRBNFParse : public IntlTest {
public:
// IntlTest override
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par);
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par) override;
#if U_HAVE_RBNF
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.h b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.h
index e06d593ff52..4608f6927fc 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.h
@@ -20,7 +20,7 @@
class RbnfRoundTripTest : public IntlTest {
// IntlTest override
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par);
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par) override;
#if U_HAVE_RBNF
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.h b/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.h
index 47cda32cf38..7eca31bb729 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.h
@@ -22,7 +22,7 @@
class IntlTestSpoof: public IntlTest {
public:
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// Test the USpoofDetector API functions that require C++
// The pure C part of the API, which is most of it, is tested in cintltst
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.h b/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.h
index 4418941954e..0f9aeaa8e5f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.h
@@ -25,7 +25,7 @@
class IntlTestTransliterator: public IntlTest {
public:
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
};
#endif /* #if !UCONFIG_NO_TRANSLITERATION */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itutil.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/itutil.cpp
index 228dbf2f218..5793261a91d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itutil.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itutil.cpp
@@ -135,7 +135,7 @@ public:
}
}
private:
- virtual void handleFailure() const {
+ virtual void handleFailure() const override {
++checks;
}
int32_t &checks;
@@ -312,7 +312,7 @@ class LocalPointerTest : public IntlTest {
public:
LocalPointerTest() {}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
void TestLocalPointer();
void TestLocalPointerMoveSwap();
@@ -831,7 +831,7 @@ void LocalPointerTest::TestLocalXyzStdUniquePtr() {
class EnumSetTest : public IntlTest {
public:
EnumSetTest() {}
- virtual void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ virtual void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
void TestEnumSet();
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/itutil.h b/Build/source/libs/icu/icu-src/source/test/intltest/itutil.h
index 3f3e851a89c..3968a140ac7 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/itutil.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/itutil.h
@@ -17,12 +17,12 @@
class IntlTestUtilities: public IntlTest {
public:
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
};
class ErrorCodeTest: public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL) override;
void TestErrorCode();
void TestSubclass();
void TestIcuTestErrorCode();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.h
index 3e274cef357..e1aca114f5c 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.h
@@ -29,7 +29,7 @@ public:
CollationKanaTest();
virtual ~CollationKanaTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// performs test with strength TERIARY
void TestTertiary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.h b/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.h
index a518b88c112..5fab2d125b1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.h
@@ -31,7 +31,7 @@ public:
virtual ~JamoTest();
private:
void runIndexedTest(int32_t index, UBool exec, const char* &name,
- char* par=NULL);
+ char* par=NULL) override;
void TestJamo(void);
@@ -46,7 +46,7 @@ private:
// Override TransliteratorTest
virtual void expectAux(const UnicodeString& tag,
const UnicodeString& summary, UBool pass,
- const UnicodeString& expectedResult);
+ const UnicodeString& expectedResult) override;
// Methods to convert Jamo to/from readable short names,
// e.g. (Gi) <> U+1100
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.h b/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.h
index 6219e46d550..658c1eea55d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.h
@@ -24,7 +24,7 @@ public:
LotusCollationKoreanTest();
virtual ~LotusCollationKoreanTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// performs test with strength TERIARY
void TestTertiary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
index 34536e6e7cb..831642241e6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
@@ -45,7 +45,6 @@ void ListFormatterTest::runIndexedTest(int32_t index, UBool exec,
TESTCASE_AUTO(TestFieldPositionIteratorWith3ItemsPatternShift);
TESTCASE_AUTO(TestFormattedValue);
TESTCASE_AUTO(TestDifferentStyles);
- TESTCASE_AUTO(TestBadStylesFail);
TESTCASE_AUTO(TestCreateStyled);
TESTCASE_AUTO(TestContextual);
TESTCASE_AUTO(TestNextPosition);
@@ -276,8 +275,11 @@ void ListFormatterTest::RunTestFieldPositionIteratorWithNItemsPatternShift(
const char16_t *expectedFormatted,
const char* testName) {
IcuTestErrorCode errorCode(*this, testName);
- LocalPointer<ListFormatter> formatter(
- ListFormatter::createInstance(Locale("ur", "IN"), "unit-narrow", errorCode));
+ LocalPointer<ListFormatter> formatter(ListFormatter::createInstance(
+ Locale("ur", "IN"),
+ ULISTFMT_TYPE_UNITS,
+ ULISTFMT_WIDTH_NARROW,
+ errorCode));
if (U_FAILURE(errorCode)) {
dataerrln(
"ListFormatter::createInstance(Locale(\"ur\", \"IN\"), \"unit-narrow\", errorCode) failed in "
@@ -608,16 +610,22 @@ void ListFormatterTest::TestFormattedValue() {
}
}
-void ListFormatterTest::DoTheRealListStyleTesting(Locale locale,
- UnicodeString items[], int itemCount,
- const char* style, const char* expected, IcuTestErrorCode status) {
+void ListFormatterTest::DoTheRealListStyleTesting(
+ Locale locale,
+ UnicodeString items[],
+ int itemCount,
+ UListFormatterType type,
+ UListFormatterWidth width,
+ const char* expected,
+ IcuTestErrorCode status) {
LocalPointer<ListFormatter> formatter(
- ListFormatter::createInstance(locale, style, status));
+ ListFormatter::createInstance(locale, type, width, status));
UnicodeString actualResult;
formatter->format(items, itemCount, actualResult, status);
- assertEquals(style, UnicodeString(expected), actualResult);
+ assertEquals(Int64ToUnicodeString(type) + "-" + Int64ToUnicodeString(width),
+ UnicodeString(expected), actualResult);
}
void ListFormatterTest::TestDifferentStyles() {
@@ -625,24 +633,11 @@ void ListFormatterTest::TestDifferentStyles() {
UnicodeString input[4] = { u"rouge", u"jaune", u"bleu", u"vert" };
IcuTestErrorCode status(*this, "TestDifferentStyles()");
- DoTheRealListStyleTesting(locale, input, 4, "standard", "rouge, jaune, bleu et vert", status);
- DoTheRealListStyleTesting(locale, input, 4, "or", "rouge, jaune, bleu ou vert", status);
- DoTheRealListStyleTesting(locale, input, 4, "unit", "rouge, jaune, bleu et vert", status);
- DoTheRealListStyleTesting(locale, input, 4, "unit-narrow", "rouge jaune bleu vert", status);
- DoTheRealListStyleTesting(locale, input, 4, "unit-short", "rouge, jaune, bleu et vert", status);
-}
-
-void ListFormatterTest::TestBadStylesFail() {
- Locale locale("fr");
- const char * badStyles[4] = { "", "duration", "duration-short", "something-clearly-wrong" };
- IcuTestErrorCode status(*this, "TestBadStylesFail()");
-
- for (int i = 0; i < 4; ++i) {
- LocalPointer<ListFormatter> formatter(ListFormatter::createInstance(locale, badStyles[i], status));
- if (!status.expectErrorAndReset(U_MISSING_RESOURCE_ERROR, "style \"%s\"", badStyles[i])) {
- // Do nothing, expectErrorAndReset already reports the error
- }
- }
+ DoTheRealListStyleTesting(locale, input, 4, ULISTFMT_TYPE_AND, ULISTFMT_WIDTH_WIDE, "rouge, jaune, bleu et vert", status);
+ DoTheRealListStyleTesting(locale, input, 4, ULISTFMT_TYPE_OR, ULISTFMT_WIDTH_WIDE, "rouge, jaune, bleu ou vert", status);
+ DoTheRealListStyleTesting(locale, input, 4, ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_WIDE, "rouge, jaune, bleu et vert", status);
+ DoTheRealListStyleTesting(locale, input, 4, ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_NARROW, "rouge jaune bleu vert", status);
+ DoTheRealListStyleTesting(locale, input, 4, ULISTFMT_TYPE_UNITS, ULISTFMT_WIDTH_SHORT, "rouge, jaune, bleu et vert", status);
}
void ListFormatterTest::TestCreateStyled() {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h
index aeba483285a..d6bf3bc0d68 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h
@@ -31,7 +31,7 @@ class ListFormatterTest : public IntlTestWithFieldPosition {
ListFormatterTest();
virtual ~ListFormatterTest() {}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
void TestRoot();
void TestBogus();
@@ -52,7 +52,6 @@ class ListFormatterTest : public IntlTestWithFieldPosition {
void TestFieldPositionIteratorWith3ItemsPatternShift();
void TestFormattedValue();
void TestDifferentStyles();
- void TestBadStylesFail();
void TestCreateStyled();
void TestContextual();
void TestNextPosition();
@@ -111,8 +110,9 @@ class ListFormatterTest : public IntlTestWithFieldPosition {
void DoTheRealListStyleTesting(
Locale locale,
UnicodeString items[],
- int32_t itemCount,
- const char* style,
+ int itemCount,
+ UListFormatterType type,
+ UListFormatterWidth width,
const char* expected,
IcuTestErrorCode status);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp
index 13f6ecf4120..7cade3650c1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.cpp
@@ -25,6 +25,7 @@ void LocaleBuilderTest::runIndexedTest( int32_t index, UBool exec, const char* &
TESTCASE_AUTO(TestAddUnicodeLocaleAttributeIllFormed);
TESTCASE_AUTO(TestLocaleBuilder);
TESTCASE_AUTO(TestLocaleBuilderBasic);
+ TESTCASE_AUTO(TestLocaleBuilderBasicWithExtensionsOnDefaultLocale);
TESTCASE_AUTO(TestPosixCases);
TESTCASE_AUTO(TestSetExtensionOthers);
TESTCASE_AUTO(TestSetExtensionPU);
@@ -286,7 +287,7 @@ void LocaleBuilderTest::TestLocaleBuilder() {
}
break;
} else {
- // Unknow test method
+ // Unknown test method
errln("Unknown test case method: There is an error in the test case data.");
break;
}
@@ -363,6 +364,25 @@ void LocaleBuilderTest::TestLocaleBuilderBasic() {
"setRegion('') got Error: %s\n");
}
+void LocaleBuilderTest::TestLocaleBuilderBasicWithExtensionsOnDefaultLocale() {
+ // Change the default locale to one with extension tags.
+ UErrorCode status = U_ZERO_ERROR;
+ Locale originalDefault;
+ Locale::setDefault(Locale::createFromName("en-US-u-hc-h12"), status);
+ if (U_FAILURE(status)) {
+ errln("ERROR: Could not change the default locale");
+ return;
+ }
+
+ // Invoke the basic test now that the default locale has been changed.
+ TestLocaleBuilderBasic();
+
+ Locale::setDefault(originalDefault, status);
+ if (U_FAILURE(status)) {
+ errln("ERROR: Could not restore the default locale");
+ }
+}
+
void LocaleBuilderTest::TestSetLanguageWellFormed() {
// http://www.unicode.org/reports/tr35/tr35.html#unicode_language_subtag
// unicode_language_subtag = alpha{2,3} | alpha{5,8};
@@ -425,7 +445,7 @@ void LocaleBuilderTest::TestSetLanguageIllFormed() {
"F",
"2",
"0",
- "9"
+ "9",
"{",
".",
"[",
@@ -520,7 +540,7 @@ void LocaleBuilderTest::TestSetScriptIllFormed() {
"F",
"2",
"0",
- "9"
+ "9",
"{",
".",
"[",
@@ -619,7 +639,7 @@ void LocaleBuilderTest::TestSetRegionIllFormed() {
"F",
"2",
"0",
- "9"
+ "9",
"{",
".",
"[",
@@ -763,7 +783,7 @@ void LocaleBuilderTest::TestSetVariantIllFormed() {
"F",
"2",
"0",
- "9"
+ "9",
"{",
".",
"[",
@@ -1375,7 +1395,7 @@ void LocaleBuilderTest::TestSetExtensionValidateTIllFormed() {
"9-",
"-9",
"-z",
- // "Latn", // Per 2019-01-23 ICUTC, still accept 4alpha. See ICU-20321
+ "Latn",
"Latn-",
"en-",
"nob-",
@@ -1400,6 +1420,8 @@ void LocaleBuilderTest::TestSetExtensionValidateTIllFormed() {
"gab-Thai-TH-0bde-z9-abcde123-a1-",
"gab-Thai-TH-0bde-z9-abcde123-a1-a",
"gab-Thai-TH-0bde-z9-abcde123-a1-ab",
+ // ICU-21408
+ "root",
};
for (const char* ill : illFormed) {
UErrorCode status = U_ZERO_ERROR;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.h b/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.h
index 41f3730ff24..b8f0b9951bd 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/localebuildertest.h
@@ -13,13 +13,14 @@ class LocaleBuilderTest: public IntlTest {
LocaleBuilderTest();
virtual ~LocaleBuilderTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
void TestAddRemoveUnicodeLocaleAttribute(void);
void TestAddRemoveUnicodeLocaleAttributeWellFormed(void);
void TestAddUnicodeLocaleAttributeIllFormed(void);
void TestLocaleBuilder(void);
void TestLocaleBuilderBasic(void);
+ void TestLocaleBuilderBasicWithExtensionsOnDefaultLocale(void);
void TestPosixCases(void);
void TestSetExtensionOthers(void);
void TestSetExtensionPU(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp
index 664f300e013..06bf8f8c7a6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/localematchertest.cpp
@@ -51,7 +51,7 @@ class LocaleMatcherTest : public IntlTest {
public:
LocaleMatcherTest() {}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
void testEmpty();
void testCopyErrorTo();
@@ -437,8 +437,8 @@ void LocaleMatcherTest::testMatch() {
double matchEnHantTw = matcher.internalMatch(en_Hant_TW, zh_Hant, errorCode);
assertTrue("zh_Hant should be closer to und_TW than to en_Hant_TW",
matchEnHantTw < matchZhHant);
- assertTrue("zh should be closer to und_TW than to en_Hant_TW",
- matchEnHantTw < matchZh);
+ assertTrue("zh should not match und_TW or en_Hant_TW",
+ matchZh == 0.0 && matchEnHantTw == 0.0); // with changes in CLDR-1435
}
void LocaleMatcherTest::testResolvedLocale() {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
index 61baca2e463..157e7d3fbc2 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
@@ -408,7 +408,7 @@ void LocaleDisplayNamesTest::TestRootEtc() {
UnicodeString temp;
LocaleDisplayNames *ldn = LocaleDisplayNames::createInstance(Locale::getUS());
const char *locname = "@collation=phonebook";
- const char *target = "Root (Phonebook Sort Order)";
+ const char *target = "root (Phonebook Sort Order)";
ldn->localeDisplayName(locname, temp);
test_assert_equal(target, temp);
@@ -425,14 +425,14 @@ void LocaleDisplayNamesTest::TestNumericRegionID() {
UErrorCode err = U_ZERO_ERROR;
ULocaleDisplayNames* ldn = uldn_open("es_MX", ULDN_STANDARD_NAMES, &err);
UChar displayName[200];
- int32_t displayNameLength = uldn_regionDisplayName(ldn, "019", displayName, 200, &err);
+ uldn_regionDisplayName(ldn, "019", displayName, 200, &err);
test_assert(U_SUCCESS(err));
test_assert_equal(UnicodeString(u"América"), UnicodeString(displayName));
uldn_close(ldn);
err = U_ZERO_ERROR; // reset in case the test above returned an error code
ldn = uldn_open("en_AU", ULDN_STANDARD_NAMES, &err);
- displayNameLength = uldn_regionDisplayName(ldn, "002", displayName, 200, &err);
+ uldn_regionDisplayName(ldn, "002", displayName, 200, &err);
test_assert(U_SUCCESS(err));
test_assert_equal(UnicodeString(u"Africa"), UnicodeString(displayName));
uldn_close(ldn);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h b/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
index e09a7d392cb..f8cefb6e37a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
@@ -17,7 +17,7 @@ public:
LocaleDisplayNamesTest();
virtual ~LocaleDisplayNamesTest();
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL) override;
#if !UCONFIG_NO_FORMATTING
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
index 5f1075f5461..a68dc117af1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
@@ -239,8 +239,10 @@ void LocaleTest::runIndexedTest( int32_t index, UBool exec, const char* &name, c
TESTCASE_AUTO(TestKeywordVariantParsing);
TESTCASE_AUTO(TestCreateKeywordSet);
TESTCASE_AUTO(TestCreateKeywordSetEmpty);
+ TESTCASE_AUTO(TestCreateKeywordSetWithPrivateUse);
TESTCASE_AUTO(TestCreateUnicodeKeywordSet);
TESTCASE_AUTO(TestCreateUnicodeKeywordSetEmpty);
+ TESTCASE_AUTO(TestCreateUnicodeKeywordSetWithPrivateUse);
TESTCASE_AUTO(TestGetKeywordValueStdString);
TESTCASE_AUTO(TestGetUnicodeKeywordValueStdString);
TESTCASE_AUTO(TestSetKeywordValue);
@@ -263,6 +265,7 @@ void LocaleTest::runIndexedTest( int32_t index, UBool exec, const char* &name, c
TESTCASE_AUTO(TestKnownCanonicalizedListCorrect);
TESTCASE_AUTO(TestConstructorAcceptsBCP47);
TESTCASE_AUTO(TestForLanguageTag);
+ TESTCASE_AUTO(TestForLanguageTagLegacyTagBug21676);
TESTCASE_AUTO(TestToLanguageTag);
TESTCASE_AUTO(TestToLanguageTagOmitTrue);
TESTCASE_AUTO(TestMoveAssign);
@@ -282,6 +285,9 @@ void LocaleTest::runIndexedTest( int32_t index, UBool exec, const char* &name, c
TESTCASE_AUTO(TestSetUnicodeKeywordValueNullInLongLocale);
TESTCASE_AUTO(TestCanonicalize);
TESTCASE_AUTO(TestLeak21419);
+ TESTCASE_AUTO(TestNullDereferenceWrite21597);
+ TESTCASE_AUTO(TestLongLocaleSetKeywordAssign);
+ TESTCASE_AUTO(TestLongLocaleSetKeywordMoveAssign);
TESTCASE_AUTO_END;
}
@@ -918,8 +924,8 @@ LocaleTest::TestGetLangsAndCountries()
;
/* TODO: Change this test to be more like the cloctst version? */
- if (testCount != 597)
- errln("Expected getISOLanguages() to return 597 languages; it returned %d", testCount);
+ if (testCount != 594)
+ errln("Expected getISOLanguages() to return 594 languages; it returned %d", testCount);
else {
for (i = 0; i < 15; i++) {
int32_t j;
@@ -949,8 +955,8 @@ LocaleTest::TestGetLangsAndCountries()
for(testCount=0;test[testCount];testCount++)
;
- if (testCount != 249){
- errln("Expected getISOCountries to return 249 countries; it returned %d", testCount);
+ if (testCount != 253){
+ errln("Expected getISOCountries to return 253 countries; it returned %d", testCount);
}else {
for (i = 0; i < spot2Len; i++) {
int32_t j;
@@ -2053,6 +2059,10 @@ LocaleTest::TestAddLikelyAndMinimizeSubtags() {
"nn_Latn_NO",
"nn"
}, {
+ "no",
+ "no_Latn_NO",
+ "no"
+ }, {
"nr",
"nr_Latn_ZA",
"nr"
@@ -4081,6 +4091,27 @@ LocaleTest::TestCreateKeywordSetEmpty(void) {
}
void
+LocaleTest::TestCreateKeywordSetWithPrivateUse(void) {
+ IcuTestErrorCode status(*this, "TestCreateKeywordSetWithPrivateUse()");
+
+ static const char tag[] = "en-US-u-ca-gregory-x-foo";
+ static const Locale l = Locale::forLanguageTag(tag, status);
+ std::set<std::string> result;
+ l.getKeywords<std::string>(
+ std::insert_iterator<decltype(result)>(result, result.begin()),
+ status);
+ status.errIfFailureAndReset("getKeywords \"%s\"", l.getName());
+ assertTrue("getKeywords set::find(\"calendar\")",
+ result.find("calendar") != result.end());
+ assertTrue("getKeywords set::find(\"ca\")",
+ result.find("ca") == result.end());
+ assertTrue("getKeywords set::find(\"x\")",
+ result.find("x") != result.end());
+ assertTrue("getKeywords set::find(\"foo\")",
+ result.find("foo") == result.end());
+}
+
+void
LocaleTest::TestCreateUnicodeKeywordSet(void) {
IcuTestErrorCode status(*this, "TestCreateUnicodeKeywordSet()");
@@ -4115,6 +4146,26 @@ LocaleTest::TestCreateUnicodeKeywordSetEmpty(void) {
}
void
+LocaleTest::TestCreateUnicodeKeywordSetWithPrivateUse(void) {
+ IcuTestErrorCode status(*this, "TestCreateUnicodeKeywordSetWithPrivateUse()");
+
+ static const char tag[] = "en-US-u-ca-gregory-x-foo";
+ static const Locale l = Locale::forLanguageTag(tag, status);
+
+ std::set<std::string> result;
+ l.getUnicodeKeywords<std::string>(
+ std::insert_iterator<decltype(result)>(result, result.begin()),
+ status);
+ status.errIfFailureAndReset("getUnicodeKeywords \"%s\"", l.getName());
+ assertTrue("getUnicodeKeywords set::find(\"ca\")",
+ result.find("ca") != result.end());
+ assertTrue("getUnicodeKeywords set::find(\"x\")",
+ result.find("x") == result.end());
+ assertTrue("getUnicodeKeywords set::find(\"foo\")",
+ result.find("foo") == result.end());
+}
+
+void
LocaleTest::TestGetKeywordValueStdString(void) {
IcuTestErrorCode status(*this, "TestGetKeywordValueStdString()");
@@ -4736,15 +4787,17 @@ void LocaleTest::TestCanonicalization(void)
{ "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin" },
{ "en_US_POSIX", "en_US_POSIX", "en_US_POSIX" },
{ "hy_AM_REVISED", "hy_AM_REVISED", "hy_AM_REVISED" },
- { "no_NO_NY", "no_NO_NY", "nb_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ },
- { "no@ny", "no@ny", "nb__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */
- { "no-no.utf32@B", "no_NO.utf32@B", "nb_NO_B" /* not: "nb_NO_B" [alan ICU3.0] */ }, /* POSIX ID */
+ { "no_NO_NY", "no_NO_NY", "no_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ },
+ { "no@ny", "no@ny", "no__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */
+ { "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B" }, /* POSIX ID */
{ "qz-qz@Euro", "qz_QZ@Euro", "qz_QZ_EURO" }, /* qz-qz uses private use iso codes */
// NOTE: uloc_getName() works on en-BOONT, but Locale() parser considers it BOGUS
// TODO: unify this behavior
{ "en-BOONT", "en__BOONT", "en__BOONT" }, /* registered name */
{ "de-1901", "de__1901", "de__1901" }, /* registered name */
{ "de-1906", "de__1906", "de__1906" }, /* registered name */
+ // New in CLDR 39 / ICU 69
+ { "nb", "nb", "nb" },
/* posix behavior that used to be performed by getName */
{ "mr.utf8", "mr.utf8", "mr" },
@@ -4752,7 +4805,7 @@ void LocaleTest::TestCanonicalization(void)
{ "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML" },
{ "i-cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US" },
{ "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA" },
- { "no-no-ny.utf8@B", "no_NO_NY.utf8@B", "nb_NO_B_NY" /* not: "nn_NO" [alan ICU3.0] */ }, /* @ ignored unless variant is empty */
+ { "no-no-ny.utf8@B", "no_NO_NY.utf8@B", "no_NO@b=ny" /* not: "nn_NO" [alan ICU3.0] */ }, /* @ ignored unless variant is empty */
/* fleshing out canonicalization */
/* trim space and sort keywords, ';' is separator so not present at end in canonical form */
@@ -4764,7 +4817,7 @@ void LocaleTest::TestCanonicalization(void)
"en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR",
"en_Hant_IL_GIRL_VALLEY@calendar=Japanese;currency=EUR" },
/* norwegian is just too weird, if we handle things in their full generality */
- { "no-Hant-GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$", "nb_Hant_GB_NY@currency=$$$" /* not: "nn_Hant_GB@currency=$$$" [alan ICU3.0] */ },
+ { "no-Hant-GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$" /* not: "nn_Hant_GB@currency=$$$" [alan ICU3.0] */ },
/* test cases reflecting internal resource bundle usage */
{ "root@kw=foo", "root@kw=foo", "root@kw=foo" },
@@ -4916,6 +4969,69 @@ void LocaleTest::TestCanonicalize(void)
// ICU-21344
{ "ku-Arab-NT", "ku-Arab-IQ"},
+
+ // ICU-21402
+ { "und-u-rg-no23", "und-u-rg-no50"},
+ { "und-u-rg-cn11", "und-u-rg-cnbj"},
+ { "und-u-rg-cz10a", "und-u-rg-cz110"},
+ { "und-u-rg-fra", "und-u-rg-frges"},
+ { "und-u-rg-frg", "und-u-rg-frges"},
+ { "und-u-rg-lud", "und-u-rg-lucl"},
+
+ { "und-NO-u-sd-no23", "und-NO-u-sd-no50"},
+ { "und-CN-u-sd-cn11", "und-CN-u-sd-cnbj"},
+ { "und-CZ-u-sd-cz10a", "und-CZ-u-sd-cz110"},
+ { "und-FR-u-sd-fra", "und-FR-u-sd-frges"},
+ { "und-FR-u-sd-frg", "und-FR-u-sd-frges"},
+ { "und-LU-u-sd-lud", "und-LU-u-sd-lucl"},
+
+ // ICU-21550
+ { "und-u-rg-fi01", "und-u-rg-axzzzz"},
+ { "und-u-rg-frcp", "und-u-rg-cpzzzz"},
+ { "und-u-rg-frpm", "und-u-rg-pmzzzz"},
+ { "und-u-rg-usvi", "und-u-rg-vizzzz"},
+ { "und-u-rg-cn91", "und-u-rg-hkzzzz"},
+ { "und-u-rg-nlaw", "und-u-rg-awzzzz"},
+
+ { "und-NO-u-sd-frre", "und-NO-u-sd-rezzzz"},
+ { "und-CN-u-sd-nlcw", "und-CN-u-sd-cwzzzz"},
+ { "und-CZ-u-sd-usgu", "und-CZ-u-sd-guzzzz"},
+ { "und-FR-u-sd-shta", "und-FR-u-sd-tazzzz"},
+ { "und-FR-u-sd-cn71", "und-FR-u-sd-twzzzz"},
+
+
+ // ICU-21401
+ { "cel-gaulish", "xtg"},
+
+ // ICU-21406
+ // Inside T extension
+ // Case of Script and Region
+ { "ja-kana-jp-t-it-latn-it", "ja-Kana-JP-t-it-latn-it"},
+ { "und-t-zh-hani-tw", "und-t-zh-hani-tw"},
+ { "und-cyrl-t-und-Latn", "und-Cyrl-t-und-latn"},
+ // Order of singleton
+ { "und-u-ca-roc-t-zh", "und-t-zh-u-ca-roc"},
+ // Variant subtags are alphabetically ordered.
+ { "sl-t-sl-rozaj-biske-1994", "sl-t-sl-1994-biske-rozaj"},
+ // tfield subtags are alphabetically ordered.
+ // (Also tests subtag case normalisation.)
+ { "DE-T-lv-M0-DIN", "de-t-lv-m0-din"},
+ { "DE-T-M0-DIN-K0-QWERTZ", "de-t-k0-qwertz-m0-din"},
+ { "DE-T-lv-M0-DIN-K0-QWERTZ", "de-t-lv-k0-qwertz-m0-din"},
+ // "true" tvalue subtags aren't removed.
+ // (UTS 35 version 36, §3.2.1 claims otherwise, but tkey must be followed by
+ // tvalue, so that's likely a spec bug in UTS 35.)
+ { "en-t-m0-true", "en-t-m0-true"},
+ // tlang subtags are canonicalised.
+ { "en-t-iw", "en-t-he"},
+ { "en-t-hy-latn-SU", "en-t-hy-latn-am"},
+ { "ru-t-ru-cyrl-SU", "ru-t-ru-cyrl-ru"},
+ { "fr-t-fr-172", "fr-t-fr-ru"},
+ { "und-t-no-latn-BOKMAL", "und-t-nb-latn" },
+ { "und-t-sgn-qAAi-NL", "und-t-dse-zinh" },
+ // alias of tvalue should be replaced
+ { "en-t-m0-NaMeS", "en-t-m0-prprname" },
+ { "en-t-s0-ascii-d0-NaMe", "en-t-d0-charname-s0-ascii" },
};
int32_t i;
for (i=0; i < UPRV_LENGTHOF(testCases); i++) {
@@ -5535,6 +5651,51 @@ void LocaleTest::TestForLanguageTag() {
Locale result_ext = Locale::forLanguageTag(tag_ext, status);
status.errIfFailureAndReset("\"%s\"", tag_ext);
assertEquals(tag_ext, loc_ext.getName(), result_ext.getName());
+
+ static const struct {
+ const char *inputTag; /* input */
+ const char *expectedID; /* expected forLanguageTag().getName() result */
+ } testCases[] = {
+ // ICU-21433
+ {"und-1994-biske-rozaj", "__1994_BISKE_ROZAJ"},
+ {"de-1994-biske-rozaj", "de__1994_BISKE_ROZAJ"},
+ {"und-x-private", "@x=private"},
+ {"de-1994-biske-rozaj-x-private", "de__1994_BISKE_ROZAJ@x=private"},
+ {"und-1994-biske-rozaj-x-private", "__1994_BISKE_ROZAJ@x=private"},
+ };
+ int32_t i;
+ for (i=0; i < UPRV_LENGTHOF(testCases); i++) {
+ UErrorCode status = U_ZERO_ERROR;
+ std::string otag = testCases[i].inputTag;
+ std::string tag = Locale::forLanguageTag(otag.c_str(), status).getName();
+ if (tag != testCases[i].expectedID) {
+ errcheckln(status, "FAIL: %s should be toLanguageTag to %s but got %s - %s",
+ otag.c_str(),
+ testCases[i].expectedID,
+ tag.c_str(),
+ u_errorName(status));
+ }
+ }
+}
+
+void LocaleTest::TestForLanguageTagLegacyTagBug21676() {
+ IcuTestErrorCode status(*this, "TestForLanguageTagLegacyTagBug21676()");
+ std::string tag(
+ "i-enochian-1nochian-129-515VNTR-64863775-X3il6-110Y101-29-515VNTR-"
+ "64863775-153zu-u-Y4-H0-t6-X3-u6-110Y101-X");
+ std::string input(tag);
+ input += "EXTRA MEMORY AFTER NON-NULL TERMINATED STRING";
+ StringPiece stringp(input.c_str(), tag.length());
+ std::string name = Locale::forLanguageTag(stringp, status).getName();
+ std::string expected(
+ "@x=i-enochian-1nochian-129-515vntr-64863775-x3il6-110y101-29-515vntr-"
+ "64863775-153zu-u-y4-h0-t6-x3-u6-110y101-x");
+ if (name != expected) {
+ errcheckln(
+ status,
+ "FAIL: forLanguageTag('%s', \n%d).getName() should be \n'%s' but got %s",
+ tag.c_str(), tag.length(), expected.c_str(), name.c_str());
+ }
}
void LocaleTest::TestToLanguageTag() {
@@ -5594,6 +5755,33 @@ void LocaleTest::TestToLanguageTag() {
std::string result_bogus = loc_bogus.toLanguageTag<std::string>(status);
assertEquals("bogus", U_ILLEGAL_ARGUMENT_ERROR, status.reset());
assertTrue(result_bogus.c_str(), result_bogus.empty());
+
+ static const struct {
+ const char *localeID; /* input */
+ const char *expectedID; /* expected toLanguageTag() result */
+ } testCases[] = {
+ /* ICU-21414 */
+ {"und-x-abc-private", "und-x-abc-private"},
+ {"und-x-private", "und-x-private"},
+ {"und-u-ca-roc-x-private", "und-u-ca-roc-x-private"},
+ {"und-US-x-private", "und-US-x-private"},
+ {"und-Latn-x-private", "und-Latn-x-private"},
+ {"und-1994-biske-rozaj", "und-1994-biske-rozaj"},
+ {"und-1994-biske-rozaj-x-private", "und-1994-biske-rozaj-x-private"},
+ };
+ int32_t i;
+ for (i=0; i < UPRV_LENGTHOF(testCases); i++) {
+ UErrorCode status = U_ZERO_ERROR;
+ std::string otag = testCases[i].localeID;
+ std::string tag = Locale::forLanguageTag(otag.c_str(), status).toLanguageTag<std::string>(status);
+ if (tag != testCases[i].expectedID) {
+ errcheckln(status, "FAIL: %s should be toLanguageTag to %s but got %s - %s",
+ otag.c_str(),
+ testCases[i].expectedID,
+ tag.c_str(),
+ u_errorName(status));
+ }
+ }
}
/* ICU-20310 */
@@ -6355,6 +6543,30 @@ void LocaleTest::TestSetUnicodeKeywordValueInLongLocale() {
}
}
+void LocaleTest::TestLongLocaleSetKeywordAssign() {
+ IcuTestErrorCode status(*this, "TestLongLocaleSetKeywordAssign");
+ // A long base name, with an illegal keyword and copy constructor
+ icu::Locale l("de_AAAAAAA1_AAAAAAA2_AAAAAAA3_AAAAAAA4_AAAAAAA5_AAAAAAA6_"
+ "AAAAAAA7_AAAAAAA8_AAAAAAA9_AAAAAA10_AAAAAA11_AAAAAA12_"
+ "AAAAAA13_AAAAAA14_AAAAAA15_AAAAAA16_AAAAAA17_AAAAAA18");
+ Locale l2;
+ l.setUnicodeKeywordValue("co", "12", status); // Cause an error
+ status.reset();
+ l2 = l; // copy operator on such bogus locale.
+}
+
+void LocaleTest::TestLongLocaleSetKeywordMoveAssign() {
+ IcuTestErrorCode status(*this, "TestLongLocaleSetKeywordMoveAssign");
+ // A long base name, with an illegal keyword and copy constructor
+ icu::Locale l("de_AAAAAAA1_AAAAAAA2_AAAAAAA3_AAAAAAA4_AAAAAAA5_AAAAAAA6_"
+ "AAAAAAA7_AAAAAAA8_AAAAAAA9_AAAAAA10_AAAAAA11_AAAAAA12_"
+ "AAAAAA13_AAAAAA14_AAAAAA15_AAAAAA16_AAAAAA17");
+ Locale l2;
+ l.setUnicodeKeywordValue("co", "12", status); // Cause an error
+ status.reset();
+ Locale l3 = std::move(l); // move assign
+}
+
void LocaleTest::TestSetUnicodeKeywordValueNullInLongLocale() {
IcuTestErrorCode status(*this, "TestSetUnicodeKeywordValueNullInLongLocale");
const char *exts[] = {"cf", "cu", "em", "kk", "kr", "ks", "kv", "lb", "lw",
@@ -6395,3 +6607,10 @@ void LocaleTest::TestLeak21419() {
l.canonicalize(status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
}
+
+void LocaleTest::TestNullDereferenceWrite21597() {
+ IcuTestErrorCode status(*this, "TestNullDereferenceWrite21597");
+ Locale l = Locale("zu-t-q5-X1-vKf-KK-Ks-cO--Kc");
+ l.canonicalize(status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h b/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
index 1fba6d94f56..316f14e89f1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
@@ -17,7 +17,7 @@ public:
LocaleTest();
virtual ~LocaleTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
/**
* Test methods to set and get data fields
@@ -82,8 +82,10 @@ public:
void TestKeywordVariantParsing(void);
void TestCreateKeywordSet(void);
void TestCreateKeywordSetEmpty(void);
+ void TestCreateKeywordSetWithPrivateUse(void);
void TestCreateUnicodeKeywordSet(void);
void TestCreateUnicodeKeywordSetEmpty(void);
+ void TestCreateUnicodeKeywordSetWithPrivateUse(void);
void TestGetKeywordValueStdString(void);
void TestGetUnicodeKeywordValueStdString(void);
@@ -131,6 +133,7 @@ public:
void TestAddLikelyAndMinimizeSubtags();
void TestForLanguageTag();
+ void TestForLanguageTagLegacyTagBug21676();
void TestToLanguageTag();
void TestToLanguageTagOmitTrue();
@@ -154,6 +157,9 @@ public:
void TestSetUnicodeKeywordValueInLongLocale();
void TestSetUnicodeKeywordValueNullInLongLocale();
void TestLeak21419();
+ void TestNullDereferenceWrite21597();
+ void TestLongLocaleSetKeywordAssign();
+ void TestLongLocaleSetKeywordMoveAssign();
private:
void _checklocs(const char* label,
@@ -168,7 +174,7 @@ private:
**/
void doTestDisplayNames(Locale& inLocale, int32_t compareIndex);
/**
- * additional intialization for datatables storing expected values
+ * additional initialization for datatables storing expected values
**/
void setUpDataTable(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.cpp
new file mode 100644
index 00000000000..6c5d5d0ad61
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.cpp
@@ -0,0 +1,296 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#include "lstmbetst.h"
+#include "lstmbe.h"
+
+#include <algorithm>
+#include <sstream>
+#include <vector>
+
+#include "charstr.h"
+
+//---------------------------------------------
+// runIndexedTest
+//---------------------------------------------
+
+
+void LSTMBETest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* params )
+{
+ fTestParams = params;
+
+ TESTCASE_AUTO_BEGIN;
+
+ TESTCASE_AUTO(TestThaiGraphclust);
+ TESTCASE_AUTO(TestThaiCodepoints);
+ TESTCASE_AUTO(TestBurmeseGraphclust);
+ TESTCASE_AUTO(TestThaiGraphclustWithLargeMemory);
+ TESTCASE_AUTO(TestThaiCodepointsWithLargeMemory);
+
+ TESTCASE_AUTO_END;
+}
+
+
+//--------------------------------------------------------------------------------------
+//
+// LSTMBETest constructor and destructor
+//
+//--------------------------------------------------------------------------------------
+
+LSTMBETest::LSTMBETest() {
+ fTestParams = NULL;
+}
+
+
+LSTMBETest::~LSTMBETest() {
+}
+
+UScriptCode getScriptFromModelName(const std::string& modelName) {
+ if (modelName.find("Thai") == 0) {
+ return USCRIPT_THAI;
+ } else if (modelName.find("Burmese") == 0) {
+ return USCRIPT_MYANMAR;
+ }
+ // Add for other script codes.
+ UPRV_UNREACHABLE_EXIT;
+}
+
+// Read file generated by
+// https://github.com/unicode-org/lstm_word_segmentation/blob/master/segment_text.py
+// as test cases and compare the Output.
+// Format of the file
+// Model:\t[Model Name (such as 'Thai_graphclust_model4_heavy')]
+// Embedding:\t[Embedding type (such as 'grapheme_clusters_tf')]
+// Input:\t[source text]
+// Output:\t[expected output separated by | ]
+// Input: ...
+// Output: ...
+// The test will ensure the Input contains only the characters can be handled by
+// the model. Since by default the LSTM models are not included, all the tested
+// models need to be included under source/test/testdata.
+
+void LSTMBETest::runTestFromFile(const char* filename) {
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<const LanguageBreakEngine> engine;
+ // Open and read the test data file.
+ const char *testDataDirectory = IntlTest::getSourceTestData(status);
+ CharString testFileName(testDataDirectory, -1, status);
+ testFileName.append(filename, -1, status);
+
+ int len;
+ UChar *testFile = ReadAndConvertFile(testFileName.data(), len, "UTF-8", status);
+ if (U_FAILURE(status)) {
+ errln("%s:%d Error %s opening test file %s", __FILE__, __LINE__, u_errorName(status), filename);
+ return;
+ }
+
+ // Put the test data into a UnicodeString
+ UnicodeString testString(FALSE, testFile, len);
+
+ int32_t start = 0;
+
+ UnicodeString line;
+ int32_t end;
+ std::string actual_sep_str;
+ int32_t caseNum = 0;
+ // Iterate through all the lines in the test file.
+ do {
+ int32_t cr = testString.indexOf(u'\r', start);
+ int32_t lf = testString.indexOf(u'\n', start);
+ end = cr >= 0 ? (lf >= 0 ? std::min(cr, lf) : cr) : lf;
+ line = testString.tempSubString(start, end < 0 ? INT32_MAX : end - start);
+ if (line.length() > 0) {
+ // Separate each line to key and value by TAB.
+ int32_t tab = line.indexOf(u'\t');
+ UnicodeString key = line.tempSubString(0, tab);
+ const UnicodeString value = line.tempSubString(tab+1);
+
+ if (key == "Model:") {
+ std::string modelName;
+ value.toUTF8String<std::string>(modelName);
+ engine.adoptInstead(createEngineFromTestData(modelName.c_str(), getScriptFromModelName(modelName), status));
+ if (U_FAILURE(status)) {
+ dataerrln("Could not CreateLSTMBreakEngine for " + line + UnicodeString(u_errorName(status)));
+ return;
+ }
+ } else if (key == "Input:") {
+ // First, we ensure all the char in the Input lines are accepted
+ // by the engine before we test them.
+ caseNum++;
+ bool canHandleAllChars = true;
+ for (int32_t i = 0; i < value.length(); i++) {
+ if (!engine->handles(value.charAt(i))) {
+ errln(UnicodeString("Test Case#") + caseNum + " contains char '" +
+ UnicodeString(value.charAt(i)) +
+ "' cannot be handled by the engine in offset " + i + "\n" + line);
+ canHandleAllChars = false;
+ break;
+ }
+ }
+ if (! canHandleAllChars) {
+ return;
+ }
+
+ // If the engine can handle all the chars in the Input line, we
+ // then find the break points by calling the engine.
+ std::stringstream ss;
+
+ // Construct the UText which is expected by the the engine as
+ // input from the UnicodeString.
+ UText ut = UTEXT_INITIALIZER;
+ utext_openConstUnicodeString(&ut, &value, &status);
+ if (U_FAILURE(status)) {
+ dataerrln("Could not utext_openConstUnicodeString for " + value + UnicodeString(u_errorName(status)));
+ return;
+ }
+
+ UVector32 actual(status);
+ if (U_FAILURE(status)) {
+ dataerrln("%s:%d Error %s Could not allocate UVextor32", __FILE__, __LINE__, u_errorName(status));
+ return;
+ }
+ engine->findBreaks(&ut, 0, value.length(), actual, status);
+ if (U_FAILURE(status)) {
+ dataerrln("%s:%d Error %s findBreaks failed", __FILE__, __LINE__, u_errorName(status));
+ return;
+ }
+ utext_close(&ut);
+ for (int32_t i = 0; i < actual.size(); i++) {
+ ss << actual.elementAti(i) << ", ";
+ }
+ ss << value.length();
+ // Turn the break points into a string for easy comparison
+ // output.
+ actual_sep_str = "{" + ss.str() + "}";
+ } else if (key == "Output:" && !actual_sep_str.empty()) {
+ std::string d;
+ int32_t sep;
+ int32_t start = 0;
+ int32_t curr = 0;
+ std::stringstream ss;
+ while ((sep = value.indexOf(u'|', start)) >= 0) {
+ int32_t len = sep - start;
+ if (len > 0) {
+ if (curr > 0) {
+ ss << ", ";
+ }
+ curr += len;
+ ss << curr;
+ }
+ start = sep + 1;
+ }
+ // Turn the break points into a string for easy comparison
+ // output.
+ std::string expected = "{" + ss.str() + "}";
+ std::string utf8;
+
+ assertEquals((value + " Test Case#" + caseNum).toUTF8String<std::string>(utf8).c_str(),
+ expected.c_str(), actual_sep_str.c_str());
+ actual_sep_str.clear();
+ }
+ }
+ start = std::max(cr, lf) + 1;
+ } while (end >= 0);
+
+ delete [] testFile;
+}
+
+void LSTMBETest::TestThaiGraphclust() {
+ runTestFromFile("Thai_graphclust_model4_heavy_Test.txt");
+}
+
+void LSTMBETest::TestThaiCodepoints() {
+ runTestFromFile("Thai_codepoints_exclusive_model5_heavy_Test.txt");
+}
+
+void LSTMBETest::TestBurmeseGraphclust() {
+ runTestFromFile("Burmese_graphclust_model5_heavy_Test.txt");
+}
+
+const LanguageBreakEngine* LSTMBETest::createEngineFromTestData(
+ const char* model, UScriptCode script, UErrorCode& status) {
+ const char* testdatapath=loadTestData(status);
+ if(U_FAILURE(status))
+ {
+ dataerrln("Could not load testdata.dat " + UnicodeString(testdatapath) + ", " +
+ UnicodeString(u_errorName(status)));
+ return nullptr;
+ }
+
+ LocalUResourceBundlePointer rb(
+ ures_openDirect(testdatapath, model, &status));
+ if (U_FAILURE(status)) {
+ dataerrln("Could not open " + UnicodeString(model) + " under " + UnicodeString(testdatapath) + ", " +
+ UnicodeString(u_errorName(status)));
+ return nullptr;
+ }
+
+ const LSTMData* data = CreateLSTMData(rb.orphan(), status);
+ if (U_FAILURE(status)) {
+ dataerrln("Could not CreateLSTMData " + UnicodeString(model) + " under " + UnicodeString(testdatapath) + ", " +
+ UnicodeString(u_errorName(status)));
+ return nullptr;
+ }
+ if (data == nullptr) {
+ return nullptr;
+ }
+
+ LocalPointer<const LanguageBreakEngine> engine(CreateLSTMBreakEngine(script, data, status));
+ if (U_FAILURE(status) || engine.getAlias() == nullptr) {
+ dataerrln("Could not CreateLSTMBreakEngine " + UnicodeString(testdatapath) + ", " +
+ UnicodeString(u_errorName(status)));
+ DeleteLSTMData(data);
+ return nullptr;
+ }
+ return engine.orphan();
+}
+
+
+void LSTMBETest::TestThaiGraphclustWithLargeMemory() {
+ runTestWithLargeMemory("Thai_graphclust_model4_heavy", USCRIPT_THAI);
+
+}
+
+void LSTMBETest::TestThaiCodepointsWithLargeMemory() {
+ runTestWithLargeMemory("Thai_codepoints_exclusive_model5_heavy", USCRIPT_THAI);
+}
+
+constexpr int32_t MEMORY_TEST_THESHOLD_SHORT = 2 * 1024; // 2 K Unicode Chars.
+constexpr int32_t MEMORY_TEST_THESHOLD = 32 * 1024; // 32 K Unicode Chars.
+
+// Test with very long unicode string.
+void LSTMBETest::runTestWithLargeMemory( const char* model, UScriptCode script) {
+ UErrorCode status = U_ZERO_ERROR;
+ int32_t test_threshold = quick ? MEMORY_TEST_THESHOLD_SHORT : MEMORY_TEST_THESHOLD;
+ LocalPointer<const LanguageBreakEngine> engine(
+ createEngineFromTestData(model, script, status));
+ if (U_FAILURE(status)) {
+ dataerrln("Could not CreateLSTMBreakEngine for " + UnicodeString(model) + UnicodeString(u_errorName(status)));
+ return;
+ }
+ UnicodeString text(u"อ"); // start with a single Thai char.
+ UVector32 actual(status);
+ if (U_FAILURE(status)) {
+ dataerrln("%s:%d Error %s Could not allocate UVextor32", __FILE__, __LINE__, u_errorName(status));
+ return;
+ }
+ while (U_SUCCESS(status) && text.length() <= test_threshold) {
+ // Construct the UText which is expected by the the engine as
+ // input from the UnicodeString.
+ UText ut = UTEXT_INITIALIZER;
+ utext_openConstUnicodeString(&ut, &text, &status);
+ if (U_FAILURE(status)) {
+ dataerrln("Could not utext_openConstUnicodeString for " + text + UnicodeString(u_errorName(status)));
+ return;
+ }
+
+ engine->findBreaks(&ut, 0, text.length(), actual, status);
+ utext_close(&ut);
+ text += text;
+ }
+}
+#endif // #if !UCONFIG_NO_BREAK_ITERATION
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.h b/Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.h
new file mode 100644
index 00000000000..dd675ceae68
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/lstmbetst.h
@@ -0,0 +1,52 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#ifndef LSTMBETEST_H
+#define LSTMBETEST_H
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#include <memory>
+
+#include "intltest.h"
+
+#include "unicode/uscript.h"
+
+struct TestParams;
+
+U_NAMESPACE_BEGIN
+class LanguageBreakEngine;
+U_NAMESPACE_END
+
+
+/**
+ * Test the LSTMBreakEngine class giving different rules
+ */
+class LSTMBETest: public IntlTest {
+public:
+
+ LSTMBETest();
+ virtual ~LSTMBETest();
+
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
+
+ void TestThaiGraphclust();
+ void TestThaiCodepoints();
+ void TestBurmeseGraphclust();
+ void TestThaiGraphclustWithLargeMemory();
+ void TestThaiCodepointsWithLargeMemory();
+
+private:
+ const LanguageBreakEngine* createEngineFromTestData(const char* model, UScriptCode script, UErrorCode& status);
+ void runTestFromFile(const char* filename);
+ void runTestWithLargeMemory(const char* model, UScriptCode script);
+
+ // Test parameters, from the test framework and test invocation.
+ const char* fTestParams;
+};
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
+#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
index 7d5330f6657..003804db9a4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
@@ -19,6 +19,7 @@
#include "charstr.h"
#include "cstr.h"
+#include "cstring.h"
#include "measunit_impl.h"
#include "unicode/decimfmt.h"
#include "unicode/measfmt.h"
@@ -42,7 +43,7 @@ public:
MeasureFormatTest() {
}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void TestBasic();
void TestCompatible53();
@@ -56,6 +57,8 @@ private:
void TestCompatible64();
void TestCompatible65();
void TestCompatible68();
+ void TestCompatible69();
+ void TestCompatible70();
void TestGetAvailable();
void TestExamplesInDocs();
void TestFormatPeriodEn();
@@ -83,6 +86,9 @@ private:
void TestNumericTimeSomeSpecialFormats();
void TestIdentifiers();
void TestInvalidIdentifiers();
+ void TestIdentifierDetails();
+ void TestPrefixes();
+ void TestParseBuiltIns();
void TestParseToBuiltIn();
void TestKilogramIdentifier();
void TestCompoundUnitOperations();
@@ -152,7 +158,7 @@ private:
int32_t end);
void verifySingleUnit(
const MeasureUnit& unit,
- UMeasureSIPrefix siPrefix,
+ UMeasurePrefix unitPrefix,
int8_t power,
const char* identifier);
void verifyCompoundUnit(
@@ -185,6 +191,8 @@ void MeasureFormatTest::runIndexedTest(
TESTCASE_AUTO(TestCompatible64);
TESTCASE_AUTO(TestCompatible65);
TESTCASE_AUTO(TestCompatible68);
+ TESTCASE_AUTO(TestCompatible69);
+ TESTCASE_AUTO(TestCompatible70);
TESTCASE_AUTO(TestGetAvailable);
TESTCASE_AUTO(TestExamplesInDocs);
TESTCASE_AUTO(TestFormatPeriodEn);
@@ -212,6 +220,9 @@ void MeasureFormatTest::runIndexedTest(
TESTCASE_AUTO(TestNumericTimeSomeSpecialFormats);
TESTCASE_AUTO(TestIdentifiers);
TESTCASE_AUTO(TestInvalidIdentifiers);
+ TESTCASE_AUTO(TestIdentifierDetails);
+ TESTCASE_AUTO(TestPrefixes);
+ TESTCASE_AUTO(TestParseBuiltIns);
TESTCASE_AUTO(TestParseToBuiltIn);
TESTCASE_AUTO(TestKilogramIdentifier);
TESTCASE_AUTO(TestCompoundUnitOperations);
@@ -2295,6 +2306,764 @@ void MeasureFormatTest::TestCompatible68() {
assertSuccess("", status);
}
+void MeasureFormatTest::TestCompatible69() {
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<MeasureUnit> measureUnit;
+ MeasureUnit measureUnitValue;
+ measureUnit.adoptInstead(MeasureUnit::createGForce(status));
+ measureUnitValue = MeasureUnit::getGForce();
+ measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
+ measureUnitValue = MeasureUnit::getMeterPerSecondSquared();
+ measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
+ measureUnitValue = MeasureUnit::getArcMinute();
+ measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
+ measureUnitValue = MeasureUnit::getArcSecond();
+ measureUnit.adoptInstead(MeasureUnit::createDegree(status));
+ measureUnitValue = MeasureUnit::getDegree();
+ measureUnit.adoptInstead(MeasureUnit::createRadian(status));
+ measureUnitValue = MeasureUnit::getRadian();
+ measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
+ measureUnitValue = MeasureUnit::getRevolutionAngle();
+ measureUnit.adoptInstead(MeasureUnit::createAcre(status));
+ measureUnitValue = MeasureUnit::getAcre();
+ measureUnit.adoptInstead(MeasureUnit::createDunam(status));
+ measureUnitValue = MeasureUnit::getDunam();
+ measureUnit.adoptInstead(MeasureUnit::createHectare(status));
+ measureUnitValue = MeasureUnit::getHectare();
+ measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
+ measureUnitValue = MeasureUnit::getSquareCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
+ measureUnitValue = MeasureUnit::getSquareFoot();
+ measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
+ measureUnitValue = MeasureUnit::getSquareInch();
+ measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
+ measureUnitValue = MeasureUnit::getSquareKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
+ measureUnitValue = MeasureUnit::getSquareMeter();
+ measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
+ measureUnitValue = MeasureUnit::getSquareMile();
+ measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
+ measureUnitValue = MeasureUnit::getSquareYard();
+ measureUnit.adoptInstead(MeasureUnit::createKarat(status));
+ measureUnitValue = MeasureUnit::getKarat();
+ measureUnit.adoptInstead(MeasureUnit::createMilligramOfglucosePerDeciliter(status));
+ measureUnitValue = MeasureUnit::getMilligramOfglucosePerDeciliter();
+ measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
+ measureUnitValue = MeasureUnit::getMilligramPerDeciliter();
+ measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
+ measureUnitValue = MeasureUnit::getMillimolePerLiter();
+ measureUnit.adoptInstead(MeasureUnit::createMole(status));
+ measureUnitValue = MeasureUnit::getMole();
+ measureUnit.adoptInstead(MeasureUnit::createPercent(status));
+ measureUnitValue = MeasureUnit::getPercent();
+ measureUnit.adoptInstead(MeasureUnit::createPermille(status));
+ measureUnitValue = MeasureUnit::getPermille();
+ measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
+ measureUnitValue = MeasureUnit::getPartPerMillion();
+ measureUnit.adoptInstead(MeasureUnit::createPermyriad(status));
+ measureUnitValue = MeasureUnit::getPermyriad();
+ measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
+ measureUnitValue = MeasureUnit::getLiterPer100Kilometers();
+ measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
+ measureUnitValue = MeasureUnit::getLiterPerKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
+ measureUnitValue = MeasureUnit::getMilePerGallon();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
+ measureUnitValue = MeasureUnit::getMilePerGallonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createBit(status));
+ measureUnitValue = MeasureUnit::getBit();
+ measureUnit.adoptInstead(MeasureUnit::createByte(status));
+ measureUnitValue = MeasureUnit::getByte();
+ measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
+ measureUnitValue = MeasureUnit::getGigabit();
+ measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
+ measureUnitValue = MeasureUnit::getGigabyte();
+ measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
+ measureUnitValue = MeasureUnit::getKilobit();
+ measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
+ measureUnitValue = MeasureUnit::getKilobyte();
+ measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
+ measureUnitValue = MeasureUnit::getMegabit();
+ measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
+ measureUnitValue = MeasureUnit::getMegabyte();
+ measureUnit.adoptInstead(MeasureUnit::createPetabyte(status));
+ measureUnitValue = MeasureUnit::getPetabyte();
+ measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
+ measureUnitValue = MeasureUnit::getTerabit();
+ measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
+ measureUnitValue = MeasureUnit::getTerabyte();
+ measureUnit.adoptInstead(MeasureUnit::createCentury(status));
+ measureUnitValue = MeasureUnit::getCentury();
+ measureUnit.adoptInstead(MeasureUnit::createDay(status));
+ measureUnitValue = MeasureUnit::getDay();
+ measureUnit.adoptInstead(MeasureUnit::createDayPerson(status));
+ measureUnitValue = MeasureUnit::getDayPerson();
+ measureUnit.adoptInstead(MeasureUnit::createDecade(status));
+ measureUnitValue = MeasureUnit::getDecade();
+ measureUnit.adoptInstead(MeasureUnit::createHour(status));
+ measureUnitValue = MeasureUnit::getHour();
+ measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
+ measureUnitValue = MeasureUnit::getMicrosecond();
+ measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
+ measureUnitValue = MeasureUnit::getMillisecond();
+ measureUnit.adoptInstead(MeasureUnit::createMinute(status));
+ measureUnitValue = MeasureUnit::getMinute();
+ measureUnit.adoptInstead(MeasureUnit::createMonth(status));
+ measureUnitValue = MeasureUnit::getMonth();
+ measureUnit.adoptInstead(MeasureUnit::createMonthPerson(status));
+ measureUnitValue = MeasureUnit::getMonthPerson();
+ measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
+ measureUnitValue = MeasureUnit::getNanosecond();
+ measureUnit.adoptInstead(MeasureUnit::createSecond(status));
+ measureUnitValue = MeasureUnit::getSecond();
+ measureUnit.adoptInstead(MeasureUnit::createWeek(status));
+ measureUnitValue = MeasureUnit::getWeek();
+ measureUnit.adoptInstead(MeasureUnit::createWeekPerson(status));
+ measureUnitValue = MeasureUnit::getWeekPerson();
+ measureUnit.adoptInstead(MeasureUnit::createYear(status));
+ measureUnitValue = MeasureUnit::getYear();
+ measureUnit.adoptInstead(MeasureUnit::createYearPerson(status));
+ measureUnitValue = MeasureUnit::getYearPerson();
+ measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
+ measureUnitValue = MeasureUnit::getAmpere();
+ measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
+ measureUnitValue = MeasureUnit::getMilliampere();
+ measureUnit.adoptInstead(MeasureUnit::createOhm(status));
+ measureUnitValue = MeasureUnit::getOhm();
+ measureUnit.adoptInstead(MeasureUnit::createVolt(status));
+ measureUnitValue = MeasureUnit::getVolt();
+ measureUnit.adoptInstead(MeasureUnit::createBritishThermalUnit(status));
+ measureUnitValue = MeasureUnit::getBritishThermalUnit();
+ measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
+ measureUnitValue = MeasureUnit::getCalorie();
+ measureUnit.adoptInstead(MeasureUnit::createElectronvolt(status));
+ measureUnitValue = MeasureUnit::getElectronvolt();
+ measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
+ measureUnitValue = MeasureUnit::getFoodcalorie();
+ measureUnit.adoptInstead(MeasureUnit::createJoule(status));
+ measureUnitValue = MeasureUnit::getJoule();
+ measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
+ measureUnitValue = MeasureUnit::getKilocalorie();
+ measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
+ measureUnitValue = MeasureUnit::getKilojoule();
+ measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
+ measureUnitValue = MeasureUnit::getKilowattHour();
+ measureUnit.adoptInstead(MeasureUnit::createThermUs(status));
+ measureUnitValue = MeasureUnit::getThermUs();
+ measureUnit.adoptInstead(MeasureUnit::createNewton(status));
+ measureUnitValue = MeasureUnit::getNewton();
+ measureUnit.adoptInstead(MeasureUnit::createPoundForce(status));
+ measureUnitValue = MeasureUnit::getPoundForce();
+ measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
+ measureUnitValue = MeasureUnit::getGigahertz();
+ measureUnit.adoptInstead(MeasureUnit::createHertz(status));
+ measureUnitValue = MeasureUnit::getHertz();
+ measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
+ measureUnitValue = MeasureUnit::getKilohertz();
+ measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
+ measureUnitValue = MeasureUnit::getMegahertz();
+ measureUnit.adoptInstead(MeasureUnit::createDot(status));
+ measureUnitValue = MeasureUnit::getDot();
+ measureUnit.adoptInstead(MeasureUnit::createDotPerCentimeter(status));
+ measureUnitValue = MeasureUnit::getDotPerCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createDotPerInch(status));
+ measureUnitValue = MeasureUnit::getDotPerInch();
+ measureUnit.adoptInstead(MeasureUnit::createEm(status));
+ measureUnitValue = MeasureUnit::getEm();
+ measureUnit.adoptInstead(MeasureUnit::createMegapixel(status));
+ measureUnitValue = MeasureUnit::getMegapixel();
+ measureUnit.adoptInstead(MeasureUnit::createPixel(status));
+ measureUnitValue = MeasureUnit::getPixel();
+ measureUnit.adoptInstead(MeasureUnit::createPixelPerCentimeter(status));
+ measureUnitValue = MeasureUnit::getPixelPerCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createPixelPerInch(status));
+ measureUnitValue = MeasureUnit::getPixelPerInch();
+ measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
+ measureUnitValue = MeasureUnit::getAstronomicalUnit();
+ measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
+ measureUnitValue = MeasureUnit::getCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
+ measureUnitValue = MeasureUnit::getDecimeter();
+ measureUnit.adoptInstead(MeasureUnit::createEarthRadius(status));
+ measureUnitValue = MeasureUnit::getEarthRadius();
+ measureUnit.adoptInstead(MeasureUnit::createFathom(status));
+ measureUnitValue = MeasureUnit::getFathom();
+ measureUnit.adoptInstead(MeasureUnit::createFoot(status));
+ measureUnitValue = MeasureUnit::getFoot();
+ measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
+ measureUnitValue = MeasureUnit::getFurlong();
+ measureUnit.adoptInstead(MeasureUnit::createInch(status));
+ measureUnitValue = MeasureUnit::getInch();
+ measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
+ measureUnitValue = MeasureUnit::getKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
+ measureUnitValue = MeasureUnit::getLightYear();
+ measureUnit.adoptInstead(MeasureUnit::createMeter(status));
+ measureUnitValue = MeasureUnit::getMeter();
+ measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
+ measureUnitValue = MeasureUnit::getMicrometer();
+ measureUnit.adoptInstead(MeasureUnit::createMile(status));
+ measureUnitValue = MeasureUnit::getMile();
+ measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
+ measureUnitValue = MeasureUnit::getMileScandinavian();
+ measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
+ measureUnitValue = MeasureUnit::getMillimeter();
+ measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
+ measureUnitValue = MeasureUnit::getNanometer();
+ measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
+ measureUnitValue = MeasureUnit::getNauticalMile();
+ measureUnit.adoptInstead(MeasureUnit::createParsec(status));
+ measureUnitValue = MeasureUnit::getParsec();
+ measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
+ measureUnitValue = MeasureUnit::getPicometer();
+ measureUnit.adoptInstead(MeasureUnit::createPoint(status));
+ measureUnitValue = MeasureUnit::getPoint();
+ measureUnit.adoptInstead(MeasureUnit::createSolarRadius(status));
+ measureUnitValue = MeasureUnit::getSolarRadius();
+ measureUnit.adoptInstead(MeasureUnit::createYard(status));
+ measureUnitValue = MeasureUnit::getYard();
+ measureUnit.adoptInstead(MeasureUnit::createCandela(status));
+ measureUnitValue = MeasureUnit::getCandela();
+ measureUnit.adoptInstead(MeasureUnit::createLumen(status));
+ measureUnitValue = MeasureUnit::getLumen();
+ measureUnit.adoptInstead(MeasureUnit::createLux(status));
+ measureUnitValue = MeasureUnit::getLux();
+ measureUnit.adoptInstead(MeasureUnit::createSolarLuminosity(status));
+ measureUnitValue = MeasureUnit::getSolarLuminosity();
+ measureUnit.adoptInstead(MeasureUnit::createCarat(status));
+ measureUnitValue = MeasureUnit::getCarat();
+ measureUnit.adoptInstead(MeasureUnit::createDalton(status));
+ measureUnitValue = MeasureUnit::getDalton();
+ measureUnit.adoptInstead(MeasureUnit::createEarthMass(status));
+ measureUnitValue = MeasureUnit::getEarthMass();
+ measureUnit.adoptInstead(MeasureUnit::createGrain(status));
+ measureUnitValue = MeasureUnit::getGrain();
+ measureUnit.adoptInstead(MeasureUnit::createGram(status));
+ measureUnitValue = MeasureUnit::getGram();
+ measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
+ measureUnitValue = MeasureUnit::getKilogram();
+ measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
+ measureUnitValue = MeasureUnit::getMetricTon();
+ measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
+ measureUnitValue = MeasureUnit::getMicrogram();
+ measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
+ measureUnitValue = MeasureUnit::getMilligram();
+ measureUnit.adoptInstead(MeasureUnit::createOunce(status));
+ measureUnitValue = MeasureUnit::getOunce();
+ measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
+ measureUnitValue = MeasureUnit::getOunceTroy();
+ measureUnit.adoptInstead(MeasureUnit::createPound(status));
+ measureUnitValue = MeasureUnit::getPound();
+ measureUnit.adoptInstead(MeasureUnit::createSolarMass(status));
+ measureUnitValue = MeasureUnit::getSolarMass();
+ measureUnit.adoptInstead(MeasureUnit::createStone(status));
+ measureUnitValue = MeasureUnit::getStone();
+ measureUnit.adoptInstead(MeasureUnit::createTon(status));
+ measureUnitValue = MeasureUnit::getTon();
+ measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
+ measureUnitValue = MeasureUnit::getGigawatt();
+ measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
+ measureUnitValue = MeasureUnit::getHorsepower();
+ measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
+ measureUnitValue = MeasureUnit::getKilowatt();
+ measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
+ measureUnitValue = MeasureUnit::getMegawatt();
+ measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
+ measureUnitValue = MeasureUnit::getMilliwatt();
+ measureUnit.adoptInstead(MeasureUnit::createWatt(status));
+ measureUnitValue = MeasureUnit::getWatt();
+ measureUnit.adoptInstead(MeasureUnit::createAtmosphere(status));
+ measureUnitValue = MeasureUnit::getAtmosphere();
+ measureUnit.adoptInstead(MeasureUnit::createBar(status));
+ measureUnitValue = MeasureUnit::getBar();
+ measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
+ measureUnitValue = MeasureUnit::getHectopascal();
+ measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
+ measureUnitValue = MeasureUnit::getInchHg();
+ measureUnit.adoptInstead(MeasureUnit::createKilopascal(status));
+ measureUnitValue = MeasureUnit::getKilopascal();
+ measureUnit.adoptInstead(MeasureUnit::createMegapascal(status));
+ measureUnitValue = MeasureUnit::getMegapascal();
+ measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
+ measureUnitValue = MeasureUnit::getMillibar();
+ measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
+ measureUnitValue = MeasureUnit::getMillimeterOfMercury();
+ measureUnit.adoptInstead(MeasureUnit::createPascal(status));
+ measureUnitValue = MeasureUnit::getPascal();
+ measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
+ measureUnitValue = MeasureUnit::getPoundPerSquareInch();
+ measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
+ measureUnitValue = MeasureUnit::getKilometerPerHour();
+ measureUnit.adoptInstead(MeasureUnit::createKnot(status));
+ measureUnitValue = MeasureUnit::getKnot();
+ measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
+ measureUnitValue = MeasureUnit::getMeterPerSecond();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
+ measureUnitValue = MeasureUnit::getMilePerHour();
+ measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
+ measureUnitValue = MeasureUnit::getCelsius();
+ measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
+ measureUnitValue = MeasureUnit::getFahrenheit();
+ measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
+ measureUnitValue = MeasureUnit::getGenericTemperature();
+ measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
+ measureUnitValue = MeasureUnit::getKelvin();
+ measureUnit.adoptInstead(MeasureUnit::createNewtonMeter(status));
+ measureUnitValue = MeasureUnit::getNewtonMeter();
+ measureUnit.adoptInstead(MeasureUnit::createPoundFoot(status));
+ measureUnitValue = MeasureUnit::getPoundFoot();
+ measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
+ measureUnitValue = MeasureUnit::getAcreFoot();
+ measureUnit.adoptInstead(MeasureUnit::createBarrel(status));
+ measureUnitValue = MeasureUnit::getBarrel();
+ measureUnit.adoptInstead(MeasureUnit::createBushel(status));
+ measureUnitValue = MeasureUnit::getBushel();
+ measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
+ measureUnitValue = MeasureUnit::getCentiliter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
+ measureUnitValue = MeasureUnit::getCubicCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
+ measureUnitValue = MeasureUnit::getCubicFoot();
+ measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
+ measureUnitValue = MeasureUnit::getCubicInch();
+ measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
+ measureUnitValue = MeasureUnit::getCubicKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
+ measureUnitValue = MeasureUnit::getCubicMeter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
+ measureUnitValue = MeasureUnit::getCubicMile();
+ measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
+ measureUnitValue = MeasureUnit::getCubicYard();
+ measureUnit.adoptInstead(MeasureUnit::createCup(status));
+ measureUnitValue = MeasureUnit::getCup();
+ measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
+ measureUnitValue = MeasureUnit::getCupMetric();
+ measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
+ measureUnitValue = MeasureUnit::getDeciliter();
+ measureUnit.adoptInstead(MeasureUnit::createDessertSpoon(status));
+ measureUnitValue = MeasureUnit::getDessertSpoon();
+ measureUnit.adoptInstead(MeasureUnit::createDessertSpoonImperial(status));
+ measureUnitValue = MeasureUnit::getDessertSpoonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createDram(status));
+ measureUnitValue = MeasureUnit::getDram();
+ measureUnit.adoptInstead(MeasureUnit::createDrop(status));
+ measureUnitValue = MeasureUnit::getDrop();
+ measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
+ measureUnitValue = MeasureUnit::getFluidOunce();
+ measureUnit.adoptInstead(MeasureUnit::createFluidOunceImperial(status));
+ measureUnitValue = MeasureUnit::getFluidOunceImperial();
+ measureUnit.adoptInstead(MeasureUnit::createGallon(status));
+ measureUnitValue = MeasureUnit::getGallon();
+ measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
+ measureUnitValue = MeasureUnit::getGallonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
+ measureUnitValue = MeasureUnit::getHectoliter();
+ measureUnit.adoptInstead(MeasureUnit::createJigger(status));
+ measureUnitValue = MeasureUnit::getJigger();
+ measureUnit.adoptInstead(MeasureUnit::createLiter(status));
+ measureUnitValue = MeasureUnit::getLiter();
+ measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
+ measureUnitValue = MeasureUnit::getMegaliter();
+ measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
+ measureUnitValue = MeasureUnit::getMilliliter();
+ measureUnit.adoptInstead(MeasureUnit::createPinch(status));
+ measureUnitValue = MeasureUnit::getPinch();
+ measureUnit.adoptInstead(MeasureUnit::createPint(status));
+ measureUnitValue = MeasureUnit::getPint();
+ measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
+ measureUnitValue = MeasureUnit::getPintMetric();
+ measureUnit.adoptInstead(MeasureUnit::createQuart(status));
+ measureUnitValue = MeasureUnit::getQuart();
+ measureUnit.adoptInstead(MeasureUnit::createQuartImperial(status));
+ measureUnitValue = MeasureUnit::getQuartImperial();
+ measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
+ measureUnitValue = MeasureUnit::getTablespoon();
+ measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
+ measureUnitValue = MeasureUnit::getTeaspoon();
+ assertSuccess("", status);
+}
+
+void MeasureFormatTest::TestCompatible70() {
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<MeasureUnit> measureUnit;
+ MeasureUnit measureUnitValue;
+ measureUnit.adoptInstead(MeasureUnit::createGForce(status));
+ measureUnitValue = MeasureUnit::getGForce();
+ measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
+ measureUnitValue = MeasureUnit::getMeterPerSecondSquared();
+ measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
+ measureUnitValue = MeasureUnit::getArcMinute();
+ measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
+ measureUnitValue = MeasureUnit::getArcSecond();
+ measureUnit.adoptInstead(MeasureUnit::createDegree(status));
+ measureUnitValue = MeasureUnit::getDegree();
+ measureUnit.adoptInstead(MeasureUnit::createRadian(status));
+ measureUnitValue = MeasureUnit::getRadian();
+ measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
+ measureUnitValue = MeasureUnit::getRevolutionAngle();
+ measureUnit.adoptInstead(MeasureUnit::createAcre(status));
+ measureUnitValue = MeasureUnit::getAcre();
+ measureUnit.adoptInstead(MeasureUnit::createDunam(status));
+ measureUnitValue = MeasureUnit::getDunam();
+ measureUnit.adoptInstead(MeasureUnit::createHectare(status));
+ measureUnitValue = MeasureUnit::getHectare();
+ measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
+ measureUnitValue = MeasureUnit::getSquareCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
+ measureUnitValue = MeasureUnit::getSquareFoot();
+ measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
+ measureUnitValue = MeasureUnit::getSquareInch();
+ measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
+ measureUnitValue = MeasureUnit::getSquareKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
+ measureUnitValue = MeasureUnit::getSquareMeter();
+ measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
+ measureUnitValue = MeasureUnit::getSquareMile();
+ measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
+ measureUnitValue = MeasureUnit::getSquareYard();
+ measureUnit.adoptInstead(MeasureUnit::createItem(status));
+ measureUnitValue = MeasureUnit::getItem();
+ measureUnit.adoptInstead(MeasureUnit::createKarat(status));
+ measureUnitValue = MeasureUnit::getKarat();
+ measureUnit.adoptInstead(MeasureUnit::createMilligramOfglucosePerDeciliter(status));
+ measureUnitValue = MeasureUnit::getMilligramOfglucosePerDeciliter();
+ measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
+ measureUnitValue = MeasureUnit::getMilligramPerDeciliter();
+ measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
+ measureUnitValue = MeasureUnit::getMillimolePerLiter();
+ measureUnit.adoptInstead(MeasureUnit::createMole(status));
+ measureUnitValue = MeasureUnit::getMole();
+ measureUnit.adoptInstead(MeasureUnit::createPercent(status));
+ measureUnitValue = MeasureUnit::getPercent();
+ measureUnit.adoptInstead(MeasureUnit::createPermille(status));
+ measureUnitValue = MeasureUnit::getPermille();
+ measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
+ measureUnitValue = MeasureUnit::getPartPerMillion();
+ measureUnit.adoptInstead(MeasureUnit::createPermyriad(status));
+ measureUnitValue = MeasureUnit::getPermyriad();
+ measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
+ measureUnitValue = MeasureUnit::getLiterPer100Kilometers();
+ measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
+ measureUnitValue = MeasureUnit::getLiterPerKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
+ measureUnitValue = MeasureUnit::getMilePerGallon();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
+ measureUnitValue = MeasureUnit::getMilePerGallonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createBit(status));
+ measureUnitValue = MeasureUnit::getBit();
+ measureUnit.adoptInstead(MeasureUnit::createByte(status));
+ measureUnitValue = MeasureUnit::getByte();
+ measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
+ measureUnitValue = MeasureUnit::getGigabit();
+ measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
+ measureUnitValue = MeasureUnit::getGigabyte();
+ measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
+ measureUnitValue = MeasureUnit::getKilobit();
+ measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
+ measureUnitValue = MeasureUnit::getKilobyte();
+ measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
+ measureUnitValue = MeasureUnit::getMegabit();
+ measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
+ measureUnitValue = MeasureUnit::getMegabyte();
+ measureUnit.adoptInstead(MeasureUnit::createPetabyte(status));
+ measureUnitValue = MeasureUnit::getPetabyte();
+ measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
+ measureUnitValue = MeasureUnit::getTerabit();
+ measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
+ measureUnitValue = MeasureUnit::getTerabyte();
+ measureUnit.adoptInstead(MeasureUnit::createCentury(status));
+ measureUnitValue = MeasureUnit::getCentury();
+ measureUnit.adoptInstead(MeasureUnit::createDay(status));
+ measureUnitValue = MeasureUnit::getDay();
+ measureUnit.adoptInstead(MeasureUnit::createDayPerson(status));
+ measureUnitValue = MeasureUnit::getDayPerson();
+ measureUnit.adoptInstead(MeasureUnit::createDecade(status));
+ measureUnitValue = MeasureUnit::getDecade();
+ measureUnit.adoptInstead(MeasureUnit::createHour(status));
+ measureUnitValue = MeasureUnit::getHour();
+ measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
+ measureUnitValue = MeasureUnit::getMicrosecond();
+ measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
+ measureUnitValue = MeasureUnit::getMillisecond();
+ measureUnit.adoptInstead(MeasureUnit::createMinute(status));
+ measureUnitValue = MeasureUnit::getMinute();
+ measureUnit.adoptInstead(MeasureUnit::createMonth(status));
+ measureUnitValue = MeasureUnit::getMonth();
+ measureUnit.adoptInstead(MeasureUnit::createMonthPerson(status));
+ measureUnitValue = MeasureUnit::getMonthPerson();
+ measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
+ measureUnitValue = MeasureUnit::getNanosecond();
+ measureUnit.adoptInstead(MeasureUnit::createSecond(status));
+ measureUnitValue = MeasureUnit::getSecond();
+ measureUnit.adoptInstead(MeasureUnit::createWeek(status));
+ measureUnitValue = MeasureUnit::getWeek();
+ measureUnit.adoptInstead(MeasureUnit::createWeekPerson(status));
+ measureUnitValue = MeasureUnit::getWeekPerson();
+ measureUnit.adoptInstead(MeasureUnit::createYear(status));
+ measureUnitValue = MeasureUnit::getYear();
+ measureUnit.adoptInstead(MeasureUnit::createYearPerson(status));
+ measureUnitValue = MeasureUnit::getYearPerson();
+ measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
+ measureUnitValue = MeasureUnit::getAmpere();
+ measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
+ measureUnitValue = MeasureUnit::getMilliampere();
+ measureUnit.adoptInstead(MeasureUnit::createOhm(status));
+ measureUnitValue = MeasureUnit::getOhm();
+ measureUnit.adoptInstead(MeasureUnit::createVolt(status));
+ measureUnitValue = MeasureUnit::getVolt();
+ measureUnit.adoptInstead(MeasureUnit::createBritishThermalUnit(status));
+ measureUnitValue = MeasureUnit::getBritishThermalUnit();
+ measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
+ measureUnitValue = MeasureUnit::getCalorie();
+ measureUnit.adoptInstead(MeasureUnit::createElectronvolt(status));
+ measureUnitValue = MeasureUnit::getElectronvolt();
+ measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
+ measureUnitValue = MeasureUnit::getFoodcalorie();
+ measureUnit.adoptInstead(MeasureUnit::createJoule(status));
+ measureUnitValue = MeasureUnit::getJoule();
+ measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
+ measureUnitValue = MeasureUnit::getKilocalorie();
+ measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
+ measureUnitValue = MeasureUnit::getKilojoule();
+ measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
+ measureUnitValue = MeasureUnit::getKilowattHour();
+ measureUnit.adoptInstead(MeasureUnit::createThermUs(status));
+ measureUnitValue = MeasureUnit::getThermUs();
+ measureUnit.adoptInstead(MeasureUnit::createKilowattHourPer100Kilometer(status));
+ measureUnitValue = MeasureUnit::getKilowattHourPer100Kilometer();
+ measureUnit.adoptInstead(MeasureUnit::createNewton(status));
+ measureUnitValue = MeasureUnit::getNewton();
+ measureUnit.adoptInstead(MeasureUnit::createPoundForce(status));
+ measureUnitValue = MeasureUnit::getPoundForce();
+ measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
+ measureUnitValue = MeasureUnit::getGigahertz();
+ measureUnit.adoptInstead(MeasureUnit::createHertz(status));
+ measureUnitValue = MeasureUnit::getHertz();
+ measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
+ measureUnitValue = MeasureUnit::getKilohertz();
+ measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
+ measureUnitValue = MeasureUnit::getMegahertz();
+ measureUnit.adoptInstead(MeasureUnit::createDot(status));
+ measureUnitValue = MeasureUnit::getDot();
+ measureUnit.adoptInstead(MeasureUnit::createDotPerCentimeter(status));
+ measureUnitValue = MeasureUnit::getDotPerCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createDotPerInch(status));
+ measureUnitValue = MeasureUnit::getDotPerInch();
+ measureUnit.adoptInstead(MeasureUnit::createEm(status));
+ measureUnitValue = MeasureUnit::getEm();
+ measureUnit.adoptInstead(MeasureUnit::createMegapixel(status));
+ measureUnitValue = MeasureUnit::getMegapixel();
+ measureUnit.adoptInstead(MeasureUnit::createPixel(status));
+ measureUnitValue = MeasureUnit::getPixel();
+ measureUnit.adoptInstead(MeasureUnit::createPixelPerCentimeter(status));
+ measureUnitValue = MeasureUnit::getPixelPerCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createPixelPerInch(status));
+ measureUnitValue = MeasureUnit::getPixelPerInch();
+ measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
+ measureUnitValue = MeasureUnit::getAstronomicalUnit();
+ measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
+ measureUnitValue = MeasureUnit::getCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
+ measureUnitValue = MeasureUnit::getDecimeter();
+ measureUnit.adoptInstead(MeasureUnit::createEarthRadius(status));
+ measureUnitValue = MeasureUnit::getEarthRadius();
+ measureUnit.adoptInstead(MeasureUnit::createFathom(status));
+ measureUnitValue = MeasureUnit::getFathom();
+ measureUnit.adoptInstead(MeasureUnit::createFoot(status));
+ measureUnitValue = MeasureUnit::getFoot();
+ measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
+ measureUnitValue = MeasureUnit::getFurlong();
+ measureUnit.adoptInstead(MeasureUnit::createInch(status));
+ measureUnitValue = MeasureUnit::getInch();
+ measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
+ measureUnitValue = MeasureUnit::getKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
+ measureUnitValue = MeasureUnit::getLightYear();
+ measureUnit.adoptInstead(MeasureUnit::createMeter(status));
+ measureUnitValue = MeasureUnit::getMeter();
+ measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
+ measureUnitValue = MeasureUnit::getMicrometer();
+ measureUnit.adoptInstead(MeasureUnit::createMile(status));
+ measureUnitValue = MeasureUnit::getMile();
+ measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
+ measureUnitValue = MeasureUnit::getMileScandinavian();
+ measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
+ measureUnitValue = MeasureUnit::getMillimeter();
+ measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
+ measureUnitValue = MeasureUnit::getNanometer();
+ measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
+ measureUnitValue = MeasureUnit::getNauticalMile();
+ measureUnit.adoptInstead(MeasureUnit::createParsec(status));
+ measureUnitValue = MeasureUnit::getParsec();
+ measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
+ measureUnitValue = MeasureUnit::getPicometer();
+ measureUnit.adoptInstead(MeasureUnit::createPoint(status));
+ measureUnitValue = MeasureUnit::getPoint();
+ measureUnit.adoptInstead(MeasureUnit::createSolarRadius(status));
+ measureUnitValue = MeasureUnit::getSolarRadius();
+ measureUnit.adoptInstead(MeasureUnit::createYard(status));
+ measureUnitValue = MeasureUnit::getYard();
+ measureUnit.adoptInstead(MeasureUnit::createCandela(status));
+ measureUnitValue = MeasureUnit::getCandela();
+ measureUnit.adoptInstead(MeasureUnit::createLumen(status));
+ measureUnitValue = MeasureUnit::getLumen();
+ measureUnit.adoptInstead(MeasureUnit::createLux(status));
+ measureUnitValue = MeasureUnit::getLux();
+ measureUnit.adoptInstead(MeasureUnit::createSolarLuminosity(status));
+ measureUnitValue = MeasureUnit::getSolarLuminosity();
+ measureUnit.adoptInstead(MeasureUnit::createCarat(status));
+ measureUnitValue = MeasureUnit::getCarat();
+ measureUnit.adoptInstead(MeasureUnit::createDalton(status));
+ measureUnitValue = MeasureUnit::getDalton();
+ measureUnit.adoptInstead(MeasureUnit::createEarthMass(status));
+ measureUnitValue = MeasureUnit::getEarthMass();
+ measureUnit.adoptInstead(MeasureUnit::createGrain(status));
+ measureUnitValue = MeasureUnit::getGrain();
+ measureUnit.adoptInstead(MeasureUnit::createGram(status));
+ measureUnitValue = MeasureUnit::getGram();
+ measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
+ measureUnitValue = MeasureUnit::getKilogram();
+ measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
+ measureUnitValue = MeasureUnit::getMetricTon();
+ measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
+ measureUnitValue = MeasureUnit::getMicrogram();
+ measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
+ measureUnitValue = MeasureUnit::getMilligram();
+ measureUnit.adoptInstead(MeasureUnit::createOunce(status));
+ measureUnitValue = MeasureUnit::getOunce();
+ measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
+ measureUnitValue = MeasureUnit::getOunceTroy();
+ measureUnit.adoptInstead(MeasureUnit::createPound(status));
+ measureUnitValue = MeasureUnit::getPound();
+ measureUnit.adoptInstead(MeasureUnit::createSolarMass(status));
+ measureUnitValue = MeasureUnit::getSolarMass();
+ measureUnit.adoptInstead(MeasureUnit::createStone(status));
+ measureUnitValue = MeasureUnit::getStone();
+ measureUnit.adoptInstead(MeasureUnit::createTon(status));
+ measureUnitValue = MeasureUnit::getTon();
+ measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
+ measureUnitValue = MeasureUnit::getGigawatt();
+ measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
+ measureUnitValue = MeasureUnit::getHorsepower();
+ measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
+ measureUnitValue = MeasureUnit::getKilowatt();
+ measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
+ measureUnitValue = MeasureUnit::getMegawatt();
+ measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
+ measureUnitValue = MeasureUnit::getMilliwatt();
+ measureUnit.adoptInstead(MeasureUnit::createWatt(status));
+ measureUnitValue = MeasureUnit::getWatt();
+ measureUnit.adoptInstead(MeasureUnit::createAtmosphere(status));
+ measureUnitValue = MeasureUnit::getAtmosphere();
+ measureUnit.adoptInstead(MeasureUnit::createBar(status));
+ measureUnitValue = MeasureUnit::getBar();
+ measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
+ measureUnitValue = MeasureUnit::getHectopascal();
+ measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
+ measureUnitValue = MeasureUnit::getInchHg();
+ measureUnit.adoptInstead(MeasureUnit::createKilopascal(status));
+ measureUnitValue = MeasureUnit::getKilopascal();
+ measureUnit.adoptInstead(MeasureUnit::createMegapascal(status));
+ measureUnitValue = MeasureUnit::getMegapascal();
+ measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
+ measureUnitValue = MeasureUnit::getMillibar();
+ measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
+ measureUnitValue = MeasureUnit::getMillimeterOfMercury();
+ measureUnit.adoptInstead(MeasureUnit::createPascal(status));
+ measureUnitValue = MeasureUnit::getPascal();
+ measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
+ measureUnitValue = MeasureUnit::getPoundPerSquareInch();
+ measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
+ measureUnitValue = MeasureUnit::getKilometerPerHour();
+ measureUnit.adoptInstead(MeasureUnit::createKnot(status));
+ measureUnitValue = MeasureUnit::getKnot();
+ measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
+ measureUnitValue = MeasureUnit::getMeterPerSecond();
+ measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
+ measureUnitValue = MeasureUnit::getMilePerHour();
+ measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
+ measureUnitValue = MeasureUnit::getCelsius();
+ measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
+ measureUnitValue = MeasureUnit::getFahrenheit();
+ measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
+ measureUnitValue = MeasureUnit::getGenericTemperature();
+ measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
+ measureUnitValue = MeasureUnit::getKelvin();
+ measureUnit.adoptInstead(MeasureUnit::createNewtonMeter(status));
+ measureUnitValue = MeasureUnit::getNewtonMeter();
+ measureUnit.adoptInstead(MeasureUnit::createPoundFoot(status));
+ measureUnitValue = MeasureUnit::getPoundFoot();
+ measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
+ measureUnitValue = MeasureUnit::getAcreFoot();
+ measureUnit.adoptInstead(MeasureUnit::createBarrel(status));
+ measureUnitValue = MeasureUnit::getBarrel();
+ measureUnit.adoptInstead(MeasureUnit::createBushel(status));
+ measureUnitValue = MeasureUnit::getBushel();
+ measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
+ measureUnitValue = MeasureUnit::getCentiliter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
+ measureUnitValue = MeasureUnit::getCubicCentimeter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
+ measureUnitValue = MeasureUnit::getCubicFoot();
+ measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
+ measureUnitValue = MeasureUnit::getCubicInch();
+ measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
+ measureUnitValue = MeasureUnit::getCubicKilometer();
+ measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
+ measureUnitValue = MeasureUnit::getCubicMeter();
+ measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
+ measureUnitValue = MeasureUnit::getCubicMile();
+ measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
+ measureUnitValue = MeasureUnit::getCubicYard();
+ measureUnit.adoptInstead(MeasureUnit::createCup(status));
+ measureUnitValue = MeasureUnit::getCup();
+ measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
+ measureUnitValue = MeasureUnit::getCupMetric();
+ measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
+ measureUnitValue = MeasureUnit::getDeciliter();
+ measureUnit.adoptInstead(MeasureUnit::createDessertSpoon(status));
+ measureUnitValue = MeasureUnit::getDessertSpoon();
+ measureUnit.adoptInstead(MeasureUnit::createDessertSpoonImperial(status));
+ measureUnitValue = MeasureUnit::getDessertSpoonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createDram(status));
+ measureUnitValue = MeasureUnit::getDram();
+ measureUnit.adoptInstead(MeasureUnit::createDrop(status));
+ measureUnitValue = MeasureUnit::getDrop();
+ measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
+ measureUnitValue = MeasureUnit::getFluidOunce();
+ measureUnit.adoptInstead(MeasureUnit::createFluidOunceImperial(status));
+ measureUnitValue = MeasureUnit::getFluidOunceImperial();
+ measureUnit.adoptInstead(MeasureUnit::createGallon(status));
+ measureUnitValue = MeasureUnit::getGallon();
+ measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
+ measureUnitValue = MeasureUnit::getGallonImperial();
+ measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
+ measureUnitValue = MeasureUnit::getHectoliter();
+ measureUnit.adoptInstead(MeasureUnit::createJigger(status));
+ measureUnitValue = MeasureUnit::getJigger();
+ measureUnit.adoptInstead(MeasureUnit::createLiter(status));
+ measureUnitValue = MeasureUnit::getLiter();
+ measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
+ measureUnitValue = MeasureUnit::getMegaliter();
+ measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
+ measureUnitValue = MeasureUnit::getMilliliter();
+ measureUnit.adoptInstead(MeasureUnit::createPinch(status));
+ measureUnitValue = MeasureUnit::getPinch();
+ measureUnit.adoptInstead(MeasureUnit::createPint(status));
+ measureUnitValue = MeasureUnit::getPint();
+ measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
+ measureUnitValue = MeasureUnit::getPintMetric();
+ measureUnit.adoptInstead(MeasureUnit::createQuart(status));
+ measureUnitValue = MeasureUnit::getQuart();
+ measureUnit.adoptInstead(MeasureUnit::createQuartImperial(status));
+ measureUnitValue = MeasureUnit::getQuartImperial();
+ measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
+ measureUnitValue = MeasureUnit::getTablespoon();
+ measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
+ measureUnitValue = MeasureUnit::getTeaspoon();
+ assertSuccess("", status);
+}
+
void MeasureFormatTest::TestBasic() {
UErrorCode status = U_ZERO_ERROR;
MeasureUnit *ptr1 = MeasureUnit::createArcMinute(status);
@@ -2827,8 +3596,8 @@ void MeasureFormatTest::TestGreek() {
"1 \\u03AD\\u03C4\\u03BF\\u03C2",
// "el_GR" 1 short
"1 \\u03B4\\u03B5\\u03C5\\u03C4.",
- "1 \\u03BB\\u03B5\\u03C0.",
- "1 \\u03CE\\u03C1\\u03B1",
+ "1 \\u03BB.",
+ "1 \\u03CE.",
"1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
"1 \\u03B5\\u03B2\\u03B4.",
"1 \\u03BC\\u03AE\\u03BD.",
@@ -2843,8 +3612,8 @@ void MeasureFormatTest::TestGreek() {
"7 \\u03AD\\u03C4\\u03B7",
// "el_GR" 7 short
"7 \\u03B4\\u03B5\\u03C5\\u03C4.",
- "7 \\u03BB\\u03B5\\u03C0.",
- "7 \\u03CE\\u03C1.", // hour (other)
+ "7 \\u03BB.",
+ "7 \\u03CE.", // hour (other)
"7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
"7 \\u03B5\\u03B2\\u03B4.",
"7 \\u03BC\\u03AE\\u03BD.",
@@ -2860,8 +3629,8 @@ void MeasureFormatTest::TestGreek() {
"1 \\u03AD\\u03C4\\u03BF\\u03C2",
// "el" 1 short
"1 \\u03B4\\u03B5\\u03C5\\u03C4.",
- "1 \\u03BB\\u03B5\\u03C0.",
- "1 \\u03CE\\u03C1\\u03B1",
+ "1 \\u03BB.",
+ "1 \\u03CE.",
"1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
"1 \\u03B5\\u03B2\\u03B4.",
"1 \\u03BC\\u03AE\\u03BD.",
@@ -2876,8 +3645,8 @@ void MeasureFormatTest::TestGreek() {
"7 \\u03AD\\u03C4\\u03B7",
// "el" 7 short
"7 \\u03B4\\u03B5\\u03C5\\u03C4.",
- "7 \\u03BB\\u03B5\\u03C0.",
- "7 \\u03CE\\u03C1.", // hour (other)
+ "7 \\u03BB.",
+ "7 \\u03CE.", // hour (other)
"7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
"7 \\u03B5\\u03B2\\u03B4.",
"7 \\u03BC\\u03AE\\u03BD.",
@@ -3096,7 +3865,7 @@ void MeasureFormatTest::TestMultiples() {
helperTestMultiples(en, UMEASFMT_WIDTH_NARROW, "2mi 1\\u2032 2.3\\u2033");
helperTestMultiples(ru, UMEASFMT_WIDTH_WIDE, "2 \\u043C\\u0438\\u043B\\u0438 1 \\u0444\\u0443\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430");
helperTestMultiples(ru, UMEASFMT_WIDTH_SHORT, "2 \\u043C\\u0438 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C.");
- helperTestMultiples(ru, UMEASFMT_WIDTH_NARROW, "2 \\u043C\\u0438\\u043B\\u044C 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430");
+ helperTestMultiples(ru, UMEASFMT_WIDTH_NARROW, "2 \\u043C\\u0438 1 \\u0444\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C.");
}
void MeasureFormatTest::helperTestMultiples(
@@ -3662,8 +4431,63 @@ void MeasureFormatTest::TestIdentifiers() {
{"pow2-foot-and-pow2-mile", "square-foot-and-square-mile"},
{"gram-square-gram-per-dekagram", "cubic-gram-per-dekagram"},
{"kilogram-per-meter-per-second", "kilogram-per-meter-second"},
-
- // TODO(ICU-21284): Add more test cases once the proper ranking is available.
+ {"kilometer-per-second-per-megaparsec", "kilometer-per-megaparsec-second"},
+
+ // Correct order of units, as per unitQuantities in CLDR's units.xml
+ {"newton-meter", "newton-meter"},
+ {"meter-newton", "newton-meter"},
+ {"pound-force-foot", "pound-force-foot"},
+ {"foot-pound-force", "pound-force-foot"},
+ {"kilowatt-hour", "kilowatt-hour"},
+ {"hour-kilowatt", "kilowatt-hour"},
+
+ // Testing prefixes are parsed and produced correctly (ensures no
+ // collisions in the enum values)
+ {"yoctofoot", "yoctofoot"},
+ {"zeptofoot", "zeptofoot"},
+ {"attofoot", "attofoot"},
+ {"femtofoot", "femtofoot"},
+ {"picofoot", "picofoot"},
+ {"nanofoot", "nanofoot"},
+ {"microfoot", "microfoot"},
+ {"millifoot", "millifoot"},
+ {"centifoot", "centifoot"},
+ {"decifoot", "decifoot"},
+ {"foot", "foot"},
+ {"dekafoot", "dekafoot"},
+ {"hectofoot", "hectofoot"},
+ {"kilofoot", "kilofoot"},
+ {"megafoot", "megafoot"},
+ {"gigafoot", "gigafoot"},
+ {"terafoot", "terafoot"},
+ {"petafoot", "petafoot"},
+ {"exafoot", "exafoot"},
+ {"zettafoot", "zettafoot"},
+ {"yottafoot", "yottafoot"},
+ {"kibibyte", "kibibyte"},
+ {"mebibyte", "mebibyte"},
+ {"gibibyte", "gibibyte"},
+ {"tebibyte", "tebibyte"},
+ {"pebibyte", "pebibyte"},
+ {"exbibyte", "exbibyte"},
+ {"zebibyte", "zebibyte"},
+ {"yobibyte", "yobibyte"},
+
+ // Testing aliases
+ {"foodcalorie", "foodcalorie"},
+ {"dot-per-centimeter", "dot-per-centimeter"},
+ {"dot-per-inch", "dot-per-inch"},
+ {"dot", "dot"},
+
+ // Testing sort order of prefixes.
+ {"megafoot-mebifoot-kibifoot-kilofoot", "mebifoot-megafoot-kibifoot-kilofoot"},
+ {"per-megafoot-mebifoot-kibifoot-kilofoot", "per-mebifoot-megafoot-kibifoot-kilofoot"},
+ {"megafoot-mebifoot-kibifoot-kilofoot-per-megafoot-mebifoot-kibifoot-kilofoot",
+ "mebifoot-megafoot-kibifoot-kilofoot-per-mebifoot-megafoot-kibifoot-kilofoot"},
+ {"microfoot-millifoot-megafoot-mebifoot-kibifoot-kilofoot",
+ "mebifoot-megafoot-kibifoot-kilofoot-millifoot-microfoot"},
+ {"per-microfoot-millifoot-megafoot-mebifoot-kibifoot-kilofoot",
+ "per-mebifoot-megafoot-kibifoot-kilofoot-millifoot-microfoot"},
};
for (const auto &cas : cases) {
status.setScope(cas.id);
@@ -3722,6 +4546,108 @@ void MeasureFormatTest::TestInvalidIdentifiers() {
}
}
+void MeasureFormatTest::TestIdentifierDetails() {
+ IcuTestErrorCode status(*this, "TestIdentifierDetails()");
+
+ MeasureUnit joule = MeasureUnit::forIdentifier("joule", status);
+ status.assertSuccess();
+ assertEquals("Initial joule", "joule", joule.getIdentifier());
+
+ static_assert(UMEASURE_PREFIX_INTERNAL_MAX_SI < 99, "Tests assume there is no prefix 99.");
+ static_assert(UMEASURE_PREFIX_INTERNAL_MAX_BIN < 99, "Tests assume there is no prefix 99.");
+ MeasureUnit unit = joule.withPrefix((UMeasurePrefix)99, status);
+ if (!status.expectErrorAndReset(U_UNSUPPORTED_ERROR)) {
+ errln("Invalid prefix should result in an error.");
+ }
+ assertEquals("Invalid prefix results in no identifier", "", unit.getIdentifier());
+
+ unit = joule.withPrefix(UMEASURE_PREFIX_HECTO, status);
+ status.assertSuccess();
+ assertEquals("foo identifier", "hectojoule", unit.getIdentifier());
+
+ unit = unit.withPrefix(UMEASURE_PREFIX_EXBI, status);
+ status.assertSuccess();
+ assertEquals("foo identifier", "exbijoule", unit.getIdentifier());
+}
+
+void MeasureFormatTest::TestPrefixes() {
+ IcuTestErrorCode status(*this, "TestPrefixes()");
+ const struct TestCase {
+ UMeasurePrefix prefix;
+ int32_t expectedBase;
+ int32_t expectedPower;
+ } cases[] = {
+ {UMEASURE_PREFIX_YOCTO, 10, -24},
+ {UMEASURE_PREFIX_ZEPTO, 10, -21},
+ {UMEASURE_PREFIX_ATTO, 10, -18},
+ {UMEASURE_PREFIX_FEMTO, 10, -15},
+ {UMEASURE_PREFIX_PICO, 10, -12},
+ {UMEASURE_PREFIX_NANO, 10, -9},
+ {UMEASURE_PREFIX_MICRO, 10, -6},
+ {UMEASURE_PREFIX_MILLI, 10, -3},
+ {UMEASURE_PREFIX_CENTI, 10, -2},
+ {UMEASURE_PREFIX_DECI, 10, -1},
+ {UMEASURE_PREFIX_ONE, 10, 0},
+ {UMEASURE_PREFIX_DEKA, 10, 1},
+ {UMEASURE_PREFIX_HECTO, 10, 2},
+ {UMEASURE_PREFIX_KILO, 10, 3},
+ {UMEASURE_PREFIX_MEGA, 10, 6},
+ {UMEASURE_PREFIX_GIGA, 10, 9},
+ {UMEASURE_PREFIX_TERA, 10, 12},
+ {UMEASURE_PREFIX_PETA, 10, 15},
+ {UMEASURE_PREFIX_EXA, 10, 18},
+ {UMEASURE_PREFIX_ZETTA, 10, 21},
+ {UMEASURE_PREFIX_YOTTA, 10, 24},
+ {UMEASURE_PREFIX_KIBI, 1024, 1},
+ {UMEASURE_PREFIX_MEBI, 1024, 2},
+ {UMEASURE_PREFIX_GIBI, 1024, 3},
+ {UMEASURE_PREFIX_TEBI, 1024, 4},
+ {UMEASURE_PREFIX_PEBI, 1024, 5},
+ {UMEASURE_PREFIX_EXBI, 1024, 6},
+ {UMEASURE_PREFIX_ZEBI, 1024, 7},
+ {UMEASURE_PREFIX_YOBI, 1024, 8},
+ };
+
+ for (auto cas : cases) {
+ MeasureUnit m = MeasureUnit::getAmpere().withPrefix(cas.prefix, status);
+ assertEquals("umeas_getPrefixPower()", cas.expectedPower,
+ umeas_getPrefixPower(m.getPrefix(status)));
+ assertEquals("umeas_getPrefixBase()", cas.expectedBase,
+ umeas_getPrefixBase(m.getPrefix(status)));
+ }
+}
+
+void MeasureFormatTest::TestParseBuiltIns() {
+ IcuTestErrorCode status(*this, "TestParseBuiltIns()");
+ int32_t totalCount = MeasureUnit::getAvailable(nullptr, 0, status);
+ status.expectErrorAndReset(U_BUFFER_OVERFLOW_ERROR);
+ std::unique_ptr<MeasureUnit[]> units(new MeasureUnit[totalCount]);
+ totalCount = MeasureUnit::getAvailable(units.get(), totalCount, status);
+ status.assertSuccess();
+ for (int32_t i = 0; i < totalCount; i++) {
+ MeasureUnit &unit = units[i];
+ if (uprv_strcmp(unit.getType(), "currency") == 0) {
+ continue;
+ }
+
+ // Prove that all built-in units are parseable, except "generic" temperature:
+ MeasureUnit parsed = MeasureUnit::forIdentifier(unit.getIdentifier(), status);
+ if (unit == MeasureUnit::getGenericTemperature()) {
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
+ } else {
+ status.assertSuccess();
+ CharString msg;
+ msg.append("parsed MeasureUnit '", status);
+ msg.append(parsed.getIdentifier(), status);
+ msg.append("' should equal built-in '", status);
+ msg.append(unit.getIdentifier(), status);
+ msg.append("'", status);
+ status.assertSuccess();
+ assertTrue(msg.data(), unit == parsed);
+ }
+ }
+}
+
void MeasureFormatTest::TestParseToBuiltIn() {
IcuTestErrorCode status(*this, "TestParseToBuiltIn()");
const struct TestCase {
@@ -3778,12 +4704,12 @@ void MeasureFormatTest::TestKilogramIdentifier() {
assertEquals("nanogram", "", nanogram.getType());
assertEquals("nanogram", "nanogram", nanogram.getIdentifier());
- assertEquals("prefix of kilogram", UMEASURE_SI_PREFIX_KILO, kilogram.getSIPrefix(status));
- assertEquals("prefix of gram", UMEASURE_SI_PREFIX_ONE, gram.getSIPrefix(status));
- assertEquals("prefix of microgram", UMEASURE_SI_PREFIX_MICRO, microgram.getSIPrefix(status));
- assertEquals("prefix of nanogram", UMEASURE_SI_PREFIX_NANO, nanogram.getSIPrefix(status));
+ assertEquals("prefix of kilogram", UMEASURE_PREFIX_KILO, kilogram.getPrefix(status));
+ assertEquals("prefix of gram", UMEASURE_PREFIX_ONE, gram.getPrefix(status));
+ assertEquals("prefix of microgram", UMEASURE_PREFIX_MICRO, microgram.getPrefix(status));
+ assertEquals("prefix of nanogram", UMEASURE_PREFIX_NANO, nanogram.getPrefix(status));
- MeasureUnit tmp = kilogram.withSIPrefix(UMEASURE_SI_PREFIX_MILLI, status);
+ MeasureUnit tmp = kilogram.withPrefix(UMEASURE_PREFIX_MILLI, status);
assertEquals(UnicodeString("Kilogram + milli should be milligram, got: ") + tmp.getIdentifier(),
MeasureUnit::getMilligram().getIdentifier(), tmp.getIdentifier());
}
@@ -3795,16 +4721,16 @@ void MeasureFormatTest::TestCompoundUnitOperations() {
MeasureUnit kilometer = MeasureUnit::getKilometer();
MeasureUnit cubicMeter = MeasureUnit::getCubicMeter();
- MeasureUnit meter = kilometer.withSIPrefix(UMEASURE_SI_PREFIX_ONE, status);
- MeasureUnit centimeter1 = kilometer.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
- MeasureUnit centimeter2 = meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
- MeasureUnit cubicDecimeter = cubicMeter.withSIPrefix(UMEASURE_SI_PREFIX_DECI, status);
+ MeasureUnit meter = kilometer.withPrefix(UMEASURE_PREFIX_ONE, status);
+ MeasureUnit centimeter1 = kilometer.withPrefix(UMEASURE_PREFIX_CENTI, status);
+ MeasureUnit centimeter2 = meter.withPrefix(UMEASURE_PREFIX_CENTI, status);
+ MeasureUnit cubicDecimeter = cubicMeter.withPrefix(UMEASURE_PREFIX_DECI, status);
- verifySingleUnit(kilometer, UMEASURE_SI_PREFIX_KILO, 1, "kilometer");
- verifySingleUnit(meter, UMEASURE_SI_PREFIX_ONE, 1, "meter");
- verifySingleUnit(centimeter1, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
- verifySingleUnit(centimeter2, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
- verifySingleUnit(cubicDecimeter, UMEASURE_SI_PREFIX_DECI, 3, "cubic-decimeter");
+ verifySingleUnit(kilometer, UMEASURE_PREFIX_KILO, 1, "kilometer");
+ verifySingleUnit(meter, UMEASURE_PREFIX_ONE, 1, "meter");
+ verifySingleUnit(centimeter1, UMEASURE_PREFIX_CENTI, 1, "centimeter");
+ verifySingleUnit(centimeter2, UMEASURE_PREFIX_CENTI, 1, "centimeter");
+ verifySingleUnit(cubicDecimeter, UMEASURE_PREFIX_DECI, 3, "cubic-decimeter");
assertTrue("centimeter equality", centimeter1 == centimeter2);
assertTrue("kilometer inequality", centimeter1 != kilometer);
@@ -3814,10 +4740,10 @@ void MeasureFormatTest::TestCompoundUnitOperations() {
MeasureUnit quarticKilometer = kilometer.withDimensionality(4, status);
MeasureUnit overQuarticKilometer1 = kilometer.withDimensionality(-4, status);
- verifySingleUnit(squareMeter, UMEASURE_SI_PREFIX_ONE, 2, "square-meter");
- verifySingleUnit(overCubicCentimeter, UMEASURE_SI_PREFIX_CENTI, -3, "per-cubic-centimeter");
- verifySingleUnit(quarticKilometer, UMEASURE_SI_PREFIX_KILO, 4, "pow4-kilometer");
- verifySingleUnit(overQuarticKilometer1, UMEASURE_SI_PREFIX_KILO, -4, "per-pow4-kilometer");
+ verifySingleUnit(squareMeter, UMEASURE_PREFIX_ONE, 2, "square-meter");
+ verifySingleUnit(overCubicCentimeter, UMEASURE_PREFIX_CENTI, -3, "per-cubic-centimeter");
+ verifySingleUnit(quarticKilometer, UMEASURE_PREFIX_KILO, 4, "pow4-kilometer");
+ verifySingleUnit(overQuarticKilometer1, UMEASURE_PREFIX_KILO, -4, "per-pow4-kilometer");
assertTrue("power inequality", quarticKilometer != overQuarticKilometer1);
@@ -3828,26 +4754,26 @@ void MeasureFormatTest::TestCompoundUnitOperations() {
.reciprocal(status);
MeasureUnit overQuarticKilometer4 = meter.withDimensionality(4, status)
.reciprocal(status)
- .withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
+ .withPrefix(UMEASURE_PREFIX_KILO, status);
- verifySingleUnit(overQuarticKilometer2, UMEASURE_SI_PREFIX_KILO, -4, "per-pow4-kilometer");
- verifySingleUnit(overQuarticKilometer3, UMEASURE_SI_PREFIX_KILO, -4, "per-pow4-kilometer");
- verifySingleUnit(overQuarticKilometer4, UMEASURE_SI_PREFIX_KILO, -4, "per-pow4-kilometer");
+ verifySingleUnit(overQuarticKilometer2, UMEASURE_PREFIX_KILO, -4, "per-pow4-kilometer");
+ verifySingleUnit(overQuarticKilometer3, UMEASURE_PREFIX_KILO, -4, "per-pow4-kilometer");
+ verifySingleUnit(overQuarticKilometer4, UMEASURE_PREFIX_KILO, -4, "per-pow4-kilometer");
assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer2);
assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer3);
assertTrue("reciprocal equality", overQuarticKilometer1 == overQuarticKilometer4);
MeasureUnit kiloSquareSecond = MeasureUnit::getSecond()
- .withDimensionality(2, status).withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
+ .withDimensionality(2, status).withPrefix(UMEASURE_PREFIX_KILO, status);
MeasureUnit meterSecond = meter.product(kiloSquareSecond, status);
MeasureUnit cubicMeterSecond1 = meter.withDimensionality(3, status).product(kiloSquareSecond, status);
- MeasureUnit centimeterSecond1 = meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status).product(kiloSquareSecond, status);
+ MeasureUnit centimeterSecond1 = meter.withPrefix(UMEASURE_PREFIX_CENTI, status).product(kiloSquareSecond, status);
MeasureUnit secondCubicMeter = kiloSquareSecond.product(meter.withDimensionality(3, status), status);
- MeasureUnit secondCentimeter = kiloSquareSecond.product(meter.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status), status);
+ MeasureUnit secondCentimeter = kiloSquareSecond.product(meter.withPrefix(UMEASURE_PREFIX_CENTI, status), status);
MeasureUnit secondCentimeterPerKilometer = secondCentimeter.product(kilometer.reciprocal(status), status);
- verifySingleUnit(kiloSquareSecond, UMEASURE_SI_PREFIX_KILO, 2, "square-kilosecond");
+ verifySingleUnit(kiloSquareSecond, UMEASURE_PREFIX_KILO, 2, "square-kilosecond");
const char* meterSecondSub[] = {"meter", "square-kilosecond"};
verifyCompoundUnit(meterSecond, "meter-square-kilosecond",
meterSecondSub, UPRV_LENGTHOF(meterSecondSub));
@@ -3870,20 +4796,20 @@ void MeasureFormatTest::TestCompoundUnitOperations() {
assertTrue("reordering equality", cubicMeterSecond1 == secondCubicMeter);
assertTrue("additional simple units inequality", secondCubicMeter != secondCentimeter);
- // Don't allow get/set power or SI prefix on compound units
+ // Don't allow get/set power or SI or binary prefix on compound units
status.errIfFailureAndReset();
meterSecond.getDimensionality(status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
meterSecond.withDimensionality(3, status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
- meterSecond.getSIPrefix(status);
+ meterSecond.getPrefix(status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
- meterSecond.withSIPrefix(UMEASURE_SI_PREFIX_CENTI, status);
+ meterSecond.withPrefix(UMEASURE_PREFIX_CENTI, status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
// Test that StringPiece does not overflow
MeasureUnit centimeter3 = MeasureUnit::forIdentifier({secondCentimeter.getIdentifier(), 10}, status);
- verifySingleUnit(centimeter3, UMEASURE_SI_PREFIX_CENTI, 1, "centimeter");
+ verifySingleUnit(centimeter3, UMEASURE_PREFIX_CENTI, 1, "centimeter");
assertTrue("string piece equality", centimeter1 == centimeter3);
MeasureUnit footInch = MeasureUnit::forIdentifier("foot-and-inch", status);
@@ -3907,19 +4833,19 @@ void MeasureFormatTest::TestCompoundUnitOperations() {
// with others via product:
MeasureUnit kilometer2 = dimensionless.product(kilometer, status);
status.errIfFailureAndReset("dimensionless.product(kilometer, status)");
- verifySingleUnit(kilometer2, UMEASURE_SI_PREFIX_KILO, 1, "kilometer");
+ verifySingleUnit(kilometer2, UMEASURE_PREFIX_KILO, 1, "kilometer");
assertTrue("kilometer equality", kilometer == kilometer2);
// Test out-of-range powers
MeasureUnit power15 = MeasureUnit::forIdentifier("pow15-kilometer", status);
- verifySingleUnit(power15, UMEASURE_SI_PREFIX_KILO, 15, "pow15-kilometer");
+ verifySingleUnit(power15, UMEASURE_PREFIX_KILO, 15, "pow15-kilometer");
status.errIfFailureAndReset();
MeasureUnit power16a = MeasureUnit::forIdentifier("pow16-kilometer", status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
MeasureUnit power16b = power15.product(kilometer, status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
MeasureUnit powerN15 = MeasureUnit::forIdentifier("per-pow15-kilometer", status);
- verifySingleUnit(powerN15, UMEASURE_SI_PREFIX_KILO, -15, "per-pow15-kilometer");
+ verifySingleUnit(powerN15, UMEASURE_PREFIX_KILO, -15, "per-pow15-kilometer");
status.errIfFailureAndReset();
MeasureUnit powerN16a = MeasureUnit::forIdentifier("per-pow16-kilometer", status);
status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
@@ -3945,22 +4871,22 @@ void MeasureFormatTest::TestDimensionlessBehaviour() {
MeasureUnit mile = MeasureUnit::getMile();
mile = mile.product(dimensionless, status);
status.errIfFailureAndReset("mile.product(dimensionless, ...)");
- verifySingleUnit(mile, UMEASURE_SI_PREFIX_ONE, 1, "mile");
+ verifySingleUnit(mile, UMEASURE_PREFIX_ONE, 1, "mile");
- // dimensionless.getSIPrefix()
- UMeasureSIPrefix siPrefix = dimensionless.getSIPrefix(status);
- status.errIfFailureAndReset("dimensionless.getSIPrefix(...)");
- assertEquals("dimensionless SIPrefix", UMEASURE_SI_PREFIX_ONE, siPrefix);
+ // dimensionless.getPrefix()
+ UMeasurePrefix unitPrefix = dimensionless.getPrefix(status);
+ status.errIfFailureAndReset("dimensionless.getPrefix(...)");
+ assertEquals("dimensionless SIPrefix", UMEASURE_PREFIX_ONE, unitPrefix);
- // dimensionless.withSIPrefix()
- modified = dimensionless.withSIPrefix(UMEASURE_SI_PREFIX_KILO, status);
- status.errIfFailureAndReset("dimensionless.withSIPrefix(...)");
+ // dimensionless.withPrefix()
+ modified = dimensionless.withPrefix(UMEASURE_PREFIX_KILO, status);
+ status.errIfFailureAndReset("dimensionless.withPrefix(...)");
pair = dimensionless.splitToSingleUnits(status);
count = pair.second;
assertEquals("no singles in modified", 0, count);
- siPrefix = modified.getSIPrefix(status);
- status.errIfFailureAndReset("modified.getSIPrefix(...)");
- assertEquals("modified SIPrefix", UMEASURE_SI_PREFIX_ONE, siPrefix);
+ unitPrefix = modified.getPrefix(status);
+ status.errIfFailureAndReset("modified.getPrefix(...)");
+ assertEquals("modified SIPrefix", UMEASURE_PREFIX_ONE, unitPrefix);
// dimensionless.getComplexity()
UMeasureUnitComplexity complexity = dimensionless.getComplexity(status);
@@ -4046,8 +4972,10 @@ void MeasureFormatTest::TestInternalMeasureUnitImpl() {
status.assertSuccess();
assertEquals("mu1 initial identifier", "", mu1.identifier.data());
assertEquals("mu1 initial complexity", UMEASURE_UNIT_SINGLE, mu1.complexity);
- assertEquals("mu1 initial units length", 1, mu1.units.length());
- assertEquals("mu1 initial units[0]", "meter", mu1.units[0]->getSimpleUnitID());
+ assertEquals("mu1 initial units length", 1, mu1.singleUnits.length());
+ if (mu1.singleUnits.length() > 0) {
+ assertEquals("mu1 initial units[0]", "meter", mu1.singleUnits[0]->getSimpleUnitID());
+ }
// Producing identifier via build(): the std::move() means mu1 gets modified
// while it also gets assigned to tmp's internal fImpl.
@@ -4055,8 +4983,10 @@ void MeasureFormatTest::TestInternalMeasureUnitImpl() {
status.assertSuccess();
assertEquals("mu1 post-move-build identifier", "meter", mu1.identifier.data());
assertEquals("mu1 post-move-build complexity", UMEASURE_UNIT_SINGLE, mu1.complexity);
- assertEquals("mu1 post-move-build units length", 1, mu1.units.length());
- assertEquals("mu1 post-move-build units[0]", "meter", mu1.units[0]->getSimpleUnitID());
+ assertEquals("mu1 post-move-build units length", 1, mu1.singleUnits.length());
+ if (mu1.singleUnits.length() > 0) {
+ assertEquals("mu1 post-move-build units[0]", "meter", mu1.singleUnits[0]->getSimpleUnitID());
+ }
assertEquals("MeasureUnit tmp identifier", "meter", tmp.getIdentifier());
// This temporary variable is used when forMeasureUnit's first parameter
@@ -4066,8 +4996,10 @@ void MeasureFormatTest::TestInternalMeasureUnitImpl() {
status.assertSuccess();
assertEquals("tmpMemory identifier", "", tmpMemory.identifier.data());
assertEquals("tmpMemory complexity", UMEASURE_UNIT_SINGLE, tmpMemory.complexity);
- assertEquals("tmpMemory units length", 1, tmpMemory.units.length());
- assertEquals("tmpMemory units[0]", "meter", tmpMemory.units[0]->getSimpleUnitID());
+ assertEquals("tmpMemory units length", 1, tmpMemory.singleUnits.length());
+ if (mu1.singleUnits.length() > 0) {
+ assertEquals("tmpMemory units[0]", "meter", tmpMemory.singleUnits[0]->getSimpleUnitID());
+ }
assertEquals("tmpImplRef identifier", "", tmpImplRef.identifier.data());
assertEquals("tmpImplRef complexity", UMEASURE_UNIT_SINGLE, tmpImplRef.complexity);
@@ -4076,18 +5008,59 @@ void MeasureFormatTest::TestInternalMeasureUnitImpl() {
mu1 = std::move(mu2);
assertEquals("mu1 = move(mu2): identifier", "", mu1.identifier.data());
assertEquals("mu1 = move(mu2): complexity", UMEASURE_UNIT_COMPOUND, mu1.complexity);
- assertEquals("mu1 = move(mu2): units length", 2, mu1.units.length());
- assertEquals("mu1 = move(mu2): units[0]", "newton", mu1.units[0]->getSimpleUnitID());
- assertEquals("mu1 = move(mu2): units[1]", "meter", mu1.units[1]->getSimpleUnitID());
+ assertEquals("mu1 = move(mu2): units length", 2, mu1.singleUnits.length());
+ if (mu1.singleUnits.length() >= 2) {
+ assertEquals("mu1 = move(mu2): units[0]", "newton", mu1.singleUnits[0]->getSimpleUnitID());
+ assertEquals("mu1 = move(mu2): units[1]", "meter", mu1.singleUnits[1]->getSimpleUnitID());
+ }
mu1 = MeasureUnitImpl::forIdentifier("hour-and-minute-and-second", status);
status.assertSuccess();
assertEquals("mu1 = HMS: identifier", "", mu1.identifier.data());
assertEquals("mu1 = HMS: complexity", UMEASURE_UNIT_MIXED, mu1.complexity);
- assertEquals("mu1 = HMS: units length", 3, mu1.units.length());
- assertEquals("mu1 = HMS: units[0]", "hour", mu1.units[0]->getSimpleUnitID());
- assertEquals("mu1 = HMS: units[1]", "minute", mu1.units[1]->getSimpleUnitID());
- assertEquals("mu1 = HMS: units[2]", "second", mu1.units[2]->getSimpleUnitID());
+ assertEquals("mu1 = HMS: units length", 3, mu1.singleUnits.length());
+ if (mu1.singleUnits.length() >= 3) {
+ assertEquals("mu1 = HMS: units[0]", "hour", mu1.singleUnits[0]->getSimpleUnitID());
+ assertEquals("mu1 = HMS: units[1]", "minute", mu1.singleUnits[1]->getSimpleUnitID());
+ assertEquals("mu1 = HMS: units[2]", "second", mu1.singleUnits[2]->getSimpleUnitID());
+ }
+
+ MeasureUnitImpl m2 = MeasureUnitImpl::forIdentifier("", status);
+ m2.appendSingleUnit(SingleUnitImpl::forMeasureUnit(MeasureUnit::getMeter(), status), status);
+ m2.appendSingleUnit(SingleUnitImpl::forMeasureUnit(MeasureUnit::getMeter(), status), status);
+ status.assertSuccess();
+ assertEquals("append meter twice: complexity", UMEASURE_UNIT_SINGLE, m2.complexity);
+ assertEquals("append meter twice: units length", 1, m2.singleUnits.length());
+ if (mu1.singleUnits.length() >= 1) {
+ assertEquals("append meter twice: units[0]", "meter", m2.singleUnits[0]->getSimpleUnitID());
+ }
+ assertEquals("append meter twice: identifier", "square-meter",
+ std::move(m2).build(status).getIdentifier());
+
+ MeasureUnitImpl mcm = MeasureUnitImpl::forIdentifier("", status);
+ mcm.appendSingleUnit(SingleUnitImpl::forMeasureUnit(MeasureUnit::getMeter(), status), status);
+ mcm.appendSingleUnit(SingleUnitImpl::forMeasureUnit(MeasureUnit::getCentimeter(), status), status);
+ status.assertSuccess();
+ assertEquals("append meter & centimeter: complexity", UMEASURE_UNIT_COMPOUND, mcm.complexity);
+ assertEquals("append meter & centimeter: units length", 2, mcm.singleUnits.length());
+ if (mu1.singleUnits.length() >= 2) {
+ assertEquals("append meter & centimeter: units[0]", "meter",
+ mcm.singleUnits[0]->getSimpleUnitID());
+ assertEquals("append meter & centimeter: units[1]", "meter",
+ mcm.singleUnits[1]->getSimpleUnitID());
+ }
+ assertEquals("append meter & centimeter: identifier", "meter-centimeter",
+ std::move(mcm).build(status).getIdentifier());
+
+ MeasureUnitImpl m2m = MeasureUnitImpl::forIdentifier("meter-square-meter", status);
+ status.assertSuccess();
+ assertEquals("meter-square-meter: complexity", UMEASURE_UNIT_SINGLE, m2m.complexity);
+ assertEquals("meter-square-meter: units length", 1, m2m.singleUnits.length());
+ if (mu1.singleUnits.length() >= 1) {
+ assertEquals("meter-square-meter: units[0]", "meter", m2m.singleUnits[0]->getSimpleUnitID());
+ }
+ assertEquals("meter-square-meter: identifier", "cubic-meter",
+ std::move(m2m).build(status).getIdentifier());
}
@@ -4163,15 +5136,15 @@ void MeasureFormatTest::verifyFormat(
void MeasureFormatTest::verifySingleUnit(
const MeasureUnit& unit,
- UMeasureSIPrefix siPrefix,
+ UMeasurePrefix unitPrefix,
int8_t power,
const char* identifier) {
IcuTestErrorCode status(*this, "verifySingleUnit");
UnicodeString uid(identifier, -1, US_INV);
- assertEquals(uid + ": SI prefix",
- siPrefix,
- unit.getSIPrefix(status));
- status.errIfFailureAndReset("%s: SI prefix", identifier);
+ assertEquals(uid + ": SI or binary prefix",
+ unitPrefix,
+ unit.getPrefix(status));
+ status.errIfFailureAndReset("%s: SI or binary prefix", identifier);
assertEquals(uid + ": Power",
static_cast<int32_t>(power),
static_cast<int32_t>(unit.getDimensionality(status)));
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.h b/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.h
index dbe7e0f2dae..8eaefed561a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.h
@@ -21,7 +21,7 @@
class DateFormatMiscTests : public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
void test4097450(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.h b/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.h
index 4f02e0cc9b7..2730bce0010 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.h
@@ -30,7 +30,7 @@ public:
CollationMonkeyTest();
virtual ~CollationMonkeyTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// utility function used in tests, returns absolute value
int32_t checkValue(int32_t value);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.cpp
index 1b83b10876d..d7c8573b944 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.cpp
@@ -131,7 +131,7 @@ void MessageFormatRegressionTest::Test4074764() {
tempBuffer.remove();
tempBuffer = messageFormatter->format(params, 2, tempBuffer, pos, status);
if (tempBuffer != "Message without param" || failure(status, "messageFormat->format"))
- errln("Formatted with arguments > subsitution failed. result = " + tempBuffer);
+ errln("Formatted with arguments > substitution failed. result = " + tempBuffer);
logln("Formatted with extra params : " + tempBuffer);
//This statement gives an exception while formatting...
//If we use pattern[1] for the message with param,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.h b/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.h
index 3330184554d..fbf37fa23be 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.h
@@ -21,7 +21,7 @@
class MessageFormatRegressionTest: public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
void Test4074764(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.cpp
index e5b69e44a09..3a209a6756e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.cpp
@@ -271,7 +271,7 @@ public:
delete currencyStyle;
}
- virtual NumberFormat* createFormat(const Locale& /* loc */, UNumberFormatStyle formatType)
+ virtual NumberFormat* createFormat(const Locale& /* loc */, UNumberFormatStyle formatType) override
{
if (formatType == UNUM_CURRENCY) {
return currencyStyle->clone();
@@ -279,7 +279,7 @@ public:
return NULL;
}
- virtual inline UClassID getDynamicClassID() const
+ virtual inline UClassID getDynamicClassID() const override
{
return (UClassID)&gID;
}
@@ -325,7 +325,7 @@ IntlTestNumberFormatAPI::testRegistration()
LocalUNumberFormatPointer uf5(unum_open(UNUM_CURRENCY, NULL, 0, SRC_LOC.getName(), NULL, &status));
if (U_FAILURE(status)) {
- dataerrln("Error creating instanaces.");
+ dataerrln("Error creating instances.");
return;
} else {
float n = 1234.567f;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.h b/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.h
index 79745454d70..be0f051b3d9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.h
@@ -20,7 +20,7 @@
* This test executes basic functionality checks of various API functions
**/
class IntlTestNumberFormatAPI: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.h b/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.h
index ecb228cd322..4770e55c428 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.h
@@ -23,7 +23,7 @@
class NumberFormatRoundTripTest : public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
static UBool verbose;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/normconf.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/normconf.cpp
index 7c574ddb3ed..8129ea14787 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/normconf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/normconf.cpp
@@ -282,9 +282,12 @@ void NormalizerConformanceTest::TestConformance(FileStream *input, int32_t optio
namespace {
-UBool isNormalizedUTF8(const Normalizer2 &norm2, const UnicodeString &s, UErrorCode &errorCode) {
+UBool isNormalizedUTF8(const Normalizer2 *norm2, const UnicodeString &s, UErrorCode &errorCode) {
+ if (norm2 == nullptr) {
+ return true;
+ }
std::string s8;
- return norm2.isNormalizedUTF8(s.toUTF8String(s8), errorCode);
+ return norm2->isNormalizedUTF8(s.toUTF8String(s8), errorCode);
}
} // namespace
@@ -351,7 +354,7 @@ UBool NormalizerConformanceTest::checkConformance(const UnicodeString* field,
dataerrln("Normalizer error: isNormalized(NFC(s), UNORM_NFC) is FALSE");
pass = FALSE;
}
- if(options==0 && !isNormalizedUTF8(*nfc, field[1], status)) {
+ if(options==0 && !isNormalizedUTF8(nfc, field[1], status)) {
dataerrln("Normalizer error: nfc.isNormalizedUTF8(NFC(s)) is FALSE");
pass = FALSE;
}
@@ -360,16 +363,20 @@ UBool NormalizerConformanceTest::checkConformance(const UnicodeString* field,
errln("Normalizer error: isNormalized(s, UNORM_NFC) is TRUE");
pass = FALSE;
}
- if(isNormalizedUTF8(*nfc, field[0], status)) {
+ if(isNormalizedUTF8(nfc, field[0], status)) {
errln("Normalizer error: nfc.isNormalizedUTF8(s) is TRUE");
pass = FALSE;
}
}
+ if(options==0 && !isNormalizedUTF8(nfd, field[2], status)) {
+ dataerrln("Normalizer error: nfd.isNormalizedUTF8(NFD(s)) is FALSE");
+ pass = FALSE;
+ }
if(!Normalizer::isNormalized(field[3], UNORM_NFKC, options, status)) {
dataerrln("Normalizer error: isNormalized(NFKC(s), UNORM_NFKC) is FALSE");
pass = FALSE;
} else {
- if(options==0 && !isNormalizedUTF8(*nfkc, field[3], status)) {
+ if(options==0 && !isNormalizedUTF8(nfkc, field[3], status)) {
dataerrln("Normalizer error: nfkc.isNormalizedUTF8(NFKC(s)) is FALSE");
pass = FALSE;
}
@@ -378,12 +385,16 @@ UBool NormalizerConformanceTest::checkConformance(const UnicodeString* field,
errln("Normalizer error: isNormalized(s, UNORM_NFKC) is TRUE");
pass = FALSE;
}
- if(options==0 && isNormalizedUTF8(*nfkc, field[0], status)) {
+ if(options==0 && isNormalizedUTF8(nfkc, field[0], status)) {
errln("Normalizer error: nfkc.isNormalizedUTF8(s) is TRUE");
pass = FALSE;
}
}
}
+ if(options==0 && !isNormalizedUTF8(nfkd, field[4], status)) {
+ dataerrln("Normalizer error: nfkd.isNormalizedUTF8(NFKD(s)) is FALSE");
+ pass = FALSE;
+ }
// test FCD quick check and "makeFCD"
Normalizer::normalize(field[0], UNORM_FCD, options, fcd, status);
@@ -481,7 +492,7 @@ UBool NormalizerConformanceTest::checkNorm(UNormalizationMode mode, int32_t opti
exp.toUTF8String(exp8);
std::string out8;
Edits edits;
- Edits *editsPtr = (mode == UNORM_NFC || mode == UNORM_NFKC) ? &edits : nullptr;
+ Edits *editsPtr = mode != UNORM_FCD ? &edits : nullptr;
StringByteSink<std::string> sink(&out8, static_cast<int32_t>(exp8.length()));
norm2->normalizeUTF8(0, s8, sink, editsPtr, errorCode);
if (U_FAILURE(errorCode)) {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/normconf.h b/Build/source/libs/icu/icu-src/source/test/intltest/normconf.h
index 9e5fea762c5..9ae425fe58f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/normconf.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/normconf.h
@@ -28,7 +28,7 @@ class NormalizerConformanceTest : public IntlTest {
NormalizerConformanceTest();
virtual ~NormalizerConformanceTest();
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
/**
* Test the conformance of Normalizer to
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.h b/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.h
index f30de79deb5..a2ad2f7e746 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.h
@@ -77,7 +77,7 @@ enum ENumberFormatTestTupleField {
* field means and how the data drive tests work, please see
* https://docs.google.com/document/d/1T2P0p953_Lh1pRwo-5CuPVrHlIBa_wcXElG-Hhg_WHM/edit?usp=sharing
* Each field is optional. That is, a certain field may be unset for a given
- * test. The UBool fields ending in "Flag" indicate whether the corrresponding
+ * test. The UBool fields ending in "Flag" indicate whether the corresponding
* field is set or not. TRUE means set; FALSE means unset. An unset field
* generally means that the corresponding setter method is not called on
* the NumberFormat object.
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
index bd4c0e28cc5..d6d71543fb6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
@@ -42,7 +42,7 @@ class AffixUtilsTest : public IntlTest {
void testInvalid();
void testUnescapeWithSymbolProvider();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
UnicodeString unescapeWithDefaults(const SymbolProvider &defaultProvider, UnicodeString input,
@@ -59,17 +59,22 @@ class NumberFormatterApiTest : public IntlTestWithFieldPosition {
void notationCompact();
void unitMeasure();
void unitCompoundMeasure();
+ void unitArbitraryMeasureUnits();
void unitSkeletons();
void unitUsage();
void unitUsageErrorCodes();
void unitUsageSkeletons();
void unitCurrency();
+ void unitInflections();
+ void unitGender();
+ void unitNotConvertible();
void unitPercent();
void percentParity();
void roundingFraction();
void roundingFigures();
void roundingFractionFigures();
void roundingOther();
+ void roundingIncrementRegressionTest();
void grouping();
void padding();
void integerWidth();
@@ -95,7 +100,7 @@ class NumberFormatterApiTest : public IntlTestWithFieldPosition {
void toDecimalNumber();
void microPropsInternals();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
CurrencyUnit USD;
@@ -170,6 +175,20 @@ class NumberFormatterApiTest : public IntlTestWithFieldPosition {
const FormattedNumber& formattedNumber,
const UFieldPosition* expectedFieldPositions,
int32_t length);
+
+ struct UnitInflectionTestCase {
+ const char *unitIdentifier;
+ const char *locale;
+ const char *unitDisplayCase;
+ double value;
+ const UChar *expected;
+ };
+
+ void runUnitInflectionsTestCases(UnlocalizedNumberFormatter unf,
+ UnicodeString skeleton,
+ const UnitInflectionTestCase *cases,
+ int32_t numCases,
+ IcuTestErrorCode &status);
};
class DecimalQuantityTest : public IntlTest {
@@ -181,13 +200,14 @@ class DecimalQuantityTest : public IntlTest {
void testConvertToAccurateDouble();
void testUseApproximateDoubleWhenAble();
void testHardDoubleConversion();
+ void testFitsInLong();
void testToDouble();
void testMaxDigits();
void testNickelRounding();
- void testCompactDecimalSuppressedExponent();
+ void testScientificAndCompactSuppressedExponent();
void testSuppressedExponentUnchangedByInitialScaling();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
void assertDoubleEquals(UnicodeString message, double a, double b);
@@ -200,7 +220,7 @@ class DoubleConversionTest : public IntlTest {
public:
void testDoubleConversionApi();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
};
class ModifiersTest : public IntlTest {
@@ -210,7 +230,7 @@ class ModifiersTest : public IntlTest {
void testSimpleModifier();
void testCurrencySpacingEnabledModifier();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
void assertModifierEquals(const Modifier &mod, int32_t expectedPrefixLength, bool expectedStrong,
@@ -228,21 +248,22 @@ class PatternModifierTest : public IntlTest {
void testPatternWithNoPlaceholder();
void testMutableEqualsImmutable();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
UnicodeString getPrefix(const MutablePatternModifier &mod, UErrorCode &status);
UnicodeString getSuffix(const MutablePatternModifier &mod, UErrorCode &status);
};
-class PatternStringTest : public IntlTest {
+class PatternStringTest : public IntlTestWithFieldPosition {
public:
void testLocalized();
void testToPatternSimple();
void testExceptionOnInvalid();
void testBug13117();
+ void testCurrencyDecimal();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
};
@@ -259,7 +280,7 @@ class NumberParserTest : public IntlTest {
void test20360_BidiOverflow();
void testInfiniteRecursion();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
};
class NumberSkeletonTest : public IntlTest {
@@ -276,7 +297,7 @@ class NumberSkeletonTest : public IntlTest {
void perUnitInArabic();
void perUnitToSkeleton();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
void expectedErrorSkeleton(const char16_t** cases, int32_t casesLen);
@@ -292,16 +313,21 @@ class NumberRangeFormatterTest : public IntlTestWithFieldPosition {
void testCollapse();
void testIdentity();
void testDifferentFormatters();
+ void testNaNInfinity();
void testPlurals();
void testFieldPositions();
void testCopyMove();
void toObject();
void testGetDecimalNumbers();
+ void test21684_Performance();
+ void test21358_SignPosition();
+ void test21683_StateLeak();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
CurrencyUnit USD;
+ CurrencyUnit CHF;
CurrencyUnit GBP;
CurrencyUnit PTE;
@@ -337,7 +363,7 @@ class NumberPermutationTest : public IntlTest {
public:
void testPermutations();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
};
@@ -355,7 +381,7 @@ class NumberPermutationTest : public IntlTest {
class NumberTest : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) {
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override {
if (exec) {
logln("TestSuite NumberTest: ");
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
index 499b5d0e090..5851a9fbdaa 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
@@ -24,6 +24,8 @@ class DefaultSymbolProvider : public SymbolProvider {
return u"−";
case TYPE_PLUS_SIGN:
return fSymbols.getConstSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kPlusSignSymbol);
+ case TYPE_APPROXIMATELY_SIGN:
+ return u"≃";
case TYPE_PERCENT:
return fSymbols.getConstSymbol(DecimalFormatSymbols::ENumberFormatSymbol::kPercentSymbol);
case TYPE_PERMILLE:
@@ -42,7 +44,7 @@ class DefaultSymbolProvider : public SymbolProvider {
case TYPE_CURRENCY_OVERFLOW:
return u"\uFFFD";
default:
- UPRV_UNREACHABLE;
+ UPRV_UNREACHABLE_EXIT;
}
}
};
@@ -93,6 +95,7 @@ void AffixUtilsTest::testUnescape() {
{u"-!", false, 2, u"−!"},
{u"+", false, 1, u"\u061C+"},
{u"+!", false, 2, u"\u061C+!"},
+ {u"~", false, 1, u"≃"},
{u"‰", false, 1, u"؉"},
{u"‰!", false, 2, u"؉!"},
{u"-x", false, 2, u"−x"},
@@ -199,7 +202,7 @@ void AffixUtilsTest::testInvalid() {
class NumericSymbolProvider : public SymbolProvider {
public:
- virtual UnicodeString getSymbol(AffixPatternType type) const {
+ virtual UnicodeString getSymbol(AffixPatternType type) const override {
return Int64ToUnicodeString(type < 0 ? -type : type);
}
};
@@ -209,7 +212,7 @@ void AffixUtilsTest::testUnescapeWithSymbolProvider() {
{u"", u""},
{u"-", u"1"},
{u"'-'", u"-"},
- {u"- + % ‰ ¤ ¤¤ ¤¤¤ ¤¤¤¤ ¤¤¤¤¤", u"1 2 3 4 5 6 7 8 9"},
+ {u"- + ~ % ‰ ¤ ¤¤ ¤¤¤ ¤¤¤¤ ¤¤¤¤¤", u"1 2 3 4 5 6 7 8 9 10"},
{u"'¤¤¤¤¤¤'", u"¤¤¤¤¤¤"},
{u"¤¤¤¤¤¤", u"\uFFFD"}
};
@@ -232,7 +235,7 @@ void AffixUtilsTest::testUnescapeWithSymbolProvider() {
sb.clear();
sb.append(u"abcdefg", kUndefinedField, status);
assertSuccess("Spot 2", status);
- AffixUtils::unescape(u"-+%", sb, 4, provider, kUndefinedField, status);
+ AffixUtils::unescape(u"-+~", sb, 4, provider, kUndefinedField, status);
assertSuccess("Spot 3", status);
assertEquals(u"Symbol provider into middle", u"abcd123efg", sb.toUnicodeString());
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
index e653fbf5bed..cf8fecc0a28 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
@@ -80,11 +80,15 @@ void NumberFormatterApiTest::runIndexedTest(int32_t index, UBool exec, const cha
TESTCASE_AUTO(notationCompact);
TESTCASE_AUTO(unitMeasure);
TESTCASE_AUTO(unitCompoundMeasure);
+ TESTCASE_AUTO(unitArbitraryMeasureUnits);
TESTCASE_AUTO(unitSkeletons);
TESTCASE_AUTO(unitUsage);
TESTCASE_AUTO(unitUsageErrorCodes);
TESTCASE_AUTO(unitUsageSkeletons);
TESTCASE_AUTO(unitCurrency);
+ TESTCASE_AUTO(unitInflections);
+ TESTCASE_AUTO(unitGender);
+ TESTCASE_AUTO(unitNotConvertible);
TESTCASE_AUTO(unitPercent);
if (!quick) {
// Slow test: run in exhaustive mode only
@@ -94,6 +98,7 @@ void NumberFormatterApiTest::runIndexedTest(int32_t index, UBool exec, const cha
TESTCASE_AUTO(roundingFigures);
TESTCASE_AUTO(roundingFractionFigures);
TESTCASE_AUTO(roundingOther);
+ TESTCASE_AUTO(roundingIncrementRegressionTest);
TESTCASE_AUTO(grouping);
TESTCASE_AUTO(padding);
TESTCASE_AUTO(integerWidth);
@@ -495,16 +500,14 @@ void NumberFormatterApiTest::notationCompact() {
1e7,
u"1000\u842C");
- if (!logKnownIssue("21258", "StandardPlural cannot handle keywords 1, 0")) {
- assertFormatSingle(
- u"Compact with plural form =1 (ICU-21258)",
- u"compact-long",
- u"K",
- NumberFormatter::with().notation(Notation::compactLong()),
- Locale("fr-FR"),
- 1e3,
- u"mille");
- }
+ assertFormatSingle(
+ u"Compact with plural form =1 (ICU-21258)",
+ u"compact-long",
+ u"KK",
+ NumberFormatter::with().notation(Notation::compactLong()),
+ Locale("fr-FR"),
+ 1e3,
+ u"mille");
assertFormatSingle(
u"Compact Infinity",
@@ -582,22 +585,21 @@ void NumberFormatterApiTest::unitMeasure() {
u"0.0088 meters",
u"0 meters");
-// // TODO(ICU-20941): Support formatting for not-built-in units
-// assertFormatDescending(
-// u"Hectometers",
-// u"measure-unit/length-hectometer",
-// u"unit/hectometer",
-// NumberFormatter::with().unit(MeasureUnit::forIdentifier("hectometer", status)),
-// Locale::getEnglish(),
-// u"87,650 hm",
-// u"8,765 hm",
-// u"876.5 hm",
-// u"87.65 hm",
-// u"8.765 hm",
-// u"0.8765 hm",
-// u"0.08765 hm",
-// u"0.008765 hm",
-// u"0 hm");
+ assertFormatDescending(
+ u"Hectometers",
+ u"unit/hectometer",
+ u"unit/hectometer",
+ NumberFormatter::with().unit(MeasureUnit::forIdentifier("hectometer", status)),
+ Locale::getEnglish(),
+ u"87,650 hm",
+ u"8,765 hm",
+ u"876.5 hm",
+ u"87.65 hm",
+ u"8.765 hm",
+ u"0.8765 hm",
+ u"0.08765 hm",
+ u"0.008765 hm",
+ u"0 hm");
// TODO: Implement Measure in C++
// assertFormatSingleMeasure(
@@ -716,6 +718,15 @@ void NumberFormatterApiTest::unitMeasure() {
u"5 a\u00F1os");
assertFormatSingle(
+ u"Hubble Constant - usually expressed in km/s/Mpc",
+ u"unit/kilometer-per-megaparsec-second",
+ u"unit/kilometer-per-megaparsec-second",
+ NumberFormatter::with().unit(MeasureUnit::forIdentifier("kilometer-per-second-per-megaparsec", status)),
+ Locale("en"),
+ 74, // Approximate 2019-03-18 measurement
+ u"74 km/Mpc⋅sec");
+
+ assertFormatSingle(
u"Mixed unit",
u"unit/yard-and-foot-and-inch",
u"unit/yard-and-foot-and-inch",
@@ -769,6 +780,67 @@ void NumberFormatterApiTest::unitMeasure() {
4.28571,
u"4 metric tons, 285 kilograms, 710 grams");
+ assertFormatSingle(u"Mixed Unit (Not Sorted) [metric]", //
+ u"unit/gram-and-kilogram unit-width-full-name", //
+ u"unit/gram-and-kilogram unit-width-full-name", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("gram-and-kilogram", status)) //
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME), //
+ Locale("en-US"), //
+ 4.28571, //
+ u"285.71 grams, 4 kilograms"); //
+
+ assertFormatSingle(u"Mixed Unit (Not Sorted) [imperial]", //
+ u"unit/inch-and-yard-and-foot unit-width-full-name", //
+ u"unit/inch-and-yard-and-foot unit-width-full-name", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("inch-and-yard-and-foot", status)) //
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME), //
+ Locale("en-US"), //
+ 4.28571, //
+ u"10.28556 inches, 4 yards, 0 feet"); //
+
+ assertFormatSingle(u"Mixed Unit (Not Sorted) [imperial full]", //
+ u"unit/inch-and-yard-and-foot unit-width-full-name", //
+ u"unit/inch-and-yard-and-foot unit-width-full-name", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("inch-and-yard-and-foot", status)) //
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME), //
+ Locale("en-US"), //
+ 4.38571, //
+ u"1.88556 inches, 4 yards, 1 foot"); //
+
+ assertFormatSingle(u"Mixed Unit (Not Sorted) [imperial full integers]", //
+ u"unit/inch-and-yard-and-foot @# unit-width-full-name", //
+ u"unit/inch-and-yard-and-foot @# unit-width-full-name", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("inch-and-yard-and-foot", status)) //
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME) //
+ .precision(Precision::maxSignificantDigits(2)), //
+ Locale("en-US"), //
+ 4.36112, //
+ u"1 inch, 4 yards, 1 foot"); //
+
+ assertFormatSingle(u"Mixed Unit (Not Sorted) [imperial full] with `And` in the end", //
+ u"unit/inch-and-yard-and-foot unit-width-full-name", //
+ u"unit/inch-and-yard-and-foot unit-width-full-name", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("inch-and-yard-and-foot", status)) //
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME), //
+ Locale("fr-FR"), //
+ 4.38571, //
+ u"1,88556\u00A0pouce, 4\u00A0yards et 1\u00A0pied"); //
+
+ assertFormatSingle(u"Mixed unit, Scientific [Not in Order]", //
+ u"unit/foot-and-inch-and-yard E0", //
+ u"unit/foot-and-inch-and-yard E0", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("foot-and-inch-and-yard", status)) //
+ .notation(Notation::scientific()), //
+ Locale("en-US"), //
+ 3.65, //
+ "1 ft, 1.14E1 in, 3 yd"); //
+
assertFormatSingle(
u"Testing \"1 foot 12 inches\"",
u"unit/foot-and-inch @### unit-width-full-name",
@@ -788,7 +860,7 @@ void NumberFormatterApiTest::unitMeasure() {
NumberFormatter::with().unit(MeasureUnit::forIdentifier("celsius", status)),
Locale("nl-NL"),
-6.5,
- u"-6,5\u00B0C");
+ u"-6,5°C");
assertFormatSingle(
u"Negative numbers: time",
@@ -807,6 +879,39 @@ void NumberFormatterApiTest::unitMeasure() {
Locale("en"),
100,
u"100");
+
+ // TODO: desired behaviour for this "pathological" case?
+ // Since this is pointless, we don't test that its behaviour doesn't change.
+ // As of January 2021, the produced result has a missing sign: 23.5 Kelvin
+ // is "23 Kelvin and -272.65 degrees Celsius":
+// assertFormatSingle(
+// u"Meaningless: kelvin-and-celcius",
+// u"unit/kelvin-and-celsius",
+// u"unit/kelvin-and-celsius",
+// NumberFormatter::with().unit(MeasureUnit::forIdentifier("kelvin-and-celsius", status)),
+// Locale("en"),
+// 23.5,
+// u"23 K, 272.65°C");
+
+ if (uprv_getNaN() != 0.0) {
+ assertFormatSingle(
+ u"Measured -Inf",
+ u"measure-unit/electric-ampere",
+ u"unit/ampere",
+ NumberFormatter::with().unit(MeasureUnit::getAmpere()),
+ Locale("en"),
+ -uprv_getInfinity(),
+ u"-∞ A");
+
+ assertFormatSingle(
+ u"Measured NaN",
+ u"measure-unit/temperature-celsius",
+ u"unit/celsius",
+ NumberFormatter::with().unit(MeasureUnit::forIdentifier("celsius", status)),
+ Locale("en"),
+ uprv_getNaN(),
+ u"NaN°C");
+ }
}
void NumberFormatterApiTest::unitCompoundMeasure() {
@@ -876,22 +981,21 @@ void NumberFormatterApiTest::unitCompoundMeasure() {
u"0.008765 J/fur",
u"0 J/fur");
- // TODO(ICU-20941): Support constructions such as this one.
- // assertFormatDescending(
- // u"Joules Per Furlong Short with unit identifier via API",
- // u"measure-unit/energy-joule per-measure-unit/length-furlong",
- // u"unit/joule-per-furlong",
- // NumberFormatter::with().unit(MeasureUnit::forIdentifier("joule-per-furlong", status)),
- // Locale::getEnglish(),
- // u"87,650 J/fur",
- // u"8,765 J/fur",
- // u"876.5 J/fur",
- // u"87.65 J/fur",
- // u"8.765 J/fur",
- // u"0.8765 J/fur",
- // u"0.08765 J/fur",
- // u"0.008765 J/fur",
- // u"0 J/fur");
+ assertFormatDescending(
+ u"Joules Per Furlong Short with unit identifier via API",
+ u"measure-unit/energy-joule per-measure-unit/length-furlong",
+ u"unit/joule-per-furlong",
+ NumberFormatter::with().unit(MeasureUnit::forIdentifier("joule-per-furlong", status)),
+ Locale::getEnglish(),
+ u"87,650 J/fur",
+ u"8,765 J/fur",
+ u"876.5 J/fur",
+ u"87.65 J/fur",
+ u"8.765 J/fur",
+ u"0.8765 J/fur",
+ u"0.08765 J/fur",
+ u"0.008765 J/fur",
+ u"0 J/fur");
assertFormatDescending(
u"Pounds per Square Inch: composed",
@@ -955,7 +1059,7 @@ void NumberFormatterApiTest::unitCompoundMeasure() {
status.assertSuccess(); // Error is only returned once we try to format.
FormattedNumber num = nf.formatDouble(2.4, status);
if (!status.expectErrorAndReset(U_UNSUPPORTED_ERROR)) {
- errln(UnicodeString("Expected failure, got: \"") +
+ errln(UnicodeString("Expected failure for unit/furlong-pascal per-unit/length-meter, got: \"") +
nf.formatDouble(2.4, status).toString(status) + "\".");
status.assertSuccess();
}
@@ -983,6 +1087,195 @@ void NumberFormatterApiTest::unitCompoundMeasure() {
u"2.4 m/s\u00B2");
}
+void NumberFormatterApiTest::unitArbitraryMeasureUnits() {
+ IcuTestErrorCode status(*this, "unitArbitraryMeasureUnits()");
+
+ // TODO: fix after data bug is resolved? See CLDR-14510.
+// assertFormatSingle(
+// u"Binary unit prefix: kibibyte",
+// u"unit/kibibyte",
+// u"unit/kibibyte",
+// NumberFormatter::with().unit(MeasureUnit::forIdentifier("kibibyte", status)),
+// Locale("en-GB"),
+// 2.4,
+// u"2.4 KiB");
+
+ assertFormatSingle(
+ u"Binary unit prefix: kibibyte full-name",
+ u"unit/kibibyte unit-width-full-name",
+ u"unit/kibibyte unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("kibibyte", status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-GB"),
+ 2.4,
+ u"2.4 kibibytes");
+
+ assertFormatSingle(
+ u"Binary unit prefix: kibibyte full-name",
+ u"unit/kibibyte unit-width-full-name",
+ u"unit/kibibyte unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("kibibyte", status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("de"),
+ 2.4,
+ u"2,4 Kibibyte");
+
+ assertFormatSingle(
+ u"Binary prefix for non-digital units: kibimeter",
+ u"unit/kibimeter",
+ u"unit/kibimeter",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("kibimeter", status)),
+ Locale("en-GB"),
+ 2.4,
+ u"2.4 Kim");
+
+ assertFormatSingle(
+ u"Extra-large prefix: exabyte",
+ u"unit/exabyte",
+ u"unit/exabyte",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("exabyte", status)),
+ Locale("en-GB"),
+ 2.4,
+ u"2.4 Ebyte");
+
+ assertFormatSingle(
+ u"Extra-large prefix: exabyte (full-name)",
+ u"unit/exabyte unit-width-full-name",
+ u"unit/exabyte unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("exabyte", status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-GB"),
+ 2.4,
+ u"2.4 exabytes");
+
+ assertFormatSingle(
+ u"SI prefix falling back to root: microohm",
+ u"unit/microohm",
+ u"unit/microohm",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("microohm", status)),
+ Locale("de-CH"),
+ 2.4,
+ u"2.4 μΩ");
+
+ assertFormatSingle(
+ u"de-CH fallback to de: microohm unit-width-full-name",
+ u"unit/microohm unit-width-full-name",
+ u"unit/microohm unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("microohm", status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("de-CH"),
+ 2.4,
+ u"2.4\u00A0Mikroohm");
+
+ assertFormatSingle(
+ u"No prefixes, 'times' pattern: joule-furlong",
+ u"unit/joule-furlong",
+ u"unit/joule-furlong",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("joule-furlong", status)),
+ Locale("en"),
+ 2.4,
+ u"2.4 J⋅fur");
+
+ assertFormatSingle(
+ u"No numeratorUnitString: per-second",
+ u"unit/per-second",
+ u"unit/per-second",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("per-second", status)),
+ Locale("de-CH"),
+ 2.4,
+ u"2.4/s");
+
+ assertFormatSingle(
+ u"No numeratorUnitString: per-second unit-width-full-name",
+ u"unit/per-second unit-width-full-name",
+ u"unit/per-second unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("per-second", status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("de-CH"),
+ 2.4,
+ u"2.4 pro Sekunde");
+
+ assertFormatSingle(
+ u"Prefix in the denominator: nanogram-per-picobarrel",
+ u"unit/nanogram-per-picobarrel",
+ u"unit/nanogram-per-picobarrel",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("nanogram-per-picobarrel", status)),
+ Locale("en-ZA"),
+ 2.4,
+ u"2,4 ng/pbbl");
+
+ assertFormatSingle(
+ u"Prefix in the denominator: nanogram-per-picobarrel unit-width-full-name",
+ u"unit/nanogram-per-picobarrel unit-width-full-name",
+ u"unit/nanogram-per-picobarrel unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("nanogram-per-picobarrel", status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-ZA"),
+ 2.4,
+ u"2,4 nanograms per picobarrel");
+
+ // Valid MeasureUnit, but unformattable, because we only have patterns for
+ // pow2 and pow3 at this time:
+ LocalizedNumberFormatter lnf = NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("pow4-mile", status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME)
+ .locale("en-ZA");
+ lnf.operator=(lnf); // self-assignment should be a no-op
+ lnf.formatInt(1, status);
+ status.expectErrorAndReset(U_INTERNAL_PROGRAM_ERROR);
+
+ assertFormatSingle(
+ u"kibijoule-foot-per-cubic-gigafurlong-square-second unit-width-full-name",
+ u"unit/kibijoule-foot-per-cubic-gigafurlong-square-second unit-width-full-name",
+ u"unit/kibijoule-foot-per-cubic-gigafurlong-square-second unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("kibijoule-foot-per-cubic-gigafurlong-square-second",
+ status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-ZA"),
+ 2.4,
+ u"2,4 kibijoule-feet per cubic gigafurlong-square second");
+
+ assertFormatSingle(
+ u"kibijoule-foot-per-cubic-gigafurlong-square-second unit-width-full-name",
+ u"unit/kibijoule-foot-per-cubic-gigafurlong-square-second unit-width-full-name",
+ u"unit/kibijoule-foot-per-cubic-gigafurlong-square-second unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("kibijoule-foot-per-cubic-gigafurlong-square-second",
+ status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("de-CH"),
+ 2.4,
+ u"2.4\u00A0Kibijoule⋅Fuss pro Kubikgigafurlong⋅Quadratsekunde");
+
+ // TODO(ICU-21504): We want to be able to format this, but "100-kilometer"
+ // is not yet supported when it's not part of liter-per-100-kilometer:
+ // Actually now in CLDR 40 this is supported directly in data, so change test.
+ assertFormatSingle(
+ u"kilowatt-hour-per-100-kilometer unit-width-full-name",
+ u"unit/kilowatt-hour-per-100-kilometer unit-width-full-name",
+ u"unit/kilowatt-hour-per-100-kilometer unit-width-full-name",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("kilowatt-hour-per-100-kilometer",
+ status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
+ Locale("en-ZA"),
+ 2.4,
+ u"2,4 kilowatt-hours per 100 kilometres");
+}
+
// TODO: merge these tests into numbertest_skeletons.cpp instead of here:
void NumberFormatterApiTest::unitSkeletons() {
const struct TestCase {
@@ -1042,10 +1335,9 @@ void NumberFormatterApiTest::unitSkeletons() {
u"measure-unit/concentr-permille", //
u"permille"},
- // // TODO: binary prefixes not supported yet!
- // {"Round-trip example from icu-units#35", //
- // u"unit/kibijoule-per-furlong", //
- // u"unit/kibijoule-per-furlong"},
+ {"Round-trip example from icu-units#35", //
+ u"unit/kibijoule-per-furlong", //
+ u"unit/kibijoule-per-furlong"},
};
for (auto &cas : cases) {
IcuTestErrorCode status(*this, cas.msg);
@@ -1180,7 +1472,7 @@ void NumberFormatterApiTest::unitUsage() {
u"8,8 km",
u"900 m",
u"90 m",
- u"10 m",
+ u"9 m",
u"0 m");
uTestCase = u"unitUsage() en-GB road";
@@ -1215,8 +1507,8 @@ void NumberFormatterApiTest::unitUsage() {
u"54 mi",
u"5.4 mi",
u"0.54 mi",
- u"96 yd",
- u"9.6 yd",
+ u"100 yd",
+ u"10 yd",
u"0 yd");
uTestCase = u"unitUsage() en-US road";
@@ -1375,6 +1667,26 @@ void NumberFormatterApiTest::unitUsage() {
u"0E0 square centimetres");
assertFormatSingle(
+ u"Negative Infinity with Unit Preferences",
+ u"measure-unit/area-acre usage/default",
+ u"unit/acre usage/default",
+ NumberFormatter::with().unit(MeasureUnit::getAcre()).usage("default"),
+ Locale::getEnglish(),
+ -uprv_getInfinity(),
+ u"-∞ km²");
+
+// // TODO(icu-units#131): do we care about NaN?
+// // TODO: on some platforms with MSVC, "-NaN sec" is returned.
+// assertFormatSingle(
+// u"NaN with Unit Preferences",
+// u"measure-unit/area-acre usage/default",
+// u"unit/acre usage/default",
+// NumberFormatter::with().unit(MeasureUnit::getAcre()).usage("default"),
+// Locale::getEnglish(),
+// uprv_getNaN(),
+// u"NaN cm²");
+
+ assertFormatSingle(
u"Negative numbers: minute-and-second",
u"measure-unit/duration-second usage/media",
u"unit/second usage/media",
@@ -1384,6 +1696,34 @@ void NumberFormatterApiTest::unitUsage() {
u"-1 min, 18 sec");
assertFormatSingle(
+ u"Negative numbers: media seconds",
+ u"measure-unit/duration-second usage/media",
+ u"unit/second usage/media",
+ NumberFormatter::with().unit(SECOND).usage("media"),
+ Locale("nl-NL"),
+ -2.7,
+ u"-2,7 sec");
+
+// // TODO: on some platforms with MSVC, "-NaN sec" is returned.
+// assertFormatSingle(
+// u"NaN minute-and-second",
+// u"measure-unit/duration-second usage/media",
+// u"unit/second usage/media",
+// NumberFormatter::with().unit(SECOND).usage("media"),
+// Locale("nl-NL"),
+// uprv_getNaN(),
+// u"NaN sec");
+
+ assertFormatSingle(
+ u"NaN meter-and-centimeter",
+ u"measure-unit/length-meter usage/person-height",
+ u"unit/meter usage/person-height",
+ NumberFormatter::with().unit(METER).usage("person-height"),
+ Locale("sv-SE"),
+ uprv_getNaN(),
+ u"0 m, NaN cm");
+
+ assertFormatSingle(
u"Rounding Mode propagates: rounding down",
u"usage/road measure-unit/length-centimeter rounding-mode-floor",
u"usage/road unit/centimeter rounding-mode-floor",
@@ -1407,6 +1747,113 @@ void NumberFormatterApiTest::unitUsage() {
30500,
u"350 m");
+ // Test calling `.usage("")` should unset the existing usage.
+ // First: without usage
+ assertFormatSingle(u"Rounding Mode propagates: rounding up",
+ u"measure-unit/length-centimeter rounding-mode-ceiling",
+ u"unit/centimeter rounding-mode-ceiling",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("centimeter", status))
+ .roundingMode(UNUM_ROUND_CEILING),
+ Locale("en-US"), //
+ 3048, //
+ u"3,048 cm");
+
+ // Second: with "road" usage
+ assertFormatSingle(u"Rounding Mode propagates: rounding up",
+ u"usage/road measure-unit/length-centimeter rounding-mode-ceiling",
+ u"usage/road unit/centimeter rounding-mode-ceiling",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("centimeter", status))
+ .usage("road")
+ .roundingMode(UNUM_ROUND_CEILING),
+ Locale("en-US"), //
+ 3048, //
+ u"100 ft");
+
+ // Third: with "road" usage, then the usage unsetted by calling .usage("")
+ assertFormatSingle(u"Rounding Mode propagates: rounding up",
+ u"measure-unit/length-centimeter rounding-mode-ceiling",
+ u"unit/centimeter rounding-mode-ceiling",
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("centimeter", status))
+ .usage("road")
+ .roundingMode(UNUM_ROUND_CEILING)
+ .usage(""), // unset
+ Locale("en-US"), //
+ 3048, //
+ u"3,048 cm");
+
+ assertFormatSingle(u"kilometer-per-liter match the correct category", //
+ u"unit/kilometer-per-liter usage/default", //
+ u"unit/kilometer-per-liter usage/default", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("kilometer-per-liter", status)) //
+ .usage("default"), //
+ Locale("en-US"), //
+ 1, //
+ u"100 L/100 km");
+
+ assertFormatSingle(u"gallon-per-mile match the correct category", //
+ u"unit/gallon-per-mile usage/default", //
+ u"unit/gallon-per-mile usage/default", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("gallon-per-mile", status)) //
+ .usage("default"), //
+ Locale("en-US"), //
+ 1, //
+ u"235 L/100 km");
+
+ assertFormatSingle(u"psi match the correct category", //
+ u"unit/megapascal usage/default", //
+ u"unit/megapascal usage/default", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("megapascal", status)) //
+ .usage("default"), //
+ Locale("en-US"), //
+ 1, //
+ "145 psi");
+
+ assertFormatSingle(u"millibar match the correct category", //
+ u"unit/millibar usage/default", //
+ u"unit/millibar usage/default", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("millibar", status)) //
+ .usage("default"), //
+ Locale("en-US"), //
+ 1, //
+ "0.015 psi");
+
+ assertFormatSingle(u"pound-force-per-square-inch match the correct category", //
+ u"unit/pound-force-per-square-inch usage/default", //
+ u"unit/pound-force-per-square-inch usage/default", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("pound-force-per-square-inch", status)) //
+ .usage("default"), //
+ Locale("en-US"), //
+ 1, //
+ "1 psi"); //
+
+ assertFormatSingle(u"inch-ofhg match the correct category", //
+ u"unit/inch-ofhg usage/default", //
+ u"unit/inch-ofhg usage/default", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("inch-ofhg", status)) //
+ .usage("default"), //
+ Locale("en-US"), //
+ 1, //
+ "0.49 psi");
+
+ assertFormatSingle(u"millimeter-ofhg match the correct category", //
+ u"unit/millimeter-ofhg usage/default", //
+ u"unit/millimeter-ofhg usage/default", //
+ NumberFormatter::with() //
+ .unit(MeasureUnit::forIdentifier("millimeter-ofhg", status)) //
+ .usage("default"), //
+ Locale("en-US"), //
+ 1, //
+ "0.019 psi");
+
// TODO(icu-units#38): improve unit testing coverage. E.g. add vehicle-fuel
// triggering inversion conversion code. Test with 0 too, to see
// divide-by-zero behaviour.
@@ -1431,6 +1878,13 @@ void NumberFormatterApiTest::unitUsageErrorCodes() {
// Adding the unit as part of the fluent chain leads to success.
unloc_formatter.unit(MeasureUnit::getMeter()).locale("en-GB").formatInt(1, status);
status.assertSuccess();
+
+ // Setting unit to the "base dimensionless unit" is like clearing unit.
+ unloc_formatter = NumberFormatter::with().unit(MeasureUnit()).usage("default");
+ // This does not give an error, because usage-vs-unit isn't resolved yet.
+ status.errIfFailureAndReset("Expected behaviour: no immediate error for invalid unit");
+ unloc_formatter.locale("en-GB").formatInt(1, status);
+ status.expectErrorAndReset(U_ILLEGAL_ARGUMENT_ERROR);
}
// Tests for the "skeletons" field in unitPreferenceData, as well as precision
@@ -1767,6 +2221,508 @@ void NumberFormatterApiTest::unitCurrency() {
Locale("lu"),
123.12,
u"123,12 CN¥");
+
+ // de-CH has currency pattern "¤ #,##0.00;¤-#,##0.00"
+ assertFormatSingle(
+ u"Sign position on negative number with pattern spacing",
+ u"currency/RON",
+ u"currency/RON",
+ NumberFormatter::with().unit(RON),
+ Locale("de-CH"),
+ -123.12,
+ u"RON-123.12");
+
+ // TODO(CLDR-13044): Move the sign to the inside of the number
+ assertFormatSingle(
+ u"Sign position on negative number with currency spacing",
+ u"currency/RON",
+ u"currency/RON",
+ NumberFormatter::with().unit(RON),
+ Locale("en"),
+ -123.12,
+ u"-RON 123.12");
+}
+
+void NumberFormatterApiTest::runUnitInflectionsTestCases(UnlocalizedNumberFormatter unf,
+ UnicodeString skeleton,
+ const UnitInflectionTestCase *cases,
+ int32_t numCases,
+ IcuTestErrorCode &status) {
+ for (int32_t i = 0; i < numCases; i++) {
+ UnitInflectionTestCase t = cases[i];
+ status.assertSuccess();
+ MeasureUnit mu = MeasureUnit::forIdentifier(t.unitIdentifier, status);
+ if (status.errIfFailureAndReset("MeasureUnit::forIdentifier(\"%s\", ...) failed",
+ t.unitIdentifier)) {
+ continue;
+ };
+ UnicodeString skelString = UnicodeString("unit/") + t.unitIdentifier + u" " + skeleton;
+ const UChar *skel;
+ if (t.unitDisplayCase == nullptr || t.unitDisplayCase[0] == 0) {
+ unf = unf.unit(mu).unitDisplayCase("");
+ skel = skelString.getTerminatedBuffer();
+ } else {
+ unf = unf.unit(mu).unitDisplayCase(t.unitDisplayCase);
+ // No skeleton support for unitDisplayCase yet.
+ skel = nullptr;
+ }
+ assertFormatSingle((UnicodeString("Unit: \"") + t.unitIdentifier + ("\", \"") + skeleton +
+ u"\", locale=\"" + t.locale + u"\", case=\"" +
+ (t.unitDisplayCase ? t.unitDisplayCase : "") + u"\", value=" + t.value)
+ .getTerminatedBuffer(),
+ skel, skel, unf, Locale(t.locale), t.value, t.expected);
+ status.assertSuccess();
+ }
+}
+
+void NumberFormatterApiTest::unitInflections() {
+ IcuTestErrorCode status(*this, "unitInflections");
+
+ UnlocalizedNumberFormatter unf;
+ const UChar *skeleton;
+ {
+ // Simple inflected form test - test case based on the example in CLDR's
+ // grammaticalFeatures.xml
+ unf = NumberFormatter::with().unitWidth(UNUM_UNIT_WIDTH_FULL_NAME);
+ skeleton = u"unit-width-full-name";
+ const UnitInflectionTestCase percentCases[] = {
+ {"percent", "ru", nullptr, 10, u"10 процентов"}, // many
+ {"percent", "ru", "genitive", 10, u"10 процентов"}, // many
+ {"percent", "ru", nullptr, 33, u"33 процента"}, // few
+ {"percent", "ru", "genitive", 33, u"33 процентов"}, // few
+ {"percent", "ru", nullptr, 1, u"1 процент"}, // one
+ {"percent", "ru", "genitive", 1, u"1 процента"}, // one
+ };
+ runUnitInflectionsTestCases(unf, skeleton, percentCases, UPRV_LENGTHOF(percentCases), status);
+ }
+ {
+ // General testing of inflection rules
+ unf = NumberFormatter::with().unitWidth(UNUM_UNIT_WIDTH_FULL_NAME);
+ skeleton = u"unit-width-full-name";
+ const UnitInflectionTestCase testCases[] = {
+ // Check up on the basic values that the compound patterns below are
+ // derived from:
+ {"meter", "de", nullptr, 1, u"1 Meter"},
+ {"meter", "de", "genitive", 1, u"1 Meters"},
+ {"meter", "de", nullptr, 2, u"2 Meter"},
+ {"meter", "de", "dative", 2, u"2 Metern"},
+ {"mile", "de", nullptr, 1, u"1 Meile"},
+ {"mile", "de", nullptr, 2, u"2 Meilen"},
+ {"day", "de", nullptr, 1, u"1 Tag"},
+ {"day", "de", "genitive", 1, u"1 Tages"},
+ {"day", "de", nullptr, 2, u"2 Tage"},
+ {"day", "de", "dative", 2, u"2 Tagen"},
+ {"decade", "de", nullptr, 1, u"1\u00A0Jahrzehnt"},
+ {"decade", "de", nullptr, 2, u"2\u00A0Jahrzehnte"},
+
+ // Testing de "per" rules:
+ // <deriveComponent feature="case" structure="per" value0="compound" value1="accusative"/>
+ // <deriveComponent feature="plural" structure="per" value0="compound" value1="one"/>
+ // per-patterns use accusative, but since the accusative form
+ // matches the nominative form, we're not effectively testing value1
+ // in the "case & per" rule above.
+
+ // We have a perUnitPattern for "day" in de, so "per" rules are not
+ // applied for these:
+ {"meter-per-day", "de", nullptr, 1, u"1 Meter pro Tag"},
+ {"meter-per-day", "de", "genitive", 1, u"1 Meters pro Tag"},
+ {"meter-per-day", "de", nullptr, 2, u"2 Meter pro Tag"},
+ {"meter-per-day", "de", "dative", 2, u"2 Metern pro Tag"},
+
+ // testing code path that falls back to "root" grammaticalFeatures
+ // but does not inflect:
+ {"meter-per-day", "af", nullptr, 1, u"1 meter per dag"},
+ {"meter-per-day", "af", "dative", 1, u"1 meter per dag"},
+
+ // Decade does not have a perUnitPattern at this time (CLDR 39 / ICU
+ // 69), so we can use it to test for selection of correct plural form.
+ // - Note: fragile test cases, these cases will break when
+ // whitespace is more consistently applied.
+ {"parsec-per-decade", "de", nullptr, 1, u"1\u00A0Parsec pro Jahrzehnt"},
+ {"parsec-per-decade", "de", "genitive", 1, u"1 Parsec pro Jahrzehnt"},
+ {"parsec-per-decade", "de", nullptr, 2, u"2\u00A0Parsec pro Jahrzehnt"},
+ {"parsec-per-decade", "de", "dative", 2, u"2 Parsec pro Jahrzehnt"},
+
+ // Testing de "times", "power" and "prefix" rules:
+ //
+ // <deriveComponent feature="plural" structure="times" value0="one" value1="compound"/>
+ // <deriveComponent feature="case" structure="times" value0="nominative" value1="compound"/>
+ //
+ // <deriveComponent feature="plural" structure="prefix" value0="one" value1="compound"/>
+ // <deriveComponent feature="case" structure="prefix" value0="nominative" value1="compound"/>
+ //
+ // Prefixes in German don't change with plural or case, so these
+ // tests can't test value0 of the following two rules:
+ // <deriveComponent feature="plural" structure="power" value0="one" value1="compound"/>
+ // <deriveComponent feature="case" structure="power" value0="nominative" value1="compound"/>
+ {"square-decimeter-dekameter", "de", nullptr, 1, u"1 Dekameter⋅Quadratdezimeter"},
+ {"square-decimeter-dekameter", "de", "genitive", 1, u"1 Dekameter⋅Quadratdezimeter"},
+ {"square-decimeter-dekameter", "de", nullptr, 2, u"2 Dekameter⋅Quadratdezimeter"},
+ {"square-decimeter-dekameter", "de", "dative", 2, u"2 Dekameter⋅Quadratdezimeter"},
+ // Feminine "Meile" better demonstrates singular-vs-plural form:
+ {"cubic-mile-dekamile", "de", nullptr, 1, u"1 Dekameile⋅Kubikmeile"},
+ {"cubic-mile-dekamile", "de", nullptr, 2, u"2 Dekameile⋅Kubikmeilen"},
+
+ // French handles plural "times" and "power" structures differently:
+ // plural form impacts all "numerator" units (denominator remains
+ // singular like German), and "pow2" prefixes have different forms
+ // <deriveComponent feature="plural" structure="times" value0="compound" value1="compound"/>
+ // <deriveComponent feature="plural" structure="power" value0="compound" value1="compound"/>
+ {"square-decimeter-square-second", "fr", nullptr, 1, u"1\u00A0décimètre carré-seconde carrée"},
+ {"square-decimeter-square-second", "fr", nullptr, 2, u"2\u00A0décimètres carrés-secondes carrées"},
+ };
+ runUnitInflectionsTestCases(unf, skeleton, testCases, UPRV_LENGTHOF(testCases), status);
+ }
+ {
+ // Testing inflection of mixed units:
+ unf = NumberFormatter::with().unitWidth(UNUM_UNIT_WIDTH_FULL_NAME);
+ skeleton = u"unit-width-full-name";
+ const UnitInflectionTestCase testCases[] = {
+ {"meter", "de", nullptr, 1, u"1 Meter"},
+ {"meter", "de", "genitive", 1, u"1 Meters"},
+ {"meter", "de", "dative", 2, u"2 Metern"},
+ {"centimeter", "de", nullptr, 1, u"1 Zentimeter"},
+ {"centimeter", "de", "genitive", 1, u"1 Zentimeters"},
+ {"centimeter", "de", "dative", 10, u"10 Zentimetern"},
+ // TODO(CLDR-14502): check that these inflections are correct, and
+ // whether CLDR needs any rules for them (presumably CLDR spec
+ // should mention it, if it's a consistent rule):
+ {"meter-and-centimeter", "de", nullptr, 1.01, u"1 Meter, 1 Zentimeter"},
+ {"meter-and-centimeter", "de", "genitive", 1.01, u"1 Meters, 1 Zentimeters"},
+ {"meter-and-centimeter", "de", "genitive", 1.1, u"1 Meters, 10 Zentimeter"},
+ {"meter-and-centimeter", "de", "dative", 1.1, u"1 Meter, 10 Zentimetern"},
+ {"meter-and-centimeter", "de", "dative", 2.1, u"2 Metern, 10 Zentimetern"},
+ };
+ runUnitInflectionsTestCases(unf, skeleton, testCases, UPRV_LENGTHOF(testCases),
+ status);
+ }
+ // TODO: add a usage case that selects between preferences with different
+ // genders (e.g. year, month, day, hour).
+ // TODO: look at "↑↑↑" cases: check that inheritance is done right.
+}
+
+void NumberFormatterApiTest::unitGender() {
+ IcuTestErrorCode status(*this, "unitGender");
+
+ const struct TestCase {
+ const char *locale;
+ const char *unitIdentifier;
+ const char *expectedGender;
+ } cases[] = {
+ {"de", "inch", "masculine"},
+ {"de", "yard", "neuter"},
+ {"de", "meter", "masculine"},
+ {"de", "liter", "masculine"},
+ {"de", "second", "feminine"},
+ {"de", "minute", "feminine"},
+ {"de", "hour", "feminine"},
+ {"de", "day", "masculine"},
+ {"de", "year", "neuter"},
+ {"de", "gram", "neuter"},
+ {"de", "watt", "neuter"},
+ {"de", "bit", "neuter"},
+ {"de", "byte", "neuter"},
+
+ {"fr", "inch", "masculine"},
+ {"fr", "yard", "masculine"},
+ {"fr", "meter", "masculine"},
+ {"fr", "liter", "masculine"},
+ {"fr", "second", "feminine"},
+ {"fr", "minute", "feminine"},
+ {"fr", "hour", "feminine"},
+ {"fr", "day", "masculine"},
+ {"fr", "year", "masculine"},
+ {"fr", "gram", "masculine"},
+
+ // grammaticalFeatures deriveCompound "per" rule takes the gender of the
+ // numerator unit:
+ {"de", "meter-per-hour", "masculine"},
+ {"fr", "meter-per-hour", "masculine"},
+ {"af", "meter-per-hour", ""}, // ungendered language
+
+ // French "times" takes gender from first value, German takes the
+ // second. Prefix and power does not have impact on gender for these
+ // languages:
+ {"de", "square-decimeter-square-second", "feminine"},
+ {"fr", "square-decimeter-square-second", "masculine"},
+
+ // TODO(icu-units#149): percent and permille bypasses LongNameHandler
+ // when unitWidth is not FULL_NAME:
+ // // Gender of per-second might be that of percent? TODO(icu-units#28)
+ // {"de", "percent", "neuter"},
+ // {"fr", "percent", "masculine"},
+
+ // Built-in units whose simple units lack gender in the CLDR data file
+ {"de", "kilopascal", "neuter"},
+ {"fr", "kilopascal", "masculine"},
+ // {"de", "pascal", ""},
+ // {"fr", "pascal", ""},
+
+ // Built-in units that lack gender in the CLDR data file
+ // {"de", "revolution", ""},
+ // {"de", "radian", ""},
+ // {"de", "arc-minute", ""},
+ // {"de", "arc-second", ""},
+ {"de", "square-yard", "neuter"}, // POWER
+ {"de", "square-inch", "masculine"}, // POWER
+ // {"de", "dunam", ""},
+ // {"de", "karat", ""},
+ // {"de", "milligram-ofglucose-per-deciliter", ""}, // COMPOUND, ofglucose
+ // {"de", "millimole-per-liter", ""}, // COMPOUND, mole
+ // {"de", "permillion", ""},
+ // {"de", "permille", ""},
+ // {"de", "permyriad", ""},
+ // {"de", "mole", ""},
+ {"de", "liter-per-kilometer", "masculine"}, // COMPOUND
+ {"de", "petabyte", "neuter"}, // PREFIX
+ {"de", "terabit", "neuter"}, // PREFIX
+ // {"de", "century", ""},
+ // {"de", "decade", ""},
+ {"de", "millisecond", "feminine"}, // PREFIX
+ {"de", "microsecond", "feminine"}, // PREFIX
+ {"de", "nanosecond", "feminine"}, // PREFIX
+ // {"de", "ampere", ""},
+ // {"de", "milliampere", ""}, // PREFIX, ampere
+ // {"de", "ohm", ""},
+ // {"de", "calorie", ""},
+ // {"de", "kilojoule", ""}, // PREFIX, joule
+ // {"de", "joule", ""},
+ {"de", "kilowatt-hour", "feminine"}, // COMPOUND
+ // {"de", "electronvolt", ""},
+ // {"de", "british-thermal-unit", ""},
+ // {"de", "therm-us", ""},
+ // {"de", "pound-force", ""},
+ // {"de", "newton", ""},
+ // {"de", "gigahertz", ""}, // PREFIX, hertz
+ // {"de", "megahertz", ""}, // PREFIX, hertz
+ // {"de", "kilohertz", ""}, // PREFIX, hertz
+ // {"de", "hertz", ""},
+ // {"de", "em", ""},
+ // {"de", "pixel", ""},
+ // {"de", "megapixel", ""},
+ // {"de", "pixel-per-centimeter", ""}, // COMPOUND, pixel
+ // {"de", "pixel-per-inch", ""}, // COMPOUND, pixel
+ // {"de", "dot-per-centimeter", ""}, // COMPOUND, dot
+ // {"de", "dot-per-inch", ""}, // COMPOUND, dot
+ // {"de", "dot", ""},
+ // {"de", "earth-radius", ""},
+ {"de", "decimeter", "masculine"}, // PREFIX
+ {"de", "micrometer", "masculine"}, // PREFIX
+ {"de", "nanometer", "masculine"}, // PREFIX
+ // {"de", "light-year", ""},
+ // {"de", "astronomical-unit", ""},
+ // {"de", "furlong", ""},
+ // {"de", "fathom", ""},
+ // {"de", "nautical-mile", ""},
+ // {"de", "mile-scandinavian", ""},
+ // {"de", "point", ""},
+ // {"de", "lux", ""},
+ // {"de", "candela", ""},
+ // {"de", "lumen", ""},
+ // {"de", "metric-ton", ""},
+ // {"de", "microgram", "neuter"}, // PREFIX
+ // {"de", "ton", ""},
+ // {"de", "stone", ""},
+ // {"de", "ounce-troy", ""},
+ // {"de", "carat", ""},
+ {"de", "gigawatt", "neuter"}, // PREFIX
+ {"de", "milliwatt", "neuter"}, // PREFIX
+ // {"de", "horsepower", ""},
+ // {"de", "millimeter-ofhg", ""},
+ // {"de", "pound-force-per-square-inch", ""}, // COMPOUND, pound-force
+ // {"de", "inch-ofhg", ""},
+ // {"de", "bar", ""},
+ // {"de", "millibar", ""}, // PREFIX, bar
+ // {"de", "atmosphere", ""},
+ // {"de", "pascal", ""}, // PREFIX, kilopascal? neuter?
+ // {"de", "hectopascal", ""}, // PREFIX, pascal, neuter?
+ // {"de", "megapascal", ""}, // PREFIX, pascal, neuter?
+ // {"de", "knot", ""},
+ {"de", "pound-force-foot", "masculine"}, // COMPOUND
+ {"de", "newton-meter", "masculine"}, // COMPOUND
+ {"de", "cubic-kilometer", "masculine"}, // POWER
+ {"de", "cubic-yard", "neuter"}, // POWER
+ {"de", "cubic-inch", "masculine"}, // POWER
+ {"de", "megaliter", "masculine"}, // PREFIX
+ {"de", "hectoliter", "masculine"}, // PREFIX
+ // {"de", "pint-metric", ""},
+ // {"de", "cup-metric", ""},
+ {"de", "acre-foot", "masculine"}, // COMPOUND
+ // {"de", "bushel", ""},
+ // {"de", "barrel", ""},
+ // Units missing gender in German also misses gender in French:
+ // {"fr", "revolution", ""},
+ // {"fr", "radian", ""},
+ // {"fr", "arc-minute", ""},
+ // {"fr", "arc-second", ""},
+ {"fr", "square-yard", "masculine"}, // POWER
+ {"fr", "square-inch", "masculine"}, // POWER
+ // {"fr", "dunam", ""},
+ // {"fr", "karat", ""},
+ {"fr", "milligram-ofglucose-per-deciliter", "masculine"}, // COMPOUND
+ // {"fr", "millimole-per-liter", ""}, // COMPOUND, mole
+ // {"fr", "permillion", ""},
+ // {"fr", "permille", ""},
+ // {"fr", "permyriad", ""},
+ // {"fr", "mole", ""},
+ {"fr", "liter-per-kilometer", "masculine"}, // COMPOUND
+ // {"fr", "petabyte", ""}, // PREFIX
+ // {"fr", "terabit", ""}, // PREFIX
+ // {"fr", "century", ""},
+ // {"fr", "decade", ""},
+ {"fr", "millisecond", "feminine"}, // PREFIX
+ {"fr", "microsecond", "feminine"}, // PREFIX
+ {"fr", "nanosecond", "feminine"}, // PREFIX
+ // {"fr", "ampere", ""},
+ // {"fr", "milliampere", ""}, // PREFIX, ampere
+ // {"fr", "ohm", ""},
+ // {"fr", "calorie", ""},
+ // {"fr", "kilojoule", ""}, // PREFIX, joule
+ // {"fr", "joule", ""},
+ // {"fr", "kilowatt-hour", ""}, // COMPOUND
+ // {"fr", "electronvolt", ""},
+ // {"fr", "british-thermal-unit", ""},
+ // {"fr", "therm-us", ""},
+ // {"fr", "pound-force", ""},
+ // {"fr", "newton", ""},
+ // {"fr", "gigahertz", ""}, // PREFIX, hertz
+ // {"fr", "megahertz", ""}, // PREFIX, hertz
+ // {"fr", "kilohertz", ""}, // PREFIX, hertz
+ // {"fr", "hertz", ""},
+ // {"fr", "em", ""},
+ // {"fr", "pixel", ""},
+ // {"fr", "megapixel", ""},
+ // {"fr", "pixel-per-centimeter", ""}, // COMPOUND, pixel
+ // {"fr", "pixel-per-inch", ""}, // COMPOUND, pixel
+ // {"fr", "dot-per-centimeter", ""}, // COMPOUND, dot
+ // {"fr", "dot-per-inch", ""}, // COMPOUND, dot
+ // {"fr", "dot", ""},
+ // {"fr", "earth-radius", ""},
+ {"fr", "decimeter", "masculine"}, // PREFIX
+ {"fr", "micrometer", "masculine"}, // PREFIX
+ {"fr", "nanometer", "masculine"}, // PREFIX
+ // {"fr", "light-year", ""},
+ // {"fr", "astronomical-unit", ""},
+ // {"fr", "furlong", ""},
+ // {"fr", "fathom", ""},
+ // {"fr", "nautical-mile", ""},
+ // {"fr", "mile-scandinavian", ""},
+ // {"fr", "point", ""},
+ // {"fr", "lux", ""},
+ // {"fr", "candela", ""},
+ // {"fr", "lumen", ""},
+ // {"fr", "metric-ton", ""},
+ // {"fr", "microgram", "masculine"}, // PREFIX
+ // {"fr", "ton", ""},
+ // {"fr", "stone", ""},
+ // {"fr", "ounce-troy", ""},
+ // {"fr", "carat", ""},
+ // {"fr", "gigawatt", ""}, // PREFIX
+ // {"fr", "milliwatt", ""},
+ // {"fr", "horsepower", ""},
+ {"fr", "millimeter-ofhg", "masculine"},
+ // {"fr", "pound-force-per-square-inch", ""}, // COMPOUND, pound-force
+ {"fr", "inch-ofhg", "masculine"},
+ // {"fr", "bar", ""},
+ // {"fr", "millibar", ""}, // PREFIX, bar
+ // {"fr", "atmosphere", ""},
+ // {"fr", "pascal", ""}, // PREFIX, kilopascal?
+ // {"fr", "hectopascal", ""}, // PREFIX, pascal
+ // {"fr", "megapascal", ""}, // PREFIX, pascal
+ // {"fr", "knot", ""},
+ // {"fr", "pound-force-foot", ""},
+ // {"fr", "newton-meter", ""},
+ {"fr", "cubic-kilometer", "masculine"}, // POWER
+ {"fr", "cubic-yard", "masculine"}, // POWER
+ {"fr", "cubic-inch", "masculine"}, // POWER
+ {"fr", "megaliter", "masculine"}, // PREFIX
+ {"fr", "hectoliter", "masculine"}, // PREFIX
+ // {"fr", "pint-metric", ""},
+ // {"fr", "cup-metric", ""},
+ {"fr", "acre-foot", "feminine"}, // COMPOUND
+ // {"fr", "bushel", ""},
+ // {"fr", "barrel", ""},
+ // Some more French units missing gender:
+ // {"fr", "degree", ""},
+ {"fr", "square-meter", "masculine"}, // POWER
+ // {"fr", "terabyte", ""}, // PREFIX, byte
+ // {"fr", "gigabyte", ""}, // PREFIX, byte
+ // {"fr", "gigabit", ""}, // PREFIX, bit
+ // {"fr", "megabyte", ""}, // PREFIX, byte
+ // {"fr", "megabit", ""}, // PREFIX, bit
+ // {"fr", "kilobyte", ""}, // PREFIX, byte
+ // {"fr", "kilobit", ""}, // PREFIX, bit
+ // {"fr", "byte", ""},
+ // {"fr", "bit", ""},
+ // {"fr", "volt", ""},
+ // {"fr", "watt", ""},
+ {"fr", "cubic-meter", "masculine"}, // POWER
+
+ // gender-lacking builtins within compound units
+ {"de", "newton-meter-per-second", "masculine"},
+
+ // TODO(ICU-21494): determine whether list genders behave as follows,
+ // and implement proper getListGender support (covering more than just
+ // two genders):
+ // // gender rule for lists of people: de "neutral", fr "maleTaints"
+ // {"de", "day-and-hour-and-minute", "neuter"},
+ // {"de", "hour-and-minute", "feminine"},
+ // {"fr", "day-and-hour-and-minute", "masculine"},
+ // {"fr", "hour-and-minute", "feminine"},
+ };
+ LocalizedNumberFormatter formatter;
+ FormattedNumber fn;
+ for (const TestCase &t : cases) {
+ formatter = NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier(t.unitIdentifier, status))
+ .locale(Locale(t.locale));
+ fn = formatter.formatDouble(1.1, status);
+ assertEquals(UnicodeString("Testing gender with default width, unit: ") + t.unitIdentifier +
+ ", locale: " + t.locale,
+ t.expectedGender, fn.getGender(status));
+ status.assertSuccess();
+
+ formatter = NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier(t.unitIdentifier, status))
+ .unitWidth(UNUM_UNIT_WIDTH_FULL_NAME)
+ .locale(Locale(t.locale));
+ fn = formatter.formatDouble(1.1, status);
+ assertEquals(UnicodeString("Testing gender with UNUM_UNIT_WIDTH_FULL_NAME, unit: ") +
+ t.unitIdentifier + ", locale: " + t.locale,
+ t.expectedGender, fn.getGender(status));
+ status.assertSuccess();
+ }
+
+ // Make sure getGender does not return garbage for genderless languages
+ formatter = NumberFormatter::with().locale(Locale::getEnglish());
+ fn = formatter.formatDouble(1.1, status);
+ status.assertSuccess();
+ assertEquals("getGender for a genderless language", "", fn.getGender(status));
+}
+
+void NumberFormatterApiTest::unitNotConvertible() {
+ IcuTestErrorCode status(*this, "unitNotConvertible");
+ const double randomNumber = 1234;
+
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("meter-and-liter", status))
+ .locale("en_US")
+ .formatDouble(randomNumber, status);
+ assertEquals(u"error must be returned", status.errorName(), u"U_ARGUMENT_TYPE_MISMATCH");
+
+ status.reset();
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("month-and-week", status))
+ .locale("en_US")
+ .formatDouble(randomNumber, status);
+ assertEquals(u"error must be returned", status.errorName(), u"U_ARGUMENT_TYPE_MISMATCH");
+
+ status.reset();
+ NumberFormatter::with()
+ .unit(MeasureUnit::forIdentifier("week-and-day", status))
+ .locale("en_US")
+ .formatDouble(randomNumber, status);
+ assertTrue(u"no error", !U_FAILURE(status));
}
void NumberFormatterApiTest::unitPercent() {
@@ -1999,6 +2955,26 @@ void NumberFormatterApiTest::roundingFraction() {
u"0.088",
u"0.009",
u"0.0");
+
+ assertFormatSingle(
+ u"Hide If Whole A",
+ u".00/w",
+ u".00/w",
+ NumberFormatter::with().precision(Precision::fixedFraction(2)
+ .trailingZeroDisplay(UNUM_TRAILING_ZERO_HIDE_IF_WHOLE)),
+ Locale::getEnglish(),
+ 1.2,
+ "1.20");
+
+ assertFormatSingle(
+ u"Hide If Whole B",
+ u".00/w",
+ u".00/w",
+ NumberFormatter::with().precision(Precision::fixedFraction(2)
+ .trailingZeroDisplay(UNUM_TRAILING_ZERO_HIDE_IF_WHOLE)),
+ Locale::getEnglish(),
+ 1,
+ "1");
}
void NumberFormatterApiTest::roundingFigures() {
@@ -2159,6 +3135,81 @@ void NumberFormatterApiTest::roundingFractionFigures() {
Locale::getEnglish(),
0.0999999,
u"0.10");
+
+ assertFormatDescending(
+ u"FracSig withSignificantDigits RELAXED",
+ u"precision-integer/@#r",
+ u"./@#r",
+ NumberFormatter::with().precision(Precision::maxFraction(0)
+ .withSignificantDigits(1, 2, UNUM_ROUNDING_PRIORITY_RELAXED)),
+ Locale::getEnglish(),
+ u"87,650",
+ u"8,765",
+ u"876",
+ u"88",
+ u"8.8",
+ u"0.88",
+ u"0.088",
+ u"0.0088",
+ u"0");
+
+ assertFormatDescending(
+ u"FracSig withSignificantDigits STRICT",
+ u"precision-integer/@#s",
+ u"./@#",
+ NumberFormatter::with().precision(Precision::maxFraction(0)
+ .withSignificantDigits(1, 2, UNUM_ROUNDING_PRIORITY_STRICT)),
+ Locale::getEnglish(),
+ u"88,000",
+ u"8,800",
+ u"880",
+ u"88",
+ u"9",
+ u"1",
+ u"0",
+ u"0",
+ u"0");
+
+ assertFormatSingle(
+ u"FracSig withSignificantDigits Trailing Zeros RELAXED",
+ u".0/@@@r",
+ u".0/@@@r",
+ NumberFormatter::with().precision(Precision::fixedFraction(1)
+ .withSignificantDigits(3, 3, UNUM_ROUNDING_PRIORITY_RELAXED)),
+ Locale::getEnglish(),
+ 1,
+ u"1.00");
+
+ // Trailing zeros are always retained:
+ assertFormatSingle(
+ u"FracSig withSignificantDigits Trailing Zeros STRICT",
+ u".0/@@@s",
+ u".0/@@@s",
+ NumberFormatter::with().precision(Precision::fixedFraction(1)
+ .withSignificantDigits(3, 3, UNUM_ROUNDING_PRIORITY_STRICT)),
+ Locale::getEnglish(),
+ 1,
+ u"1.00");
+
+ assertFormatSingle(
+ u"FracSig withSignificantDigits at rounding boundary",
+ u"precision-integer/@@@s",
+ u"./@@@s",
+ NumberFormatter::with().precision(Precision::fixedFraction(0)
+ .withSignificantDigits(3, 3, UNUM_ROUNDING_PRIORITY_STRICT)),
+ Locale::getEnglish(),
+ 9.99,
+ u"10.0");
+
+ assertFormatSingle(
+ u"FracSig with Trailing Zero Display",
+ u".00/@@@*/w",
+ u".00/@@@+/w",
+ NumberFormatter::with().precision(Precision::fixedFraction(2).withMinDigits(3)
+ .trailingZeroDisplay(UNUM_TRAILING_ZERO_HIDE_IF_WHOLE)),
+ Locale::getEnglish(),
+ 1,
+ u"1");
}
void NumberFormatterApiTest::roundingOther() {
@@ -2227,6 +3278,78 @@ void NumberFormatterApiTest::roundingOther() {
u"0.000");
assertFormatDescending(
+ u"Medium nickel increment with rounding mode ceiling (ICU-21668)",
+ u"precision-increment/50 rounding-mode-ceiling",
+ u"precision-increment/50 rounding-mode-ceiling",
+ NumberFormatter::with()
+ .precision(Precision::increment(50))
+ .roundingMode(UNUM_ROUND_CEILING),
+ Locale::getEnglish(),
+ u"87,650",
+ u"8,800",
+ u"900",
+ u"100",
+ u"50",
+ u"50",
+ u"50",
+ u"50",
+ u"0");
+
+ assertFormatDescending(
+ u"Large nickel increment with rounding mode up (ICU-21668)",
+ u"precision-increment/5000 rounding-mode-up",
+ u"precision-increment/5000 rounding-mode-up",
+ NumberFormatter::with()
+ .precision(Precision::increment(5000))
+ .roundingMode(UNUM_ROUND_UP),
+ Locale::getEnglish(),
+ u"90,000",
+ u"10,000",
+ u"5,000",
+ u"5,000",
+ u"5,000",
+ u"5,000",
+ u"5,000",
+ u"5,000",
+ u"0");
+
+ assertFormatDescending(
+ u"Large dime increment with rounding mode up (ICU-21668)",
+ u"precision-increment/10000 rounding-mode-up",
+ u"precision-increment/10000 rounding-mode-up",
+ NumberFormatter::with()
+ .precision(Precision::increment(10000))
+ .roundingMode(UNUM_ROUND_UP),
+ Locale::getEnglish(),
+ u"90,000",
+ u"10,000",
+ u"10,000",
+ u"10,000",
+ u"10,000",
+ u"10,000",
+ u"10,000",
+ u"10,000",
+ u"0");
+
+ assertFormatDescending(
+ u"Large non-nickel increment with rounding mode up (ICU-21668)",
+ u"precision-increment/15000 rounding-mode-up",
+ u"precision-increment/15000 rounding-mode-up",
+ NumberFormatter::with()
+ .precision(Precision::increment(15000))
+ .roundingMode(UNUM_ROUND_UP),
+ Locale::getEnglish(),
+ u"90,000",
+ u"15,000",
+ u"15,000",
+ u"15,000",
+ u"15,000",
+ u"15,000",
+ u"15,000",
+ u"15,000",
+ u"0");
+
+ assertFormatDescending(
u"Increment Resolving to Power of 10",
u"precision-increment/0.010",
u"precision-increment/0.010",
@@ -2243,6 +3366,38 @@ void NumberFormatterApiTest::roundingOther() {
u"0.000");
assertFormatDescending(
+ u"Integer increment with trailing zeros (ICU-21654)",
+ u"precision-increment/50",
+ u"precision-increment/50",
+ NumberFormatter::with().precision(Precision::increment(50)),
+ Locale::getEnglish(),
+ u"87,650",
+ u"8,750",
+ u"900",
+ u"100",
+ u"0",
+ u"0",
+ u"0",
+ u"0",
+ u"0");
+
+ assertFormatDescending(
+ u"Integer increment with minFraction (ICU-21654)",
+ u"precision-increment/5.0",
+ u"precision-increment/5.0",
+ NumberFormatter::with().precision(Precision::increment(5).withMinFraction(1)),
+ Locale::getEnglish(),
+ u"87,650.0",
+ u"8,765.0",
+ u"875.0",
+ u"90.0",
+ u"10.0",
+ u"0.0",
+ u"0.0",
+ u"0.0",
+ u"0.0");
+
+ assertFormatDescending(
u"Currency Standard",
u"currency/CZK precision-currency-standard",
u"currency/CZK precision-currency-standard",
@@ -2277,6 +3432,25 @@ void NumberFormatterApiTest::roundingOther() {
u"CZK 0");
assertFormatDescending(
+ u"Currency Standard with Trailing Zero Display",
+ u"currency/CZK precision-currency-standard/w",
+ u"currency/CZK precision-currency-standard/w",
+ NumberFormatter::with().precision(
+ Precision::currency(UCurrencyUsage::UCURR_USAGE_STANDARD)
+ .trailingZeroDisplay(UNUM_TRAILING_ZERO_HIDE_IF_WHOLE))
+ .unit(CZK),
+ Locale::getEnglish(),
+ u"CZK 87,650",
+ u"CZK 8,765",
+ u"CZK 876.50",
+ u"CZK 87.65",
+ u"CZK 8.76",
+ u"CZK 0.88",
+ u"CZK 0.09",
+ u"CZK 0.01",
+ u"CZK 0");
+
+ assertFormatDescending(
u"Currency Cash with Nickel Rounding",
u"currency/CAD precision-currency-cash",
u"currency/CAD precision-currency-cash",
@@ -2352,6 +3526,63 @@ void NumberFormatterApiTest::roundingOther() {
u"5E-324");
}
+/** Test for ICU-21654 and ICU-21668 */
+void NumberFormatterApiTest::roundingIncrementRegressionTest() {
+ IcuTestErrorCode status(*this, "roundingIncrementRegressionTest");
+ Locale locale = Locale::getEnglish();
+
+ for (int min_fraction_digits = 1; min_fraction_digits < 8; min_fraction_digits++) {
+ // pattern is a snprintf pattern string like "precision-increment/%0.5f"
+ char pattern[256];
+ snprintf(pattern, 256, "precision-increment/%%0.%df", min_fraction_digits);
+ double increment = 0.05;
+ for (int i = 0; i < 8 ; i++, increment *= 10.0) {
+ const UnlocalizedNumberFormatter f =
+ NumberFormatter::with().precision(
+ Precision::increment(increment).withMinFraction(
+ min_fraction_digits));
+ const LocalizedNumberFormatter l = f.locale(locale);
+
+ std::string skeleton;
+ f.toSkeleton(status).toUTF8String<std::string>(skeleton);
+
+ char message[256];
+ snprintf(message, 256,
+ "ICU-21654: Precision::increment(%0.5f).withMinFraction(%d) '%s'\n",
+ increment, min_fraction_digits,
+ skeleton.c_str());
+
+ if (increment == 0.05 && min_fraction_digits == 1) {
+ // Special case when the number of fraction digits is too low:
+ // Precision::increment(0.05000).withMinFraction(1) 'precision-increment/0.05'
+ assertEquals(message, "precision-increment/0.05", skeleton.c_str());
+ } else {
+ // All other cases: use the snprintf pattern computed above:
+ // Precision::increment(0.50000).withMinFraction(1) 'precision-increment/0.5'
+ // Precision::increment(5.00000).withMinFraction(1) 'precision-increment/5.0'
+ // Precision::increment(50.00000).withMinFraction(1) 'precision-increment/50.0'
+ // ...
+ // Precision::increment(0.05000).withMinFraction(2) 'precision-increment/0.05'
+ // Precision::increment(0.50000).withMinFraction(2) 'precision-increment/0.50'
+ // Precision::increment(5.00000).withMinFraction(2) 'precision-increment/5.00'
+ // ...
+
+ char expected[256];
+ snprintf(expected, 256, pattern, increment);
+ assertEquals(message, expected, skeleton.c_str());
+ }
+ }
+ }
+
+ auto increment = NumberFormatter::with()
+ .precision(Precision::increment(5000).withMinFraction(0))
+ .roundingMode(UNUM_ROUND_UP)
+ .locale(Locale::getEnglish())
+ .formatDouble(5.625, status)
+ .toString(status);
+ assertEquals("ICU-21668", u"5,000", increment);
+}
+
void NumberFormatterApiTest::grouping() {
assertFormatDescendingBig(
u"Western Grouping",
@@ -2865,6 +4096,41 @@ void NumberFormatterApiTest::integerWidth() {
// Note: this double produces all 17 significant digits
10000000000000002000.0,
u"00");
+
+ assertFormatDescending(
+ u"Integer Width Double Zero (ICU-21590)",
+ u"integer-width-trunc",
+ u"integer-width-trunc",
+ NumberFormatter::with()
+ .integerWidth(IntegerWidth::zeroFillTo(0).truncateAt(0)),
+ Locale::getEnglish(),
+ u"0",
+ u"0",
+ u".5",
+ u".65",
+ u".765",
+ u".8765",
+ u".08765",
+ u".008765",
+ u"0");
+
+ assertFormatDescending(
+ u"Integer Width Double Zero with minFraction (ICU-21590)",
+ u"integer-width-trunc .0*",
+ u"integer-width-trunc .0*",
+ NumberFormatter::with()
+ .integerWidth(IntegerWidth::zeroFillTo(0).truncateAt(0))
+ .precision(Precision::minFraction(1)),
+ Locale::getEnglish(),
+ u".0",
+ u".0",
+ u".5",
+ u".65",
+ u".765",
+ u".8765",
+ u".08765",
+ u".008765",
+ u".0");
}
void NumberFormatterApiTest::symbols() {
@@ -3234,6 +4500,60 @@ void NumberFormatterApiTest::sign() {
u"$0.00");
assertFormatSingle(
+ u"Sign Negative Positive",
+ u"sign-negative",
+ u"+-",
+ NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_NEGATIVE),
+ Locale::getEnglish(),
+ 444444,
+ u"444,444");
+
+ assertFormatSingle(
+ u"Sign Negative Negative",
+ u"sign-negative",
+ u"+-",
+ NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_NEGATIVE),
+ Locale::getEnglish(),
+ -444444,
+ u"-444,444");
+
+ assertFormatSingle(
+ u"Sign Negative Negative Zero",
+ u"sign-negative",
+ u"+-",
+ NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_NEGATIVE),
+ Locale::getEnglish(),
+ -0.0000001,
+ u"0");
+
+ assertFormatSingle(
+ u"Sign Accounting-Negative Positive",
+ u"currency/USD sign-accounting-negative",
+ u"currency/USD ()-",
+ NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_NEGATIVE).unit(USD),
+ Locale::getEnglish(),
+ 444444,
+ u"$444,444.00");
+
+ assertFormatSingle(
+ u"Sign Accounting-Negative Negative",
+ u"currency/USD sign-accounting-negative",
+ u"currency/USD ()-",
+ NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_NEGATIVE).unit(USD),
+ Locale::getEnglish(),
+ -444444,
+ "($444,444.00)");
+
+ assertFormatSingle(
+ u"Sign Accounting-Negative Negative Zero",
+ u"currency/USD sign-accounting-negative",
+ u"currency/USD ()-",
+ NumberFormatter::with().sign(UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_NEGATIVE).unit(USD),
+ Locale::getEnglish(),
+ -0.0000001,
+ u"$0.00");
+
+ assertFormatSingle(
u"Sign Accounting Negative Hidden",
u"currency/USD unit-width-hidden sign-accounting",
u"currency/USD unit-width-hidden ()",
@@ -3293,7 +4613,7 @@ void NumberFormatterApiTest::sign() {
.unitWidth(UNUM_UNIT_WIDTH_FULL_NAME),
Locale::getCanada(),
-444444,
- u"-444,444.00 US dollars");
+ u"-444,444.00 U.S. dollars");
}
void NumberFormatterApiTest::signNearZero() {
@@ -3322,6 +4642,12 @@ void NumberFormatterApiTest::signNearZero() {
{ UNUM_SIGN_EXCEPT_ZERO, -0.1, u"0" }, // interesting case
{ UNUM_SIGN_EXCEPT_ZERO, -0.9, u"-1" },
{ UNUM_SIGN_EXCEPT_ZERO, -1.1, u"-1" },
+ { UNUM_SIGN_NEGATIVE, 1.1, u"1" },
+ { UNUM_SIGN_NEGATIVE, 0.9, u"1" },
+ { UNUM_SIGN_NEGATIVE, 0.1, u"0" },
+ { UNUM_SIGN_NEGATIVE, -0.1, u"0" }, // interesting case
+ { UNUM_SIGN_NEGATIVE, -0.9, u"-1" },
+ { UNUM_SIGN_NEGATIVE, -1.1, u"-1" },
};
for (auto& cas : cases) {
auto sign = cas.sign;
@@ -4345,6 +5671,12 @@ void NumberFormatterApiTest::toDecimalNumber() {
u"৯৮,৭৬,৫০,০০,০০,০০,০০০", fn.toString(status));
assertEquals(u"Should have expected toDecimalNumber string result",
"9.8765E+14", fn.toDecimalNumber<std::string>(status).c_str());
+
+ fn = NumberFormatter::withLocale("bn-BD").formatDouble(0, status);
+ assertEquals("Should have expected localized string result",
+ u"০", fn.toString(status));
+ assertEquals(u"Should have expected toDecimalNumber string result",
+ "0", fn.toDecimalNumber<std::string>(status).c_str());
}
void NumberFormatterApiTest::microPropsInternals() {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp
index 9339396e41c..7403dda7e75 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp
@@ -27,10 +27,11 @@ void DecimalQuantityTest::runIndexedTest(int32_t index, UBool exec, const char *
}
TESTCASE_AUTO(testUseApproximateDoubleWhenAble);
TESTCASE_AUTO(testHardDoubleConversion);
+ TESTCASE_AUTO(testFitsInLong);
TESTCASE_AUTO(testToDouble);
TESTCASE_AUTO(testMaxDigits);
TESTCASE_AUTO(testNickelRounding);
- TESTCASE_AUTO(testCompactDecimalSuppressedExponent);
+ TESTCASE_AUTO(testScientificAndCompactSuppressedExponent);
TESTCASE_AUTO(testSuppressedExponentUnchangedByInitialScaling);
TESTCASE_AUTO_END;
}
@@ -357,6 +358,44 @@ void DecimalQuantityTest::testHardDoubleConversion() {
}
}
+void DecimalQuantityTest::testFitsInLong() {
+ IcuTestErrorCode status(*this, "testFitsInLong");
+ DecimalQuantity quantity;
+ quantity.setToInt(0);
+ assertTrue("Zero should fit", quantity.fitsInLong());
+ quantity.setToInt(42);
+ assertTrue("Small int should fit", quantity.fitsInLong());
+ quantity.setToDouble(0.1);
+ assertFalse("Fraction should not fit", quantity.fitsInLong());
+ quantity.setToDouble(42.1);
+ assertFalse("Fraction should not fit", quantity.fitsInLong());
+ quantity.setToLong(1000000);
+ assertTrue("Large low-precision int should fit", quantity.fitsInLong());
+ quantity.setToLong(1000000000000000000L);
+ assertTrue("10^19 should fit", quantity.fitsInLong());
+ quantity.setToLong(1234567890123456789L);
+ assertTrue("A number between 10^19 and max long should fit", quantity.fitsInLong());
+ quantity.setToLong(1234567890000000000L);
+ assertTrue("A number with trailing zeros less than max long should fit", quantity.fitsInLong());
+ quantity.setToLong(9223372026854775808L);
+ assertTrue("A number less than max long but with similar digits should fit",
+ quantity.fitsInLong());
+ quantity.setToLong(9223372036854775806L);
+ assertTrue("One less than max long should fit", quantity.fitsInLong());
+ quantity.setToLong(9223372036854775807L);
+ assertTrue("Max long should fit", quantity.fitsInLong());
+ assertEquals("Max long should equal toLong", 9223372036854775807L, quantity.toLong(false));
+ quantity.setToDecNumber("9223372036854775808", status);
+ assertFalse("One greater than max long should not fit", quantity.fitsInLong());
+ assertEquals("toLong(true) should truncate", 223372036854775808L, quantity.toLong(true));
+ quantity.setToDecNumber("9223372046854775806", status);
+ assertFalse("A number between max long and 10^20 should not fit", quantity.fitsInLong());
+ quantity.setToDecNumber("9223372046800000000", status);
+ assertFalse("A large 10^19 number with trailing zeros should not fit", quantity.fitsInLong());
+ quantity.setToDecNumber("10000000000000000000", status);
+ assertFalse("10^20 should not fit", quantity.fitsInLong());
+}
+
void DecimalQuantityTest::testToDouble() {
IcuTestErrorCode status(*this, "testToDouble");
static const struct TestCase {
@@ -413,6 +452,9 @@ void DecimalQuantityTest::testNickelRounding() {
{1.024, -2, UNUM_ROUND_HALFEVEN, u"1"},
{1.025, -2, UNUM_ROUND_HALFEVEN, u"1"},
{1.025, -2, UNUM_ROUND_HALFDOWN, u"1"},
+ {1.025, -2, UNUM_ROUND_HALF_ODD, u"1.05"},
+ {1.025, -2, UNUM_ROUND_HALF_CEILING, u"1.05"},
+ {1.025, -2, UNUM_ROUND_HALF_FLOOR, u"1"},
{1.025, -2, UNUM_ROUND_HALFUP, u"1.05"},
{1.026, -2, UNUM_ROUND_HALFEVEN, u"1.05"},
{1.030, -2, UNUM_ROUND_HALFEVEN, u"1.05"},
@@ -422,6 +464,9 @@ void DecimalQuantityTest::testNickelRounding() {
{1.070, -2, UNUM_ROUND_HALFEVEN, u"1.05"},
{1.074, -2, UNUM_ROUND_HALFEVEN, u"1.05"},
{1.075, -2, UNUM_ROUND_HALFDOWN, u"1.05"},
+ {1.075, -2, UNUM_ROUND_HALF_ODD, u"1.05"},
+ {1.075, -2, UNUM_ROUND_HALF_CEILING, u"1.1"},
+ {1.075, -2, UNUM_ROUND_HALF_FLOOR, u"1.05"},
{1.075, -2, UNUM_ROUND_HALFUP, u"1.1"},
{1.075, -2, UNUM_ROUND_HALFEVEN, u"1.1"},
{1.076, -2, UNUM_ROUND_HALFEVEN, u"1.1"},
@@ -432,6 +477,9 @@ void DecimalQuantityTest::testNickelRounding() {
{2.25, -1, UNUM_ROUND_HALFEVEN, u"2"},
{2.25, -1, UNUM_ROUND_HALFUP, u"2.5"},
{2.75, -1, UNUM_ROUND_HALFDOWN, u"2.5"},
+ {2.75, -1, UNUM_ROUND_HALF_ODD, u"2.5"},
+ {2.75, -1, UNUM_ROUND_HALF_CEILING, u"3"},
+ {2.75, -1, UNUM_ROUND_HALF_FLOOR, u"2.5"},
{2.75, -1, UNUM_ROUND_HALFEVEN, u"3"},
{3.00, -1, UNUM_ROUND_CEILING, u"3"},
{3.25, -1, UNUM_ROUND_CEILING, u"3.5"},
@@ -469,8 +517,8 @@ void DecimalQuantityTest::testNickelRounding() {
status.expectErrorAndReset(U_FORMAT_INEXACT_ERROR);
}
-void DecimalQuantityTest::testCompactDecimalSuppressedExponent() {
- IcuTestErrorCode status(*this, "testCompactDecimalSuppressedExponent");
+void DecimalQuantityTest::testScientificAndCompactSuppressedExponent() {
+ IcuTestErrorCode status(*this, "testScientificAndCompactSuppressedExponent");
Locale ulocale("fr-FR");
struct TestCase {
@@ -480,53 +528,56 @@ void DecimalQuantityTest::testCompactDecimalSuppressedExponent() {
int64_t expectedLong;
double expectedDouble;
const char16_t* expectedPlainString;
- int32_t expectedSuppressedExponent;
+ int32_t expectedSuppressedScientificExponent;
+ int32_t expectedSuppressedCompactExponent;
} cases[] = {
- // unlocalized formatter skeleton, input, string output, long output, double output, BigDecimal output, plain string, suppressed exponent
- {u"", 123456789, u"123 456 789", 123456789L, 123456789.0, u"123456789", 0},
- {u"compact-long", 123456789, u"123 millions", 123000000L, 123000000.0, u"123000000", 6},
- {u"compact-short", 123456789, u"123 M", 123000000L, 123000000.0, u"123000000", 6},
- {u"scientific", 123456789, u"1,234568E8", 123456800L, 123456800.0, u"123456800", 8},
-
- {u"", 1234567, u"1 234 567", 1234567L, 1234567.0, u"1234567", 0},
- {u"compact-long", 1234567, u"1,2 million", 1200000L, 1200000.0, u"1200000", 6},
- {u"compact-short", 1234567, u"1,2 M", 1200000L, 1200000.0, u"1200000", 6},
- {u"scientific", 1234567, u"1,234567E6", 1234567L, 1234567.0, u"1234567", 6},
-
- {u"", 123456, u"123 456", 123456L, 123456.0, u"123456", 0},
- {u"compact-long", 123456, u"123 mille", 123000L, 123000.0, u"123000", 3},
- {u"compact-short", 123456, u"123 k", 123000L, 123000.0, u"123000", 3},
- {u"scientific", 123456, u"1,23456E5", 123456L, 123456.0, u"123456", 5},
-
- {u"", 123, u"123", 123L, 123.0, u"123", 0},
- {u"compact-long", 123, u"123", 123L, 123.0, u"123", 0},
- {u"compact-short", 123, u"123", 123L, 123.0, u"123", 0},
- {u"scientific", 123, u"1,23E2", 123L, 123.0, u"123", 2},
-
- {u"", 1.2, u"1,2", 1L, 1.2, u"1.2", 0},
- {u"compact-long", 1.2, u"1,2", 1L, 1.2, u"1.2", 0},
- {u"compact-short", 1.2, u"1,2", 1L, 1.2, u"1.2", 0},
- {u"scientific", 1.2, u"1,2E0", 1L, 1.2, u"1.2", 0},
-
- {u"", 0.12, u"0,12", 0L, 0.12, u"0.12", 0},
- {u"compact-long", 0.12, u"0,12", 0L, 0.12, u"0.12", 0},
- {u"compact-short", 0.12, u"0,12", 0L, 0.12, u"0.12", 0},
- {u"scientific", 0.12, u"1,2E-1", 0L, 0.12, u"0.12", -1},
-
- {u"", 0.012, u"0,012", 0L, 0.012, u"0.012", 0},
- {u"compact-long", 0.012, u"0,012", 0L, 0.012, u"0.012", 0},
- {u"compact-short", 0.012, u"0,012", 0L, 0.012, u"0.012", 0},
- {u"scientific", 0.012, u"1,2E-2", 0L, 0.012, u"0.012", -2},
-
- {u"", 999.9, u"999,9", 999L, 999.9, u"999.9", 0},
- {u"compact-long", 999.9, u"1 millier", 1000L, 1000.0, u"1000", 3},
- {u"compact-short", 999.9, u"1 k", 1000L, 1000.0, u"1000", 3},
- {u"scientific", 999.9, u"9,999E2", 999L, 999.9, u"999.9", 2},
-
- {u"", 1000.0, u"1 000", 1000L, 1000.0, u"1000", 0},
- {u"compact-long", 1000.0, u"1 millier", 1000L, 1000.0, u"1000", 3},
- {u"compact-short", 1000.0, u"1 k", 1000L, 1000.0, u"1000", 3},
- {u"scientific", 1000.0, u"1E3", 1000L, 1000.0, u"1000", 3},
+ // unlocalized formatter skeleton, input, string output, long output,
+ // double output, BigDecimal output, plain string,
+ // suppressed scientific exponent, suppressed compact exponent
+ {u"", 123456789, u"123 456 789", 123456789L, 123456789.0, u"123456789", 0, 0},
+ {u"compact-long", 123456789, u"123 millions", 123000000L, 123000000.0, u"123000000", 6, 6},
+ {u"compact-short", 123456789, u"123 M", 123000000L, 123000000.0, u"123000000", 6, 6},
+ {u"scientific", 123456789, u"1,234568E8", 123456800L, 123456800.0, u"123456800", 8, 8},
+
+ {u"", 1234567, u"1 234 567", 1234567L, 1234567.0, u"1234567", 0, 0},
+ {u"compact-long", 1234567, u"1,2 million", 1200000L, 1200000.0, u"1200000", 6, 6},
+ {u"compact-short", 1234567, u"1,2 M", 1200000L, 1200000.0, u"1200000", 6, 6},
+ {u"scientific", 1234567, u"1,234567E6", 1234567L, 1234567.0, u"1234567", 6, 6},
+
+ {u"", 123456, u"123 456", 123456L, 123456.0, u"123456", 0, 0},
+ {u"compact-long", 123456, u"123 mille", 123000L, 123000.0, u"123000", 3, 3},
+ {u"compact-short", 123456, u"123 k", 123000L, 123000.0, u"123000", 3, 3},
+ {u"scientific", 123456, u"1,23456E5", 123456L, 123456.0, u"123456", 5, 5},
+
+ {u"", 123, u"123", 123L, 123.0, u"123", 0, 0},
+ {u"compact-long", 123, u"123", 123L, 123.0, u"123", 0, 0},
+ {u"compact-short", 123, u"123", 123L, 123.0, u"123", 0, 0},
+ {u"scientific", 123, u"1,23E2", 123L, 123.0, u"123", 2, 2},
+
+ {u"", 1.2, u"1,2", 1L, 1.2, u"1.2", 0, 0},
+ {u"compact-long", 1.2, u"1,2", 1L, 1.2, u"1.2", 0, 0},
+ {u"compact-short", 1.2, u"1,2", 1L, 1.2, u"1.2", 0, 0},
+ {u"scientific", 1.2, u"1,2E0", 1L, 1.2, u"1.2", 0, 0},
+
+ {u"", 0.12, u"0,12", 0L, 0.12, u"0.12", 0, 0},
+ {u"compact-long", 0.12, u"0,12", 0L, 0.12, u"0.12", 0, 0},
+ {u"compact-short", 0.12, u"0,12", 0L, 0.12, u"0.12", 0, 0},
+ {u"scientific", 0.12, u"1,2E-1", 0L, 0.12, u"0.12", -1, -1},
+
+ {u"", 0.012, u"0,012", 0L, 0.012, u"0.012", 0, 0},
+ {u"compact-long", 0.012, u"0,012", 0L, 0.012, u"0.012", 0, 0},
+ {u"compact-short", 0.012, u"0,012", 0L, 0.012, u"0.012", 0, 0},
+ {u"scientific", 0.012, u"1,2E-2", 0L, 0.012, u"0.012", -2, -2},
+
+ {u"", 999.9, u"999,9", 999L, 999.9, u"999.9", 0, 0},
+ {u"compact-long", 999.9, u"mille", 1000L, 1000.0, u"1000", 3, 3},
+ {u"compact-short", 999.9, u"1 k", 1000L, 1000.0, u"1000", 3, 3},
+ {u"scientific", 999.9, u"9,999E2", 999L, 999.9, u"999.9", 2, 2},
+
+ {u"", 1000.0, u"1 000", 1000L, 1000.0, u"1000", 0, 0},
+ {u"compact-long", 1000.0, u"mille", 1000L, 1000.0, u"1000", 3, 3},
+ {u"compact-short", 1000.0, u"1 k", 1000L, 1000.0, u"1000", 3, 3},
+ {u"scientific", 1000.0, u"1E3", 1000L, 1000.0, u"1000", 3, 3},
};
for (const auto& cas : cases) {
// test the helper methods used to compute plural operand values
@@ -541,18 +592,19 @@ void DecimalQuantityTest::testCompactDecimalSuppressedExponent() {
int64_t actualLong = dq.toLong();
double actualDouble = dq.toDouble();
UnicodeString actualPlainString = dq.toPlainString();
- int32_t actualSuppressedExponent = dq.getExponent();
+ int32_t actualSuppressedScientificExponent = dq.getExponent();
+ int32_t actualSuppressedCompactExponent = dq.getExponent();
assertEquals(
u"formatted number " + cas.skeleton + u" toString: " + cas.input,
cas.expectedString,
actualString);
assertEquals(
- u"compact decimal " + cas.skeleton + u" toLong: " + cas.input,
+ u"formatted number " + cas.skeleton + u" toLong: " + cas.input,
cas.expectedLong,
actualLong);
assertDoubleEquals(
- u"compact decimal " + cas.skeleton + u" toDouble: " + cas.input,
+ u"formatted number " + cas.skeleton + u" toDouble: " + cas.input,
cas.expectedDouble,
actualDouble);
assertEquals(
@@ -560,36 +612,46 @@ void DecimalQuantityTest::testCompactDecimalSuppressedExponent() {
cas.expectedPlainString,
actualPlainString);
assertEquals(
- u"compact decimal " + cas.skeleton + u" suppressed exponent: " + cas.input,
- cas.expectedSuppressedExponent,
- actualSuppressedExponent);
+ u"formatted number " + cas.skeleton + u" suppressed scientific exponent: " + cas.input,
+ cas.expectedSuppressedScientificExponent,
+ actualSuppressedScientificExponent);
+ assertEquals(
+ u"formatted number " + cas.skeleton + u" suppressed compact exponent: " + cas.input,
+ cas.expectedSuppressedCompactExponent,
+ actualSuppressedCompactExponent);
// test the actual computed values of the plural operands
double expectedNOperand = cas.expectedDouble;
double expectedIOperand = cas.expectedLong;
- double expectedEOperand = cas.expectedSuppressedExponent;
+ double expectedEOperand = cas.expectedSuppressedScientificExponent;
+ double expectedCOperand = cas.expectedSuppressedCompactExponent;
double actualNOperand = dq.getPluralOperand(PLURAL_OPERAND_N);
double actualIOperand = dq.getPluralOperand(PLURAL_OPERAND_I);
double actualEOperand = dq.getPluralOperand(PLURAL_OPERAND_E);
+ double actualCOperand = dq.getPluralOperand(PLURAL_OPERAND_C);
assertDoubleEquals(
- u"compact decimal " + cas.skeleton + u" n operand: " + cas.input,
+ u"formatted number " + cas.skeleton + u" n operand: " + cas.input,
expectedNOperand,
actualNOperand);
assertDoubleEquals(
- u"compact decimal " + cas.skeleton + u" i operand: " + cas.input,
+ u"formatted number " + cas.skeleton + u" i operand: " + cas.input,
expectedIOperand,
actualIOperand);
assertDoubleEquals(
- u"compact decimal " + cas.skeleton + " e operand: " + cas.input,
+ u"formatted number " + cas.skeleton + " e operand: " + cas.input,
expectedEOperand,
actualEOperand);
+ assertDoubleEquals(
+ u"formatted number " + cas.skeleton + " c operand: " + cas.input,
+ expectedCOperand,
+ actualCOperand);
}
}
void DecimalQuantityTest::testSuppressedExponentUnchangedByInitialScaling() {
- IcuTestErrorCode status(*this, "testCompactDecimalSuppressedExponent");
+ IcuTestErrorCode status(*this, "testSuppressedExponentUnchangedByInitialScaling");
Locale ulocale("fr-FR");
LocalizedNumberFormatter withLocale = NumberFormatter::withLocale(ulocale);
LocalizedNumberFormatter compactLong =
@@ -603,20 +665,22 @@ void DecimalQuantityTest::testSuppressedExponentUnchangedByInitialScaling() {
double expectedNOperand;
double expectedIOperand;
double expectedEOperand;
+ double expectedCOperand;
} cases[] = {
// input, compact long string output,
- // compact n operand, compact i operand, compact e operand
- {123456789, "123 millions", 123000000.0, 123000000.0, 6.0},
- {1234567, "1,2 million", 1200000.0, 1200000.0, 6.0},
- {123456, "123 mille", 123000.0, 123000.0, 3.0},
- {123, "123", 123.0, 123.0, 0.0},
+ // compact n operand, compact i operand, compact e operand,
+ // compact c operand
+ {123456789, "123 millions", 123000000.0, 123000000.0, 6.0, 6.0},
+ {1234567, "1,2 million", 1200000.0, 1200000.0, 6.0, 6.0},
+ {123456, "123 mille", 123000.0, 123000.0, 3.0, 3.0},
+ {123, "123", 123.0, 123.0, 0.0, 0.0},
};
for (const auto& cas : cases) {
FormattedNumber fnCompactScaled = compactScaled.formatInt(cas.input, status);
DecimalQuantity dqCompactScaled;
fnCompactScaled.getDecimalQuantity(dqCompactScaled, status);
- double compactScaledEOperand = dqCompactScaled.getPluralOperand(PLURAL_OPERAND_E);
+ double compactScaledCOperand = dqCompactScaled.getPluralOperand(PLURAL_OPERAND_C);
FormattedNumber fnCompact = compactLong.formatInt(cas.input, status);
DecimalQuantity dqCompact;
@@ -625,6 +689,7 @@ void DecimalQuantityTest::testSuppressedExponentUnchangedByInitialScaling() {
double compactNOperand = dqCompact.getPluralOperand(PLURAL_OPERAND_N);
double compactIOperand = dqCompact.getPluralOperand(PLURAL_OPERAND_I);
double compactEOperand = dqCompact.getPluralOperand(PLURAL_OPERAND_E);
+ double compactCOperand = dqCompact.getPluralOperand(PLURAL_OPERAND_C);
assertEquals(
u"formatted number " + Int64ToUnicodeString(cas.input) + " compactLong toString: ",
cas.expectedString,
@@ -641,14 +706,18 @@ void DecimalQuantityTest::testSuppressedExponentUnchangedByInitialScaling() {
u"compact decimal " + DoubleToUnicodeString(cas.input) + ", e operand vs. expected",
cas.expectedEOperand,
compactEOperand);
+ assertDoubleEquals(
+ u"compact decimal " + DoubleToUnicodeString(cas.input) + ", c operand vs. expected",
+ cas.expectedCOperand,
+ compactCOperand);
// By scaling by 10^3 in a locale that has words / compact notation
// based on powers of 10^3, we guarantee that the suppressed
// exponent will differ by 3.
assertDoubleEquals(
- u"decimal " + DoubleToUnicodeString(cas.input) + ", e operand for compact vs. compact scaled",
- compactEOperand + 3,
- compactScaledEOperand);
+ u"decimal " + DoubleToUnicodeString(cas.input) + ", c operand for compact vs. compact scaled",
+ compactCOperand + 3,
+ compactScaledCOperand);
}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
index 650c526ce06..cdaa3680943 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
@@ -27,7 +27,7 @@ void PatternModifierTest::testBasic() {
PatternParser::parseToPatternInfo(u"a0b", patternInfo, status);
assertSuccess("Spot 1", status);
mod.setPatternInfo(&patternInfo, kUndefinedField);
- mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
+ mod.setPatternAttributes(UNUM_SIGN_AUTO, false, false);
DecimalFormatSymbols symbols(Locale::getEnglish(), status);
mod.setSymbols(&symbols, {u"USD", status}, UNUM_UNIT_WIDTH_SHORT, nullptr, status);
if (!assertSuccess("Spot 2", status, true)) {
@@ -37,7 +37,7 @@ void PatternModifierTest::testBasic() {
mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b", u"a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
- mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false);
+ mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false, false);
assertEquals("Pattern a0b", u"+a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
mod.setNumberProperties(SIGNUM_NEG_ZERO, StandardPlural::Form::COUNT);
@@ -46,26 +46,39 @@ void PatternModifierTest::testBasic() {
mod.setNumberProperties(SIGNUM_POS_ZERO, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b", u"+a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
- mod.setPatternAttributes(UNUM_SIGN_EXCEPT_ZERO, false);
+ mod.setPatternAttributes(UNUM_SIGN_EXCEPT_ZERO, false, false);
assertEquals("Pattern a0b", u"a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
mod.setNumberProperties(SIGNUM_NEG, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b", u"-a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
- mod.setPatternAttributes(UNUM_SIGN_NEVER, false);
+ mod.setPatternAttributes(UNUM_SIGN_NEVER, false, false);
assertEquals("Pattern a0b", u"a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
assertSuccess("Spot 3", status);
+ mod.setPatternAttributes(UNUM_SIGN_AUTO, false, true);
+ mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b", u"~a", getPrefix(mod, status));
+ assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
+ mod.setNumberProperties(SIGNUM_NEG, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b", u"~-a", getPrefix(mod, status));
+ assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
+ mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false, true);
+ mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b", u"~+a", getPrefix(mod, status));
+ assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
+ assertSuccess("Spot 3.5", status);
+
ParsedPatternInfo patternInfo2;
PatternParser::parseToPatternInfo(u"a0b;c-0d", patternInfo2, status);
assertSuccess("Spot 4", status);
mod.setPatternInfo(&patternInfo2, kUndefinedField);
- mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
+ mod.setPatternAttributes(UNUM_SIGN_AUTO, false, false);
mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b;c-0d", u"a", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"b", getSuffix(mod, status));
- mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false);
+ mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false, false);
assertEquals("Pattern a0b;c-0d", u"c+", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
mod.setNumberProperties(SIGNUM_NEG_ZERO, StandardPlural::Form::COUNT);
@@ -74,16 +87,29 @@ void PatternModifierTest::testBasic() {
mod.setNumberProperties(SIGNUM_POS_ZERO, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b;c-0d", u"c+", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
- mod.setPatternAttributes(UNUM_SIGN_EXCEPT_ZERO, false);
+ mod.setPatternAttributes(UNUM_SIGN_EXCEPT_ZERO, false, false);
assertEquals("Pattern a0b;c-0d", u"a", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"b", getSuffix(mod, status));
mod.setNumberProperties(SIGNUM_NEG, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b;c-0d", u"c-", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
- mod.setPatternAttributes(UNUM_SIGN_NEVER, false);
+ mod.setPatternAttributes(UNUM_SIGN_NEVER, false, false);
assertEquals("Pattern a0b;c-0d", u"a", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"b", getSuffix(mod, status));
assertSuccess("Spot 5", status);
+
+ mod.setPatternAttributes(UNUM_SIGN_AUTO, false, true);
+ mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b;c-0d", u"c~", getPrefix(mod, status));
+ assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
+ mod.setNumberProperties(SIGNUM_NEG, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b;c-0d", u"c~-", getPrefix(mod, status));
+ assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
+ mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false, true);
+ mod.setNumberProperties(SIGNUM_POS, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b;c-0d", u"c~+", getPrefix(mod, status));
+ assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
+ assertSuccess("Spot 5.5", status);
}
void PatternModifierTest::testPatternWithNoPlaceholder() {
@@ -93,7 +119,7 @@ void PatternModifierTest::testPatternWithNoPlaceholder() {
PatternParser::parseToPatternInfo(u"abc", patternInfo, status);
assertSuccess("Spot 1", status);
mod.setPatternInfo(&patternInfo, kUndefinedField);
- mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
+ mod.setPatternAttributes(UNUM_SIGN_AUTO, false, false);
DecimalFormatSymbols symbols(Locale::getEnglish(), status);
mod.setSymbols(&symbols, {u"USD", status}, UNUM_UNIT_WIDTH_SHORT, nullptr, status);
if (!assertSuccess("Spot 2", status, true)) {
@@ -135,7 +161,7 @@ void PatternModifierTest::testMutableEqualsImmutable() {
PatternParser::parseToPatternInfo("a0b;c-0d", patternInfo, status);
assertSuccess("Spot 1", status);
mod.setPatternInfo(&patternInfo, kUndefinedField);
- mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
+ mod.setPatternAttributes(UNUM_SIGN_AUTO, false, false);
DecimalFormatSymbols symbols(Locale::getEnglish(), status);
mod.setSymbols(&symbols, {u"USD", status}, UNUM_UNIT_WIDTH_SHORT, nullptr, status);
assertSuccess("Spot 2", status);
@@ -160,7 +186,7 @@ void PatternModifierTest::testMutableEqualsImmutable() {
FormattedStringBuilder nsb3;
MicroProps micros3;
mod.addToChain(&micros3);
- mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false);
+ mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false, false);
mod.processQuantity(fq, micros3, status);
micros3.modMiddle->apply(nsb3, 0, 0, status);
assertSuccess("Spot 5", status);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternstring.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternstring.cpp
index b89148df00d..0bfd58016ff 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternstring.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternstring.cpp
@@ -17,6 +17,7 @@ void PatternStringTest::runIndexedTest(int32_t index, UBool exec, const char*& n
TESTCASE_AUTO(testToPatternSimple);
TESTCASE_AUTO(testExceptionOnInvalid);
TESTCASE_AUTO(testBug13117);
+ TESTCASE_AUTO(testCurrencyDecimal);
TESTCASE_AUTO_END;
}
@@ -56,6 +57,9 @@ void PatternStringTest::testToPatternSimple() {
{u"0E0", u"0E0"},
{u"#00E00", u"#00E00"},
{u"#,##0", u"#,##0"},
+ {u"0¤", u"0¤"},
+ {u"0¤a", u"0¤a"},
+ {u"0¤00", u"0¤00"},
{u"#;#", u"0;0"},
// ignore a negative prefix pattern of '-' since that is the default:
{u"#;-#", u"0"},
@@ -77,6 +81,7 @@ void PatternStringTest::testToPatternSimple() {
assertSuccess(input, status);
UnicodeString actual = PatternStringUtils::propertiesToPatternString(properties, status);
assertEquals(input, output, actual);
+ status = U_ZERO_ERROR;
}
}
@@ -113,4 +118,34 @@ void PatternStringTest::testBug13117() {
assertTrue("Should not consume negative subpattern", expected == actual);
}
+void PatternStringTest::testCurrencyDecimal() {
+ IcuTestErrorCode status(*this, "testCurrencyDecimal");
+
+ // Manually create a NumberFormatter from a specific pattern
+ ParsedPatternInfo patternInfo;
+ PatternParser::parseToPatternInfo(u"a0¤00b", patternInfo, status);
+ MacroProps macros;
+ macros.unit = CurrencyUnit(u"EUR", status);
+ macros.affixProvider = &patternInfo;
+ LocalizedNumberFormatter nf = NumberFormatter::with().macros(macros).locale("und");
+
+ // Test that the output is as expected
+ FormattedNumber fn = nf.formatDouble(3.14, status);
+ assertEquals("Should substitute currency symbol", u"a3€14b", fn.toTempString(status));
+
+ // Test field positions
+ static const UFieldPosition expectedFieldPositions[] = {
+ {UNUM_INTEGER_FIELD, 1, 2},
+ {UNUM_CURRENCY_FIELD, 2, 3},
+ {UNUM_FRACTION_FIELD, 3, 5}};
+ checkFormattedValue(
+ u"Currency as decimal basic field positions",
+ fn,
+ u"a3€14b",
+ UFIELD_CATEGORY_NUMBER,
+ expectedFieldPositions,
+ UPRV_LENGTHOF(expectedFieldPositions)
+ );
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp
index 2cd31cae1b8..08e74df8f52 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_range.cpp
@@ -21,6 +21,7 @@ NumberRangeFormatterTest::NumberRangeFormatterTest()
NumberRangeFormatterTest::NumberRangeFormatterTest(UErrorCode& status)
: USD(u"USD", status),
+ CHF(u"CHF", status),
GBP(u"GBP", status),
PTE(u"PTE", status) {
@@ -47,11 +48,15 @@ void NumberRangeFormatterTest::runIndexedTest(int32_t index, UBool exec, const c
TESTCASE_AUTO(testCollapse);
TESTCASE_AUTO(testIdentity);
TESTCASE_AUTO(testDifferentFormatters);
+ TESTCASE_AUTO(testNaNInfinity);
TESTCASE_AUTO(testPlurals);
TESTCASE_AUTO(testFieldPositions);
TESTCASE_AUTO(testCopyMove);
TESTCASE_AUTO(toObject);
TESTCASE_AUTO(testGetDecimalNumbers);
+ TESTCASE_AUTO(test21684_Performance);
+ TESTCASE_AUTO(test21358_SignPosition);
+ TESTCASE_AUTO(test21683_StateLeak);
TESTCASE_AUTO_END;
}
@@ -135,14 +140,14 @@ void NumberRangeFormatterTest::testBasic() {
.numberFormatterBoth(NumberFormatter::with().unit(FAHRENHEIT).unitWidth(UNUM_UNIT_WIDTH_FULL_NAME)),
Locale("fr-FR"),
u"1–5\u00A0degrés Fahrenheit",
- u"≈5\u00A0degrés Fahrenheit",
- u"≈5\u00A0degrés Fahrenheit",
+ u"≃5\u00A0degrés Fahrenheit",
+ u"≃5\u00A0degrés Fahrenheit",
u"0–3\u00A0degrés Fahrenheit",
- u"≈0\u00A0degré Fahrenheit",
+ u"≃0\u00A0degré Fahrenheit",
u"3–3\u202F000\u00A0degrés Fahrenheit",
u"3\u202F000–5\u202F000\u00A0degrés Fahrenheit",
u"4\u202F999–5\u202F001\u00A0degrés Fahrenheit",
- u"≈5\u202F000\u00A0degrés Fahrenheit",
+ u"≃5\u202F000\u00A0degrés Fahrenheit",
u"5\u202F000–5\u202F000\u202F000\u00A0degrés Fahrenheit");
assertFormatRange(
@@ -150,14 +155,14 @@ void NumberRangeFormatterTest::testBasic() {
NumberRangeFormatter::with(),
Locale("ja"),
u"1~5",
- u"約 5",
- u"約 5",
+ u"約5",
+ u"約5",
u"0~3",
- u"約 0",
+ u"約0",
u"3~3,000",
u"3,000~5,000",
u"4,999~5,001",
- u"約 5,000",
+ u"約5,000",
u"5,000~5,000,000");
assertFormatRange(
@@ -663,6 +668,29 @@ void NumberRangeFormatterTest::testDifferentFormatters() {
u"5,000–5,000,000");
}
+void NumberRangeFormatterTest::testNaNInfinity() {
+ IcuTestErrorCode status(*this, "testNaNInfinity");
+
+ auto lnf = NumberRangeFormatter::withLocale("en");
+ auto result1 = lnf.formatFormattableRange(-uprv_getInfinity(), 0, status);
+ auto result2 = lnf.formatFormattableRange(0, uprv_getInfinity(), status);
+ auto result3 = lnf.formatFormattableRange(-uprv_getInfinity(), uprv_getInfinity(), status);
+ auto result4 = lnf.formatFormattableRange(uprv_getNaN(), 0, status);
+ auto result5 = lnf.formatFormattableRange(0, uprv_getNaN(), status);
+ auto result6 = lnf.formatFormattableRange(uprv_getNaN(), uprv_getNaN(), status);
+ auto result7 = lnf.formatFormattableRange({"1000", status}, {"Infinity", status}, status);
+ auto result8 = lnf.formatFormattableRange({"-Infinity", status}, {"NaN", status}, status);
+
+ assertEquals("0 - inf", u"-∞ – 0", result1.toTempString(status));
+ assertEquals("-inf - 0", u"0–∞", result2.toTempString(status));
+ assertEquals("-inf - inf", u"-∞ – ∞", result3.toTempString(status));
+ assertEquals("NaN - 0", u"NaN–0", result4.toTempString(status));
+ assertEquals("0 - NaN", u"0–NaN", result5.toTempString(status));
+ assertEquals("NaN - NaN", u"~NaN", result6.toTempString(status));
+ assertEquals("1000 - inf", u"1,000–∞", result7.toTempString(status));
+ assertEquals("-inf - NaN", u"-∞ – NaN", result8.toTempString(status));
+}
+
void NumberRangeFormatterTest::testPlurals() {
IcuTestErrorCode status(*this, "testPlurals");
@@ -740,18 +768,19 @@ void NumberRangeFormatterTest::testFieldPositions() {
3000,
5000,
expectedString);
- static const UFieldPosition expectedFieldPositions[] = {
- // field, begin index, end index
- {UNUM_INTEGER_FIELD, 0, 1},
- {UNUM_COMPACT_FIELD, 1, 2},
- {UNUM_INTEGER_FIELD, 5, 6},
- {UNUM_COMPACT_FIELD, 6, 7},
- {UNUM_MEASURE_UNIT_FIELD, 8, 9}};
- checkFormattedValue(
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // category, field, begin index, end index
+ {UFIELD_CATEGORY_NUMBER_RANGE_SPAN, 0, 0, 2},
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD, 0, 1},
+ {UFIELD_CATEGORY_NUMBER, UNUM_COMPACT_FIELD, 1, 2},
+ {UFIELD_CATEGORY_NUMBER_RANGE_SPAN, 1, 5, 7},
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD, 5, 6},
+ {UFIELD_CATEGORY_NUMBER, UNUM_COMPACT_FIELD, 6, 7},
+ {UFIELD_CATEGORY_NUMBER, UNUM_MEASURE_UNIT_FIELD, 8, 9}};
+ checkMixedFormattedValue(
message,
result,
expectedString,
- UFIELD_CATEGORY_NUMBER,
expectedFieldPositions,
UPRV_LENGTHOF(expectedFieldPositions));
}
@@ -765,19 +794,20 @@ void NumberRangeFormatterTest::testFieldPositions() {
87654321,
98765432,
expectedString);
- static const UFieldPosition expectedFieldPositions[] = {
- // field, begin index, end index
- {UNUM_GROUPING_SEPARATOR_FIELD, 2, 3},
- {UNUM_GROUPING_SEPARATOR_FIELD, 6, 7},
- {UNUM_INTEGER_FIELD, 0, 10},
- {UNUM_GROUPING_SEPARATOR_FIELD, 13, 14},
- {UNUM_GROUPING_SEPARATOR_FIELD, 17, 18},
- {UNUM_INTEGER_FIELD, 11, 21}};
- checkFormattedValue(
+ static const UFieldPositionWithCategory expectedFieldPositions[] = {
+ // category, field, begin index, end index
+ {UFIELD_CATEGORY_NUMBER_RANGE_SPAN, 0, 0, 10},
+ {UFIELD_CATEGORY_NUMBER, UNUM_GROUPING_SEPARATOR_FIELD, 2, 3},
+ {UFIELD_CATEGORY_NUMBER, UNUM_GROUPING_SEPARATOR_FIELD, 6, 7},
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD, 0, 10},
+ {UFIELD_CATEGORY_NUMBER_RANGE_SPAN, 1, 11, 21},
+ {UFIELD_CATEGORY_NUMBER, UNUM_GROUPING_SEPARATOR_FIELD, 13, 14},
+ {UFIELD_CATEGORY_NUMBER, UNUM_GROUPING_SEPARATOR_FIELD, 17, 18},
+ {UFIELD_CATEGORY_NUMBER, UNUM_INTEGER_FIELD, 11, 21}};
+ checkMixedFormattedValue(
message,
result,
expectedString,
- UFIELD_CATEGORY_NUMBER,
expectedFieldPositions,
UPRV_LENGTHOF(expectedFieldPositions));
}
@@ -823,6 +853,9 @@ void NumberRangeFormatterTest::testCopyMove() {
assertEquals("FormattedNumberRange move constructor", u"1,00–5,00 $US", result.toString(status));
result = l1.formatFormattableRange(3, 6, status);
assertEquals("FormattedNumberRange move assignment", u"3,00–6,00 $US", result.toString(status));
+ FormattedNumberRange fnrdefault;
+ fnrdefault.toString(status);
+ status.expectErrorAndReset(U_INVALID_STATE_ERROR);
}
void NumberRangeFormatterTest::toObject() {
@@ -903,6 +936,143 @@ void NumberRangeFormatterTest::testGetDecimalNumbers() {
}
}
+void NumberRangeFormatterTest::test21684_Performance() {
+ IcuTestErrorCode status(*this, "test21684_Performance");
+ LocalizedNumberRangeFormatter lnf = NumberRangeFormatter::withLocale("en");
+ // The following two lines of code should finish quickly.
+ lnf.formatFormattableRange({"-1e99999", status}, {"0", status}, status);
+ lnf.formatFormattableRange({"0", status}, {"1e99999", status}, status);
+}
+
+void NumberRangeFormatterTest::test21358_SignPosition() {
+ IcuTestErrorCode status(*this, "test21358_SignPosition");
+
+ // de-CH has currency pattern "¤ #,##0.00;¤-#,##0.00"
+ assertFormatRange(
+ u"Approximately sign position with spacing from pattern",
+ NumberRangeFormatter::with()
+ .numberFormatterBoth(NumberFormatter::with().unit(CHF)),
+ Locale("de-CH"),
+ u"CHF 1.00–5.00",
+ u"CHF≈5.00",
+ u"CHF≈5.00",
+ u"CHF 0.00–3.00",
+ u"CHF≈0.00",
+ u"CHF 3.00–3’000.00",
+ u"CHF 3’000.00–5’000.00",
+ u"CHF 4’999.00–5’001.00",
+ u"CHF≈5’000.00",
+ u"CHF 5’000.00–5’000’000.00");
+
+ // TODO(CLDR-13044): Move the sign to the inside of the number
+ assertFormatRange(
+ u"Approximately sign position with currency spacing",
+ NumberRangeFormatter::with()
+ .numberFormatterBoth(NumberFormatter::with().unit(CHF)),
+ Locale("en-US"),
+ u"CHF 1.00–5.00",
+ u"~CHF 5.00",
+ u"~CHF 5.00",
+ u"CHF 0.00–3.00",
+ u"~CHF 0.00",
+ u"CHF 3.00–3,000.00",
+ u"CHF 3,000.00–5,000.00",
+ u"CHF 4,999.00–5,001.00",
+ u"~CHF 5,000.00",
+ u"CHF 5,000.00–5,000,000.00");
+
+ {
+ LocalizedNumberRangeFormatter lnrf = NumberRangeFormatter::withLocale("de-CH");
+ UnicodeString actual = lnrf.formatFormattableRange(-2, 3, status).toString(status);
+ assertEquals("Negative to positive range", u"-2 – 3", actual);
+ }
+
+ {
+ LocalizedNumberRangeFormatter lnrf = NumberRangeFormatter::withLocale("de-CH")
+ .numberFormatterBoth(NumberFormatter::forSkeleton(u"%", status));
+ UnicodeString actual = lnrf.formatFormattableRange(-2, 3, status).toString(status);
+ assertEquals("Negative to positive percent", u"-2% – 3%", actual);
+ }
+
+ {
+ // TODO(CLDR-14111): Add spacing between range separator and sign
+ LocalizedNumberRangeFormatter lnrf = NumberRangeFormatter::withLocale("de-CH");
+ UnicodeString actual = lnrf.formatFormattableRange(2, -3, status).toString(status);
+ assertEquals("Positive to negative range", u"2–-3", actual);
+ }
+
+ {
+ LocalizedNumberRangeFormatter lnrf = NumberRangeFormatter::withLocale("de-CH")
+ .numberFormatterBoth(NumberFormatter::forSkeleton(u"%", status));
+ UnicodeString actual = lnrf.formatFormattableRange(2, -3, status).toString(status);
+ assertEquals("Positive to negative percent", u"2% – -3%", actual);
+ }
+}
+
+void NumberRangeFormatterTest::test21683_StateLeak() {
+ IcuTestErrorCode status(*this, "test21683_StateLeak");
+ UNumberRangeFormatter* nrf = nullptr;
+ UFormattedNumberRange* result = nullptr;
+ UConstrainedFieldPosition* fpos = nullptr;
+
+ struct Range {
+ double start;
+ double end;
+ const char16_t* expected;
+ int numFields;
+ } ranges[] = {
+ {1, 2, u"1\u20132", 4},
+ {1, 1, u"~1", 2},
+ };
+
+ UParseError* perror = nullptr;
+ nrf = unumrf_openForSkeletonWithCollapseAndIdentityFallback(
+ u"", -1,
+ UNUM_RANGE_COLLAPSE_AUTO,
+ UNUM_IDENTITY_FALLBACK_APPROXIMATELY,
+ "en", perror, status);
+ if (status.errIfFailureAndReset("unumrf_openForSkeletonWithCollapseAndIdentityFallback")) {
+ goto cleanup;
+ }
+
+ result = unumrf_openResult(status);
+ if (status.errIfFailureAndReset("unumrf_openResult")) { goto cleanup; }
+
+ for (auto range : ranges) {
+ unumrf_formatDoubleRange(nrf, range.start, range.end, result, status);
+ if (status.errIfFailureAndReset("unumrf_formatDoubleRange")) { goto cleanup; }
+
+ auto* formattedValue = unumrf_resultAsValue(result, status);
+ if (status.errIfFailureAndReset("unumrf_resultAsValue")) { goto cleanup; }
+
+ int32_t utf16Length;
+ const char16_t* utf16Str = ufmtval_getString(formattedValue, &utf16Length, status);
+ if (status.errIfFailureAndReset("ufmtval_getString")) { goto cleanup; }
+
+ assertEquals("Format", range.expected, utf16Str);
+
+ ucfpos_close(fpos);
+ fpos = ucfpos_open(status);
+ if (status.errIfFailureAndReset("ucfpos_open")) { goto cleanup; }
+
+ int numFields = 0;
+ while (true) {
+ bool hasMore = ufmtval_nextPosition(formattedValue, fpos, status);
+ if (status.errIfFailureAndReset("ufmtval_nextPosition")) { goto cleanup; }
+ if (!hasMore) {
+ break;
+ }
+ numFields++;
+ }
+ assertEquals("numFields", range.numFields, numFields);
+ }
+
+cleanup:
+ unumrf_close(nrf);
+ unumrf_closeResult(result);
+ ucfpos_close(fpos);
+}
+
void NumberRangeFormatterTest::assertFormatRange(
const char16_t* message,
const UnlocalizedNumberRangeFormatter& f,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp
index 07a864a6a4b..f09fb60c8c6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_skeletons.cpp
@@ -46,18 +46,28 @@ void NumberSkeletonTest::validTokens() {
u"@@@##",
u"@@*",
u"@@+",
+ u"@@+/w",
u".000##",
u".00*",
u".00+",
u".",
+ u"./w",
u".*",
u".+",
+ u".+/w",
u".######",
u".00/@@*",
u".00/@@+",
u".00/@##",
+ u".00/@##/w",
+ u".00/@",
+ u".00/@r",
+ u".00/@@s",
+ u".00/@@#r",
u"precision-increment/3.14",
+ u"precision-increment/3.14/w",
u"precision-currency-standard",
+ u"precision-currency-standard/w",
u"precision-integer rounding-mode-half-up",
u".00# rounding-mode-ceiling",
u".00/@@* rounding-mode-floor",
@@ -148,6 +158,9 @@ void NumberSkeletonTest::validTokens() {
void NumberSkeletonTest::invalidTokens() {
static const char16_t* cases[] = {
u".00x",
+ u".00i",
+ u".00/x",
+ u".00/ww",
u".00##0",
u".##*",
u".00##*",
@@ -159,21 +172,23 @@ void NumberSkeletonTest::invalidTokens() {
u"@#+",
u"@@x",
u"@@##0",
- u".00/@",
u".00/@@",
u".00/@@x",
u".00/@@#",
u".00/@@#*",
u".00/floor/@@*", // wrong order
u".00/@@#+",
+ u".00/@@@+r",
u".00/floor/@@+", // wrong order
u"precision-increment/français", // non-invariant characters for C++
u"scientific/ee",
u"precision-increment/xxx",
u"precision-increment/NaN",
+ u"precision-increment/Infinity",
u"precision-increment/0.1.2",
u"scale/xxx",
u"scale/NaN",
+ u"scale/Infinity",
u"scale/0.1.2",
u"scale/français", // non-invariant characters for C++
u"currency/dummy",
@@ -222,6 +237,7 @@ void NumberSkeletonTest::unknownTokens() {
void NumberSkeletonTest::unexpectedTokens() {
static const char16_t* cases[] = {
+ u".00/w/w",
u"group-thousands/foo",
u"precision-integer//@## group-off",
u"precision-integer//@## group-off",
@@ -337,7 +353,6 @@ void NumberSkeletonTest::wildcardCharacters() {
} cases[] = {
{ u".00*", u".00+" },
{ u"@@*", u"@@+" },
- { u".00/@@*", u".00/@@+" },
{ u"scientific/*ee", u"scientific/+ee" },
{ u"integer-width/*00", u"integer-width/+00" },
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtspectest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtspectest.cpp
index 99af1c27482..892a9de4de5 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtspectest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtspectest.cpp
@@ -64,7 +64,7 @@ public:
void TestPercent();
void TestPerMilli();
void TestPadding();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void assertPatternFr(
const char *expected, double x, const char *pattern, UBool possibleDataError=FALSE);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
index dc193f2cc42..011cc32dd34 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
@@ -247,7 +247,11 @@ void NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &n
TESTCASE_AUTO(Test20961_CurrencyPluralPattern);
TESTCASE_AUTO(Test21134_ToNumberFormatter);
TESTCASE_AUTO(Test13733_StrictAndLenient);
+ TESTCASE_AUTO(Test20425_IntegerIncrement);
+ TESTCASE_AUTO(Test20425_FractionWithIntegerIncrement);
TESTCASE_AUTO(Test21232_ParseTimeout);
+ TESTCASE_AUTO(Test10997_FormatCurrency);
+ TESTCASE_AUTO(Test21556_CurrencyAsDecimal);
TESTCASE_AUTO_END;
}
@@ -306,29 +310,29 @@ NumberFormatTest::TestAPI(void)
class StubNumberFormat :public NumberFormat{
public:
StubNumberFormat(){}
- virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const {
+ virtual UnicodeString& format(double ,UnicodeString& appendTo,FieldPosition& ) const override {
return appendTo;
}
- virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const {
+ virtual UnicodeString& format(int32_t ,UnicodeString& appendTo,FieldPosition& ) const override {
return appendTo.append((UChar)0x0033);
}
- virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const {
+ virtual UnicodeString& format(int64_t number,UnicodeString& appendTo,FieldPosition& pos) const override {
return NumberFormat::format(number, appendTo, pos);
}
- virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const {
+ virtual UnicodeString& format(const Formattable& , UnicodeString& appendTo, FieldPosition& , UErrorCode& ) const override {
return appendTo;
}
virtual void parse(const UnicodeString& ,
Formattable& ,
- ParsePosition& ) const {}
+ ParsePosition& ) const override {}
virtual void parse( const UnicodeString& ,
Formattable& ,
- UErrorCode& ) const {}
- virtual UClassID getDynamicClassID(void) const {
+ UErrorCode& ) const override {}
+ virtual UClassID getDynamicClassID(void) const override {
static char classID = 0;
return (UClassID)&classID;
}
- virtual StubNumberFormat* clone() const {return NULL;}
+ virtual StubNumberFormat* clone() const override {return NULL;}
};
void
@@ -931,8 +935,8 @@ NumberFormatTest::TestCurrency(void)
UnicodeString s; currencyFmt->format(1.50, s);
logln((UnicodeString)"Un pauvre ici a..........." + s);
- if (!(s==CharsToUnicodeString("1,50\\u00A0$\\u00A0CA")))
- errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$<nbsp>CA but got " + s);
+ if (!(s==CharsToUnicodeString("1,50\\u00A0$")))
+ errln((UnicodeString)"FAIL: Expected 1,50<nbsp>$ but got " + s);
delete currencyFmt;
s.truncate(0);
char loc[256]={0};
@@ -1758,7 +1762,7 @@ void NumberFormatTest::TestPad(void) {
expectPad(fmt, "*P##.##", DecimalFormat::kPadBeforePrefix, 5, padString);
fmt.setPadCharacter((UnicodeString)"^");
expectPad(fmt, "*^#", DecimalFormat::kPadBeforePrefix, 1, (UnicodeString)"^");
- //commented untill implementation is complete
+ //commented until implementation is complete
/* fmt.setPadCharacter((UnicodeString)"^^^");
expectPad(fmt, "*^^^#", DecimalFormat::kPadBeforePrefix, 3, (UnicodeString)"^^^");
padString.remove();
@@ -3935,7 +3939,7 @@ NumberFormatTest::TestCurrencyParsing() {
{"pa_IN", "1", "USD", "US$\\u00A01.00", "USD\\u00A01.00", "1.00 \\u0a2f\\u0a42.\\u0a10\\u0a38. \\u0a21\\u0a3e\\u0a32\\u0a30"},
{"es_AR", "1", "USD", "US$\\u00A01,00", "USD\\u00A01,00", "1,00 d\\u00f3lar estadounidense"},
{"ar_EG", "1", "USD", "\\u0661\\u066b\\u0660\\u0660\\u00a0US$", "\\u0661\\u066b\\u0660\\u0660\\u00a0USD", "\\u0661\\u066b\\u0660\\u0660 \\u062f\\u0648\\u0644\\u0627\\u0631 \\u0623\\u0645\\u0631\\u064a\\u0643\\u064a"},
- {"fa_CA", "1", "USD", "\\u200e$\\u06f1\\u066b\\u06f0\\u06f0", "\\u200eUSD\\u06f1\\u066b\\u06f0\\u06f0", "\\u06f1\\u066b\\u06f0\\u06f0 \\u062f\\u0644\\u0627\\u0631 \\u0627\\u0645\\u0631\\u06cc\\u06a9\\u0627"},
+ {"fa_CA", "1", "USD", "\\u200e$\\u06f1\\u066b\\u06f0\\u06f0", "\\u200eUSD\\u06f1\\u066b\\u06f0\\u06f0", "\\u06f1\\u066b\\u06f0\\u06f0 \\u062f\\u0644\\u0627\\u0631 \\u0622\\u0645\\u0631\\u06cc\\u06a9\\u0627"},
{"he_IL", "1", "USD", "\\u200f1.00\\u00a0$", "\\u200f1.00\\u00a0USD", "1.00 \\u05d3\\u05d5\\u05dc\\u05e8 \\u05d0\\u05de\\u05e8\\u05d9\\u05e7\\u05d0\\u05d9"},
{"hr_HR", "1", "USD", "1,00\\u00a0USD", "1,00\\u00a0USD", "1,00 ameri\\u010Dkih dolara"},
{"id_ID", "1", "USD", "US$\\u00A01,00", "USD\\u00A01,00", "1,00 Dolar Amerika Serikat"},
@@ -9183,7 +9187,7 @@ void NumberFormatTest::Test13055_PercentageRounding() {
pFormat->format(2.155, actual);
assertEquals("Should round percent toward even number", "216%", actual);
}
-
+
void NumberFormatTest::Test11839() {
IcuTestErrorCode errorCode(*this, "Test11839");
// Ticket #11839: DecimalFormat does not respect custom plus sign
@@ -10038,6 +10042,26 @@ void NumberFormatTest::Test13733_StrictAndLenient() {
}
}
+void NumberFormatTest::Test20425_IntegerIncrement() {
+ IcuTestErrorCode status(*this, "Test20425_IntegerIncrement");
+
+ DecimalFormat df("##00", status);
+ df.setRoundingIncrement(1);
+ UnicodeString actual;
+ df.format(1235.5, actual, status);
+ assertEquals("Should round to integer", u"1236", actual);
+}
+
+void NumberFormatTest::Test20425_FractionWithIntegerIncrement() {
+ IcuTestErrorCode status(*this, "Test20425_FractionWithIntegerIncrement");
+
+ DecimalFormat df("0.0", status);
+ df.setRoundingIncrement(1);
+ UnicodeString actual;
+ df.format(8.6, actual, status);
+ assertEquals("Should have a fraction digit", u"9.0", actual);
+}
+
void NumberFormatTest::Test21232_ParseTimeout() {
IcuTestErrorCode status(*this, "Test21232_ParseTimeout");
@@ -10063,4 +10087,61 @@ void NumberFormatTest::Test21232_ParseTimeout() {
// Should not hang
}
+void NumberFormatTest::Test10997_FormatCurrency() {
+ IcuTestErrorCode status(*this, "Test10997_FormatCurrency");
+
+ LocalPointer<NumberFormat> fmt(NumberFormat::createCurrencyInstance(Locale::getUS(), status));
+ if (status.errDataIfFailureAndReset()) {
+ return;
+ }
+ fmt->setMinimumFractionDigits(4);
+ fmt->setMaximumFractionDigits(4);
+
+ FieldPosition fp;
+
+ UnicodeString str;
+ Formattable usdAmnt(new CurrencyAmount(123.45, u"USD", status));
+ fmt->format(usdAmnt, str, fp, status);
+ assertEquals("minFrac 4 should be respected in default currency", u"$123.4500", str);
+
+ UnicodeString str2;
+ Formattable eurAmnt(new CurrencyAmount(123.45, u"EUR", status));
+ fmt->format(eurAmnt, str2, fp, status);
+ assertEquals("minFrac 4 should be respected in different currency", u"€123.4500", str2);
+}
+
+void NumberFormatTest::Test21556_CurrencyAsDecimal() {
+ IcuTestErrorCode status(*this, "Test21556_CurrencyAsDecimal");
+
+ {
+ DecimalFormat df(u"a0¤00b", status);
+ if (status.errDataIfFailureAndReset()) {
+ return;
+ }
+ df.setCurrency(u"EUR", status);
+ UnicodeString result;
+ FieldPosition fp(UNUM_CURRENCY_FIELD);
+ df.format(3.141, result, fp);
+ assertEquals("Basic test: format", u"a3€14b", result);
+ UnicodeString pattern;
+ assertEquals("Basic test: toPattern", u"a0¤00b", df.toPattern(pattern));
+ assertEquals("Basic test: field position begin", 2, fp.getBeginIndex());
+ assertEquals("Basic test: field position end", 3, fp.getEndIndex());
+ }
+
+ {
+ LocalPointer<NumberFormat> nf(NumberFormat::createCurrencyInstance("en-GB", status));
+ DecimalFormat* df = static_cast<DecimalFormat*>(nf.getAlias());
+ df->applyPattern(u"a0¤00b", status);
+ UnicodeString result;
+ FieldPosition fp(UNUM_CURRENCY_FIELD);
+ df->format(3.141, result, fp);
+ assertEquals("Via applyPattern: format", u"a3£14b", result);
+ UnicodeString pattern;
+ assertEquals("Via applyPattern: toPattern", u"a0¤00b", df->toPattern(pattern));
+ assertEquals("Via applyPattern: field position begin", 2, fp.getBeginIndex());
+ assertEquals("Via applyPattern: field position end", 3, fp.getEndIndex());
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
index 24ca15a07b9..abd828d644b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
@@ -37,7 +37,7 @@ struct NumberFormatTest_Attributes {
*/
class NumberFormatDataDrivenTest : public DataDrivenNumberFormatTestSuite {
public:
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
void TestNumberFormatTestTuple();
void TestDataDrivenICU4C();
@@ -45,19 +45,19 @@ class NumberFormatDataDrivenTest : public DataDrivenNumberFormatTestSuite {
UBool isFormatPass(
const NumberFormatTestTuple &tuple,
UnicodeString &appendErrorMessage,
- UErrorCode &status);
+ UErrorCode &status) override;
UBool isToPatternPass(
const NumberFormatTestTuple &tuple,
UnicodeString &appendErrorMessage,
- UErrorCode &status);
+ UErrorCode &status) override;
UBool isParsePass(
const NumberFormatTestTuple &tuple,
UnicodeString &appendErrorMessage,
- UErrorCode &status);
+ UErrorCode &status) override;
UBool isParseCurrencyPass(
const NumberFormatTestTuple &tuple,
UnicodeString &appendErrorMessage,
- UErrorCode &status);
+ UErrorCode &status) override;
};
/**
@@ -66,7 +66,7 @@ class NumberFormatDataDrivenTest : public DataDrivenNumberFormatTestSuite {
class NumberFormatTest: public CalendarTimeZoneTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
/**
@@ -303,7 +303,11 @@ class NumberFormatTest: public CalendarTimeZoneTest {
void Test20961_CurrencyPluralPattern();
void Test21134_ToNumberFormatter();
void Test13733_StrictAndLenient();
+ void Test20425_IntegerIncrement();
+ void Test20425_FractionWithIntegerIncrement();
void Test21232_ParseTimeout();
+ void Test10997_FormatCurrency();
+ void Test21556_CurrencyAsDecimal();
private:
UBool testFormattableAsUFormattable(const char *file, int line, Formattable &f);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
index b9c4f661373..c8d278e27a7 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
@@ -31,12 +31,12 @@ class MyNumberFormatTest : public NumberFormat
{
public:
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
virtual UnicodeString& format( double number,
UnicodeString& toAppendTo,
FieldPositionIterator* posIter,
- UErrorCode& status) const
+ UErrorCode& status) const override
{
return NumberFormat::format(number, toAppendTo, posIter, status);
}
@@ -45,7 +45,7 @@ public:
virtual UnicodeString& format(const Formattable& obj,
UnicodeString& toAppendTo,
FieldPosition& pos,
- UErrorCode& status) const
+ UErrorCode& status) const override
{
return NumberFormat::format(obj, toAppendTo, pos, status);
}
@@ -53,7 +53,7 @@ public:
/* Just use one of the format functions */
virtual UnicodeString& format( double /* number */,
UnicodeString& toAppendTo,
- FieldPosition& /* pos */) const
+ FieldPosition& /* pos */) const override
{
toAppendTo = "";
return toAppendTo;
@@ -67,28 +67,28 @@ public:
/* Just use one of the parse functions */
virtual void parse( const UnicodeString& /* text */,
Formattable& result,
- ParsePosition& /* parsePosition */) const
+ ParsePosition& /* parsePosition */) const override
{
result.setLong((int32_t)0);
}
virtual void parse( const UnicodeString& text,
Formattable& result,
- UErrorCode& status) const
+ UErrorCode& status) const override
{
NumberFormat::parse(text, result, status);
}
- virtual MyNumberFormatTest* clone() const
+ virtual MyNumberFormatTest* clone() const override
{ return NULL; }
virtual UnicodeString& format(int32_t,
UnicodeString& foo,
- FieldPosition&) const
+ FieldPosition&) const override
{ return foo.remove(); }
virtual UnicodeString& format(int64_t,
UnicodeString& foo,
- FieldPosition&) const
+ FieldPosition&) const override
{ return foo.remove(); }
virtual void applyPattern(const UnicodeString&, UParseError&, UErrorCode&){
@@ -515,7 +515,7 @@ void NumberFormatRegressionTest::Test4086575(void)
// TODO: There is not a good way to find out that the creation of this number format has
// failed. Major rewiring of format construction proposed.
if(U_FAILURE(status)) {
- dataerrln("Something is wrong with French number format - it should not fallback. Exitting - %s", u_errorName(status));
+ dataerrln("Something is wrong with French number format - it should not fallback. Exiting - %s", u_errorName(status));
delete nf1;
return;
}
@@ -729,7 +729,7 @@ void NumberFormatRegressionTest::Test4090504 (void)
//sb = new StringBuffer("");
fp.setField(0);
logln(UnicodeString(" getMaximumFractionDigits() = ") + i);
- logln(UnicodeString(" formated: ") + df->format(d, sb, fp));
+ logln(UnicodeString(" formatted: ") + df->format(d, sb, fp));
}
/*} catch (Exception foo) {
errln("Bug 4090504 regression test failed. Message : " + foo.getMessage());
@@ -975,20 +975,20 @@ void NumberFormatRegressionTest::Test4071005 (void)
UnicodeString tempString;
/* User error :
String expectedDefault = "-5\u00a0789,987";
- String expectedCurrency = "5\u00a0789,98\u00a0$\u00a0CA";
+ String expectedCurrency = "5\u00a0789,98\u00a0$";
String expectedPercent = "-578\u00a0998%";
*/
UChar chars1 [] = {
0x2d, 0x35, 0x00a0, 0x37, 0x38, 0x39, 0x2c, 0x39, 0x38, 0x38
};
UChar chars2 [] = {
- 0x35, 0x00a0, 0x37, 0x38, 0x39, 0x2c, 0x39, 0x39, 0x00a0, 0x24, 0x00a0, 0x43, 0x41
+ 0x35, 0x00a0, 0x37, 0x38, 0x39, 0x2c, 0x39, 0x39, 0x00a0, 0x24
};
UChar chars3 [] = {
0x2d, 0x35, 0x37, 0x38, 0x00a0, 0x39, 0x39, 0x39, 0x00a0, 0x25
};
UnicodeString expectedDefault(chars1, 10, 10);
- UnicodeString expectedCurrency(chars2, 13, 13);
+ UnicodeString expectedCurrency(chars2, 10, 10);
UnicodeString expectedPercent(chars3, 10, 10);
UErrorCode status = U_ZERO_ERROR;
@@ -1014,7 +1014,7 @@ void NumberFormatRegressionTest::Test4071005 (void)
tempString = formatter->format( 5789.9876, tempString );
if (tempString == expectedCurrency) {
- logln ("Bug 4071005 currency test assed.");
+ logln ("Bug 4071005 currency test passed.");
} else {
errln(UnicodeString("Failed:") +
" Expected " + expectedCurrency +
@@ -1268,7 +1268,7 @@ void NumberFormatRegressionTest::Test4074454(void)
* Tests all different comments.
* Response to some comments :
* [1] DecimalFormat.parse API documentation is more than just one line.
- * This is not a reproducable doc error in 116 source code.
+ * This is not a reproducible doc error in 116 source code.
* [2] See updated javadoc.
* [3] Fixed.
* [4] NumberFormat.parse(String, ParsePosition) : If parsing fails,
@@ -1571,7 +1571,7 @@ void NumberFormatRegressionTest::Test4106664(void)
df->setGroupingUsed(FALSE);
UnicodeString temp;
FieldPosition pos(FieldPosition::DONT_CARE);
- logln("formated: " +
+ logln("formatted: " +
df->format(n, temp, pos));
char buf [128];
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.h b/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.h
index 1d14c73694c..38cdf8c5350 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.h
@@ -24,7 +24,7 @@
class NumberFormatRegressionTest: public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
void Test4075713(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/pluralmaptest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/pluralmaptest.cpp
index 244f81784a6..d1d2b5ef2b4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/pluralmaptest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/pluralmaptest.cpp
@@ -17,7 +17,7 @@
class PluralMapForPluralMapTest : public PluralMap<UnicodeString> {
public:
- UBool operator==(const PluralMapForPluralMapTest &other) {
+ bool operator==(const PluralMapForPluralMapTest &other) {
return equals(other, strEqual);
}
private:
@@ -36,7 +36,7 @@ public:
void TestIterate();
void TestEqual();
void TestCopyAndAssign();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
void addVariant(
PluralMapBase::Category v,
const UnicodeString &value,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.cpp
index 30ecb408f03..3103f53ac81 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.cpp
@@ -196,7 +196,7 @@ void PluralFormatTest::pluralFormatUnitTest(/*char *par*/)
UnicodeString oddAndEvenRule = UNICODE_STRING_SIMPLE("odd: n mod 2 is 1");
LocalPointer<PluralRules>plRules(PluralRules::createRules(oddAndEvenRule, status));
if (U_FAILURE(status)) {
- dataerrln("ERROR: create PluralRules instance failed in unit tests.- exitting");
+ dataerrln("ERROR: create PluralRules instance failed in unit tests.- exiting");
return;
}
@@ -207,7 +207,7 @@ void PluralFormatTest::pluralFormatUnitTest(/*char *par*/)
PluralFormat plFmt=PluralFormat(*plRules, status);
if (U_FAILURE(status)) {
- dataerrln("ERROR: PluralFormat constructor failed in unit tests.- exitting");
+ dataerrln("ERROR: PluralFormat constructor failed in unit tests.- exiting");
return;
}
plFmt.applyPattern(checkSyntaxtData[i], status);
@@ -232,7 +232,7 @@ void PluralFormatTest::pluralFormatUnitTest(/*char *par*/)
status = U_ZERO_ERROR;
PluralFormat plFmt=PluralFormat(*plRules, status);
if (U_FAILURE(status)) {
- dataerrln("ERROR: PluralFormat constructor failed in unit tests.- exitting");
+ dataerrln("ERROR: PluralFormat constructor failed in unit tests.- exiting");
return;
}
plFmt.applyPattern(patternTestData[i], status);
@@ -249,7 +249,7 @@ void PluralFormatTest::pluralFormatUnitTest(/*char *par*/)
plRules.adoptInstead(PluralRules::createRules(UNICODE_STRING_SIMPLE("odd: n mod 2 is 1"), status));
PluralFormat pluralFmt = PluralFormat(*plRules, status);
if (U_FAILURE(status)) {
- dataerrln("ERROR: Could not create PluralFormat instance in setLocale() test - exitting. ");
+ dataerrln("ERROR: Could not create PluralFormat instance in setLocale() test - exiting. ");
return;
}
pluralFmt.applyPattern(UNICODE_STRING_SIMPLE("odd{odd} other{even}"), status);
@@ -690,7 +690,7 @@ PluralFormatTest::numberFormatTest(PluralFormat* plFmt,
UErrorCode status = U_ZERO_ERROR;
if ( (plFmt==NULL) || (numFmt==NULL) ) {
- dataerrln("ERROR: Could not create PluralFormat or NumberFormat - exitting");
+ dataerrln("ERROR: Could not create PluralFormat or NumberFormat - exiting");
return;
}
UnicodeString plResult, numResult ;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.h b/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.h
index 038b11b2d0c..38c52579cbf 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.h
@@ -22,7 +22,7 @@
* Test basic functionality of various API functions
**/
class PluralFormatTest : public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
index c015197ba2b..9131d370317 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
@@ -52,13 +52,17 @@ void PluralRulesTest::runIndexedTest( int32_t index, UBool exec, const char* &na
TESTCASE_AUTO(testGetSamples);
TESTCASE_AUTO(testGetFixedDecimalSamples);
TESTCASE_AUTO(testSamplesWithExponent);
+ TESTCASE_AUTO(testSamplesWithCompactNotation);
TESTCASE_AUTO(testWithin);
TESTCASE_AUTO(testGetAllKeywordValues);
+ TESTCASE_AUTO(testScientificPluralKeyword);
TESTCASE_AUTO(testCompactDecimalPluralKeyword);
+ TESTCASE_AUTO(testDoubleValue);
+ TESTCASE_AUTO(testLongValue);
TESTCASE_AUTO(testOrdinal);
TESTCASE_AUTO(testSelect);
TESTCASE_AUTO(testSelectRange);
- TESTCASE_AUTO(testAvailbleLocales);
+ TESTCASE_AUTO(testAvailableLocales);
TESTCASE_AUTO(testParseErrors);
TESTCASE_AUTO(testFixedDecimal);
TESTCASE_AUTO(testSelectTrailingZeros);
@@ -141,12 +145,12 @@ void PluralRulesTest::testAPI(/*char *par*/)
PluralRules defRule(status);
LocalPointer<PluralRules> test(new PluralRules(status), status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create PluralRules (default) - exitting");
+ dataerrln("ERROR: Could not create PluralRules (default) - exiting");
return;
}
LocalPointer<PluralRules> newEnPlural(test->forLocale(Locale::getEnglish(), status), status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create PluralRules (English) - exitting");
+ dataerrln("ERROR: Could not create PluralRules (English) - exiting");
return;
}
@@ -175,7 +179,7 @@ void PluralRulesTest::testAPI(/*char *par*/)
for (int32_t i=0; i<10; ++i) {
key = empRule->select(i);
if ( key.charAt(0)!= 0x61 ) { // 'a'
- errln("ERROR: empty plural rules test failed! - exitting");
+ errln("ERROR: empty plural rules test failed! - exiting");
}
}
@@ -189,7 +193,7 @@ void PluralRulesTest::testAPI(/*char *par*/)
LocalPointer<PluralRules> newRules(test->createRules(pluralTestData[i], status));
setupResult(pluralTestResult[i], result, &max);
if ( !checkEqual(*newRules, result, max) ) {
- errln("ERROR: simple plural rules failed! - exitting");
+ errln("ERROR: simple plural rules failed! - exiting");
return;
}
}
@@ -217,12 +221,12 @@ void PluralRulesTest::testAPI(/*char *par*/)
};
LocalPointer<PluralRules> newRules(test->createRules(complexRule, status));
if ( !checkEqual(*newRules, cRuleResult, 12) ) {
- errln("ERROR: complex plural rules failed! - exitting");
+ errln("ERROR: complex plural rules failed! - exiting");
return;
}
newRules.adoptInstead(test->createRules(complexRule2, status));
if ( !checkEqual(*newRules, cRuleResult, 12) ) {
- errln("ERROR: complex plural rules failed! - exitting");
+ errln("ERROR: complex plural rules failed! - exiting");
return;
}
@@ -232,11 +236,11 @@ void PluralRulesTest::testAPI(/*char *par*/)
status = U_ZERO_ERROR;
newRules.adoptInstead(test->createRules(decimalRule, status));
if (U_FAILURE(status)) {
- dataerrln("ERROR: Could not create PluralRules for testing fractions - exitting");
+ dataerrln("ERROR: Could not create PluralRules for testing fractions - exiting");
return;
}
double fData[] = {-101, -100, -1, -0.0, 0, 0.1, 1, 1.999, 2.0, 100, 100.001 };
- UBool isKeywordA[] = {TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE };
+ bool isKeywordA[] = {true, false, false, false, false, true, false, true, false, false, true };
for (int32_t i=0; i<UPRV_LENGTHOF(fData); i++) {
if ((newRules->select(fData[i])== KEYWORD_A) != isKeywordA[i]) {
errln("File %s, Line %d, ERROR: plural rules for decimal fractions test failed!\n"
@@ -248,7 +252,7 @@ void PluralRulesTest::testAPI(/*char *par*/)
logln("Testing Equality of PluralRules");
if ( !testEquality(*test) ) {
- errln("ERROR: complex plural rules failed! - exitting");
+ errln("ERROR: complex plural rules failed! - exiting");
return;
}
@@ -403,10 +407,10 @@ void PluralRulesTest::testGetSamples() {
double values[1000];
for (int32_t i = 0; U_SUCCESS(status) && i < numLocales; ++i) {
- if (uprv_strcmp(locales[i].getLanguage(), "fr") == 0 &&
- logKnownIssue("21299", "PluralRules::getSamples cannot distinguish 1e5 from 100000")) {
- continue;
- }
+ //if (uprv_strcmp(locales[i].getLanguage(), "fr") == 0 &&
+ // logKnownIssue("21322", "PluralRules::getSamples cannot distinguish 1e5 from 100000")) {
+ // continue;
+ //}
LocalPointer<PluralRules> rules(PluralRules::forLocale(locales[i], status));
if (U_FAILURE(status)) {
break;
@@ -464,10 +468,10 @@ void PluralRulesTest::testGetFixedDecimalSamples() {
FixedDecimal values[1000];
for (int32_t i = 0; U_SUCCESS(status) && i < numLocales; ++i) {
- if (uprv_strcmp(locales[i].getLanguage(), "fr") == 0 &&
- logKnownIssue("21299", "PluralRules::getSamples cannot distinguish 1e5 from 100000")) {
- continue;
- }
+ //if (uprv_strcmp(locales[i].getLanguage(), "fr") == 0 &&
+ // logKnownIssue("21322", "PluralRules::getSamples cannot distinguish 1e5 from 100000")) {
+ // continue;
+ //}
LocalPointer<PluralRules> rules(PluralRules::forLocale(locales[i], status));
if (U_FAILURE(status)) {
break;
@@ -505,8 +509,13 @@ void PluralRulesTest::testGetFixedDecimalSamples() {
// std::cout << " uk " << US(resultKeyword).cstr() << " " << values[j] << std::endl;
// }
if (*keyword != resultKeyword) {
- errln("file %s, line %d, Locale %s, sample for keyword \"%s\": %s, select(%s) returns keyword \"%s\"",
- __FILE__, __LINE__, locales[i].getName(), US(*keyword).cstr(), values[j].toString().getBuffer(), values[j].toString().getBuffer(), US(resultKeyword).cstr());
+ if (values[j].exponent == 0 || !logKnownIssue("21714", "PluralRules::select treats 1c6 as 1")) {
+ UnicodeString valueString(values[j].toString());
+ char valueBuf[16];
+ valueString.extract(0, valueString.length(), valueBuf, sizeof(valueBuf));
+ errln("file %s, line %d, Locale %s, sample for keyword \"%s\": %s, select(%s) returns keyword \"%s\"",
+ __FILE__, __LINE__, locales[i].getName(), US(*keyword).cstr(), valueBuf, valueBuf, US(resultKeyword).cstr());
+ }
}
}
}
@@ -551,6 +560,44 @@ void PluralRulesTest::testSamplesWithExponent() {
checkNewSamples(description2, test2, u"other", u"@decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 2.1e5, 3.1e5, 4.1e5, 5.1e5, 6.1e5, 7.1e5, …", FixedDecimal(2.0, 1));
}
+
+void PluralRulesTest::testSamplesWithCompactNotation() {
+ // integer samples
+ UErrorCode status = U_ZERO_ERROR;
+ UnicodeString description(
+ u"one: i = 0,1 @integer 0, 1, 1c5 @decimal 0.0~1.5, 1.1c5; "
+ u"many: c = 0 and i != 0 and i % 1000000 = 0 and v = 0 or c != 0..5"
+ u" @integer 1000000, 2c6, 3c6, 4c6, 5c6, 6c6, 7c6, … @decimal 2.1c6, 3.1c6, 4.1c6, 5.1c6, 6.1c6, 7.1c6, …; "
+ u"other: @integer 2~17, 100, 1000, 10000, 100000, 2c5, 3c5, 4c5, 5c5, 6c5, 7c5, …"
+ u" @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 2.1c5, 3.1c5, 4.1c5, 5.1c5, 6.1c5, 7.1c5, …"
+ );
+ LocalPointer<PluralRules> test(PluralRules::createRules(description, status));
+ if (U_FAILURE(status)) {
+ errln("Couldn't create plural rules from a string using exponent notation, with error = %s", u_errorName(status));
+ return;
+ }
+ checkNewSamples(description, test, u"one", u"@integer 0, 1, 1c5", FixedDecimal(0));
+ checkNewSamples(description, test, u"many", u"@integer 1000000, 2c6, 3c6, 4c6, 5c6, 6c6, 7c6, …", FixedDecimal(1000000));
+ checkNewSamples(description, test, u"other", u"@integer 2~17, 100, 1000, 10000, 100000, 2c5, 3c5, 4c5, 5c5, 6c5, 7c5, …", FixedDecimal(2));
+
+ // decimal samples
+ status = U_ZERO_ERROR;
+ UnicodeString description2(
+ u"one: i = 0,1 @decimal 0.0~1.5, 1.1c5; "
+ u"many: c = 0 and i != 0 and i % 1000000 = 0 and v = 0 or c != 0..5"
+ u" @decimal 2.1c6, 3.1c6, 4.1c6, 5.1c6, 6.1c6, 7.1c6, …; "
+ u"other: @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 2.1c5, 3.1c5, 4.1c5, 5.1c5, 6.1c5, 7.1c5, …"
+ );
+ LocalPointer<PluralRules> test2(PluralRules::createRules(description2, status));
+ if (U_FAILURE(status)) {
+ errln("Couldn't create plural rules from a string using exponent notation, with error = %s", u_errorName(status));
+ return;
+ }
+ checkNewSamples(description2, test2, u"one", u"@decimal 0.0~1.5, 1.1c5", FixedDecimal(0, 1));
+ checkNewSamples(description2, test2, u"many", u"@decimal 2.1c6, 3.1c6, 4.1c6, 5.1c6, 6.1c6, 7.1c6, …", FixedDecimal::createWithExponent(2.1, 1, 6));
+ checkNewSamples(description2, test2, u"other", u"@decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 2.1c5, 3.1c5, 4.1c5, 5.1c5, 6.1c5, 7.1c5, …", FixedDecimal(2.0, 1));
+}
+
void PluralRulesTest::checkNewSamples(
UnicodeString description,
const LocalPointer<PluralRules> &test,
@@ -682,7 +729,7 @@ PluralRulesTest::testGetAllKeywordValues() {
ok = FALSE;
}
- // We'll cheat a bit here. The samples happend to be in order and so are our
+ // We'll cheat a bit here. The samples happened to be in order and so are our
// expected values, so we'll just test in order until a failure. If the
// implementation changes to return samples in an arbitrary order, this test
// must change. There's no actual restriction on the order of the samples.
@@ -727,13 +774,77 @@ PluralRulesTest::testGetAllKeywordValues() {
}
}
+// For the time being, the compact notation exponent operand `c` is an alias
+// for the scientific exponent operand `e` and compact notation.
+void
+PluralRulesTest::testScientificPluralKeyword() {
+ IcuTestErrorCode errorCode(*this, "testScientificPluralKeyword");
+
+ LocalPointer<PluralRules> rules(PluralRules::createRules(
+ u"one: i = 0,1 @integer 0, 1 @decimal 0.0~1.5; "
+ u"many: e = 0 and i % 1000000 = 0 and v = 0 or e != 0 .. 5; "
+ u"other: @integer 2~17, 100, 1000, 10000, 100000, 1000000, "
+ u" @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", errorCode));
+
+ if (U_FAILURE(errorCode)) {
+ errln("Couldn't instantiate plurals rules from string, with error = %s", u_errorName(errorCode));
+ return;
+ }
+
+ const char* localeName = "fr-FR";
+ Locale locale = Locale::createFromName(localeName);
+
+ struct TestCase {
+ const char16_t* skeleton;
+ const int input;
+ const char16_t* expectedFormattedOutput;
+ const char16_t* expectedPluralRuleKeyword;
+ } cases[] = {
+ // unlocalized formatter skeleton, input, string output, plural rule keyword
+ {u"", 0, u"0", u"one"},
+ {u"scientific", 0, u"0", u"one"},
+
+ {u"", 1, u"1", u"one"},
+ {u"scientific", 1, u"1", u"one"},
+
+ {u"", 2, u"2", u"other"},
+ {u"scientific", 2, u"2", u"other"},
+
+ {u"", 1000000, u"1 000 000", u"many"},
+ {u"scientific", 1000000, u"1 million", u"many"},
+
+ {u"", 1000001, u"1 000 001", u"other"},
+ {u"scientific", 1000001, u"1 million", u"many"},
+
+ {u"", 120000, u"1 200 000", u"other"},
+ {u"scientific", 1200000, u"1,2 millions", u"many"},
+
+ {u"", 1200001, u"1 200 001", u"other"},
+ {u"scientific", 1200001, u"1,2 millions", u"many"},
+
+ {u"", 2000000, u"2 000 000", u"many"},
+ {u"scientific", 2000000, u"2 millions", u"many"},
+ };
+ for (const auto& cas : cases) {
+ const char16_t* skeleton = cas.skeleton;
+ const int input = cas.input;
+ const char16_t* expectedPluralRuleKeyword = cas.expectedPluralRuleKeyword;
+
+ UnicodeString actualPluralRuleKeyword =
+ getPluralKeyword(rules, locale, input, skeleton);
+
+ UnicodeString message(UnicodeString(localeName) + u" " + DoubleToUnicodeString(input));
+ assertEquals(message, expectedPluralRuleKeyword, actualPluralRuleKeyword);
+ }
+}
+
void
PluralRulesTest::testCompactDecimalPluralKeyword() {
IcuTestErrorCode errorCode(*this, "testCompactDecimalPluralKeyword");
LocalPointer<PluralRules> rules(PluralRules::createRules(
u"one: i = 0,1 @integer 0, 1 @decimal 0.0~1.5; "
- u"many: e = 0 and i % 1000000 = 0 and v = 0 or e != 0 .. 5; "
+ u"many: c = 0 and i % 1000000 = 0 and v = 0 or c != 0 .. 5; "
u"other: @integer 2~17, 100, 1000, 10000, 100000, 1000000, "
u" @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", errorCode));
@@ -789,6 +900,94 @@ PluralRulesTest::testCompactDecimalPluralKeyword() {
}
}
+void
+PluralRulesTest::testDoubleValue() {
+ IcuTestErrorCode errorCode(*this, "testDoubleValue");
+
+ struct IntTestCase {
+ const int64_t inputNum;
+ const double expVal;
+ } intCases[] = {
+ {-101, -101.0},
+ {-100, -100.0},
+ {-1, -1.0},
+ {0, 0.0},
+ {1, 1.0},
+ {100, 100.0}
+ };
+ for (const auto& cas : intCases) {
+ const int64_t inputNum = cas.inputNum;
+ const double expVal = cas.expVal;
+
+ FixedDecimal fd(inputNum);
+ UnicodeString message(u"FixedDecimal::doubleValue() for" + Int64ToUnicodeString(inputNum));
+ assertEquals(message, expVal, fd.doubleValue());
+ }
+
+ struct DoubleTestCase {
+ const double inputNum;
+ const double expVal;
+ } dblCases[] = {
+ {-0.0, -0.0},
+ {0.1, 0.1},
+ {1.999, 1.999},
+ {2.0, 2.0},
+ {100.001, 100.001}
+ };
+ for (const auto & cas : dblCases) {
+ const double inputNum = cas.inputNum;
+ const double expVal = cas.expVal;
+
+ FixedDecimal fd(inputNum);
+ UnicodeString message(u"FixedDecimal::doubleValue() for" + DoubleToUnicodeString(inputNum));
+ assertEquals(message, expVal, fd.doubleValue());
+ }
+}
+
+void
+PluralRulesTest::testLongValue() {
+ IcuTestErrorCode errorCode(*this, "testLongValue");
+
+ struct IntTestCase {
+ const int64_t inputNum;
+ const int64_t expVal;
+ } intCases[] = {
+ {-101, 101},
+ {-100, 100},
+ {-1, 1},
+ {0, 0},
+ {1, 1},
+ {100, 100}
+ };
+ for (const auto& cas : intCases) {
+ const int64_t inputNum = cas.inputNum;
+ const int64_t expVal = cas.expVal;
+
+ FixedDecimal fd(inputNum);
+ UnicodeString message(u"FixedDecimal::longValue() for" + Int64ToUnicodeString(inputNum));
+ assertEquals(message, expVal, fd.longValue());
+ }
+
+ struct DoubleTestCase {
+ const double inputNum;
+ const int64_t expVal;
+ } dblCases[] = {
+ {-0.0, 0},
+ {0.1, 0},
+ {1.999, 1},
+ {2.0, 2},
+ {100.001, 100}
+ };
+ for (const auto & cas : dblCases) {
+ const double inputNum = cas.inputNum;
+ const int64_t expVal = cas.expVal;
+
+ FixedDecimal fd(inputNum);
+ UnicodeString message(u"FixedDecimal::longValue() for" + DoubleToUnicodeString(inputNum));
+ assertEquals(message, expVal, fd.longValue());
+ }
+}
+
UnicodeString PluralRulesTest::getPluralKeyword(const LocalPointer<PluralRules> &rules, Locale locale, double number, const char16_t* skeleton) {
IcuTestErrorCode errorCode(*this, "getPluralKeyword");
UnlocalizedNumberFormatter ulnf = NumberFormatter::forSkeleton(skeleton, errorCode);
@@ -1099,7 +1298,7 @@ void PluralRulesTest::testSelectRange() {
}
-void PluralRulesTest::testAvailbleLocales() {
+void PluralRulesTest::testAvailableLocales() {
// Hash set of (char *) strings.
UErrorCode status = U_ZERO_ERROR;
@@ -1202,7 +1401,7 @@ void PluralRulesTest::testParseErrors() {
"A: n is 13", // Uppercase keywords not allowed.
"a: n ! = 3", // spaces in != operator
"a: n = not 3", // '=' not exact equivalent of 'is'
- "a: n ! in 3..4" // '!' not exact equivalent of 'not'
+ "a: n ! in 3..4", // '!' not exact equivalent of 'not'
"a: n % 37 ! in 3..4"
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h b/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
index 70823498ccd..76ecb6bf191 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
@@ -21,7 +21,7 @@
* Test basic functionality of various API functions
**/
class PluralRulesTest : public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
@@ -32,13 +32,17 @@ private:
void testGetSamples();
void testGetFixedDecimalSamples();
void testSamplesWithExponent();
+ void testSamplesWithCompactNotation();
void testWithin();
void testGetAllKeywordValues();
void testCompactDecimalPluralKeyword();
+ void testDoubleValue();
+ void testLongValue();
+ void testScientificPluralKeyword();
void testOrdinal();
void testSelect();
void testSelectRange();
- void testAvailbleLocales();
+ void testAvailableLocales();
void testParseErrors();
void testFixedDecimal();
void testSelectTrailingZeros();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/pptest.h b/Build/source/libs/icu/icu-src/source/test/intltest/pptest.h
index a50aab22d4b..2830eafb673 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/pptest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/pptest.h
@@ -21,7 +21,7 @@
**/
class ParsePositionTest: public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
void TestParsePosition(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/quantityformattertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/quantityformattertest.cpp
index 9fc57e43b0e..dd6d043feff 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/quantityformattertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/quantityformattertest.cpp
@@ -29,7 +29,7 @@ public:
QuantityFormatterTest() {
}
void TestBasic();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
index fdb496e6c70..dbe4c97ce43 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
@@ -70,7 +70,7 @@ void RBBIAPITest::TestCloneEquals()
logln((UnicodeString)"Testing equals()");
logln((UnicodeString)"Testing == and !=");
- UBool b = (*bi1 != *biequal);
+ bool b = (*bi1 != *biequal);
b |= *bi1 == *bi2;
b |= *bi1 == *bi3;
if (b) {
@@ -308,7 +308,7 @@ void RBBIAPITest::TestGetSetAdoptText()
if(rb->getText() != *text2)
errln((UnicodeString)"ERROR:2 error in adoptText ");
- // Adopt where iterator range is less than the entire orignal source string.
+ // Adopt where iterator range is less than the entire original source string.
// (With the change of the break engine to working with UText internally,
// CharacterIterators starting at positions other than zero are not supported)
rb->adoptText(text3);
@@ -551,7 +551,7 @@ void RBBIAPITest::TestIteration()
//
bi->first();
if (bi->isBoundary(3) != TRUE) {
- errln("%s:%d Incorrect value from bi->isBoudary(). Expected TRUE, got FALSE", __FILE__, __LINE__, i);
+ errln("%s:%d Incorrect value from bi->isBoundary(). Expected TRUE, got FALSE", __FILE__, __LINE__, i);
}
i = bi->current();
if (i != 3) {
@@ -560,7 +560,7 @@ void RBBIAPITest::TestIteration()
if (bi->isBoundary(11) != FALSE) {
- errln("%s:%d Incorrect value from bi->isBoudary(). Expected FALSE, got TRUE", __FILE__, __LINE__, i);
+ errln("%s:%d Incorrect value from bi->isBoundary(). Expected FALSE, got TRUE", __FILE__, __LINE__, i);
}
i = bi->current();
if (i != 10) {
@@ -683,7 +683,7 @@ void RBBIAPITest::TestRuleStatus() {
int32_t pos, tag;
for (pos = bi->first(); pos != BreakIterator::DONE; pos = bi->next(), i++) {
if (pos != bounds1[i]) {
- errln("%s:%d FAIL: unexpected word break at postion %d", __FILE__, __LINE__, pos);
+ errln("%s:%d FAIL: unexpected word break at position %d", __FILE__, __LINE__, pos);
break;
}
tag = bi->getRuleStatus();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.h b/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.h
index 13b1e29c552..27cacca8fde 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.h
@@ -29,7 +29,7 @@ class RBBIAPITest: public IntlTest {
public:
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
/**
* Tests Constructor behaviour of RuleBasedBreakIterator
**/
@@ -96,7 +96,7 @@ public:
/* Internal subroutine used by TestIsBoundary() */
void doBoundaryTest(BreakIterator& bi, UnicodeString& text, int32_t *boundaries);
- /*Internal subroutine used for comparision of expected and acquired results */
+ /*Internal subroutine used for comparison of expected and acquired results */
void doTest(UnicodeString& testString, int32_t start, int32_t gotoffset, int32_t expectedOffset, const char* expected);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.cpp
index 2b91ab38f73..482e5c2e54c 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.cpp
@@ -225,7 +225,7 @@ void BreakRules::addRule(const UnicodeString &name, const UnicodeString &definit
}
// Put this new rule into the vector of all Rules.
- fBreakRules.addElement(thisRule.orphan(), status);
+ fBreakRules.adoptElement(thisRule.orphan(), status);
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.h b/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.h
index cff731ae6b6..1f2609018c9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.h
@@ -56,7 +56,7 @@ class RBBIMonkeyTest: public IntlTest {
RBBIMonkeyTest();
virtual ~RBBIMonkeyTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
void testMonkey();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
index 8e3086b5151..73d4393843b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
@@ -14,6 +14,7 @@
#include "unicode/utypes.h"
#if !UCONFIG_NO_BREAK_ITERATION
+#include <algorithm>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
@@ -42,6 +43,7 @@
#include "cmemory.h"
#include "cstr.h"
#include "intltest.h"
+#include "lstmbe.h"
#include "rbbitst.h"
#include "rbbidata.h"
#include "utypeinfo.h" // for 'typeid' to work
@@ -134,6 +136,9 @@ void RBBITest::runIndexedTest( int32_t index, UBool exec, const char* &name, cha
TESTCASE_AUTO(Test16BitsTrieWith16BitStateTable);
TESTCASE_AUTO(TestTable_8_16_Bits);
TESTCASE_AUTO(TestBug13590);
+ TESTCASE_AUTO(TestUnpairedSurrogate);
+ TESTCASE_AUTO(TestLSTMThai);
+ TESTCASE_AUTO(TestLSTMBurmese);
#if U_ENABLE_TRACING
TESTCASE_AUTO(TestTraceCreateCharacter);
@@ -714,8 +719,12 @@ void RBBITest::executeTest(TestParams *t, UErrorCode &status) {
}
}
-
void RBBITest::TestExtended() {
+ // The expectations in this test heavily depends on the Thai dictionary.
+ // Therefore, we skip this test under the LSTM configuration.
+ if (skipDictionaryTest()) {
+ return;
+ }
// Skip test for now when UCONFIG_NO_FILTERED_BREAK_ITERATION is set. This
// data driven test closely entangles filtered and regular data.
#if !UCONFIG_NO_REGULAR_EXPRESSIONS && !UCONFIG_NO_FILTERED_BREAK_ITERATION
@@ -1125,7 +1134,6 @@ end_test:
#endif
}
-
//-------------------------------------------------------------------------------
//
// TestDictRules create a break iterator from source rules that includes a
@@ -1164,126 +1172,6 @@ void RBBITest::TestDictRules() {
-//-------------------------------------------------------------------------------
-//
-// ReadAndConvertFile Read a text data file, convert it to UChars, and
-// return the data in one big UChar * buffer, which the caller must delete.
-//
-// parameters:
-// fileName: the name of the file, with no directory part. The test data directory
-// is assumed.
-// ulen an out parameter, receives the actual length (in UChars) of the file data.
-// encoding The file encoding. If the file contains a BOM, that will override the encoding
-// specified here. The BOM, if it exists, will be stripped from the returned data.
-// Pass NULL for the system default encoding.
-// status
-// returns:
-// The file data, converted to UChar.
-// The caller must delete this when done with
-// delete [] theBuffer;
-//
-// TODO: This is a clone of RegexTest::ReadAndConvertFile.
-// Move this function to some common place.
-//
-//--------------------------------------------------------------------------------
-UChar *RBBITest::ReadAndConvertFile(const char *fileName, int &ulen, const char *encoding, UErrorCode &status) {
- UChar *retPtr = NULL;
- char *fileBuf = NULL;
- UConverter* conv = NULL;
- FILE *f = NULL;
-
- ulen = 0;
- if (U_FAILURE(status)) {
- return retPtr;
- }
-
- //
- // Open the file.
- //
- f = fopen(fileName, "rb");
- if (f == 0) {
- dataerrln("Error opening test data file %s\n", fileName);
- status = U_FILE_ACCESS_ERROR;
- return NULL;
- }
- //
- // Read it in
- //
- int fileSize;
- int amt_read;
-
- fseek( f, 0, SEEK_END);
- fileSize = ftell(f);
- fileBuf = new char[fileSize];
- fseek(f, 0, SEEK_SET);
- amt_read = static_cast<int>(fread(fileBuf, 1, fileSize, f));
- if (amt_read != fileSize || fileSize <= 0) {
- errln("Error reading test data file.");
- goto cleanUpAndReturn;
- }
-
- //
- // Look for a Unicode Signature (BOM) on the data just read
- //
- int32_t signatureLength;
- const char * fileBufC;
- const char* bomEncoding;
-
- fileBufC = fileBuf;
- bomEncoding = ucnv_detectUnicodeSignature(
- fileBuf, fileSize, &signatureLength, &status);
- if(bomEncoding!=NULL ){
- fileBufC += signatureLength;
- fileSize -= signatureLength;
- encoding = bomEncoding;
- }
-
- //
- // Open a converter to take the rule file to UTF-16
- //
- conv = ucnv_open(encoding, &status);
- if (U_FAILURE(status)) {
- goto cleanUpAndReturn;
- }
-
- //
- // Convert the rules to UChar.
- // Preflight first to determine required buffer size.
- //
- ulen = ucnv_toUChars(conv,
- NULL, // dest,
- 0, // destCapacity,
- fileBufC,
- fileSize,
- &status);
- if (status == U_BUFFER_OVERFLOW_ERROR) {
- // Buffer Overflow is expected from the preflight operation.
- status = U_ZERO_ERROR;
-
- retPtr = new UChar[ulen+1];
- ucnv_toUChars(conv,
- retPtr, // dest,
- ulen+1,
- fileBufC,
- fileSize,
- &status);
- }
-
-cleanUpAndReturn:
- fclose(f);
- delete []fileBuf;
- ucnv_close(conv);
- if (U_FAILURE(status)) {
- errln("ucnv_toUChars: ICU Error \"%s\"\n", u_errorName(status));
- delete []retPtr;
- retPtr = 0;
- ulen = 0;
- }
- return retPtr;
-}
-
-
-
//--------------------------------------------------------------------------------------------
//
// Run tests from each of the boundary test data files distributed by the Unicode Consortium
@@ -1423,7 +1311,7 @@ void RBBITest::runUnicodeTestData(const char *fileName, RuleBasedBreakIterator *
// Each kind of token is recognized in its own capture group; what type of item was scanned
// is identified by which group had a match.
//
- // Caputure Group # 1 2 3 4 5
+ // Capture Group # 1 2 3 4 5
// Parses this item: divide x hex digits comment \n unrecognized \n
//
UnicodeString tokenExpr("[ \t]*(?:(\\u00F7)|(\\u00D7)|([0-9a-fA-F]+)|((?:#.*?)?$.)|(.*?$.))", -1, US_INV);
@@ -1443,7 +1331,7 @@ void RBBITest::runUnicodeTestData(const char *fileName, RuleBasedBreakIterator *
int spin = 0;
while (tokenMatcher.find()) {
if(tokenMatcher.hitEnd()) {
- /* Shouldnt Happen(TM). This means we didn't find the symbols we were looking for.
+ /* Shouldn't Happen(TM). This means we didn't find the symbols we were looking for.
This occurred when the text file was corrupt (wasn't marked as UTF-8)
and caused an infinite loop here on EBCDIC systems!
*/
@@ -1567,7 +1455,7 @@ void RBBITest::checkUnicodeTestCase(const char *testFileName, int lineNumber,
#if !UCONFIG_NO_REGULAR_EXPRESSIONS
//---------------------------------------------------------------------------------------
//
-// classs RBBIMonkeyKind
+// class RBBIMonkeyKind
//
// Monkey Test for Break Iteration
// Abstract interface class. Concrete derived classes independently
@@ -1586,7 +1474,7 @@ public:
// Set the test text on which subsequent calls to next() will operate
virtual void setText(const UnicodeString &s) = 0;
- // Find the next break postion, starting from the prev break position, or from zero.
+ // Find the next break position, starting from the prev break position, or from zero.
// Return -1 after reaching end of string.
virtual int32_t next(int32_t i) = 0;
@@ -1691,9 +1579,9 @@ class RBBICharMonkey: public RBBIMonkeyKind {
public:
RBBICharMonkey();
virtual ~RBBICharMonkey();
- virtual UVector *charClasses();
- virtual void setText(const UnicodeString &s);
- virtual int32_t next(int32_t i);
+ virtual UVector *charClasses() override;
+ virtual void setText(const UnicodeString &s) override;
+ virtual int32_t next(int32_t i) override;
private:
UVector *fSets;
@@ -1975,9 +1863,9 @@ class RBBIWordMonkey: public RBBIMonkeyKind {
public:
RBBIWordMonkey();
virtual ~RBBIWordMonkey();
- virtual UVector *charClasses();
- virtual void setText(const UnicodeString &s);
- virtual int32_t next(int32_t i);
+ virtual UVector *charClasses() override;
+ virtual void setText(const UnicodeString &s) override;
+ virtual int32_t next(int32_t i) override;
private:
UVector *fSets;
@@ -1995,11 +1883,11 @@ private:
UnicodeSet *fMidNumSet;
UnicodeSet *fNumericSet;
UnicodeSet *fFormatSet;
- UnicodeSet *fOtherSet;
+ UnicodeSet *fOtherSet = nullptr;
UnicodeSet *fExtendSet;
UnicodeSet *fExtendNumLetSet;
UnicodeSet *fWSegSpaceSet;
- UnicodeSet *fDictionarySet;
+ UnicodeSet *fDictionarySet = nullptr;
UnicodeSet *fZWJSet;
UnicodeSet *fExtendedPictSet;
@@ -2038,6 +1926,11 @@ RBBIWordMonkey::RBBIWordMonkey()
fZWJSet = new UnicodeSet(u"[\\p{Word_Break = ZWJ}]", status);
fExtendedPictSet = new UnicodeSet(u"[:Extended_Pictographic:]", status);
+ if(U_FAILURE(status)) {
+ IntlTest::gTest->errln("%s:%d %s", __FILE__, __LINE__, u_errorName(status));
+ deferredStatus = status;
+ return;
+ }
fDictionarySet = new UnicodeSet(u"[[\\uac00-\\ud7a3][:Han:][:Hiragana:]]", status);
fDictionarySet->addAll(*fKatakanaSet);
@@ -2347,9 +2240,9 @@ class RBBISentMonkey: public RBBIMonkeyKind {
public:
RBBISentMonkey();
virtual ~RBBISentMonkey();
- virtual UVector *charClasses();
- virtual void setText(const UnicodeString &s);
- virtual int32_t next(int32_t i);
+ virtual UVector *charClasses() override;
+ virtual void setText(const UnicodeString &s) override;
+ virtual int32_t next(int32_t i) override;
private:
int moveBack(int posFrom);
int moveForward(int posFrom);
@@ -2681,9 +2574,9 @@ class RBBILineMonkey: public RBBIMonkeyKind {
public:
RBBILineMonkey();
virtual ~RBBILineMonkey();
- virtual UVector *charClasses();
- virtual void setText(const UnicodeString &s);
- virtual int32_t next(int32_t i);
+ virtual UVector *charClasses() override;
+ virtual void setText(const UnicodeString &s) override;
+ virtual int32_t next(int32_t i) override;
virtual void rule9Adjust(int32_t pos, UChar32 *posChar, int32_t *nextPos, UChar32 *nextChar);
private:
UVector *fSets;
@@ -2733,6 +2626,7 @@ private:
UnicodeSet *fZWJ;
UnicodeSet *fOP30;
UnicodeSet *fCP30;
+ UnicodeSet *fExtPictUnassigned;
BreakIterator *fCharBI;
const UnicodeString *fText;
@@ -2801,6 +2695,7 @@ RBBILineMonkey::RBBILineMonkey() :
fZWJ = new UnicodeSet(UNICODE_STRING_SIMPLE("[\\p{Line_break=ZWJ}]"), status);
fOP30 = new UnicodeSet(u"[\\p{Line_break=OP}-[\\p{ea=F}\\p{ea=W}\\p{ea=H}]]", status);
fCP30 = new UnicodeSet(u"[\\p{Line_break=CP}-[\\p{ea=F}\\p{ea=W}\\p{ea=H}]]", status);
+ fExtPictUnassigned = new UnicodeSet(u"[\\p{Extended_Pictographic}&\\p{Cn}]", status);
if (U_FAILURE(status)) {
deferredStatus = status;
@@ -2852,7 +2747,6 @@ RBBILineMonkey::RBBILineMonkey() :
fSets->addElement(fAL, status); classNames.push_back("fAL");
fSets->addElement(fHL, status); classNames.push_back("fHL");
fSets->addElement(fID, status); classNames.push_back("fID");
- fSets->addElement(fWJ, status); classNames.push_back("fWJ");
fSets->addElement(fRI, status); classNames.push_back("fRI");
fSets->addElement(fSG, status); classNames.push_back("fSG");
fSets->addElement(fEB, status); classNames.push_back("fEB");
@@ -2861,6 +2755,7 @@ RBBILineMonkey::RBBILineMonkey() :
// TODO: fOP30 & fCP30 overlap with plain fOP. Probably OK, but fOP/CP chars will be over-represented.
fSets->addElement(fOP30, status); classNames.push_back("fOP30");
fSets->addElement(fCP30, status); classNames.push_back("fCP30");
+ fSets->addElement(fExtPictUnassigned, status); classNames.push_back("fExtPictUnassigned");
const char *rules =
"((\\p{Line_Break=PR}|\\p{Line_Break=PO})(\\p{Line_Break=CM}|\\u200d)*)?"
@@ -3347,21 +3242,15 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
if ((fJL->contains(prevChar) || fJV->contains(prevChar) ||
fJT->contains(prevChar) || fH2->contains(prevChar) || fH3->contains(prevChar)) &&
- fIN->contains(thisChar)) {
- setAppliedRule(pos, "LB 27 Treat a Korean Syllable Block the same as ID.");
- continue;
- }
- if ((fJL->contains(prevChar) || fJV->contains(prevChar) ||
- fJT->contains(prevChar) || fH2->contains(prevChar) || fH3->contains(prevChar)) &&
fPO->contains(thisChar)) {
setAppliedRule(pos, "LB 27 Treat a Korean Syllable Block the same as ID.");
continue;
- }
+ }
if (fPR->contains(prevChar) && (fJL->contains(thisChar) || fJV->contains(thisChar) ||
fJT->contains(thisChar) || fH2->contains(thisChar) || fH3->contains(thisChar))) {
setAppliedRule(pos, "LB 27 Treat a Korean Syllable Block the same as ID.");
continue;
- }
+ }
@@ -3400,11 +3289,17 @@ int32_t RBBILineMonkey::next(int32_t startPos) {
continue;
}
+ // LB30b Do not break between an emoji base (or potential emoji) and an emoji modifier.
if (fEB->contains(prevChar) && fEM->contains(thisChar)) {
setAppliedRule(pos, "LB30b Emoji Base x Emoji Modifier");
continue;
}
+ if (fExtPictUnassigned->contains(prevChar) && fEM->contains(thisChar)) {
+ setAppliedRule(pos, "LB30b [\\p{Extended_Pictographic}&\\p{Cn}] × EM");
+ continue;
+ }
+
setAppliedRule(pos, "LB 31 Break everywhere else");
break;
}
@@ -3466,6 +3361,7 @@ RBBILineMonkey::~RBBILineMonkey() {
delete fZWJ;
delete fOP30;
delete fCP30;
+ delete fExtPictUnassigned;
delete fCharBI;
delete fNumberMatcher;
@@ -4057,8 +3953,8 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
numCharClasses = mk.charClasses()->size();
chClasses = mk.charClasses();
- // Check for errors that occured during the construction of the MonkeyKind object.
- // Can't report them where they occured because errln() is a method coming from intlTest,
+ // Check for errors that occurred during the construction of the MonkeyKind object.
+ // Can't report them where they occurred because errln() is a method coming from intlTest,
// and is not visible outside of RBBITest :-(
if (U_FAILURE(mk.deferredStatus)) {
errln("status of \"%s\" in creation of RBBIMonkeyKind.", u_errorName(mk.deferredStatus));
@@ -4123,6 +4019,7 @@ void RBBITest::RunMonkey(BreakIterator *bi, RBBIMonkeyKind &mk, const char *name
errln("breakPos > testText.length()");
}
expectedBreaks[breakPos] = 1;
+ expectedCount++;
U_ASSERT(expectedCount<testText.length());
}
@@ -5071,7 +4968,7 @@ void RBBITest::TestTable_8_16_Bits() {
int32_t result = bi.preceding(ruleLen);
assertEquals(WHERE, 0, result);
- // Verify that the range of rule lengths being tested cover the transations
+ // Verify that the range of rule lengths being tested cover the translations
// from 8 to 16 bit data.
bool has8BitRowData = bi.fData->fForwardTable->fFlags & RBBI_8BITS_ROWS;
bool has8BitsTrie = ucptrie_getValueWidth(bi.fData->fTrie) == UCPTRIE_VALUE_BITS_8;
@@ -5323,4 +5220,197 @@ void RBBITest::TestTraceCreateBreakEngine(void) {
}
#endif
+void RBBITest::TestUnpairedSurrogate() {
+ UnicodeString rules(u"ab;");
+
+ UErrorCode status = U_ZERO_ERROR;
+ UParseError pe;
+ RuleBasedBreakIterator bi1(rules, pe, status);
+ assertSuccess(WHERE, status);
+ UnicodeString rtRules = bi1.getRules();
+ // make sure the simple one work first.
+ assertEquals(WHERE, rules, rtRules);
+
+
+ rules = UnicodeString(u"a\\ud800b;").unescape();
+ pe.line = 0;
+ pe.offset = 0;
+ RuleBasedBreakIterator bi2(rules, pe, status);
+ assertEquals(WHERE "unpaired lead surrogate", U_ILLEGAL_CHAR_FOUND , status);
+ if (pe.line != 1 || pe.offset != 1) {
+ errln("pe (line, offset) expected (1, 1), got (%d, %d)", pe.line, pe.offset);
+ }
+
+ status = U_ZERO_ERROR;
+ rules = UnicodeString(u"a\\ude00b;").unescape();
+ pe.line = 0;
+ pe.offset = 0;
+ RuleBasedBreakIterator bi3(rules, pe, status);
+ assertEquals(WHERE "unpaired tail surrogate", U_ILLEGAL_CHAR_FOUND , status);
+ if (pe.line != 1 || pe.offset != 1) {
+ errln("pe (line, offset) expected (1, 1), got (%d, %d)", pe.line, pe.offset);
+ }
+
+ // make sure the surrogate one work too.
+ status = U_ZERO_ERROR;
+ rules = UnicodeString(u"a😀b;");
+ RuleBasedBreakIterator bi4(rules, pe, status);
+ rtRules = bi4.getRules();
+ assertEquals(WHERE, rules, rtRules);
+}
+
+// Read file generated by
+// https://github.com/unicode-org/lstm_word_segmentation/blob/master/segment_text.py
+// as test cases and compare the Output.
+// Format of the file
+// Model:\t[Model Name (such as 'Thai_graphclust_model4_heavy')]
+// Embedding:\t[Embedding type (such as 'grapheme_clusters_tf')]
+// Input:\t[source text]
+// Output:\t[expected output separated by | ]
+// Input: ...
+// Output: ...
+
+void RBBITest::runLSTMTestFromFile(const char* filename, UScriptCode script) {
+ // The expectation in this test depends on LSTM, skip the test if the
+ // configuration is not build with LSTM data.
+ if (skipLSTMTest()) {
+ return;
+ }
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<BreakIterator> iterator(BreakIterator::createWordInstance(Locale(), status));
+ if (U_FAILURE(status)) {
+ errln("%s:%d Error %s Cannot create Word BreakIterator", __FILE__, __LINE__, u_errorName(status));
+ return;
+ }
+ // Open and read the test data file.
+ const char *testDataDirectory = IntlTest::getSourceTestData(status);
+ CharString testFileName(testDataDirectory, -1, status);
+ testFileName.append(filename, -1, status);
+
+ int len;
+ UChar *testFile = ReadAndConvertFile(testFileName.data(), len, "UTF-8", status);
+ if (U_FAILURE(status)) {
+ errln("%s:%d Error %s opening test file %s", __FILE__, __LINE__, u_errorName(status), filename);
+ return;
+ }
+
+ // Put the test data into a UnicodeString
+ UnicodeString testString(FALSE, testFile, len);
+
+ int32_t start = 0;
+
+ UnicodeString line;
+ int32_t end;
+ std::string actual_sep_str;
+ int32_t caseNum = 0;
+ // Iterate through all the lines in the test file.
+ do {
+ int32_t cr = testString.indexOf(u'\r', start);
+ int32_t lf = testString.indexOf(u'\n', start);
+ end = cr >= 0 ? (lf >= 0 ? std::min(cr, lf) : cr) : lf;
+ line = testString.tempSubString(start, end < 0 ? INT32_MAX : end - start);
+ if (line.length() > 0) {
+ // Separate each line to key and value by TAB.
+ int32_t tab = line.indexOf(u'\t');
+ UnicodeString key = line.tempSubString(0, tab);
+ const UnicodeString value = line.tempSubString(tab+1);
+
+ if (key == "Model:") {
+ // Verify the expectation in the test file match the LSTM model
+ // we are using now.
+ const LSTMData* data = CreateLSTMDataForScript(script, status);
+ if (U_FAILURE(status)) {
+ dataerrln("%s:%d Error %s Cannot create LSTM data for script %s",
+ __FILE__, __LINE__, u_errorName(status), uscript_getName(script));
+ return;
+ }
+ UnicodeString name(LSTMDataName(data));
+ DeleteLSTMData(data);
+ if (value != name) {
+ std::string utf8Name, utf8Value;
+ dataerrln("%s:%d Error %s The LSTM data for script %s is %s instead of %s",
+ __FILE__, __LINE__, u_errorName(status), uscript_getName(script),
+ name.toUTF8String<std::string>(utf8Name).c_str(),
+ value.toUTF8String<std::string>(utf8Value).c_str());
+ return;
+ }
+ } else if (key == "Input:") {
+ UnicodeString input("prefix ");
+ input += value + " suffix";
+ std::stringstream ss;
+
+ // Construct the UText which is expected by the the engine as
+ // input from the UnicodeString.
+ UText ut = UTEXT_INITIALIZER;
+ utext_openConstUnicodeString(&ut, &input, &status);
+ if (U_FAILURE(status)) {
+ dataerrln("Could not utext_openConstUnicodeString for " + value + UnicodeString(u_errorName(status)));
+ return;
+ }
+
+ iterator->setText(&ut, status);
+ if (U_FAILURE(status)) {
+ errln("%s:%d Error %s Could not setText to BreakIterator", __FILE__, __LINE__, u_errorName(status));
+ return;
+ }
+
+ int32_t bp;
+ for (bp = iterator->first(); bp != BreakIterator::DONE; bp = iterator->next()) {
+ ss << bp;
+ if (bp != input.length()) {
+ ss << ", ";
+ }
+ }
+
+ utext_close(&ut);
+ // Turn the break points into a string for easy comparison
+ // output.
+ actual_sep_str = "{" + ss.str() + "}";
+ } else if (key == "Output:" && !actual_sep_str.empty()) {
+ UnicodeString input("prefix| |");
+ input += value + "| |suffix";
+ std::string d;
+ int32_t sep;
+ int32_t start = 0;
+ int32_t curr = 0;
+ std::stringstream ss;
+ // Include 0 as the break point.
+ ss << "0, ";
+ while ((sep = input.indexOf(u'|', start)) >= 0) {
+ int32_t len = sep - start;
+ if (len > 0) {
+ if (curr > 0) {
+ ss << ", ";
+ }
+ curr += len;
+ ss << curr;
+ }
+ start = sep + 1;
+ }
+ // Include end of the string as break point.
+ ss << ", " << curr + input.length() - start;
+ // Turn the break points into a string for easy comparison
+ // output.
+ std::string expected = "{" + ss.str() + "}";
+ std::string utf8;
+
+ assertEquals((input + " Test Case#" + caseNum).toUTF8String<std::string>(utf8).c_str(),
+ expected.c_str(), actual_sep_str.c_str());
+ actual_sep_str.clear();
+ }
+ }
+ start = std::max(cr, lf) + 1;
+ } while (end >= 0);
+
+ delete [] testFile;
+}
+
+void RBBITest::TestLSTMThai() {
+ runLSTMTestFromFile("Thai_graphclust_model4_heavy_Test.txt", USCRIPT_THAI);
+}
+
+void RBBITest::TestLSTMBurmese() {
+ runLSTMTestFromFile("Burmese_graphclust_model5_heavy_Test.txt", USCRIPT_MYANMAR);
+}
+
#endif // #if !UCONFIG_NO_BREAK_ITERATION
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h b/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
index da144114af8..acb3e82bbec 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
@@ -22,6 +22,7 @@
#include "intltest.h"
#include "unicode/brkiter.h"
#include "unicode/rbbi.h"
+#include "unicode/uscript.h"
class Enumeration;
class BITestData;
@@ -41,7 +42,7 @@ public:
RBBITest();
virtual ~RBBITest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
void TestGetAvailableLocales();
void TestGetDisplayName();
@@ -54,7 +55,6 @@ public:
void TestMonkey();
void TestExtended();
- UChar *ReadAndConvertFile(const char *fileName, int &ulen, const char *encoding, UErrorCode &status);
void executeTest(TestParams *, UErrorCode &status);
void TestWordBreaks();
@@ -83,6 +83,7 @@ public:
void TestReverse(std::unique_ptr<RuleBasedBreakIterator>bi);
void TestBug13692();
void TestDebugRules();
+ void TestUnpairedSurrogate();
void TestDebug();
void TestProperties();
@@ -92,6 +93,8 @@ public:
void Test16BitsTrieWith16BitStateTable();
void TestTable_8_16_Bits();
void TestBug13590();
+ void TestLSTMThai();
+ void TestLSTMBurmese();
#if U_ENABLE_TRACING
void TestTraceCreateCharacter();
@@ -117,6 +120,9 @@ private:
// Run one of the Unicode Consortium boundary test data files.
void runUnicodeTestData(const char *fileName, RuleBasedBreakIterator *bi);
+ // Run tests from one of the LSTM test files.
+ void runLSTMTestFromFile(const char* filename, UScriptCode script);
+
// Run a single test case from one of the Unicode Consortium test files.
void checkUnicodeTestCase(const char *testFileName, int lineNumber,
const UnicodeString &testString,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.cpp
index 67c95a6a8c2..f103915f7c3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.cpp
@@ -984,96 +984,6 @@ void CollationRegressionTest::Test4139572(/* char* par */)
delete col;
}
-/* HSYS : RuleBasedCollator::compare() performance enhancements
- compare() does not create CollationElementIterator() anymore.*/
-
-class My4146160Collator : public RuleBasedCollator
-{
-public:
- My4146160Collator(RuleBasedCollator &rbc, UErrorCode &status);
- ~My4146160Collator();
-
- CollationElementIterator *createCollationElementIterator(const UnicodeString &text) const;
-
- CollationElementIterator *createCollationElementIterator(const CharacterIterator &text) const;
-
- static int32_t count;
-};
-
-int32_t My4146160Collator::count = 0;
-
-My4146160Collator::My4146160Collator(RuleBasedCollator &rbc, UErrorCode &status)
- : RuleBasedCollator(rbc.getRules(), status)
-{
-}
-
-My4146160Collator::~My4146160Collator()
-{
-}
-
-CollationElementIterator *My4146160Collator::createCollationElementIterator(const UnicodeString &text) const
-{
- count += 1;
- return RuleBasedCollator::createCollationElementIterator(text);
-}
-
-CollationElementIterator *My4146160Collator::createCollationElementIterator(const CharacterIterator &text) const
-{
- count += 1;
- return RuleBasedCollator::createCollationElementIterator(text);
-}
-
-// @bug 4146160
-//
-// RuleBasedCollator doesn't use createCollationElementIterator internally
-//
-void CollationRegressionTest::Test4146160(/* char* par */)
-{
-#if 0
- //
- // Use a custom collator class whose createCollationElementIterator
- // methods increment a count....
- //
- UErrorCode status = U_ZERO_ERROR;
- CollationKey key;
-
- My4146160Collator::count = 0;
- My4146160Collator *mc = NULL;
-
- mc = new My4146160Collator(*en_us, status);
-
- if (mc == NULL || U_FAILURE(status))
- {
- errln("Failed to create a My4146160Collator.");
- delete mc;
- return;
- }
-
- mc->getCollationKey("1", key, status);
-
- if (key.isBogus() || U_FAILURE(status))
- {
- errln("Failure to get a CollationKey from a My4146160Collator.");
- delete mc;
- return;
- }
-
- if (My4146160Collator::count < 1)
- {
- errln("My4146160Collator::createCollationElementIterator not called for getCollationKey");
- }
-
- My4146160Collator::count = 0;
- mc->compare("1", "2");
-
- if (My4146160Collator::count < 1)
- {
- errln("My4146160Collator::createtCollationElementIterator not called for compare");
- }
-
- delete mc;
-#endif
-}
void CollationRegressionTest::Test4179216() {
// you can position a CollationElementIterator in the middle of
@@ -1472,7 +1382,6 @@ void CollationRegressionTest::runIndexedTest(int32_t index, UBool exec, const ch
TESTCASE_AUTO(Test4133509);
TESTCASE_AUTO(Test4139572);
TESTCASE_AUTO(Test4141640);
- TESTCASE_AUTO(Test4146160);
TESTCASE_AUTO(Test4179216);
TESTCASE_AUTO(TestT7189);
TESTCASE_AUTO(TestCaseFirstCompression);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.h
index 424acb2b7b1..85226a9e62a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.h
@@ -32,7 +32,7 @@ public:
CollationRegressionTest();
virtual ~CollationRegressionTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// @bug 4048446
//
@@ -219,12 +219,6 @@ public:
// Support for Swedish gone in 1.1.6 (Can't create Swedish collator)
//
void Test4141640(/* char* par */);
-
- // @bug 4146160
- //
- // RuleBasedCollator doesn't use getCollationElementIterator internally
- //
- void Test4146160(/* char* par */);
void Test4179216();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
index 5f7e36b3ae1..d55d9917d31 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
@@ -654,7 +654,7 @@ void RegexTest::Basic() {
REGEX_TESTLM("a[0-9]*b", "a123b", TRUE, TRUE);
REGEX_TESTLM("a[0-9]*b", "abc", TRUE, FALSE);
REGEX_TESTLM("[\\p{Nd}]*", "123456", TRUE, TRUE);
- REGEX_TESTLM("[\\p{Nd}]*", "a123456", TRUE, FALSE); // note that * matches 0 occurences.
+ REGEX_TESTLM("[\\p{Nd}]*", "a123456", TRUE, FALSE); // note that * matches 0 occurrences.
REGEX_TESTLM("[a][b][[:Zs:]]*", "ab ", TRUE, TRUE);
//
@@ -1231,7 +1231,7 @@ void RegexTest::API_Match() {
{
UErrorCode status = U_ZERO_ERROR;
// Enough 'a's in the string to cause the match to time out.
- // (Each on additonal 'a' doubles the time)
+ // (Each on additional 'a' doubles the time)
UnicodeString testString("aaaaaaaaaaaaaaaaaaaaa");
RegexMatcher matcher("(a+)+b", testString, 0, status);
REGEX_CHECK_STATUS;
@@ -1460,7 +1460,7 @@ void RegexTest::API_Replace() {
REGEX_CHECK_STATUS;
UnicodeString result;
- // Multiple finds do NOT bump up the previous appendReplacement postion.
+ // Multiple finds do NOT bump up the previous appendReplacement position.
m.reset(s);
m.find();
m.find();
@@ -2728,7 +2728,7 @@ const char str_ooh[] = { 0x6f, 0x6f, 0x68, 0x00 }; /* ooh */
UText resultText = UTEXT_INITIALIZER;
utext_openUnicodeString(&resultText, &result, &status);
- // Multiple finds do NOT bump up the previous appendReplacement postion.
+ // Multiple finds do NOT bump up the previous appendReplacement position.
m.reset(&dataText);
m.find();
m.find();
@@ -3865,115 +3865,6 @@ void RegexTest::Errors() {
}
-
-//-------------------------------------------------------------------------------
-//
-// Read a text data file, convert it to UChars, and return the data
-// in one big UChar * buffer, which the caller must delete.
-//
-//--------------------------------------------------------------------------------
-UChar *RegexTest::ReadAndConvertFile(const char *fileName, int32_t &ulen,
- const char *defEncoding, UErrorCode &status) {
- UChar *retPtr = NULL;
- char *fileBuf = NULL;
- UConverter* conv = NULL;
- FILE *f = NULL;
-
- ulen = 0;
- if (U_FAILURE(status)) {
- return retPtr;
- }
-
- //
- // Open the file.
- //
- f = fopen(fileName, "rb");
- if (f == 0) {
- dataerrln("Error opening test data file %s\n", fileName);
- status = U_FILE_ACCESS_ERROR;
- return NULL;
- }
- //
- // Read it in
- //
- int32_t fileSize;
- int32_t amt_read;
-
- fseek( f, 0, SEEK_END);
- fileSize = ftell(f);
- fileBuf = new char[fileSize];
- fseek(f, 0, SEEK_SET);
- amt_read = static_cast<int32_t>(fread(fileBuf, 1, fileSize, f));
- if (amt_read != fileSize || fileSize <= 0) {
- errln("Error reading test data file.");
- goto cleanUpAndReturn;
- }
-
- //
- // Look for a Unicode Signature (BOM) on the data just read
- //
- int32_t signatureLength;
- const char * fileBufC;
- const char* encoding;
-
- fileBufC = fileBuf;
- encoding = ucnv_detectUnicodeSignature(
- fileBuf, fileSize, &signatureLength, &status);
- if(encoding!=NULL ){
- fileBufC += signatureLength;
- fileSize -= signatureLength;
- } else {
- encoding = defEncoding;
- if (strcmp(encoding, "utf-8") == 0) {
- errln("file %s is missing its BOM", fileName);
- }
- }
-
- //
- // Open a converter to take the rule file to UTF-16
- //
- conv = ucnv_open(encoding, &status);
- if (U_FAILURE(status)) {
- goto cleanUpAndReturn;
- }
-
- //
- // Convert the rules to UChar.
- // Preflight first to determine required buffer size.
- //
- ulen = ucnv_toUChars(conv,
- NULL, // dest,
- 0, // destCapacity,
- fileBufC,
- fileSize,
- &status);
- if (status == U_BUFFER_OVERFLOW_ERROR) {
- // Buffer Overflow is expected from the preflight operation.
- status = U_ZERO_ERROR;
-
- retPtr = new UChar[ulen+1];
- ucnv_toUChars(conv,
- retPtr, // dest,
- ulen+1,
- fileBufC,
- fileSize,
- &status);
- }
-
-cleanUpAndReturn:
- fclose(f);
- delete[] fileBuf;
- ucnv_close(conv);
- if (U_FAILURE(status)) {
- errln("ucnv_toUChars: ICU Error \"%s\"\n", u_errorName(status));
- delete []retPtr;
- retPtr = 0;
- ulen = 0;
- }
- return retPtr;
-}
-
-
//-------------------------------------------------------------------------------
//
// PerlTests - Run Perl's regular expression tests
@@ -4226,7 +4117,7 @@ void RegexTest::PerlTests() {
// building up an ICU string from the results of the ICU match.
// The Perl expression will contain references to the results of
// a regex match, including the matched string, capture group strings,
- // group starting and ending indicies, etc.
+ // group starting and ending indices, etc.
//
UnicodeString resultString;
UnicodeString perlExpr = fields[3];
@@ -4237,7 +4128,7 @@ void RegexTest::PerlTests() {
while (perlExpr.length() > 0) {
#if !SUPPORT_MUTATING_INPUT_STRING
- // Perferred usage. Reset after any modification to input string.
+ // Preferred usage. Reset after any modification to input string.
groupsMat->reset(perlExpr);
cgMat->reset(perlExpr);
#endif
@@ -4623,7 +4514,7 @@ void RegexTest::PerlTestsUTF8() {
// building up an ICU string from the results of the ICU match.
// The Perl expression will contain references to the results of
// a regex match, including the matched string, capture group strings,
- // group starting and ending indicies, etc.
+ // group starting and ending indices, etc.
//
UnicodeString resultString;
UnicodeString perlExpr = fields[3];
@@ -5570,12 +5461,12 @@ void RegexTest::Bug7029() {
}
// Bug 9283
-// This test is checking for the existance of any supplemental characters that case-fold
+// This test is checking for the existence of any supplemental characters that case-fold
// to a bmp character.
//
// At the time of this writing there are none. If any should appear in a subsequent release
// of Unicode, the code in regular expressions compilation that determines the longest
-// posssible match for a literal string will need to be enhanced.
+// possible match for a literal string will need to be enhanced.
//
// See file regexcmp.cpp, case URX_STRING_I in RegexCompile::maxMatchLength()
// for details on what to do in case of a failure of this test.
@@ -5643,7 +5534,7 @@ void RegexTest::TestCaseInsensitiveStarters() {
// Test that the data used by RegexCompile::findCaseInsensitiveStarters() hasn't
// become stale because of new Unicode characters.
// If it is stale, rerun the generation tool
- // svn+ssh://source.icu-project.org/repos/icu/tools/trunk/unicode/c/genregexcasing
+ // https://github.com/unicode-org/icu/tree/main/tools/unicode/c/genregexcasing
// and replace the embedded data in i18n/regexcmp.cpp
for (UChar32 cp=0; cp<=0x10ffff; cp++) {
@@ -5857,7 +5748,7 @@ void RegexTest::TestBug12884() {
// Bug 13631. A find() of a pattern with a zero length look-behind assertions
// can cause a read past the end of the input text.
-// The failure is seen when running this test with Clang's Addresss Sanitizer.
+// The failure is seen when running this test with Clang's Address Sanitizer.
void RegexTest::TestBug13631() {
const UChar *pats[] = { u"(?<!^)",
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h b/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
index 46494c568fc..d11e447b62b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
@@ -24,7 +24,7 @@ public:
RegexTest();
virtual ~RegexTest();
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL );
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// The following are test functions that are visible from the intltest test framework.
virtual void API_Match();
@@ -71,7 +71,6 @@ public:
const UnicodeString &input, const char *srcPath, int32_t line);
virtual void regex_err(const char *pat, int32_t errline, int32_t errcol,
UErrorCode expectedStatus, int32_t line);
- virtual UChar *ReadAndConvertFile(const char *fileName, int32_t &len, const char *charset, UErrorCode &status);
virtual const char *getPath(char buffer[2048], const char *filename);
virtual void TestCase11049(const char *pattern, const char *data, UBool expectMatch, int32_t lineNumber);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.cpp
index d8a6723bfe3..c35759f08fa 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.cpp
@@ -358,6 +358,7 @@ RegionTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char*
TESTCASE_AUTO(TestContains);
TESTCASE_AUTO(TestAvailableTerritories);
TESTCASE_AUTO(TestNoContainedRegions);
+ TESTCASE_AUTO(TestGroupingChildren);
TESTCASE_AUTO_END;
}
@@ -733,6 +734,55 @@ void RegionTest::TestNoContainedRegions(void) {
delete containedRegions;
}
+void RegionTest::TestGroupingChildren(void) {
+ const char* testGroupings[] = {
+ "003", "021,013,029",
+ "419", "013,029,005",
+ "EU", "AT,BE,CY,CZ,DE,DK,EE,ES,FI,FR,GR,HR,HU,IE,IT,LT,LU,LV,MT,NL,PL,PT,SE,SI,SK,BG,RO"
+ };
+
+ for (int32_t i = 0; i < UPRV_LENGTHOF(testGroupings); i += 2) {
+ const char* groupingCode = testGroupings[i];
+ const char* expectedChildren = testGroupings[i + 1];
+
+ UErrorCode err = U_ZERO_ERROR;
+ const Region* grouping = Region::getInstance(groupingCode, err);
+ if (U_SUCCESS(err)) {
+ StringEnumeration* actualChildren = grouping->getContainedRegions(err);
+ if (U_SUCCESS(err)) {
+ int32_t numActualChildren = actualChildren->count(err);
+ int32_t numExpectedChildren = 0;
+ const char* expectedChildStart = expectedChildren;
+ const char* expectedChildEnd = NULL;
+ const char* actualChild = NULL;
+ while ((actualChild = actualChildren->next(NULL, err)) != NULL && *expectedChildStart != '\0') {
+ expectedChildEnd = uprv_strchr(expectedChildStart, ',');
+ if (expectedChildEnd == NULL) {
+ expectedChildEnd = expectedChildStart + uprv_strlen(expectedChildStart);
+ }
+ if (uprv_strlen(actualChild) != size_t(expectedChildEnd - expectedChildStart) || uprv_strncmp(actualChild, expectedChildStart, expectedChildEnd - expectedChildStart) != 0) {
+ errln("Mismatch in child list for %s at position %d: expected %s, got %s\n", groupingCode, numExpectedChildren, expectedChildStart, actualChild);
+ }
+ expectedChildStart = (*expectedChildEnd != '\0') ? expectedChildEnd + 1 : expectedChildEnd;
+ ++numExpectedChildren;
+ }
+ while (expectedChildEnd != NULL && *expectedChildEnd != '\0') {
+ expectedChildEnd = uprv_strchr(expectedChildEnd + 1, ',');
+ ++numExpectedChildren;
+ }
+ if (numExpectedChildren != numActualChildren) {
+ errln("Wrong number of children for %s: expected %d, got %d\n", groupingCode, numExpectedChildren, numActualChildren);
+ }
+ delete actualChildren;
+ } else {
+ errln("Couldn't create iterator for children of %s\n", groupingCode);
+ }
+ } else {
+ errln("Region %s not found\n", groupingCode);
+ }
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */
//eof
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.h b/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.h
index 32e0e01cf64..47649b26cce 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.h
@@ -21,7 +21,7 @@
**/
class RegionTest: public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
RegionTest();
@@ -38,6 +38,7 @@ public:
void TestContains(void);
void TestAvailableTerritories(void);
void TestNoContainedRegions(void);
+ void TestGroupingChildren(void);
private:
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/reldatefmttest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/reldatefmttest.cpp
index 661228dc9fe..d785d750750 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/reldatefmttest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/reldatefmttest.cpp
@@ -772,7 +772,7 @@ public:
RelativeDateTimeFormatterTest() {
}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void TestEnglish();
void TestEnglishCaps();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/reptest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/reptest.cpp
index bf4a7224318..51afca26db6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/reptest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/reptest.cpp
@@ -71,7 +71,7 @@ public:
this->styles = s;
}
- virtual TestReplaceable *clone() const {
+ virtual TestReplaceable *clone() const override {
return new TestReplaceable(chars, styles);
}
@@ -89,7 +89,7 @@ public:
return s;
}
- void extractBetween(int32_t start, int32_t limit, UnicodeString& result) const {
+ void extractBetween(int32_t start, int32_t limit, UnicodeString& result) const override {
chars.extractBetween(start, limit, result);
}
@@ -105,18 +105,18 @@ public:
*
* @draft ICU 2.2
*/
- virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+ virtual inline UClassID getDynamicClassID() const override { return getStaticClassID(); }
protected:
- virtual int32_t getLength() const {
+ virtual int32_t getLength() const override {
return chars.length();
}
- virtual UChar getCharAt(int32_t offset) const{
+ virtual UChar getCharAt(int32_t offset) const override {
return chars.charAt(offset);
}
- virtual UChar32 getChar32At(int32_t offset) const{
+ virtual UChar32 getChar32At(int32_t offset) const override {
return chars.char32At(offset);
}
@@ -144,7 +144,7 @@ protected:
styles.replaceBetween(start, limit, s);
}
- virtual void handleReplaceBetween(int32_t start, int32_t limit, const UnicodeString& text) {
+ virtual void handleReplaceBetween(int32_t start, int32_t limit, const UnicodeString& text) override {
UnicodeString s;
this->extractBetween(start, limit, s);
if (s == text) return; // NO ACTION!
@@ -153,7 +153,7 @@ protected:
}
- virtual void copy(int32_t start, int32_t limit, int32_t dest) {
+ virtual void copy(int32_t start, int32_t limit, int32_t dest) override {
chars.copy(start, limit, dest);
styles.copy(start, limit, dest);
}
@@ -179,32 +179,32 @@ ReplaceableTest::runIndexedTest(int32_t index, UBool exec,
*/
class NoopReplaceable : public Replaceable {
public:
- virtual int32_t getLength() const {
+ virtual int32_t getLength() const override {
return 0;
}
- virtual UChar getCharAt(int32_t /*offset*/) const{
+ virtual UChar getCharAt(int32_t /*offset*/) const override {
return 0xffff;
}
- virtual UChar32 getChar32At(int32_t /*offset*/) const{
+ virtual UChar32 getChar32At(int32_t /*offset*/) const override {
return 0xffff;
}
- void extractBetween(int32_t /*start*/, int32_t /*limit*/, UnicodeString& result) const {
+ void extractBetween(int32_t /*start*/, int32_t /*limit*/, UnicodeString& result) const override {
result.remove();
}
- virtual void handleReplaceBetween(int32_t /*start*/, int32_t /*limit*/, const UnicodeString &/*text*/) {
+ virtual void handleReplaceBetween(int32_t /*start*/, int32_t /*limit*/, const UnicodeString &/*text*/) override {
/* do nothing */
}
- virtual void copy(int32_t /*start*/, int32_t /*limit*/, int32_t /*dest*/) {
+ virtual void copy(int32_t /*start*/, int32_t /*limit*/, int32_t /*dest*/) override {
/* do nothing */
}
static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
- virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+ virtual inline UClassID getDynamicClassID() const override { return getStaticClassID(); }
private:
static const char fgClassID;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/reptest.h b/Build/source/libs/icu/icu-src/source/test/intltest/reptest.h
index ee95f108665..097eaaa402f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/reptest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/reptest.h
@@ -30,7 +30,7 @@
*/
class ReplaceableTest : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
/*Tests the Replaceable class according to the API documentation. */
void TestReplaceableClass(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/restest.h b/Build/source/libs/icu/icu-src/source/test/intltest/restest.h
index 879bb6e264e..b6f5934fa9e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/restest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/restest.h
@@ -19,7 +19,7 @@ public:
ResourceBundleTest();
virtual ~ResourceBundleTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
/**
* Perform several extensive tests using the subtest routine testTag
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
index 5d25dd12e10..a3e739a7e3e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
@@ -48,6 +48,8 @@ void NewResourceBundleTest::runIndexedTest( int32_t index, UBool exec, const cha
TESTCASE_AUTO(TestTrace);
#endif
+ TESTCASE_AUTO(TestOpenDirectFillIn);
+ TESTCASE_AUTO(TestStackReuse);
TESTCASE_AUTO_END;
}
@@ -1101,7 +1103,7 @@ NewResourceBundleTest::TestNewTypes() {
/* if everything is working correctly, the size of this string */
/* should be 7. Everything else is a wrong answer, esp. 3 and 6*/
- strcpy(action, "getting and testing of string with embeded zero");
+ strcpy(action, "getting and testing of string with embedded zero");
ResourceBundle res = theBundle.get("zerotest", status);
CONFIRM_UErrorCode(status, U_ZERO_ERROR);
CONFIRM_EQ(res.getType(), URES_STRING);
@@ -1397,22 +1399,10 @@ void NewResourceBundleTest::TestFilter() {
}
}
-/*
- * The following test for ICU-20706 has infinite loops on certain inputs for
- * locales and calendars. In order to unblock the build (ICU-21055), those
- * specific values are temporarily removed.
- * The issue of the infinite loops and its blocking dependencies were captured
- * in ICU-21080.
- */
-
void NewResourceBundleTest::TestIntervalAliasFallbacks() {
const char* locales[] = {
- // Thee will not cause infinity loop
"en",
"ja",
-
- // These will cause infinity loop
-#if 0
"fr_CA",
"en_150",
"es_419",
@@ -1424,15 +1414,10 @@ void NewResourceBundleTest::TestIntervalAliasFallbacks() {
"zh_Hant",
"zh_Hant_TW",
"zh_TW",
-#endif
};
const char* calendars[] = {
- // These won't cause infinity loop
"gregorian",
"chinese",
-
- // These will cause infinity loop
-#if 0
"islamic",
"islamic-civil",
"islamic-tbla",
@@ -1441,7 +1426,6 @@ void NewResourceBundleTest::TestIntervalAliasFallbacks() {
"islamic-rgsa",
"japanese",
"roc",
-#endif
};
for (int lidx = 0; lidx < UPRV_LENGTHOF(locales); lidx++) {
@@ -1456,10 +1440,8 @@ void NewResourceBundleTest::TestIntervalAliasFallbacks() {
key.append("calendar/", status);
key.append(calendars[cidx], status);
key.append("/intervalFormats/fallback", status);
- if (! logKnownIssue("20400")) {
- int32_t resStrLen = 0;
- ures_getStringByKeyWithFallback(rb, key.data(), &resStrLen, &status);
- }
+ int32_t resStrLen = 0;
+ ures_getStringByKeyWithFallback(rb, key.data(), &resStrLen, &status);
if (U_FAILURE(status)) {
errln("Cannot ures_getStringByKeyWithFallback('%s') on locale %s",
key.data(), locales[lidx]);
@@ -1550,5 +1532,61 @@ void NewResourceBundleTest::TestTrace() {
#endif
-//eof
+void NewResourceBundleTest::TestOpenDirectFillIn() {
+ // Test that ures_openDirectFillIn() opens a stack allocated resource bundle, similar to ures_open().
+ // Since ures_openDirectFillIn is just a wrapper function, this is just a very basic test copied from
+ // the crestst.c/TestOpenDirect test.
+ // ICU-20769: This test was moved to C++ intltest while
+ // turning UResourceBundle from a C struct into a C++ class.
+ IcuTestErrorCode errorCode(*this, "TestOpenDirectFillIn");
+ UResourceBundle *item;
+ UResourceBundle idna_rules;
+ ures_initStackObject(&idna_rules);
+
+ ures_openDirectFillIn(&idna_rules, loadTestData(errorCode), "idna_rules", errorCode);
+ if(errorCode.errDataIfFailureAndReset("ures_openDirectFillIn(\"idna_rules\") failed\n")) {
+ return;
+ }
+
+ if(0!=uprv_strcmp("idna_rules", ures_getLocale(&idna_rules, errorCode))) {
+ errln("ures_openDirectFillIn(\"idna_rules\").getLocale()!=idna_rules");
+ }
+ errorCode.reset();
+ /* try an item in idna_rules, must work */
+ item=ures_getByKey(&idna_rules, "UnassignedSet", nullptr, errorCode);
+ if(errorCode.errDataIfFailureAndReset("translit_index.getByKey(local key) failed\n")) {
+ // pass
+ } else {
+ ures_close(item);
+ }
+
+ /* try an item in root, must fail */
+ item=ures_getByKey(&idna_rules, "ShortLanguage", nullptr, errorCode);
+ if(errorCode.isFailure()) {
+ errorCode.reset();
+ } else {
+ errln("idna_rules.getByKey(root key) succeeded but should have failed!");
+ ures_close(item);
+ }
+ ures_close(&idna_rules);
+}
+
+void NewResourceBundleTest::TestStackReuse() {
+ // This test will crash if this doesn't work. Results don't need testing.
+ // ICU-20769: This test was moved to C++ intltest while
+ // turning UResourceBundle from a C struct into a C++ class.
+ IcuTestErrorCode errorCode(*this, "TestStackReuse");
+ UResourceBundle table;
+ UResourceBundle *rb = ures_open(nullptr, "en_US", errorCode);
+
+ if(errorCode.errDataIfFailureAndReset("Could not load en_US locale.\n")) {
+ return;
+ }
+ ures_initStackObject(&table);
+ ures_getByKeyWithFallback(rb, "Types", &table, errorCode);
+ ures_getByKeyWithFallback(&table, "collation", &table, errorCode);
+ ures_close(rb);
+ ures_close(&table);
+ errorCode.reset(); // ignore U_MISSING_RESOURCE_ERROR etc.
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h b/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
index 45cc9309365..e4eed1971b8 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
@@ -19,7 +19,7 @@ public:
NewResourceBundleTest();
virtual ~NewResourceBundleTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
/**
* Perform several extensive tests using the subtest routine testTag
@@ -46,6 +46,9 @@ public:
void TestTrace(void);
#endif
+ void TestOpenDirectFillIn();
+ void TestStackReuse();
+
private:
/**
* The assignment operator has no real implementation.
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/scientificnumberformattertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/scientificnumberformattertest.cpp
index c76e19cbb1c..f44981d18e8 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/scientificnumberformattertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/scientificnumberformattertest.cpp
@@ -23,7 +23,7 @@
class ScientificNumberFormatterTest : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void TestBasic();
void TestFarsi();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.cpp
index ba48346bf1d..d7d61e2d87b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.cpp
@@ -55,7 +55,7 @@ void IntlTestSimpleDateFormatAPI::testAPI(/*char *par*/)
SimpleDateFormat def(status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create SimpleDateFormat (default) - exitting");
+ dataerrln("ERROR: Could not create SimpleDateFormat (default) - exiting");
return;
}
@@ -84,7 +84,7 @@ void IntlTestSimpleDateFormatAPI::testAPI(/*char *par*/)
status = U_ZERO_ERROR;
SimpleDateFormat cust1(pattern, symbols, status);
if(U_FAILURE(status)) {
- dataerrln("ERROR: Could not create SimpleDateFormat (pattern, symbols*) - exitting");
+ dataerrln("ERROR: Could not create SimpleDateFormat (pattern, symbols*) - exiting");
return;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.h b/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.h
index 8e31cc161d5..6a6533bae8f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.h
@@ -19,7 +19,7 @@
* Test basic functionality of various API functions
**/
class IntlTestSimpleDateFormatAPI : public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.cpp
index 3bf1be60bd1..c14ca83acd4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.cpp
@@ -101,7 +101,7 @@ void SelectFormatTest::selectFormatUnitTest(/*char *par*/)
VERBOSE_USTRING(SIMPLE_PATTERN);
SelectFormat* selFmt = new SelectFormat( SIMPLE_PATTERN , status);
if (U_FAILURE(status)) {
- dataerrln("ERROR: SelectFormat Unit Test constructor failed in unit tests.- exitting");
+ dataerrln("ERROR: SelectFormat Unit Test constructor failed in unit tests.- exiting");
return;
}
@@ -137,7 +137,7 @@ void SelectFormatTest::selectFormatUnitTest(/*char *par*/)
selFmt = new SelectFormat( SIMPLE_PATTERN , status);
//SelectFormat* selFmt1 = new SelectFormat( SIMPLE_PATTERN , status);
if (U_FAILURE(status)) {
- errln("ERROR: SelectFormat Unit Test constructor failed in unit tests.- exitting");
+ errln("ERROR: SelectFormat Unit Test constructor failed in unit tests.- exiting");
return;
}
@@ -272,7 +272,7 @@ void SelectFormatTest::selectFormatAPITest(/*char *par*/)
UErrorCode status1 = U_ZERO_ERROR;
SelectFormat* selFmt1 = new SelectFormat( SIMPLE_PATTERN , status1);
if( U_FAILURE(status1)) {
- errln("ERROR: SelectFormat constructor failed in staticClassID test! Exitting");
+ errln("ERROR: SelectFormat constructor failed in staticClassID test! Exiting");
return;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.h b/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.h
index e0ddfa26f91..9ad94c6d99a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.h
@@ -22,7 +22,7 @@
* Test basic functionality of various API functions
**/
class SelectFormatTest : public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.cpp
index 9b12161f4c7..4d7c3750ab4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.cpp
@@ -70,24 +70,24 @@ SimpleFwdCharIterator::~SimpleFwdCharIterator() {
}
#if 0 // not used
-UBool SimpleFwdCharIterator::operator==(const ForwardCharacterIterator& that) const {
+bool SimpleFwdCharIterator::operator==(const ForwardCharacterIterator& that) const {
if(this == &that) {
- return TRUE;
+ return true;
}
/*
if(that->fHashCode != kInvalidHashCode && this->fHashCode = that->fHashCode) {
- return TRUE;
+ return true;
}
if(this->fStart == that->fStart) {
- return TRUE;
+ return true;
}
if(this->fLen == that->fLen && uprv_memcmp(this->fStart, that->fStart, this->fLen) {
- return TRUE;
+ return true;
}
*/
- return FALSE;
+ return false;
}
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.h b/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.h
index 388e6ef6fc9..c11e31fcfa2 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.h
@@ -23,19 +23,19 @@ public:
* Returns true when both iterators refer to the same
* character in the same character-storage object.
*/
- // not used -- virtual UBool operator==(const ForwardCharacterIterator& that) const;
+ // not used -- virtual bool operator==(const ForwardCharacterIterator& that) const;
/**
* Generates a hash code for this iterator.
*/
- virtual int32_t hashCode(void) const;
+ virtual int32_t hashCode(void) const override;
/**
* Returns a UClassID for this ForwardCharacterIterator ("poor man's
* RTTI").<P> Despite the fact that this function is public,
* DO NOT CONSIDER IT PART OF CHARACTERITERATOR'S API!
*/
- virtual UClassID getDynamicClassID(void) const;
+ virtual UClassID getDynamicClassID(void) const override;
/**
* Gets the current code unit for returning and advances to the next code unit
@@ -43,7 +43,7 @@ public:
* (toward endIndex()). If there are
* no more code units to return, returns DONE.
*/
- virtual UChar nextPostInc(void);
+ virtual UChar nextPostInc(void) override;
/**
* Gets the current code point for returning and advances to the next code point
@@ -51,7 +51,7 @@ public:
* (toward endIndex()). If there are
* no more code points to return, returns DONE.
*/
- virtual UChar32 next32PostInc(void);
+ virtual UChar32 next32PostInc(void) override;
/**
* Returns FALSE if there are no more code units or code points
@@ -59,7 +59,7 @@ public:
* This is used with nextPostInc() or next32PostInc() in forward
* iteration.
*/
- virtual UBool hasNext();
+ virtual UBool hasNext() override;
protected:
SimpleFwdCharIterator() {}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/simpleformattertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/simpleformattertest.cpp
index 8c230ff2b01..32f453cba81 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/simpleformattertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/simpleformattertest.cpp
@@ -36,7 +36,7 @@ public:
void TestFormatReplaceOptimizationNoOffsets();
void TestFormatReplaceNoOptimizationNoOffsets();
void TestQuotingLikeMessageFormat();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void verifyOffsets(
const int32_t *expected,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.cpp
index f308958bed8..8f7c48aca35 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.cpp
@@ -37,7 +37,7 @@ void SimpleThread::join() {
class ThreadPoolThread: public SimpleThread {
public:
ThreadPoolThread(ThreadPoolBase *pool, int32_t threadNum) : fPool(pool), fNum(threadNum) {}
- virtual void run() {fPool->callFn(fNum); }
+ virtual void run() override { fPool->callFn(fNum); }
ThreadPoolBase *fPool;
int32_t fNum;
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.h b/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.h
index 22f245a5a92..c3b6d954720 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.h
@@ -25,7 +25,7 @@ class SimpleThread
public:
SimpleThread();
virtual ~SimpleThread();
- int32_t start(); // start the thread. Return 0 if successfull.
+ int32_t start(); // start the thread. Return 0 if successful.
void join(); // A thread must be joined before deleting its SimpleThread.
virtual void run() = 0; // Override this to provide the code to run
@@ -79,7 +79,7 @@ class ThreadPool : public ThreadPoolBase {
ThreadPoolBase(test, howMany), fRunFnPtr(runFnPtr) {}
virtual ~ThreadPool() {}
private:
- virtual void callFn(int32_t param) {
+ virtual void callFn(int32_t param) override {
TestClass *test = dynamic_cast<TestClass *>(fIntlTest);
(test->*fRunFnPtr)(param);
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.cpp
index 573158a3cd8..d0b7bfae18c 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.cpp
@@ -37,7 +37,7 @@
} \
break;
-// public contructors and destructors --------------------------------------
+// public constructors and destructors --------------------------------------
StringSearchTest::StringSearchTest()
#if !UCONFIG_NO_BREAK_ITERATION
@@ -1527,7 +1527,7 @@ void StringSearchTest::TestSetMatch()
search.size[index + 1] + 1,
status) != search.offset[index + 1] ||
U_FAILURE(status)) {
- errln("Error getting preceeding match at index %d",
+ errln("Error getting preceding match at index %d",
search.offset[index + 1] + 1);
}
}
@@ -2265,9 +2265,9 @@ public:
const UnicodeString &pattern);
~TestSearch();
- void setOffset(int32_t position, UErrorCode &status);
- int32_t getOffset() const;
- SearchIterator* safeClone() const;
+ void setOffset(int32_t position, UErrorCode &status) override;
+ int32_t getOffset() const override;
+ SearchIterator* safeClone() const override;
/**
@@ -2275,7 +2275,7 @@ public:
*
* @draft ICU 2.2
*/
- virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+ virtual inline UClassID getDynamicClassID() const override { return getStaticClassID(); }
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -2284,13 +2284,13 @@ public:
*/
static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
- UBool operator!=(const TestSearch &that) const;
+ bool operator!=(const TestSearch &that) const;
UnicodeString m_pattern_;
protected:
- int32_t handleNext(int32_t position, UErrorCode &status);
- int32_t handlePrev(int32_t position, UErrorCode &status);
+ int32_t handleNext(int32_t position, UErrorCode &status) override;
+ int32_t handlePrev(int32_t position, UErrorCode &status) override;
TestSearch & operator=(const TestSearch &that);
private:
@@ -2347,10 +2347,10 @@ SearchIterator * TestSearch::safeClone() const
return new TestSearch(m_text_, m_breakiterator_, m_pattern_);
}
-UBool TestSearch::operator!=(const TestSearch &that) const
+bool TestSearch::operator!=(const TestSearch &that) const
{
if (SearchIterator::operator !=(that)) {
- return FALSE;
+ return false;
}
return m_offset_ != that.m_offset_ || m_pattern_ != that.m_pattern_;
}
@@ -2452,12 +2452,12 @@ void StringSearchTest::TestSubclass()
class StubSearchIterator:public SearchIterator{
public:
StubSearchIterator(){}
- virtual void setOffset(int32_t , UErrorCode &) {}
- virtual int32_t getOffset(void) const {return 0;}
- virtual SearchIterator* safeClone(void) const {return NULL;}
- virtual int32_t handleNext(int32_t , UErrorCode &){return 0;}
- virtual int32_t handlePrev(int32_t , UErrorCode &) {return 0;}
- virtual UClassID getDynamicClassID() const {
+ virtual void setOffset(int32_t , UErrorCode &) override {}
+ virtual int32_t getOffset(void) const override {return 0;}
+ virtual SearchIterator* safeClone(void) const override {return NULL;}
+ virtual int32_t handleNext(int32_t , UErrorCode &) override {return 0;}
+ virtual int32_t handlePrev(int32_t , UErrorCode &) override {return 0;}
+ virtual UClassID getDynamicClassID() const override {
static char classID = 0;
return (UClassID)&classID;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.h
index 2b436caf2b7..6a14e004cd1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.h
@@ -28,7 +28,7 @@ public:
virtual ~StringSearchTest();
void runIndexedTest(int32_t index, UBool exec, const char* &name,
- char* par = NULL);
+ char* par = NULL) override;
#if !UCONFIG_NO_BREAK_ITERATION
private:
RuleBasedCollator *m_en_us_;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.cpp
index 41483f5ceea..f81a0069dff 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.cpp
@@ -293,7 +293,7 @@ void SSearchTest::searchTest()
if ((foundMatch && expectedMatchStart<0) ||
(foundStart != expectedMatchStart) ||
(foundLimit != expectedMatchLimit)) {
- TEST_ASSERT(FALSE); // ouput generic error position
+ TEST_ASSERT(FALSE); // output generic error position
infoln("Found, expected match start = %d, %d \n"
"Found, expected match limit = %d, %d",
foundStart, expectedMatchStart, foundLimit, expectedMatchLimit);
@@ -322,7 +322,7 @@ void SSearchTest::searchTest()
if ((foundMatch && expectedMatchStart<0) ||
(foundStart != expectedMatchStart) ||
(foundLimit != expectedMatchLimit)) {
- TEST_ASSERT(FALSE); // ouput generic error position
+ TEST_ASSERT(FALSE); // output generic error position
infoln("Found, expected backwards match start = %d, %d \n"
"Found, expected backwards match limit = %d, %d",
foundStart, expectedMatchStart, foundLimit, expectedMatchLimit);
@@ -1017,7 +1017,7 @@ public:
SetMonkey(const USet *theSet);
~SetMonkey();
- virtual void append(UnicodeString &test, UnicodeString &alternate);
+ virtual void append(UnicodeString &test, UnicodeString &alternate) override;
private:
const USet *set;
@@ -1051,7 +1051,7 @@ public:
StringSetMonkey(const USet *theSet, UCollator *theCollator, CollData *theCollData);
~StringSetMonkey();
- void append(UnicodeString &testCase, UnicodeString &alternate);
+ void append(UnicodeString &testCase, UnicodeString &alternate) override;
private:
UnicodeString &generateAlternative(const UnicodeString &testCase, UnicodeString &alternate);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.h b/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.h
index 59d5b67ca25..bb252915805 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.h
@@ -29,7 +29,7 @@ public:
SSearchTest();
virtual ~SSearchTest();
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* params = NULL );
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* params = NULL ) override;
#if !UCONFIG_NO_BREAK_ITERATION
virtual void searchTest();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp
index ab12819716a..b33c769d9d6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/static_unisets_test.cpp
@@ -16,7 +16,7 @@ class StaticUnicodeSetsTest : public IntlTest {
void testSetCoverage();
void testNonEmpty();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
private:
void assertInSet(const UnicodeString& localeName, const UnicodeString &setName,
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
index 4154558e5c0..006bcd64ed3 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
@@ -41,7 +41,7 @@ public:
StringCaseTest();
virtual ~StringCaseTest();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
void TestCaseConversion();
@@ -788,7 +788,7 @@ StringCaseTest::assertGreekUpper(const char16_t *s, const char16_t *expected) {
void
StringCaseTest::TestGreekUpper() {
- // http://bugs.icu-project.org/trac/ticket/5456
+ // https://unicode-org.atlassian.net/browse/ICU-5456
assertGreekUpper(u"άδικος, κείμενο, ίριδα", u"ΑΔΙΚΟΣ, ΚΕΙΜΕΝΟ, ΙΡΙΔΑ");
// https://bugzilla.mozilla.org/show_bug.cgi?id=307039
// https://bug307039.bmoattachments.org/attachment.cgi?id=194893
@@ -1030,7 +1030,7 @@ void StringCaseTest::TestCopyMoveEdits() {
TestUtility::checkEqualEdits(*this, u"c = b", b, c, errorCode);
// std::move trouble on these platforms.
- // See https://ssl.icu-project.org/trac/ticket/13393
+ // See https://unicode-org.atlassian.net/browse/ICU-13393
#if !(U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390)
// move constructor empties object with heap array
Edits d(std::move(a));
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/string_segment_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/string_segment_test.cpp
index 0548d9ad928..1ba025623cf 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/string_segment_test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/string_segment_test.cpp
@@ -16,7 +16,7 @@ class StringSegmentTest : public IntlTest {
void testGetCodePoint();
void testCommonPrefixLength();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0) override;
};
static const char16_t* SAMPLE_STRING = u"📻 radio 📻";
@@ -82,7 +82,7 @@ void StringSegmentTest::testGetCodePoint() {
StringSegment segment(sampleString, false);
assertEquals("Double-width code point", 0x1F4FB, segment.getCodePoint());
segment.setLength(1);
- assertEquals("Inalid A", -1, segment.getCodePoint());
+ assertEquals("Invalid A", -1, segment.getCodePoint());
segment.resetLength();
segment.adjustOffset(1);
assertEquals("Invalid B", -1, segment.getCodePoint());
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
index 043355ff767..91d0d4d967c 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
@@ -20,6 +20,7 @@
#include <cstddef>
#include <string.h>
+#include <limits>
#include "unicode/utypes.h"
#include "unicode/putil.h"
@@ -255,6 +256,7 @@ void StringTest::runIndexedTest(int32_t index, UBool exec, const char *&name, ch
TESTCASE_AUTO(TestStringByteSinkAppendU8);
TESTCASE_AUTO(TestCharString);
TESTCASE_AUTO(TestCStr);
+ TESTCASE_AUTO(TestCharStrAppendNumber);
TESTCASE_AUTO(Testctou);
TESTCASE_AUTO_END;
}
@@ -573,14 +575,14 @@ StringTest::TestStringPieceU8() {
class SimpleByteSink : public ByteSink {
public:
SimpleByteSink(char *outbuf) : fOutbuf(outbuf), fLength(0) {}
- virtual void Append(const char *bytes, int32_t n) {
+ virtual void Append(const char *bytes, int32_t n) override {
if(fOutbuf != bytes) {
memcpy(fOutbuf, bytes, n);
}
fOutbuf += n;
fLength += n;
}
- virtual void Flush() { Append("z", 1); }
+ virtual void Flush() override { Append("z", 1); }
int32_t length() { return fLength; }
private:
char *fOutbuf;
@@ -842,6 +844,36 @@ StringTest::TestCStr() {
}
}
+void StringTest::TestCharStrAppendNumber() {
+ IcuTestErrorCode errorCode(*this, "TestCharStrAppendNumber()");
+
+ CharString testString;
+ testString.appendNumber(1, errorCode);
+ assertEquals("TestAppendNumber 1", "1", testString.data());
+
+ testString.clear();
+ testString.appendNumber(-1, errorCode);
+ assertEquals("TestAppendNumber -1", "-1", testString.data());
+
+ testString.clear();
+ testString.appendNumber(12345, errorCode);
+ assertEquals("TestAppendNumber 12345", "12345", testString.data());
+ testString.appendNumber(123, errorCode);
+ assertEquals("TestAppendNumber 12345 and then 123", "12345123", testString.data());
+
+ testString.clear();
+ testString.appendNumber(std::numeric_limits<int32_t>::max(), errorCode);
+ assertEquals("TestAppendNumber when appending the biggest int32", "2147483647", testString.data());
+
+ testString.clear();
+ testString.appendNumber(std::numeric_limits<int32_t>::min(), errorCode);
+ assertEquals("TestAppendNumber when appending the smallest int32", "-2147483648", testString.data());
+
+ testString.clear();
+ testString.appendNumber(0, errorCode);
+ assertEquals("TestAppendNumber when appending zero", "0", testString.data());
+}
+
void
StringTest::Testctou() {
const char *cs = "Fa\\u0127mu";
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
index 2a1b98804f3..fa022268010 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
@@ -30,7 +30,7 @@ public:
StringTest() {}
virtual ~StringTest();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
private:
void TestEndian();
@@ -57,6 +57,7 @@ private:
void TestSTLCompatibility();
void TestCharString();
void TestCStr();
+ void TestCharStrAppendNumber();
void Testctou();
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.cpp
index 8d46c68f37f..a8672c232d8 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.cpp
@@ -286,7 +286,7 @@ public:
delete[] ids;
}
- virtual Collator* createCollator(const Locale& loc) {
+ virtual Collator* createCollator(const Locale& loc) override {
const CollatorInfo* ci = getInfo(loc);
if (ci) {
return ci->collator->clone();
@@ -296,7 +296,7 @@ public:
virtual UnicodeString& getDisplayName(const Locale& objectLocale,
const Locale& displayLocale,
- UnicodeString& result)
+ UnicodeString& result) override
{
const CollatorInfo* ci = getInfo(objectLocale);
if (ci) {
@@ -307,7 +307,7 @@ public:
return result;
}
- const UnicodeString* getSupportedIDs(int32_t& _count, UErrorCode& status) {
+ const UnicodeString* getSupportedIDs(int32_t& _count, UErrorCode& status) override {
if (U_SUCCESS(status)) {
if (!ids) {
ids = new UnicodeString[count];
@@ -328,7 +328,7 @@ public:
return NULL;
}
- virtual inline UClassID getDynamicClassID() const {
+ virtual inline UClassID getDynamicClassID() const override {
return (UClassID)&gClassID;
}
@@ -560,7 +560,9 @@ static const int32_t KW_COUNT = UPRV_LENGTHOF(KW);
static const char* KWVAL[] = {
"phonebook",
- "stroke"
+ "stroke",
+ "emoji",
+ "eor"
};
static const int32_t KWVAL_COUNT = UPRV_LENGTHOF(KWVAL);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.h
index 1cae2b67e88..893cff99852 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.h
@@ -24,7 +24,7 @@ class StringEnumeration;
class CollationServiceTest: public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par = NULL */);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par = NULL */) override;
void TestRegister(void);
void TestRegisterFactory(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.cpp
index 89526b92461..764ff65d763 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.cpp
@@ -339,7 +339,7 @@ TestChoiceFormat::TestComplexExample( void )
const char* testPattern = "0#none|1#one|2#many";
ChoiceFormat form_pat( testPattern, status );
- if (!chkstatus( status, "*** ChoiceFormat contructor( newPattern, status)" )) {
+ if (!chkstatus( status, "*** ChoiceFormat constructor( newPattern, status)" )) {
delete fileform;
delete filenumform;
delete pattform;
@@ -348,9 +348,9 @@ TestChoiceFormat::TestComplexExample( void )
form_pat.toPattern( res1 );
if (res1 == "0#none|1#one|2#many") {
- it_logln("ChoiceFormat contructor( newPattern, status) tested");
+ it_logln("ChoiceFormat constructor( newPattern, status) tested");
}else{
- it_errln("*** ChoiceFormat contructor( newPattern, status) or toPattern result!");
+ it_errln("*** ChoiceFormat constructor( newPattern, status) or toPattern result!");
}
double d_a2[] = { 3.0, 4.0 };
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.h b/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.h
index 057971c3b29..775b22b47c9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.h
@@ -50,9 +50,9 @@ class TestChoiceFormat: public IntlTest {
double v2, const char* str2,
double v3, const char* str3);
/**
- * runs tests in local funtions:
+ * runs tests in local functions:
**/
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
};
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/testidn.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/testidn.cpp
index 29ac0b2aae3..bd4f9e8585a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/testidn.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/testidn.cpp
@@ -316,7 +316,7 @@ testAllCodepoints(TestIDNA& test){
}
}
- test.logln("Number of Unassinged code points : %i \n",unassigned);
+ test.logln("Number of Unassigned code points : %i \n",unassigned);
test.logln("Number of Prohibited code points : %i \n",prohibited);
test.logln("Number of Mapped code points : %i \n",mapped);
test.logln("Number of Mapped with NFKC code points : %i \n",mappedWithNorm);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/testidna.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/testidna.cpp
index 4b4b2d410b8..e1490b1e8eb 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/testidna.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/testidna.cpp
@@ -228,7 +228,7 @@ static const char *domainNames[] = {
//"www.\\u0021.com",
//"www.\\u0024.com",
//"\\u003f",
- // These yeild U_IDNA_PROHIBITED_ERROR
+ // These yield U_IDNA_PROHIBITED_ERROR
//"\\u00CF\\u0082.com",
//"\\u00CE\\u00B2\\u00C3\\u009Fss.com",
//"\\u00E2\\u0098\\u00BA.com",
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/testidna.h b/Build/source/libs/icu/icu-src/source/test/intltest/testidna.h
index 676d2e26600..1d72f658f2d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/testidna.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/testidna.h
@@ -52,7 +52,7 @@ class NamePrepTransform;
*/
class TestIDNA : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
void TestDataFile();
void TestToASCII();
void TestToUnicode();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.cpp
index 427eb10f56b..d7a00b27d2a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.cpp
@@ -60,7 +60,7 @@ void test_ParsePosition( void )
pp3 = 5;
ParsePosition pp4( pp3 );
if ((pp2 != pp3) && (pp3 == pp4)) {
- it_logln("PP copy contructor, operator== and operator != tested.");
+ it_logln("PP copy constructor, operator== and operator != tested.");
}else{
it_errln("*** PP operator== or operator != result");
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.h b/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.h
index c058c951a4a..518c684bab5 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.h
@@ -18,12 +18,12 @@
class TestFormatSmallClasses: public IntlTest {
/**
* runs tests in 4 local routines,
- * performs test for API and funtionalty of 3 smaller format classes:
+ * performs test for API and functionality of 3 smaller format classes:
* ParsePosition in test_ParsePosition(),
* FieldPosition in test_FieldPosition(),
* Formattable in test_Formattable().
**/
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
};
#endif
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.cpp
index 077487aed17..46cc90574e4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.cpp
@@ -222,7 +222,7 @@ void CollationThaiTest::TestCornerCases(void) {
"\\u0e01\\u0e32", "=", "\\u0e01\\u0e32-",
"\\u0e01\\u0e32-", "<", "\\u0e01\\u0e32\\u0e01\\u0e32",
- // Doubler follows an indentical word without the doubler
+ // Doubler follows an identical word without the doubler
"\\u0e01\\u0e32", "=", "\\u0e01\\u0e32\\u0e46",
"\\u0e01\\u0e32\\u0e46", "<", "\\u0e01\\u0e32\\u0e01\\u0e32",
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.h
index ea7e1c791b9..aaba12a9b57 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.h
@@ -27,7 +27,7 @@ public:
CollationThaiTest();
virtual ~CollationThaiTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.cpp
index 335bcf07cad..e55aa8fbe37 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.cpp
@@ -1462,7 +1462,7 @@ void TestMessageFormat::testCopyConstructor2() {
}
/**
- * Verify that MessageFormat accomodates more than 10 arguments and
+ * Verify that MessageFormat accommodates more than 10 arguments and
* more than 10 subformats.
*/
void TestMessageFormat::TestUnlimitedArgsAndSubformats() {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.h b/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.h
index dd2153650ab..500560c5c2a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.h
@@ -22,7 +22,7 @@
*/
class TestMessageFormat: public IntlTest {
public:
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
/**
* regression test for a specific bug regarding ChoiceFormat boundaries
@@ -83,7 +83,7 @@ public:
UnicodeString pattern ,Locale locale , UErrorCode& err, char* errMsg);
/**
- * Verify that MessageFormat accomodates more than 10 arguments
+ * Verify that MessageFormat accommodates more than 10 arguments
* and more than 10 subformats.
*/
void TestUnlimitedArgsAndSubformats();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/transapi.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/transapi.cpp
index 4b59ecfde49..4420da2414f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/transapi.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/transapi.cpp
@@ -620,6 +620,9 @@ void TransliteratorAPITest::TestNullTransliterator(){
UErrorCode status=U_ZERO_ERROR;
UnicodeString s("Transliterate using null transliterator");
Transliterator *nullTrans=Transliterator::createInstance("Any-Null", UTRANS_FORWARD, status);
+ if (!assertSuccess(WHERE, status)) {
+ return;
+ }
int32_t transLimit;
int32_t start=0;
int32_t limit=s.length();
@@ -711,11 +714,11 @@ int gTestFilter3ClassID = 0;
* Used by TestFiltering().
*/
class TestFilter1 : public UnicodeFilter {
- UClassID getDynamicClassID()const { return &gTestFilter1ClassID; }
- virtual TestFilter1* clone() const {
+ UClassID getDynamicClassID()const override { return &gTestFilter1ClassID; }
+ virtual TestFilter1* clone() const override {
return new TestFilter1(*this);
}
- virtual UBool contains(UChar32 c) const {
+ virtual UBool contains(UChar32 c) const override {
if(c==0x63 || c==0x61 || c==0x43 || c==0x41)
return FALSE;
else
@@ -723,20 +726,20 @@ class TestFilter1 : public UnicodeFilter {
}
// Stubs
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool /*escapeUnprintable*/) const {
+ UBool /*escapeUnprintable*/) const override {
return result;
}
- virtual UBool matchesIndexValue(uint8_t /*v*/) const {
+ virtual UBool matchesIndexValue(uint8_t /*v*/) const override {
return FALSE;
}
- virtual void addMatchSetTo(UnicodeSet& /*toUnionTo*/) const {}
+ virtual void addMatchSetTo(UnicodeSet& /*toUnionTo*/) const override {}
};
class TestFilter2 : public UnicodeFilter {
- UClassID getDynamicClassID()const { return &gTestFilter2ClassID; }
- virtual TestFilter2* clone() const {
+ UClassID getDynamicClassID() const override { return &gTestFilter2ClassID; }
+ virtual TestFilter2* clone() const override {
return new TestFilter2(*this);
}
- virtual UBool contains(UChar32 c) const {
+ virtual UBool contains(UChar32 c) const override {
if(c==0x65 || c==0x6c)
return FALSE;
else
@@ -744,20 +747,20 @@ class TestFilter2 : public UnicodeFilter {
}
// Stubs
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool /*escapeUnprintable*/) const {
+ UBool /*escapeUnprintable*/) const override {
return result;
}
- virtual UBool matchesIndexValue(uint8_t /*v*/) const {
+ virtual UBool matchesIndexValue(uint8_t /*v*/) const override {
return FALSE;
}
- virtual void addMatchSetTo(UnicodeSet& /*toUnionTo*/) const {}
+ virtual void addMatchSetTo(UnicodeSet& /*toUnionTo*/) const override {}
};
class TestFilter3 : public UnicodeFilter {
- UClassID getDynamicClassID()const { return &gTestFilter3ClassID; }
- virtual TestFilter3* clone() const {
+ UClassID getDynamicClassID() const override { return &gTestFilter3ClassID; }
+ virtual TestFilter3* clone() const override {
return new TestFilter3(*this);
}
- virtual UBool contains(UChar32 c) const {
+ virtual UBool contains(UChar32 c) const override {
if(c==0x6f || c==0x77)
return FALSE;
else
@@ -765,13 +768,13 @@ class TestFilter3 : public UnicodeFilter {
}
// Stubs
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool /*escapeUnprintable*/) const {
+ UBool /*escapeUnprintable*/) const override {
return result;
}
- virtual UBool matchesIndexValue(uint8_t /*v*/) const {
+ virtual UBool matchesIndexValue(uint8_t /*v*/) const override {
return FALSE;
}
- virtual void addMatchSetTo(UnicodeSet& /*toUnionTo*/) const {}
+ virtual void addMatchSetTo(UnicodeSet& /*toUnionTo*/) const override {}
};
@@ -972,10 +975,10 @@ void TransliteratorAPITest::callEverything(const Transliterator *tr, int line) {
static const int MyUnicodeFunctorTestClassID = 0;
class MyUnicodeFunctorTestClass : public UnicodeFunctor {
public:
- virtual UnicodeFunctor* clone() const {return NULL;}
+ virtual UnicodeFunctor* clone() const override {return NULL;}
static UClassID getStaticClassID(void) {return (UClassID)&MyUnicodeFunctorTestClassID;}
- virtual UClassID getDynamicClassID(void) const {return getStaticClassID();}
- virtual void setData(const TransliterationRuleData*) {}
+ virtual UClassID getDynamicClassID(void) const override {return getStaticClassID();}
+ virtual void setData(const TransliterationRuleData*) override {}
};
void TransliteratorAPITest::TestUnicodeFunctor() {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/transapi.h b/Build/source/libs/icu/icu-src/source/test/intltest/transapi.h
index 801c8f171da..9d8ff97496d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/transapi.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/transapi.h
@@ -26,7 +26,7 @@
*/
class TransliteratorAPITest : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
/*Tests the function getDisplayName() */
void TestGetDisplayName(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/transrt.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/transrt.cpp
index c1c30d3adcd..9113a7b3d52 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/transrt.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/transrt.cpp
@@ -128,7 +128,7 @@ class LegalJamo : public Legal {
public:
LegalJamo() {}
virtual ~LegalJamo() {}
- virtual UBool is(const UnicodeString& sourceString) const;
+ virtual UBool is(const UnicodeString& sourceString) const override;
int getType(UChar c) const;
};
@@ -172,7 +172,7 @@ public:
LegalGreek(UBool _full) { full = _full; }
virtual ~LegalGreek() {}
- virtual UBool is(const UnicodeString& sourceString) const;
+ virtual UBool is(const UnicodeString& sourceString) const override;
static UBool isVowel(UChar c);
@@ -262,68 +262,42 @@ UBool LegalGreek::isRho(UChar c) {
return FALSE;
}
-// AbbreviatedUnicodeSetIterator Interface ---------------------------------------------
-//
-// Iterate over a UnicodeSet, only returning a sampling of the contained code points.
-// density is the approximate total number of code points to returned for the entire set.
-//
+namespace {
-class AbbreviatedUnicodeSetIterator : public UnicodeSetIterator {
-public :
-
- AbbreviatedUnicodeSetIterator();
- virtual ~AbbreviatedUnicodeSetIterator();
- void reset(UnicodeSet& set, UBool abb = FALSE, int32_t density = 100);
-
- /**
- * ICU "poor man's RTTI", returns a UClassID for this class.
- */
- static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
-
- /**
- * ICU "poor man's RTTI", returns a UClassID for the actual class.
- */
- virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
-
-private :
- UBool abbreviated;
- int32_t perRange; // The maximum number of code points to be returned from each range
- virtual void loadRange(int32_t range);
-
- /**
- * The address of this static class variable serves as this class's ID
- * for ICU "poor man's RTTI".
- */
- static const char fgClassID;
-};
-
-// AbbreviatedUnicodeSetIterator Implementation ---------------------------------------
-
-const char AbbreviatedUnicodeSetIterator::fgClassID=0;
-
-AbbreviatedUnicodeSetIterator::AbbreviatedUnicodeSetIterator() :
- UnicodeSetIterator(), abbreviated(FALSE) {
-}
-
-AbbreviatedUnicodeSetIterator::~AbbreviatedUnicodeSetIterator() {
-}
-
-void AbbreviatedUnicodeSetIterator::reset(UnicodeSet& newSet, UBool abb, int32_t density) {
- UnicodeSetIterator::reset(newSet);
- abbreviated = abb;
- perRange = newSet.getRangeCount();
+/**
+ * If abbreviated=true, returns a set which only a sampling of the original code points.
+ * density is the approximate total number of code points to returned for the entire set.
+ */
+const UnicodeSet &abbreviateSet(const UnicodeSet &set, bool abbreviated, int density,
+ UnicodeSet &copy) {
+ if (!abbreviated) {
+ return set;
+ }
+ int32_t rangeCount = set.getRangeCount();
+ int32_t perRange = rangeCount;
if (perRange != 0) {
perRange = density / perRange;
}
-}
-
-void AbbreviatedUnicodeSetIterator::loadRange(int32_t myRange) {
- UnicodeSetIterator::loadRange(myRange);
- if (abbreviated && (endElement > nextElement + perRange)) {
- endElement = nextElement + perRange;
+ const UnicodeSet *p = &set;
+ bool unchanged = true;
+ for (int32_t i = 0; i < rangeCount; ++i) {
+ int32_t start = set.getRangeStart(i);
+ int32_t end = set.getRangeEnd(i);
+ int32_t newEnd = start + perRange;
+ if (end > newEnd) {
+ if (unchanged) {
+ copy = set;
+ p = &copy;
+ unchanged = false;
+ }
+ copy.remove(newEnd + 1, end);
+ }
}
+ return *p;
}
+} // namespace
+
//--------------------------------------------------------------------
// RTTest Interface
//--------------------------------------------------------------------
@@ -587,8 +561,8 @@ void RTTest::test2(UBool quickRt, int32_t density) {
return;
}
- AbbreviatedUnicodeSetIterator usi;
- AbbreviatedUnicodeSetIterator usi2;
+ UnicodeSetIterator usi;
+ UnicodeSetIterator usi2;
parent->logln("Checking that at least one irrelevant character is not NFC'ed");
// string is from NFC_NO in the UCD
@@ -702,13 +676,14 @@ void RTTest::test2(UBool quickRt, int32_t density) {
UnicodeSet sourceRangeMinusFailures(sourceRange);
sourceRangeMinusFailures.removeAll(failSourceTarg);
-
- usi.reset(sourceRangeMinusFailures, quickRt, density);
+
+ UnicodeSet copy, copy2;
+ usi.reset(abbreviateSet(sourceRangeMinusFailures, quickRt, density, copy));
for (;;) {
if (!usi.next() || usi.isString()) break;
UChar32 c = usi.getCodepoint();
- usi2.reset(sourceRangeMinusFailures, quickRt, density);
+ usi2.reset(abbreviateSet(sourceRangeMinusFailures, quickRt, density, copy2));
for (;;) {
if (!usi2.next() || usi2.isString()) break;
UChar32 d = usi2.getCodepoint();
@@ -816,7 +791,7 @@ void RTTest::test2(UBool quickRt, int32_t density) {
targetRangeMinusFailures.removeAll(failTargSource);
targetRangeMinusFailures.removeAll(failRound);
- usi.reset(targetRangeMinusFailures, quickRt, density);
+ usi.reset(abbreviateSet(targetRangeMinusFailures, quickRt, density, copy));
UnicodeString targ2;
UnicodeString reverse2;
UnicodeString targD;
@@ -830,7 +805,7 @@ void RTTest::test2(UBool quickRt, int32_t density) {
return;
}
- usi2.reset(targetRangeMinusFailures, quickRt, density);
+ usi2.reset(abbreviateSet(targetRangeMinusFailures, quickRt, density, copy2));
for (;;) {
if (!usi2.next() || usi2.isString())
break;
@@ -1224,7 +1199,7 @@ private:
public:
LegalHebrew(UErrorCode& error);
virtual ~LegalHebrew() {}
- virtual UBool is(const UnicodeString& sourceString) const;
+ virtual UBool is(const UnicodeString& sourceString) const override;
};
LegalHebrew::LegalHebrew(UErrorCode& error){
@@ -1287,7 +1262,7 @@ class LegalIndic :public Legal{
public:
LegalIndic();
- virtual UBool is(const UnicodeString& sourceString) const;
+ virtual UBool is(const UnicodeString& sourceString) const override;
virtual ~LegalIndic() {}
};
UBool LegalIndic::is(const UnicodeString& sourceString) const{
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/transrt.h b/Build/source/libs/icu/icu-src/source/test/intltest/transrt.h
index 03ed0bea194..26444c0d5bc 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/transrt.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/transrt.h
@@ -26,7 +26,7 @@
class TransliteratorRoundTripTest : public IntlTest {
void runIndexedTest(int32_t index, UBool exec, const char* &name,
- char* par=NULL);
+ char* par=NULL) override;
void TestKana(void);
void TestHiragana(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
index 8e7bcb09174..8a81b5b3377 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
@@ -305,7 +305,7 @@ void TransliteratorTest::TestSimpleRules(void) {
/* Example: rules 1. ab>x|y
* 2. yc>z
*
- * []|eabcd start - no match, copy e to tranlated buffer
+ * []|eabcd start - no match, copy e to translated buffer
* [e]|abcd match rule 1 - copy output & adjust cursor
* [ex|y]cd match rule 2 - copy output & adjust cursor
* [exz]|d no match, copy d to transliterated buffer
@@ -658,23 +658,23 @@ int gTestFilterClassID = 0;
* Used by TestFiltering().
*/
class TestFilter : public UnicodeFilter {
- virtual TestFilter* clone() const {
+ virtual TestFilter* clone() const override {
return new TestFilter(*this);
}
- virtual UBool contains(UChar32 c) const {
+ virtual UBool contains(UChar32 c) const override {
return c != (UChar)0x0063 /*c*/;
}
// Stubs
virtual UnicodeString& toPattern(UnicodeString& result,
- UBool /*escapeUnprintable*/) const {
+ UBool /*escapeUnprintable*/) const override {
return result;
}
- virtual UBool matchesIndexValue(uint8_t /*v*/) const {
+ virtual UBool matchesIndexValue(uint8_t /*v*/) const override {
return FALSE;
}
- virtual void addMatchSetTo(UnicodeSet& /*toUnionTo*/) const {}
+ virtual void addMatchSetTo(UnicodeSet& /*toUnionTo*/) const override {}
public:
- UClassID getDynamicClassID() const { return (UClassID)&gTestFilterClassID; }
+ UClassID getDynamicClassID() const override { return (UClassID)&gTestFilterClassID; }
};
/**
@@ -1688,7 +1688,7 @@ void TransliteratorTest::TestCompoundRBT(void) {
}
/**
- * Compound filter semantics were orginially not implemented
+ * Compound filter semantics were originally not implemented
* correctly. Originally, each component filter f(i) is replaced by
* f'(i) = f(i) && g, where g is the filter for the compound
* transliterator.
@@ -2026,15 +2026,15 @@ class TestTrans : public Transliterator {
public:
TestTrans(const UnicodeString& id) : Transliterator(id, 0) {
}
- virtual TestTrans* clone(void) const {
+ virtual TestTrans* clone(void) const override {
return new TestTrans(getID());
}
virtual void handleTransliterate(Replaceable& /*text*/, UTransPosition& offsets,
- UBool /*isIncremental*/) const
+ UBool /*isIncremental*/) const override
{
offsets.start = offsets.limit;
}
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
static UClassID U_EXPORT2 getStaticClassID();
};
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TestTrans)
@@ -3959,7 +3959,7 @@ void TransliteratorTest::TestAnyX(void) {
*/
void TransliteratorTest::TestAny(void) {
UErrorCode status = U_ZERO_ERROR;
- // Note: there is a lot of implict construction of UnicodeStrings from (char *) in
+ // Note: there is a lot of implicit construction of UnicodeStrings from (char *) in
// function call parameters going on in this test.
UnicodeSet alphabetic("[:alphabetic:]", status);
if (U_FAILURE(status)) {
@@ -4678,6 +4678,11 @@ void TransliteratorTest::TestHalfwidthFullwidth(void) {
*/
void TransliteratorTest::TestThai(void) {
#if !UCONFIG_NO_BREAK_ITERATION
+ // The expectations in this test heavily depends on the Thai dictionary.
+ // Therefore, we skip this test under the LSTM configuration.
+ if (skipDictionaryTest()) {
+ return;
+ }
UParseError parseError;
UErrorCode status = U_ZERO_ERROR;
Transliterator* tr = Transliterator::createInstance("Any-Latin", UTRANS_FORWARD, parseError, status);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h b/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
index 64246d4add7..2f35e4b0cda 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
@@ -31,7 +31,7 @@ public:
private:
void runIndexedTest(int32_t index, UBool exec, const char* &name,
- char* par=NULL);
+ char* par=NULL) override;
void TestInstantiation(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.h
index 1a8e6440edd..594f8510f40 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.h
@@ -29,7 +29,7 @@ public:
CollationTurkishTest();
virtual ~CollationTurkishTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// perform tests for turkish locale with strength PRIMARY
void TestPrimary(/* char* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.cpp
index 0f13b336e90..1fc921fc79a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.cpp
@@ -264,11 +264,11 @@ void TransliteratorErrorTest::TestRBTErrors() {
class StubTransliterator: public Transliterator{
public:
StubTransliterator(): Transliterator(UNICODE_STRING_SIMPLE("Any-Null"), 0) {}
- virtual void handleTransliterate(Replaceable& ,UTransPosition& offsets,UBool) const {
+ virtual void handleTransliterate(Replaceable& ,UTransPosition& offsets,UBool) const override {
offsets.start = offsets.limit;
}
- virtual UClassID getDynamicClassID() const{
+ virtual UClassID getDynamicClassID() const override {
static char classID = 0;
return (UClassID)&classID;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.h b/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.h
index 85e5e808b2b..eade7503bcc 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.h
@@ -32,7 +32,7 @@
*/
class TransliteratorErrorTest : public IntlTest {
public:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
/*Tests the returned error codes on all the APIs according to the API documentation. */
void TestTransliteratorErrors(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.h b/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.h
index 173e609c829..fe883194c72 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.h
@@ -23,7 +23,7 @@
class IntlTestCollator: public IntlTest {
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
protected:
struct Order
{
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.h b/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.h
index df7cfbd0a42..95b8dd69242 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.h
@@ -21,7 +21,7 @@
* Performs some tests in many variations on DateFormat
**/
class IntlTestDateFormat: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp
index 18a1ae863c1..526d88a3a79 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp
@@ -281,7 +281,7 @@ void IntlTestDecimalFormatSymbols::testDigitSymbols() {
symbols.setSymbol(key, UnicodeString(osmanyaDigitStrings[i]), FALSE);
}
// NOTE: in ICU4J, the calculation of codePointZero is smarter;
- // in ICU4C, it is more conservative and is only set if propogateDigits is true.
+ // in ICU4C, it is more conservative and is only set if propagateDigits is true.
if (-1 != symbols.getCodePointZero()) {
errln("ERROR: Code point zero be invalid");
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.h b/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.h
index 1922941b847..79eccfc0f36 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.h
@@ -20,7 +20,7 @@
* Tests for DecimalFormatSymbols
**/
class IntlTestDecimalFormatSymbols: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.cpp
index c1efcc2ad85..76440c30cd5 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.cpp
@@ -149,6 +149,7 @@ void IntlTestDateFormatSymbols::TestGetSetSpecificItems()
dataerrln("ERROR: Couldn't create English DateFormatSymbols " + (UnicodeString)u_errorName(status));
return;
}
+ symbol->operator=(*symbol); // self-assignment should be a no-op
int32_t cntFmtAbbrev, cntFmtShort, cntStdAloneShort;
const UnicodeString * wdFmtAbbrev = symbol->getWeekdays(cntFmtAbbrev,DateFormatSymbols::FORMAT,DateFormatSymbols::ABBREVIATED);
const UnicodeString * wdFmtShort = symbol->getWeekdays(cntFmtShort,DateFormatSymbols::FORMAT,DateFormatSymbols::SHORT);
@@ -347,6 +348,13 @@ void IntlTestDateFormatSymbols::TestSymbols(/* char *par */)
errln("ERROR: setQuarters(FORMAT, ABBREVIATED) failed");
}
+ const UnicodeString *narrowQuarters = en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW);
+ fr2.setQuarters(narrowQuarters, count, DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW);
+ if( *en.getQuarters(count,DateFormatSymbols::FORMAT, DateFormatSymbols::NARROW) !=
+ *fr2.getQuarters(count,DateFormatSymbols::FORMAT ,DateFormatSymbols::NARROW )) {
+ errln("ERROR: setQuarters(FORMAT, NARROW) failed");
+ }
+
const UnicodeString *standaloneWideQuarters = en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE);
fr.setQuarters(standaloneWideQuarters, count, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE);
if( *en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE) !=
@@ -361,6 +369,13 @@ void IntlTestDateFormatSymbols::TestSymbols(/* char *par */)
errln("ERROR: setQuarters(STANDALONE, ABBREVIATED) failed");
}
+ const UnicodeString *standaloneNarrowQuarters = en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW);
+ fr2.setQuarters(standaloneNarrowQuarters, count, DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW);
+ if( *en.getQuarters(count,DateFormatSymbols::STANDALONE, DateFormatSymbols::NARROW) !=
+ *fr2.getQuarters(count,DateFormatSymbols::STANDALONE ,DateFormatSymbols::NARROW )) {
+ errln("ERROR: setQuarters(STANDALONE, NARROW) failed");
+ }
+
const UnicodeString *ampms = en.getAmPmStrings(count);
fr.setAmPmStrings(ampms, count);
if( *en.getAmPmStrings(count) != *fr.getAmPmStrings(count)) {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.h b/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.h
index ea9afc70a92..2be4e33ec0b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.h
@@ -19,7 +19,7 @@
* Tests for DateFormatSymbols
**/
class IntlTestDateFormatSymbols: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
/**
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.cpp
index 98e04869d85..dd8b725965f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.cpp
@@ -96,8 +96,9 @@ class TestThreadsThread : public SimpleThread
{
public:
TestThreadsThread(char* whatToChange) { fWhatToChange = whatToChange; }
- virtual void run() { Mutex m;
- *fWhatToChange = '*';
+ virtual void run() override {
+ Mutex m;
+ *fWhatToChange = '*';
}
private:
char *fWhatToChange;
@@ -159,7 +160,7 @@ class TestArabicShapeThreads : public SimpleThread
{
public:
TestArabicShapeThreads() {}
- virtual void run() { doTailTest(); }
+ virtual void run() override { doTailTest(); }
private:
void doTailTest();
};
@@ -450,7 +451,7 @@ public:
}
- virtual void run()
+ virtual void run() override
{
fTraceInfo = 1;
LocalPointer<NumberFormat> percentFormatter;
@@ -738,7 +739,7 @@ public:
noLines = nl;
isAtLeastUCA62 = atLeastUCA62;
}
- virtual void run() {
+ virtual void run() override {
uint8_t sk1[1024], sk2[1024];
uint8_t *oldSk = NULL, *newSk = sk1;
int32_t oldLen = 0;
@@ -843,7 +844,7 @@ void MultithreadTest::TestCollators()
"INFO: Working with the stub file.\n"
"If you need the full conformance test, please\n"
"download the appropriate data files from:\n"
- "http://source.icu-project.org/repos/icu/tools/trunk/unicodetools/com/ibm/text/data/");
+ "https://github.com/unicode-org/cldr/tree/main/common/uca");
}
}
}
@@ -945,7 +946,7 @@ public:
}
- virtual void run()
+ virtual void run() override
{
fTraceInfo = 1;
int loopCount = 0;
@@ -1014,7 +1015,7 @@ class TxThread: public SimpleThread {
public:
TxThread() {}
~TxThread();
- void run();
+ void run() override;
};
TxThread::~TxThread() {}
@@ -1108,7 +1109,7 @@ const UCTMultiThreadItem *LocaleCacheKey<UCTMultiThreadItem>::createObject(
// until other have completed. Verifies that cache doesn't
// deadlock when a creation is slow.
- // Note that gObjectsCreated needs to be incremeneted from 0 to 1
+ // Note that gObjectsCreated needs to be incremented from 0 to 1
// early, to keep subsequent threads from entering this path.
gObjectsCreated = 1;
while (gObjectsCreated < 3) {
@@ -1147,7 +1148,7 @@ class UnifiedCacheThread: public SimpleThread {
const char *loc,
const char *loc2) : fCache(cache), fLoc(loc), fLoc2(loc2) {}
~UnifiedCacheThread() {}
- void run();
+ void run() override;
void exerciseByLocale(const Locale &);
const UnifiedCache *fCache;
Locale fLoc;
@@ -1257,7 +1258,7 @@ class BreakTranslitThread: public SimpleThread {
public:
BreakTranslitThread() {}
~BreakTranslitThread() {}
- void run();
+ void run() override;
};
void BreakTranslitThread::run() {
@@ -1306,7 +1307,7 @@ void MultithreadTest::TestBreakTranslit() {
class TestIncDecThread : public SimpleThread {
public:
TestIncDecThread() {}
- virtual void run();
+ virtual void run() override;
};
static u_atomic_int32_t gIncDecCounter;
@@ -1339,7 +1340,7 @@ static Calendar *gSharedCalendar = {};
class Test20104Thread : public SimpleThread {
public:
Test20104Thread() {}
- virtual void run();
+ virtual void run() override;
};
void Test20104Thread::run() {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.h b/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.h
index d3983cf33f8..7ac502a0389 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.h
@@ -24,7 +24,7 @@ public:
MultithreadTest();
virtual ~MultithreadTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
/**
* test that threads even work
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.h b/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.h
index d680d46de13..6b567b4a08d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.h
@@ -24,7 +24,7 @@
* NumberFormat.
*/
class IntlTestNumberFormat: public IntlTest {
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
private:
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.h b/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.h
index 43a4a8abcea..c0fddcf0da9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.h
@@ -17,7 +17,7 @@
**/
class PUtilTest : public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
// void testIEEEremainder(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
index e478872d53e..5c652e403f2 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
@@ -55,7 +55,8 @@ void BasicNormalizerTest::runIndexedTest(int32_t index, UBool exec,
TESTCASE_AUTO(TestCustomFCC);
#endif
TESTCASE_AUTO(TestFilteredNormalizer2Coverage);
- TESTCASE_AUTO(TestNormalizeUTF8WithEdits);
+ TESTCASE_AUTO(TestComposeUTF8WithEdits);
+ TESTCASE_AUTO(TestDecomposeUTF8WithEdits);
TESTCASE_AUTO(TestLowMappingToEmpty_D);
TESTCASE_AUTO(TestLowMappingToEmpty_FCD);
TESTCASE_AUTO(TestNormalizeIllFormedText);
@@ -1568,8 +1569,8 @@ BasicNormalizerTest::TestFilteredNormalizer2Coverage() {
}
void
-BasicNormalizerTest::TestNormalizeUTF8WithEdits() {
- IcuTestErrorCode errorCode(*this, "TestNormalizeUTF8WithEdits");
+BasicNormalizerTest::TestComposeUTF8WithEdits() {
+ IcuTestErrorCode errorCode(*this, "TestComposeUTF8WithEdits");
const Normalizer2 *nfkc_cf=Normalizer2::getNFKCCasefoldInstance(errorCode);
if(errorCode.errDataIfFailureAndReset("Normalizer2::getNFKCCasefoldInstance() call failed")) {
return;
@@ -1589,12 +1590,12 @@ BasicNormalizerTest::TestNormalizeUTF8WithEdits() {
{ TRUE, 2, 2 }, // Ä→ä
{ TRUE, 3, 2 }, // A\u0308→ä
{ TRUE, 7, 5 }, // A\u0308\u00ad\u0323→ạ\u0308 removes the soft hyphen
- { TRUE, 4, 5 }, // Ä\u0323→ ạ\u0308
+ { TRUE, 4, 5 }, // Ä\u0323→ạ\u0308
{ FALSE, 1, 1 }, // comma
{ TRUE, 2, 0 }, // U+00AD soft hyphen maps to empty
- { TRUE, 6, 3 }, // \u1100\u1161→ 가
- { TRUE, 6, 3 }, // 가\u11A8→ 각
- { TRUE, 6, 3 }, // 가\u3133→ 갃
+ { TRUE, 6, 3 }, // \u1100\u1161→가
+ { TRUE, 6, 3 }, // 가\u11A8→각
+ { TRUE, 6, 3 }, // 가\u3133→갃
{ FALSE, 2, 2 } // 2 spaces
};
assertTrue("normalizeUTF8 with Edits hasChanges", edits.hasChanges());
@@ -1635,12 +1636,12 @@ BasicNormalizerTest::TestNormalizeUTF8WithEdits() {
{ TRUE, 2, 2 }, // Ä→ä
{ FALSE, 4, 4 }, // A\u0308A
{ TRUE, 6, 4 }, // \u0308\u00ad\u0323→\u0323\u0308 removes the soft hyphen
- { TRUE, 4, 5 }, // Ä\u0323→ ạ\u0308
+ { TRUE, 4, 5 }, // Ä\u0323→ạ\u0308
{ FALSE, 1, 1 }, // comma
{ TRUE, 2, 0 }, // U+00AD soft hyphen maps to empty
- { TRUE, 6, 3 }, // \u1100\u1161→ 가
- { TRUE, 6, 3 }, // 가\u11A8→ 각
- { TRUE, 6, 3 }, // 가\u3133→ 갃
+ { TRUE, 6, 3 }, // \u1100\u1161→가
+ { TRUE, 6, 3 }, // 가\u11A8→각
+ { TRUE, 6, 3 }, // 가\u3133→갃
{ FALSE, 2, 2 } // 2 spaces
};
assertTrue("filtered normalizeUTF8 hasChanges", edits.hasChanges());
@@ -1671,6 +1672,72 @@ BasicNormalizerTest::TestNormalizeUTF8WithEdits() {
}
void
+BasicNormalizerTest::TestDecomposeUTF8WithEdits() {
+ IcuTestErrorCode errorCode(*this, "TestDecomposeUTF8WithEdits");
+ const Normalizer2 *nfkd_cf =
+ Normalizer2::getInstance(nullptr, "nfkc_cf", UNORM2_DECOMPOSE, errorCode);
+ if(errorCode.errDataIfFailureAndReset("Normalizer2::getInstance(nfkc_cf/decompose) call failed")) {
+ return;
+ }
+ static const StringPiece src =
+ u8" AÄA\u0308A\u0308\u00ad\u0323Ä\u0323,\u00ad\u1100\u1161가\u11A8가\u3133 ";
+ StringPiece expected =
+ u8" aa\u0308a\u0308a\u0323\u0308a\u0323\u0308,"
+ u8"\u1100\u1161\u1100\u1161\u11A8\u1100\u1161\u11AA ";
+ std::string result;
+ StringByteSink<std::string> sink(&result, static_cast<int32_t>(expected.length()));
+ Edits edits;
+ nfkd_cf->normalizeUTF8(0, src, sink, &edits, errorCode);
+ assertSuccess("normalizeUTF8 with Edits", errorCode.get());
+ assertEquals("normalizeUTF8 with Edits", expected.data(), result.c_str());
+ static const EditChange expectedChanges[] = {
+ { FALSE, 2, 2 }, // 2 spaces
+ { TRUE, 1, 1 }, // A→a
+ { TRUE, 2, 3 }, // Ä→a\u0308
+ { TRUE, 1, 1 }, // A→a
+ { FALSE, 2, 2 }, // \u0308→\u0308 unchanged
+ { TRUE, 1, 1 }, // A→a
+ { TRUE, 6, 4 }, // \u0308\u00ad\u0323→\u0323\u0308 removes the soft hyphen
+ { TRUE, 4, 5 }, // Ä\u0323→a\u0323\u0308
+ { FALSE, 1, 1 }, // comma
+ { TRUE, 2, 0 }, // U+00AD soft hyphen maps to empty
+ { FALSE, 6, 6 }, // \u1100\u1161 unchanged
+ { TRUE, 3, 6 }, // 가→\u1100\u1161
+ { FALSE, 3, 3 }, // \u11A8 unchanged
+ { TRUE, 3, 6 }, // 가→\u1100\u1161
+ { TRUE, 3, 3 }, // \u3133→\u11AA
+ { FALSE, 2, 2 } // 2 spaces
+ };
+ assertTrue("normalizeUTF8 with Edits hasChanges", edits.hasChanges());
+ assertEquals("normalizeUTF8 with Edits numberOfChanges", 10, edits.numberOfChanges());
+ TestUtility::checkEditsIter(*this, u"normalizeUTF8 with Edits",
+ edits.getFineIterator(), edits.getFineIterator(),
+ expectedChanges, UPRV_LENGTHOF(expectedChanges),
+ TRUE, errorCode);
+
+ assertFalse("isNormalizedUTF8(source)", nfkd_cf->isNormalizedUTF8(src, errorCode));
+ assertTrue("isNormalizedUTF8(normalized)", nfkd_cf->isNormalizedUTF8(result, errorCode));
+
+ // Omit unchanged text.
+ expected = u8"aa\u0308aa\u0323\u0308a\u0323\u0308\u1100\u1161\u1100\u1161\u11AA";
+ result.clear();
+ edits.reset();
+ nfkd_cf->normalizeUTF8(U_OMIT_UNCHANGED_TEXT, src, sink, &edits, errorCode);
+ assertSuccess("normalizeUTF8 omit unchanged", errorCode.get());
+ assertEquals("normalizeUTF8 omit unchanged", expected.data(), result.c_str());
+ assertTrue("normalizeUTF8 omit unchanged hasChanges", edits.hasChanges());
+ assertEquals("normalizeUTF8 omit unchanged numberOfChanges", 10, edits.numberOfChanges());
+ TestUtility::checkEditsIter(*this, u"normalizeUTF8 omit unchanged",
+ edits.getFineIterator(), edits.getFineIterator(),
+ expectedChanges, UPRV_LENGTHOF(expectedChanges),
+ TRUE, errorCode);
+
+ // Not testing FilteredNormalizer2:
+ // The code there is the same for all normalization modes, and
+ // TestComposeUTF8WithEdits() covers it well.
+}
+
+void
BasicNormalizerTest::TestLowMappingToEmpty_D() {
IcuTestErrorCode errorCode(*this, "TestLowMappingToEmpty_D");
const Normalizer2 *n2 = Normalizer2::getInstance(
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.h b/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.h
index db7edfbdf44..a35ccd28920 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.h
@@ -25,7 +25,7 @@ public:
BasicNormalizerTest();
virtual ~BasicNormalizerTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
void TestHangulCompose(void);
void TestHangulDecomp(void);
@@ -47,7 +47,8 @@ public:
void TestCustomComp();
void TestCustomFCC();
void TestFilteredNormalizer2Coverage();
- void TestNormalizeUTF8WithEdits();
+ void TestComposeUTF8WithEdits();
+ void TestDecomposeUTF8WithEdits();
void TestLowMappingToEmpty_D();
void TestLowMappingToEmpty_FCD();
void TestNormalizeIllFormedText();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tufmtts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tufmtts.cpp
index 3a0d7b65f87..db082ac736f 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tufmtts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tufmtts.cpp
@@ -25,7 +25,7 @@
#endif
class TimeUnitTest : public IntlTest {
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/ ) {
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/ ) override {
if (exec) logln("TestSuite TimeUnitTest");
TESTCASE_AUTO_BEGIN;
TESTCASE_AUTO(testBasic);
@@ -60,10 +60,10 @@ public:
* Performs tests for Greek
* This tests that if the plural count listed in time unit format does not
* match those in the plural rules for the locale, those plural count in
- * time unit format will be ingored and subsequently, fall back will kick in
+ * time unit format will be ignored and subsequently, fall back will kick in
* which is tested above.
* Without data sanitization, setNumberFormat() would crash.
- * As of CLDR shiped in ICU4.8, Greek is one such language.
+ * As of CLDR shipped in ICU4.8, Greek is one such language.
*/
void testGreekWithSanitization();
@@ -315,8 +315,9 @@ void TimeUnitTest::testGreekWithFallback() {
const UChar oneSecond[] = {0x0031, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x03b5, 0x03c1, 0x03cc, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03bf, 0};
const UChar oneSecondShort[] = {0x0031, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x002e, 0};
const UChar oneMinute[] = {0x0031, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03cc, 0};
- const UChar oneMinuteShort[] = {0x0031, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x002e, 0};
+ const UChar oneMinuteShort[] = {0x0031, 0x0020, 0x03bb, 0x002e, 0};
const UChar oneHour[] = {0x0031, 0x0020, 0x03ce, 0x03c1, 0x03b1, 0};
+ const UChar oneHourShort[] = {0x0031, 0x0020, 0x03ce, 0x002e, 0};
const UChar oneDay[] = {0x0031, 0x0020, 0x03b7, 0x03bc, 0x03ad, 0x03c1, 0x03b1, 0};
const UChar oneMonth[] = {0x0031, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x03b1, 0x03c2, 0};
const UChar oneMonthShort[] = {0x0031, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x002e, 0};
@@ -325,9 +326,9 @@ void TimeUnitTest::testGreekWithFallback() {
const UChar sevenSeconds[] = {0x0037, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x03b5, 0x03c1, 0x03cc, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03b1, 0};
const UChar sevenSecondsShort[] = {0x0037, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x002e, 0};
const UChar sevenMinutes[] = {0x0037, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03ac, 0};
- const UChar sevenMinutesShort[] = {0x0037, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x002e, 0};
+ const UChar sevenMinutesShort[] = {0x0037, 0x0020, 0x03bb, 0x002e, 0};
const UChar sevenHours[] = {0x0037, 0x0020, 0x03ce, 0x03c1, 0x03b5, 0x03c2, 0};
- const UChar sevenHoursShort[] = {0x0037, 0x0020, 0x03ce, 0x03c1, 0x002e, 0};
+ const UChar sevenHoursShort[] = {0x0037, 0x0020, 0x03ce, 0x002e, 0};
const UChar sevenDays[] = {0x0037, 0x0020, 0x03b7, 0x03bc, 0x03ad, 0x03c1, 0x03b5, 0x03c2, 0};
const UChar sevenMonths[] = {0x0037, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x03b5, 0x3c2, 0};
const UChar sevenMonthsShort[] = {0x0037, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x002e, 0};
@@ -339,6 +340,7 @@ void TimeUnitTest::testGreekWithFallback() {
const UnicodeString oneMinuteStr(oneMinute);
const UnicodeString oneMinuteShortStr(oneMinuteShort);
const UnicodeString oneHourStr(oneHour);
+ const UnicodeString oneHourShortStr(oneHourShort);
const UnicodeString oneDayStr(oneDay);
const UnicodeString oneMonthStr(oneMonth);
const UnicodeString oneMonthShortStr(oneMonthShort);
@@ -358,12 +360,12 @@ void TimeUnitTest::testGreekWithFallback() {
const UnicodeString expected[] = {
oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
- oneSecondShortStr, oneMinuteShortStr, oneHourStr, oneDayStr, oneMonthShortStr, oneYearShortStr,
+ oneSecondShortStr, oneMinuteShortStr, oneHourShortStr, oneDayStr, oneMonthShortStr, oneYearShortStr,
sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr,
sevenSecondsShortStr, sevenMinutesShortStr, sevenHoursShortStr, sevenDaysStr, sevenMonthsShortStr, sevenYearsShortStr,
oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
- oneSecondShortStr, oneMinuteShortStr, oneHourStr, oneDayStr, oneMonthShortStr, oneYearShortStr,
+ oneSecondShortStr, oneMinuteShortStr, oneHourShortStr, oneDayStr, oneMonthShortStr, oneYearShortStr,
sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr,
sevenSecondsShortStr, sevenMinutesShortStr, sevenHoursShortStr, sevenDaysStr, sevenMonthsShortStr, sevenYearsShortStr};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.h
index edd89a68b1f..549cdecf25e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.h
@@ -23,7 +23,7 @@
*/
class TimeZoneBoundaryTest: public CalendarTimeZoneTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public: // package
TimeZoneBoundaryTest();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.cpp
index 40362aacd0a..9808de04cda 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.cpp
@@ -86,6 +86,7 @@ TimeZoneFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &name
TESTCASE(6, TestFormatCustomZone);
TESTCASE(7, TestFormatTZDBNamesAllZoneCoverage);
TESTCASE(8, TestAdoptDefaultThreadSafe);
+ TESTCASE(9, TestCentralTime);
default: name = ""; break;
}
}
@@ -157,7 +158,11 @@ TimeZoneFormatTest::TestTimeZoneRoundTrip(void) {
LOCALES = Locale::getAvailableLocales(nLocales);
}
- StringEnumeration *tzids = TimeZone::createEnumeration();
+ StringEnumeration *tzids = TimeZone::createEnumeration(status);
+ if (U_FAILURE(status)) {
+ dataerrln("Unable to create TimeZone enumeration");
+ return;
+ }
int32_t inRaw, inDst;
int32_t outRaw, outDst;
@@ -232,7 +237,7 @@ TimeZoneFormatTest::TestTimeZoneRoundTrip(void) {
UnicodeString canonicalID;
TimeZone::getCanonicalID(*tzid, canonicalID, status);
if (U_FAILURE(status)) {
- // Uknown ID - we should not get here
+ // Unknown ID - we should not get here
errln((UnicodeString)"Unknown ID " + *tzid);
status = U_ZERO_ERROR;
} else if (outtzid != canonicalID) {
@@ -265,7 +270,7 @@ TimeZoneFormatTest::TestTimeZoneRoundTrip(void) {
UnicodeString canonical;
TimeZone::getCanonicalID(*tzid, canonical, status);
if (U_FAILURE(status)) {
- // Uknown ID - we should not get here
+ // Unknown ID - we should not get here
errln((UnicodeString)"Unknown ID " + *tzid);
status = U_ZERO_ERROR;
} else if (outtzid != canonical) {
@@ -728,9 +733,12 @@ void TimeZoneFormatTest::RunAdoptDefaultThreadSafeTests(int32_t threadNumber) {
if (threadNumber % 2 == 0) {
for (int32_t i = 0; i < kAdoptDefaultIteration; i++) {
std::unique_ptr<icu::StringEnumeration> timezones(
- icu::TimeZone::createEnumeration());
+ icu::TimeZone::createEnumeration(status));
// Fails with missing data.
- if (!assertTrue(WHERE, (bool)timezones, false, true)) {return;}
+ if (U_FAILURE(status)) {
+ dataerrln("Unable to create TimeZone enumeration");
+ return;
+ }
while (const icu::UnicodeString* timezone = timezones->snext(status)) {
status = U_ZERO_ERROR;
icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone(*timezone));
@@ -744,9 +752,9 @@ void TimeZoneFormatTest::RunAdoptDefaultThreadSafeTests(int32_t threadNumber) {
date += 6000 * i;
std::unique_ptr<icu::TimeZone> tz(icu::TimeZone::createDefault());
status = U_ZERO_ERROR;
- tz->getOffset(date, TRUE, rawOffset, dstOffset, status);
+ tz->getOffset(static_cast<UDate>(date), TRUE, rawOffset, dstOffset, status);
status = U_ZERO_ERROR;
- tz->getOffset(date, FALSE, rawOffset, dstOffset, status);
+ tz->getOffset(static_cast<UDate>(date), FALSE, rawOffset, dstOffset, status);
}
}
}
@@ -1300,9 +1308,9 @@ TimeZoneFormatTest::TestFormatCustomZone(void) {
void
TimeZoneFormatTest::TestFormatTZDBNamesAllZoneCoverage(void) {
UErrorCode status = U_ZERO_ERROR;
- LocalPointer<StringEnumeration> tzids(TimeZone::createEnumeration());
- if (tzids.getAlias() == nullptr) {
- dataerrln("%s %d tzids is null", __FILE__, __LINE__);
+ LocalPointer<StringEnumeration> tzids(TimeZone::createEnumeration(status));
+ if (U_FAILURE(status)) {
+ dataerrln("Unable to create TimeZone enumeration", __FILE__, __LINE__);
return;
}
const UnicodeString *tzid;
@@ -1340,4 +1348,57 @@ TimeZoneFormatTest::TestFormatTZDBNamesAllZoneCoverage(void) {
}
}
}
+
+// Test for checking parse results are same for a same input string
+// using SimpleDateFormat initialized with different regional locales - US and Belize.
+// Belize did not observe DST from 1968 to 1973, 1975 to 1982, and 1985 and later.
+void
+TimeZoneFormatTest::TestCentralTime(void) {
+ UnicodeString pattern(u"y-MM-dd HH:mm:ss zzzz");
+ UnicodeString testInputs[] = {
+ // 1970-01-01 - Chicago:STD/Belize:STD
+ u"1970-01-01 12:00:00 Central Standard Time",
+ u"1970-01-01 12:00:00 Central Daylight Time",
+
+ // 1970-07-01 - Chicago:STD/Belize:STD
+ u"1970-07-01 12:00:00 Central Standard Time",
+ u"1970-07-01 12:00:00 Central Daylight Time",
+
+ // 1974-01-01 - Chicago:STD/Belize:DST
+ u"1974-01-01 12:00:00 Central Standard Time",
+ u"1974-01-01 12:00:00 Central Daylight Time",
+
+ // 2020-01-01 - Chicago:STD/Belize:STD
+ u"2020-01-01 12:00:00 Central Standard Time",
+ u"2020-01-01 12:00:00 Central Daylight Time",
+
+ // 2020-01-01 - Chicago:DST/Belize:STD
+ u"2020-07-01 12:00:00 Central Standard Time",
+ u"2020-07-01 12:00:00 Central Daylight Time",
+
+ u""
+ };
+
+ UErrorCode status = U_ZERO_ERROR;
+ SimpleDateFormat sdfUS(pattern, Locale("en_US"), status);
+ SimpleDateFormat sdfBZ(pattern, Locale("en_BZ"), status);
+ if (U_FAILURE(status)) {
+ errln("Failed to create SimpleDateFormat instance");
+ return;
+ }
+
+ for (int32_t i = 0; !testInputs[i].isEmpty(); i++) {
+ UDate dUS = sdfUS.parse(testInputs[i], status);
+ UDate dBZ = sdfBZ.parse(testInputs[i], status);
+
+ if (U_FAILURE(status)) {
+ errln((UnicodeString)"Failed to parse date string: " + testInputs[i]);
+ continue;
+ }
+
+ if (dUS != dBZ) {
+ errln((UnicodeString)"Parse results should be same for input: " + testInputs[i]);
+ }
+ }
+}
#endif /* #if !UCONFIG_NO_FORMATTING */
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.h b/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.h
index 1335a087c2f..9909841d8ce 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.h
@@ -19,7 +19,7 @@
class TimeZoneFormatTest : public IntlTest {
public:
// IntlTest override
- void runIndexedTest(int32_t index, UBool exec, const char*& name, char* par);
+ void runIndexedTest(int32_t index, UBool exec, const char*& name, char* par) override;
void TestTimeZoneRoundTrip(void);
void TestTimeRoundTrip(void);
@@ -30,6 +30,7 @@ class TimeZoneFormatTest : public IntlTest {
void TestFormatCustomZone(void);
void TestFormatTZDBNamesAllZoneCoverage(void);
void TestAdoptDefaultThreadSafe(void);
+ void TestCentralTime(void);
void RunTimeRoundTripTests(int32_t threadNumber);
void RunAdoptDefaultThreadSafeTests(int32_t threadNumber);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.cpp
index 1402469507b..d567cb99ac0 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.cpp
@@ -79,9 +79,9 @@ TimeZoneOffsetLocalTest::TestGetOffsetAroundTransition() {
// Expected offsets by void getOffset(UDate date, UBool local, int32_t& rawOffset,
// int32_t& dstOffset, UErrorCode& ec) with local=TRUE
- // or void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
+ // or void getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt,
// int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) with
- // nonExistingTimeOpt=kStandard/duplicatedTimeOpt=kStandard
+ // nonExistingTimeOpt=STANDARD_*/duplicatedTimeOpt=STANDARD_*
const int32_t OFFSETS2[NUM_DATES][2] = {
// April 2, 2006
{-8*HOUR, 0},
@@ -98,9 +98,9 @@ TimeZoneOffsetLocalTest::TestGetOffsetAroundTransition() {
{-8*HOUR, 0},
};
- // Expected offsets by void getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt,
- // int32_t duplicatedTimeOpt, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) with
- // nonExistingTimeOpt=kDaylight/duplicatedTimeOpt=kDaylight
+ // Expected offsets by void getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt,
+ // UTimeZoneLocalOption duplicatedTimeOpt, int32_t& rawOffset, int32_t& dstOffset, UErrorCode& status) with
+ // nonExistingTimeOpt=DAYLIGHT_*/duplicatedTimeOpt=DAYLIGHT_*
const int32_t OFFSETS3[][2] = {
// April 2, 2006
{-8*HOUR, 0},
@@ -237,84 +237,84 @@ TimeZoneOffsetLocalTest::TestGetOffsetAroundTransition() {
}
}
- // Test getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
+ // Test getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt,
// int32_t& rawOffset, int32_t& dstOffset, UErroCode& status)
- // with nonExistingTimeOpt=kStandard/duplicatedTimeOpt=kStandard
+ // with nonExistingTimeOpt=STANDARD_FORMER/duplicatedTimeOpt=STANDARD_LATTER
for (int32_t i = 0; i < NUM_TIMEZONES; i++) {
for (int m = 0; m < NUM_DATES; m++) {
status = U_ZERO_ERROR;
- TESTZONES[i]->getOffsetFromLocal(MILLIS[m], BasicTimeZone::kStandard, BasicTimeZone::kStandard,
+ TESTZONES[i]->getOffsetFromLocal(MILLIS[m], UCAL_TZ_LOCAL_STANDARD_FORMER, UCAL_TZ_LOCAL_STANDARD_LATTER,
rawOffset, dstOffset, status);
if (U_FAILURE(status)) {
- errln((UnicodeString)"getOffsetFromLocal with kStandard/kStandard failed for TESTZONES[" + i + "]");
+ errln((UnicodeString)"getOffsetFromLocal with UCAL_TZ_LOCAL_STANDARD_FORMER/UCAL_TZ_LOCAL_STANDARD_LATTER failed for TESTZONES[" + i + "]");
} else if (rawOffset != OFFSETS2[m][0] || dstOffset != OFFSETS2[m][1]) {
dateStr.remove();
df.format(MILLIS[m], dateStr);
dataerrln((UnicodeString)"Bad offset returned by TESTZONES[" + i + "] at "
- + dateStr + "(wall/kStandard/kStandard) - Got: "
+ + dateStr + "(wall/STANDARD_FORMER/STANDARD_LATTER) - Got: "
+ rawOffset + "/" + dstOffset
+ " Expected: " + OFFSETS2[m][0] + "/" + OFFSETS2[m][1]);
}
}
}
- // Test getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
+ // Test getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt,
// int32_t& rawOffset, int32_t& dstOffset, UErroCode& status)
- // with nonExistingTimeOpt=kDaylight/duplicatedTimeOpt=kDaylight
+ // with nonExistingTimeOpt=DAYLIGHT_LATTER/duplicatedTimeOpt=DAYLIGHT_FORMER
for (int32_t i = 0; i < NUM_TIMEZONES; i++) {
for (int m = 0; m < NUM_DATES; m++) {
status = U_ZERO_ERROR;
- TESTZONES[i]->getOffsetFromLocal(MILLIS[m], BasicTimeZone::kDaylight, BasicTimeZone::kDaylight,
+ TESTZONES[i]->getOffsetFromLocal(MILLIS[m], UCAL_TZ_LOCAL_DAYLIGHT_LATTER, UCAL_TZ_LOCAL_DAYLIGHT_FORMER,
rawOffset, dstOffset, status);
if (U_FAILURE(status)) {
- errln((UnicodeString)"getOffsetFromLocal with kDaylight/kDaylight failed for TESTZONES[" + i + "]");
+ errln((UnicodeString)"getOffsetFromLocal with UCAL_TZ_LOCAL_DAYLIGHT_LATTER/UCAL_TZ_LOCAL_DAYLIGHT_FORMER failed for TESTZONES[" + i + "]");
} else if (rawOffset != OFFSETS3[m][0] || dstOffset != OFFSETS3[m][1]) {
dateStr.remove();
df.format(MILLIS[m], dateStr);
dataerrln((UnicodeString)"Bad offset returned by TESTZONES[" + i + "] at "
- + dateStr + "(wall/kDaylight/kDaylight) - Got: "
+ + dateStr + "(wall/DAYLIGHT_LATTER/DAYLIGHT_FORMER) - Got: "
+ rawOffset + "/" + dstOffset
+ " Expected: " + OFFSETS3[m][0] + "/" + OFFSETS3[m][1]);
}
}
}
- // Test getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
+ // Test getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt,
// int32_t& rawOffset, int32_t& dstOffset, UErroCode& status)
- // with nonExistingTimeOpt=kFormer/duplicatedTimeOpt=kLatter
+ // with nonExistingTimeOpt=FORMER/duplicatedTimeOpt=LATTER
for (int32_t i = 0; i < NUM_TIMEZONES; i++) {
for (int m = 0; m < NUM_DATES; m++) {
status = U_ZERO_ERROR;
- TESTZONES[i]->getOffsetFromLocal(MILLIS[m], BasicTimeZone::kFormer, BasicTimeZone::kLatter,
+ TESTZONES[i]->getOffsetFromLocal(MILLIS[m], UCAL_TZ_LOCAL_FORMER, UCAL_TZ_LOCAL_LATTER,
rawOffset, dstOffset, status);
if (U_FAILURE(status)) {
- errln((UnicodeString)"getOffsetFromLocal with kFormer/kLatter failed for TESTZONES[" + i + "]");
+ errln((UnicodeString)"getOffsetFromLocal with UCAL_TZ_LOCAL_FORMER/UCAL_TZ_LOCAL_LATTER failed for TESTZONES[" + i + "]");
} else if (rawOffset != OFFSETS2[m][0] || dstOffset != OFFSETS2[m][1]) {
dateStr.remove();
df.format(MILLIS[m], dateStr);
dataerrln((UnicodeString)"Bad offset returned by TESTZONES[" + i + "] at "
- + dateStr + "(wall/kFormer/kLatter) - Got: "
+ + dateStr + "(wall/FORMER/LATTER) - Got: "
+ rawOffset + "/" + dstOffset
+ " Expected: " + OFFSETS2[m][0] + "/" + OFFSETS2[m][1]);
}
}
}
- // Test getOffsetFromLocal(UDate date, int32_t nonExistingTimeOpt, int32_t duplicatedTimeOpt,
+ // Test getOffsetFromLocal(UDate date, UTimeZoneLocalOption nonExistingTimeOpt, UTimeZoneLocalOption duplicatedTimeOpt,
// int32_t& rawOffset, int32_t& dstOffset, UErroCode& status)
- // with nonExistingTimeOpt=kLatter/duplicatedTimeOpt=kFormer
+ // with nonExistingTimeOpt=LATTER/duplicatedTimeOpt=FORMER
for (int32_t i = 0; i < NUM_TIMEZONES; i++) {
for (int m = 0; m < NUM_DATES; m++) {
status = U_ZERO_ERROR;
- TESTZONES[i]->getOffsetFromLocal(MILLIS[m], BasicTimeZone::kLatter, BasicTimeZone::kFormer,
+ TESTZONES[i]->getOffsetFromLocal(MILLIS[m], UCAL_TZ_LOCAL_LATTER, UCAL_TZ_LOCAL_FORMER,
rawOffset, dstOffset, status);
if (U_FAILURE(status)) {
- errln((UnicodeString)"getOffsetFromLocal with kLatter/kFormer failed for TESTZONES[" + i + "]");
+ errln((UnicodeString)"getOffsetFromLocal with UCAL_TZ_LOCAL_LATTER/UCAL_TZ_LOCAL_FORMER failed for TESTZONES[" + i + "]");
} else if (rawOffset != OFFSETS3[m][0] || dstOffset != OFFSETS3[m][1]) {
dateStr.remove();
df.format(MILLIS[m], dateStr);
dataerrln((UnicodeString)"Bad offset returned by TESTZONES[" + i + "] at "
- + dateStr + "(wall/kLatter/kFormer) - Got: "
+ + dateStr + "(wall/LATTER/FORMER) - Got: "
+ rawOffset + "/" + dstOffset
+ " Expected: " + OFFSETS3[m][0] + "/" + OFFSETS3[m][1]);
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.h b/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.h
index 55b4d860686..ded9fcf7c28 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.h
@@ -18,7 +18,7 @@
class TimeZoneOffsetLocalTest : public IntlTest {
// IntlTest override
- void runIndexedTest(int32_t index, UBool exec, const char*& name, char* par);
+ void runIndexedTest(int32_t index, UBool exec, const char*& name, char* par) override;
void TestGetOffsetAroundTransition(void);
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.cpp
index 5268254ba93..bc8a0029765 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.cpp
@@ -129,15 +129,21 @@ void TimeZoneRegressionTest:: Test4073215()
{
UErrorCode status = U_ZERO_ERROR;
UnicodeString str, str2;
- SimpleTimeZone *z = new SimpleTimeZone(0, "GMT");
- if (z->useDaylightTime())
+ LocalPointer<SimpleTimeZone> z(new SimpleTimeZone(0, "GMT"), status);
+ if (U_FAILURE(status)) {
+ errln("Fail: Failed to create SimpleTimeZone %s", u_errorName(status));
+ return;
+ }
+ if (z->useDaylightTime()) {
errln("Fail: Fix test to start with non-DST zone");
+ }
z->setStartRule(UCAL_FEBRUARY, 1, UCAL_SUNDAY, 0, status);
failure(status, "z->setStartRule()");
z->setEndRule(UCAL_MARCH, -1, UCAL_SUNDAY, 0, status);
failure(status, "z->setStartRule()");
- if (!z->useDaylightTime())
+ if (!z->useDaylightTime()) {
errln("Fail: DST not active");
+ }
GregorianCalendar cal(1997, UCAL_JANUARY, 31, status);
if(U_FAILURE(status)) {
@@ -145,7 +151,7 @@ void TimeZoneRegressionTest:: Test4073215()
return;
}
failure(status, "new GregorianCalendar");
- cal.adoptTimeZone(z);
+ cal.adoptTimeZone(z.orphan());
SimpleDateFormat sdf((UnicodeString)"E d MMM yyyy G HH:mm", status);
if(U_FAILURE(status)) {
@@ -156,14 +162,14 @@ void TimeZoneRegressionTest:: Test4073215()
failure(status, "new SimpleDateFormat");
UDate jan31, mar1, mar31;
-
- UBool indt = z->inDaylightTime(jan31=cal.getTime(status), status);
+
+ UBool indt = cal.getTimeZone().inDaylightTime(jan31 = cal.getTime(status), status);
failure(status, "inDaylightTime or getTime call on Jan 31");
if (indt) {
errln("Fail: Jan 31 inDaylightTime=TRUE, exp FALSE");
}
cal.set(1997, UCAL_MARCH, 1);
- indt = z->inDaylightTime(mar1=cal.getTime(status), status);
+ indt = cal.getTimeZone().inDaylightTime(mar1 = cal.getTime(status), status);
failure(status, "inDaylightTime or getTime call on Mar 1");
if (!indt) {
UnicodeString str;
@@ -172,7 +178,7 @@ void TimeZoneRegressionTest:: Test4073215()
errln((UnicodeString)"Fail: " + str + " inDaylightTime=FALSE, exp TRUE");
}
cal.set(1997, UCAL_MARCH, 31);
- indt = z->inDaylightTime(mar31=cal.getTime(status), status);
+ indt = cal.getTimeZone().inDaylightTime(mar31 = cal.getTime(status), status);
failure(status, "inDaylightTime or getTime call on Mar 31");
if (indt) {
errln("Fail: Mar 31 inDaylightTime=TRUE, exp FALSE");
@@ -397,7 +403,12 @@ TimeZoneRegressionTest::checkCalendar314(GregorianCalendar *testCal, TimeZone *t
UDate testDate = testCal->getTime(status);
UBool inDaylightTime = testTZ->inDaylightTime(testDate, status);
- SimpleDateFormat *sdf = new SimpleDateFormat((UnicodeString)"MM/dd/yyyy HH:mm", status);
+ LocalPointer<SimpleDateFormat> sdf(new SimpleDateFormat((UnicodeString) "MM/dd/yyyy HH:mm", status),
+ status);
+ if (U_FAILURE(status)) {
+ errln("Error creating SimpleDateFormat %s", u_errorName(status));
+ return false;
+ }
sdf->setCalendar(*testCal);
UnicodeString inDaylightTimeString;
@@ -432,7 +443,6 @@ TimeZoneRegressionTest::checkCalendar314(GregorianCalendar *testCal, TimeZone *t
else
errln(output);
- delete sdf;
return passed;
}
@@ -507,8 +517,8 @@ void TimeZoneRegressionTest:: Test4151406() {
//try {
UErrorCode ec = U_ZERO_ERROR;
int32_t count;
- StringEnumeration* ids = TimeZone::createEnumeration(rawoffset);
- if (ids == NULL) {
+ StringEnumeration* ids = TimeZone::createEnumerationForRawOffset(rawoffset, ec);
+ if (U_FAILURE(ec)) {
dataerrln("Fail: TimeZone::createEnumeration(rawoffset)");
continue;
}
@@ -553,16 +563,18 @@ void TimeZoneRegressionTest:: Test4151429() {
void TimeZoneRegressionTest:: Test4154537() {
UErrorCode status = U_ZERO_ERROR;
// tz1 and tz2 have no DST and different rule parameters
- SimpleTimeZone *tz1 = new SimpleTimeZone(0, "1", 0, 0, 0, 0, 2, 0, 0, 0, status);
- SimpleTimeZone *tz2 = new SimpleTimeZone(0, "2", 1, 0, 0, 0, 3, 0, 0, 0, status);
+ LocalPointer<SimpleTimeZone> tz1(new SimpleTimeZone(0, "1", 0, 0, 0, 0, 2, 0, 0, 0, status), status);
+ LocalPointer<SimpleTimeZone> tz2(new SimpleTimeZone(0, "2", 1, 0, 0, 0, 3, 0, 0, 0, status), status);
// tza and tzA have the same rule params
- SimpleTimeZone *tza = new SimpleTimeZone(0, "a", 0, 1, 0, 0, 3, 2, 0, 0, status);
- SimpleTimeZone *tzA = new SimpleTimeZone(0, "A", 0, 1, 0, 0, 3, 2, 0, 0, status);
+ LocalPointer<SimpleTimeZone> tza(new SimpleTimeZone(0, "a", 0, 1, 0, 0, 3, 2, 0, 0, status), status);
+ LocalPointer<SimpleTimeZone> tzA(new SimpleTimeZone(0, "A", 0, 1, 0, 0, 3, 2, 0, 0, status), status);
// tzb differs from tza
- SimpleTimeZone *tzb = new SimpleTimeZone(0, "b", 0, 1, 0, 0, 3, 1, 0, 0, status);
+ LocalPointer<SimpleTimeZone> tzb(new SimpleTimeZone(0, "b", 0, 1, 0, 0, 3, 1, 0, 0, status), status);
- if(U_FAILURE(status))
- errln("Couldn't create TimeZones");
+ if (U_FAILURE(status)) {
+ errln("Couldn't create TimeZones %s", u_errorName(status));
+ return;
+ }
if (tz1->useDaylightTime() || tz2->useDaylightTime() ||
!tza->useDaylightTime() || !tzA->useDaylightTime() ||
@@ -577,12 +589,6 @@ void TimeZoneRegressionTest:: Test4154537() {
//errln("zone 1 = " + tz1);
//errln("zone 2 = " + tz2);
}
-
- delete tz1;
- delete tz2;
- delete tza;
- delete tzA;
- delete tzb;
}
/**
@@ -620,7 +626,13 @@ void TimeZoneRegressionTest:: Test4154542()
BAD, UCAL_DECEMBER, -32, -UCAL_SATURDAY, 0,
BAD, UCAL_DECEMBER, 31, -UCAL_SATURDAY-1, 0,
};
- SimpleTimeZone *zone = new SimpleTimeZone(0, "Z");
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<SimpleTimeZone> zone(new SimpleTimeZone(0, "Z"), status);
+ if (U_FAILURE(status)) {
+ errln("Fail: failed to create SimpleTimeZone %s", u_errorName(status));
+ return;
+ }
+
for (int32_t i=0; i < 18*5; i+=5) {
UBool shouldBeGood = (DATA[i] == GOOD);
int32_t month = DATA[i+1];
@@ -628,7 +640,7 @@ void TimeZoneRegressionTest:: Test4154542()
int32_t dayOfWeek = DATA[i+3];
int32_t time = DATA[i+4];
- UErrorCode status = U_ZERO_ERROR;
+ status = U_ZERO_ERROR;
//Exception ex = null;
//try {
@@ -665,6 +677,10 @@ void TimeZoneRegressionTest:: Test4154542()
(int8_t)month, (int8_t)day, (int8_t)dayOfWeek, time,
(int8_t)GOOD_MONTH, (int8_t)GOOD_DAY, (int8_t)GOOD_DAY_OF_WEEK,
GOOD_TIME,status);
+ if (temp == nullptr) {
+ errln("Fail: failed to create SimpleTimeZone %s", u_errorName(status));
+ return;
+ }
//} catch (IllegalArgumentException e) {
// ex = e;
//}
@@ -683,6 +699,10 @@ void TimeZoneRegressionTest:: Test4154542()
(int8_t)GOOD_MONTH, (int8_t)GOOD_DAY, (int8_t)GOOD_DAY_OF_WEEK,
GOOD_TIME,
(int8_t)month, (int8_t)day, (int8_t)dayOfWeek, time,status);
+ if (temp == nullptr) {
+ errln("Fail: failed to create SimpleTimeZone %s", u_errorName(status));
+ return;
+ }
//} catch (IllegalArgumentException e) {
// ex = e;
//}
@@ -694,7 +714,6 @@ void TimeZoneRegressionTest:: Test4154542()
}
delete temp;
}
- delete zone;
}
@@ -723,19 +742,21 @@ TimeZoneRegressionTest::Test4154525()
UBool valid = DATA[i+1] == GOOD;
UnicodeString method;
for(int32_t j=0; j < 2; ++j) {
- SimpleTimeZone *z=NULL;
+ LocalPointer<SimpleTimeZone> z;
switch (j) {
case 0:
method = "constructor";
- z = new SimpleTimeZone(0, "id",
+ z.adoptInsteadAndCheckErrorCode(new SimpleTimeZone(0, "id",
UCAL_JANUARY, 1, 0, 0,
UCAL_MARCH, 1, 0, 0,
- savings, status); // <- what we're interested in
+ savings, status), status); // <- what we're interested in
break;
case 1:
method = "setDSTSavings()";
- z = new SimpleTimeZone(0, "GMT");
- z->setDSTSavings(savings, status);
+ z.adoptInsteadAndCheckErrorCode(new SimpleTimeZone(0, "GMT"), status);
+ if (z.isValid()) {
+ z->setDSTSavings(savings, status);
+ }
break;
}
@@ -756,7 +777,6 @@ TimeZoneRegressionTest::Test4154525()
}
}
status = U_ZERO_ERROR;
- delete z;
}
}
}
@@ -842,17 +862,21 @@ void
TimeZoneRegressionTest::Test4162593()
{
UErrorCode status = U_ZERO_ERROR;
- SimpleDateFormat *fmt = new SimpleDateFormat("z", Locale::getUS(), status);
- if(U_FAILURE(status)) {
- dataerrln("Error creating calendar %s", u_errorName(status));
- delete fmt;
+ LocalPointer<SimpleDateFormat> fmt(new SimpleDateFormat("z", Locale::getUS(), status), status);
+ if (U_FAILURE(status)) {
+ dataerrln("Error creating SimpleDateFormat %s", u_errorName(status));
return;
}
const int32_t ONE_HOUR = 60*60*1000;
- SimpleTimeZone *asuncion = new SimpleTimeZone(-4*ONE_HOUR, "America/Asuncion" /*PY%sT*/,
+ LocalPointer<SimpleTimeZone> asuncion(new SimpleTimeZone(-4*ONE_HOUR, "America/Asuncion" /*PY%sT*/,
UCAL_OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR,
- UCAL_MARCH, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR, status);
+ UCAL_MARCH, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR, status), status);
+
+ if (U_FAILURE(status)) {
+ dataerrln("Error creating SimpleTimeZone %s", u_errorName(status));
+ return;
+ }
/* Zone
* Starting time
@@ -868,10 +892,10 @@ TimeZoneRegressionTest::Test4162593()
{2000, UCAL_FEBRUARY, 29, 22, 0},
};
- UBool DATA_BOOL [] = {
- TRUE,
- FALSE,
- TRUE,
+ bool DATA_BOOL [] = {
+ true,
+ false,
+ true,
};
UnicodeString zone [4];// = new String[4];
@@ -879,7 +903,12 @@ TimeZoneRegressionTest::Test4162593()
new SimpleTimeZone(2*ONE_HOUR, "Asia/Damascus" /*EE%sT*/,
UCAL_APRIL, 1, 0 /*DOM*/, 0*ONE_HOUR,
UCAL_OCTOBER, 1, 0 /*DOM*/, 0*ONE_HOUR, 1*ONE_HOUR, status);
- DATA_TZ[1] = asuncion; DATA_TZ[2] = asuncion;
+ DATA_TZ[1] = asuncion.getAlias(); DATA_TZ[2] = asuncion.getAlias();
+
+ if (DATA_TZ[0] == nullptr || U_FAILURE(status)) {
+ errln("Error creating DATA_TZ[0] %s", u_errorName(status));
+ return;
+ }
for(int32_t j = 0; j < 3; j++) {
TimeZone *tz = (TimeZone*)DATA_TZ[j];
@@ -889,7 +918,7 @@ TimeZoneRegressionTest::Test4162593()
// Must construct the Date object AFTER setting the default zone
int32_t *p = (int32_t*)DATA_INT[j];
UDate d = CalendarRegressionTest::makeDate(p[0], p[1], p[2], p[3], p[4]);
- UBool transitionExpected = DATA_BOOL[j];
+ bool transitionExpected = DATA_BOOL[j];
UnicodeString temp;
logln(tz->getID(temp) + ":");
@@ -909,8 +938,6 @@ TimeZoneRegressionTest::Test4162593()
errln("Fail: boundary transition incorrect");
}
}
- delete fmt;
- delete asuncion;
delete DATA_TZ[0];
}
@@ -1074,27 +1101,27 @@ TimeZoneRegressionTest::TestJDK12API()
// TimeZone *cst1 = TimeZone::createTimeZone("CST");
UErrorCode ec = U_ZERO_ERROR;
//d,-28800,3,1,-1,120,w,9,-1,1,120,w,60
- TimeZone *pst = new SimpleTimeZone(-28800*U_MILLIS_PER_SECOND,
+ LocalPointer<TimeZone> pst(new SimpleTimeZone(-28800*U_MILLIS_PER_SECOND,
"PST",
3,1,-1,120*U_MILLIS_PER_MINUTE,
SimpleTimeZone::WALL_TIME,
9,-1,1,120*U_MILLIS_PER_MINUTE,
SimpleTimeZone::WALL_TIME,
- 60*U_MILLIS_PER_MINUTE,ec);
+ 60*U_MILLIS_PER_MINUTE,ec), ec);
//d,-21600,3,1,-1,120,w,9,-1,1,120,w,60
- TimeZone *cst1 = new SimpleTimeZone(-21600*U_MILLIS_PER_SECOND,
+ LocalPointer<TimeZone> cst1(new SimpleTimeZone(-21600*U_MILLIS_PER_SECOND,
"CST",
3,1,-1,120*U_MILLIS_PER_MINUTE,
SimpleTimeZone::WALL_TIME,
9,-1,1,120*U_MILLIS_PER_MINUTE,
SimpleTimeZone::WALL_TIME,
- 60*U_MILLIS_PER_MINUTE,ec);
+ 60*U_MILLIS_PER_MINUTE,ec), ec);
if (U_FAILURE(ec)) {
errln("FAIL: SimpleTimeZone constructor");
return;
}
- SimpleTimeZone *cst = dynamic_cast<SimpleTimeZone *>(cst1);
+ SimpleTimeZone *cst = dynamic_cast<SimpleTimeZone *>(cst1.getAlias());
if(pst->hasSameRules(*cst)) {
errln("FAILURE: PST and CST have same rules");
@@ -1127,9 +1154,6 @@ TimeZoneRegressionTest::TestJDK12API()
if(savings != 60*60*1000) {
errln("setDSTSavings() failed");
}
-
- delete pst;
- delete cst;
}
/**
* SimpleTimeZone allows invalid DOM values.
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.h b/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.h
index 46e43cd2502..505e8c9d44b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.h
@@ -26,7 +26,7 @@
class TimeZoneRegressionTest: public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public:
void Test4052967(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.cpp
index dc644329e94..b55dd2ef7d7 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.cpp
@@ -59,15 +59,15 @@ public:
TestZIDEnumeration(UBool all = FALSE);
~TestZIDEnumeration();
- virtual int32_t count(UErrorCode& /*status*/) const {
+ virtual int32_t count(UErrorCode& /*status*/) const override {
return len;
}
- virtual const UnicodeString *snext(UErrorCode& status);
- virtual void reset(UErrorCode& status);
+ virtual const UnicodeString *snext(UErrorCode& status) override;
+ virtual void reset(UErrorCode& status) override;
static inline UClassID getStaticClassID() {
return (UClassID)&fgClassID;
}
- virtual UClassID getDynamicClassID() const {
+ virtual UClassID getDynamicClassID() const override {
return getStaticClassID();
}
private:
@@ -83,7 +83,7 @@ TestZIDEnumeration::TestZIDEnumeration(UBool all)
: idx(0) {
UErrorCode status = U_ZERO_ERROR;
if (all) {
- tzenum = TimeZone::createEnumeration();
+ tzenum = TimeZone::createEnumeration(status);
len = tzenum->count(status);
} else {
tzenum = NULL;
@@ -402,8 +402,6 @@ TimeZoneRuleTest::TestSimpleRuleBasedTimeZone(void) {
rbtz1->addTransitionRule(atzr, status);
if (U_SUCCESS(status)) {
errln("FAIL: 3rd final rule must be rejected");
- } else {
- delete atzr;
}
// Try to add an initial rule
@@ -411,8 +409,6 @@ TimeZoneRuleTest::TestSimpleRuleBasedTimeZone(void) {
rbtz1->addTransitionRule(ir1, status);
if (U_SUCCESS(status)) {
errln("FAIL: InitialTimeZoneRule must be rejected");
- } else {
- delete ir1;
}
delete ir;
@@ -1530,7 +1526,7 @@ TimeZoneRuleTest::TestSimpleTimeZoneCoverage(void) {
avail1 = stz1->getNextTransition(time1, FALSE, tzt1);
if (avail1) {
- errln("FAIL: No transition must be returned by getNextTranstion for SimpleTimeZone with no DST rule");
+ errln("FAIL: No transition must be returned by getNextTransition for SimpleTimeZone with no DST rule");
}
avail1 = stz1->getPreviousTransition(time1, FALSE, tzt1);
if (avail1) {
@@ -1565,7 +1561,7 @@ TimeZoneRuleTest::TestSimpleTimeZoneCoverage(void) {
avail1 = stz1->getNextTransition(time1, FALSE, tzt1);
if (!avail1) {
- errln("FAIL: Non-null transition must be returned by getNextTranstion for SimpleTimeZone with a DST rule");
+ errln("FAIL: Non-null transition must be returned by getNextTransition for SimpleTimeZone with a DST rule");
}
avail1 = stz1->getPreviousTransition(time1, FALSE, tzt1);
if (!avail1) {
@@ -1759,7 +1755,7 @@ TimeZoneRuleTest::TestVTimeZoneCoverage(void) {
dataerrln("FAIL: hasEquivalentTransitions failed for vtz/otz: %s", u_errorName(status));
}
if (!equiv) {
- dataerrln("FAIL: hasEquivalentTransitons returned false for the same time zone");
+ dataerrln("FAIL: hasEquivalentTransitions returned false for the same time zone");
}
// operator=/operator==/operator!=
@@ -2114,7 +2110,7 @@ TimeZoneRuleTest::TestT6216(void) {
TimeZone *utc = TimeZone::createTimeZone("Etc/GMT");
GregorianCalendar cal(utc, status);
if (U_FAILURE(status)) {
- dataerrln("FAIL: Failed to creat a GregorianCalendar: %s", u_errorName(status));
+ dataerrln("FAIL: Failed to create a GregorianCalendar: %s", u_errorName(status));
return;
}
for (i = 0; TestDates[i][2] != 0; i++) {
@@ -2156,7 +2152,7 @@ TimeZoneRuleTest::TestT6669(void) {
UErrorCode status = U_ZERO_ERROR;
SimpleTimeZone stz(0, "CustomID", UCAL_JANUARY, 1, UCAL_SUNDAY, 0, UCAL_JULY, 1, UCAL_SUNDAY, 0, status);
if (U_FAILURE(status)) {
- errln("FAIL: Failed to creat a SimpleTimeZone");
+ errln("FAIL: Failed to create a SimpleTimeZone");
return;
}
@@ -2364,7 +2360,7 @@ TimeZoneRuleTest::verifyTransitions(BasicTimeZone& icutz, UDate start, UDate end
if (!first &&
(tzt0.getTo()->getRawOffset() != tzt.getFrom()->getRawOffset()
|| tzt0.getTo()->getDSTSavings() != tzt.getFrom()->getDSTSavings())) {
- errln((UnicodeString)"FAIL: TO rule of the previous transition does not match FROM rule of this transtion at "
+ errln((UnicodeString)"FAIL: TO rule of the previous transition does not match FROM rule of this transition at "
+ dateToString(time) + " for " + icutz.getID(tzid));
}
tzt0 = tzt;
@@ -2398,7 +2394,7 @@ TimeZoneRuleTest::verifyTransitions(BasicTimeZone& icutz, UDate start, UDate end
if (!first &&
(tzt0.getFrom()->getRawOffset() != tzt.getTo()->getRawOffset()
|| tzt0.getFrom()->getDSTSavings() != tzt.getTo()->getDSTSavings())) {
- errln((UnicodeString)"FAIL: TO rule of the next transition does not match FROM rule in this transtion at "
+ errln((UnicodeString)"FAIL: TO rule of the next transition does not match FROM rule in this transition at "
+ dateToString(time) + " for " + icutz.getID(tzid));
}
tzt0 = tzt;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.h b/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.h
index e677238cb23..9c394df74b5 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.h
@@ -20,7 +20,7 @@
*/
class TimeZoneRuleTest : public CalendarTimeZoneTest {
// IntlTest override
- void runIndexedTest(int32_t index, UBool exec, const char*& name, char* par);
+ void runIndexedTest(int32_t index, UBool exec, const char*& name, char* par) override;
public:
void TestSimpleRuleBasedTimeZone(void);
void TestHistoricalRuleBasedTimeZone(void);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
index 17492a7a13b..0d58bab197d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
@@ -14,6 +14,7 @@
#include "unicode/simpletz.h"
#include "unicode/calendar.h"
#include "unicode/gregocal.h"
+#include "unicode/localpointer.h"
#include "unicode/resbund.h"
#include "unicode/strenum.h"
#include "unicode/uversion.h"
@@ -152,10 +153,13 @@ TimeZoneTest::TestGenericAPI()
const char* tzver = TimeZone::getTZDataVersion(status);
if (U_FAILURE(status)) {
errcheckln(status, "FAIL: getTZDataVersion failed - %s", u_errorName(status));
- } else if (uprv_strlen(tzver) != 5 /* 4 digits + 1 letter */) {
- errln((UnicodeString)"FAIL: getTZDataVersion returned " + tzver);
} else {
- logln((UnicodeString)"tzdata version: " + tzver);
+ int32_t tzverLen = uprv_strlen(tzver);
+ if (tzverLen == 5 || tzverLen == 6 /* 4 digits + 1 or 2 letters */) {
+ logln((UnicodeString)"tzdata version: " + tzver);
+ } else {
+ errln((UnicodeString)"FAIL: getTZDataVersion returned " + tzver);
+ }
}
}
@@ -425,12 +429,16 @@ TimeZoneTest::TestGetAvailableIDs913()
UnicodeString str;
UnicodeString buf(u"TimeZone::createEnumeration() = { ");
int32_t s_length;
- StringEnumeration* s = TimeZone::createEnumeration();
- if (s == NULL) {
+ StringEnumeration* s = TimeZone::createEnumeration(ec);
+ LocalPointer<StringEnumeration> tmp1(TimeZone::createEnumeration(), ec);
+ if (U_FAILURE(ec) || s == NULL) {
dataerrln("Unable to create TimeZone enumeration");
return;
}
s_length = s->count(ec);
+ if (s_length != tmp1->count(ec)) {
+ errln("TimeZone::createEnumeration() with no status args returns a different count.");
+ }
for (i = 0; i < s_length;++i) {
if (i > 0) buf += ", ";
if ((i & 1) == 0) {
@@ -481,8 +489,16 @@ TimeZoneTest::TestGetAvailableIDs913()
buf.truncate(0);
buf += "TimeZone::createEnumeration(GMT+01:00) = { ";
- s = TimeZone::createEnumeration(1 * U_MILLIS_PER_HOUR);
+ s = TimeZone::createEnumerationForRawOffset(1 * U_MILLIS_PER_HOUR, ec);
+ LocalPointer<StringEnumeration> tmp2(TimeZone::createEnumeration(1 * U_MILLIS_PER_HOUR), ec);
+ if (U_FAILURE(ec)) {
+ dataerrln("Unable to create TimeZone enumeration for GMT+1");
+ return;
+ }
s_length = s->count(ec);
+ if (s_length != tmp2->count(ec)) {
+ errln("TimeZone::createEnumeration(GMT+01:00) with no status args returns a different count.");
+ }
for (i = 0; i < s_length;++i) {
if (i > 0) buf += ", ";
buf += *s->snext(ec);
@@ -495,9 +511,17 @@ TimeZoneTest::TestGetAvailableIDs913()
buf.truncate(0);
buf += "TimeZone::createEnumeration(US) = { ";
- s = TimeZone::createEnumeration("US");
+ s = TimeZone::createEnumerationForRegion("US", ec);
+ LocalPointer<StringEnumeration> tmp3(TimeZone::createEnumeration("US"), ec);
+ if (U_FAILURE(ec)) {
+ dataerrln("Unable to create TimeZone enumeration for US");
+ return;
+ }
s_length = s->count(ec);
- for (i = 0; i < s_length;++i) {
+ if (s_length != tmp3->count(ec)) {
+ errln("TimeZone::createEnumeration(\"US\") with no status args returns a different count.");
+ }
+ for (i = 0; i < s_length; ++i) {
if (i > 0) buf += ", ";
buf += *s->snext(ec);
}
@@ -544,57 +568,57 @@ TimeZoneTest::TestGetAvailableIDsNew()
any = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, NULL, NULL, ec);
if (U_FAILURE(ec)) {
- dataerrln("Failed to create enumration for ANY");
+ dataerrln("Failed to create enumeration for ANY");
goto cleanup;
}
canonical = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL, NULL, NULL, ec);
if (U_FAILURE(ec)) {
- errln("Failed to create enumration for CANONICAL");
+ errln("Failed to create enumeration for CANONICAL");
goto cleanup;
}
canonicalLoc = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL_LOCATION, NULL, NULL, ec);
if (U_FAILURE(ec)) {
- errln("Failed to create enumration for CANONICALLOC");
+ errln("Failed to create enumeration for CANONICALLOC");
goto cleanup;
}
any_US = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, "US", NULL, ec);
if (U_FAILURE(ec)) {
- errln("Failed to create enumration for ANY_US");
+ errln("Failed to create enumeration for ANY_US");
goto cleanup;
}
canonical_US = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL, "US", NULL, ec);
if (U_FAILURE(ec)) {
- errln("Failed to create enumration for CANONICAL_US");
+ errln("Failed to create enumeration for CANONICAL_US");
goto cleanup;
}
canonicalLoc_US = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL_LOCATION, "US", NULL, ec);
if (U_FAILURE(ec)) {
- errln("Failed to create enumration for CANONICALLOC_US");
+ errln("Failed to create enumeration for CANONICALLOC_US");
goto cleanup;
}
rawOffset = (-5)*60*60*1000;
any_W5 = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, NULL, &rawOffset, ec);
if (U_FAILURE(ec)) {
- errln("Failed to create enumration for ANY_W5");
+ errln("Failed to create enumeration for ANY_W5");
goto cleanup;
}
any_CA_W5 = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, "CA", &rawOffset, ec);
if (U_FAILURE(ec)) {
- errln("Failed to create enumration for ANY_CA_W5");
+ errln("Failed to create enumeration for ANY_CA_W5");
goto cleanup;
}
rawOffset = 14*60*60*1000;
any_US_E14 = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, "US", &rawOffset, ec);
if (U_FAILURE(ec)) {
- errln("Failed to create enumration for ANY_US_E14");
+ errln("Failed to create enumeration for ANY_US_E14");
goto cleanup;
}
@@ -1171,8 +1195,10 @@ void TimeZoneTest::TestCustomParse()
TimeZone *zone = TimeZone::createTimeZone(id);
UnicodeString itsID, temp;
- if (dynamic_cast<OlsonTimeZone *>(zone) != NULL) {
+ OlsonTimeZone *ozone = dynamic_cast<OlsonTimeZone *>(zone);
+ if (ozone != nullptr) {
logln(id + " -> Olson time zone");
+ ozone->operator=(*ozone); // self-assignment should be a no-op
} else {
zone->getID(itsID);
int32_t ioffset = zone->getRawOffset()/1000;
@@ -1218,7 +1244,6 @@ TimeZoneTest::TestAliasedNames()
{"America/Argentina/Cordoba", "America/Cordoba"},
{"America/Argentina/Jujuy", "America/Jujuy"},
{"America/Argentina/Mendoza", "America/Mendoza"},
- {"America/Atikokan", "America/Coral_Harbour"},
{"America/Atka", "America/Adak"},
{"America/Ensenada", "America/Tijuana"},
{"America/Fort_Wayne", "America/Indianapolis"},
@@ -1718,8 +1743,8 @@ void TimeZoneTest::TestCountries() {
// Asia/Tokyo isn't. Vice versa for the "JP" group.
UErrorCode ec = U_ZERO_ERROR;
int32_t n;
- StringEnumeration* s = TimeZone::createEnumeration("US");
- if (s == NULL) {
+ StringEnumeration* s = TimeZone::createEnumerationForRegion("US", ec);
+ if (U_FAILURE(ec)) {
dataerrln("Unable to create TimeZone enumeration for US");
return;
}
@@ -1729,7 +1754,7 @@ void TimeZoneTest::TestCountries() {
UnicodeString tokyoZone("Asia/Tokyo", "");
int32_t i;
- if (s == NULL || n <= 0) {
+ if (n <= 0) {
dataerrln("FAIL: TimeZone::createEnumeration() returned nothing");
return;
}
@@ -1748,7 +1773,11 @@ void TimeZoneTest::TestCountries() {
}
delete s;
- s = TimeZone::createEnumeration("JP");
+ s = TimeZone::createEnumerationForRegion("JP", ec);
+ if (U_FAILURE(ec)) {
+ dataerrln("Unable to create TimeZone enumeration for JP");
+ return;
+ }
n = s->count(ec);
la = FALSE; tokyo = FALSE;
@@ -1765,8 +1794,12 @@ void TimeZoneTest::TestCountries() {
errln("FAIL: " + laZone + " in JP = " + la);
errln("FAIL: " + tokyoZone + " in JP = " + tokyo);
}
- StringEnumeration* s1 = TimeZone::createEnumeration("US");
- StringEnumeration* s2 = TimeZone::createEnumeration("US");
+ StringEnumeration* s1 = TimeZone::createEnumerationForRegion("US", ec);
+ StringEnumeration* s2 = TimeZone::createEnumerationForRegion("US", ec);
+ if (U_FAILURE(ec)) {
+ dataerrln("Unable to create TimeZone enumeration for US");
+ return;
+ }
for(i=0;i<n;++i){
const UnicodeString* id1 = s1->snext(ec);
if(id1==NULL || U_FAILURE(ec)){
@@ -2045,6 +2078,8 @@ void TimeZoneTest::TestCanonicalID() {
{"Africa/Sao_Tome", "Africa/Abidjan"},
{"America/Antigua", "America/Port_of_Spain"},
{"America/Anguilla", "America/Port_of_Spain"},
+ {"America/Cayman", "America/Panama"},
+ {"America/Coral_Harbour", "America/Panama"},
{"America/Curacao", "America/Aruba"},
{"America/Dominica", "America/Port_of_Spain"},
{"America/Grenada", "America/Port_of_Spain"},
@@ -2053,7 +2088,6 @@ void TimeZoneTest::TestCanonicalID() {
{"America/Lower_Princes", "America/Aruba"},
{"America/Marigot", "America/Port_of_Spain"},
{"America/Montserrat", "America/Port_of_Spain"},
- {"America/Panama", "America/Cayman"},
{"America/Santa_Isabel", "America/Tijuana"},
{"America/Shiprock", "America/Denver"},
{"America/St_Barthelemy", "America/Port_of_Spain"},
@@ -2063,7 +2097,7 @@ void TimeZoneTest::TestCanonicalID() {
{"America/St_Vincent", "America/Port_of_Spain"},
{"America/Toronto", "America/Montreal"},
{"America/Tortola", "America/Port_of_Spain"},
- {"America/Virgin", "America/Port_of_Spain"},
+ {"America/Virgin", "America/Puerto_Rico"},
{"Antarctica/South_Pole", "Antarctica/McMurdo"},
{"Arctic/Longyearbyen", "Europe/Oslo"},
{"Asia/Kuwait", "Asia/Aden"},
@@ -2074,6 +2108,8 @@ void TimeZoneTest::TestCanonicalID() {
{"Asia/Vientiane", "Asia/Bangkok"},
{"Atlantic/Jan_Mayen", "Europe/Oslo"},
{"Atlantic/St_Helena", "Africa/Abidjan"},
+ {"Australia/Currie", "Australia/Hobart"},
+ {"Australia/Tasmania", "Australia/Hobart"},
{"Europe/Bratislava", "Europe/Prague"},
{"Europe/Busingen", "Europe/Zurich"},
{"Europe/Guernsey", "Europe/London"},
@@ -2114,8 +2150,8 @@ void TimeZoneTest::TestCanonicalID() {
// Walk through equivalency groups
UErrorCode ec = U_ZERO_ERROR;
int32_t s_length, i, j, k;
- StringEnumeration* s = TimeZone::createEnumeration();
- if (s == NULL) {
+ StringEnumeration* s = TimeZone::createEnumeration(ec);
+ if (U_FAILURE(ec)) {
dataerrln("Unable to create TimeZone enumeration");
return;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tztest.h b/Build/source/libs/icu/icu-src/source/test/intltest/tztest.h
index 52feaa210a8..8e0a29fadca 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/tztest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/tztest.h
@@ -21,7 +21,7 @@
**/
class TimeZoneTest: public CalendarTimeZoneTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
public: // package
static const int32_t millisPerHour;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.h b/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.h
index 69294afe4ea..0b45bca28e6 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.h
@@ -29,7 +29,7 @@ public:
UCAConformanceTest();
virtual ~UCAConformanceTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par = NULL */);
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par = NULL */) override;
void TestTableNonIgnorable(/* par */);
void TestTableShifted(/* par */);
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.cpp
index 6b784b7b1b2..0304c61c448 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.cpp
@@ -65,6 +65,7 @@ void UnicodeTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
TESTCASE_AUTO(TestScriptMetadata);
TESTCASE_AUTO(TestBidiPairedBracketType);
TESTCASE_AUTO(TestEmojiProperties);
+ TESTCASE_AUTO(TestEmojiPropertiesOfStrings);
TESTCASE_AUTO(TestIndicPositionalCategory);
TESTCASE_AUTO(TestIndicSyllabicCategory);
TESTCASE_AUTO(TestVerticalOrientation);
@@ -545,6 +546,177 @@ void UnicodeTest::TestEmojiProperties() {
u_hasBinaryProperty(0xA9, UCHAR_EXTENDED_PICTOGRAPHIC));
}
+namespace {
+
+UBool hbp(const UChar *s, int32_t length, UProperty which) {
+ return u_stringHasBinaryProperty(s, length, which);
+}
+
+UBool hbp(const UChar *s, UProperty which) {
+ return u_stringHasBinaryProperty(s, -1, which);
+}
+
+} // namespace
+
+void UnicodeTest::TestEmojiPropertiesOfStrings() {
+ // Property of code points, for coverage
+ assertFalse("null is not Ideographic", hbp(nullptr, 1, UCHAR_IDEOGRAPHIC));
+ assertFalse("null/0 is not Ideographic", hbp(nullptr, -1, UCHAR_IDEOGRAPHIC));
+ assertFalse("empty string is not Ideographic", hbp(u"", 0, UCHAR_IDEOGRAPHIC));
+ assertFalse("empty string/0 is not Ideographic", hbp(u"", -1, UCHAR_IDEOGRAPHIC));
+ assertFalse("L is not Ideographic", hbp(u"L", 1, UCHAR_IDEOGRAPHIC));
+ assertFalse("L/0 is not Ideographic", hbp(u"L", -1, UCHAR_IDEOGRAPHIC));
+ assertTrue("U+4E02 is Ideographic", hbp(u"丂", 1, UCHAR_IDEOGRAPHIC));
+ assertTrue("U+4E02/0 is Ideographic", hbp(u"丂", -1, UCHAR_IDEOGRAPHIC));
+ assertFalse("2*U+4E02 is not Ideographic", hbp(u"丂丂", 2, UCHAR_IDEOGRAPHIC));
+ assertFalse("2*U+4E02/0 is not Ideographic", hbp(u"丂丂", -1, UCHAR_IDEOGRAPHIC));
+ assertFalse("bicycle is not Ideographic", hbp(u"🚲", 2, UCHAR_IDEOGRAPHIC));
+ assertFalse("bicycle/0 is not Ideographic", hbp(u"🚲", -1, UCHAR_IDEOGRAPHIC));
+ assertTrue("U+23456 is Ideographic", hbp(u"\U00023456", 2, UCHAR_IDEOGRAPHIC));
+ assertTrue("U+23456/0 is Ideographic", hbp(u"\U00023456", -1, UCHAR_IDEOGRAPHIC));
+
+ // Property of (code points and) strings
+ assertFalse("null is not Basic_Emoji", hbp(nullptr, 1, UCHAR_BASIC_EMOJI));
+ assertFalse("null/0 is not Basic_Emoji", hbp(nullptr, -1, UCHAR_BASIC_EMOJI));
+ assertFalse("empty string is not Basic_Emoji", hbp(u"", 0, UCHAR_BASIC_EMOJI));
+ assertFalse("empty string/0 is not Basic_Emoji", hbp(u"", -1, UCHAR_BASIC_EMOJI));
+ assertFalse("L is not Basic_Emoji", hbp(u"L", 1, UCHAR_BASIC_EMOJI));
+ assertFalse("L/0 is not Basic_Emoji", hbp(u"L", -1, UCHAR_BASIC_EMOJI));
+ assertFalse("U+4E02 is not Basic_Emoji", hbp(u"丂", 1, UCHAR_BASIC_EMOJI));
+ assertFalse("U+4E02/0 is not Basic_Emoji", hbp(u"丂", -1, UCHAR_BASIC_EMOJI));
+ assertTrue("bicycle is Basic_Emoji", hbp(u"🚲", 2, UCHAR_BASIC_EMOJI));
+ assertTrue("bicycle/0 is Basic_Emoji", hbp(u"🚲", -1, UCHAR_BASIC_EMOJI));
+ assertFalse("2*bicycle is Basic_Emoji", hbp(u"🚲🚲", 4, UCHAR_BASIC_EMOJI));
+ assertFalse("2*bicycle/0 is Basic_Emoji", hbp(u"🚲🚲", -1, UCHAR_BASIC_EMOJI));
+ assertFalse("U+23456 is not Basic_Emoji", hbp(u"\U00023456", 2, UCHAR_BASIC_EMOJI));
+ assertFalse("U+23456/0 is not Basic_Emoji", hbp(u"\U00023456", -1, UCHAR_BASIC_EMOJI));
+
+ assertFalse("stopwatch is not Basic_Emoji", hbp(u"⏱", 1, UCHAR_BASIC_EMOJI));
+ assertFalse("stopwatch/0 is not Basic_Emoji", hbp(u"⏱", -1, UCHAR_BASIC_EMOJI));
+ assertTrue("stopwatch+emoji is Basic_Emoji", hbp(u"⏱\uFE0F", 2, UCHAR_BASIC_EMOJI));
+ assertTrue("stopwatch+emoji/0 is Basic_Emoji", hbp(u"⏱\uFE0F", -1, UCHAR_BASIC_EMOJI));
+
+ assertFalse("chipmunk is not Basic_Emoji", hbp(u"🐿", UCHAR_BASIC_EMOJI));
+ assertTrue("chipmunk+emoji is Basic_Emoji", hbp(u"🐿\uFE0F", UCHAR_BASIC_EMOJI));
+ assertFalse("chipmunk+2*emoji is not Basic_Emoji", hbp(u"🐿\uFE0F\uFE0F", UCHAR_BASIC_EMOJI));
+
+ // Properties of strings (only)
+ assertFalse("4+emoji is not Emoji_Keycap_Sequence",
+ hbp(u"4\uFE0F", UCHAR_EMOJI_KEYCAP_SEQUENCE));
+ assertTrue("4+emoji+keycap is Emoji_Keycap_Sequence",
+ hbp(u"4\uFE0F\u20E3", UCHAR_EMOJI_KEYCAP_SEQUENCE));
+
+ assertFalse("[B] is not RGI_Emoji_Flag_Sequence",
+ hbp(u"\U0001F1E7", UCHAR_RGI_EMOJI_FLAG_SEQUENCE));
+ assertTrue("[BE] is RGI_Emoji_Flag_Sequence",
+ hbp(u"🇧🇪", UCHAR_RGI_EMOJI_FLAG_SEQUENCE));
+
+ assertFalse("[flag] is not RGI_Emoji_Tag_Sequence",
+ hbp(u"\U0001F3F4", UCHAR_RGI_EMOJI_TAG_SEQUENCE));
+ assertTrue("[Scotland] is RGI_Emoji_Tag_Sequence",
+ hbp(u"🏴󠁧󠁢󠁳󠁣󠁴󠁿", UCHAR_RGI_EMOJI_TAG_SEQUENCE));
+
+ assertFalse("bicyclist is not RGI_Emoji_Modifier_Sequence",
+ hbp(u"🚴", UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE));
+ assertTrue("bicyclist+medium is RGI_Emoji_Modifier_Sequence",
+ hbp(u"🚴\U0001F3FD", UCHAR_RGI_EMOJI_MODIFIER_SEQUENCE));
+
+ assertFalse("woman+dark+ZWJ is not RGI_Emoji_ZWJ_Sequence",
+ hbp(u"👩\U0001F3FF\u200D", UCHAR_RGI_EMOJI_ZWJ_SEQUENCE));
+ assertTrue("woman pilot: dark skin tone is RGI_Emoji_ZWJ_Sequence",
+ hbp(u"👩\U0001F3FF\u200D✈\uFE0F", UCHAR_RGI_EMOJI_ZWJ_SEQUENCE));
+
+ // RGI_Emoji = all of the above
+ assertFalse("stopwatch is not RGI_Emoji", hbp(u"⏱", UCHAR_RGI_EMOJI));
+ assertTrue("stopwatch+emoji is RGI_Emoji", hbp(u"⏱\uFE0F", UCHAR_RGI_EMOJI));
+
+ assertFalse("chipmunk is not RGI_Emoji", hbp(u"🐿", UCHAR_RGI_EMOJI));
+ assertTrue("chipmunk+emoji is RGI_Emoji", hbp(u"🐿\uFE0F", UCHAR_RGI_EMOJI));
+
+ assertFalse("4+emoji is not RGI_Emoji", hbp(u"4\uFE0F", UCHAR_RGI_EMOJI));
+ assertTrue("4+emoji+keycap is RGI_Emoji", hbp(u"4\uFE0F\u20E3", UCHAR_RGI_EMOJI));
+
+ assertFalse("[B] is not RGI_Emoji", hbp(u"\U0001F1E7", UCHAR_RGI_EMOJI));
+ assertTrue("[BE] is RGI_Emoji", hbp(u"🇧🇪", UCHAR_RGI_EMOJI));
+
+ assertTrue("[flag] is RGI_Emoji", hbp(u"\U0001F3F4", UCHAR_RGI_EMOJI));
+ assertTrue("[Scotland] is RGI_Emoji", hbp(u"🏴󠁧󠁢󠁳󠁣󠁴󠁿", UCHAR_RGI_EMOJI));
+
+ assertTrue("bicyclist is RGI_Emoji", hbp(u"🚴", UCHAR_RGI_EMOJI));
+ assertTrue("bicyclist+medium is RGI_Emoji", hbp(u"🚴\U0001F3FD", UCHAR_RGI_EMOJI));
+
+ assertFalse("woman+dark+ZWJ is not RGI_Emoji", hbp(u"👩\U0001F3FF\u200D", UCHAR_RGI_EMOJI));
+ assertTrue("woman pilot: dark skin tone is RGI_Emoji",
+ hbp(u"👩\U0001F3FF\u200D✈\uFE0F", UCHAR_RGI_EMOJI));
+
+ // UnicodeSet with properties of strings
+ IcuTestErrorCode errorCode(*this, "TestEmojiPropertiesOfStrings()");
+ UnicodeSet basic("[:Basic_Emoji:]", errorCode);
+ UnicodeSet keycaps("[:Emoji_Keycap_Sequence:]", errorCode);
+ UnicodeSet modified("[:RGI_Emoji_Modifier_Sequence:]", errorCode);
+ UnicodeSet flags("[:RGI_Emoji_Flag_Sequence:]", errorCode);
+ UnicodeSet tags("[:RGI_Emoji_Tag_Sequence:]", errorCode);
+ UnicodeSet combos("[:RGI_Emoji_ZWJ_Sequence:]", errorCode);
+ UnicodeSet rgi("[:RGI_Emoji:]", errorCode);
+ if (errorCode.errDataIfFailureAndReset("UnicodeSets")) {
+ return;
+ }
+
+ // union of all sets except for "rgi" -- should be the same as "rgi"
+ UnicodeSet all(basic);
+ all.addAll(keycaps).addAll(modified).addAll(flags).addAll(tags).addAll(combos);
+
+ UnicodeSet basicOnlyCp(basic);
+ basicOnlyCp.removeAllStrings();
+
+ UnicodeSet rgiOnlyCp(rgi);
+ rgiOnlyCp.removeAllStrings();
+
+ assertTrue("lots of Basic_Emoji", basic.size() > 1000);
+ assertEquals("12 Emoji_Keycap_Sequence", 12, keycaps.size());
+ assertTrue("lots of RGI_Emoji_Modifier_Sequence", modified.size() > 600);
+ assertTrue("lots of RGI_Emoji_Flag_Sequence", flags.size() > 250);
+ assertTrue("some RGI_Emoji_Tag_Sequence", tags.size() >= 3);
+ assertTrue("lots of RGI_Emoji_ZWJ_Sequence", combos.size() > 1300);
+ assertTrue("lots of RGI_Emoji", rgi.size() > 3000);
+
+ assertTrue("lots of Basic_Emoji code points", basicOnlyCp.size() > 1000);
+ assertTrue("Basic_Emoji.hasStrings()", basic.hasStrings());
+ assertEquals("no Emoji_Keycap_Sequence code points", 0, keycaps.getRangeCount());
+ assertEquals("lots of RGI_Emoji_Modifier_Sequence", 0, modified.getRangeCount());
+ assertEquals("lots of RGI_Emoji_Flag_Sequence", 0, flags.getRangeCount());
+ assertEquals("some RGI_Emoji_Tag_Sequence", 0, tags.getRangeCount());
+ assertEquals("lots of RGI_Emoji_ZWJ_Sequence", 0, combos.getRangeCount());
+
+ assertTrue("lots of RGI_Emoji code points", rgiOnlyCp.size() > 1000);
+ assertTrue("RGI_Emoji.hasStrings()", rgi.hasStrings());
+ assertEquals("RGI_Emoji/only-cp.size() == Basic_Emoji/only-cp.size()",
+ rgiOnlyCp.size(), basicOnlyCp.size());
+ assertTrue("RGI_Emoji/only-cp == Basic_Emoji/only-cp", rgiOnlyCp == basicOnlyCp);
+ assertEquals("RGI_Emoji.size() == union.size()", rgi.size(), all.size());
+ assertTrue("RGI_Emoji == union", rgi == all);
+
+ assertTrue("Basic_Emoji.contains(stopwatch+emoji)", basic.contains(u"⏱\uFE0F"));
+ assertTrue("Basic_Emoji.contains(chipmunk+emoji)", basic.contains(u"🐿\uFE0F"));
+ assertTrue("Emoji_Keycap_Sequence.contains(4+emoji+keycap)",
+ keycaps.contains(u"4\uFE0F\u20E3"));
+ assertTrue("RGI_Emoji_Flag_Sequence.contains([BE])", flags.contains(u"🇧🇪"));
+ assertTrue("RGI_Emoji_Tag_Sequence.contains([Scotland])", tags.contains(u"🏴󠁧󠁢󠁳󠁣󠁴󠁿"));
+ assertTrue("RGI_Emoji_Modifier_Sequence.contains(bicyclist+medium)",
+ modified.contains(u"🚴\U0001F3FD"));
+ assertTrue("RGI_Emoji_ZWJ_Sequence.contains(woman pilot: dark skin tone)",
+ combos.contains(u"👩\U0001F3FF\u200D✈\uFE0F"));
+ assertTrue("RGI_Emoji.contains(stopwatch+emoji)", rgi.contains(u"⏱\uFE0F"));
+ assertTrue("RGI_Emoji.contains(chipmunk+emoji)", rgi.contains(u"🐿\uFE0F"));
+ assertTrue("RGI_Emoji.contains(4+emoji+keycap)", rgi.contains(u"4\uFE0F\u20E3"));
+ assertTrue("RGI_Emoji.contains([BE] is RGI_Emoji)", rgi.contains(u"🇧🇪"));
+ assertTrue("RGI_Emoji.contains([flag])", rgi.contains(u"\U0001F3F4"));
+ assertTrue("RGI_Emoji.contains([Scotland])", rgi.contains(u"🏴󠁧󠁢󠁳󠁣󠁴󠁿"));
+ assertTrue("RGI_Emoji.contains(bicyclist)", rgi.contains(u"🚴"));
+ assertTrue("RGI_Emoji.contains(bicyclist+medium)", rgi.contains(u"🚴\U0001F3FD"));
+ assertTrue("RGI_Emoji.contains(woman pilot: dark skin tone)", rgi.contains(u"👩\U0001F3FF\u200D✈\uFE0F"));
+}
+
void UnicodeTest::TestIndicPositionalCategory() {
IcuTestErrorCode errorCode(*this, "TestIndicPositionalCategory()");
UnicodeSet na(u"[:InPC=NA:]", errorCode);
@@ -633,8 +805,8 @@ void UnicodeTest::TestBinaryCharacterProperties() {
continue;
}
const UnicodeSet &set = *UnicodeSet::fromUSet(uset);
- int32_t size = set.size();
- if (size == 0) {
+ int32_t count = set.getRangeCount();
+ if (count == 0) {
assertFalse(UnicodeString("!hasBinaryProperty(U+0020, ") + prop + u")",
u_hasBinaryProperty(0x20, (UProperty)prop));
assertFalse(UnicodeString("!hasBinaryProperty(U+0061, ") + prop + u")",
@@ -642,7 +814,7 @@ void UnicodeTest::TestBinaryCharacterProperties() {
assertFalse(UnicodeString("!hasBinaryProperty(U+4E00, ") + prop + u")",
u_hasBinaryProperty(0x4e00, (UProperty)prop));
} else {
- UChar32 c = set.charAt(0);
+ UChar32 c = set.getRangeStart(0);
if (c > 0) {
assertFalse(
UnicodeString("!hasBinaryProperty(") + TestUtility::hex(c - 1) +
@@ -653,7 +825,7 @@ void UnicodeTest::TestBinaryCharacterProperties() {
UnicodeString("hasBinaryProperty(") + TestUtility::hex(c) +
u", " + prop + u")",
u_hasBinaryProperty(c, (UProperty)prop));
- c = set.charAt(size - 1);
+ c = set.getRangeEnd(count - 1);
assertTrue(
UnicodeString("hasBinaryProperty(") + TestUtility::hex(c) +
u", " + prop + u")",
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.h
index 2ed1395b50f..18ae255ae2e 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.h
@@ -32,7 +32,7 @@ public:
UnicodeTest();
virtual ~UnicodeTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
void TestAdditionalProperties();
void TestBinaryValues();
@@ -41,6 +41,7 @@ public:
void TestScriptMetadata();
void TestBidiPairedBracketType();
void TestEmojiProperties();
+ void TestEmojiPropertiesOfStrings();
void TestIndicPositionalCategory();
void TestIndicSyllabicCategory();
void TestVerticalOrientation();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ucharstrietest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/ucharstrietest.cpp
index 394c48b3b59..bab827eb390 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ucharstrietest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ucharstrietest.cpp
@@ -37,7 +37,7 @@ public:
UCharsTrieTest();
virtual ~UCharsTrieTest();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
void TestBuilder();
void TestEmpty();
void Test_a();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/unifiedcachetest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/unifiedcachetest.cpp
index 0525d475c0a..cb98a66bba9 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/unifiedcachetest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/unifiedcachetest.cpp
@@ -69,7 +69,7 @@ class UnifiedCacheTest : public IntlTest {
public:
UnifiedCacheTest() {
}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0) override;
private:
void TestEvictionPolicy();
void TestBounded();
@@ -122,7 +122,7 @@ void UnifiedCacheTest::TestEvictionPolicy() {
UnifiedCache cache(status);
assertSuccess("", status);
- // Don't allow unused entries to exeed more than 100% of in use entries.
+ // Don't allow unused entries to exceed more than 100% of in use entries.
cache.setEvictionPolicy(0, 100, status);
static const char *locales[] = {
@@ -152,7 +152,7 @@ void UnifiedCacheTest::TestEvictionPolicy() {
}
unusedReference->removeRef();
- // unused count not to exeed in use count
+ // unused count not to exceed in use count
assertEquals("T1", UPRV_LENGTHOF(usedReferences), cache.unusedCount());
assertEquals("T2", 2*UPRV_LENGTHOF(usedReferences), cache.keyCount());
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp
index 18464516146..ece7235ca68 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/units_data_test.cpp
@@ -5,18 +5,22 @@
#if !UCONFIG_NO_FORMATTING
+#include "measunit_impl.h"
#include "units_data.h"
+
#include "intltest.h"
using namespace ::icu::units;
+// These test are no in ICU4J. TODO: consider porting them to Java?
class UnitsDataTest : public IntlTest {
public:
UnitsDataTest() {}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL) override;
void testGetUnitCategory();
+ // This is a sanity check that only exists in ICU4C.
void testGetAllConversionRates();
void testGetPreferencesFor();
};
@@ -38,19 +42,25 @@ void UnitsDataTest::testGetUnitCategory() {
const char *expectedCategory;
} testCases[]{
{"kilogram-per-cubic-meter", "mass-density"},
+ {"cubic-meter-per-kilogram", "specific-volume"},
+ {"meter-per-second", "speed"},
+ {"second-per-meter", "speed"},
+ // TODO: add this test cases once the `getUnitCategory` accepts any `MeasureUnit` and not only
+ // base units.
+ // Tests are:
+ // {"liter-per-100-kilometer", "consumption"},
+ // {"mile-per-gallon", "consumption"},
{"cubic-meter-per-meter", "consumption"},
- // TODO(CLDR-13787,hugovdm): currently we're treating
- // consumption-inverse as a separate category. Once consumption
- // preference handling has been clarified by CLDR-13787, this function
- // should be fixed.
- {"meter-per-cubic-meter", "consumption-inverse"},
+ {"meter-per-cubic-meter", "consumption"},
+ {"kilogram-meter-per-square-meter-square-second", "pressure"},
};
IcuTestErrorCode status(*this, "testGetUnitCategory");
for (const auto &t : testCases) {
- CharString category = getUnitCategory(t.unit, status);
- status.errIfFailureAndReset("getUnitCategory(%s)", t.unit);
- assertEquals("category", t.expectedCategory, category.data());
+ CharString category = getUnitQuantity(MeasureUnitImpl::forIdentifier(t.unit, status), status);
+ if (!status.errIfFailureAndReset("getUnitCategory(%s)", t.unit)) {
+ assertEquals("category", t.expectedCategory, category.data());
+ }
}
}
@@ -107,10 +117,9 @@ void UnitsDataTest::testGetPreferencesFor() {
{"XX default falls back to 001", "length", "default", "XX", WorldLenMax, WorldLenMin},
{"Unknown usage US", "length", "foobar", "US", USLenMax, USLenMin},
{"Unknown usage 001", "length", "foobar", "XX", WorldLenMax, WorldLenMin},
- {"Fallback", "length", "person-height-xyzzy", "DE", "meter-and-centimeter",
- "meter-and-centimeter"},
- {"Fallback twice", "length", "person-height-xyzzy-foo", "DE", "meter-and-centimeter",
- "meter-and-centimeter"},
+ {"Fallback", "length", "person-height-xyzzy", "DE", "centimeter", "centimeter"},
+ {"Fallback twice", "length", "person-height-xyzzy-foo", "DE", "centimeter",
+ "centimeter"},
// Confirming results for some unitPreferencesTest.txt test cases
{"001 area", "area", "default", "001", "square-kilometer", "square-centimeter"},
{"GB area", "area", "default", "GB", "square-mile", "square-inch"},
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp
index d43e1c85319..6cffc2d6ce4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/units_router_test.cpp
@@ -14,7 +14,7 @@ class UnitsRouterTest : public IntlTest {
public:
UnitsRouterTest() {}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL) override;
void testBasic();
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp
index a853dd79a8a..c65a5e03229 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/units_test.cpp
@@ -16,6 +16,7 @@
#include "putilimp.h"
#include "unicode/ctest.h"
#include "unicode/measunit.h"
+#include "unicode/measure.h"
#include "unicode/unistr.h"
#include "unicode/unum.h"
#include "unicode/ures.h"
@@ -40,18 +41,16 @@ class UnitsTest : public IntlTest {
public:
UnitsTest() {}
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = NULL) override;
void testUnitConstantFreshness();
- void testConversionCapability();
- void testConversions();
+ void testExtractConvertibility();
+ void testConversionInfo();
+ void testConverterWithCLDRTests();
void testComplexUnitsConverter();
- void testComplexUnitConverterSorting();
- void testPreferences();
- void testSiPrefixes();
- void testMass();
- void testTemperature();
- void testArea();
+ void testComplexUnitsConverterSorting();
+ void testUnitPreferencesWithCLDRTests();
+ void testConverter();
};
extern IntlTest *createUnitsTest() { return new UnitsTest(); }
@@ -62,15 +61,13 @@ void UnitsTest::runIndexedTest(int32_t index, UBool exec, const char *&name, cha
}
TESTCASE_AUTO_BEGIN;
TESTCASE_AUTO(testUnitConstantFreshness);
- TESTCASE_AUTO(testConversionCapability);
- TESTCASE_AUTO(testConversions);
+ TESTCASE_AUTO(testExtractConvertibility);
+ TESTCASE_AUTO(testConversionInfo);
+ TESTCASE_AUTO(testConverterWithCLDRTests);
TESTCASE_AUTO(testComplexUnitsConverter);
- TESTCASE_AUTO(testComplexUnitConverterSorting);
- TESTCASE_AUTO(testPreferences);
- TESTCASE_AUTO(testSiPrefixes);
- TESTCASE_AUTO(testMass);
- TESTCASE_AUTO(testTemperature);
- TESTCASE_AUTO(testArea);
+ TESTCASE_AUTO(testComplexUnitsConverterSorting);
+ TESTCASE_AUTO(testUnitPreferencesWithCLDRTests);
+ TESTCASE_AUTO(testConverter);
TESTCASE_AUTO_END;
}
@@ -92,7 +89,8 @@ void UnitsTest::testUnitConstantFreshness() {
if (status.errDataIfFailureAndReset(
"addSingleFactorConstant(<%s>, ...).\n\n"
"If U_INVALID_FORMAT_ERROR, please check that \"icu4c/source/i18n/units_converter.cpp\" "
- "has all constants? Is \"%s\" a new constant?\n",
+ "has all constants? Is \"%s\" a new constant?\n"
+ "See docs/processes/release/tasks/updating-measure-unit.md for more information.\n",
constant, constant)) {
continue;
}
@@ -122,7 +120,9 @@ void UnitsTest::testUnitConstantFreshness() {
}
}
-void UnitsTest::testConversionCapability() {
+void UnitsTest::testExtractConvertibility() {
+ IcuTestErrorCode status(*this, "UnitsTest::testExtractConvertibility");
+
struct TestCase {
const char *const source;
const char *const target;
@@ -137,16 +137,37 @@ void UnitsTest::testConversionCapability() {
{"square-hectare", "pow4-foot", CONVERTIBLE}, //
{"square-kilometer-per-second", "second-per-square-meter", RECIPROCAL}, //
{"cubic-kilometer-per-second-meter", "second-per-square-meter", RECIPROCAL}, //
+ {"square-meter-per-square-hour", "hectare-per-square-second", CONVERTIBLE}, //
+ {"hertz", "revolution-per-second", CONVERTIBLE}, //
+ {"millimeter", "meter", CONVERTIBLE}, //
+ {"yard", "meter", CONVERTIBLE}, //
+ {"ounce-troy", "kilogram", CONVERTIBLE}, //
+ {"percent", "portion", CONVERTIBLE}, //
+ {"ofhg", "kilogram-per-square-meter-square-second", CONVERTIBLE}, //
+ {"second-per-meter", "meter-per-second", RECIPROCAL}, //
};
for (const auto &testCase : testCases) {
- UErrorCode status = U_ZERO_ERROR;
-
MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
+ if (status.errIfFailureAndReset("source MeasureUnitImpl::forIdentifier(\"%s\", ...)",
+ testCase.source)) {
+ continue;
+ }
MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+ if (status.errIfFailureAndReset("target MeasureUnitImpl::forIdentifier(\"%s\", ...)",
+ testCase.target)) {
+ continue;
+ }
ConversionRates conversionRates(status);
+ if (status.errIfFailureAndReset("conversionRates(status)")) {
+ continue;
+ }
auto convertibility = extractConvertibility(source, target, conversionRates, status);
+ if (status.errIfFailureAndReset("extractConvertibility(<%s>, <%s>, ...)", testCase.source,
+ testCase.target)) {
+ continue;
+ }
assertEquals(UnicodeString("Conversion Capability: ") + testCase.source + " to " +
testCase.target,
@@ -154,78 +175,97 @@ void UnitsTest::testConversionCapability() {
}
}
-void UnitsTest::testSiPrefixes() {
- IcuTestErrorCode status(*this, "Units testSiPrefixes");
+void UnitsTest::testConversionInfo() {
+ IcuTestErrorCode status(*this, "UnitsTest::testExtractConvertibility");
// Test Cases
struct TestCase {
const char *source;
const char *target;
- const double inputValue;
- const double expectedValue;
+ const ConversionInfo expectedConversionInfo;
} testCases[]{
- {"gram", "kilogram", 1.0, 0.001}, //
- {"milligram", "kilogram", 1.0, 0.000001}, //
- {"microgram", "kilogram", 1.0, 0.000000001}, //
- {"megagram", "gram", 1.0, 1000000}, //
- {"megagram", "kilogram", 1.0, 1000}, //
- {"gigabyte", "byte", 1.0, 1000000000}, //
- // TODO: Fix `watt` probelms.
- // {"megawatt", "watt", 1.0, 1000000}, //
- // {"megawatt", "kilowatt", 1.0, 1000}, //
+ {
+ "meter",
+ "meter",
+ {1.0, 0, false},
+ },
+ {
+ "meter",
+ "foot",
+ {3.28084, 0, false},
+ },
+ {
+ "foot",
+ "meter",
+ {0.3048, 0, false},
+ },
+ {
+ "celsius",
+ "kelvin",
+ {1, 273.15, false},
+ },
+ {
+ "fahrenheit",
+ "kelvin",
+ {5.0 / 9.0, 255.372, false},
+ },
+ {
+ "fahrenheit",
+ "celsius",
+ {5.0 / 9.0, -17.7777777778, false},
+ },
+ {
+ "celsius",
+ "fahrenheit",
+ {9.0 / 5.0, 32, false},
+ },
+ {
+ "fahrenheit",
+ "fahrenheit",
+ {1.0, 0, false},
+ },
+ {
+ "mile-per-gallon",
+ "liter-per-100-kilometer",
+ {0.00425143707, 0, true},
+ },
};
+ ConversionRates rates(status);
for (const auto &testCase : testCases) {
- UErrorCode status = U_ZERO_ERROR;
+ auto sourceImpl = MeasureUnitImpl::forIdentifier(testCase.source, status);
+ auto targetImpl = MeasureUnitImpl::forIdentifier(testCase.target, status);
+ UnitsConverter unitsConverter(sourceImpl, targetImpl, rates, status);
- MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
- MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
-
- ConversionRates conversionRates(status);
- UnitConverter converter(source, target, conversionRates, status);
-
- assertEqualsNear(UnicodeString("testSiPrefixes: ") + testCase.source + " to " + testCase.target,
- testCase.expectedValue, converter.convert(testCase.inputValue),
- 0.0001 * testCase.expectedValue);
- }
-}
-
-void UnitsTest::testMass() {
- IcuTestErrorCode status(*this, "Units testMass");
-
- // Test Cases
- struct TestCase {
- const char *source;
- const char *target;
- const double inputValue;
- const double expectedValue;
- } testCases[]{
- {"gram", "kilogram", 1.0, 0.001}, //
- {"pound", "kilogram", 1.0, 0.453592}, //
- {"pound", "kilogram", 2.0, 0.907185}, //
- {"ounce", "pound", 16.0, 1.0}, //
- {"ounce", "kilogram", 16.0, 0.453592}, //
- {"ton", "pound", 1.0, 2000}, //
- {"stone", "pound", 1.0, 14}, //
- {"stone", "kilogram", 1.0, 6.35029} //
- };
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
- for (const auto &testCase : testCases) {
- UErrorCode status = U_ZERO_ERROR;
+ ConversionInfo actualConversionInfo = unitsConverter.getConversionInfo();
+ UnicodeString message =
+ UnicodeString("testConverter: ") + testCase.source + " to " + testCase.target;
- MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
- MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+ double maxDelta = 1e-6 * uprv_fabs(testCase.expectedConversionInfo.conversionRate);
+ if (testCase.expectedConversionInfo.conversionRate == 0) {
+ maxDelta = 1e-12;
+ }
+ assertEqualsNear(message + ", conversion rate: ", testCase.expectedConversionInfo.conversionRate,
+ actualConversionInfo.conversionRate, maxDelta);
- ConversionRates conversionRates(status);
- UnitConverter converter(source, target, conversionRates, status);
+ maxDelta = 1e-6 * uprv_fabs(testCase.expectedConversionInfo.offset);
+ if (testCase.expectedConversionInfo.offset == 0) {
+ maxDelta = 1e-12;
+ }
+ assertEqualsNear(message + ", offset: ", testCase.expectedConversionInfo.offset, actualConversionInfo.offset,
+ maxDelta);
- assertEqualsNear(UnicodeString("testMass: ") + testCase.source + " to " + testCase.target,
- testCase.expectedValue, converter.convert(testCase.inputValue),
- 0.0001 * testCase.expectedValue);
+ assertEquals(message + ", reciprocal: ", testCase.expectedConversionInfo.reciprocal,
+ actualConversionInfo.reciprocal);
}
}
-void UnitsTest::testTemperature() {
- IcuTestErrorCode status(*this, "Units testTemperature");
+void UnitsTest::testConverter() {
+ IcuTestErrorCode status(*this, "UnitsTest::testConverter");
+
// Test Cases
struct TestCase {
const char *source;
@@ -233,66 +273,129 @@ void UnitsTest::testTemperature() {
const double inputValue;
const double expectedValue;
} testCases[]{
- {"celsius", "fahrenheit", 0.0, 32.0}, //
- {"celsius", "fahrenheit", 10.0, 50.0}, //
- {"fahrenheit", "celsius", 32.0, 0.0}, //
- {"fahrenheit", "celsius", 89.6, 32}, //
- {"kelvin", "fahrenheit", 0.0, -459.67}, //
- {"kelvin", "fahrenheit", 300, 80.33}, //
- {"kelvin", "celsius", 0.0, -273.15}, //
- {"kelvin", "celsius", 300.0, 26.85} //
+ // SI Prefixes
+ {"gram", "kilogram", 1.0, 0.001},
+ {"milligram", "kilogram", 1.0, 0.000001},
+ {"microgram", "kilogram", 1.0, 0.000000001},
+ {"megagram", "gram", 1.0, 1000000},
+ {"megagram", "kilogram", 1.0, 1000},
+ {"gigabyte", "byte", 1.0, 1000000000},
+ {"megawatt", "watt", 1.0, 1000000},
+ {"megawatt", "kilowatt", 1.0, 1000},
+ // Binary Prefixes
+ {"kilobyte", "byte", 1, 1000},
+ {"kibibyte", "byte", 1, 1024},
+ {"mebibyte", "byte", 1, 1048576},
+ {"gibibyte", "kibibyte", 1, 1048576},
+ {"pebibyte", "tebibyte", 4, 4096},
+ {"zebibyte", "pebibyte", 1.0 / 16, 65536.0},
+ {"yobibyte", "exbibyte", 1, 1048576},
+ // Mass
+ {"gram", "kilogram", 1.0, 0.001},
+ {"pound", "kilogram", 1.0, 0.453592},
+ {"pound", "kilogram", 2.0, 0.907185},
+ {"ounce", "pound", 16.0, 1.0},
+ {"ounce", "kilogram", 16.0, 0.453592},
+ {"ton", "pound", 1.0, 2000},
+ {"stone", "pound", 1.0, 14},
+ {"stone", "kilogram", 1.0, 6.35029},
+ // Temperature
+ {"celsius", "fahrenheit", 0.0, 32.0},
+ {"celsius", "fahrenheit", 10.0, 50.0},
+ {"celsius", "fahrenheit", 1000, 1832},
+ {"fahrenheit", "celsius", 32.0, 0.0},
+ {"fahrenheit", "celsius", 89.6, 32},
+ {"fahrenheit", "fahrenheit", 1000, 1000},
+ {"kelvin", "fahrenheit", 0.0, -459.67},
+ {"kelvin", "fahrenheit", 300, 80.33},
+ {"kelvin", "celsius", 0.0, -273.15},
+ {"kelvin", "celsius", 300.0, 26.85},
+ // Area
+ {"square-meter", "square-yard", 10.0, 11.9599},
+ {"hectare", "square-yard", 1.0, 11959.9},
+ {"square-mile", "square-foot", 0.0001, 2787.84},
+ {"hectare", "square-yard", 1.0, 11959.9},
+ {"hectare", "square-meter", 1.0, 10000},
+ {"hectare", "square-meter", 0.0, 0.0},
+ {"square-mile", "square-foot", 0.0001, 2787.84},
+ {"square-yard", "square-foot", 10, 90},
+ {"square-yard", "square-foot", 0, 0},
+ {"square-yard", "square-foot", 0.000001, 0.000009},
+ {"square-mile", "square-foot", 0.0, 0.0},
+ // Fuel Consumption
+ {"cubic-meter-per-meter", "mile-per-gallon", 2.1383143939394E-6, 1.1},
+ {"cubic-meter-per-meter", "mile-per-gallon", 2.6134953703704E-6, 0.9},
+
+ // Test Aliases
+ // Alias is just another name to the same unit. Therefore, converting
+ // between them should be the same.
+ {"foodcalorie", "kilocalorie", 1.0, 1.0},
+ {"dot-per-centimeter", "pixel-per-centimeter", 1.0, 1.0},
+ {"dot-per-inch", "pixel-per-inch", 1.0, 1.0},
+ {"dot", "pixel", 1.0, 1.0},
+
};
for (const auto &testCase : testCases) {
- UErrorCode status = U_ZERO_ERROR;
-
MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
+ if (status.errIfFailureAndReset("source MeasureUnitImpl::forIdentifier(\"%s\", ...)",
+ testCase.source)) {
+ continue;
+ }
MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+ if (status.errIfFailureAndReset("target MeasureUnitImpl::forIdentifier(\"%s\", ...)",
+ testCase.target)) {
+ continue;
+ }
ConversionRates conversionRates(status);
- UnitConverter converter(source, target, conversionRates, status);
-
- assertEqualsNear(UnicodeString("testTemperature: ") + testCase.source + " to " + testCase.target,
- testCase.expectedValue, converter.convert(testCase.inputValue),
- 0.0001 * uprv_fabs(testCase.expectedValue));
- }
-}
+ if (status.errIfFailureAndReset("conversionRates(status)")) {
+ continue;
+ }
+ UnitsConverter converter(source, target, conversionRates, status);
+ if (status.errIfFailureAndReset("UnitsConverter(<%s>, <%s>, ...)", testCase.source,
+ testCase.target)) {
+ continue;
+ }
-void UnitsTest::testArea() {
- IcuTestErrorCode status(*this, "Units Area");
+ double maxDelta = 1e-6 * uprv_fabs(testCase.expectedValue);
+ if (testCase.expectedValue == 0) {
+ maxDelta = 1e-12;
+ }
+ assertEqualsNear(UnicodeString("testConverter: ") + testCase.source + " to " + testCase.target,
+ testCase.expectedValue, converter.convert(testCase.inputValue), maxDelta);
- // Test Cases
- struct TestCase {
- const char *source;
- const char *target;
- const double inputValue;
- const double expectedValue;
- } testCases[]{
- {"square-meter", "square-yard", 10.0, 11.9599}, //
- {"hectare", "square-yard", 1.0, 11959.9}, //
- {"square-mile", "square-foot", 0.0001, 2787.84}, //
- {"hectare", "square-yard", 1.0, 11959.9}, //
- {"hectare", "square-meter", 1.0, 10000}, //
- {"hectare", "square-meter", 0.0, 0.0}, //
- {"square-mile", "square-foot", 0.0001, 2787.84}, //
- {"square-yard", "square-foot", 10, 90}, //
- {"square-yard", "square-foot", 0, 0}, //
- {"square-yard", "square-foot", 0.000001, 0.000009}, //
- {"square-mile", "square-foot", 0.0, 0.0}, //
- };
+ maxDelta = 1e-6 * uprv_fabs(testCase.inputValue);
+ if (testCase.inputValue == 0) {
+ maxDelta = 1e-12;
+ }
+ assertEqualsNear(
+ UnicodeString("testConverter inverse: ") + testCase.target + " back to " + testCase.source,
+ testCase.inputValue, converter.convertInverse(testCase.expectedValue), maxDelta);
- for (const auto &testCase : testCases) {
- UErrorCode status = U_ZERO_ERROR;
- MeasureUnitImpl source = MeasureUnitImpl::forIdentifier(testCase.source, status);
- MeasureUnitImpl target = MeasureUnitImpl::forIdentifier(testCase.target, status);
+ // TODO: Test UnitsConverter created using CLDR separately.
+ // Test UnitsConverter created by CLDR unit identifiers
+ UnitsConverter converter2(testCase.source, testCase.target, status);
+ if (status.errIfFailureAndReset("UnitsConverter(<%s>, <%s>, ...)", testCase.source,
+ testCase.target)) {
+ continue;
+ }
- ConversionRates conversionRates(status);
- UnitConverter converter(source, target, conversionRates, status);
+ maxDelta = 1e-6 * uprv_fabs(testCase.expectedValue);
+ if (testCase.expectedValue == 0) {
+ maxDelta = 1e-12;
+ }
+ assertEqualsNear(UnicodeString("testConverter2: ") + testCase.source + " to " + testCase.target,
+ testCase.expectedValue, converter2.convert(testCase.inputValue), maxDelta);
- assertEqualsNear(UnicodeString("testArea: ") + testCase.source + " to " + testCase.target,
- testCase.expectedValue, converter.convert(testCase.inputValue),
- 0.0001 * testCase.expectedValue);
+ maxDelta = 1e-6 * uprv_fabs(testCase.inputValue);
+ if (testCase.inputValue == 0) {
+ maxDelta = 1e-12;
+ }
+ assertEqualsNear(
+ UnicodeString("testConverter2 inverse: ") + testCase.target + " back to " + testCase.source,
+ testCase.inputValue, converter2.convertInverse(testCase.expectedValue), maxDelta);
}
}
@@ -399,9 +502,9 @@ void unitsTestDataLineFn(void *context, char *fields[][2], int32_t fieldCount, U
unitsTest->assertNotEquals(msg.data(), UNCONVERTIBLE, convertibility);
// Conversion:
- UnitConverter converter(sourceUnit, targetUnit, *ctx->conversionRates, status);
- if (status.errIfFailureAndReset("constructor: UnitConverter(<%s>, <%s>, status)",
- sourceIdent.data(), targetIdent.data())) {
+ UnitsConverter converter(sourceUnit, targetUnit, *ctx->conversionRates, status);
+ if (status.errIfFailureAndReset("UnitsConverter(<%s>, <%s>, ...)", sourceIdent.data(),
+ targetIdent.data())) {
return;
}
double got = converter.convert(1000);
@@ -418,12 +521,12 @@ void unitsTestDataLineFn(void *context, char *fields[][2], int32_t fieldCount, U
* Runs data-driven unit tests for unit conversion. It looks for the test cases
* in source/test/testdata/cldr/units/unitsTest.txt, which originates in CLDR.
*/
-void UnitsTest::testConversions() {
+void UnitsTest::testConverterWithCLDRTests() {
const char *filename = "unitsTest.txt";
const int32_t kNumFields = 5;
char *fields[kNumFields][2];
- IcuTestErrorCode errorCode(*this, "UnitsTest::testConversions");
+ IcuTestErrorCode errorCode(*this, "UnitsTest::testConverterWithCLDRTests");
const char *sourceTestDataPath = getSourceTestData(errorCode);
if (errorCode.errIfFailureAndReset("unable to find the source/test/testdata "
"folder (getSourceTestData())")) {
@@ -444,115 +547,233 @@ void UnitsTest::testConversions() {
void UnitsTest::testComplexUnitsConverter() {
IcuTestErrorCode status(*this, "UnitsTest::testComplexUnitsConverter");
+
+ // DBL_EPSILON is approximately 2.22E-16, and is the precision of double for
+ // values in the range [1.0, 2.0), but half the precision of double for
+ // [2.0, 4.0).
+ U_ASSERT(1.0 + DBL_EPSILON > 1.0);
+ U_ASSERT(2.0 - DBL_EPSILON < 2.0);
+ U_ASSERT(2.0 + DBL_EPSILON == 2.0);
+
+ struct TestCase {
+ const char* msg;
+ const char* input;
+ const char* output;
+ double value;
+ Measure expected[2];
+ int32_t expectedCount;
+ // For mixed units, accuracy of the smallest unit
+ double accuracy;
+ } testCases[]{
+ // Significantly less than 2.0.
+ {"1.9999",
+ "foot",
+ "foot-and-inch",
+ 1.9999,
+ {Measure(1, MeasureUnit::createFoot(status), status),
+ Measure(11.9988, MeasureUnit::createInch(status), status)},
+ 2,
+ 0},
+
+ // A minimal nudge under 2.0, rounding up to 2.0 ft, 0 in.
+ {"2-eps",
+ "foot",
+ "foot-and-inch",
+ 2.0 - DBL_EPSILON,
+ {Measure(2, MeasureUnit::createFoot(status), status),
+ Measure(0, MeasureUnit::createInch(status), status)},
+ 2,
+ 0},
+
+ // A slightly bigger nudge under 2.0, *not* rounding up to 2.0 ft!
+ {"2-3eps",
+ "foot",
+ "foot-and-inch",
+ 2.0 - 3 * DBL_EPSILON,
+ {Measure(1, MeasureUnit::createFoot(status), status),
+ // We expect 12*3*DBL_EPSILON inches (7.92e-15) less than 12.
+ Measure(12 - 36 * DBL_EPSILON, MeasureUnit::createInch(status), status)},
+ 2,
+ // Might accuracy be lacking with some compilers or on some systems? In
+ // case it is somehow lacking, we'll allow a delta of 12 * DBL_EPSILON.
+ 12 * DBL_EPSILON},
+
+ // Testing precision with meter and light-year.
+ //
+ // DBL_EPSILON light-years, ~2.22E-16 light-years, is ~2.1 meters
+ // (maximum precision when exponent is 0).
+ //
+ // 1e-16 light years is 0.946073 meters.
+
+ // A 2.1 meter nudge under 2.0 light years, rounding up to 2.0 ly, 0 m.
+ {"2-eps",
+ "light-year",
+ "light-year-and-meter",
+ 2.0 - DBL_EPSILON,
+ {Measure(2, MeasureUnit::createLightYear(status), status),
+ Measure(0, MeasureUnit::createMeter(status), status)},
+ 2,
+ 0},
+
+ // A 2.1 meter nudge under 1.0 light years, rounding up to 1.0 ly, 0 m.
+ {"1-eps",
+ "light-year",
+ "light-year-and-meter",
+ 1.0 - DBL_EPSILON,
+ {Measure(1, MeasureUnit::createLightYear(status), status),
+ Measure(0, MeasureUnit::createMeter(status), status)},
+ 2,
+ 0},
+
+ // 1e-15 light years is 9.46073 meters (calculated using "bc" and the
+ // CLDR conversion factor). With double-precision maths in C++, we get
+ // 10.5. In this case, we're off by a bit more than 1 meter. With Java
+ // BigDecimal, we get accurate results.
+ {"1 + 1e-15",
+ "light-year",
+ "light-year-and-meter",
+ 1.0 + 1e-15,
+ {Measure(1, MeasureUnit::createLightYear(status), status),
+ Measure(9.46073, MeasureUnit::createMeter(status), status)},
+ 2,
+ 1.5 /* meters, precision */},
+
+ // 2.1 meters more than 1 light year is not rounded away.
+ {"1 + eps",
+ "light-year",
+ "light-year-and-meter",
+ 1.0 + DBL_EPSILON,
+ {Measure(1, MeasureUnit::createLightYear(status), status),
+ Measure(2.1, MeasureUnit::createMeter(status), status)},
+ 2,
+ 0.001},
+ };
+ status.assertSuccess();
+
ConversionRates rates(status);
- MeasureUnit input = MeasureUnit::getFoot();
- MeasureUnit output = MeasureUnit::forIdentifier("foot-and-inch", status);
+ MeasureUnit input, output;
MeasureUnitImpl tempInput, tempOutput;
- const MeasureUnitImpl &inputImpl = MeasureUnitImpl::forMeasureUnit(input, tempInput, status);
- const MeasureUnitImpl &outputImpl = MeasureUnitImpl::forMeasureUnit(output, tempOutput, status);
- auto converter = ComplexUnitsConverter(inputImpl, outputImpl, rates, status);
-
- // Significantly less than 2.0.
- MaybeStackVector<Measure> measures = converter.convert(1.9999, nullptr, status);
- assertEquals("measures length", 2, measures.length());
- if (2 == measures.length()) {
- assertEquals("1.9999: measures[0] value", 1.0, measures[0]->getNumber().getDouble(status));
- assertEquals("1.9999: measures[0] unit", MeasureUnit::getFoot().getIdentifier(),
- measures[0]->getUnit().getIdentifier());
- assertEqualsNear("1.9999: measures[1] value", 11.9988,
- measures[1]->getNumber().getDouble(status), 0.0001);
- assertEquals("1.9999: measures[1] unit", MeasureUnit::getInch().getIdentifier(),
- measures[1]->getUnit().getIdentifier());
- }
-
- // TODO(icu-units#100): consider factoring out the set of tests to make this function more
- // data-driven.
-
- // A minimal nudge under 2.0.
- measures = converter.convert((2.0 - DBL_EPSILON), nullptr, status);
- assertEquals("measures length", 2, measures.length());
- if (2 == measures.length()) {
- assertEquals("1 - eps: measures[0] value", 2.0, measures[0]->getNumber().getDouble(status));
- assertEquals("1 - eps: measures[0] unit", MeasureUnit::getFoot().getIdentifier(),
- measures[0]->getUnit().getIdentifier());
- assertEquals("1 - eps: measures[1] value", 0.0, measures[1]->getNumber().getDouble(status));
- assertEquals("1 - eps: measures[1] unit", MeasureUnit::getInch().getIdentifier(),
- measures[1]->getUnit().getIdentifier());
- }
-
- // Testing precision with meter and light-year. 1e-16 light years is
- // 0.946073 meters, and double precision can provide only ~15 decimal
- // digits, so we don't expect to get anything less than 1 meter.
-
- // An epsilon's nudge under one light-year: should give 1 ly, 0 m.
- input = MeasureUnit::getLightYear();
- output = MeasureUnit::forIdentifier("light-year-and-meter", status);
- const MeasureUnitImpl &inputImpl3 = MeasureUnitImpl::forMeasureUnit(input, tempInput, status);
- const MeasureUnitImpl &outputImpl3 = MeasureUnitImpl::forMeasureUnit(output, tempOutput, status);
- converter = ComplexUnitsConverter(inputImpl3, outputImpl3, rates, status);
- measures = converter.convert((2.0 - DBL_EPSILON), nullptr, status);
- assertEquals("measures length", 2, measures.length());
- if (2 == measures.length()) {
- assertEquals("light-year test: measures[0] value", 2.0,
- measures[0]->getNumber().getDouble(status));
- assertEquals("light-year test: measures[0] unit", MeasureUnit::getLightYear().getIdentifier(),
- measures[0]->getUnit().getIdentifier());
- assertEquals("light-year test: measures[1] value", 0.0,
- measures[1]->getNumber().getDouble(status));
- assertEquals("light-year test: measures[1] unit", MeasureUnit::getMeter().getIdentifier(),
- measures[1]->getUnit().getIdentifier());
- }
-
- // 1e-15 light years is 9.46073 meters (calculated using "bc" and the CLDR
- // conversion factor). With double-precision maths, we get 10.5. In this
- // case, we're off by almost 1 meter.
- measures = converter.convert((1.0 + 1e-15), nullptr, status);
- assertEquals("measures length", 2, measures.length());
- if (2 == measures.length()) {
- assertEquals("light-year test: measures[0] value", 1.0,
- measures[0]->getNumber().getDouble(status));
- assertEquals("light-year test: measures[0] unit", MeasureUnit::getLightYear().getIdentifier(),
- measures[0]->getUnit().getIdentifier());
- assertEqualsNear("light-year test: measures[1] value", 10,
- measures[1]->getNumber().getDouble(status), 1);
- assertEquals("light-year test: measures[1] unit", MeasureUnit::getMeter().getIdentifier(),
- measures[1]->getUnit().getIdentifier());
- }
-
- // 2e-16 light years is 1.892146 meters. We consider this in the noise, and
- // thus expect a 0. (This test fails when 2e-16 is increased to 4e-16.)
- measures = converter.convert((1.0 + 2e-16), nullptr, status);
- assertEquals("measures length", 2, measures.length());
- if (2 == measures.length()) {
- assertEquals("light-year test: measures[0] value", 1.0,
- measures[0]->getNumber().getDouble(status));
- assertEquals("light-year test: measures[0] unit", MeasureUnit::getLightYear().getIdentifier(),
- measures[0]->getUnit().getIdentifier());
- assertEquals("light-year test: measures[1] value", 0.0,
- measures[1]->getNumber().getDouble(status));
- assertEquals("light-year test: measures[1] unit", MeasureUnit::getMeter().getIdentifier(),
- measures[1]->getUnit().getIdentifier());
+ MaybeStackVector<Measure> measures;
+ auto testATestCase = [&](const ComplexUnitsConverter& converter ,StringPiece initMsg , const TestCase &testCase) {
+ measures = converter.convert(testCase.value, nullptr, status);
+
+ CharString msg(initMsg, status);
+ msg.append(testCase.msg, status);
+ msg.append(" ", status);
+ msg.append(testCase.input, status);
+ msg.append(" -> ", status);
+ msg.append(testCase.output, status);
+
+ CharString msgCount(msg, status);
+ msgCount.append(", measures.length()", status);
+ assertEquals(msgCount.data(), testCase.expectedCount, measures.length());
+ for (int i = 0; i < measures.length() && i < testCase.expectedCount; i++) {
+ if (i == testCase.expectedCount-1) {
+ assertEqualsNear(msg.data(), testCase.expected[i].getNumber().getDouble(status),
+ measures[i]->getNumber().getDouble(status), testCase.accuracy);
+ } else {
+ assertEquals(msg.data(), testCase.expected[i].getNumber().getDouble(status),
+ measures[i]->getNumber().getDouble(status));
+ }
+ assertEquals(msg.data(), testCase.expected[i].getUnit().getIdentifier(),
+ measures[i]->getUnit().getIdentifier());
+ }
+ };
+
+ for (const auto &testCase : testCases)
+ {
+ input = MeasureUnit::forIdentifier(testCase.input, status);
+ output = MeasureUnit::forIdentifier(testCase.output, status);
+ const MeasureUnitImpl& inputImpl = MeasureUnitImpl::forMeasureUnit(input, tempInput, status);
+ const MeasureUnitImpl& outputImpl = MeasureUnitImpl::forMeasureUnit(output, tempOutput, status);
+
+ ComplexUnitsConverter converter1(inputImpl, outputImpl, rates, status);
+ testATestCase(converter1, "ComplexUnitsConverter #1 " , testCase);
+
+ // Test ComplexUnitsConverter created with CLDR units identifiers.
+ ComplexUnitsConverter converter2( testCase.input, testCase.output, status);
+ testATestCase(converter2, "ComplexUnitsConverter #1 " , testCase);
}
+
+
+ status.assertSuccess();
// TODO(icu-units#63): test negative numbers!
}
-void UnitsTest::testComplexUnitConverterSorting() {
- IcuTestErrorCode status(*this, "UnitsTest::testComplexUnitConverterSorting");
-
- MeasureUnitImpl source = MeasureUnitImpl::forIdentifier("meter", status);
- MeasureUnitImpl target = MeasureUnitImpl::forIdentifier("inch-and-foot", status);
+void UnitsTest::testComplexUnitsConverterSorting() {
+ IcuTestErrorCode status(*this, "UnitsTest::testComplexUnitsConverterSorting");
ConversionRates conversionRates(status);
- ComplexUnitsConverter complexConverter(source, target, conversionRates, status);
- auto measures = complexConverter.convert(10.0, nullptr, status);
+ status.assertSuccess();
- if (2 == measures.length()) {
- assertEquals("inch-and-foot unit 0", "inch", measures[0]->getUnit().getIdentifier());
- assertEquals("inch-and-foot unit 1", "foot", measures[1]->getUnit().getIdentifier());
+ struct TestCase {
+ const char *msg;
+ const char *input;
+ const char *output;
+ double inputValue;
+ Measure expected[3];
+ int32_t expectedCount;
+ // For mixed units, accuracy of the smallest unit
+ double accuracy;
+ } testCases[]{{"inch-and-foot",
+ "meter",
+ "inch-and-foot",
+ 10.0,
+ {
+ Measure(9.70079, MeasureUnit::createInch(status), status),
+ Measure(32, MeasureUnit::createFoot(status), status),
+ Measure(0, MeasureUnit::createBit(status), status),
+ },
+ 2,
+ 0.00001},
+ {"inch-and-yard-and-foot",
+ "meter",
+ "inch-and-yard-and-foot",
+ 100.0,
+ {
+ Measure(1.0079, MeasureUnit::createInch(status), status),
+ Measure(109, MeasureUnit::createYard(status), status),
+ Measure(1, MeasureUnit::createFoot(status), status),
+ },
+ 3,
+ 0.0001}};
- assertEqualsNear("inch-and-foot value 0", 9.7008, measures[0]->getNumber().getDouble(), 0.0001);
- assertEqualsNear("inch-and-foot value 1", 32, measures[1]->getNumber().getInt64(), 0.00001);
+ for (const auto &testCase : testCases) {
+ MeasureUnitImpl inputImpl = MeasureUnitImpl::forIdentifier(testCase.input, status);
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
+ MeasureUnitImpl outputImpl = MeasureUnitImpl::forIdentifier(testCase.output, status);
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
+ ComplexUnitsConverter converter(inputImpl, outputImpl, conversionRates, status);
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
+
+ auto actual = converter.convert(testCase.inputValue, nullptr, status);
+ if (status.errIfFailureAndReset()) {
+ continue;
+ }
+ if (actual.length() < testCase.expectedCount) {
+ errln("converter.convert(...) returned too few Measures");
+ continue;
+ }
+
+ for (int i = 0; i < testCase.expectedCount; i++) {
+ assertEquals(testCase.msg, testCase.expected[i].getUnit().getIdentifier(),
+ actual[i]->getUnit().getIdentifier());
+
+ if (testCase.expected[i].getNumber().getType() == Formattable::Type::kInt64) {
+ assertEquals(testCase.msg, testCase.expected[i].getNumber().getInt64(),
+ actual[i]->getNumber().getInt64());
+ } else {
+ assertEqualsNear(testCase.msg, testCase.expected[i].getNumber().getDouble(),
+ actual[i]->getNumber().getDouble(), testCase.accuracy);
+ }
+ }
}
}
@@ -752,6 +973,35 @@ void unitPreferencesTestDataLineFn(void *context, char *fields[][2], int32_t fie
}
// TODO: revisit this experimentally chosen precision:
checkOutput(unitsTest, msg.data(), expected, routeResult.measures, 0.0000000001);
+
+ // Test UnitsRouter created with CLDR units identifiers.
+ CharString inputUnitIdentifier(inputUnit, status);
+ UnitsRouter router2(inputUnitIdentifier.data(), region, usage, status);
+ if (status.errIfFailureAndReset("UnitsRouter2(<%s>, \"%.*s\", \"%.*s\", status)",
+ inputUnitIdentifier.data(), region.length(), region.data(),
+ usage.length(), usage.data())) {
+ return;
+ }
+
+ CharString msg2(quantity, status);
+ msg2.append(" ", status);
+ msg2.append(usage, status);
+ msg2.append(" ", status);
+ msg2.append(region, status);
+ msg2.append(" ", status);
+ msg2.append(inputD, status);
+ msg2.append(" ", status);
+ msg2.append(inputUnitIdentifier.data(), status);
+ if (status.errIfFailureAndReset("Failure before router2.route")) {
+ return;
+ }
+
+ RouteResult routeResult2 = router2.route(inputAmount, nullptr, status);
+ if (status.errIfFailureAndReset("router2.route(inputAmount, ...)")) {
+ return;
+ }
+ // TODO: revisit this experimentally chosen precision:
+ checkOutput(unitsTest, msg2.data(), expected, routeResult.measures, 0.0000000001);
}
/**
@@ -861,12 +1111,12 @@ void parsePreferencesTests(const char *filename, char delimiter, char *fields[][
* in source/test/testdata/cldr/units/unitPreferencesTest.txt, which originates
* in CLDR.
*/
-void UnitsTest::testPreferences() {
+void UnitsTest::testUnitPreferencesWithCLDRTests() {
const char *filename = "unitPreferencesTest.txt";
const int32_t maxFields = 11;
char *fields[maxFields][2];
- IcuTestErrorCode errorCode(*this, "UnitsTest::testPreferences");
+ IcuTestErrorCode errorCode(*this, "UnitsTest::testUnitPreferencesWithCLDRTests");
const char *sourceTestDataPath = getSourceTestData(errorCode);
if (errorCode.errIfFailureAndReset("unable to find the source/test/testdata "
"folder (getSourceTestData())")) {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
index 6b6a02c3962..9ffbfbedbca 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
@@ -320,7 +320,7 @@ public:
// Appendable is abstract; we define a subclass to verify that there is no "poor man's RTTI".
class DummyAppendable : public Appendable {
public:
- virtual UBool appendCodeUnit(UChar /*c*/) { return TRUE; }
+ virtual UBool appendCodeUnit(UChar /*c*/) override { return TRUE; }
};
void UObjectTest::testIDs()
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.h
index b4c13f92a6a..b9863393d69 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.h
@@ -17,7 +17,7 @@
**/
class UObjectTest : public IntlTest {
// IntlTest override
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par ) override;
private:
// tests
void testIDs();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/usettest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/usettest.cpp
index b8dbae76d4d..b4bee760107 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/usettest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/usettest.cpp
@@ -94,10 +94,13 @@ UnicodeSetTest::runIndexedTest(int32_t index, UBool exec,
TESTCASE_AUTO(TestFreezable);
TESTCASE_AUTO(TestSpan);
TESTCASE_AUTO(TestStringSpan);
- TESTCASE_AUTO(TestUCAUnsafeBackwards);
+ TESTCASE_AUTO(TestPatternWithSurrogates);
TESTCASE_AUTO(TestIntOverflow);
TESTCASE_AUTO(TestUnusedCcc);
TESTCASE_AUTO(TestDeepPattern);
+ TESTCASE_AUTO(TestEmptyString);
+ TESTCASE_AUTO(TestSkipToStrings);
+ TESTCASE_AUTO(TestPatternCodePointComplement);
TESTCASE_AUTO_END;
}
@@ -175,19 +178,19 @@ void UnicodeSetTest::TestToPattern() {
const char* exp2[] = {"aa", "ab", "ac", NOT, "xy", NULL};
expectToPattern(*s, "[a-z{aa}{ab}{ac}]", exp2);
- s->applyPattern(UNICODE_STRING_SIMPLE("[a-z {\\{l} {r\\}}]"), ec);
+ s->applyPattern(u"[a-z {\\{l} {r\\}}]", ec);
if (U_FAILURE(ec)) break;
const char* exp3[] = {"{l", "r}", NOT, "xy", NULL};
- expectToPattern(*s, UNICODE_STRING_SIMPLE("[a-z{r\\}}{\\{l}]"), exp3);
+ expectToPattern(*s, u"[a-z{r\\}}{\\{l}]", exp3);
s->add("[]");
const char* exp4[] = {"{l", "r}", "[]", NOT, "xy", NULL};
- expectToPattern(*s, UNICODE_STRING_SIMPLE("[a-z{\\[\\]}{r\\}}{\\{l}]"), exp4);
+ expectToPattern(*s, u"[a-z{\\[\\]}{r\\}}{\\{l}]", exp4);
- s->applyPattern(UNICODE_STRING_SIMPLE("[a-z {\\u4E01\\u4E02}{\\n\\r}]"), ec);
+ s->applyPattern(u"[a-z {\\u4E01\\u4E02}{\\n\\r}]", ec);
if (U_FAILURE(ec)) break;
const char* exp5[] = {"\\u4E01\\u4E02", "\n\r", NULL};
- expectToPattern(*s, UNICODE_STRING_SIMPLE("[a-z{\\u000A\\u000D}{\\u4E01\\u4E02}]"), exp5);
+ expectToPattern(*s, u"[a-z{\\u000A\\u000D}{\\u4E01\\u4E02}]", exp5);
// j2189
s->clear();
@@ -205,7 +208,7 @@ void UnicodeSetTest::TestToPattern() {
// JB#3400: For 2 character ranges prefer [ab] to [a-b]
UnicodeSet s;
- s.add((UChar)97, (UChar)98); // 'a', 'b'
+ s.add(u'a', u'b');
expectToPattern(s, "[ab]", NULL);
}
@@ -276,7 +279,7 @@ UnicodeSetTest::TestPatterns(void) {
// Throw in a test of complement
set.complement();
UnicodeString exp;
- exp.append((UChar)0x0000).append("aeeoouu").append((UChar)(0x007a+1)).append((UChar)0xFFFF);
+ exp.append((UChar)0x0000).append("aeeoouu").append((UChar)(u'z'+1)).append(u'\uFFFF');
expectPairs(set, exp);
}
@@ -324,14 +327,14 @@ UnicodeSetTest::TestCloneEqualHash(void) {
// set1 and set2 used to be built with the obsolete constructor taking
// UCharCategory values; replaced with pattern constructors
// markus 20030502
- UnicodeSet *set1=new UnicodeSet(UNICODE_STRING_SIMPLE("\\p{Lowercase Letter}"), status); // :Ll: Letter, lowercase
- UnicodeSet *set1a=new UnicodeSet(UNICODE_STRING_SIMPLE("[:Ll:]"), status); // Letter, lowercase
+ UnicodeSet *set1=new UnicodeSet(u"\\p{Lowercase Letter}", status); // :Ll: Letter, lowercase
+ UnicodeSet *set1a=new UnicodeSet(u"[:Ll:]", status); // Letter, lowercase
if (U_FAILURE(status)){
dataerrln((UnicodeString)"FAIL: Can't construst set with category->Ll" + " - " + UnicodeString(u_errorName(status)));
return;
}
- UnicodeSet *set2=new UnicodeSet(UNICODE_STRING_SIMPLE("\\p{Decimal Number}"), status); //Number, Decimal digit
- UnicodeSet *set2a=new UnicodeSet(UNICODE_STRING_SIMPLE("[:Nd:]"), status); //Number, Decimal digit
+ UnicodeSet *set2=new UnicodeSet(u"\\p{Decimal Number}", status); //Number, Decimal digit
+ UnicodeSet *set2a=new UnicodeSet(u"[:Nd:]", status); //Number, Decimal digit
if (U_FAILURE(status)){
errln((UnicodeString)"FAIL: Can't construct set with category->Nd");
return;
@@ -652,7 +655,7 @@ void UnicodeSetTest::TestAPI() {
errln("FAIL: UnicodeSetIterator::getString");
}
- set.add((UChar32)0x61, (UChar32)0x7A);
+ set.add(u'a', u'z');
set.complementAll("alan");
exp.applyPattern("[{ab}b-kmo-z]", status);
if (U_FAILURE(status)) { errln("FAIL"); return; }
@@ -667,16 +670,16 @@ void UnicodeSetTest::TestAPI() {
if (!set.containsNone(exp)) { errln("FAIL: containsNone(UnicodeSet)"); }
if (set.containsSome(exp)) { errln("FAIL: containsSome(UnicodeSet)"); }
- if (set.containsNone((UChar32)0x61, (UChar32)0x7A)) {
+ if (set.containsNone(u'a', u'z')) {
errln("FAIL: containsNone(UChar32, UChar32)");
}
- if (!set.containsSome((UChar32)0x61, (UChar32)0x7A)) {
+ if (!set.containsSome(u'a', u'z')) {
errln("FAIL: containsSome(UChar32, UChar32)");
}
- if (!set.containsNone((UChar32)0x41, (UChar32)0x5A)) {
+ if (!set.containsNone(u'A', u'Z')) {
errln("FAIL: containsNone(UChar32, UChar32)");
}
- if (set.containsSome((UChar32)0x41, (UChar32)0x5A)) {
+ if (set.containsSome(u'A', u'Z')) {
errln("FAIL: containsSome(UChar32, UChar32)");
}
@@ -690,15 +693,46 @@ void UnicodeSetTest::TestAPI() {
if (U_FAILURE(status)) { errln("FAIL"); return; }
if (set != exp) { errln("FAIL: retainAll(\"star\")"); return; }
- set.retain((UChar32)0x73);
+ set.retain(u's');
exp.applyPattern("[s]", status);
if (U_FAILURE(status)) { errln("FAIL"); return; }
if (set != exp) { errln("FAIL: retain('s')"); return; }
+ // ICU 2.6 coverage tests
+ // public final UnicodeSet retain(String s);
+ // public final UnicodeSet remove(int c);
+ // public final UnicodeSet remove(String s);
+ // public int hashCode();
+ set.applyPattern(u"[a-z{ab}{cd}]", status);
+ if (U_FAILURE(status)) { errln("FAIL"); return; }
+ set.retain(u"cd");
+ exp.applyPattern(u"[{cd}]", status);
+ if (U_FAILURE(status)) { errln("FAIL"); return; }
+ if (set != exp) { errln("FAIL: (with cd).retain(\"cd\")"); return; }
+
+ set.applyPattern(u"[a-z{ab}{yz}]", status);
+ if (U_FAILURE(status)) { errln("FAIL"); return; }
+ set.retain(u"cd");
+ exp.clear();
+ if (set != exp) { errln("FAIL: (without cd).retain(\"cd\")"); return; }
+
+ set.applyPattern(u"[a-z{ab}{cd}]", status);
+ if (U_FAILURE(status)) { errln("FAIL"); return; }
+ set.remove(u'c');
+ exp.applyPattern(u"[abd-z{ab}{cd}]", status);
+ if (set != exp) { errln("FAIL: remove('c')"); return; }
+
+ set.remove(u"cd");
+ exp.applyPattern(u"[abd-z{ab}]", status);
+ if (U_FAILURE(status)) { errln("FAIL"); return; }
+ if (set != exp) { errln("FAIL: remove(\"cd\")"); return; }
+
+ set.applyPattern("[s]", status);
+ if (U_FAILURE(status)) { errln("FAIL"); return; }
uint16_t buf[32];
int32_t slen = set.serialize(buf, UPRV_LENGTHOF(buf), status);
if (U_FAILURE(status)) { errln("FAIL: serialize"); return; }
- if (slen != 3 || buf[0] != 2 || buf[1] != 0x73 || buf[2] != 0x74) {
+ if (slen != 3 || buf[0] != 2 || buf[1] != u's' || buf[2] != u't') {
errln("FAIL: serialize");
return;
}
@@ -716,7 +750,7 @@ void UnicodeSetTest::TestAPI() {
TEST_ASSERT((void *)constSetx == (void *)constUSet);
// span(UnicodeString) and spanBack(UnicodeString) convenience methods
- UnicodeString longString=UNICODE_STRING_SIMPLE("aaaaaaaaaabbbbbbbbbbcccccccccc");
+ UnicodeString longString=u"aaaaaaaaaabbbbbbbbbbcccccccccc";
UnicodeSet ac(0x61, 0x63);
ac.remove(0x62).freeze();
if( ac.span(longString, -5, USET_SPAN_CONTAINED)!=10 ||
@@ -754,7 +788,7 @@ void UnicodeSetTest::TestIteration() {
// 6 code points, 3 ranges, 2 strings, 8 total elements
// Iteration will access them in sorted order - a, b, c, y, z, U0001abcd, "str1", "str2"
- UnicodeSet set(UNICODE_STRING_SIMPLE("[zabyc\\U0001abcd{str1}{str2}]"), ec);
+ UnicodeSet set(u"[zabyc\\U0001abcd{str1}{str2}]", ec);
TEST_ASSERT_SUCCESS(ec);
UnicodeSetIterator it(set);
@@ -850,6 +884,8 @@ void UnicodeSetTest::TestStrings() {
if (U_FAILURE(ec)) {
errln("FAIL: couldn't construct test sets");
}
+ assertFalse("[a-c].hasStrings()", testList[0]->hasStrings());
+ assertTrue("[{ll}{ch}a-z].hasStrings()", testList[2]->hasStrings());
for (int32_t i = 0; testList[i] != NULL; i+=2) {
if (U_SUCCESS(ec)) {
@@ -864,19 +900,19 @@ void UnicodeSetTest::TestStrings() {
}
delete testList[i];
delete testList[i+1];
- }
+ }
}
/**
* Test the [:Latin:] syntax.
*/
void UnicodeSetTest::TestScriptSet() {
- expectContainment(UNICODE_STRING_SIMPLE("[:Latin:]"), "aA", CharsToUnicodeString("\\u0391\\u03B1"));
+ expectContainment(u"[:Latin:]", "aA", CharsToUnicodeString("\\u0391\\u03B1"));
- expectContainment(UNICODE_STRING_SIMPLE("[:Greek:]"), CharsToUnicodeString("\\u0391\\u03B1"), "aA");
+ expectContainment(u"[:Greek:]", CharsToUnicodeString("\\u0391\\u03B1"), "aA");
/* Jitterbug 1423 */
- expectContainment(UNICODE_STRING_SIMPLE("[[:Common:][:Inherited:]]"), CharsToUnicodeString("\\U00003099\\U0001D169\\u0000"), "aA");
+ expectContainment(u"[[:Common:][:Inherited:]]", CharsToUnicodeString("\\U00003099\\U0001D169\\u0000"), "aA");
}
@@ -1049,12 +1085,12 @@ void UnicodeSetTest::TestPropertySet() {
"[:Assigned:]",
"A\\uE000\\uF8FF\\uFDC7\\U00010000\\U0010FFFD",
- "\\u0888\\uFDD3\\uFFFE\\U00050005",
+ "\\u0558\\uFDD3\\uFFFE\\U00050005",
// Script_Extensions, new in Unicode 6.0
"[:scx=Arab:]",
"\\u061E\\u061F\\u0620\\u0621\\u063F\\u0640\\u0650\\u065E\\uFDF1\\uFDF2\\uFDF3",
- "\\u061D\\uFDEF\\uFDFE",
+ "\\u088F\\uFDEF\\uFEFE",
// U+FDF2 has Script=Arabic and also Arab in its Script_Extensions,
// so scx-sc is missing U+FDF2.
@@ -1079,56 +1115,56 @@ void UnicodeSetTest::TestPosixClasses() {
{
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:alpha:]", status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("\\p{Alphabetic}"), status);
+ UnicodeSet s2(u"\\p{Alphabetic}", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
{
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:lower:]", status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("\\p{lowercase}"), status);
+ UnicodeSet s2(u"\\p{lowercase}", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
{
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:upper:]", status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("\\p{Uppercase}"), status);
+ UnicodeSet s2(u"\\p{Uppercase}", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
{
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:punct:]", status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("\\p{gc=Punctuation}"), status);
+ UnicodeSet s2(u"\\p{gc=Punctuation}", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
{
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:digit:]", status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("\\p{gc=DecimalNumber}"), status);
+ UnicodeSet s2(u"\\p{gc=DecimalNumber}", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
{
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:xdigit:]", status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("[\\p{DecimalNumber}\\p{HexDigit}]"), status);
+ UnicodeSet s2(u"[\\p{DecimalNumber}\\p{HexDigit}]", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
{
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:alnum:]", status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("[\\p{Alphabetic}\\p{DecimalNumber}]"), status);
+ UnicodeSet s2(u"[\\p{Alphabetic}\\p{DecimalNumber}]", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
{
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:space:]", status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("\\p{Whitespace}"), status);
+ UnicodeSet s2(u"\\p{Whitespace}", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
@@ -1136,7 +1172,7 @@ void UnicodeSetTest::TestPosixClasses() {
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:blank:]", status);
TEST_ASSERT_SUCCESS(status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("[\\p{Whitespace}-[\\u000a\\u000B\\u000c\\u000d\\u0085\\p{LineSeparator}\\p{ParagraphSeparator}]]"),
+ UnicodeSet s2(u"[\\p{Whitespace}-[\\u000a\\u000B\\u000c\\u000d\\u0085\\p{LineSeparator}\\p{ParagraphSeparator}]]",
status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
@@ -1145,7 +1181,7 @@ void UnicodeSetTest::TestPosixClasses() {
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:cntrl:]", status);
TEST_ASSERT_SUCCESS(status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("\\p{Control}"), status);
+ UnicodeSet s2(u"\\p{Control}", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
@@ -1153,7 +1189,7 @@ void UnicodeSetTest::TestPosixClasses() {
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:graph:]", status);
TEST_ASSERT_SUCCESS(status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("[^\\p{Whitespace}\\p{Control}\\p{Surrogate}\\p{Unassigned}]"), status);
+ UnicodeSet s2(u"[^\\p{Whitespace}\\p{Control}\\p{Surrogate}\\p{Unassigned}]", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
@@ -1161,7 +1197,7 @@ void UnicodeSetTest::TestPosixClasses() {
UErrorCode status = U_ZERO_ERROR;
UnicodeSet s1("[:print:]", status);
TEST_ASSERT_SUCCESS(status);
- UnicodeSet s2(UNICODE_STRING_SIMPLE("[[:graph:][:blank:]-[\\p{Control}]]") ,status);
+ UnicodeSet s2(u"[[:graph:][:blank:]-[\\p{Control}]]", status);
TEST_ASSERT_SUCCESS(status);
TEST_ASSERT(s1==s2);
}
@@ -1197,7 +1233,7 @@ void UnicodeSetTest::TestIndexOf() {
if (c != -1) {
errln("FAIL: charAt(<out of range>) = %X", c);
}
- int32_t j = set.indexOf((UChar32)0x71/*'q'*/);
+ int32_t j = set.indexOf(u'q');
if (j != -1) {
errln((UnicodeString)"FAIL: indexOf('q') = " + j);
}
@@ -1414,7 +1450,7 @@ void UnicodeSetTest::TestEscapePattern() {
if (U_FAILURE(ec)) {
continue;
}
- if (set.contains((UChar)0x0644)){
+ if (set.contains(u'\u0644')){
errln((UnicodeString)"FAIL: " + escape(pat) + " contains(U+0664)");
}
@@ -1428,7 +1464,7 @@ void UnicodeSetTest::TestEscapePattern() {
for (int32_t i=0; i<set.getRangeCount(); ++i) {
UnicodeString str("Range ");
- str.append((UChar)(0x30 + i))
+ str.append((UChar)(u'0' + i))
.append(": ")
.append((UChar32)set.getRangeStart(i))
.append(" - ")
@@ -1598,14 +1634,14 @@ public:
/**
* SymbolTable API
*/
- virtual const UnicodeString* lookup(const UnicodeString& s) const {
+ virtual const UnicodeString* lookup(const UnicodeString& s) const override {
return (const UnicodeString*) contents.get(s);
}
/**
* SymbolTable API
*/
- virtual const UnicodeFunctor* lookupMatcher(UChar32 /*ch*/) const {
+ virtual const UnicodeFunctor* lookupMatcher(UChar32 /*ch*/) const override {
return NULL;
}
@@ -1613,7 +1649,7 @@ public:
* SymbolTable API
*/
virtual UnicodeString parseReference(const UnicodeString& text,
- ParsePosition& pos, int32_t limit) const {
+ ParsePosition& pos, int32_t limit) const override {
int32_t start = pos.getIndex();
int32_t i = start;
UnicodeString result;
@@ -2169,7 +2205,7 @@ void UnicodeSetTest::expectToPattern(const UnicodeSet& set,
}
}
-static UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? 0x30 : (0x41 - 10))); }
+static UChar toHexString(int32_t i) { return (UChar)(i + (i < 10 ? u'0' : (u'A' - 10))); }
void
UnicodeSetTest::doAssert(UBool condition, const char *message)
@@ -2189,9 +2225,9 @@ UnicodeSetTest::escape(const UnicodeString& s) {
buf += c;
} else {
if (c <= 0xFFFF) {
- buf += (UChar)0x5c; buf += (UChar)0x75;
+ buf += u"\\u";
} else {
- buf += (UChar)0x5c; buf += (UChar)0x55;
+ buf += u"\\U";
buf += toHexString((c & 0xF0000000) >> 28);
buf += toHexString((c & 0x0F000000) >> 24);
buf += toHexString((c & 0x00F00000) >> 20);
@@ -2301,7 +2337,7 @@ void UnicodeSetTest::TestFreezable() {
applyPattern(wsPattern, USET_IGNORE_SPACE, NULL, errorCode).
applyPattern(wsPattern, pos, USET_IGNORE_SPACE, NULL, errorCode).
applyIntPropertyValue(UCHAR_CANONICAL_COMBINING_CLASS, 230, errorCode).
- applyPropertyAlias(UNICODE_STRING_SIMPLE("Assigned"), UnicodeString(), errorCode);
+ applyPropertyAlias(u"Assigned", UnicodeString(), errorCode);
if(frozen!=idSet || !(frozen==idSet)) {
errln("FAIL: UnicodeSet::applyXYZ() modified a frozen set");
}
@@ -3824,7 +3860,7 @@ void UnicodeSetTest::TestStringSpan() {
errln("FAIL: UnicodeSet(%s).containsAll(%s[:-4]) should be TRUE", pattern, string);
}
- string16=UNICODE_STRING_SIMPLE("byayaxya");
+ string16=u"byayaxya";
const UChar *s16=string16.getBuffer();
int32_t length16=string16.length();
(void)length16; // Suppress set but not used warning.
@@ -3845,7 +3881,7 @@ void UnicodeSetTest::TestStringSpan() {
errln("FAIL: Unable to create UnicodeSet(%s) - %s", pattern, u_errorName(errorCode));
return;
}
- string16=UNICODE_STRING_SIMPLE("acdabcdabccd");
+ string16=u"acdabcdabccd";
s16=string16.getBuffer();
length16=string16.length();
if( set.span(s16, 12, USET_SPAN_CONTAINED)!=12 ||
@@ -3862,7 +3898,7 @@ void UnicodeSetTest::TestStringSpan() {
errln("FAIL: Unable to create UnicodeSet(%s) - %s", pattern, u_errorName(errorCode));
return;
}
- string16=UNICODE_STRING_SIMPLE("abbcdabcdabd");
+ string16=u"abbcdabcdabd";
s16=string16.getBuffer();
length16=string16.length();
if( set.spanBack(s16, 12, USET_SPAN_CONTAINED)!=0 ||
@@ -3873,60 +3909,47 @@ void UnicodeSetTest::TestStringSpan() {
}
}
-/**
- * Including collationroot.h fails here with
-1>c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h(142): error C2008: '$' : unexpected in macro definition
- * .. so, we skip this test on Windows.
- *
- * the cause is that intltest builds with /Za which disables language extensions - which means
- * windows header files can't be used.
- */
-#if !UCONFIG_NO_COLLATION && !U_PLATFORM_HAS_WIN32_API
-#include "collationroot.h"
-#include "collationtailoring.h"
-#endif
-
-void UnicodeSetTest::TestUCAUnsafeBackwards() {
-#if U_PLATFORM_HAS_WIN32_API
- infoln("Skipping TestUCAUnsafeBackwards() - can't include collationroot.h on Windows without language extensions!");
-#elif !UCONFIG_NO_COLLATION
- UErrorCode errorCode = U_ZERO_ERROR;
-
- // Get the unsafeBackwardsSet
- const CollationCacheEntry *rootEntry = CollationRoot::getRootCacheEntry(errorCode);
- if(U_FAILURE(errorCode)) {
- dataerrln("FAIL: %s getting root cache entry", u_errorName(errorCode));
- return;
- }
- //const UVersionInfo &version = rootEntry->tailoring->version;
- const UnicodeSet *unsafeBackwardSet = rootEntry->tailoring->unsafeBackwardSet;
-
- checkSerializeRoundTrip(*unsafeBackwardSet, errorCode);
-
- if(!logKnownIssue("11891","UnicodeSet fails to round trip on CollationRoot...unsafeBackwards set")) {
- // simple test case
- // TODO(ticket #11891): Simplify this test function to this simple case. Rename it appropriately.
- // TODO(ticket #11891): Port test to Java. Is this a bug there, too?
- UnicodeSet surrogates;
- surrogates.add(0xd83a); // a lead surrogate
- surrogates.add(0xdc00, 0xdfff); // a range of trail surrogates
- UnicodeString pat;
- surrogates.toPattern(pat, FALSE); // bad: [ 0xd83a, 0xdc00, 0x2d, 0xdfff ]
- // TODO: Probably fix either UnicodeSet::_generatePattern() or _appendToPat()
- // so that at least one type of surrogate code points are escaped,
- // or (minimally) so that adjacent lead+trail surrogate code points are escaped.
- errorCode = U_ZERO_ERROR;
- UnicodeSet s2;
- s2.applyPattern(pat, errorCode); // looks like invalid range [ 0x1e800, 0x2d, 0xdfff ]
- if(U_FAILURE(errorCode)) {
- errln("FAIL: surrogates to/from pattern - %s", u_errorName(errorCode));
- } else {
- checkEqual(surrogates, s2, "surrogates to/from pattern");
- }
- // This occurs in the UCA unsafe-backwards set.
- checkRoundTrip(*unsafeBackwardSet);
- }
-#endif
+void UnicodeSetTest::TestPatternWithSurrogates() {
+ IcuTestErrorCode errorCode(*this, "TestPatternWithSurrogates");
+ // Regression test for ICU-11891
+ UnicodeSet surrogates;
+ surrogates.add(0xd000, 0xd82f); // a range ending with a lead surrogate code point
+ surrogates.add(0xd83a); // a lead surrogate
+ surrogates.add(0xdc00, 0xdfff); // a range of trail surrogates
+ UnicodeString pat;
+ surrogates.toPattern(pat, false); // bad if U+D83A is immediately followed by U+DC00
+ UnicodeSet s2;
+ // was: U_MALFORMED_SET
+ // Java: IllegalArgumentException: Error: Invalid range at "[...\U0001E800-\uDFFF|...]"
+ s2.applyPattern(pat, errorCode);
+ if (errorCode.errIfFailureAndReset("surrogates (1) to/from pattern")) { return; }
+ checkEqual(surrogates, s2, "surrogates (1) to/from pattern");
+
+ // create a range of DBFF-DC00, and in the complement form a range of DC01-DC03
+ surrogates.add(0xdbff).remove(0xdc01, 0xdc03);
+ // add a beyond-surrogates range, up to the last code point
+ surrogates.add(0x10affe, 0x10ffff);
+ surrogates.toPattern(pat, false); // bad if U+DBFF is immediately followed by U+DC00
+ s2.applyPattern(pat, errorCode);
+ if (errorCode.errIfFailureAndReset("surrogates (2) to/from pattern")) { return; }
+ checkEqual(surrogates, s2, "surrogates (2) to/from pattern");
+
+ // Test the toPattern() code path when the pattern is shorter in complement form:
+ // [^opposite-ranges]
+ surrogates.add(0, 0x6789);
+ surrogates.toPattern(pat, false);
+ s2.applyPattern(pat, errorCode);
+ if (errorCode.errIfFailureAndReset("surrogates (3) to/from pattern")) { return; }
+ checkEqual(surrogates, s2, "surrogates (3) to/from pattern");
+
+ // Start with a pattern, in case the original pattern is kept but
+ // without the extra white space.
+ surrogates.applyPattern(u"[\\uD83A \\uDC00-\\uDFFF]", errorCode);
+ if (errorCode.errIfFailureAndReset("surrogates from pattern")) { return; }
+ surrogates.toPattern(pat, false);
+ s2.applyPattern(pat, errorCode);
+ if (errorCode.errIfFailureAndReset("surrogates from/to/from pattern")) { return; }
+ checkEqual(surrogates, s2, "surrogates from/to/from pattern");
}
void UnicodeSetTest::TestIntOverflow() {
@@ -3984,3 +4007,172 @@ void UnicodeSetTest::TestDeepPattern() {
assertTrue("[a[a[a...1000s...]]] -> error", errorCode.isFailure());
errorCode.reset();
}
+
+void UnicodeSetTest::TestEmptyString() {
+ IcuTestErrorCode errorCode(*this, "TestEmptyString");
+ // Starting with ICU 69, the empty string is allowed in UnicodeSet. ICU-13702
+ UnicodeSet set(u"[{}]", errorCode);
+ if (!assertSuccess("set from pattern with {}", errorCode)) { return; }
+ assertTrue("set from pattern with {}", set.contains(u""));
+ assertEquals("set from pattern with {}: size", 1, set.size());
+ assertFalse("set from pattern with {}: isEmpty", set.isEmpty());
+
+ // Remove, add back, ...
+ assertFalse("remove empty string", set.remove(u"").contains(u""));
+ assertEquals("remove empty string: size", 0, set.size());
+ assertTrue("remove empty string: isEmpty", set.isEmpty());
+ assertTrue("add empty string", set.add(u"").contains(u""));
+ // missing API -- assertTrue("retain empty string", set.retain(u"").contains(u""));
+ assertFalse("complement-remove empty string", set.complement(u"").contains(u""));
+ assertTrue("complement-add empty string", set.complement(u"").contains(u""));
+
+ assertFalse("clear", set.clear().contains(u""));
+ assertTrue("add empty string 2", set.add(u"").contains(u""));
+ assertFalse("removeAllStrings", set.removeAllStrings().contains(u""));
+ assertTrue("add empty string 3", set.add(u"").contains(u""));
+ // Note that this leaves the set containing exactly the empty string.
+
+ // strings() access and iteration
+ // no C++ equivalent for Java strings() -- assertTrue("strings()", set.strings().contains(u""));
+ UnicodeSetIterator sit(set);
+ assertTrue("set iterator.next()", sit.next());
+ assertTrue("set iterator has empty string", sit.isString() && sit.getString().isEmpty());
+
+ // The empty string is ignored in matching.
+ set.add(u'a').add(u'c');
+ assertEquals("span", 1, set.span(u"abc", 3, USET_SPAN_SIMPLE));
+ assertEquals("spanBack", 2, set.spanBack(u"abc", 3, USET_SPAN_SIMPLE));
+ assertTrue("containsNone", set.containsNone(u"def"));
+ assertFalse("containsSome", set.containsSome(u"def"));
+ set.freeze();
+ assertEquals("frozen span", 1, set.span(u"abc", 3, USET_SPAN_SIMPLE));
+ assertEquals("frozen spanBack", 2, set.spanBack(u"abc", 3, USET_SPAN_SIMPLE));
+ assertTrue("frozen containsNone", set.containsNone(u"def"));
+ assertFalse("frozen containsSome", set.containsSome(u"def"));
+}
+
+void UnicodeSetTest::assertNext(UnicodeSetIterator &iter, const UnicodeString &expected) {
+ assertTrue(expected + ".next()", iter.next());
+ assertEquals(expected + ".getString()", expected, iter.getString());
+}
+
+void UnicodeSetTest::TestSkipToStrings() {
+ IcuTestErrorCode errorCode(*this, "TestSkipToStrings");
+ UnicodeSet set(u"[0189{}{ch}]", errorCode);
+ UnicodeSetIterator iter(set);
+ assertNext(iter.skipToStrings(), u"");
+ assertNext(iter, u"ch");
+ assertFalse("no next", iter.next());
+
+ iter.reset();
+ assertNext(iter, u"0");
+ assertNext(iter, u"1");
+ assertNext(iter, u"8");
+ assertNext(iter, u"9");
+ assertNext(iter, u"");
+ assertNext(iter, u"ch");
+ assertFalse("no next", iter.next());
+
+ iter.reset();
+ assertNext(iter, u"0");
+ iter.skipToStrings();
+ assertNext(iter, u"");
+ assertNext(iter, u"ch");
+ assertFalse("no next", iter.next());
+
+ iter.reset();
+ iter.nextRange();
+ assertNext(iter, u"8");
+ iter.skipToStrings();
+ assertNext(iter, u"");
+ assertNext(iter, u"ch");
+ assertFalse("no next", iter.next());
+
+ iter.reset();
+ iter.nextRange();
+ iter.nextRange();
+ iter.nextRange();
+ iter.skipToStrings();
+ assertNext(iter, u"ch");
+ assertFalse("no next", iter.next());
+}
+
+void UnicodeSetTest::TestPatternCodePointComplement() {
+ IcuTestErrorCode errorCode(*this, "TestPatternCodePointComplement");
+ // ICU-21524 changes pattern ^ and equivalent functions to perform a "code point complement".
+ // [^abc{ch}] = [[:Any:]-[abc{ch}]] which removes all strings.
+ {
+ UnicodeSet simple(u"[^abc{ch}]", errorCode);
+ assertEquals("[^abc{ch}] --> lots of elements", 0x110000 - 3, simple.size());
+ assertFalse("[^abc{ch}] --> no strings", simple.hasStrings());
+ assertFalse("[^abc{ch}] --> no 'a'", simple.contains(u'a'));
+ }
+
+ {
+ UnicodeSet notBasic(u"[:^Basic_Emoji:]", errorCode);
+ if (errorCode.errDataIfFailureAndReset("[:^Basic_Emoji:]")) {
+ return;
+ }
+ assertTrue("[:^Basic_Emoji:] --> lots of elements", notBasic.size() > 1000);
+ assertFalse("[:^Basic_Emoji:] --> no strings", notBasic.hasStrings());
+ assertFalse("[:^Basic_Emoji:] --> no bicycle", notBasic.contains(U'🚲'));
+ }
+
+ {
+ UnicodeSet notBasic(u"[:Basic_Emoji=No:]", errorCode);
+ assertTrue("[:Basic_Emoji=No:] --> lots of elements", notBasic.size() > 1000);
+ assertFalse("[:Basic_Emoji=No:] --> no strings", notBasic.hasStrings());
+ assertFalse("[:Basic_Emoji=No:] --> no bicycle", notBasic.contains(U'🚲'));
+ }
+
+ {
+ UnicodeSet notBasic;
+ notBasic.applyIntPropertyValue(UCHAR_BASIC_EMOJI, 0, errorCode);
+ assertTrue("[].applyIntPropertyValue(Basic_Emoji, 0) --> lots of elements",
+ notBasic.size() > 1000);
+ assertFalse("[].applyIntPropertyValue(Basic_Emoji, 0) --> no strings",
+ notBasic.hasStrings());
+ assertFalse("[].applyIntPropertyValue(Basic_Emoji, 0) --> no bicycle",
+ notBasic.contains(U'🚲'));
+ }
+
+ {
+ UnicodeSet notBasic;
+ notBasic.applyPropertyAlias("Basic_Emoji", "No", errorCode);
+ assertTrue("[].applyPropertyAlias(Basic_Emoji, No) --> lots of elements",
+ notBasic.size() > 1000);
+ assertFalse("[].applyPropertyAlias(Basic_Emoji, No) --> no strings",
+ notBasic.hasStrings());
+ assertFalse("[].applyPropertyAlias(Basic_Emoji, No) --> no bicycle",
+ notBasic.contains(U'🚲'));
+ }
+
+ // When there are strings, we must not use the complement for a more compact toPattern().
+ {
+ UnicodeSet set;
+ set.add(0, u'Y').add(u'b', u'q').add(u'x', 0x10ffff);
+ UnicodeString pattern;
+ set.toPattern(pattern, true);
+ UnicodeSet set2(pattern, errorCode);
+ checkEqual(set, set2, "set(with 0 & max, only code points) pattern round-trip");
+ assertEquals("set(with 0 & max, only code points).toPattern()", u"[^Z-ar-w]", pattern);
+
+ set.add("ch").add("ss");
+ set.toPattern(pattern, true);
+ set2 = UnicodeSet(pattern, errorCode);
+ checkEqual(set, set2, "set(with 0 & max, with strings) pattern round-trip");
+ assertEquals("set(with 0 & max, with strings).toPattern()",
+ u"[\\u0000-Yb-qx-\\U0010FFFF{ch}{ss}]", pattern);
+ }
+
+ // The complement() API behavior does not change under this ticket.
+ {
+ UnicodeSet notBasic(u"[:Basic_Emoji:]", errorCode);
+ notBasic.complement();
+ assertTrue("[:Basic_Emoji:].complement() --> lots of elements", notBasic.size() > 1000);
+ assertTrue("[:Basic_Emoji:].complement() --> has strings", notBasic.hasStrings());
+ assertTrue("[:Basic_Emoji:].complement().contains(chipmunk+emoji)",
+ notBasic.contains(u"🐿\uFE0F"));
+ assertFalse("[:Basic_Emoji:].complement() --> no bicycle", notBasic.contains(U'🚲'));
+ }
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/usettest.h b/Build/source/libs/icu/icu-src/source/test/intltest/usettest.h
index e79a9e8e77d..d5f1f37208b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/usettest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/usettest.h
@@ -19,6 +19,7 @@
#include "unicode/unistr.h"
#include "unicode/uniset.h"
#include "unicode/ucnv_err.h"
+#include "unicode/usetiter.h"
#include "intltest.h"
#include "cmemory.h"
@@ -33,7 +34,7 @@ public:
~UnicodeSetTest();
private:
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
void Testj2268();
@@ -90,10 +91,15 @@ private:
void TestStringSpan();
- void TestUCAUnsafeBackwards();
+ void TestPatternWithSurrogates();
void TestIntOverflow();
void TestUnusedCcc();
void TestDeepPattern();
+ void TestEmptyString();
+
+ void assertNext(UnicodeSetIterator &iter, const UnicodeString &expected);
+ void TestSkipToStrings();
+ void TestPatternCodePointComplement();
private:
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
index ad38bdf53a3..cd9751d761b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
@@ -301,7 +301,7 @@ UnicodeStringTest::TestCompare()
test3.compare(0, 14, test2) != 0 ||
test4.compare(12, 14, test2) != 0 ||
test3.compare(0, 18, test1) <=0 )
- errln("compare(offset, length, UnicodeString) failes");
+ errln("compare(offset, length, UnicodeString) fails");
// test compare(UChar*)
if (test2.compare(uniChars) != 0 || test3.compare(uniChars) <= 0 || test4.compare(uniChars) >= 0)
@@ -1345,6 +1345,12 @@ void UnicodeStringTest::TestUnescape(void) {
if (!UNICODE_STRING("wrong \\u sequence", 17).unescape().isEmpty()) {
errln("FAIL: unescaping of a string with an illegal escape sequence did not return an empty string");
}
+
+ // ICU-21648 limit backslash-uhhhh escapes to ASCII hex digits
+ UnicodeString euro = UnicodeString(u"\\u20aC").unescape();
+ assertEquals("ASCII Euro", u"€", euro);
+ UnicodeString nonASCIIEuro = UnicodeString(u"\\u୨෦aC").unescape();
+ assertTrue("unescape() accepted non-ASCII digits", nonASCIIEuro.isEmpty());
}
/* test code point counting functions --------------------------------------- */
@@ -1666,11 +1672,11 @@ class TestEnumeration : public StringEnumeration {
public:
TestEnumeration() : i(0) {}
- virtual int32_t count(UErrorCode& /*status*/) const {
+ virtual int32_t count(UErrorCode& /*status*/) const override {
return UPRV_LENGTHOF(testEnumStrings);
}
- virtual const UnicodeString *snext(UErrorCode &status) {
+ virtual const UnicodeString *snext(UErrorCode &status) override {
if(U_SUCCESS(status) && i<UPRV_LENGTHOF(testEnumStrings)) {
unistr=UnicodeString(testEnumStrings[i++], "");
return &unistr;
@@ -1679,14 +1685,14 @@ public:
return NULL;
}
- virtual void reset(UErrorCode& /*status*/) {
+ virtual void reset(UErrorCode& /*status*/) override {
i=0;
}
static inline UClassID getStaticClassID() {
return (UClassID)&fgClassID;
}
- virtual UClassID getDynamicClassID() const {
+ virtual UClassID getDynamicClassID() const override {
return getStaticClassID();
}
@@ -1861,7 +1867,7 @@ class TestCheckedArrayByteSink : public CheckedArrayByteSink {
public:
TestCheckedArrayByteSink(char* outbuf, int32_t capacity)
: CheckedArrayByteSink(outbuf, capacity), calledFlush(FALSE) {}
- virtual void Flush() { calledFlush = TRUE; }
+ virtual void Flush() override { calledFlush = TRUE; }
UBool calledFlush;
};
@@ -2076,7 +2082,7 @@ UnicodeStringTest::doTestAppendable(UnicodeString &dest, Appendable &app) {
class SimpleAppendable : public Appendable {
public:
explicit SimpleAppendable(UnicodeString &dest) : str(dest) {}
- virtual UBool appendCodeUnit(UChar c) { str.append(c); return TRUE; }
+ virtual UBool appendCodeUnit(UChar c) override { str.append(c); return TRUE; }
SimpleAppendable &reset() { str.remove(); return *this; }
private:
UnicodeString &str;
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h b/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
index 4a356a92c7a..34cdeac4fd7 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
@@ -27,7 +27,7 @@ public:
UnicodeStringTest() {}
virtual ~UnicodeStringTest();
- void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL );
+ void runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
/**
* Test some basic methods (insert, remove, replace, ...)
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
index 9f80466cbe4..99d03a0d283 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
@@ -37,7 +37,7 @@ public:
UTS46Test() : trans(NULL), nontrans(NULL) {}
virtual ~UTS46Test();
- void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=NULL) override;
void TestAPI();
void TestNotSTD3();
void TestInvalidPunycodeDigits();
@@ -116,12 +116,12 @@ class TestCheckedArrayByteSink : public CheckedArrayByteSink {
public:
TestCheckedArrayByteSink(char* outbuf, int32_t capacity)
: CheckedArrayByteSink(outbuf, capacity), calledFlush(FALSE) {}
- virtual CheckedArrayByteSink& Reset() {
+ virtual CheckedArrayByteSink& Reset() override {
CheckedArrayByteSink::Reset();
calledFlush = FALSE;
return *this;
}
- virtual void Flush() { calledFlush = TRUE; }
+ virtual void Flush() override { calledFlush = TRUE; }
UBool calledFlush;
};
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.cpp
index 09e7b602aa6..942c94dc9f1 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.cpp
@@ -6,7 +6,7 @@
* others. All Rights Reserved.
********************************************************************/
/************************************************************************
-* Tests for the UText and UTextIterator text abstraction classses
+* Tests for the UText and UTextIterator text abstraction classes
*
************************************************************************/
@@ -83,7 +83,7 @@ static uint32_t m_rand()
// TextTest()
//
// Top Level function for UText testing.
-// Specifies the strings to be tested, with the acutal testing itself
+// Specifies the strings to be tested, with the actual testing itself
// being carried out in another function, TestString().
//
void UTextTest::TextTest() {
@@ -296,13 +296,13 @@ void UTextTest::TestString(const UnicodeString &s) {
// nativeMap Mapping from code points to native indexes for the UText.
// u16Map Mapping from code points to UTF-16 indexes, for use with the UnicodeString.
//
-// This function runs a whole series of opertions on each incoming UText.
+// This function runs a whole series of operations on each incoming UText.
// The UText is deep-cloned prior to each operation, so that the original UText remains unchanged.
//
void UTextTest::TestCMR(const UnicodeString &us, UText *ut, int cpCount, m *nativeMap, m *u16Map) {
TEST_ASSERT(utext_isWritable(ut) == TRUE);
- int srcLengthType; // Loop variables for selecting the postion and length
+ int srcLengthType; // Loop variables for selecting the position and length
int srcPosType; // of the block to operate on within the source text.
int destPosType;
@@ -443,7 +443,7 @@ void UTextTest::TestCopyMove(const UnicodeString &us, UText *ut, UBool move,
TEST_SUCCESS(status);
// Compare the results of the two parallel tests
- int32_t usi = 0; // UnicodeString postion, utf-16 index.
+ int32_t usi = 0; // UnicodeString position, utf-16 index.
int64_t uti = 0; // UText position, native index.
int32_t cpi; // char32 position (code point index)
UChar32 usc; // code point from Unicode String
@@ -519,7 +519,7 @@ void UTextTest::TestReplace(
//
// Compare the results
//
- int32_t usi = 0; // UnicodeString postion, utf-16 index.
+ int32_t usi = 0; // UnicodeString position, utf-16 index.
int64_t uti = 0; // UText position, native index.
int32_t cpi; // char32 position (code point index)
UChar32 usc; // code point from Unicode String
@@ -716,7 +716,7 @@ void UTextTest::TestAccessNoClone(const UnicodeString &us, UText *ut, int cpCoun
}
//
- // next32From(), prevous32From(), Iterate in a somewhat random order.
+ // next32From(), previous32From(), Iterate in a somewhat random order.
//
int cpIndex = 0;
for (i=0; i<cpCount; i++) {
@@ -846,7 +846,7 @@ void UTextTest::TestAccessNoClone(const UnicodeString &us, UText *ut, int cpCoun
//
void UTextTest::ErrorTest()
{
- // Close of an unitialized UText. Shouldn't blow up.
+ // Close of an uninitialized UText. Shouldn't blow up.
{
UText ut;
memset(&ut, 0, sizeof(UText));
@@ -967,7 +967,7 @@ void UTextTest::ErrorTest()
//
- // isLengthExpensive - does it make the exptected transitions after
+ // isLengthExpensive - does it make the expected transitions after
// getting the length of a nul terminated string?
//
{
@@ -1395,7 +1395,7 @@ openFragmentedUnicodeString(UText *ut, UnicodeString *s, UErrorCode *status) {
// (UTF-8 wrapper, for example)
//
// The test:
-// 1. Create an inital UText
+// 1. Create an initial UText
// 2. Deep clone it. Contents should match original.
// 3. Reset original to something different.
// 4. Check that clone contents did not change.
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.h b/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.h
index 4ed39861160..710cd6fab11 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.h
@@ -6,7 +6,7 @@
* others. All Rights Reserved.
********************************************************************/
/************************************************************************
-* Tests for the UText and UTextIterator text abstraction classses
+* Tests for the UText and UTextIterator text abstraction classes
*
************************************************************************/
@@ -29,7 +29,7 @@ public:
UTextTest();
virtual ~UTextTest();
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL);
+ void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par=NULL) override;
void TextTest();
void ErrorTest();
void FreezeTest();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.cpp
index 3829ba2668d..0832663d666 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.cpp
@@ -70,7 +70,7 @@ void UVectorTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
}\
} UPRV_BLOCK_MACRO_END
-static int8_t U_CALLCONV
+static int32_t U_CALLCONV
UVectorTest_compareInt32(UElement key1, UElement key2) {
if (key1.integer > key2.integer) {
return 1;
@@ -124,6 +124,21 @@ void UVectorTest::UVector_API() {
TEST_ASSERT(a->contains((int32_t)15));
TEST_ASSERT(!a->contains((int32_t)5));
delete a;
+
+ status = U_ZERO_ERROR;
+ UVector vec(status);
+ vec.setDeleter(uprv_deleteUObject);
+ vec.adoptElement(new UnicodeString(), status);
+ vec.adoptElement(new UnicodeString(), status);
+ assertSuccess(WHERE, status);
+ assertEquals(WHERE, 2, vec.size());
+
+ // With an incoming error, adoptElement will not add to the vector,
+ // and will delete the object. Failure here will show as a memory leak.
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ vec.adoptElement(new UnicodeString(), status);
+ assertEquals(WHERE, U_ILLEGAL_ARGUMENT_ERROR, status);
+ assertEquals(WHERE, 2, vec.size());
}
void UVectorTest::UStack_API() {
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.h b/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.h
index abf6e10890b..9ca81358d2a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.h
@@ -24,7 +24,7 @@ public:
UVectorTest();
virtual ~UVectorTest();
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL );
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// The following are test functions that are visible from the intltest test framework.
void UVector_API();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/v32test.h b/Build/source/libs/icu/icu-src/source/test/intltest/v32test.h
index dc710d91d6b..44226fa8cf4 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/v32test.h
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/v32test.h
@@ -24,7 +24,7 @@ public:
UVector32Test();
virtual ~UVector32Test();
- virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL );
+ virtual void runIndexedTest(int32_t index, UBool exec, const char* &name, char* par = NULL ) override;
// The following are test functions that are visible from the intltest test framework.
virtual void UVector32_API();
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/windttst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/windttst.cpp
index 92d6f6721e7..9fec23aca4b 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/windttst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/windttst.cpp
@@ -156,7 +156,7 @@ void Win32DateTimeTest::testLocales(DateFormatTest *log)
wdLength = GetDateFormatW(lcidRecords[i].lcid, DATE_LONGDATE, &winNow, NULL, wdBuffer, UPRV_LENGTHOF(wdBuffer));
wtLength = GetTimeFormatW(lcidRecords[i].lcid, 0, &winNow, NULL, wtBuffer, UPRV_LENGTHOF(wtBuffer));
- if (uprv_strchr(localeID, '@') > 0) {
+ if (uprv_strchr(localeID, '@')) {
uprv_strcat(localeID, ";");
} else {
uprv_strcat(localeID, "@");
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.cpp
index 84fc278c129..953fb5d2c38 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.cpp
@@ -303,7 +303,7 @@ void Win32NumberTest::testLocales(NumberFormatTest *log)
strcpy(localeID, lcidRecords[i].localeID);
- if (strchr(localeID, '@') > 0) {
+ if (strchr(localeID, '@')) {
strcat(localeID, ";");
} else {
strcat(localeID, "@");
diff --git a/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c b/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c
index 7215c7d2e79..3a00c88cd80 100644
--- a/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c
+++ b/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c
@@ -874,7 +874,7 @@ static void TestCodepage(void) {
myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "absurd converter that can't be opened");
if (myFile) {
- log_err("Recieved a UFILE * with an invalid codepage parameter\n");
+ log_err("Received a UFILE * with an invalid codepage parameter\n");
u_fclose(myFile);
}
@@ -916,7 +916,7 @@ static void TestCodepage(void) {
}
retVal = u_file_read(testBuf, u_strlen(strBadConversion), myFile);
if (u_strncmp(strBadConversion, testBuf, u_strlen(strBadConversion)) != 0) {
- log_err("The test data wasn't subsituted as expected\n");
+ log_err("The test data wasn't substituted as expected\n");
}
u_fclose(myFile);
diff --git a/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp b/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
index 1e7716aa85b..5ee56fc9ada 100644
--- a/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
@@ -42,21 +42,21 @@ public:
fgTestDataPath = NULL;
}
}
- virtual void errln( const UnicodeString &message ) {
+ virtual void errln( const UnicodeString &message ) override {
char buffer[4000];
message.extract(0, message.length(), buffer, sizeof(buffer));
buffer[3999] = 0; /* NULL terminate */
log_err(buffer);
}
- virtual void logln( const UnicodeString &message ) {
+ virtual void logln( const UnicodeString &message ) override {
char buffer[4000];
message.extract(0, message.length(), buffer, sizeof(buffer));
buffer[3999] = 0; /* NULL terminate */
log_info(buffer);
}
- virtual void dataerrln( const UnicodeString &message ) {
+ virtual void dataerrln( const UnicodeString &message ) override {
char buffer[4000];
message.extract(0, message.length(), buffer, sizeof(buffer));
buffer[3999] = 0; /* NULL terminate */
@@ -166,7 +166,7 @@ public:
return fgTestDataPath;
}
- virtual const char* getTestDataPath(UErrorCode& err) {
+ virtual const char* getTestDataPath(UErrorCode& err) override {
return loadTestData(err);
}
};
@@ -828,7 +828,7 @@ static void ctest_setICU_DATA() {
U_CDECL_BEGIN
/*
* Note: this assumes that context is a pointer to STANDARD_TEST_FILE. It would be
- * cleaner to define an acutal context with a string pointer in it and set STANDARD_TEST_FILE
+ * cleaner to define an actual context with a string pointer in it and set STANDARD_TEST_FILE
* after the call to initArgs()...
*/
static int U_CALLCONV argHandler(int arg, int /*argc*/, const char * const argv[], void *context)
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.cpp b/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.cpp
index 26c7fbd80e1..7743fd68c6c 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.cpp
@@ -394,7 +394,7 @@ void PortableFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) co
le_bool PortableFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const
{
- return FALSE;
+ return false;
}
le_int32 PortableFontInstance::getUnitsPerEM() const
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.cpp b/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.cpp
index 5c46103a629..e387b083dc4 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.cpp
@@ -135,6 +135,6 @@ float SimpleFontInstance::getScaleFactorY() const
le_bool SimpleFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const
{
- return FALSE;
+ return false;
}
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/cletest.c b/Build/source/libs/icu/icu-src/source/test/letest/cletest.c
index 3839d1ee5ae..c176576e536 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/cletest.c
+++ b/Build/source/libs/icu/icu-src/source/test/letest/cletest.c
@@ -125,45 +125,45 @@ static void U_CALLCONV ParamTest(void)
DELETE_ARRAY(glyphs);
status = LE_NO_ERROR;
- glyphCount = le_layoutChars(engine, NULL, 0, 0, 0, FALSE, 0.0, 0.0, &status);
+ glyphCount = le_layoutChars(engine, NULL, 0, 0, 0, false, 0.0, 0.0, &status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars(NULL, 0, 0, 0, FALSE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars(NULL, 0, 0, 0, false, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
status = LE_NO_ERROR;
- glyphCount = le_layoutChars(engine, chars, -1, 6, 20, TRUE, 0.0, 0.0, &status);
+ glyphCount = le_layoutChars(engine, chars, -1, 6, 20, true, 0.0, 0.0, &status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars(chars, -1, 6, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars(chars, -1, 6, 20, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
status = LE_NO_ERROR;
- glyphCount = le_layoutChars(engine, chars, 8, -1, 20, TRUE, 0.0, 0.0, &status);
+ glyphCount = le_layoutChars(engine, chars, 8, -1, 20, true, 0.0, 0.0, &status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars(chars, 8, -1, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars(chars, 8, -1, 20, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
status = LE_NO_ERROR;
- glyphCount = le_layoutChars(engine, chars, 8, 6, -1, TRUE, 0.0, 0.0, &status);
+ glyphCount = le_layoutChars(engine, chars, 8, 6, -1, true, 0.0, 0.0, &status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars((chars, 8, 6, -1, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars((chars, 8, 6, -1, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
status = LE_NO_ERROR;
- glyphCount = le_layoutChars(engine, chars, 8, 6, 10, TRUE, 0.0, 0.0, &status);
+ glyphCount = le_layoutChars(engine, chars, 8, 6, 10, true, 0.0, 0.0, &status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars(chars, 8, 6, 10, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars(chars, 8, 6, 10, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
status = LE_NO_ERROR;
- glyphCount = le_layoutChars(engine, chars, 8, 6, 20, TRUE, 0.0, 0.0, &status);
+ glyphCount = le_layoutChars(engine, chars, 8, 6, 20, true, 0.0, 0.0, &status);
if (LE_FAILURE(status)) {
- log_err("Calling layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n");
+ log_err("Calling layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status) failed.\n");
goto bail;
}
@@ -230,10 +230,10 @@ static void U_CALLCONV AccessTest(void)
goto bail;
}
- glyphCount = le_layoutChars(engine, chars, 8, 6, 20, TRUE, 0.0, 0.0, &status);
+ glyphCount = le_layoutChars(engine, chars, 8, 6, 20, true, 0.0, 0.0, &status);
if (LE_FAILURE(status) || glyphCount != 6) {
- log_err("layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n");
+ log_err("layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status) failed.\n");
goto bail;
}
@@ -291,16 +291,16 @@ static le_bool compareResults(const char *testID, TestResult *expected, TestResu
/* NOTE: we'll stop on the first failure 'cause once there's one error, it may cascade... */
if (actual->glyphCount != expected->glyphCount) {
- log_err("Test %s: incorrect glyph count: exptected %d, got %d\n",
+ log_err("Test %s: incorrect glyph count: expected %d, got %d\n",
testID, expected->glyphCount, actual->glyphCount);
- return FALSE;
+ return false;
}
for (i = 0; i < actual->glyphCount; i += 1) {
if (actual->glyphs[i] != expected->glyphs[i]) {
log_err("Test %s: incorrect id for glyph %d: expected %4X, got %4X\n",
testID, i, expected->glyphs[i], actual->glyphs[i]);
- return FALSE;
+ return false;
}
}
@@ -308,7 +308,7 @@ static le_bool compareResults(const char *testID, TestResult *expected, TestResu
if (actual->indices[i] != expected->indices[i]) {
log_err("Test %s: incorrect index for glyph %d: expected %8X, got %8X\n",
testID, i, expected->indices[i], actual->indices[i]);
- return FALSE;
+ return false;
}
}
@@ -319,7 +319,7 @@ static le_bool compareResults(const char *testID, TestResult *expected, TestResu
if (xError > 0.0001) {
log_err("Test %s: incorrect x position for glyph %d: expected %f, got %f\n",
testID, i, expected->positions[i * 2], actual->positions[i * 2]);
- return FALSE;
+ return false;
}
if (yError < 0) {
@@ -329,11 +329,11 @@ static le_bool compareResults(const char *testID, TestResult *expected, TestResu
if (yError > 0.0001) {
log_err("Test %s: incorrect y position for glyph %d: expected %f, got %f\n",
testID, i, expected->positions[i * 2 + 1], actual->positions[i * 2 + 1]);
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
static void checkFontVersion(le_font *font, const char *testVersionString,
@@ -652,7 +652,7 @@ static void U_CALLCONV GlyphToCharTest(void)
fontRuns = pl_openEmptyFontRuns(0);
pl_addFontRun(fontRuns, font, charCount);
- paragraph = pl_create(chars, charCount, fontRuns, NULL, NULL, NULL, 0, FALSE, &status);
+ paragraph = pl_create(chars, charCount, fontRuns, NULL, NULL, NULL, 0, false, &status);
pl_closeFontRuns(fontRuns);
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/cletest.sln b/Build/source/libs/icu/icu-src/source/test/letest/cletest.sln
index 323eb6d29bd..2054f4b7401 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/cletest.sln
+++ b/Build/source/libs/icu/icu-src/source/test/letest/cletest.sln
@@ -21,6 +21,6 @@ Global
{798E3AE4-A984-43FF-8928-EACFF43F56AE}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
+ HideSolutionNode = false
EndGlobalSection
EndGlobal
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/cmaps.cpp b/Build/source/libs/icu/icu-src/source/test/letest/cmaps.cpp
index 382799ab0bd..cb385042f8f 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/cmaps.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/letest/cmaps.cpp
@@ -58,7 +58,7 @@ CMAPMapper *CMAPMapper::createUnicodeMapper(const CMAPTable *cmap)
le_uint16 i;
le_uint16 nSubtables = SWAPW(cmap->numberSubtables);
const CMAPEncodingSubtable *subtable = NULL;
- le_bool found = FALSE;
+ le_bool found = false;
le_uint16 foundPlatformID = 0xFFFF;
le_uint16 foundPlatformSpecificID = 0xFFFF;
le_uint32 foundOffset = 0;
@@ -76,7 +76,7 @@ CMAPMapper *CMAPMapper::createUnicodeMapper(const CMAPTable *cmap)
foundOffset = SWAPL(esh->encodingOffset);
foundPlatformID = platformID;
foundPlatformSpecificID = platformSpecificID;
- found = TRUE;
+ found = true;
foundTable = i;
break;
@@ -106,7 +106,7 @@ CMAPMapper *CMAPMapper::createUnicodeMapper(const CMAPTable *cmap)
foundPlatformID = platformID;
foundPlatformSpecificID = platformSpecificID;
foundTable = i;
- found = TRUE;
+ found = true;
break;
default: printf("Error: table %d (psid %d) is unknown. Skipping.\n", i, platformSpecificID); break;
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/gendata.cpp b/Build/source/libs/icu/icu-src/source/test/letest/gendata.cpp
index a9c5da56a1d..0f4cf1a5904 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/gendata.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/letest/gendata.cpp
@@ -283,7 +283,7 @@ int main(int argc, char *argv[])
} else if (tag.compare(test_text) == 0) {
char *utf8 = NULL;
- text = element->getText(TRUE);
+ text = element->getText(true);
charCount = text.length();
utf8 = getUTF8String(&text);
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/gendata.sln b/Build/source/libs/icu/icu-src/source/test/letest/gendata.sln
index 18c4f220ed9..23bf47eb22a 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/gendata.sln
+++ b/Build/source/libs/icu/icu-src/source/test/letest/gendata.sln
@@ -20,6 +20,6 @@ Global
{DA322426-C37C-4909-A99D-16B05E7FA498}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
+ HideSolutionNode = false
EndGlobalSection
EndGlobal
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/letest.cpp b/Build/source/libs/icu/icu-src/source/test/letest/letest.cpp
index 35c326f7e3f..d8b780ea55a 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/letest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/letest/letest.cpp
@@ -146,10 +146,10 @@ static void U_CALLCONV ParamTest(void)
DELETE_ARRAY(glyphs);
status = LE_NO_ERROR;
- glyphCount = engine->layoutChars(NULL, 0, 0, 0, FALSE, 0.0, 0.0, status);
+ glyphCount = engine->layoutChars(NULL, 0, 0, 0, false, 0.0, 0.0, status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars(NULL, 0, 0, 0, FALSE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars(NULL, 0, 0, 0, false, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
LEUnicode chars[] = {
@@ -159,40 +159,40 @@ static void U_CALLCONV ParamTest(void)
};
status = LE_NO_ERROR;
- glyphCount = engine->layoutChars(chars, -1, 6, 20, TRUE, 0.0, 0.0, status);
+ glyphCount = engine->layoutChars(chars, -1, 6, 20, true, 0.0, 0.0, status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars(chars, -1, 6, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars(chars, -1, 6, 20, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
status = LE_NO_ERROR;
- glyphCount = engine->layoutChars(chars, 8, -1, 20, TRUE, 0.0, 0.0, status);
+ glyphCount = engine->layoutChars(chars, 8, -1, 20, true, 0.0, 0.0, status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars(chars, 8, -1, 20, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars(chars, 8, -1, 20, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
status = LE_NO_ERROR;
- glyphCount = engine->layoutChars(chars, 8, 6, -1, TRUE, 0.0, 0.0, status);
+ glyphCount = engine->layoutChars(chars, 8, 6, -1, true, 0.0, 0.0, status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars((chars, 8, 6, -1, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars((chars, 8, 6, -1, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
status = LE_NO_ERROR;
- glyphCount = engine->layoutChars(chars, 8, 6, 10, TRUE, 0.0, 0.0, status);
+ glyphCount = engine->layoutChars(chars, 8, 6, 10, true, 0.0, 0.0, status);
if (status != LE_ILLEGAL_ARGUMENT_ERROR) {
- log_err("Calling layoutChars(chars, 8, 6, 10, TRUE, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
+ log_err("Calling layoutChars(chars, 8, 6, 10, true, 0.0, 0.0, status) did not fail w/ LE_ILLEGAL_ARGUMENT_ERROR.\n");
}
float x = 0.0, y = 0.0;
status = LE_NO_ERROR;
- glyphCount = engine->layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status);
+ glyphCount = engine->layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status);
if (LE_FAILURE(status)) {
- log_err("Calling layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n");
+ log_err("Calling layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status) failed.\n");
goto bail;
}
@@ -258,10 +258,10 @@ static void U_CALLCONV AccessTest(void)
goto bail;
}
- glyphCount = engine->layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status);
+ glyphCount = engine->layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status);
if (LE_FAILURE(status) || glyphCount != 6) {
- log_err("layoutChars(chars, 8, 6, 20, TRUE, 0.0, 0.0, status) failed.\n");
+ log_err("layoutChars(chars, 8, 6, 20, true, 0.0, 0.0, status) failed.\n");
goto bail;
}
@@ -331,9 +331,9 @@ le_bool compareResults(const char *testID, TestResult *expected, TestResult *act
{
/* NOTE: we'll stop on the first failure 'cause once there's one error, it may cascade... */
if (actual->glyphCount != expected->glyphCount) {
- log_err("Test %s: incorrect glyph count: exptected %d, got %d\n",
+ log_err("Test %s: incorrect glyph count: expected %d, got %d\n",
testID, expected->glyphCount, actual->glyphCount);
- return FALSE;
+ return false;
}
le_int32 i;
@@ -342,7 +342,7 @@ le_bool compareResults(const char *testID, TestResult *expected, TestResult *act
if (actual->glyphs[i] != expected->glyphs[i]) {
log_err("Test %s: incorrect id for glyph %d: expected %4X, got %4X\n",
testID, i, expected->glyphs[i], actual->glyphs[i]);
- return FALSE;
+ return false;
}
}
@@ -350,7 +350,7 @@ le_bool compareResults(const char *testID, TestResult *expected, TestResult *act
if (actual->indices[i] != expected->indices[i]) {
log_err("Test %s: incorrect index for glyph %d: expected %8X, got %8X\n",
testID, i, expected->indices[i], actual->indices[i]);
- return FALSE;
+ return false;
}
}
@@ -360,7 +360,7 @@ le_bool compareResults(const char *testID, TestResult *expected, TestResult *act
if (xError > 0.0001) {
log_err("Test %s: incorrect x position for glyph %d: expected %f, got %f\n",
testID, i, expected->positions[i * 2], actual->positions[i * 2]);
- return FALSE;
+ return false;
}
double yError = uprv_fabs(actual->positions[i * 2 + 1] - expected->positions[i * 2 + 1]);
@@ -372,11 +372,11 @@ le_bool compareResults(const char *testID, TestResult *expected, TestResult *act
if (yError > 0.0001) {
log_err("Test %s: incorrect y position for glyph %d: expected %f, got %f\n",
testID, i, expected->positions[i * 2 + 1], actual->positions[i * 2 + 1]);
- return FALSE;
+ return false;
}
}
- return TRUE;
+ return true;
}
static void checkFontVersion(PortableFontInstance *fontInstance, const char *testVersionString,
@@ -652,14 +652,14 @@ static void U_CALLCONV DataDrivenTest(void)
goto free_c_strings;
}
} else if (tag.compare(test_text) == 0) {
- text = element->getText(TRUE);
+ text = element->getText(true);
charCount = text.length();
} else if (tag.compare(result_glyphs) == 0) {
- glyphs = element->getText(TRUE);
+ glyphs = element->getText(true);
} else if (tag.compare(result_indices) == 0) {
- indices = element->getText(TRUE);
+ indices = element->getText(true);
} else if (tag.compare(result_positions) == 0) {
- positions = element->getText(TRUE);
+ positions = element->getText(true);
} else {
// an unknown tag...
char *cTag = getCString(&tag);
@@ -885,7 +885,7 @@ static void U_CALLCONV GlyphToCharTest(void)
fontRuns.add(font, charCount);
- paragraphLayout = new ParagraphLayout(chars, charCount, &fontRuns, NULL, NULL, NULL, 0, FALSE, status);
+ paragraphLayout = new ParagraphLayout(chars, charCount, &fontRuns, NULL, NULL, NULL, 0, false, status);
if (LE_FAILURE(status)) {
goto close_font;
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/letest.sln b/Build/source/libs/icu/icu-src/source/test/letest/letest.sln
index 70066716f3a..aebf8695e93 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/letest.sln
+++ b/Build/source/libs/icu/icu-src/source/test/letest/letest.sln
@@ -35,6 +35,6 @@ Global
{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
+ HideSolutionNode = false
EndGlobalSection
EndGlobal
diff --git a/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.cpp b/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.cpp
index a5e04031fa0..eb469792a46 100644
--- a/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.cpp
@@ -208,14 +208,14 @@ void readTestFile(const char *testFilePath, TestCaseCallback callback)
fontCksum = getCString(element->getAttribute(cksum_attr));
} else if (tag.compare(test_text) == 0) {
- text = element->getText(TRUE);
+ text = element->getText(true);
charCount = text.length();
} else if (tag.compare(result_glyphs) == 0) {
- glyphs = element->getText(TRUE);
+ glyphs = element->getText(true);
} else if (tag.compare(result_indices) == 0) {
- indices = element->getText(TRUE);
+ indices = element->getText(true);
} else if (tag.compare(result_positions) == 0) {
- positions = element->getText(TRUE);
+ positions = element->getText(true);
} else {
// an unknown tag...
char *cTag = getCString(&tag);
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/README b/Build/source/libs/icu/icu-src/source/test/perf/README
index 75c5cda302e..21af8cdc75f 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/README
+++ b/Build/source/libs/icu/icu-src/source/test/perf/README
@@ -49,7 +49,7 @@ Running Performance Test:
(e.g. convperf (Conversion tests)). Go to each directory and execute the perl script for each test
you want to run. (e.g. CharPerf_r.pl in CharPerf directory)
* You only need to run the perl script from the latest ICU version. The corresponding perl script
- in the previous versions of ICU do not need to be run seperately.
+ in the previous versions of ICU do not need to be run separately.
Note: When running on Windows, cygwin is preferred.
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
index a1d85561bcd..50ec9540394 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
@@ -483,7 +483,7 @@ void doBinarySearch()
for (;;) { // not really a loop, just allows "break" to work, to simplify
- // inadvertantly running more than one test through here.
+ // inadvertently running more than one test through here.
if (opt_strcmp || opt_strcmpCPO)
{
unsigned long startTime = timeGetTime();
@@ -1316,7 +1316,7 @@ UChar UCharFile::get() {
break;
}
- // Figure out the lenght of the char and read the rest of the bytes
+ // Figure out the length of the char and read the rest of the bytes
// into a temp array.
int nBytes;
if (ch >= 0xF0) {nBytes=4;}
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt
index cd056573f1d..51e548ad94a 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/readme.txt
@@ -68,7 +68,7 @@ How Expensive Is It?
</icuSystemParams>
</tests>
** Appendix II: Analysis.csv
-http://bugs.icu-project.org/trac/ticket/8653,"""Control"", linux i7
+https://unicode-org.atlassian.net/browse/ICU-8653,"""Control"", linux i7
Intel(R) Core(TM) i7-2720QM CPU @ 2.20GHz",MacBook 2.4ghz (Core2D),MacBook 2GhzCore2,AIX Power,MB 2.4 Variance,MB 2 variance,AIX Variance
SieveTest (=1.0),1,1,1,1,0.00%,0.00%,0.00%
NullTest (=0.0),0,0,0,0.08,#DIV/0!,#DIV/0!,#DIV/0!
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
index 0478b6d6bf2..331f946eecb 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
@@ -165,7 +165,7 @@ U_CAPI double uprv_getMeanTime(double *times, uint32_t *timeCount, double *margi
}
meanTime /= n;
- /* caculate standard deviation */
+ /* calculate standard deviation */
double sd = 0;
for(int i=0;i<n;i++) {
#if U_DEBUG
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl
index a37e28cd7ed..5c16212b84e 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf.pl
@@ -53,7 +53,7 @@ my $dataFiles = {
"TestNames_SerbianSH.txt",
"TestNames_SerbianSR.txt",
"TestNames_Thai.txt",
- "Testnames_Russian.txt",
+ "TestNames_Russian.txt",
"th18057.txt",
"thesis.txt",
"vfear11a.txt",
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl
index 673afef1527..e81c242573e 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/NormPerf_r.pl
@@ -55,7 +55,7 @@ my $dataFiles = {
"TestNames_SerbianSH.txt",
"TestNames_SerbianSR.txt",
"TestNames_Thai.txt",
- "Testnames_Russian.txt",
+ "TestNames_Russian.txt",
"th18057.txt",
"thesis.txt",
"vfear11a.txt",
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.h b/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.h
index 76a2293c340..22dab949838 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.h
@@ -143,7 +143,7 @@ public:
const Locale *LOCALES;
LOCALES = testLocales;
- StringEnumeration *tzids = TimeZone::createEnumeration();
+ StringEnumeration *tzids = TimeZone::createEnumeration(*status);
if (U_FAILURE(*status)) {
//errln("tzids->count failed");
return;
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h b/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
index b29a7bc99c1..8b384bfebeb 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
+++ b/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
@@ -236,7 +236,7 @@ public:
UPerfFunction* TestQC_FCD_NFC_Text();
UPerfFunction* TestQC_FCD_Orig_Text();
- /* IsNormalized performnace */
+ /* IsNormalized performance */
UPerfFunction* TestIsNormalized_NFC_NFD_Text();
UPerfFunction* TestIsNormalized_NFC_NFC_Text();
UPerfFunction* TestIsNormalized_NFC_Orig_Text();
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm
index 82acd2d99ea..b00afb94613 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm
+++ b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Dataset.pm
@@ -64,7 +64,7 @@ sub getMean {
}
# Return a 99% error based on the t distribution. The dataset
-# is desribed as getMean() +/- getError().
+# is described as getMean() +/- getError().
sub getError {
my $self = shift;
return $self->{_error} * $self->{_scale};
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm
index 3e74bc966fd..8f6e45c8fa0 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm
+++ b/Build/source/libs/icu/icu-src/source/test/perf/perldriver/Output.pm
@@ -190,8 +190,6 @@ sub setupOutput {
@headers = split(/ /, $headers);
my ($t, $rest);
($t, $rest) = split(/\.\w+/, $0);
- $t =~ /^.*\W(\w+)$/;
- $t = $1;
if($outType eq 'HTML') {
$html = $date;
$html =~ s/://g; # ':' illegal
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl
index 34c5f1fc9c6..8b445962152 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/UBrkPerf_r.pl
@@ -72,7 +72,7 @@ my $dataFiles = {
"TestNames_SerbianSH.txt",
"TestNames_SerbianSR.txt",
"TestNames_Thai.txt",
- "Testnames_Russian.txt",
+ "TestNames_Russian.txt",
],
"th",
[
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
index 7ac6e341e5f..8571a3edf54 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
@@ -589,7 +589,7 @@ UChar UCharFile::get() {
break;
}
- // Figure out the lenght of the char and read the rest of the bytes
+ // Figure out the length of the char and read the rest of the bytes
// into a temp array.
int nBytes;
if (ch >= 0xF0) {nBytes=4;}
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl
index 378cbc125e0..54f905fdbc4 100755
--- a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf.pl
@@ -68,7 +68,7 @@ my $dataFiles = {
"TestNames_SerbianSH.txt",
"TestNames_SerbianSR.txt",
"TestNames_Thai.txt",
- "Testnames_Russian.txt",
+ "TestNames_Russian.txt",
"th18057.txt",
]
};
diff --git a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl
index 587595083b0..e2c8faf89ee 100644
--- a/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl
+++ b/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/StringPerf_r.pl
@@ -54,7 +54,7 @@ my $dataFiles = {
"TestNames_SerbianSH.txt",
"TestNames_SerbianSR.txt",
"TestNames_Thai.txt",
- "Testnames_Russian.txt",
+ "TestNames_Russian.txt",
"th18057.txt",
"thesis.txt",
"vfear11a.txt",
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py b/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py
index 6e09938f9e6..78745322199 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/BUILDRULES.py
@@ -44,6 +44,10 @@ def generate_rb(config, io, common_vars):
"testaliases",
"testempty",
"testtypes",
+ # LSTM models
+ "Thai_graphclust_model4_heavy",
+ "Thai_codepoints_exclusive_model5_heavy",
+ "Burmese_graphclust_model5_heavy"
# "metaZones",
# "timezoneTypes",
# "windowsZones",
@@ -169,7 +173,6 @@ def generate_conv(config, io, common_vars):
)
]
-
def generate_copy(config, io, common_vars):
return [
CopyRequest(
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
index d3d945b570c..2df6fe230e1 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
@@ -1,6 +1,6 @@
-# BidiTest-13.0.0.txt
-# Date: 2019-09-08, 23:30:56 GMT
-# © 2019 Unicode®, Inc.
+# BidiTest-14.0.0.txt
+# Date: 2021-03-08, 19:35:40 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/Burmese_graphclust_model5_heavy.txt b/Build/source/libs/icu/icu-src/source/test/testdata/Burmese_graphclust_model5_heavy.txt
new file mode 100644
index 00000000000..ac51de161a5
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/Burmese_graphclust_model5_heavy.txt
@@ -0,0 +1,7061 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+Burmese_graphclust_model5_heavy:table(nofallback){
+ model{"Burmese_graphclust_model5_heavy"}
+ type{"graphclust"}
+ embeddings:int{12}
+ hunits:int{12}
+ dict{
+ " ",
+ "း",
+ "ာ",
+ "င်",
+ "အ",
+ "တ",
+ "က်",
+ "ယ်",
+ "က",
+ "ရ",
+ "န်",
+ "ပ",
+ "ါ",
+ "မ",
+ "သ",
+ "လ",
+ "တွေ",
+ "စ်",
+ "ကို",
+ "ပ်",
+ "ည်",
+ "စ",
+ "တ်",
+ "မှ",
+ "။",
+ "ရေ",
+ "နေ",
+ "တဲ့",
+ "ပြ",
+ "နဲ့",
+ "န",
+ "ဖြ",
+ "ဝ",
+ "လို့",
+ "မ်",
+ "တေ",
+ "ခဲ့",
+ "ပြီ",
+ "နို",
+ "ဆို",
+ "ပေ",
+ "ာ်",
+ "ပြေ",
+ "ထ",
+ "ကြ",
+ "င့်",
+ "မှု",
+ "ရှိ",
+ "ဆ",
+ "ချ",
+ "သူ",
+ "ခ",
+ "လို",
+ "တို",
+ "ဘ",
+ "မြ",
+ "တွ",
+ "ဦ",
+ "ငံ",
+ "၊",
+ "ဆေ",
+ "ခံ",
+ "လု",
+ "ဒီ",
+ "ဟ",
+ "စီ",
+ "ဖို့",
+ "ကြေ",
+ "ဖွဲ့",
+ "ဒေ",
+ "ာ့",
+ "စို",
+ "ရှ",
+ "ကြီ",
+ "ရဲ့",
+ "ကေ",
+ "အေ",
+ "သွ",
+ "ခု",
+ "ကျ",
+ "ါ်",
+ "လေ",
+ "ဒ",
+ "ပို",
+ "ခို",
+ "ယ",
+ "၁",
+ "ကျေ",
+ "ဘီ",
+ "နှ",
+ "ခွ",
+ "ဖ",
+ "မျို",
+ "၂",
+ "၀",
+ "ရွ",
+ "လူ",
+ "ဆုံ",
+ "စု",
+ "သေ",
+ "ထေ",
+ "သိ",
+ "မေ",
+ "ဉ်",
+ "တီ",
+ "ပွဲ",
+ "ကု",
+ "ယ့်",
+ "ချု",
+ "ဂ",
+ "တို့",
+ "လုံ",
+ "မြို့",
+ "ထု",
+ "မြေ",
+ "ယူ",
+ "က္",
+ "မျ",
+ "ပြု",
+ "န့်",
+ "ထဲ",
+ "နေ့",
+ "ထွ",
+ "ဥ",
+ "ဘူ",
+ "ထိ",
+ "စ္",
+ "တွေ့",
+ "ခြ",
+ "ဌ",
+ "ဖေ",
+ "စေ",
+ "လွ",
+ "ဆွေ",
+ "ကွ",
+ "င",
+ "ရီ",
+ "မို",
+ "ညီ",
+ "N",
+ "ရုံ",
+ "န္",
+ "အဲ",
+ "လွှ",
+ "မ္",
+ "ထို",
+ "ရို",
+ "လ်",
+ "ဒု",
+ "နွေ",
+ "ခြေ",
+ "ပဲ",
+ "တိ",
+ "မိ",
+ "ခေ",
+ "မီ",
+ "ဘေ",
+ "လှ",
+ "င်္",
+ "ဆီ",
+ "ရဲ",
+ "ရိ",
+ "A",
+ "သုံ",
+ "ကိ",
+ "ရု",
+ "မှူ",
+ "C",
+ "ည့်",
+ "ယေ",
+ "ည",
+ "a",
+ "ဝေ",
+ "၅",
+ "ဂ္",
+ "၃",
+ "ကူ",
+ "တူ",
+ "ဇ",
+ "e",
+ "နီ",
+ "ပွ",
+ "ချိ",
+ "ပု",
+ "ငြိ",
+ "ဂျ",
+ "စိ",
+ "ဏ်",
+ "စွ",
+ "လဲ",
+ "ရွေ",
+ "၆",
+ "ပုံ",
+ "n",
+ "သူ့",
+ "(",
+ ")",
+ "S",
+ "အိ",
+ "သီ",
+ "၄",
+ "စွဲ",
+ "၇",
+ "၈",
+ "သံ",
+ "မူ",
+ "D",
+ "i",
+ "၉",
+ "တု",
+ "ခြုံ",
+ "o",
+ "r",
+ "ဟု",
+ "ချို့",
+ "မွ",
+ "ထူ",
+ "ဏ",
+ "ပူ",
+ "မဲ့",
+ "ငွေ",
+ "L",
+ "စုံ",
+ "P",
+ "ဗ",
+ "အို",
+ "ဗို",
+ "ကြို",
+ "t",
+ "ရှ်",
+ "ပိ",
+ "အု",
+ "ဒေ့",
+ "ရှေ့",
+ "မံ",
+ "လူ့",
+ "ဖွ",
+ "U",
+ "ဓ",
+ "ဖြေ",
+ "ဒ်",
+ "လီ",
+ "ပို့",
+ "ဘဲ",
+ "လေ့",
+ "l",
+ "ဇေ",
+ "I",
+ "ကြံ",
+ "ဧ",
+ "ဟေ",
+ "လိ",
+ "မဲ",
+ "မ့်",
+ "ကြိ",
+ "ဖြို",
+ "နှု",
+ "F",
+ "K",
+ "M",
+ "ရှေ",
+ "ဟို",
+ "ါ့",
+ "s",
+ "ခွဲ",
+ "ဖျ",
+ "ဏီ",
+ "ပျ",
+ "ဂို",
+ "ခဲ",
+ "R",
+ "ထွေ",
+ "ဘု",
+ "ချီ",
+ "လျှေ",
+ "ဖိ",
+ "ကျွ",
+ "ရွှေ",
+ "သို",
+ "ဓိ",
+ "-",
+ "h",
+ "နှို",
+ "လှု",
+ "c",
+ "ဝို",
+ "m",
+ "ဏ္",
+ "ညှိ",
+ "u",
+ "ဒိ",
+ "ညွှ",
+ "ဿ",
+ "ပြို",
+ "ချို",
+ "မျှ",
+ "ဋ္",
+ "တွဲ",
+ "ယံ",
+ "ဍ",
+ "ချေ",
+ "ဖွံ့",
+ "O",
+ "ငြ",
+ "ကျို",
+ "စံ",
+ "T",
+ "ဂု",
+ "ညွ",
+ "ဆု",
+ "ဆံ",
+ "လျ",
+ "d",
+ "ဖူ",
+ "H",
+ "တ္",
+ "ကျူ",
+ "ဃ",
+ "ဋိ",
+ "'",
+ "အီ",
+ "B",
+ "နှံ",
+ "မြှ",
+ "y",
+ "ကွဲ",
+ "လျေ",
+ "မု",
+ "ဆဲ",
+ "နှီ",
+ "ရှု",
+ "ဒို",
+ "ဆိ",
+ "ဖွေ",
+ "ဖြူ",
+ "သြ",
+ "ဖို",
+ "ကြုံ",
+ "ရွှေ့",
+ "မွေ",
+ "E",
+ "G",
+ "ဈေ",
+ "ပံ့",
+ "သု",
+ "g",
+ "စဲ",
+ "တံ",
+ "ပီ",
+ }
+ data:intvector{
+ 1096750353,
+ -1063986413,
+ -1062596740,
+ 1092709663,
+ 1066167299,
+ 1095673996,
+ -1107895189,
+ 1065903672,
+ -1058841372,
+ -1058279743,
+ 1097546499,
+ -1087421171,
+ -1110244829,
+ 1087802055,
+ 1069427355,
+ 1013662598,
+ 995118755,
+ -1118991632,
+ -1121861654,
+ -1107930155,
+ 1081420409,
+ 1079615124,
+ -1070782118,
+ -1114885085,
+ 1038732448,
+ 1079819450,
+ 1080009858,
+ -1136441950,
+ 1040794162,
+ 1019752792,
+ -1119256581,
+ -1123616251,
+ 1075104948,
+ 1087945501,
+ -1087542469,
+ -1095464736,
+ 1015060932,
+ 1063521493,
+ 1057908948,
+ 1032065441,
+ -1122259596,
+ -1094453153,
+ 1032799103,
+ -1113693524,
+ 1057747686,
+ 1058117130,
+ -1082554303,
+ -1111075202,
+ 1044857758,
+ -1105524109,
+ -1097360226,
+ -1074152471,
+ -1081844825,
+ -1089250656,
+ -1067828068,
+ -1079801533,
+ 1043574034,
+ -1096032332,
+ 1006292712,
+ 1074669209,
+ -1113191312,
+ 1015425304,
+ 1008709162,
+ -1109164032,
+ 1033953233,
+ 1031378765,
+ -1107261960,
+ 1044677190,
+ -1109029996,
+ -1114269375,
+ 1024278490,
+ 1056988379,
+ -1113910521,
+ 1069781073,
+ 1053483654,
+ 1037478441,
+ -1080311278,
+ -1067359098,
+ -1106591204,
+ -1096928589,
+ 1044033388,
+ 1060055701,
+ -1076385881,
+ 1025944056,
+ -1108705358,
+ 1071044692,
+ 1064975569,
+ 1043148661,
+ -1098008133,
+ -1090915552,
+ 1043122810,
+ 1057637915,
+ 1040427876,
+ 1059637927,
+ -1056548148,
+ -1092335736,
+ 1057087652,
+ -1098232645,
+ -1118885246,
+ -1118521234,
+ -1121522158,
+ 1030044167,
+ -1086286802,
+ -1123914467,
+ -1108855456,
+ -1106988030,
+ 1051208894,
+ -1141820794,
+ 1052420665,
+ -1114538512,
+ -1115985126,
+ 1048219409,
+ 1033227632,
+ 1000795458,
+ 1058817203,
+ 1041895199,
+ -1128430099,
+ 986572496,
+ 1062121018,
+ 1043997057,
+ 1036881418,
+ 1058263765,
+ 1049694468,
+ -1107269268,
+ -1127305100,
+ -1082657166,
+ 1028589556,
+ 1039590008,
+ 1043681304,
+ 1050203836,
+ -1086893071,
+ -1109793247,
+ -1098274935,
+ 1015936512,
+ 1045047083,
+ -1081583262,
+ -1109881446,
+ 1026514272,
+ 1051049640,
+ -1135717930,
+ 1033627674,
+ -1103970687,
+ -1135652065,
+ 1065666741,
+ 1015325364,
+ 1062906991,
+ 1101040253,
+ -1099093409,
+ -1096124269,
+ 1050366744,
+ 1018918462,
+ -1140026478,
+ 1060193653,
+ 1069175133,
+ -1089796586,
+ -1103141454,
+ -1111777184,
+ 1024588779,
+ -1115953985,
+ 1034400544,
+ 1033272988,
+ 1055199022,
+ 1046486840,
+ 1053451485,
+ -1122471869,
+ 1019633468,
+ 1037497588,
+ 1031661783,
+ -1095973243,
+ -1119314788,
+ -1129995220,
+ -1107530988,
+ -1076846683,
+ -1129693225,
+ -1081584832,
+ -1110537897,
+ 1032037746,
+ -1131611601,
+ 1039982964,
+ 1041684774,
+ -1088141590,
+ 1025362348,
+ -1117881944,
+ 1052770646,
+ -1104286220,
+ -1086541865,
+ 1055761506,
+ -1095600986,
+ -1119048044,
+ -1122104534,
+ -1133412276,
+ -1120132043,
+ 1028775501,
+ -1145162528,
+ -1088618720,
+ 1046041314,
+ 1062443996,
+ 1080472615,
+ -1098674573,
+ 1063959754,
+ -1082792257,
+ -1068339486,
+ 1078173658,
+ -1090367848,
+ 1030863080,
+ 1051530864,
+ 1051339833,
+ -1097438161,
+ -1086236616,
+ -1088620401,
+ 1051264366,
+ 1062388563,
+ 1041677197,
+ 1043481869,
+ -1093785189,
+ -1110636132,
+ 1067301405,
+ 1038409369,
+ -1080796462,
+ 1069959850,
+ 1076152654,
+ -1121859108,
+ -1110053169,
+ 1060885008,
+ 986172457,
+ -1115677566,
+ 1059150154,
+ -1089994209,
+ -1132837683,
+ 1051892092,
+ 1061677640,
+ 1049131586,
+ 1053643819,
+ -1063773532,
+ -1114004493,
+ -1094077496,
+ 1040011937,
+ 1047558417,
+ -1082767882,
+ -1114182766,
+ 1036463825,
+ 1083811412,
+ 1059981569,
+ -1145802006,
+ 1058921933,
+ -1076319756,
+ 1008458120,
+ -1096322897,
+ 1078496911,
+ 1075850631,
+ -1080916527,
+ 1048750294,
+ -1125318706,
+ 1028674262,
+ -1108734022,
+ -1093020867,
+ -1140408330,
+ -1116017313,
+ -1087496973,
+ -1145953924,
+ 1036473664,
+ 1017576789,
+ 1029456355,
+ 1036404106,
+ -1103173667,
+ 1059064973,
+ 1047991225,
+ 1048591620,
+ -1081833703,
+ -1073112463,
+ -1130411471,
+ -1095878912,
+ 1053407343,
+ 1054868517,
+ -1077551836,
+ 1017875698,
+ -1107309337,
+ -1113629643,
+ 1050082102,
+ -1111447491,
+ 1054005694,
+ 1087690287,
+ -1080689183,
+ 1018141203,
+ -1088304662,
+ -1090511250,
+ 1026006165,
+ 1057438962,
+ 1077037172,
+ -1046732874,
+ -1094692002,
+ -1104590479,
+ 1086165507,
+ 1075104550,
+ 1065260337,
+ 1049354522,
+ -1047789738,
+ -1061536022,
+ 1066413748,
+ 1050216647,
+ -1081788130,
+ -1115606585,
+ 1010282663,
+ 1036479805,
+ -1118254338,
+ 1029396205,
+ 1028522691,
+ 1030086410,
+ -1114396050,
+ -1125579263,
+ -1113926920,
+ -1087520290,
+ 1042342453,
+ -1133821936,
+ -1112067466,
+ 1045542607,
+ 1032668561,
+ 1030510778,
+ -1091387194,
+ 1046483736,
+ -1096302934,
+ -1098905033,
+ -1122882288,
+ -1132180245,
+ 1057078341,
+ -1056129178,
+ -1076916189,
+ 1091301166,
+ 1076054063,
+ 1094994864,
+ 1059244308,
+ 1074846040,
+ -1061064363,
+ -1053991387,
+ 1092902706,
+ -1063037140,
+ 1039376665,
+ 1023665352,
+ 1024243558,
+ -1105075822,
+ -1123640868,
+ -1127969949,
+ -1121337584,
+ -1121837944,
+ -1109610398,
+ -1117610209,
+ -1128842496,
+ 1015798417,
+ 1045067384,
+ -1071183895,
+ -1073728925,
+ 1039705864,
+ -1111663994,
+ 1081844392,
+ -1119328013,
+ 1052031452,
+ -1060596138,
+ -1063228671,
+ 1099885915,
+ 1059056344,
+ 1008672088,
+ 1041757718,
+ -1106404967,
+ 1049224285,
+ 1057154351,
+ -1113303008,
+ 1056136459,
+ -1098870075,
+ 1033449941,
+ 1032278148,
+ -1102383724,
+ -1098749660,
+ 1056631719,
+ -1105105311,
+ -1088960178,
+ 1048850841,
+ 1041202016,
+ -1115430393,
+ -1074325346,
+ -1097310239,
+ 1020656904,
+ -1116508600,
+ 1020199648,
+ 1050431501,
+ -1098747472,
+ 1020745048,
+ 1029229396,
+ 1056579929,
+ 1045179329,
+ -1126636238,
+ 1055292791,
+ -1081693430,
+ 1029874505,
+ -1129604393,
+ -1110108883,
+ 1036713178,
+ -1129456785,
+ -1064340306,
+ 1025633103,
+ 1037633409,
+ 1065437991,
+ 1051726960,
+ 1039850160,
+ 1065324848,
+ -1063188379,
+ -1082852519,
+ 1075903370,
+ -1092450949,
+ 1011793688,
+ 1057307758,
+ 1009301445,
+ 1032076485,
+ 1057147448,
+ -1123851641,
+ 1057488069,
+ 1076587635,
+ 1045771116,
+ 1051679119,
+ -1085932389,
+ 1030736024,
+ 1053906723,
+ 1032210314,
+ 1056260011,
+ 1054965718,
+ 1050250085,
+ 979576608,
+ 1034911769,
+ -1100227143,
+ 1024693729,
+ 1019629180,
+ -1106694825,
+ -1094044913,
+ 1050336646,
+ -1079398032,
+ 1051927555,
+ 1071272348,
+ 1087377321,
+ 1062327119,
+ 1029280932,
+ 1054351504,
+ -1096768288,
+ -1098397337,
+ 1076554130,
+ -1091345564,
+ -1104361421,
+ -1081237455,
+ 1054127262,
+ 1017985332,
+ 1055446350,
+ 1081042200,
+ -1086009242,
+ 1056574217,
+ -1097112180,
+ -1069543999,
+ -1110829538,
+ 1047831329,
+ -1085677569,
+ -1091939943,
+ 1042202526,
+ -1128653873,
+ 1043285401,
+ 1045826036,
+ -1081860997,
+ 1044256426,
+ -1094008322,
+ -1103339106,
+ -1109703859,
+ 1049311862,
+ -1101503242,
+ 1034461075,
+ -1105441650,
+ 1075681017,
+ 1027794209,
+ 1045196067,
+ 1056059715,
+ 1065534821,
+ -1127140220,
+ 1036327398,
+ -1120840399,
+ 1044621935,
+ 1037537562,
+ -1082044508,
+ -1108661978,
+ -1081999559,
+ 1061011139,
+ -1105823670,
+ -1093843958,
+ -1111394590,
+ -1113172728,
+ -1102014993,
+ 1024268467,
+ -1093431942,
+ -1107656865,
+ 1062593135,
+ 1067274256,
+ 1018713321,
+ -1095495137,
+ -1090688208,
+ 1016967946,
+ -1123412359,
+ 1105090659,
+ 1067033872,
+ -1066120384,
+ -1118157913,
+ -1085459611,
+ -1101463291,
+ -1114660106,
+ -1094308907,
+ -1094908262,
+ 1038325818,
+ -1078123782,
+ -1077893526,
+ 1036956493,
+ -1117404055,
+ 1025345345,
+ 1061875348,
+ -1098479330,
+ -1119743720,
+ 1013053397,
+ 1043522919,
+ 1056360077,
+ 1073253761,
+ -1095496434,
+ 1042808234,
+ 1037784616,
+ 1033538217,
+ -1105832044,
+ -1098795213,
+ 1044514479,
+ 1014719994,
+ -1119305764,
+ 1046355579,
+ 1053135006,
+ 1031805262,
+ 1044234321,
+ 1051601532,
+ -1108885504,
+ -1102629661,
+ 1026022044,
+ 1051362195,
+ -1117363581,
+ 1080557093,
+ 1088086242,
+ -1102148781,
+ -1082930041,
+ -1090568878,
+ 1050883891,
+ 1059443233,
+ 1071837967,
+ 1076024443,
+ -1080668762,
+ -1106070491,
+ -1103323582,
+ 1004816609,
+ -1145444429,
+ 1060015421,
+ 1048456387,
+ 1030213217,
+ 1025489587,
+ 1052400361,
+ -1114444248,
+ -1116705998,
+ 1038272914,
+ -1093579852,
+ -1136539950,
+ 1027579347,
+ 1044656378,
+ 1078491304,
+ 1047713741,
+ 1062555778,
+ 1051319436,
+ 1049788862,
+ -1112109558,
+ 1019253834,
+ -1137110570,
+ -1087237782,
+ 1034229773,
+ -1106854402,
+ 1033845750,
+ -1134375626,
+ -1103023102,
+ 1005738316,
+ 1024591190,
+ -1069818383,
+ 1025090803,
+ 1011861636,
+ -1113566286,
+ -1065283506,
+ 1050324848,
+ 992331856,
+ 1033351017,
+ -1094457003,
+ 1017658141,
+ 1040893137,
+ 1045337285,
+ -1112177619,
+ 1040468664,
+ 1028159398,
+ 1026355848,
+ 1013424268,
+ -1129162798,
+ -1114401691,
+ -1090928239,
+ -1092764832,
+ 1041618957,
+ 1059826771,
+ 1065250436,
+ -1105386034,
+ 1041896750,
+ -1110199542,
+ 1033505619,
+ -1120648094,
+ -1126138256,
+ -1109589239,
+ 1028061767,
+ -1137149045,
+ -1105597362,
+ -1113926228,
+ -1074431394,
+ 1041518711,
+ -1129381543,
+ -1116353684,
+ 1023985478,
+ 1049335886,
+ 1042677026,
+ 1026861336,
+ 1022957021,
+ -1089160457,
+ -1099596503,
+ -1077544621,
+ 1041497754,
+ -1095244622,
+ -1094297862,
+ -1107189220,
+ -1119081322,
+ -1102770577,
+ -1086367449,
+ -1108241766,
+ -1098729572,
+ -1092434124,
+ 1039466838,
+ -1112229442,
+ 1052297841,
+ -1094273083,
+ -1106922907,
+ 1030044992,
+ -1096257111,
+ 1043063152,
+ 1051820715,
+ 1023960706,
+ 1040147890,
+ -1085069393,
+ 1049337047,
+ -1102756197,
+ 1061921863,
+ 1046087875,
+ -1098563246,
+ -1097544241,
+ -1122273229,
+ -1080784666,
+ 1018101211,
+ 1043046758,
+ -1076008619,
+ -1097151873,
+ -1108426197,
+ -1099597977,
+ 1047652417,
+ 1051320525,
+ 1050658533,
+ 1025139875,
+ 1031985330,
+ -1104264161,
+ 1052039522,
+ -1091842626,
+ -1182141584,
+ -1098656140,
+ 1046174029,
+ 1067563896,
+ -1072210443,
+ -1071378115,
+ -1084199284,
+ -1120596666,
+ 1034532957,
+ 1057708890,
+ 1056288177,
+ -1093423333,
+ -1107137402,
+ 1033597076,
+ 999904336,
+ 1036870632,
+ -1075550080,
+ -1098750059,
+ -1105303530,
+ -1107099689,
+ -1116665638,
+ 1052290742,
+ -1081499263,
+ 1068261473,
+ 1052608811,
+ 1048205137,
+ -1100466362,
+ -1101950058,
+ -1097448594,
+ -1110523537,
+ 1038414795,
+ 1056382251,
+ -1073527151,
+ 1024529144,
+ -1110910141,
+ -1060248185,
+ -1084393976,
+ 1027028015,
+ 1070932174,
+ 1074335348,
+ 1041040908,
+ 1054436021,
+ -1053939457,
+ -1073963023,
+ 1070486314,
+ -1087127492,
+ -1105602031,
+ 1037333375,
+ 994095176,
+ -1090974695,
+ 1028857710,
+ 1030979694,
+ -1060764479,
+ -1079600046,
+ 1042780578,
+ 1011857127,
+ 1036125777,
+ 1052212737,
+ -1095725074,
+ 1023517722,
+ -1154087636,
+ 1052871423,
+ 1007365836,
+ 1032757685,
+ -1103222572,
+ 1031835312,
+ 1007388876,
+ 988524968,
+ 1028962313,
+ -1087009173,
+ -1098143284,
+ -1097134956,
+ -1095541692,
+ 1033906545,
+ 1053022424,
+ 1026822492,
+ -1077646797,
+ -1097466955,
+ 981021196,
+ -1112951991,
+ -1102941023,
+ -1091235159,
+ 1025085184,
+ 1046619215,
+ -1104312099,
+ 1082459907,
+ 1055573785,
+ 1043705386,
+ -1106056066,
+ 1076754627,
+ 955855360,
+ 1047575850,
+ -1095542166,
+ -1086578625,
+ 1078855647,
+ -1098310429,
+ 1062000429,
+ -1100915032,
+ -1101749010,
+ 1023712918,
+ -1100983286,
+ 1035639497,
+ -1100068453,
+ -1094786416,
+ 1040939044,
+ 1060193689,
+ 1022567828,
+ 1032730371,
+ -1130873854,
+ -1099760006,
+ 1025843577,
+ 1044181413,
+ -1089464763,
+ 1029966823,
+ -1120697444,
+ 1034352597,
+ -1123017597,
+ 1047684927,
+ 1047407420,
+ 1013740584,
+ -1086537498,
+ 1046004334,
+ -1137592618,
+ 1082596958,
+ 1053830803,
+ 1073102606,
+ -1084246300,
+ -1068439203,
+ 1079802975,
+ -1101246386,
+ -1089556359,
+ -1111299625,
+ -1090340913,
+ 1015259232,
+ 1056789269,
+ -1105347536,
+ 1035299623,
+ -1091860148,
+ 1031351018,
+ 1014322230,
+ -1103172107,
+ 1052769557,
+ -1113568108,
+ 1011155155,
+ 1050165075,
+ 1073610769,
+ -1073644352,
+ 1053487369,
+ -1110932330,
+ 1059895967,
+ 1035209190,
+ -1122323894,
+ 1047471948,
+ -1075878416,
+ 1051199170,
+ -1096259558,
+ 1066232909,
+ 1057691274,
+ -1045688621,
+ 1042684114,
+ -1089944850,
+ -1089374807,
+ -1096211303,
+ -1089414544,
+ -1108608292,
+ 1052139364,
+ -1120438821,
+ 1100331023,
+ 1095083231,
+ -1094217253,
+ -1071944076,
+ 1082372080,
+ 1088889415,
+ 1091930754,
+ 1091190844,
+ 1103092201,
+ -1074195849,
+ -1091412362,
+ -1086774172,
+ -1098495308,
+ 994714672,
+ -1086536545,
+ 1050693742,
+ 1012933356,
+ -1098314738,
+ -1079733034,
+ -1092857596,
+ -1119285121,
+ 1041778025,
+ 1084559892,
+ 1063534287,
+ 1031332740,
+ -1116882878,
+ 1024564399,
+ 1062595140,
+ 996376371,
+ -1106930694,
+ 1055559227,
+ 1036700922,
+ -1118854252,
+ 1023072382,
+ -1082739078,
+ 1033103338,
+ -1146398023,
+ -1106681779,
+ -1132688499,
+ 1069027461,
+ -1127662332,
+ -1072251126,
+ 1055519109,
+ 1032425800,
+ 989678436,
+ 1011508832,
+ -1122923530,
+ 1053571271,
+ -1055902130,
+ -1080752063,
+ -1093640004,
+ -1131530118,
+ 1056748373,
+ -1101668809,
+ 1065716389,
+ -1054979078,
+ -1059918615,
+ 1065723123,
+ 1065531437,
+ -1114334850,
+ 1024596088,
+ -1091313739,
+ -1128589008,
+ 1032197646,
+ 1043208281,
+ 1037876404,
+ 1072219747,
+ -1092537180,
+ -1103729895,
+ 1032229616,
+ 1043874946,
+ 1051447777,
+ -1095799270,
+ -1110932439,
+ -1077581709,
+ 1052602601,
+ -1107899962,
+ 1059012886,
+ 1054406642,
+ -1097246663,
+ -1080499622,
+ -1105300939,
+ -1095216416,
+ 1050727748,
+ -1081316904,
+ -1122339439,
+ -1076199343,
+ -1090534444,
+ -1122114168,
+ 1068260894,
+ 1055395846,
+ -1110085098,
+ -1107035206,
+ -1095443063,
+ -1102961373,
+ 1054758589,
+ -1091774594,
+ 1050245090,
+ 1071725769,
+ 1042855497,
+ 1049102701,
+ 1062324597,
+ 1041599565,
+ -1101352117,
+ -1082844370,
+ 1072593922,
+ 1024644884,
+ -1098309362,
+ -1125890952,
+ -1113308964,
+ 1077323503,
+ 1046143716,
+ -1124444572,
+ 1018499777,
+ -1139434966,
+ -1123857742,
+ 1021960396,
+ -1112663846,
+ 1014939236,
+ 1035728716,
+ 1064683771,
+ 1074648399,
+ -1093251673,
+ -1059499699,
+ -1072249825,
+ 1047329980,
+ 1096868346,
+ 1049590893,
+ 1051729649,
+ -1088420484,
+ -1096542203,
+ -1095735138,
+ -1105271656,
+ -1114278639,
+ 1047721792,
+ 1067983042,
+ 1048940925,
+ 1030743127,
+ 1030011575,
+ -1113665035,
+ -1120928733,
+ 1029608155,
+ -1074185842,
+ -1086945582,
+ -1109597352,
+ 1043514732,
+ 1019863450,
+ -1077256432,
+ -1088406592,
+ -1103241785,
+ 1035606810,
+ -1141365478,
+ -1117174255,
+ 1041307510,
+ -1095712004,
+ -1095705318,
+ 1024071369,
+ -1114466852,
+ 1054341088,
+ 1065802940,
+ 1067718696,
+ 1048414788,
+ -1093635332,
+ 997677822,
+ -1125973742,
+ -1105708879,
+ -1108005003,
+ 1035264553,
+ -1139760944,
+ 1065971494,
+ 1057503203,
+ 1046051128,
+ 1045457957,
+ -1108716186,
+ -1099180408,
+ 1039611157,
+ 1034379002,
+ 1043331845,
+ -1096575631,
+ 1013510866,
+ -1096353777,
+ 1061444042,
+ 1025543678,
+ -1085587593,
+ 1015466655,
+ 1059485939,
+ -1092425245,
+ -1113010495,
+ -1107084322,
+ 1041329256,
+ 1050080172,
+ -1113518000,
+ -1103308606,
+ 1059078838,
+ -1101939388,
+ -1102893724,
+ -1126889144,
+ -1070962394,
+ -1083759306,
+ 1051359512,
+ 1042263562,
+ 1043924852,
+ 1072061204,
+ -1086330568,
+ -1092954785,
+ -1116220743,
+ -1082855609,
+ -1086076102,
+ -1113153676,
+ 1055700268,
+ 1064060055,
+ -1149610368,
+ -1097720722,
+ 1031246480,
+ 1057147850,
+ -1086226468,
+ -1054215342,
+ 1034409411,
+ -1080495974,
+ 1046903763,
+ 1050547500,
+ 1024832887,
+ 1024050746,
+ -1097428431,
+ -1085643273,
+ 1022646476,
+ 1052520099,
+ -1140356898,
+ -1095000178,
+ 1011122156,
+ -1102726875,
+ 1041080684,
+ 1067677439,
+ -1080325315,
+ -1092272019,
+ -1097960560,
+ -1102033125,
+ 1034212623,
+ -1122932110,
+ -1071919496,
+ -1102042736,
+ 1036226677,
+ -1102722975,
+ 1070881965,
+ -1131821720,
+ -1103591345,
+ -1090066343,
+ -1149001100,
+ -1123896901,
+ 1039927782,
+ 1034352748,
+ 1062945795,
+ -1105242084,
+ -1096891944,
+ 1047423983,
+ 1025533962,
+ -1088590674,
+ 1035771046,
+ -1092703081,
+ 1030605752,
+ -1107129024,
+ -1103045245,
+ -1080321077,
+ 1056081793,
+ -1097501780,
+ 1061873834,
+ 1035046736,
+ 1051528987,
+ 1027876204,
+ -1086052428,
+ 1046534612,
+ -1097710876,
+ -1100858117,
+ 1034449063,
+ 1047651529,
+ -1096947642,
+ -1107259955,
+ 1063312098,
+ -1103874927,
+ -1074226529,
+ -1118649995,
+ -1070163807,
+ -1088973539,
+ 1050686075,
+ 1039368048,
+ 1051212761,
+ -1100116812,
+ -1090445932,
+ -1122795400,
+ 1065361887,
+ 1035018766,
+ -1087238554,
+ 1072322866,
+ -1075705198,
+ -1074663970,
+ 1073490607,
+ 1055506121,
+ 1056315205,
+ 1055900822,
+ -1097988348,
+ -1114852220,
+ -1080107895,
+ -1094721209,
+ 1046692867,
+ -1098340650,
+ -1067254919,
+ -1120412784,
+ 1071008886,
+ 1039198893,
+ 1050906751,
+ 1057324854,
+ -1115490343,
+ -1054522186,
+ -1129233209,
+ 1038440410,
+ 1034160370,
+ 1049161278,
+ 1040030972,
+ -1091720133,
+ -1119040120,
+ -1091949116,
+ 1033097256,
+ 1058361656,
+ 1048915008,
+ 1049387587,
+ 1036350542,
+ -1098386837,
+ -1093745099,
+ -1096922691,
+ -1076767150,
+ 1062073353,
+ -1127875375,
+ 1026854387,
+ 1018098934,
+ -1088234564,
+ -1106392482,
+ -1148580109,
+ 1043147668,
+ 1067437617,
+ -1098916122,
+ -1083813663,
+ 1038683304,
+ -1113718675,
+ 1027448684,
+ 1018242478,
+ -1147529704,
+ -1100001778,
+ 1040687675,
+ 1032633342,
+ -1102117500,
+ -1110937091,
+ -1077209530,
+ -1078309889,
+ 1059222635,
+ -1099377725,
+ -1081712969,
+ -1079586960,
+ -1129905767,
+ 1024400042,
+ -1097372010,
+ -1101572295,
+ -1092645753,
+ -1104962849,
+ -1079644124,
+ -1103478408,
+ -1075415668,
+ 1024967939,
+ 1050895212,
+ -1113909343,
+ -1115588044,
+ 1073772908,
+ -1099037545,
+ -1133083634,
+ 1023587522,
+ -1082294354,
+ 1049117506,
+ 1037259487,
+ 1050003495,
+ -1085967744,
+ -1112240454,
+ 1029594498,
+ -1129420265,
+ -1111049396,
+ 1055358929,
+ -1043601402,
+ -1095984504,
+ -1107739420,
+ 1078677326,
+ -1077865593,
+ -1070360966,
+ 1051618626,
+ -1073579938,
+ 1023442827,
+ 1064958148,
+ -1082459610,
+ -1104597986,
+ 1091034342,
+ 1078065375,
+ 1073081046,
+ 1071882829,
+ 1015886422,
+ -1100363658,
+ 1067147176,
+ 1079774772,
+ 1083943107,
+ -1086779818,
+ -1073355336,
+ -1086968632,
+ 1031372823,
+ 1053840719,
+ 1061102666,
+ -1074436711,
+ -1066786602,
+ 1063394274,
+ 1027864926,
+ 1045351459,
+ 1025457822,
+ 1052461248,
+ -1084347689,
+ -1096924886,
+ -1137454496,
+ 1040396685,
+ 1049298100,
+ 1025349087,
+ 1029417231,
+ 1054564106,
+ -1118119785,
+ 986347119,
+ 1022817037,
+ 1024891797,
+ -1084942958,
+ -1086436156,
+ -1128606083,
+ 1045931035,
+ -1056650363,
+ 1046161497,
+ -1096508482,
+ -1078093141,
+ -1094626612,
+ -1078076842,
+ -1114712000,
+ 1034651742,
+ -1095709196,
+ 1063275433,
+ 1100950722,
+ 1083830094,
+ -1068490192,
+ -1071322080,
+ -1101032218,
+ 1052876509,
+ 1087739565,
+ 1069720255,
+ 1093256827,
+ -1064231275,
+ -1073882590,
+ 1003704256,
+ -1102488974,
+ 1057633553,
+ 1063861045,
+ 1042088719,
+ 1049080420,
+ 1026234354,
+ -1096018493,
+ 1046552554,
+ 1032216677,
+ -1123066290,
+ -1120167157,
+ -1081289614,
+ 1043194014,
+ -1102923323,
+ 1034969389,
+ 1023842466,
+ 1006993854,
+ 1058517892,
+ 1050861585,
+ 1039806077,
+ -1114928172,
+ -1106705856,
+ -1085558330,
+ -1095156410,
+ 1047516702,
+ -1086804810,
+ 1060638951,
+ 1085491431,
+ 1067207915,
+ -1082085935,
+ 1056555175,
+ -1079930152,
+ -1072189171,
+ 1058022878,
+ -1072857989,
+ 1072151873,
+ -1104708752,
+ -1086291481,
+ -1111896976,
+ 1022925978,
+ -1095959259,
+ -1109751257,
+ -1098367374,
+ 1035542312,
+ 1028740755,
+ 1045608319,
+ -1099973598,
+ 1063381546,
+ -1056378250,
+ -1106776417,
+ 1043044072,
+ 1069555192,
+ -1088578017,
+ -1145759672,
+ -1099955880,
+ -1090149784,
+ -1080949948,
+ -1095483062,
+ 1039812280,
+ 1048373654,
+ -1121694461,
+ 1050159461,
+ -1107470117,
+ 1044491697,
+ -1122955476,
+ -1090092762,
+ -1115414678,
+ -1115792051,
+ -1123642777,
+ -1104070350,
+ -1069653975,
+ -1091204858,
+ 1044896231,
+ 1054853282,
+ 1061391668,
+ -1098874944,
+ 1047475810,
+ 1060296533,
+ -1092164172,
+ 1032192062,
+ 1041317799,
+ 1006647555,
+ -1090395451,
+ 1031486706,
+ -1168011696,
+ -1126485769,
+ -1106982991,
+ -1107000060,
+ 1045651578,
+ 1057172224,
+ 1066423187,
+ 1017110281,
+ -1115660901,
+ 998751686,
+ -1075228541,
+ 1046547039,
+ 1053864093,
+ -1084791014,
+ -1073416627,
+ 1057862985,
+ 1072615179,
+ -1078268126,
+ -1082113593,
+ -1093904114,
+ 1063102450,
+ -1062646238,
+ 1067340952,
+ 1051939810,
+ -1082053508,
+ 1041874522,
+ 1042975350,
+ -1076761638,
+ 1050905374,
+ 1066362274,
+ -1079128444,
+ -1075673398,
+ -1080741122,
+ -1098241333,
+ -1089097107,
+ -1081834070,
+ -1097089701,
+ 1048638451,
+ -1097075991,
+ -1105038877,
+ 1030708549,
+ 1066659078,
+ 967335456,
+ 1042859285,
+ -1099170665,
+ 1069000228,
+ -1115215440,
+ -1102396445,
+ 1057301477,
+ 1026416698,
+ -1131581806,
+ -1071701066,
+ -1072828229,
+ 1044373479,
+ 1046153280,
+ 1057001223,
+ 1033719278,
+ -1085896920,
+ 1042879324,
+ -1112175115,
+ -1128840525,
+ -1099991870,
+ -1111513614,
+ 1036207138,
+ 1053145290,
+ -1085093238,
+ 1066728137,
+ 1026072234,
+ -1099667498,
+ 1065069507,
+ 1051145217,
+ 1042646963,
+ -1118176254,
+ -1147948194,
+ 1088317191,
+ -1126043528,
+ -1096504475,
+ 1058567558,
+ 1051052312,
+ -1115058259,
+ -1116276871,
+ 1031069988,
+ -1089596203,
+ -1079147976,
+ -1095468388,
+ 1037959515,
+ -1092152222,
+ 1055489575,
+ 1051247799,
+ 1070993569,
+ -1097551876,
+ 1041717855,
+ -1089578882,
+ -1107881685,
+ -1082277626,
+ -1089695784,
+ -1065435879,
+ 1033425582,
+ -1101022474,
+ -1099898910,
+ 1041299916,
+ 1049503434,
+ -1091424165,
+ 1049479617,
+ -1076279557,
+ -1108925954,
+ 1058972217,
+ 1062039550,
+ 1040655780,
+ 1060418513,
+ -1109532036,
+ 1036159041,
+ 1071348228,
+ -1103113669,
+ 1053214843,
+ -1097288917,
+ -1081314661,
+ -1129673061,
+ 1065555991,
+ 1042572786,
+ 1016225481,
+ 1049351676,
+ 1046184252,
+ 1041098148,
+ -1126360922,
+ -1110816098,
+ 1056917106,
+ -1098515320,
+ -1097538687,
+ -1114881331,
+ 1058484515,
+ 1042872069,
+ 1056696230,
+ -1094384466,
+ -1083520072,
+ 1087195869,
+ -1108449267,
+ -1097675963,
+ 1034939352,
+ -1098585053,
+ 1045276616,
+ -1087004959,
+ 1055175067,
+ -1102915245,
+ 1017901786,
+ 1052959589,
+ -1086247127,
+ 1049091840,
+ 1059198397,
+ 1038449998,
+ 1049278894,
+ -1096382875,
+ -1098574783,
+ 1030530560,
+ 1032190051,
+ 1069025442,
+ -1133287558,
+ 1016650038,
+ 1065727773,
+ -1089879799,
+ 1056584428,
+ 1054969588,
+ -1099104039,
+ 1037631512,
+ 1029837924,
+ -1153740946,
+ -1067461596,
+ -1117732700,
+ 1050858657,
+ -1104152714,
+ 1026424674,
+ -1065192390,
+ -1071186118,
+ -1081659776,
+ -1080364896,
+ -1139954439,
+ 1041711340,
+ 1036373366,
+ 1058310145,
+ 1058060082,
+ 1016628213,
+ 1025489045,
+ -1090412313,
+ -1094822362,
+ 1023823659,
+ 1063070316,
+ -1105194238,
+ 1039748330,
+ 1037989572,
+ -1112496475,
+ 1042939464,
+ -1087716395,
+ 1023154776,
+ -1083659752,
+ -1131134869,
+ 1039983523,
+ -1094126135,
+ 1024245573,
+ 1043749413,
+ -1090506267,
+ -1067485685,
+ 1046373662,
+ -1089079736,
+ -1090970655,
+ -1093033995,
+ -1099407002,
+ 1051112795,
+ -1078016984,
+ -1077009532,
+ 1050155760,
+ -1082082941,
+ 1038167021,
+ -1090326099,
+ -1113995434,
+ 1024554319,
+ -1098341321,
+ -1073559684,
+ -1103565315,
+ 1067709870,
+ -1125102260,
+ -1157078736,
+ 1061976860,
+ 1064185684,
+ -1080190080,
+ -1090374925,
+ -1096667094,
+ -1098324234,
+ -1118949512,
+ -1116582479,
+ -1114092498,
+ 1060514899,
+ -1091842057,
+ 1022951810,
+ -1068948926,
+ -1115235486,
+ 1030578675,
+ 1024296742,
+ 1024729746,
+ -1093191553,
+ -1110391106,
+ -1096264683,
+ -1109279708,
+ -1086104192,
+ -1087979050,
+ 1060578190,
+ -1075506375,
+ 1052304954,
+ 1047451486,
+ 1057272426,
+ 1064711169,
+ -1069516603,
+ -1095174269,
+ 1036104789,
+ 1055414296,
+ -1090873951,
+ 1035099638,
+ 1047129640,
+ 1064811743,
+ 1060715142,
+ -1115406896,
+ -1115482109,
+ -1106580562,
+ 1058387727,
+ 1049411841,
+ 1046632866,
+ 1058847790,
+ 1054633652,
+ -1103251750,
+ 1061078462,
+ -1087909027,
+ 1069293263,
+ -1104660732,
+ -1112949332,
+ 1032882205,
+ -1079655925,
+ -1117802468,
+ -1106598463,
+ 1035003237,
+ 1053028160,
+ -1079950271,
+ -1088259992,
+ -1082949707,
+ 1047976606,
+ -1106564624,
+ -1115198144,
+ 1024644456,
+ -1094502524,
+ -1100656569,
+ -1122705119,
+ 1062133391,
+ 1054378139,
+ -1081406772,
+ 1038356701,
+ -1073563672,
+ -1083147019,
+ 1050585227,
+ 1044749809,
+ 1049291474,
+ 1069430382,
+ -1083419136,
+ 1026838221,
+ 1046633213,
+ 1069936440,
+ 1023530160,
+ 1060277223,
+ 1049838519,
+ -1080058976,
+ 1042055162,
+ 1038697108,
+ 1027702456,
+ -1070989855,
+ 1036803570,
+ 1054474585,
+ -1093930275,
+ -1081556372,
+ 1081067636,
+ 1052084722,
+ -1083670225,
+ -1076442326,
+ 1043707609,
+ 1055072582,
+ -1073172046,
+ 1068716878,
+ 1070385353,
+ -1052843896,
+ 1071799129,
+ 1048877224,
+ 1067241032,
+ 1018582689,
+ 1059406467,
+ -1090453506,
+ -1104580030,
+ -1084993202,
+ 1064405303,
+ 1068521960,
+ -1110447772,
+ 1011426031,
+ -1098262410,
+ 1049240198,
+ -1081215287,
+ -1087441563,
+ 1058265004,
+ 1025070172,
+ -1099477589,
+ -1105700856,
+ -1096253082,
+ 1038789686,
+ 1025686229,
+ 1034818568,
+ 991718704,
+ -1073190005,
+ 1073611141,
+ 1073949293,
+ -1085268941,
+ -1085509252,
+ -1105332854,
+ 1054567186,
+ -1072725684,
+ 1073032406,
+ 1065410459,
+ 1039494623,
+ 1053434360,
+ 1064475421,
+ 1074290583,
+ 1036877574,
+ 1054881258,
+ -1088232473,
+ 1035873336,
+ 1036213656,
+ 1059226213,
+ -1074748238,
+ 1061662936,
+ 1040162252,
+ -1106639461,
+ -1090065164,
+ 1066471425,
+ 1061797124,
+ 1026284224,
+ 1051059210,
+ -1102215374,
+ 1036490912,
+ 1046541459,
+ 1043163665,
+ 1049430758,
+ 1054566510,
+ 1057372710,
+ -1089451819,
+ 1074250958,
+ -1102541281,
+ 1051893176,
+ 1074625299,
+ -1088748890,
+ -1098176173,
+ -1085756004,
+ 1041043799,
+ -1098134887,
+ 1007385646,
+ -1102619992,
+ 1052159614,
+ -1104601685,
+ -1090025900,
+ -1105035306,
+ -1108292250,
+ -1100960980,
+ -1077981065,
+ 1014552428,
+ 1052968448,
+ 1058589628,
+ -1110795717,
+ 1081183529,
+ 1058684211,
+ -1071599863,
+ 1063304138,
+ -1069668244,
+ -1072630386,
+ 1061573135,
+ 1051828324,
+ 1054604937,
+ -1082303094,
+ -1088948564,
+ 1041293322,
+ -1110340388,
+ 1019594853,
+ -1085795009,
+ 1066484646,
+ -1079852664,
+ -1078192560,
+ 1055346804,
+ 1031875686,
+ -1084264960,
+ -1087960609,
+ 1066932779,
+ -1067895644,
+ -1086416105,
+ -1094653364,
+ -1115553540,
+ -1097135762,
+ -1085240982,
+ 1031882775,
+ -1090790204,
+ -1056601245,
+ 1024821764,
+ -1090282067,
+ 1012963434,
+ 1037039161,
+ 1048842594,
+ 1037465447,
+ -1093665833,
+ -1097094589,
+ -1104993898,
+ -1104681558,
+ 1032772382,
+ -1161333171,
+ -1103559337,
+ 1068639247,
+ 1050697821,
+ -1111025662,
+ 1033112449,
+ 1072429998,
+ -1109795722,
+ -1110963887,
+ -1095397672,
+ -1099816585,
+ 1036975842,
+ 1023884938,
+ 1049537221,
+ -1078714781,
+ 1037204784,
+ -1058449993,
+ 1040962867,
+ -1100700951,
+ 1063566283,
+ 1059650948,
+ -1111776067,
+ -1071879747,
+ -1093380903,
+ -1093994895,
+ -1133042704,
+ 1078587562,
+ 1057864339,
+ -1094283270,
+ -1088944966,
+ 1063297559,
+ 1035661426,
+ -1088590065,
+ 1069727437,
+ 1077124405,
+ 1040600418,
+ -1115078659,
+ -1114659956,
+ -1087162343,
+ -1140766924,
+ 1026375109,
+ 1049937809,
+ 1066112718,
+ -1125832126,
+ -1126838010,
+ 1062524191,
+ -1088727361,
+ -1113917073,
+ -1107073071,
+ 1043557503,
+ 1077229328,
+ 1067159272,
+ 1039559846,
+ -1094518078,
+ 1063093156,
+ 1059652691,
+ -1120381966,
+ -1103451359,
+ 1063954172,
+ 1042452584,
+ 1044333954,
+ 1058220425,
+ -1079688187,
+ -1089969381,
+ 1067547996,
+ -1084710464,
+ -1060890923,
+ 1058784582,
+ 1057321739,
+ -1067192632,
+ 1084977465,
+ -1080245584,
+ 1057900328,
+ -1062847454,
+ 1074294922,
+ 1066114683,
+ -1105861659,
+ 1029957904,
+ -1089766672,
+ 1043850616,
+ 1066302381,
+ 1069728831,
+ 1038816368,
+ 1053425828,
+ 1045129378,
+ 1055692705,
+ -1103209452,
+ 1041073917,
+ -1087629265,
+ -1095036191,
+ 1064045492,
+ 1027470708,
+ 1025935653,
+ 1024271683,
+ -1096274104,
+ -1140393766,
+ -1085960143,
+ 1046580850,
+ 1027106246,
+ 1068111690,
+ 1044382049,
+ 1046659831,
+ 1065475061,
+ 1077139874,
+ 1058420779,
+ 1069677371,
+ 1058225943,
+ -1108762860,
+ -1111699258,
+ 1051336545,
+ 1031294395,
+ -1097327184,
+ 1014075519,
+ 1039133345,
+ 1060056506,
+ -1070521664,
+ -1137926840,
+ -1079820702,
+ -1093171098,
+ 1051619166,
+ 1034911120,
+ 1022513139,
+ -1098041483,
+ 1016211412,
+ 1037354523,
+ 1052648573,
+ -1063653345,
+ 1055568702,
+ -1101146046,
+ -1110756027,
+ -1090518745,
+ -1110439624,
+ -1102413040,
+ -1101804566,
+ -1089108430,
+ 1051404809,
+ -1053474902,
+ 1051683596,
+ -1106505267,
+ -1063793421,
+ 1056581378,
+ -1073517229,
+ -1079187675,
+ 1056718816,
+ -1065308997,
+ 1069516287,
+ 1087303007,
+ 1062965706,
+ -1117906708,
+ 1063349141,
+ 1075434740,
+ 1055108636,
+ 1054637072,
+ -1093823781,
+ -1083311148,
+ -1109985802,
+ -1110315920,
+ 1043408615,
+ 1075026952,
+ -1076579801,
+ -1103577169,
+ 1005052634,
+ -1086350450,
+ 1078699781,
+ 1057963963,
+ 1046306748,
+ -1090453452,
+ 1028410632,
+ 1021895196,
+ 1065894264,
+ -1072638490,
+ -1089268197,
+ -1117709254,
+ 1065699045,
+ 1056241102,
+ -1093105956,
+ -1114876046,
+ -1073530246,
+ -1097111013,
+ 1052599801,
+ 1043661794,
+ 1037468341,
+ 1041842583,
+ 1036891260,
+ 1073938867,
+ 1094293349,
+ -1088429417,
+ -1098500046,
+ 1037689212,
+ 1058648149,
+ 1066214346,
+ 1052860404,
+ 1065321312,
+ -1069369830,
+ -1095143718,
+ -1090420683,
+ -1070630242,
+ -1112706655,
+ 1045515227,
+ -1097630497,
+ 1040599995,
+ 1073532047,
+ 1031288114,
+ 1048791584,
+ -1086802649,
+ -1115389580,
+ 1070450078,
+ 1041529916,
+ -1128470439,
+ 1040443858,
+ 1076058722,
+ 1009321182,
+ -1114686676,
+ 1044864666,
+ -1077970146,
+ 1040716676,
+ 1043059979,
+ 1057177335,
+ 1042207718,
+ 1021601943,
+ 1064305033,
+ 1049968532,
+ 1020297670,
+ 1060514874,
+ -1098897392,
+ -1071481348,
+ -1083627149,
+ 1067815466,
+ 1057774906,
+ -1082044480,
+ 1066787838,
+ 1053104359,
+ -1105356545,
+ -1142370482,
+ -1091239541,
+ -1090112235,
+ -1095264920,
+ -1079206432,
+ 1055905172,
+ 1036404822,
+ -1107059672,
+ 1021723572,
+ -1066771811,
+ -1101409671,
+ -1100041561,
+ 1061577501,
+ 1040296930,
+ -1074255443,
+ 1066354578,
+ -1074067292,
+ -1078430463,
+ 1054407215,
+ 1048701693,
+ 1035775437,
+ 1045437678,
+ -1118044021,
+ 1075378048,
+ -1098855940,
+ -1084213310,
+ 1076077602,
+ 1079573947,
+ -1072363324,
+ -1052537143,
+ 1059368269,
+ 1065026014,
+ -1051503828,
+ 1085154794,
+ -1093046533,
+ -1122899296,
+ 1062424213,
+ 1050503705,
+ -1073913555,
+ -1075127070,
+ -1072715443,
+ -1100000901,
+ 1049059448,
+ -1109613762,
+ -1144203856,
+ -1097681013,
+ -1092226263,
+ -1092972152,
+ 1056452536,
+ 1043900527,
+ 1035296629,
+ 1064986214,
+ -1098653740,
+ -1107195241,
+ -1096664445,
+ -1093449304,
+ 1016995774,
+ 1054709468,
+ -1104921610,
+ -1105742493,
+ 1055383337,
+ 1053224907,
+ -1102277730,
+ 1044316841,
+ 1070590958,
+ -1109933842,
+ 1035392108,
+ -1097228330,
+ 1065593545,
+ 1042928289,
+ 1047372686,
+ -1101911322,
+ 1066054046,
+ -1074682418,
+ -1081843429,
+ -1073900821,
+ 1057673470,
+ -1078609315,
+ -1100276562,
+ 1007977728,
+ -1083976138,
+ 1095474679,
+ 1050205385,
+ 1061327143,
+ 1087241813,
+ 1062030692,
+ 1064468790,
+ 1047510348,
+ -1073559064,
+ -1083252407,
+ 1060518312,
+ 1083819719,
+ -1078447556,
+ 1053285746,
+ 1039595421,
+ 1041609198,
+ -1097124499,
+ -1087720323,
+ 1051877812,
+ -1117904001,
+ 1065487700,
+ 1075013777,
+ -1101030349,
+ -1111699150,
+ 1065636702,
+ -1122979768,
+ 1051162160,
+ 1053666673,
+ -1098756385,
+ -1111950240,
+ 1052528837,
+ -1119927679,
+ -1073580020,
+ 1068211445,
+ -1104971367,
+ -1103058318,
+ 1040065646,
+ 1051937907,
+ -1089239950,
+ -1079674912,
+ 1054190084,
+ -1090161481,
+ 1042202433,
+ 1035033348,
+ -1081049939,
+ -1120549260,
+ 1034077681,
+ -1109730855,
+ -1109187794,
+ 1074788041,
+ 1078105216,
+ 1025269854,
+ -1091918473,
+ 1060629833,
+ 1058495344,
+ 1048313227,
+ 1035528874,
+ -1089722689,
+ -1101540510,
+ -1089853303,
+ 1049180386,
+ 1051134565,
+ -1113292208,
+ -1121206008,
+ -1097732317,
+ 1060772990,
+ -1140198762,
+ -1105629551,
+ -1063154372,
+ -1081438672,
+ 1056341804,
+ 1024630717,
+ 1050464621,
+ 1078175858,
+ 1057283155,
+ -1102859072,
+ 1063670651,
+ -1082290100,
+ 1049829226,
+ -1087926037,
+ -1085210821,
+ 1053531009,
+ -1097309511,
+ 1031705148,
+ 1043464029,
+ -1098339233,
+ -1086648410,
+ -1108528028,
+ -1105499217,
+ -1055902841,
+ 1050162023,
+ -1098316780,
+ 1066360226,
+ -1116252174,
+ -1102209137,
+ -1106087586,
+ -1104230064,
+ -1063459966,
+ -1083931377,
+ 1084380446,
+ 1079211631,
+ 1053303956,
+ 1053629791,
+ -1079365123,
+ -1093950656,
+ -1093844369,
+ 1101796997,
+ 1094970702,
+ -1072214593,
+ -1085605753,
+ -1090824449,
+ -1079560839,
+ -1099559223,
+ -1077885681,
+ -1081013647,
+ -1093393241,
+ -1063490976,
+ -1091764217,
+ -1119771019,
+ -1105680041,
+ -1093440519,
+ -1072689057,
+ -1096839696,
+ 1007872689,
+ 1062827188,
+ -1091218368,
+ 1063439461,
+ -1069723460,
+ 1070234050,
+ -1084713940,
+ -1090424240,
+ -1104203772,
+ 1059158539,
+ -1097616459,
+ -1104680147,
+ -1088000671,
+ -1086025339,
+ 1066663824,
+ -1062964295,
+ -1104757790,
+ 1065893781,
+ 1080863117,
+ -1089083378,
+ -1056125016,
+ 1076706218,
+ -1089252159,
+ -1100194426,
+ 998626708,
+ 1061202218,
+ 1033296595,
+ -1076999026,
+ -1096322111,
+ -1067855465,
+ -1080361828,
+ 1058655296,
+ 1035287536,
+ 1047001164,
+ 1061628274,
+ -1106808982,
+ 1047608865,
+ -1139349961,
+ 1063386647,
+ 1018409960,
+ 1048744814,
+ 1025985314,
+ -1094384056,
+ 1023968427,
+ 1027069316,
+ 1028614763,
+ -1078765980,
+ -1103550132,
+ 1065903020,
+ 1048911096,
+ 1027851026,
+ 1050018717,
+ -1114249796,
+ -1078122864,
+ -1091418057,
+ 1056954993,
+ 1058120178,
+ -1080591094,
+ 1065530280,
+ -1084944065,
+ 1071439502,
+ -1055624399,
+ 1066859285,
+ 1095555262,
+ 1058139497,
+ 1023521144,
+ 1074595160,
+ -1073701874,
+ 1064224516,
+ 1052818161,
+ 1058469505,
+ 1092349742,
+ -1054198370,
+ 1072653181,
+ 1090916127,
+ 1069800051,
+ 1106531400,
+ 1040354533,
+ 1051192113,
+ -1056019226,
+ -1048419884,
+ 1095521317,
+ -1072465490,
+ 1068827334,
+ -1062464963,
+ -1079679121,
+ 1091261484,
+ 1060085041,
+ 1094924912,
+ -1087356815,
+ 1075484560,
+ -1061126692,
+ -1052902497,
+ 1093587234,
+ -1078710464,
+ -1095443411,
+ -1098570570,
+ 1049842911,
+ 1057025416,
+ 1020590754,
+ -1081671062,
+ -1073094250,
+ 1048777403,
+ 1054736493,
+ 1041166532,
+ 1038521611,
+ 1032337168,
+ 1055778577,
+ -1099375533,
+ 1067453888,
+ 1057467336,
+ 1055589641,
+ -1093565688,
+ -1131892983,
+ -1091172642,
+ -1118531878,
+ -1148572574,
+ 1058892763,
+ 1053443760,
+ 1038488208,
+ -1122311811,
+ 1040536579,
+ -1117443531,
+ -1093134850,
+ 1022747132,
+ 1024591818,
+ -1085329329,
+ 1035401491,
+ 1018609940,
+ -1123702167,
+ 1069883359,
+ -1097907382,
+ -1090880804,
+ -1108692833,
+ 1057616800,
+ -1073949199,
+ -1124360227,
+ -1072267447,
+ -1085131970,
+ 1063574246,
+ 1058384719,
+ 1057126449,
+ 1028022307,
+ -1096804279,
+ -1121007317,
+ -1122429690,
+ -1093630992,
+ 1011726022,
+ 1010193467,
+ 1055937780,
+ -1092326754,
+ -1130017303,
+ 1047853690,
+ 1048040473,
+ -1102222689,
+ -1104455500,
+ 1020521400,
+ 1061119071,
+ -1106236074,
+ -1073533377,
+ -1090664094,
+ -1095937547,
+ -1080701611,
+ 1035121870,
+ -1104981755,
+ -1115578983,
+ -1081532053,
+ -1100929727,
+ -1148453404,
+ 1064870141,
+ 1012303173,
+ -1065275568,
+ -1095004466,
+ -1070001614,
+ -1078978942,
+ 1041049051,
+ 1038653287,
+ 1042640261,
+ 1057695094,
+ 1073803625,
+ -1082058631,
+ -1097191881,
+ -1063103931,
+ -1094532623,
+ -1081818605,
+ -1104432294,
+ -1072569826,
+ 1064202998,
+ -1102849754,
+ 1052904970,
+ -1122498060,
+ 1033663426,
+ 1017761766,
+ -1094835622,
+ 1058821605,
+ -1109584080,
+ 1018890538,
+ -1130352815,
+ 1075277777,
+ -1107149770,
+ -1081689887,
+ 1081775219,
+ 1066066854,
+ 1031586760,
+ -1111531030,
+ 1065945609,
+ 1057948007,
+ -1089422845,
+ -1092389121,
+ -1078137028,
+ -1081459724,
+ 1058044403,
+ 1057434622,
+ 1054713597,
+ 1064299665,
+ 1062014249,
+ 1090808551,
+ 1085382448,
+ 1056753385,
+ 1066429368,
+ -1090246635,
+ -1059801607,
+ 1053461445,
+ 1089114171,
+ 1090808876,
+ -1078510957,
+ 1079997328,
+ 1035805785,
+ -1113620492,
+ -1131438088,
+ -1091703770,
+ -1095600706,
+ -1117089226,
+ -1070651265,
+ -1087599916,
+ 1063597199,
+ 1052039868,
+ -1097055145,
+ 1067153193,
+ -1091648363,
+ -1086632833,
+ 1048793751,
+ 1044246539,
+ 1060356409,
+ 1055377792,
+ 1018679527,
+ 1026216804,
+ -1104240558,
+ -1078526282,
+ -1102740403,
+ -1071692972,
+ 1038141914,
+ 1062926983,
+ -1086522577,
+ -1071988505,
+ -1085666085,
+ 1003543492,
+ -1060656863,
+ 1066237895,
+ 1049760800,
+ 1054277318,
+ -1077733968,
+ 1058327730,
+ 1046844820,
+ -1105660339,
+ 1054112313,
+ 1058971756,
+ 1064076423,
+ 1019614502,
+ -1068054034,
+ -1080364808,
+ 1068918987,
+ 1055019435,
+ -1081653373,
+ 1076021466,
+ -1089767360,
+ 1093082430,
+ 1070019348,
+ 1064055249,
+ 1071201808,
+ 1047495421,
+ -1076810128,
+ 1050514196,
+ 1080182323,
+ 1081092756,
+ -1076097369,
+ -1113324103,
+ 1067036691,
+ 1049606034,
+ 1056969296,
+ 1076083053,
+ 1058206836,
+ 1059150133,
+ -1082217086,
+ 1041750950,
+ -1128322669,
+ 1039736254,
+ 1053013967,
+ 1032281921,
+ 1056063303,
+ -1103832873,
+ 1069930584,
+ -1094394374,
+ -1064218299,
+ 1057823403,
+ 1048260946,
+ 1076431967,
+ 1071130713,
+ 1058031270,
+ -1093603226,
+ -1070424672,
+ -1090426722,
+ -1055585182,
+ 1067295850,
+ -1073143967,
+ 1038271654,
+ 1070820596,
+ -1086481753,
+ -1109992460,
+ -1083655407,
+ 1049695163,
+ 1064446920,
+ -1081981631,
+ 1062460761,
+ 1017335308,
+ -1070683602,
+ -1095488370,
+ -1103671054,
+ 1011089586,
+ -1085473649,
+ -1082158703,
+ -1106264270,
+ 1053265280,
+ 1058186558,
+ -1096420590,
+ 1051099559,
+ 1066753711,
+ 1079496356,
+ 1073144439,
+ 1084723761,
+ -1076652825,
+ 1036535795,
+ -1096210103,
+ 1068421407,
+ 1075158875,
+ -1088185163,
+ -1057858395,
+ -1098117747,
+ 1032394135,
+ -1086520954,
+ 1083510583,
+ -1103395706,
+ -1088583157,
+ 1045793298,
+ 1069322243,
+ -1095771209,
+ -1102809433,
+ -1106724480,
+ 1047501389,
+ -1090373514,
+ -1071553241,
+ -1083994326,
+ 1093264400,
+ -1108688533,
+ 1055246658,
+ 1066444172,
+ 1071613693,
+ -1096398402,
+ -1083589695,
+ 1084586706,
+ -1096668054,
+ -1081391028,
+ 981618416,
+ -1094305076,
+ 1048441144,
+ -1078869749,
+ -1090192098,
+ 1047124036,
+ 1051725179,
+ -1116493452,
+ -1108969058,
+ -1143405836,
+ -1070182588,
+ -1096624236,
+ -1098206022,
+ 1067929776,
+ 1057842700,
+ -1088865506,
+ 1053194986,
+ -1068936165,
+ -1089054655,
+ 1058676516,
+ 1049782495,
+ 1045284578,
+ 1076884487,
+ -1090670381,
+ -1055941704,
+ 1054733339,
+ -1077865421,
+ -1097113999,
+ 1052563295,
+ -1085359056,
+ 1050988785,
+ -1110865640,
+ -1066605305,
+ 1050822028,
+ -1074329940,
+ -1096881263,
+ -1143836224,
+ 1060994431,
+ 1058198309,
+ -1101256259,
+ 1038838275,
+ -1074523051,
+ -1108735971,
+ 1061894662,
+ 1047015918,
+ 1007323356,
+ 1034861773,
+ 1055316699,
+ -1091737902,
+ 1041955920,
+ -1074578871,
+ 1044132139,
+ 1048149819,
+ 1075775306,
+ -1089639674,
+ -1085424438,
+ -1064947320,
+ -1117329867,
+ -1080474294,
+ -1087326143,
+ -1079907479,
+ 1051102995,
+ 1037933804,
+ 1092018414,
+ 1078706899,
+ -1110300806,
+ 1055870252,
+ -1104024897,
+ -1081857037,
+ 1029525835,
+ -1091798282,
+ 1066294269,
+ -1071258378,
+ 1046307640,
+ -1081891440,
+ -1077277475,
+ 1059032494,
+ -1063402913,
+ -1051943705,
+ 1048830097,
+ -1064923524,
+ 1067705234,
+ 1086281838,
+ 1059050200,
+ 1023937357,
+ -1100818199,
+ 1069542589,
+ -1080410277,
+ -1081154742,
+ -1098284086,
+ -1095226873,
+ -1107409631,
+ -1098473551,
+ -1108248237,
+ -1085294022,
+ -1088089078,
+ 1061865636,
+ 1046021227,
+ 1061010675,
+ -1095090118,
+ -1103298196,
+ -1080531111,
+ 1032989884,
+ 1060099966,
+ 1058300548,
+ -1081776343,
+ 1062176912,
+ 1091906224,
+ -1048527246,
+ 1087732223,
+ -1073995232,
+ 1090857654,
+ 1084447674,
+ -1050322930,
+ 1092135551,
+ -1040843929,
+ -1054864009,
+ 1083195171,
+ -1073404296,
+ -1093247641,
+ -1080758102,
+ 1040430059,
+ 1050930019,
+ -1091734286,
+ 1054988732,
+ -1083388385,
+ 1032010246,
+ -1108047377,
+ -1094349691,
+ -1129883048,
+ -1084174953,
+ 1040638799,
+ -1073561694,
+ -1082229112,
+ -1070259646,
+ -1054367940,
+ -1072476029,
+ 1059090216,
+ -1070608027,
+ -1110815765,
+ -1101638812,
+ -1094087400,
+ 1074243757,
+ 1070340726,
+ -1038323354,
+ -1064411012,
+ 1074842503,
+ 1090770851,
+ -1093056094,
+ -1062025513,
+ -1076429106,
+ -1060149493,
+ -1063009558,
+ -1080506539,
+ -1083519202,
+ -1113759002,
+ -1099594444,
+ -1098745754,
+ -1105398745,
+ -1080045654,
+ -1093781373,
+ 1023575580,
+ -1098203540,
+ -1095740587,
+ -1093030770,
+ 1057877768,
+ 1024874482,
+ -1081670508,
+ 1101577085,
+ 1073606438,
+ 1057438513,
+ -1073305552,
+ -1069354878,
+ -1083889516,
+ -1075326663,
+ 1067552658,
+ 1052236785,
+ -1052469886,
+ -1083011139,
+ -1089289706,
+ -1082173660,
+ -1077748140,
+ -1080190350,
+ -1084967508,
+ -1121613264,
+ -1077803698,
+ 1081165964,
+ -1096591110,
+ -1053077669,
+ 1082666788,
+ -1096539503,
+ 1087795594,
+ -1077888440,
+ 1023793500,
+ -1072546433,
+ 1077111370,
+ -1094323528,
+ -1071734357,
+ -1076096572,
+ -1078588901,
+ -1100465448,
+ -1094875767,
+ -1095343480,
+ 1035167442,
+ -1099518790,
+ 1050724417,
+ -1108173663,
+ -1055644443,
+ -1093330456,
+ -1078539111,
+ -1094502759,
+ 1052191736,
+ -1095839960,
+ 1039236140,
+ 1041527540,
+ -1089713187,
+ 1052565047,
+ 1034837872,
+ 1048214539,
+ -1103212500,
+ -1085732393,
+ -1066624242,
+ -1067143768,
+ 1042159017,
+ 1033830905,
+ -1101070240,
+ 1078285274,
+ 1056554759,
+ 1018551548,
+ 1060709114,
+ 1054562888,
+ -1099553680,
+ -1070263522,
+ 1049940905,
+ 1072449959,
+ -1106630244,
+ -1094244267,
+ 1082405350,
+ -1057705731,
+ 1060448093,
+ 1045167068,
+ 1059509437,
+ 1080393682,
+ 1060281382,
+ 1062061722,
+ 1054624090,
+ -1071972114,
+ 1047722695,
+ -1105052190,
+ -1098431624,
+ -1125012210,
+ -1086899123,
+ 1057458820,
+ -1096998286,
+ -1088255270,
+ 1072196608,
+ 1052868659,
+ 1064964680,
+ 1071802856,
+ -1094568096,
+ 1049236176,
+ -1123175734,
+ -1073221245,
+ -1091275828,
+ -1090887157,
+ 1037191091,
+ 1068246747,
+ 1043887124,
+ -1111393450,
+ 1053684775,
+ 1018782042,
+ -1097314688,
+ -1094683688,
+ 1072740199,
+ -1103566801,
+ 1035018469,
+ -1056963071,
+ -1086276284,
+ -1072354687,
+ 1068519132,
+ 1079887028,
+ 1069658591,
+ 1077525779,
+ -1054258020,
+ -1072090999,
+ 1078850109,
+ -1090397629,
+ -1081776838,
+ -1094205067,
+ -1083487263,
+ -1056541068,
+ 1069706737,
+ 1047898758,
+ -1069801944,
+ 1012357884,
+ -1083061195,
+ -1111191540,
+ -1094027895,
+ -1078222714,
+ 1035872264,
+ 1086187890,
+ 1090490621,
+ 1068325195,
+ 1073980433,
+ -1071198074,
+ -1089054850,
+ -1087436964,
+ 1082676834,
+ 1091016507,
+ -1069670709,
+ 1071173621,
+ 1069962938,
+ -1090540664,
+ 1065354837,
+ -1075385670,
+ 1051495904,
+ 1079969494,
+ 1039962664,
+ -1091937256,
+ -1134417839,
+ -1072658063,
+ -1103467299,
+ 1066945644,
+ -1088059940,
+ -1106057721,
+ 1049414913,
+ 1043340348,
+ -1081398305,
+ -1077598965,
+ -1078440785,
+ -1079490572,
+ 1057266031,
+ 1034018282,
+ 1040720154,
+ 1056002926,
+ -1106675547,
+ 1037964901,
+ 1073452275,
+ -1070621861,
+ 1078834449,
+ 1050166154,
+ 1053253875,
+ -1091430580,
+ -1122318614,
+ -1101825650,
+ 1038922989,
+ 1078295193,
+ -1080390305,
+ -1090759971,
+ 1046134056,
+ -1068578013,
+ -1064280050,
+ -1086767351,
+ -1052103107,
+ -1086015736,
+ 1064714945,
+ -1085417842,
+ -1104190711,
+ 1095238458,
+ 1027570524,
+ 1050579913,
+ -1096221739,
+ -1070844958,
+ -1095076687,
+ -1083934633,
+ 1056759760,
+ 1044602883,
+ 1048772845,
+ -1110336958,
+ -1106021800,
+ 1033022056,
+ 1060239441,
+ -1054989584,
+ 1048600041,
+ -1072598404,
+ 1040670776,
+ 1063734060,
+ 1054447093,
+ -1108265387,
+ -1174251840,
+ -1082085560,
+ -1110654672,
+ 1015369904,
+ 1070885041,
+ 1052481629,
+ 1040248525,
+ -1080798313,
+ 1037567952,
+ 1055743408,
+ 1061595269,
+ 1060610718,
+ -1098604894,
+ -1081640123,
+ 1047777828,
+ -1082248341,
+ 1045860832,
+ 1033979482,
+ -1119167499,
+ -1089850995,
+ 1013014783,
+ 1025310960,
+ -1112715248,
+ 1082103562,
+ 1034062841,
+ 1036159136,
+ 1020115657,
+ -1081951614,
+ -1107277295,
+ -1095639374,
+ 1040563805,
+ 1038898420,
+ -1090882631,
+ -1090247317,
+ -1072252571,
+ -1078038243,
+ 1038055456,
+ -1121729230,
+ -1123207649,
+ -1106395796,
+ -1085554375,
+ -1087360686,
+ 1059048858,
+ 1019027654,
+ -1072681644,
+ 1054483123,
+ -1078187356,
+ 1059385407,
+ -1130824551,
+ -1079179204,
+ 1024217874,
+ -1081462259,
+ -1090120149,
+ 1000905312,
+ 1051943006,
+ -1113131120,
+ -1102863538,
+ 1024357135,
+ 1076680634,
+ 1066964756,
+ 1057227999,
+ -1111006247,
+ 1049892399,
+ 1092416780,
+ -1091953159,
+ 1038271150,
+ 1051843971,
+ 1068010862,
+ -1078927926,
+ 1066315451,
+ -1082475929,
+ -1079716634,
+ 1037825459,
+ 1054785045,
+ 1043288182,
+ 1065501531,
+ 1048360870,
+ -1079411069,
+ 1051494482,
+ 1066368932,
+ -1086998156,
+ -1087740551,
+ -1080449182,
+ -1090338370,
+ -1098298395,
+ -1111729347,
+ 1032367298,
+ 1068790202,
+ -1106722014,
+ -1123271179,
+ -1114401380,
+ 1047669844,
+ -1089119581,
+ -1117887312,
+ -1079054829,
+ -1080294990,
+ 1050762390,
+ 1053251761,
+ 1050550764,
+ 1057573269,
+ -1074969793,
+ 1048417840,
+ 1051927150,
+ -1071725367,
+ -1081475356,
+ -1079745531,
+ 1068417368,
+ 1070410729,
+ 1040519602,
+ 1026734380,
+ 1047013259,
+ -1089132576,
+ -1087512713,
+ 1031924476,
+ -1116212076,
+ 1077769716,
+ -1062509439,
+ 1042038968,
+ 1025127236,
+ 1074127235,
+ 1046250209,
+ 1065842713,
+ 1065772961,
+ -1071920886,
+ 1052694847,
+ -1135192310,
+ 1065890778,
+ 1077399081,
+ -1063814083,
+ -1057644744,
+ 1056053965,
+ 1056617166,
+ 1056910421,
+ 1057055195,
+ -1097817882,
+ -1087829413,
+ -1083897627,
+ 1062455174,
+ 1043661031,
+ 1049252999,
+ 1038252972,
+ -1106909761,
+ -1086927779,
+ -1111842850,
+ 1063969976,
+ 1051940469,
+ -1079028144,
+ -1084431746,
+ -1106655120,
+ 1021804656,
+ 1034418063,
+ 1050292424,
+ 1053930226,
+ 1063999139,
+ 1056863487,
+ 1042292589,
+ -1103688584,
+ -1106420403,
+ -1149841228,
+ -1084842302,
+ 1058694568,
+ -1097598656,
+ 1057453901,
+ 1032996225,
+ -1067464479,
+ -1128192738,
+ 1062932197,
+ -1095006145,
+ 1051146653,
+ -1098180181,
+ 1065843729,
+ -1073417569,
+ -1084748135,
+ -1089149385,
+ 1059773794,
+ 1075866805,
+ -1055126436,
+ 1027519356,
+ 1072816738,
+ 1055946946,
+ 1040387380,
+ -1083572855,
+ 1055004325,
+ -1072038630,
+ 1037096174,
+ -1115311864,
+ -1092850010,
+ 1048841302,
+ -1098671734,
+ -1072635046,
+ -1071526014,
+ -1079851490,
+ 1031579666,
+ -1095467394,
+ -1103121150,
+ 1026784064,
+ -1098663835,
+ -1086973297,
+ 1048948135,
+ -1089887754,
+ 1057105220,
+ 1054725751,
+ -1080749510,
+ -1079658299,
+ 1049396424,
+ -1073475755,
+ -1086460125,
+ 1075326159,
+ -1097955372,
+ -1104752379,
+ 1058299237,
+ 1079239830,
+ 1051885394,
+ -1089774262,
+ 1062241636,
+ 1077999441,
+ -1105196519,
+ -1102454709,
+ 1040731794,
+ -1102631859,
+ 1034558926,
+ -1090045134,
+ 1061104496,
+ 1068010838,
+ -1075062979,
+ -1093281016,
+ -1079056267,
+ -1112945555,
+ 1050161356,
+ 1041456586,
+ -1088594976,
+ 1035008021,
+ -1109379562,
+ -1095675311,
+ 1058082950,
+ 1049272697,
+ 1023797651,
+ 1072096071,
+ 1049814110,
+ 1041439439,
+ -1103395565,
+ -1102637850,
+ -1098605177,
+ 1060949249,
+ -1116030969,
+ -1103704878,
+ 1037297247,
+ 1054714680,
+ 1041013965,
+ 1054775329,
+ -1077530077,
+ -1074157300,
+ -1117615698,
+ -1121241178,
+ -1101463090,
+ 1044931805,
+ 1080181650,
+ -1067142475,
+ -1077612903,
+ -1077287617,
+ 1092657918,
+ 1052607906,
+ 1058925799,
+ 1038867512,
+ -1071506498,
+ -1064776209,
+ 1077831973,
+ -1056650659,
+ -1096427693,
+ 1053884591,
+ -1096792085,
+ 1050757542,
+ -1095911509,
+ -1086874806,
+ 1065295323,
+ -1072732345,
+ -1115835102,
+ -1092557044,
+ -1097352761,
+ 1075299434,
+ 1056161373,
+ -1090251318,
+ 1073889527,
+ -1087152251,
+ -1081209817,
+ 1050862511,
+ 1053757480,
+ -1085523854,
+ -1096425617,
+ -1066051852,
+ -1098463916,
+ 1086709440,
+ -1084369625,
+ -1109214113,
+ -1083251514,
+ 1069301757,
+ 1060769034,
+ 1008212033,
+ 1016911341,
+ -1087110636,
+ -1109730037,
+ -1114252099,
+ 1026641852,
+ -1071771043,
+ 1051086587,
+ -1068461103,
+ 1059079813,
+ -1088475092,
+ 1045384242,
+ 1050899056,
+ -1097895593,
+ 1057685285,
+ -1077734250,
+ -1052161707,
+ 1077634348,
+ 1049546158,
+ -1095327038,
+ -1110866500,
+ 1049029129,
+ 1069837865,
+ -1099520320,
+ 1040720673,
+ -1063552600,
+ -1072111369,
+ 1032376633,
+ 1049466474,
+ 1016765480,
+ 1089546324,
+ -1098037732,
+ 1057773451,
+ 1053256168,
+ 1061250746,
+ -1121839220,
+ 1037386409,
+ -1071184474,
+ -1075042454,
+ 1057757661,
+ -1105668230,
+ 1056662737,
+ 1088744238,
+ 1095546754,
+ -1063997798,
+ -1070292368,
+ 1084605440,
+ 1055709685,
+ 1091510394,
+ 1066367622,
+ 1075232712,
+ -1069739412,
+ -1070836432,
+ 1099300506,
+ 1068025926,
+ 1047882801,
+ 1091913526,
+ 1097149464,
+ -1090878409,
+ 1065729027,
+ -1079159865,
+ -1065060105,
+ 1006924646,
+ 1082219057,
+ 1082536582,
+ 1066091874,
+ 1079346994,
+ -1111830565,
+ 1066127345,
+ -1094520353,
+ -1087373011,
+ -1065709236,
+ 1063149146,
+ -1081670190,
+ 1046706731,
+ 1058390124,
+ 1060475855,
+ -1078006070,
+ 1059807479,
+ -1129440042,
+ 1031689272,
+ 1044721792,
+ 1068861688,
+ 1043611794,
+ 1042283047,
+ 1048487226,
+ 1049047135,
+ -1112388833,
+ 1026886875,
+ -1106420254,
+ 1077147163,
+ 1044244301,
+ 1058173904,
+ 1071127533,
+ 1059946347,
+ 1066567313,
+ 1078661300,
+ -1069008476,
+ -1079909902,
+ 1065504694,
+ 1081795190,
+ -1078190579,
+ 1060890782,
+ -1089861956,
+ -1087376509,
+ 1063132738,
+ -1085933249,
+ -1058728032,
+ 1045672337,
+ 1042462917,
+ 1053510616,
+ -1083979447,
+ 1020063129,
+ 1040975175,
+ 1067289943,
+ -1080468147,
+ 1085242001,
+ 1092261975,
+ -1084060930,
+ -1092999984,
+ -1077669492,
+ -1068578967,
+ 1054688587,
+ 1080182911,
+ 1087139953,
+ 1067011068,
+ 1065262233,
+ -1095128026,
+ 1074059166,
+ -1097930055,
+ -1080425121,
+ -1080080171,
+ -1109126199,
+ -1088682714,
+ -1070225807,
+ -1124363326,
+ 1062332431,
+ -1045097069,
+ 1045961375,
+ 1035717706,
+ -1064298669,
+ 1055661887,
+ 1034828093,
+ 1082698055,
+ 1069784250,
+ 1027450656,
+ -1088870188,
+ -1073248256,
+ -1073437607,
+ -1105334261,
+ -1073619740,
+ 1049564580,
+ 1062793013,
+ 1061499065,
+ 1056566278,
+ 1076025573,
+ -1079951771,
+ -1072522977,
+ -1081265209,
+ 1060997696,
+ 1058243246,
+ -1081752021,
+ 1072065559,
+ -1092795297,
+ 1061066907,
+ 1073518601,
+ 1046597327,
+ 1058726467,
+ 1069047370,
+ -1075648488,
+ -1093941339,
+ 1067250191,
+ 1042765340,
+ 1059460305,
+ 1080743530,
+ 1052783580,
+ -1096650546,
+ -1124049213,
+ 1051668127,
+ -1092695109,
+ -1105884585,
+ -1075958566,
+ 1034007792,
+ -1113076995,
+ -1105683153,
+ 1062608880,
+ -1082461678,
+ 1038170876,
+ 998499736,
+ 1034793633,
+ -1100373589,
+ -1074395625,
+ 1066408557,
+ -1082837273,
+ 1018659466,
+ 1068123045,
+ 1052265518,
+ -1095673471,
+ 1048881432,
+ -1083549912,
+ 987222864,
+ -1124345584,
+ 1063420014,
+ -1164306224,
+ 1052463871,
+ 1069486456,
+ -1095214711,
+ -1118799532,
+ -1106519189,
+ -1101741712,
+ -1091850284,
+ 1069226791,
+ -1049033390,
+ 1059993340,
+ -1074484851,
+ 1071824768,
+ 1055136821,
+ -1074417449,
+ -1088030738,
+ 1058310167,
+ -1083063399,
+ 1067813148,
+ -1070826813,
+ 1050392502,
+ -1103128313,
+ 1027946161,
+ -1101083685,
+ -1051150304,
+ -1106771559,
+ 1051631947,
+ 1042267603,
+ 1047486182,
+ -1119014831,
+ 1042254021,
+ 1050502209,
+ 1059664035,
+ 1057694647,
+ -1092499607,
+ 1060721796,
+ 1073588728,
+ -1121404111,
+ -1075415770,
+ 1051427744,
+ 1025178848,
+ 1047770758,
+ -1090482301,
+ -1086487183,
+ -1106085479,
+ 1043253612,
+ 1061321702,
+ 1046013907,
+ -1080265345,
+ 1026192650,
+ -1105050267,
+ -1093831825,
+ 1044624796,
+ 1042746096,
+ 1048029027,
+ -1073198999,
+ -1093176026,
+ 1046215105,
+ 1050002023,
+ -1103254985,
+ 1073561755,
+ 1039748754,
+ -1101130641,
+ 1083225954,
+ -1100532290,
+ 1037809838,
+ -1095468102,
+ 1080784346,
+ 1035509562,
+ 1064781583,
+ -1120247368,
+ 1036564630,
+ 1048569400,
+ -1090715306,
+ 1032637326,
+ -1098618883,
+ 1062739244,
+ 1060677644,
+ -1080869953,
+ -1059945356,
+ 1051639652,
+ 1040387879,
+ 1035096615,
+ 1042156963,
+ 1002843641,
+ 1049001986,
+ 1053221523,
+ 1050840641,
+ -1098762514,
+ -1073924668,
+ 1015469466,
+ 1066058012,
+ 1063238895,
+ -1086497114,
+ 1054022577,
+ -1074378186,
+ -1072439549,
+ 1057277833,
+ -1062139743,
+ -1061067021,
+ 1036346990,
+ -1070974767,
+ -1087828984,
+ 1086202931,
+ -1117811716,
+ -1096009719,
+ 1047040080,
+ 1050692862,
+ -1077264287,
+ -1088695004,
+ 1040557796,
+ -1079912301,
+ 1048375290,
+ 1045195996,
+ 1036341635,
+ -1098043235,
+ 1057600176,
+ 1060800226,
+ 1075283212,
+ 1063914019,
+ 1066618567,
+ -1114179623,
+ -1064293680,
+ -1077048457,
+ -1120202232,
+ -1124693328,
+ 1063242513,
+ 1072021544,
+ -1073947881,
+ 1077235549,
+ -1104586794,
+ 1066678394,
+ -1077918584,
+ -1087658478,
+ -1079531352,
+ 1072752998,
+ 1069162231,
+ 1082579524,
+ -1079031577,
+ -1068604024,
+ -1093997973,
+ -1089142414,
+ 1027612000,
+ 1057259745,
+ -1053234616,
+ 1052611313,
+ 1075813361,
+ 1073578641,
+ -1095083861,
+ -1090266180,
+ 1055772461,
+ -1054465387,
+ -1088260706,
+ -1099971741,
+ 1057586939,
+ 1041275490,
+ -1068695818,
+ -1090370535,
+ -1073995389,
+ -1088870024,
+ 1053646128,
+ -1107328051,
+ -1110463156,
+ -1093197500,
+ 1037921048,
+ -1089939682,
+ 1056586249,
+ 1050239513,
+ 1050434419,
+ -1107292062,
+ 1051626630,
+ -1087774550,
+ -1087966980,
+ -1090027726,
+ -1088540832,
+ 1075292964,
+ 1057006070,
+ -1092810758,
+ 1045692003,
+ 1056434389,
+ -1133712042,
+ 1040664586,
+ -1072172382,
+ -1084999465,
+ -1108978272,
+ -1122409594,
+ 1046317227,
+ 1054496179,
+ -1061674978,
+ -1070550402,
+ 1058410261,
+ -1074864587,
+ 1086123753,
+ 1075762889,
+ -1071560727,
+ 1054741961,
+ -1090481553,
+ -1063174962,
+ 1052630797,
+ -1076554773,
+ -1112211996,
+ 1053182248,
+ 1048160069,
+ 1054739316,
+ -1093197224,
+ 1059353979,
+ 1037314052,
+ -1112247408,
+ 1083071435,
+ 1067062273,
+ -1060175191,
+ 1027149687,
+ -1097857193,
+ 1025536616,
+ 1053068894,
+ -1134731580,
+ -1097837046,
+ -1211316736,
+ -1091578954,
+ -1118486461,
+ 1033115174,
+ -1142094896,
+ 1043732612,
+ -1066486608,
+ 1051834479,
+ 1082262881,
+ 1075369405,
+ -1093703066,
+ 1058328348,
+ -1095914042,
+ -1079079395,
+ 1053198900,
+ 1083317897,
+ 1087251827,
+ -1086790829,
+ 1072770755,
+ 1036302119,
+ 1021202382,
+ 1042684692,
+ -1082707763,
+ 1061975587,
+ 1076104532,
+ -1073458925,
+ -1084769062,
+ 1011028803,
+ -1105878615,
+ 1031115512,
+ 1082144352,
+ 1043171098,
+ -1082118884,
+ -1081970168,
+ -1081822140,
+ -1089285896,
+ -1081466416,
+ -1085254066,
+ -1073943017,
+ 1027166155,
+ -1087093610,
+ -1094423904,
+ 1075344746,
+ 1042798915,
+ 1050734166,
+ -1128832594,
+ 1060160116,
+ 1047718731,
+ 1071739057,
+ -1072838486,
+ -1112299849,
+ -1106206774,
+ 1048681063,
+ 1012125388,
+ 1054636014,
+ -1091212134,
+ 1058306177,
+ 1037560681,
+ -1086825005,
+ -1073352166,
+ 1019288920,
+ -1051285599,
+ -1086726659,
+ 1027193663,
+ -1092902554,
+ -1109215838,
+ 1071819934,
+ 1087400564,
+ -1108836302,
+ -1081765758,
+ 1084699769,
+ 1065409606,
+ 1089346851,
+ 1067425169,
+ 1044189816,
+ 1042668302,
+ -1108269355,
+ 1040827398,
+ 1075108169,
+ 1043808921,
+ 1080128268,
+ -1075138549,
+ -1062818406,
+ 1091990308,
+ -1087936494,
+ -1059896322,
+ -1057662612,
+ -1103732840,
+ -1111817978,
+ -1051526199,
+ 1090194140,
+ 1081899639,
+ -1076166407,
+ -1052594568,
+ 1082243943,
+ 1057761991,
+ 1090896648,
+ -1082015537,
+ 1082528959,
+ -1059899787,
+ -1046778896,
+ 1097539684,
+ -1065026794,
+ 1071933724,
+ 1049667595,
+ 1068854376,
+ -1106012845,
+ 1060475845,
+ 1074788185,
+ 1065988599,
+ 1067167960,
+ -1086060638,
+ -1056668245,
+ -1115007198,
+ 1070177590,
+ -1157568432,
+ 1020175012,
+ 1060360399,
+ 1062162449,
+ -1086672540,
+ -1094905038,
+ -1071582444,
+ -1094305357,
+ 1066049243,
+ 1042898444,
+ 1025271746,
+ 1062943546,
+ -1105454536,
+ -1112451408,
+ 1020268342,
+ 1069662926,
+ 1041903853,
+ -1101541995,
+ 1060694450,
+ -1089747658,
+ 1053287958,
+ 1045797681,
+ 1051320340,
+ 1045055546,
+ 1063861293,
+ -1091781820,
+ 1052916050,
+ -1128247322,
+ 1015591387,
+ 1077451040,
+ -1073294932,
+ 1047229904,
+ -1090935396,
+ -1077539388,
+ -1097543484,
+ -1141246264,
+ 1042216564,
+ 1060705104,
+ 1057714365,
+ 1073401194,
+ -1095803958,
+ 1074583586,
+ -1072002707,
+ -1087623695,
+ 1063301541,
+ 1073049526,
+ -1075461268,
+ -1085885096,
+ -1124462158,
+ -1127484840,
+ -1115254574,
+ 1053360256,
+ 1037580031,
+ -1093811015,
+ 1048680041,
+ -1106651934,
+ -1111722655,
+ 1025431018,
+ 1009282638,
+ -1088056336,
+ -1105082726,
+ 1042718426,
+ -1088867876,
+ 1066552150,
+ -1101446569,
+ 1059234937,
+ 1040741203,
+ -1087958192,
+ -1128880627,
+ -1120060500,
+ -1089875967,
+ 1044861624,
+ 1065822073,
+ -1069406085,
+ 1057516817,
+ -1072520693,
+ 1049140596,
+ -1102665028,
+ -1085834496,
+ -1092501094,
+ 1055524391,
+ -1075590221,
+ -1070108059,
+ -1101498704,
+ 1055232141,
+ -1098516077,
+ 1033180768,
+ 1049576012,
+ 1050019891,
+ 1078749924,
+ -1086291401,
+ -1090969212,
+ -1093221839,
+ -1073917615,
+ 1044028027,
+ 1050530082,
+ -1072360073,
+ -1118162994,
+ -1073829359,
+ -1100944446,
+ 1056275226,
+ -1088922288,
+ -1106080576,
+ -1102749060,
+ -1084265170,
+ 1062657343,
+ 1069204232,
+ 1063987503,
+ -1079631347,
+ 1030637969,
+ 1059398083,
+ 1038415108,
+ 1039323343,
+ 1058956230,
+ -1100956607,
+ -1102724711,
+ -1102270869,
+ 1047688636,
+ -1086234423,
+ 1037309894,
+ -1095022174,
+ -1044964228,
+ 1076415284,
+ -1074062556,
+ 1093816625,
+ 1068400730,
+ -1077294355,
+ 1071123957,
+ -1072461302,
+ -1065812187,
+ -1098290230,
+ 1071449646,
+ 1072665426,
+ 1049460852,
+ -1076640454,
+ 1044258566,
+ 1081738637,
+ 1065708159,
+ -1072941323,
+ -1088021349,
+ -1097487487,
+ -1095289772,
+ -1084138728,
+ 1053851392,
+ -1089837257,
+ 1099421214,
+ 1067099406,
+ -1081989927,
+ -1077054027,
+ -1076610559,
+ -1082341958,
+ 1054995441,
+ 1075611801,
+ 1069725908,
+ -1047883140,
+ -1089152315,
+ -1115632114,
+ -1076696719,
+ -1117839021,
+ 1082344356,
+ 1048589254,
+ -1082468140,
+ 1058206396,
+ 1069253183,
+ -1098442170,
+ -1073122752,
+ 1081674379,
+ 1068430726,
+ -1077425985,
+ -1083318336,
+ 1074264670,
+ -1070958675,
+ 1104185449,
+ 1077121257,
+ 1094248722,
+ 1074611953,
+ -1113582931,
+ -1073522270,
+ -1087997750,
+ -1072330742,
+ -1098010467,
+ -1093997461,
+ 1065702763,
+ 1057615478,
+ -1074259690,
+ 1051566905,
+ 1061921218,
+ -1105613643,
+ 1045110725,
+ -1095788317,
+ 1031365306,
+ -1085624970,
+ 1059396572,
+ -1101919797,
+ 1065491950,
+ 1052938012,
+ -1042984765,
+ -1074271455,
+ 1069853619,
+ -1090018109,
+ -1098264083,
+ -1077856825,
+ -1095202686,
+ -1074333095,
+ -1090849446,
+ -1101095894,
+ 1046923419,
+ -1089524033,
+ -1060472658,
+ -1062767510,
+ 1063985389,
+ -1086080388,
+ 1060862852,
+ -1097900924,
+ 1033701983,
+ -1077701647,
+ 1046907461,
+ -1075174043,
+ -1097806845,
+ -1072304847,
+ -1071339630,
+ -1081347128,
+ -1049580877,
+ -1043913140,
+ -1081808822,
+ 1043255869,
+ -1092737529,
+ -1107546468,
+ 1048752631,
+ 1034821381,
+ 1066756022,
+ 1031837370,
+ -1072165667,
+ 1020245344,
+ -1073757084,
+ -1082962569,
+ 1060890577,
+ 1042781111,
+ 1049960214,
+ 1053114173,
+ 1043427735,
+ -1085453902,
+ 1067879079,
+ 1059777390,
+ -1059633063,
+ -1080432415,
+ -1066912823,
+ -1080734103,
+ 1054834247,
+ -1098928946,
+ -1089881013,
+ 1064271084,
+ 1064737121,
+ -1073698005,
+ -1122980491,
+ 1048418293,
+ -1078024395,
+ 1041757510,
+ -1076906678,
+ 1055763694,
+ -1087200523,
+ -1082986286,
+ -1086319633,
+ -1069348921,
+ 1051155714,
+ 1026588856,
+ 1061757939,
+ -1087789747,
+ -1098360894,
+ 1038912152,
+ -1093910907,
+ 1009944912,
+ 1041148347,
+ -1108475851,
+ -1126808234,
+ -1094611835,
+ 1054065656,
+ -1080034011,
+ -1097522123,
+ -1070297084,
+ -1094319875,
+ -1070631132,
+ 1066673396,
+ 1063088341,
+ -1090178777,
+ -1076373698,
+ -1099538162,
+ 1082634927,
+ 1054064429,
+ 1088952743,
+ 1070066443,
+ -1090707291,
+ 1050814352,
+ 1047862251,
+ -1072240787,
+ 1060833194,
+ 1082059005,
+ 1087111194,
+ -1104402679,
+ 1078341383,
+ -1087997892,
+ 1058851646,
+ 1094181724,
+ 1083353246,
+ -1051731816,
+ 1056964714,
+ 1065269551,
+ -1080907401,
+ 1067860072,
+ 1084363692,
+ 1071478245,
+ -1077798364,
+ 1069987900,
+ -1095344275,
+ 1071302179,
+ 1066989259,
+ -1085889110,
+ 1052672016,
+ -1065805550,
+ -1082004053,
+ 1033743340,
+ -1081431645,
+ 1060603508,
+ 1093035612,
+ 1063793770,
+ 1057485629,
+ 1040442054,
+ 1072016253,
+ 1067127677,
+ 1068639415,
+ 1074077830,
+ -1089856612,
+ 1043516058,
+ 1044510367,
+ -1131236648,
+ 1064945675,
+ 1053666900,
+ 1020627005,
+ -1100606780,
+ -1073734109,
+ 1040571446,
+ -1109802826,
+ 1073045294,
+ 1050520077,
+ -1105483515,
+ 1025195237,
+ -1118507646,
+ -1096292659,
+ 1051071938,
+ -1098723735,
+ -1079875480,
+ 1051084524,
+ -1081067851,
+ 1072833359,
+ 1063671026,
+ 1041038039,
+ 1076473170,
+ 1036586250,
+ 1038635195,
+ 1077105618,
+ 1047057999,
+ -1088961333,
+ -1107184233,
+ -1068856366,
+ -1072209056,
+ -1081090984,
+ -1084265766,
+ -1087186220,
+ -1083080621,
+ -1069324543,
+ 1042881621,
+ -1090709125,
+ -1117535045,
+ 1044274592,
+ 1068288591,
+ -1105108599,
+ 1054465243,
+ 1056996507,
+ -1109691663,
+ 1024921439,
+ 1060959607,
+ 1033481409,
+ 1057884097,
+ 1017239691,
+ 1042463986,
+ -1088109011,
+ 1068931272,
+ -1072806472,
+ -1089464611,
+ -1093283522,
+ -1089341010,
+ 1028465432,
+ 1079784883,
+ 1025166472,
+ 1052994621,
+ 1022596845,
+ -1088830691,
+ -1078977568,
+ 1048336536,
+ -1120079764,
+ 1027403498,
+ -1117741533,
+ -1046513724,
+ -1085789405,
+ -1071251706,
+ 1039749794,
+ 1074434373,
+ 1037998930,
+ 1029730945,
+ 1051731040,
+ 1042955166,
+ 1055280328,
+ 1034121285,
+ 1084881775,
+ 1106120702,
+ -1072740435,
+ 1054233493,
+ -1085059427,
+ -1134532381,
+ 1032488634,
+ 1011800626,
+ -1129625916,
+ 1057927235,
+ 1039917946,
+ 1060673061,
+ 985044414,
+ -1110667164,
+ -1102613837,
+ -1127655793,
+ -1116174488,
+ -1092080578,
+ 1042686328,
+ 1039289001,
+ 1066265000,
+ 1058775919,
+ 1088591513,
+ 1025648865,
+ -1132337734,
+ -1070817423,
+ 1039493514,
+ -1143425416,
+ -1088364690,
+ 1020946127,
+ -1105928824,
+ 1024214065,
+ -1136110374,
+ 1045612344,
+ -1122616517,
+ 1037563537,
+ -1112523206,
+ -1106578696,
+ -1119186958,
+ -1065346385,
+ -1107115925,
+ 1055810070,
+ -1109747415,
+ -1111393059,
+ -1106178667,
+ 1047979980,
+ 1041905665,
+ -1111250092,
+ 1076061208,
+ -1101908757,
+ -1068816826,
+ 1092690555,
+ -1100708467,
+ -1106684945,
+ -1093631194,
+ -1108794769,
+ -1065448480,
+ 1039185152,
+ 1032634193,
+ 1052257354,
+ 1043642069,
+ 1049926778,
+ -1108806800,
+ -1088708750,
+ 1035261494,
+ -1091859467,
+ 1052530835,
+ 1019791633,
+ 1077809182,
+ 1061773717,
+ 1082182461,
+ 1018308034,
+ -1107903034,
+ -1089007475,
+ -1088068799,
+ -1088132199,
+ -1090186899,
+ -1143238176,
+ 1079953834,
+ 1030266162,
+ 1062031154,
+ -1092625378,
+ 1067842571,
+ 1007152122,
+ 1040591042,
+ -1091832839,
+ -1102497726,
+ -1077555677,
+ 1049624717,
+ -1078334622,
+ 1036583016,
+ 1049082649,
+ -1121918984,
+ -1112392023,
+ -1118720348,
+ 1054880839,
+ 1049757365,
+ -1092864786,
+ 1065004579,
+ -1087825781,
+ 1055377940,
+ 1044585137,
+ -1098324140,
+ 1031627455,
+ 1041790280,
+ -1082435225,
+ 1014504745,
+ 1042749378,
+ 1039907846,
+ -1098041742,
+ -1135202970,
+ 1050593291,
+ 1038652035,
+ 1038867281,
+ 1024152771,
+ 1058588637,
+ -1103844981,
+ 1061686855,
+ 1046214479,
+ -1097648059,
+ -1092196514,
+ 1060275810,
+ 1040574604,
+ 1060989493,
+ -1115753879,
+ 1051049070,
+ 1032229028,
+ 1021562893,
+ -1102027672,
+ -1105593975,
+ -1087175508,
+ -1108509087,
+ -1104460589,
+ -1111347392,
+ 1052590972,
+ 1088429331,
+ 1051704594,
+ -1098533858,
+ 1065513517,
+ 1073018172,
+ -1105214632,
+ -1094989264,
+ 1054628764,
+ 1044399028,
+ 1081198088,
+ 1068766922,
+ 1058377529,
+ 1092505819,
+ -1108311732,
+ 1058906701,
+ 1045447468,
+ 1046047273,
+ 1032602618,
+ -1109892014,
+ 1018052323,
+ 1027338976,
+ 1007211708,
+ 994491648,
+ -1114584923,
+ 1084519911,
+ 1009556314,
+ 1042091262,
+ -1120954833,
+ -1079936377,
+ -1101801825,
+ 1036437149,
+ 1039606475,
+ -1112548696,
+ 1036200509,
+ -1073503205,
+ -1108088773,
+ -1096113868,
+ -1095463313,
+ 1052845169,
+ 1050735470,
+ -1173996880,
+ 1100736389,
+ 1044451287,
+ 1050285740,
+ -1098181309,
+ -1091182133,
+ 1066794142,
+ -1098741583,
+ 1086445747,
+ 1048877921,
+ -1068972712,
+ 1042605395,
+ 1083155300,
+ 1042452061,
+ 1031123035,
+ -1113428338,
+ -1098282921,
+ -1088155784,
+ -1091496950,
+ -1094792716,
+ -1096643428,
+ 1060799972,
+ 1067638402,
+ -1106483164,
+ 1013823326,
+ -1102414584,
+ -1093496115,
+ -1113159429,
+ -1143824760,
+ -1124376450,
+ -1114726945,
+ 1001390936,
+ 1068125830,
+ 1024902583,
+ 1057214552,
+ -1106204240,
+ 1070369378,
+ -1065390458,
+ -1087842977,
+ -1104982657,
+ -1113094245,
+ -1108549280,
+ 1060583337,
+ 1032835209,
+ 1049607092,
+ -1101298383,
+ 1035510404,
+ -1089914499,
+ -1090288505,
+ 1024018337,
+ -1082873348,
+ 1059214184,
+ 1015737114,
+ -1113961756,
+ -1096340764,
+ 1035286964,
+ -1079916780,
+ 1014723774,
+ -1055275081,
+ 1052478002,
+ -1173045840,
+ -1128595736,
+ -1109653023,
+ 1057171761,
+ 1066576552,
+ 1059636280,
+ 1067481894,
+ -1090095341,
+ 1077359328,
+ -1113608214,
+ -1102770391,
+ 1045796091,
+ 1002605597,
+ -1114547851,
+ 1032741827,
+ 1017048272,
+ -1117100149,
+ 1054592068,
+ -1096656356,
+ -1114226084,
+ 1044678164,
+ 1026520697,
+ 1073130125,
+ -1097938417,
+ 1052939472,
+ 1023887581,
+ 1053722965,
+ -1097623915,
+ -1104074935,
+ 1038505858,
+ -1075793540,
+ -1098407442,
+ -1101166441,
+ -1073046357,
+ 1058728487,
+ -1101106132,
+ -1079880416,
+ 1041130752,
+ 1009158867,
+ 1057528321,
+ -1177790880,
+ -1107474187,
+ -1089412524,
+ 1033809826,
+ 1046865613,
+ 1031998145,
+ -1093612139,
+ 1035418669,
+ 1049634254,
+ 1054456445,
+ 1045679077,
+ 1027666331,
+ 1040783353,
+ -1109325763,
+ 1067417386,
+ 1052987892,
+ 1078094451,
+ 1052255710,
+ 1042741589,
+ -1084056020,
+ 1066166533,
+ 1057940417,
+ 1048326199,
+ -1146064615,
+ 1041869541,
+ 1037661037,
+ -1083596525,
+ -1107711190,
+ 1041597207,
+ 1026601506,
+ 980958216,
+ -1112566314,
+ 1074980159,
+ 1068539284,
+ 1045880663,
+ 1071569821,
+ -1138349768,
+ -1090912043,
+ -1114592216,
+ -1110127393,
+ -1099917911,
+ -1092224125,
+ 1049527779,
+ 1058460060,
+ -1082711426,
+ -1077717564,
+ 1052725070,
+ -1113780211,
+ 1046799508,
+ 1030527505,
+ 1063688857,
+ -1082607723,
+ 1040757890,
+ -1094455934,
+ 1088176284,
+ 1042957780,
+ 989741936,
+ 1056541146,
+ 1050319864,
+ 1065384155,
+ 1014506424,
+ 1069307203,
+ 1051759886,
+ 1063739510,
+ 1066010833,
+ -1115476744,
+ -1112973623,
+ -1112925364,
+ -1090692306,
+ -1094055253,
+ 1090381989,
+ 1044328194,
+ 1052669554,
+ 1008486066,
+ 1047478169,
+ -1119192850,
+ -1077137017,
+ -1113808815,
+ -1167981988,
+ 1059939694,
+ -1091602985,
+ 1056616408,
+ 1082286792,
+ 1075025532,
+ 1044517588,
+ 1041315086,
+ -1087678048,
+ -1105856510,
+ -1076301150,
+ -1061433035,
+ -1102923665,
+ 1078507621,
+ -1097519013,
+ -1081443907,
+ 1054800774,
+ -1114103831,
+ -1140796102,
+ -1128165948,
+ -1072394565,
+ -1075713511,
+ -1079828535,
+ -1096344786,
+ 1088731079,
+ 1040041121,
+ 1036958261,
+ 1051764188,
+ 1040269403,
+ 1058257073,
+ 1041202304,
+ 1091489999,
+ 1049744654,
+ -1083653481,
+ 1057685790,
+ 1052541306,
+ 1046811328,
+ -1106985816,
+ -1118860627,
+ -1122424028,
+ 1051048758,
+ 1038949903,
+ 1069059589,
+ 1033685511,
+ 1048332024,
+ -1114624880,
+ 1054487810,
+ -1110425014,
+ -1078534696,
+ 1047932658,
+ -1101754151,
+ 1060380236,
+ 1064390727,
+ -1092217794,
+ 1030471334,
+ 973488128,
+ -1063749940,
+ -1104432687,
+ -1073307133,
+ -1082644987,
+ -1155589404,
+ 1055615898,
+ 1033480662,
+ 1064305401,
+ 1036359281,
+ 1038153310,
+ -1098204687,
+ -1111267934,
+ 1065796251,
+ 1048338174,
+ 1045923753,
+ -1106691366,
+ -1077907958,
+ 1043056662,
+ 1039818316,
+ -1094125409,
+ -1088948046,
+ -1089987484,
+ -1103804691,
+ -1066870063,
+ -1067762518,
+ 1070445781,
+ -1098003673,
+ 1053435683,
+ 1051828698,
+ -1102030774,
+ 1033636360,
+ 1050506678,
+ -1098902401,
+ -1107928098,
+ -1093490633,
+ -1114746202,
+ -1086087446,
+ 1029281267,
+ 1015390940,
+ 1029098345,
+ 1061047517,
+ -1105280339,
+ 1060327117,
+ -1102047603,
+ -1123955102,
+ -1123269534,
+ -1113292027,
+ -1108930252,
+ 1075830134,
+ -1131456942,
+ 1091633970,
+ 1033271603,
+ 1049427308,
+ -1079877893,
+ 1045005688,
+ -1127283809,
+ 1049683092,
+ 1040221364,
+ 1049447154,
+ 1055481043,
+ 1045023059,
+ 1036422805,
+ 1075897834,
+ 1044037351,
+ -1104491510,
+ -1090638862,
+ 1021829322,
+ 1039100277,
+ 1061944256,
+ 1055328508,
+ 1042146307,
+ -1098275297,
+ -1092698556,
+ -1106950043,
+ 1079197685,
+ -1105666429,
+ -1087531861,
+ 1060664578,
+ -1097782504,
+ -1110149898,
+ 1046913139,
+ -1119725749,
+ -1121600653,
+ -1072054205,
+ 1035980224,
+ -1113878108,
+ -1096033841,
+ 1018200943,
+ -1118213135,
+ 1028543102,
+ -1106760586,
+ -1089028076,
+ -1093258465,
+ 1038496157,
+ -1126051608,
+ 1066355901,
+ 1057012632,
+ 1031171994,
+ 1051361901,
+ 1059788284,
+ 1034295277,
+ 1049201427,
+ -1104693904,
+ -1078213654,
+ 1053916711,
+ 1074177060,
+ -1103954435,
+ 1076879546,
+ 1057325673,
+ -1074339675,
+ -1072740227,
+ -1073333729,
+ -1057256407,
+ -1069198232,
+ -1102781370,
+ -1103764190,
+ -1064414968,
+ -1075286349,
+ 1069753949,
+ 1067349187,
+ -1100236966,
+ 1088145007,
+ -1067193851,
+ 1070015837,
+ -1080785495,
+ -1103081281,
+ -1097226651,
+ 1048651366,
+ 1074137047,
+ -1090588290,
+ -1079503711,
+ 1067105057,
+ 1028537718,
+ 1050079145,
+ 1051634654,
+ -1117985642,
+ -1073731692,
+ -1080815187,
+ -1078940843,
+ -1072224984,
+ -1077936898,
+ 1019436688,
+ 1056711933,
+ -1072116588,
+ 1056824535,
+ -1077884138,
+ 1076645333,
+ -1062892948,
+ 1050647164,
+ 1068541629,
+ 1048909230,
+ 1039227961,
+ 1058371014,
+ -1062794361,
+ -1077636302,
+ -1065651987,
+ 1077537155,
+ -1082066185,
+ 1077080131,
+ 1068561913,
+ -1087258023,
+ -1083909741,
+ 1074704028,
+ 1057353277,
+ 1060291382,
+ 1089675536,
+ 1074441230,
+ 1073904446,
+ 1089356704,
+ 1042860196,
+ -1077408520,
+ 1084113846,
+ -1075189486,
+ 1081944593,
+ -1096408766,
+ -1081637047,
+ -1089325405,
+ 1042022289,
+ 1055215954,
+ -1079408809,
+ 1068726190,
+ -1087141600,
+ 1065766240,
+ -1089876298,
+ -1103518370,
+ -1105703482,
+ -1086953752,
+ -1073390994,
+ 1077352759,
+ -1069791321,
+ -1080926202,
+ -1117233418,
+ 1042181372,
+ -1082923752,
+ -1097979126,
+ 1062829333,
+ 1072127059,
+ -1073636098,
+ 1076465265,
+ 1076654282,
+ -1085846703,
+ 1086116696,
+ -1057730990,
+ -1091287851,
+ -1127229288,
+ -1060989995,
+ -1057943028,
+ -1089322011,
+ 1091386850,
+ 1062942503,
+ -1091762540,
+ -1073134165,
+ 1061263833,
+ -1056705820,
+ -1075996346,
+ -1053728457,
+ -1057884842,
+ 1062684089,
+ 1061718117,
+ -1060730331,
+ 1075420071,
+ -1055166983,
+ -1165340035,
+ -1084112099,
+ -1075358929,
+ 1042348849,
+ 1057605442,
+ 1072863764,
+ 1055141837,
+ 1050515068,
+ 1066832404,
+ -1109858840,
+ 1061593844,
+ -1088010274,
+ 1049336987,
+ 1077140299,
+ 1071229737,
+ 1094128005,
+ 1068652964,
+ 1073761263,
+ -1080823558,
+ -1080612295,
+ -1069492533,
+ -1076568267,
+ 1016254432,
+ 1065465786,
+ 1076621535,
+ -1067018786,
+ 1044120022,
+ -1063612725,
+ -1088868178,
+ -1097505784,
+ 1081400901,
+ 1078491867,
+ 1058465231,
+ 1075142054,
+ -1083623957,
+ -1086719983,
+ -1082210137,
+ 1071933930,
+ -1074073535,
+ -1078566806,
+ -1065678814,
+ -1111316996,
+ -1078336746,
+ 1070740177,
+ 1069943940,
+ -1088959134,
+ -1085890078,
+ 1072860055,
+ 1041993261,
+ -1093062530,
+ -1083588898,
+ -1083038720,
+ -1088907022,
+ -1085595625,
+ 1068287035,
+ 1062146147,
+ 1051004601,
+ 1054107130,
+ 1058497817,
+ -1086203469,
+ -1077576653,
+ -1070592531,
+ -1089467378,
+ 1066656359,
+ 1060735033,
+ -1067897381,
+ 1073617298,
+ 1066345835,
+ 1041445888,
+ 1074931894,
+ -1075812972,
+ 1079303671,
+ -1077984302,
+ 1083007811,
+ -1092531478,
+ -1067471692,
+ 1086198063,
+ 1076521997,
+ -1064529174,
+ 1080631055,
+ 1076395727,
+ -1080986619,
+ 1079792596,
+ -1080832923,
+ -1062716147,
+ -1086302341,
+ -1127916910,
+ 1074580338,
+ 1061925128,
+ 1082884844,
+ 1064851000,
+ 1080615498,
+ -1063600615,
+ 1073954814,
+ 1066674762,
+ -1085023002,
+ -1097164616,
+ 1063834952,
+ 1063321300,
+ -1093493278,
+ -1086621768,
+ -1079288401,
+ 1063636137,
+ -1128499533,
+ -1100959460,
+ 1041628395,
+ -1084743415,
+ -1099571596,
+ -1063279956,
+ 1067033027,
+ -1113153260,
+ -1064337427,
+ -1098357774,
+ -1072878054,
+ 1087542283,
+ 1052472352,
+ 1068120113,
+ 1074910717,
+ 1039324688,
+ -1089261886,
+ 1067827534,
+ -1097457750,
+ -1097750563,
+ 1071980600,
+ 1086678889,
+ 1035227229,
+ 1061793755,
+ 1076712782,
+ 1079828043,
+ 1032646900,
+ -1080491025,
+ 1061130171,
+ -1087839881,
+ -1080539312,
+ -1097249232,
+ 1061496693,
+ 1040456971,
+ -1069696967,
+ -1063683343,
+ 1074888984,
+ -1084961865,
+ 1068672080,
+ -1090662350,
+ 1081144929,
+ 1058033832,
+ -1089030043,
+ -1078895177,
+ -1097457048,
+ -1096859790,
+ -1081841664,
+ 1059968953,
+ 1060760572,
+ -1079023849,
+ 1058342491,
+ -1095195805,
+ -1089120616,
+ -1074032293,
+ -1077410768,
+ -1063685158,
+ -1062040964,
+ -1072643604,
+ -1083311835,
+ -1072759764,
+ -1087774845,
+ 1045225986,
+ 1046937492,
+ -1071795919,
+ 1045740663,
+ -1098631065,
+ -1067875375,
+ 1072575710,
+ 1069076885,
+ 1069040543,
+ 1059144786,
+ 1073846876,
+ -1073669539,
+ -1058738446,
+ -1078430236,
+ -1077567885,
+ 1068472105,
+ 1058959248,
+ -1103897783,
+ 1063603208,
+ -1075658728,
+ 1080802947,
+ 1080295955,
+ -1073259101,
+ -1072177139,
+ 1083268173,
+ -1078865652,
+ 1066501044,
+ -1071839542,
+ -1094931324,
+ -1080502637,
+ 1080768941,
+ 1036329836,
+ 1059521957,
+ 1069798255,
+ -1079312558,
+ -1085816060,
+ -1079643341,
+ -1086722366,
+ 1043599961,
+ 1062166563,
+ 1061973195,
+ 1071371874,
+ 1073229843,
+ -1061445555,
+ 1043468529,
+ -1074126149,
+ -1070030693,
+ -1074638185,
+ -1086468465,
+ -1071534031,
+ 1078383893,
+ -1096567561,
+ 1059057313,
+ -1064281023,
+ 1066320794,
+ -1071213643,
+ -1095622871,
+ -1070430059,
+ -1102977623,
+ 1081369411,
+ -1069081009,
+ 1079231280,
+ 1087104565,
+ 1047364451,
+ -1064925938,
+ 1036380031,
+ 1077110985,
+ 1075939560,
+ -1064753711,
+ 1082002001,
+ 1056507941,
+ -1059755615,
+ -1064375097,
+ -1087692804,
+ -1086089786,
+ 1066957523,
+ -1080468127,
+ -1081012174,
+ 1071212393,
+ -1109986923,
+ -1097684837,
+ -1067339779,
+ 1061564371,
+ -1086052519,
+ 1037734284,
+ -1087505241,
+ 1067430553,
+ -1119470931,
+ -1110867099,
+ -1070421980,
+ 1032622795,
+ -1081877335,
+ -1089545380,
+ -1079412132,
+ 1090920436,
+ 1077980975,
+ 1082242947,
+ 1076635496,
+ 1071279024,
+ -1092787228,
+ -1085232178,
+ 1053332960,
+ 1050454689,
+ 1078595264,
+ 1073618576,
+ -1088560341,
+ 1072287784,
+ 1053511605,
+ 1072836574,
+ -1077550991,
+ -1064293020,
+ 1071537963,
+ 1033075688,
+ -1073549464,
+ 1070255803,
+ 1059442895,
+ 1068751064,
+ -1059118400,
+ 1077147308,
+ 1083369764,
+ -1094320149,
+ 1028617639,
+ -1120573237,
+ 1065037566,
+ -1096153546,
+ -1081990727,
+ 1058358739,
+ 1045733025,
+ 1032160282,
+ -1077197494,
+ -1090408926,
+ 1047967431,
+ -1083413978,
+ 1032880285,
+ -1107171584,
+ 1029258881,
+ -1065010204,
+ -1084595321,
+ -1071628950,
+ 1081847795,
+ 1069934810,
+ -1056753300,
+ -1077745951,
+ -1082063194,
+ -1095755969,
+ 1075902479,
+ -1077417942,
+ -1089539493,
+ 1066098806,
+ 1047912679,
+ 1067192257,
+ 1066987047,
+ 1080608712,
+ 1061781570,
+ 1080665947,
+ 1053123302,
+ 1076730940,
+ -1079498731,
+ -1085482987,
+ 1067541776,
+ 1062575146,
+ -1096871603,
+ -1062668783,
+ -1097152860,
+ -1057857089,
+ -1071530349,
+ 1053065285,
+ 1059965977,
+ 1064779175,
+ -1070560111,
+ 1078472638,
+ -1071968133,
+ 1062267719,
+ -1080575845,
+ 1061813212,
+ -1143185132,
+ -1105116470,
+ 1033335036,
+ 1063841378,
+ 1065395340,
+ -1086764982,
+ 1050463714,
+ 1063790044,
+ -1093668792,
+ -1090414132,
+ -1085191086,
+ -1070799165,
+ -1077795617,
+ 1075529455,
+ 1067651868,
+ -1087516912,
+ 1038698811,
+ -1077040274,
+ 1066292798,
+ -1072292152,
+ 1077512022,
+ -1082479975,
+ -1073151778,
+ -1081197324,
+ 1070530628,
+ 1041899513,
+ 1062543744,
+ -1083331476,
+ 1065726927,
+ -1081047910,
+ -1077128850,
+ -1077649718,
+ -1083730914,
+ 1073328847,
+ -1082051681,
+ 1074048894,
+ -1072998458,
+ -1082675163,
+ -1073393404,
+ -1092397892,
+ -1072764161,
+ 1073530650,
+ 1060020120,
+ -1127247156,
+ 1067027181,
+ -1092301251,
+ -1081366329,
+ 1025544449,
+ -1149019237,
+ 1067146213,
+ 1060553232,
+ -1098073787,
+ -1086564621,
+ -1123724299,
+ -1097663574,
+ -1097096499,
+ 1057814203,
+ 1048661767,
+ 1078743503,
+ 1063295730,
+ -1095632837,
+ -1062631321,
+ 1057917147,
+ -1078348273,
+ -1071460504,
+ -1061991263,
+ 1072007746,
+ 1058392250,
+ -1067326355,
+ -1077861936,
+ -1071461872,
+ 1076546774,
+ -1067492916,
+ 1062251697,
+ -1065822372,
+ 1051829674,
+ -1087124741,
+ -1076839110,
+ 1072452168,
+ -1072219407,
+ 1060964121,
+ 1070744460,
+ -1075121700,
+ 1059093929,
+ 1065080790,
+ 1034653814,
+ 1074604455,
+ -1107956361,
+ -1064766210,
+ -1080478713,
+ -1076867533,
+ -1097663750,
+ -1071929297,
+ 1039977153,
+ 1051774732,
+ 1055278575,
+ 1048988626,
+ 1055937832,
+ -1082025240,
+ -1087686901,
+ -1119256578,
+ -1110732045,
+ 1019693139,
+ -1092980748,
+ -1099006958,
+ 1082415506,
+ -1064441198,
+ -1064396800,
+ -1066213804,
+ 1049319572,
+ 1067373297,
+ -1083944143,
+ 1072144804,
+ 1074355207,
+ -1077346773,
+ -1099721483,
+ -1070307846,
+ -1079135649,
+ -1069655869,
+ -1103126205,
+ -1073099888,
+ 1076349893,
+ 1067500104,
+ 1057112503,
+ 1073786140,
+ 1082715876,
+ -1097988835,
+ 1084492678,
+ 1031337176,
+ -1089760329,
+ -1103647185,
+ -1067356810,
+ 1052566031,
+ -1080898018,
+ 1052572125,
+ -1069369417,
+ -1074281444,
+ -1112358514,
+ 1053319610,
+ -1086862715,
+ 1023326217,
+ 1043654943,
+ -1089434485,
+ 1076344172,
+ -1106885456,
+ -1098244491,
+ -1088104901,
+ 1064159789,
+ 1018588039,
+ 1061688066,
+ 1032462069,
+ -1072978526,
+ -1114470348,
+ 1078199066,
+ -1104323880,
+ -1078336282,
+ 1076879406,
+ -1077665544,
+ 1045357291,
+ -1122438438,
+ -1094742281,
+ -1083452682,
+ 1075312979,
+ -1068943012,
+ -1079629284,
+ 1043375845,
+ 1048332817,
+ 1051193996,
+ -1086977222,
+ -1087647059,
+ 1064984308,
+ 1073415508,
+ 1063096665,
+ 1051307972,
+ 1023560474,
+ -1087545283,
+ 1053292318,
+ -1067437652,
+ 1057941361,
+ -1073047966,
+ -1103862992,
+ 1075426239,
+ 1055358384,
+ 1079975631,
+ 1017477005,
+ 1087349560,
+ 1036408553,
+ -1078420244,
+ -1088651423,
+ 1039523619,
+ -1109001884,
+ 1060084922,
+ -1131886872,
+ 1050614446,
+ -1097388726,
+ -1106047532,
+ 1073493615,
+ 1034886782,
+ 1030251799,
+ 994866788,
+ -1127458253,
+ 1035335111,
+ 1054989202,
+ 1053441213,
+ -1097085492,
+ 1054818101,
+ 1058854121,
+ 1043441033,
+ 1040945475,
+ -1074939808,
+ 1069496610,
+ 991495172,
+ 1042259989,
+ 976914048,
+ 1070108182,
+ -1107011812,
+ 998431770,
+ -1088595868,
+ -1120796326,
+ -1135170194,
+ 1068757090,
+ -1121044545,
+ -1106248309,
+ 1056881696,
+ 1045557876,
+ 1020576387,
+ 1025728215,
+ 1049536038,
+ 1034923952,
+ 1047070927,
+ -1090314408,
+ -1132709040,
+ 1036172190,
+ -1103364244,
+ 1040339129,
+ 1045529931,
+ -1090237410,
+ 995388174,
+ 1073296092,
+ -1073735027,
+ 1013193555,
+ 1048837299,
+ 1063050577,
+ 1065531576,
+ -1114436611,
+ 1049567572,
+ -1130347980,
+ -1089665392,
+ 1057585238,
+ -1117009990,
+ 1090907634,
+ -1114388866,
+ -1119650282,
+ -1104882449,
+ 1014746202,
+ 1032720260,
+ 1057385715,
+ -1113010208,
+ -1120782218,
+ 1008293920,
+ -1126141588,
+ 1044018444,
+ -1126914478,
+ 1051446820,
+ -1104163769,
+ 1067664703,
+ 1012561282,
+ -1122855509,
+ 1072358420,
+ 1041439139,
+ 1046003339,
+ 1069379479,
+ -1118602879,
+ 1023419480,
+ -1122623018,
+ 1051852341,
+ -1107626656,
+ -1087234248,
+ -1077287157,
+ 1033608197,
+ -1071705245,
+ -1109407200,
+ 1028436832,
+ -1093794077,
+ -1106525440,
+ 994541891,
+ 1035015483,
+ 1053798756,
+ -1127062001,
+ -1087269484,
+ 1054542492,
+ -1123003113,
+ -1099702338,
+ 1047214228,
+ -1100085612,
+ -1090701324,
+ 1069451648,
+ -1125023767,
+ 1066256783,
+ 1006809943,
+ 1032282486,
+ -1059092690,
+ -1103255600,
+ 1032003005,
+ 1062946719,
+ 1049185453,
+ -1165408424,
+ -1104168700,
+ -1108198032,
+ 1040697124,
+ 1023671202,
+ -1104472126,
+ 1074492938,
+ -1098309299,
+ 1103086693,
+ 1053935729,
+ 1043997044,
+ 1049170811,
+ 1046621535,
+ 1062994724,
+ -1106396952,
+ -1112828619,
+ 1025787216,
+ 1043760327,
+ 1040358509,
+ 1074864359,
+ 1077374369,
+ -1062923130,
+ -1107215153,
+ 1079624103,
+ -1086378690,
+ -1086923043,
+ -1099376255,
+ 1044062984,
+ 1025199469,
+ -1105671034,
+ 1039867710,
+ 1026354054,
+ -1131822811,
+ 1043386746,
+ 1032678950,
+ 1028773204,
+ -1129264890,
+ 1059465544,
+ -1113284807,
+ 1048053510,
+ -1123957369,
+ 1059603480,
+ -1097575519,
+ -1092625393,
+ -1106937853,
+ 1050118316,
+ 1031902391,
+ -1078970942,
+ -1107722103,
+ -1129910800,
+ 1035446661,
+ 1038968416,
+ -1111874379,
+ -1122911957,
+ 1053633025,
+ 1032920632,
+ 1061141449,
+ 1069947724,
+ 1040412626,
+ -1094598536,
+ 1064794174,
+ 1058652824,
+ 1078003148,
+ 1031882883,
+ 1019308515,
+ -1094030930,
+ -1098451506,
+ -1111012168,
+ -1108286648,
+ 1039913082,
+ 1063125253,
+ 1068957087,
+ 1023783637,
+ -1078252571,
+ -1094179333,
+ 1017968746,
+ 1047832971,
+ -1127889031,
+ 1016030590,
+ 1024922356,
+ -1105736754,
+ -1138349372,
+ 1018599645,
+ -1140468878,
+ 1014751046,
+ -1138115176,
+ -1064527519,
+ 1044193108,
+ -1094052687,
+ -1115648463,
+ 1040855268,
+ 1044440682,
+ 1055725609,
+ -1088349764,
+ -1105733618,
+ -1103833553,
+ -1130321018,
+ -1123264290,
+ 1059962646,
+ 1045242582,
+ -1114428761,
+ 1048589747,
+ 1056009821,
+ -1108324331,
+ -1097910904,
+ 1045291406,
+ -1095262568,
+ 1057898855,
+ 1034237326,
+ 1032007602,
+ 1053797716,
+ -1140080344,
+ -1111412913,
+ -1087766131,
+ -1100143651,
+ 1067842488,
+ 1012410649,
+ 1041020650,
+ 1082892561,
+ -1076277088,
+ -1094054282,
+ 1036286596,
+ -1090632939,
+ 1033462468,
+ -1119322634,
+ 1033224939,
+ -1130959437,
+ 1023491332,
+ -1108653953,
+ -1103082302,
+ 1025990200,
+ 1045053623,
+ 1007072883,
+ 1018363297,
+ -1081330658,
+ 1042209297,
+ 1019102924,
+ -1105520880,
+ -1111076357,
+ 1066057385,
+ 1035849662,
+ 1032398542,
+ -1116571216,
+ -1098409318,
+ 1047587935,
+ -1105974018,
+ 1074881397,
+ 1049499566,
+ 1040151695,
+ -1097929369,
+ -1104399955,
+ 1022701569,
+ 1067668611,
+ -1115188854,
+ 1045911226,
+ 1060647628,
+ -1091003643,
+ -1095856634,
+ 1035323152,
+ 1039393016,
+ 1029084684,
+ -1069897590,
+ 1034218946,
+ -1102849757,
+ 1050872922,
+ -1109649127,
+ -1098897066,
+ 1033080000,
+ -1089879208,
+ -1099567149,
+ -1070739469,
+ 1057187433,
+ 1040758758,
+ -1086334183,
+ 1034993701,
+ 1052946941,
+ 1018506471,
+ -1111999184,
+ 1039276171,
+ -1098312167,
+ 1002041627,
+ -1083004972,
+ -1093551179,
+ -1078015519,
+ -1097667358,
+ 1055152559,
+ -1098761576,
+ -1088629700,
+ -1061060501,
+ -1122079290,
+ -1117156782,
+ 1052852969,
+ -1101725054,
+ -1098224409,
+ -1106123409,
+ 1044777527,
+ -1129845608,
+ 1036837418,
+ 1059403728,
+ -1090859869,
+ 1046395418,
+ 1018344302,
+ 1030133886,
+ 1076132738,
+ -1089384880,
+ -1088035724,
+ 1070525538,
+ 1077432527,
+ -1099319701,
+ 1069397769,
+ 1049293070,
+ 1072656298,
+ 1060368048,
+ 1049973908,
+ 1062969899,
+ -1081347624,
+ -1107006382,
+ -1070942572,
+ -1102115598,
+ 1042841411,
+ 1049423015,
+ -1103474651,
+ 1051353506,
+ 1048532581,
+ -1106628818,
+ -1109679024,
+ -1122144159,
+ 1048837671,
+ 1044402474,
+ 1037026795,
+ -1103135451,
+ -1083937760,
+ -1132968184,
+ 1041454552,
+ -1106169571,
+ -1099833695,
+ -1080274044,
+ 1058801339,
+ 1035408258,
+ 1040195500,
+ 1044624802,
+ 1040464170,
+ 1072302844,
+ -1106868176,
+ 1068313146,
+ -1067856157,
+ 1048036283,
+ -1089112214,
+ -1104221816,
+ 1011212219,
+ 1049590964,
+ -1112256733,
+ -1105805989,
+ 1065697381,
+ 1052114832,
+ 1014134638,
+ 1058298504,
+ 1050103142,
+ 1042615487,
+ -1116700302,
+ -1068735502,
+ -1128371874,
+ 1060427663,
+ 1034862658,
+ -1144431595,
+ 1057142814,
+ 1019832008,
+ -1123625892,
+ 1058280811,
+ -1085270922,
+ -1109160062,
+ 1056245924,
+ 1072398913,
+ 1078686902,
+ -1106038135,
+ 1059993571,
+ -1105684447,
+ -1072468506,
+ 1069361426,
+ 1032653547,
+ 1069436502,
+ 1015721278,
+ -1123432371,
+ -1099530465,
+ 1007002485,
+ 1034447306,
+ 1057529561,
+ -1146730605,
+ -1105358413,
+ -1115611800,
+ -1136700319,
+ 993929880,
+ 1067508145,
+ -1081131909,
+ 1035876760,
+ -1086502688,
+ 1034419917,
+ -1129579995,
+ 1068926935,
+ -1131192068,
+ 1035081810,
+ 1061196023,
+ 1048224107,
+ -1110833377,
+ 1046087107,
+ 1056106284,
+ 1015689017,
+ 1071806552,
+ -1132530814,
+ 1028841488,
+ -1079589253,
+ 1022660124,
+ 1032720424,
+ -1094526350,
+ -1108132861,
+ -1134553608,
+ 1078745423,
+ -1063056547,
+ -1127540776,
+ 1063902425,
+ 1076653302,
+ 1072877035,
+ -1106849059,
+ 1059175157,
+ -1112772587,
+ -1087815036,
+ 1063268428,
+ -1110069559,
+ 1076285015,
+ 1010758504,
+ -1170405684,
+ -1080414941,
+ 1020014436,
+ 1015631126,
+ 1061906910,
+ 1036351291,
+ -1115300196,
+ 1024071910,
+ 1023485152,
+ 1032750020,
+ -1053504417,
+ 1052161426,
+ 1074343503,
+ -1090206652,
+ 1040810073,
+ 1032918497,
+ -1083411100,
+ 1055601193,
+ 1033387396,
+ 1018198188,
+ -1101959959,
+ -1138051048,
+ 1063135760,
+ -1072538013,
+ 1029687440,
+ 1072209803,
+ 1082495458,
+ 1037682874,
+ 1050198907,
+ 1050267098,
+ -1096763009,
+ 1032327521,
+ -1095504296,
+ 1033081157,
+ -1072683597,
+ 1053483299,
+ 1009922557,
+ 1041382957,
+ -1086240895,
+ -1088580349,
+ 1015585819,
+ 1032538738,
+ 1017091817,
+ 1051734535,
+ -1099048754,
+ 1018896552,
+ -1059231693,
+ 1029871567,
+ -1106346233,
+ 1039013192,
+ 1038508265,
+ 1022600130,
+ -1103279428,
+ -1108303103,
+ 1041627302,
+ -1119385149,
+ 1043537224,
+ 1019677053,
+ -1086649308,
+ -1097413976,
+ 1040503142,
+ -1112633448,
+ -1072306906,
+ 1046261089,
+ 1060376560,
+ -1085151011,
+ -1090143396,
+ -1089062409,
+ -1062684256,
+ -1092325961,
+ -1090619008,
+ -1073892866,
+ 1030301400,
+ -1107066805,
+ -1103471876,
+ 1058040529,
+ 1058297382,
+ 1062955398,
+ -1094309058,
+ 1072926548,
+ -1064895579,
+ -1115349061,
+ 1025196834,
+ -1096520947,
+ -1103281703,
+ -1123293227,
+ 1015358155,
+ -1088414708,
+ 1028243967,
+ 1042723198,
+ 1021611568,
+ -1105195638,
+ -1089618608,
+ -1157195327,
+ 1063760861,
+ 1039836568,
+ 1026593931,
+ 1051350357,
+ 1048179795,
+ -1137754134,
+ -1096797386,
+ -1107110455,
+ 1038172572,
+ -1103691715,
+ 1067375599,
+ 1037595737,
+ 1071500001,
+ -1080815307,
+ 1056290220,
+ 1065580847,
+ 1074654092,
+ 1076864395,
+ -1064032392,
+ -1085447006,
+ 1047152480,
+ -1074198357,
+ 1049896228,
+ 1062685373,
+ 1056763864,
+ 1082428738,
+ -1096617549,
+ -1064300881,
+ -1092103051,
+ -1077687113,
+ 1077480070,
+ -1081771156,
+ -1064076012,
+ -1062933671,
+ -1061233819,
+ -1104907380,
+ 1052752001,
+ -1072740315,
+ -1119671911,
+ 1047327019,
+ 1042561467,
+ -1106387210,
+ -1070765477,
+ 1068105086,
+ -1111313686,
+ -1131823370,
+ -1105403817,
+ 1000355048,
+ 1071677388,
+ 1042693161,
+ 1066007217,
+ -1073753380,
+ 1073837901,
+ -1091817646,
+ -1128437584,
+ -1059618865,
+ -1081801774,
+ 1066595187,
+ 1068939609,
+ -1079403876,
+ -1112763389,
+ -1073191371,
+ -1059371142,
+ 1041612488,
+ -1069743710,
+ 1059030873,
+ 1067932210,
+ 1076055163,
+ -1078240016,
+ 1068349745,
+ -1068110571,
+ -1077889906,
+ 1057817574,
+ -1070331710,
+ 1081882522,
+ -1072337386,
+ -1087603628,
+ 1075042177,
+ 1056889262,
+ -1089854627,
+ 1057919963,
+ 1066401330,
+ 1085737219,
+ -1081639791,
+ -1089154178,
+ 1036343645,
+ -1078282000,
+ -1078295000,
+ -1085791800,
+ 1046556085,
+ -1106218682,
+ -1101696923,
+ -1090486072,
+ -1068717910,
+ -1100099754,
+ 1070514407,
+ 1083156348,
+ -1068397963,
+ 1069356463,
+ 1078123976,
+ -1068802576,
+ 1043769116,
+ -1063739139,
+ 1078048988,
+ 1070641209,
+ 1076703642,
+ -1081754907,
+ 1067753633,
+ -1079252255,
+ 1057965502,
+ 1071431460,
+ -1089600091,
+ -1076279528,
+ 1035367653,
+ 1081425906,
+ -1092505942,
+ -1113324677,
+ -1097531072,
+ 1071075367,
+ -1120448108,
+ 1058335358,
+ -1065866702,
+ 1054253127,
+ 1052098872,
+ -1084145955,
+ 1066050322,
+ -1084288011,
+ 1073941381,
+ 1065955669,
+ 1075407418,
+ -1077375490,
+ 1027108764,
+ 1055707816,
+ -1088483083,
+ -1106366499,
+ 1009464846,
+ -1109712910,
+ 1057778038,
+ -1076601134,
+ -1088999170,
+ -1088712121,
+ 1057333838,
+ 1039687430,
+ -1106574007,
+ -1123374135,
+ -1072747826,
+ 1053972234,
+ 1066602790,
+ 1027092217,
+ 1034561142,
+ 1051945585,
+ 1070062920,
+ -1084206394,
+ 1064487856,
+ 1065509408,
+ -1072789599,
+ -1091587404,
+ -1088397966,
+ -1075634519,
+ -1081468450,
+ 1062503413,
+ 1064262807,
+ 1067621221,
+ -1070063084,
+ -1097213291,
+ 1065056241,
+ -1065824139,
+ -1065271799,
+ 1075198524,
+ -1064821830,
+ -1086167925,
+ 1087174760,
+ 1078010040,
+ 1072577045,
+ -1061338163,
+ 1067218935,
+ 1080611136,
+ 1087543130,
+ 1088154060,
+ 1046348062,
+ -1078277313,
+ 1083023370,
+ 1051944656,
+ 1065741877,
+ -1101819168,
+ 1059179555,
+ 1075189675,
+ -1079663807,
+ 1067185634,
+ -1078817497,
+ -1112264307,
+ 1035736362,
+ -1080055960,
+ 1067207527,
+ -1086222417,
+ 1072348158,
+ -1059674961,
+ -1090188682,
+ -1103323654,
+ 1082608574,
+ 1077386934,
+ -1073838667,
+ -1068489124,
+ -1077215998,
+ -1066481765,
+ -1076932502,
+ -1072346534,
+ 1061797239,
+ -1093655929,
+ 1062553572,
+ -1089830141,
+ 1095987426,
+ 1071673824,
+ 1074362914,
+ -1078638808,
+ -1064241924,
+ 1094172566,
+ -1058644846,
+ 1020992007,
+ -1089727053,
+ 1052390229,
+ 1053832535,
+ -1074531177,
+ -1080182150,
+ 1078169302,
+ 1092148430,
+ 1090155381,
+ -1078436897,
+ -1080327198,
+ 1080684662,
+ -1088357532,
+ 1076471185,
+ -1083379219,
+ 1084061965,
+ 1070158799,
+ 1024578939,
+ -1104103537,
+ 1076492205,
+ 1047633047,
+ -1084054674,
+ -1116599548,
+ -1070396068,
+ -1076518927,
+ 1077836951,
+ 1042270480,
+ -1090635139,
+ 1059331881,
+ 1092201250,
+ -1078276487,
+ 1067698169,
+ -1071129394,
+ 1067567458,
+ -1089269652,
+ 1072997286,
+ 1050812539,
+ -1107655150,
+ -1107056276,
+ 1074645842,
+ -1087290174,
+ -1065149341,
+ 1075248193,
+ 1065718660,
+ 1082689719,
+ -1114038326,
+ 1076275065,
+ -1069839383,
+ -1080869854,
+ -1075044312,
+ 1065566224,
+ 994694025,
+ 1076798102,
+ -1067665033,
+ -1093968766,
+ 1078147310,
+ 1081240340,
+ -1088344220,
+ -1082316809,
+ -1078785877,
+ -1097203543,
+ 1041549355,
+ 1043890938,
+ 1069241023,
+ -1135401438,
+ -1119826282,
+ -1096243446,
+ -1070890771,
+ -1107004927,
+ -1088206922,
+ 1054203345,
+ -1069105306,
+ 1062035647,
+ 1080830328,
+ 1048066522,
+ -1072543614,
+ -1103059590,
+ 1083265642,
+ 1064548889,
+ 1072631513,
+ -1069246715,
+ 1055182473,
+ -1059331815,
+ 1071545244,
+ 1009798764,
+ 1059434159,
+ -1067498712,
+ 1081091088,
+ -1085843782,
+ -1069474195,
+ 1063098166,
+ 1051848166,
+ 1078830286,
+ 1067999335,
+ 1036421987,
+ 1079749184,
+ 1072486948,
+ -1093730825,
+ 1085906223,
+ 1061348220,
+ 1073834946,
+ -1067519269,
+ 1048532989,
+ 1080155506,
+ -1066698726,
+ -1085582367,
+ 1016775466,
+ -1066577944,
+ -1083373322,
+ 1067564640,
+ 1049703829,
+ -1079571296,
+ -1090963561,
+ 1067522645,
+ -1091072748,
+ 1079231478,
+ -1093890501,
+ -1076084420,
+ 1065578318,
+ -1068856312,
+ -1101569908,
+ -1089523795,
+ 1069494794,
+ 1069725290,
+ 1074776264,
+ -1095231977,
+ 1058179959,
+ 1073367955,
+ -1078244857,
+ -1073702847,
+ -1075022698,
+ -1075271215,
+ -1069267458,
+ -1086825289,
+ -1066731864,
+ -1071025688,
+ 1082077859,
+ 1082429939,
+ 1050112109,
+ 1063691972,
+ 1081489636,
+ 1090933134,
+ -1081093706,
+ 1094048910,
+ 1078780998,
+ 1078527498,
+ 1026628320,
+ 1061771249,
+ -1071289319,
+ 1087373105,
+ 1075338126,
+ -1065746584,
+ -1067530568,
+ 1076695791,
+ 1066398903,
+ -1088128422,
+ 1072958196,
+ 1058019375,
+ -1092569208,
+ -1080902638,
+ 1077953742,
+ 1040884768,
+ 1074872586,
+ -1104193742,
+ 1065507077,
+ -1059208297,
+ -1064254710,
+ 1091809520,
+ -1071471785,
+ -1075953556,
+ -1071223329,
+ 1048283325,
+ -1079759547,
+ -1079347825,
+ -1083860240,
+ -1067157841,
+ 1065862838,
+ -1123320963,
+ 1085833230,
+ 1058810542,
+ -1080399454,
+ 1057973550,
+ -1059340256,
+ 1078236818,
+ 1025963881,
+ 1077379307,
+ -1066948521,
+ 1088364889,
+ -1062007568,
+ -1097622412,
+ -1086140905,
+ -1079987561,
+ 1058713828,
+ -1072826578,
+ -1063357068,
+ -1092586228,
+ -1058807896,
+ -1070130999,
+ -1117881488,
+ 1087057729,
+ 1074434924,
+ -1095352741,
+ -1089086986,
+ 1058786774,
+ -1072428422,
+ 1079353993,
+ -1107135386,
+ -1073416379,
+ -1092751894,
+ -1093430963,
+ -1079840030,
+ -1076950135,
+ 1068617955,
+ 1051460916,
+ -1071745992,
+ -1067527030,
+ 1036745888,
+ -1120691339,
+ 1078422956,
+ -1071132970,
+ 1066930847,
+ -1087035884,
+ 1065796550,
+ 1070953630,
+ 1078401318,
+ -1082429505,
+ -1091753574,
+ 1080241222,
+ -1080892654,
+ -1083511885,
+ 1079698207,
+ 1068654665,
+ 1066894765,
+ 1088795027,
+ -1068354463,
+ 1069655114,
+ -1088376194,
+ 1086426765,
+ -1090818467,
+ 1091078368,
+ 1071915059,
+ 1088355241,
+ 1061965037,
+ 1074835118,
+ -1105308280,
+ 1074661431,
+ -1074278404,
+ -1059827717,
+ -1070238644,
+ -1098788451,
+ 1047150151,
+ 1070701448,
+ 1066819283,
+ 1073863099,
+ -1090853082,
+ -1080231962,
+ 1066041912,
+ -1083486887,
+ -1106007678,
+ -1084341958,
+ 1049406230,
+ 1080557295,
+ 1068303277,
+ 1072353400,
+ 1065994672,
+ 1063456333,
+ -1073556538,
+ 1081185278,
+ -1089478082,
+ -1075903876,
+ 1078854545,
+ -1096620341,
+ 1083844576,
+ 1073473604,
+ 1061439176,
+ -1081989339,
+ 1060397849,
+ -1099877985,
+ -1072967646,
+ -1068938687,
+ 1058957959,
+ -1054970571,
+ -1085761998,
+ -1067584873,
+ -1071120824,
+ 1079818609,
+ 1076457251,
+ -1087563952,
+ -1071571962,
+ -1059169910,
+ -1104478240,
+ -1090336787,
+ 1081849301,
+ 1092843379,
+ -1101093087,
+ -1104217437,
+ 1071447104,
+ 1057796878,
+ 1061103507,
+ -1063986640,
+ -1077538568,
+ 1088068209,
+ 1070187284,
+ 1077508648,
+ -1083775704,
+ -1083679909,
+ -1077568924,
+ -1114359257,
+ -1085957769,
+ -1069162640,
+ -1071468339,
+ -1075641541,
+ 1057632824,
+ 1038199468,
+ 1066763138,
+ -1073566380,
+ -1087865857,
+ -1068774448,
+ -1087806538,
+ 1059749478,
+ 1055404228,
+ 1070288649,
+ 1068063332,
+ 1072748679,
+ 1063416185,
+ -1108380299,
+ 1076451046,
+ 1054292371,
+ -1071550752,
+ -1067486313,
+ -1085767839,
+ 1071620291,
+ -1069420737,
+ -1063403191,
+ -1074338919,
+ -1082660739,
+ -1094307655,
+ 1065151346,
+ -1074757832,
+ 1073357708,
+ -1090430451,
+ 1085574900,
+ -1079488100,
+ -1078796358,
+ 1078294718,
+ 1052313860,
+ -1121506008,
+ 1067830545,
+ -1090611660,
+ -1090130044,
+ -1103457600,
+ -1137621163,
+ -1085627743,
+ -1094096077,
+ -1093745405,
+ 1031132217,
+ 1012812612,
+ 1063593163,
+ 1070268947,
+ -1081328281,
+ -1088708943,
+ 1053966216,
+ -1088653963,
+ 1073213836,
+ -1103101908,
+ 1040705240,
+ 1046168374,
+ 1042519117,
+ 1056306706,
+ -1085964583,
+ 1067216830,
+ -1074802812,
+ 1086254109,
+ -1091804998,
+ 1084568017,
+ -1072690387,
+ -1076588172,
+ 1054975404,
+ 1066827268,
+ 1067014384,
+ 1073855724,
+ -1071255062,
+ -1081893485,
+ 1062880687,
+ -1071542829,
+ -1076181843,
+ -1089302121,
+ 1050697729,
+ -1075375023,
+ -1064479518,
+ -1106912377,
+ 1074669298,
+ -1090304223,
+ -1102028063,
+ -1117335928,
+ 1063359913,
+ -1106027709,
+ -1080467364,
+ 1019774411,
+ -1077784642,
+ -1101767673,
+ -1084364854,
+ -1101269072,
+ -1081235370,
+ -1081956121,
+ 994566015,
+ -1084800251,
+ -1068111685,
+ -1071132288,
+ -1111376573,
+ 1076618781,
+ 1058051982,
+ -1084806633,
+ -1081678328,
+ 1049687933,
+ -1071177424,
+ 1054725980,
+ -1082550615,
+ -1072937929,
+ -1078291679,
+ 1068799103,
+ 1045553756,
+ 1063009791,
+ -1082493438,
+ 1033075602,
+ -1087798624,
+ 1066203511,
+ 1066075325,
+ -1095586691,
+ -1078816330,
+ -1095251978,
+ 1074354310,
+ -1083934334,
+ -1081978583,
+ 1073490536,
+ 1075173297,
+ -1088935664,
+ -1084878678,
+ -1080194961,
+ 1063386968,
+ 1046940090,
+ 1061086287,
+ 1059771420,
+ -1080744035,
+ -1097445741,
+ 1065967720,
+ -1071050655,
+ -1082421218,
+ 1061464502,
+ 1049745661,
+ 1059298133,
+ -1081750217,
+ 1056642022,
+ 1065565295,
+ -1071123786,
+ -1092943020,
+ 1061729083,
+ 1077103782,
+ -1097361187,
+ -1088030988,
+ -1082953214,
+ -1080261779,
+ 1068648708,
+ 1068038653,
+ -1080754111,
+ -1073423795,
+ -1073466072,
+ 1073124867,
+ 1072164387,
+ -1075928765,
+ 1056683750,
+ 1056619656,
+ 1049360004,
+ -1075796939,
+ -1070465335,
+ 1071326937,
+ 1071067055,
+ -1070208955,
+ -1070344688,
+ 1083691269,
+ 1083714968,
+ -1084661507,
+ -1088512516,
+ 1077417051,
+ -1103592968,
+ -1087996369,
+ 1060691850,
+ 1061584403,
+ -1089696425,
+ -1096689055,
+ 1074226586,
+ 999226581,
+ -1087461885,
+ 1083103447,
+ -1076435015,
+ -1076192815,
+ 1076674728,
+ -1088519593,
+ 1066717819,
+ 1068132215,
+ -1094782288,
+ -1080590472,
+ -1078679975,
+ 1053853057,
+ 1075403742,
+ -1080852249,
+ -1081758889,
+ 1076324339,
+ 1050605278,
+ 1066500353,
+ -1099518553,
+ 1048264037,
+ -1084826643,
+ -1117053290,
+ 1032251776,
+ 1051043181,
+ -1105778025,
+ }
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/Burmese_graphclust_model5_heavy_Test.txt b/Build/source/libs/icu/icu-src/source/test/testdata/Burmese_graphclust_model5_heavy_Test.txt
new file mode 100644
index 00000000000..a559cd7da26
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/Burmese_graphclust_model5_heavy_Test.txt
@@ -0,0 +1,8 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+Model: Burmese_graphclust_model5_heavy
+Embedding: grapheme_clusters_tf
+Input: အပြည်ပြည်ဆိုင်ရာလူ့အခွင့်အရေးကြေညာစာတမ်း
+Output: |အပြည်|ပြည်|ဆိုင်ရာ|လူ့|အခွင့်အရေး|ကြေညာစာတမ်း|
+Input: မျိုးရိုးဂုဏ်သိက္ခာနှင့်တကွ
+Output: |မျိုး|ရိုး|ဂုဏ်|သိက္ခာ|နှင့်|တ|ကွ|
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt b/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
index 32874357116..1792044bd09 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
@@ -1,10 +1,10 @@
# CollationTest_CLDR_NON_IGNORABLE_SHORT.txt
-# Date: 2020-02-12, 17:50:40 GMT
-# © 2020 Unicode®, Inc.
+# Date: 2021-08-17, 17:34:25 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
-# UCA Version: 13.0.0
-# UCD Version: 13.0.0
+# UCA Version: 14.0.0
+# UCD Version: 14.0.0
# For a description of the format and usage, see
# http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Data_Files
@@ -161,6 +161,21 @@
0749 0334
0334 074A
074A 0334
+0898 0334
+0899 0334
+089A 0334
+089B 0334
+089C 0334
+089D 0334
+08CA 0334
+08CB 0334
+08CC 0334
+08CD 0334
+08CE 0334
+08CF 0334
+08D0 0334
+08D1 0334
+08D2 0334
0334 08D3
08D3 0334
0334 08D4
@@ -572,6 +587,14 @@ FE2F 0334
1ABB 0334
0334 1ABC
1ABC 0334
+1AC1 0334
+1AC2 0334
+1AC5 0334
+1AC6 0334
+1AC7 0334
+1AC8 0334
+1AC9 0334
+1ACB 0334
0334 1DC0
1DC0 0334
0334 1DC1
@@ -638,6 +661,9 @@ A67D 0334
10F4A 0334
0334 10F4C
10F4C 0334
+10F82 0334
+10F84 0334
+1E2AE 0334
0316 0334
0334 0316
0317 0334
@@ -728,6 +754,9 @@ A67D 0334
1ABA 0334
0334 1ABD
1ABD 0334
+1AC3 0334
+1AC4 0334
+1ACA 0334
0334 1DC2
1DC2 0334
0334 1DCF
@@ -736,6 +765,7 @@ A67D 0334
1DD0 0334
0334 1DF9
1DF9 0334
+1DFA 0334
0334 1DFC
1DFC 0334
0334 1DFD
@@ -770,6 +800,8 @@ FE27 0334
10F4F 0334
0334 10F50
10F50 0334
+10F83 0334
+10F85 0334
0334 3099
3099 0334
0334 309A
@@ -945,6 +977,8 @@ FB1E 0334
0652 0334
0334 0653
0653 0334
+089E 0334
+089F 0334
0334 10EAC
10EAC 0334
0334 0654
@@ -1079,6 +1113,7 @@ A6F1 0334
0ABC 0334
0334 0B3C
0B3C 0334
+0C3C 0334
0334 0CBC
0CBC 0334
0334 1B34
@@ -1584,6 +1619,11 @@ FE31 0062
2E40 0061
2E40 0041
2E40 0062
+2E5D 0021
+2E5D 003F
+2E5D 0061
+2E5D 0041
+2E5D 0062
301C 0021
301C 003F
301C 0061
@@ -2169,6 +2209,23 @@ A6F4 0062
0749 0021
074A 0021
07FA 0021
+0890 0021
+0891 0021
+0898 0021
+0899 0021
+089A 0021
+089B 0021
+089C 0021
+089D 0021
+08CA 0021
+08CB 0021
+08CC 0021
+08CD 0021
+08CE 0021
+08CF 0021
+08D0 0021
+08D1 0021
+08D2 0021
08D3 0021
08D4 0021
08D5 0021
@@ -2213,6 +2270,7 @@ A6F4 0062
180C 0021
180D 0021
180E 0021
+180F 0021
1A7F 0021
1B6B 0021
1B6C 0021
@@ -2360,6 +2418,75 @@ FFFB 0021
1BCA1 0021
1BCA2 0021
1BCA3 0021
+1CF00 0021
+1CF01 0021
+1CF02 0021
+1CF03 0021
+1CF04 0021
+1CF05 0021
+1CF06 0021
+1CF07 0021
+1CF08 0021
+1CF09 0021
+1CF0A 0021
+1CF0B 0021
+1CF0C 0021
+1CF0D 0021
+1CF0E 0021
+1CF0F 0021
+1CF10 0021
+1CF11 0021
+1CF12 0021
+1CF13 0021
+1CF14 0021
+1CF15 0021
+1CF16 0021
+1CF17 0021
+1CF18 0021
+1CF19 0021
+1CF1A 0021
+1CF1B 0021
+1CF1C 0021
+1CF1D 0021
+1CF1E 0021
+1CF1F 0021
+1CF20 0021
+1CF21 0021
+1CF22 0021
+1CF23 0021
+1CF24 0021
+1CF25 0021
+1CF26 0021
+1CF27 0021
+1CF28 0021
+1CF29 0021
+1CF2A 0021
+1CF2B 0021
+1CF2C 0021
+1CF2D 0021
+1CF30 0021
+1CF31 0021
+1CF32 0021
+1CF33 0021
+1CF34 0021
+1CF35 0021
+1CF36 0021
+1CF37 0021
+1CF38 0021
+1CF39 0021
+1CF3A 0021
+1CF3B 0021
+1CF3C 0021
+1CF3D 0021
+1CF3E 0021
+1CF3F 0021
+1CF40 0021
+1CF41 0021
+1CF42 0021
+1CF43 0021
+1CF44 0021
+1CF45 0021
+1CF46 0021
1D165 0021
1D166 0021
1D167 0021
@@ -2939,6 +3066,14 @@ E01EF 0021
1AB4 0021
1ABB 0021
1ABC 0021
+1AC1 0021
+1AC2 0021
+1AC5 0021
+1AC6 0021
+1AC7 0021
+1AC8 0021
+1AC9 0021
+1ACB 0021
1DC0 0021
1DC1 0021
1DC3 0021
@@ -2972,7 +3107,10 @@ A67D 0021
10F49 0021
10F4A 0021
10F4C 0021
+10F82 0021
+10F84 0021
1BC9D 0021
+1E2AE 0021
0316 0021
0317 0021
0318 0021
@@ -3018,10 +3156,14 @@ A67D 0021
1AB9 0021
1ABA 0021
1ABD 0021
+1AC3 0021
+1AC4 0021
+1ACA 0021
1DC2 0021
1DCF 0021
1DD0 0021
1DF9 0021
+1DFA 0021
1DFC 0021
1DFD 0021
1DFF 0021
@@ -3039,6 +3181,8 @@ FE27 0021
10F4E 0021
10F4F 0021
10F50 0021
+10F83 0021
+10F85 0021
0336 0021
0337 0021
20D8 0021
@@ -3176,6 +3320,8 @@ FC63 0021
FE7F 0021
FE7E 0021
0653 0021
+089E 0021
+089F 0021
0AFC 0021
10EAC 0021
0654 0021
@@ -3252,6 +3398,7 @@ A6F1 0021
0AFE 0021
0AFF 0021
0B3C 0021
+0C3C 0021
0CBC 0021
1B34 0021
1BE6 0021
@@ -3512,6 +3659,11 @@ FE15 0062
00A1 0061
00A1 0041
00A1 0062
+2E53 0021
+2E53 003F
+2E53 0061
+2E53 0041
+2E53 0062
055C 0021
055C 003F
055C 0061
@@ -3677,6 +3829,23 @@ FE15 0062
0749 003F
074A 003F
07FA 003F
+0890 003F
+0891 003F
+0898 003F
+0899 003F
+089A 003F
+089B 003F
+089C 003F
+089D 003F
+08CA 003F
+08CB 003F
+08CC 003F
+08CD 003F
+08CE 003F
+08CF 003F
+08D0 003F
+08D1 003F
+08D2 003F
08D3 003F
08D4 003F
08D5 003F
@@ -3721,6 +3890,7 @@ FE15 0062
180C 003F
180D 003F
180E 003F
+180F 003F
1A7F 003F
1B6B 003F
1B6C 003F
@@ -3868,6 +4038,75 @@ FFFB 003F
1BCA1 003F
1BCA2 003F
1BCA3 003F
+1CF00 003F
+1CF01 003F
+1CF02 003F
+1CF03 003F
+1CF04 003F
+1CF05 003F
+1CF06 003F
+1CF07 003F
+1CF08 003F
+1CF09 003F
+1CF0A 003F
+1CF0B 003F
+1CF0C 003F
+1CF0D 003F
+1CF0E 003F
+1CF0F 003F
+1CF10 003F
+1CF11 003F
+1CF12 003F
+1CF13 003F
+1CF14 003F
+1CF15 003F
+1CF16 003F
+1CF17 003F
+1CF18 003F
+1CF19 003F
+1CF1A 003F
+1CF1B 003F
+1CF1C 003F
+1CF1D 003F
+1CF1E 003F
+1CF1F 003F
+1CF20 003F
+1CF21 003F
+1CF22 003F
+1CF23 003F
+1CF24 003F
+1CF25 003F
+1CF26 003F
+1CF27 003F
+1CF28 003F
+1CF29 003F
+1CF2A 003F
+1CF2B 003F
+1CF2C 003F
+1CF2D 003F
+1CF30 003F
+1CF31 003F
+1CF32 003F
+1CF33 003F
+1CF34 003F
+1CF35 003F
+1CF36 003F
+1CF37 003F
+1CF38 003F
+1CF39 003F
+1CF3A 003F
+1CF3B 003F
+1CF3C 003F
+1CF3D 003F
+1CF3E 003F
+1CF3F 003F
+1CF40 003F
+1CF41 003F
+1CF42 003F
+1CF43 003F
+1CF44 003F
+1CF45 003F
+1CF46 003F
1D165 003F
1D166 003F
1D167 003F
@@ -4447,6 +4686,14 @@ E01EF 003F
1AB4 003F
1ABB 003F
1ABC 003F
+1AC1 003F
+1AC2 003F
+1AC5 003F
+1AC6 003F
+1AC7 003F
+1AC8 003F
+1AC9 003F
+1ACB 003F
1DC0 003F
1DC1 003F
1DC3 003F
@@ -4480,7 +4727,10 @@ A67D 003F
10F49 003F
10F4A 003F
10F4C 003F
+10F82 003F
+10F84 003F
1BC9D 003F
+1E2AE 003F
0316 003F
0317 003F
0318 003F
@@ -4526,10 +4776,14 @@ A67D 003F
1AB9 003F
1ABA 003F
1ABD 003F
+1AC3 003F
+1AC4 003F
+1ACA 003F
1DC2 003F
1DCF 003F
1DD0 003F
1DF9 003F
+1DFA 003F
1DFC 003F
1DFD 003F
1DFF 003F
@@ -4547,6 +4801,8 @@ FE27 003F
10F4E 003F
10F4F 003F
10F50 003F
+10F83 003F
+10F85 003F
0336 003F
0337 003F
20D8 003F
@@ -4684,6 +4940,8 @@ FC63 003F
FE7F 003F
FE7E 003F
0653 003F
+089E 003F
+089F 003F
0AFC 003F
10EAC 003F
0654 003F
@@ -4760,6 +5018,7 @@ A6F1 003F
0AFE 003F
0AFF 003F
0B3C 003F
+0C3C 003F
0CBC 003F
1B34 003F
1BE6 003F
@@ -5025,6 +5284,11 @@ FE16 0062
2E2E 0061
2E2E 0041
2E2E 0062
+2E54 0021
+2E54 003F
+2E54 0061
+2E54 0041
+2E54 0062
055E 0021
055E 003F
055E 0061
@@ -5540,6 +5804,11 @@ ABEB 0062
1C7F 0061
1C7F 0041
1C7F 0062
+061D 0021
+061D 003F
+061D 0061
+061D 0041
+061D 0062
0700 0021
0700 003F
0700 0061
@@ -5585,6 +5854,16 @@ ABEB 0062
1B5B 0061
1B5B 0041
1B5B 0062
+1B7D 0021
+1B7D 003F
+1B7D 0061
+1B7D 0041
+1B7D 0062
+1B7E 0021
+1B7E 003F
+1B7E 0061
+1B7E 0041
+1B7E 0062
A9C1 0021
A9C1 003F
A9C1 0061
@@ -5705,6 +5984,26 @@ A95F 0062
10F59 0061
10F59 0041
10F59 0062
+10F86 0021
+10F86 003F
+10F86 0061
+10F86 0041
+10F86 0062
+10F87 0021
+10F87 003F
+10F87 0061
+10F87 0041
+10F87 0062
+10F88 0021
+10F88 003F
+10F88 0061
+10F88 0041
+10F88 0062
+10F89 0021
+10F89 003F
+10F89 0061
+10F89 0041
+10F89 0062
110BE 0021
110BE 003F
110BE 0061
@@ -5905,6 +6204,16 @@ A95F 0062
12474 0061
12474 0041
12474 0062
+12FF1 0021
+12FF1 003F
+12FF1 0061
+12FF1 0041
+12FF1 0062
+12FF2 0021
+12FF2 003F
+12FF2 0061
+12FF2 0041
+12FF2 0062
0027 0021
FF07 0021
0027 003F
@@ -7250,6 +7559,46 @@ FF60 0062
2E29 0061
2E29 0041
2E29 0062
+2E55 0021
+2E55 003F
+2E55 0061
+2E55 0041
+2E55 0062
+2E56 0021
+2E56 003F
+2E56 0061
+2E56 0041
+2E56 0062
+2E57 0021
+2E57 003F
+2E57 0061
+2E57 0041
+2E57 0062
+2E58 0021
+2E58 003F
+2E58 0061
+2E58 0041
+2E58 0062
+2E59 0021
+2E59 003F
+2E59 0061
+2E59 0041
+2E59 0062
+2E5A 0021
+2E5A 003F
+2E5A 0061
+2E5A 0041
+2E5A 0062
+2E5B 0021
+2E5B 003F
+2E5B 0061
+2E5B 0041
+2E5B 0062
+2E5C 0021
+2E5C 003F
+2E5C 0061
+2E5C 0041
+2E5C 0062
2329 0021
3008 0021
FE3F 0021
@@ -8950,6 +9299,11 @@ AA5C 0062
11643 0061
11643 0041
11643 0062
+116B9 0021
+116B9 003F
+116B9 0061
+116B9 0041
+116B9 0062
1183B 0021
1183B 003F
1183B 0061
@@ -9753,6 +10107,71 @@ AB5B 003F
AB5B 0061
AB5B 0041
AB5B 0062
+1AFF0 0021
+1AFF0 003F
+1AFF0 0061
+1AFF0 0041
+1AFF0 0062
+1AFF1 0021
+1AFF1 003F
+1AFF1 0061
+1AFF1 0041
+1AFF1 0062
+1AFF2 0021
+1AFF2 003F
+1AFF2 0061
+1AFF2 0041
+1AFF2 0062
+1AFF3 0021
+1AFF3 003F
+1AFF3 0061
+1AFF3 0041
+1AFF3 0062
+1AFF5 0021
+1AFF5 003F
+1AFF5 0061
+1AFF5 0041
+1AFF5 0062
+1AFF6 0021
+1AFF6 003F
+1AFF6 0061
+1AFF6 0041
+1AFF6 0062
+1AFF7 0021
+1AFF7 003F
+1AFF7 0061
+1AFF7 0041
+1AFF7 0062
+1AFF8 0021
+1AFF8 003F
+1AFF8 0061
+1AFF8 0041
+1AFF8 0062
+1AFF9 0021
+1AFF9 003F
+1AFF9 0061
+1AFF9 0041
+1AFF9 0062
+1AFFA 0021
+1AFFA 003F
+1AFFA 0061
+1AFFA 0041
+1AFFA 0062
+1AFFB 0021
+1AFFB 003F
+1AFFB 0061
+1AFFB 0041
+1AFFB 0062
+1AFFD 0021
+1AFFD 003F
+1AFFD 0061
+1AFFD 0041
+1AFFD 0062
+1AFFE 0021
+1AFFE 003F
+1AFFE 0061
+1AFFE 0041
+1AFFE 0062
00B0 0021
00B0 003F
00B0 0061
@@ -9818,11 +10237,111 @@ AB5B 0062
06E9 0061
06E9 0041
06E9 0062
+FD40 0021
+FD40 003F
+FD40 0061
+FD40 0041
+FD40 0062
+FD41 0021
+FD41 003F
+FD41 0061
+FD41 0041
+FD41 0062
+FD42 0021
+FD42 003F
+FD42 0061
+FD42 0041
+FD42 0062
+FD43 0021
+FD43 003F
+FD43 0061
+FD43 0041
+FD43 0062
+FD44 0021
+FD44 003F
+FD44 0061
+FD44 0041
+FD44 0062
+FD45 0021
+FD45 003F
+FD45 0061
+FD45 0041
+FD45 0062
+FD46 0021
+FD46 003F
+FD46 0061
+FD46 0041
+FD46 0062
+FD47 0021
+FD47 003F
+FD47 0061
+FD47 0041
+FD47 0062
+FD48 0021
+FD48 003F
+FD48 0061
+FD48 0041
+FD48 0062
+FD49 0021
+FD49 003F
+FD49 0061
+FD49 0041
+FD49 0062
+FD4A 0021
+FD4A 003F
+FD4A 0061
+FD4A 0041
+FD4A 0062
+FD4B 0021
+FD4B 003F
+FD4B 0061
+FD4B 0041
+FD4B 0062
+FD4C 0021
+FD4C 003F
+FD4C 0061
+FD4C 0041
+FD4C 0062
+FD4D 0021
+FD4D 003F
+FD4D 0061
+FD4D 0041
+FD4D 0062
+FD4E 0021
+FD4E 003F
+FD4E 0061
+FD4E 0041
+FD4E 0062
+FD4F 0021
+FD4F 003F
+FD4F 0061
+FD4F 0041
+FD4F 0062
+FDCF 0021
+FDCF 003F
+FDCF 0061
+FDCF 0041
+FDCF 0062
FDFD 0021
FDFD 003F
FDFD 0061
FDFD 0041
FDFD 0062
+FDFE 0021
+FDFE 003F
+FDFE 0061
+FDFE 0041
+FDFE 0062
+FDFF 0021
+FDFF 003F
+FDFF 0061
+FDFF 0041
+FDFF 0062
+0888 0021
+0888 003F
+0888 0061
+0888 0041
+0888 0062
FBB2 0021
FBB2 003F
FBB2 0061
@@ -9903,6 +10422,11 @@ FBC1 003F
FBC1 0061
FBC1 0041
FBC1 0062
+FBC2 0021
+FBC2 003F
+FBC2 0061
+FBC2 0041
+FBC2 0062
07F6 0021
07F6 003F
07F6 0061
@@ -25628,6 +26152,586 @@ A4C6 0062
1E14F 0061
1E14F 0041
1E14F 0062
+1CF50 0021
+1CF50 003F
+1CF50 0061
+1CF50 0041
+1CF50 0062
+1CF51 0021
+1CF51 003F
+1CF51 0061
+1CF51 0041
+1CF51 0062
+1CF52 0021
+1CF52 003F
+1CF52 0061
+1CF52 0041
+1CF52 0062
+1CF53 0021
+1CF53 003F
+1CF53 0061
+1CF53 0041
+1CF53 0062
+1CF54 0021
+1CF54 003F
+1CF54 0061
+1CF54 0041
+1CF54 0062
+1CF55 0021
+1CF55 003F
+1CF55 0061
+1CF55 0041
+1CF55 0062
+1CF56 0021
+1CF56 003F
+1CF56 0061
+1CF56 0041
+1CF56 0062
+1CF57 0021
+1CF57 003F
+1CF57 0061
+1CF57 0041
+1CF57 0062
+1CF58 0021
+1CF58 003F
+1CF58 0061
+1CF58 0041
+1CF58 0062
+1CF59 0021
+1CF59 003F
+1CF59 0061
+1CF59 0041
+1CF59 0062
+1CF5A 0021
+1CF5A 003F
+1CF5A 0061
+1CF5A 0041
+1CF5A 0062
+1CF5B 0021
+1CF5B 003F
+1CF5B 0061
+1CF5B 0041
+1CF5B 0062
+1CF5C 0021
+1CF5C 003F
+1CF5C 0061
+1CF5C 0041
+1CF5C 0062
+1CF5D 0021
+1CF5D 003F
+1CF5D 0061
+1CF5D 0041
+1CF5D 0062
+1CF5E 0021
+1CF5E 003F
+1CF5E 0061
+1CF5E 0041
+1CF5E 0062
+1CF5F 0021
+1CF5F 003F
+1CF5F 0061
+1CF5F 0041
+1CF5F 0062
+1CF60 0021
+1CF60 003F
+1CF60 0061
+1CF60 0041
+1CF60 0062
+1CF61 0021
+1CF61 003F
+1CF61 0061
+1CF61 0041
+1CF61 0062
+1CF62 0021
+1CF62 003F
+1CF62 0061
+1CF62 0041
+1CF62 0062
+1CF63 0021
+1CF63 003F
+1CF63 0061
+1CF63 0041
+1CF63 0062
+1CF64 0021
+1CF64 003F
+1CF64 0061
+1CF64 0041
+1CF64 0062
+1CF65 0021
+1CF65 003F
+1CF65 0061
+1CF65 0041
+1CF65 0062
+1CF66 0021
+1CF66 003F
+1CF66 0061
+1CF66 0041
+1CF66 0062
+1CF67 0021
+1CF67 003F
+1CF67 0061
+1CF67 0041
+1CF67 0062
+1CF68 0021
+1CF68 003F
+1CF68 0061
+1CF68 0041
+1CF68 0062
+1CF69 0021
+1CF69 003F
+1CF69 0061
+1CF69 0041
+1CF69 0062
+1CF6A 0021
+1CF6A 003F
+1CF6A 0061
+1CF6A 0041
+1CF6A 0062
+1CF6B 0021
+1CF6B 003F
+1CF6B 0061
+1CF6B 0041
+1CF6B 0062
+1CF6C 0021
+1CF6C 003F
+1CF6C 0061
+1CF6C 0041
+1CF6C 0062
+1CF6D 0021
+1CF6D 003F
+1CF6D 0061
+1CF6D 0041
+1CF6D 0062
+1CF6E 0021
+1CF6E 003F
+1CF6E 0061
+1CF6E 0041
+1CF6E 0062
+1CF6F 0021
+1CF6F 003F
+1CF6F 0061
+1CF6F 0041
+1CF6F 0062
+1CF70 0021
+1CF70 003F
+1CF70 0061
+1CF70 0041
+1CF70 0062
+1CF71 0021
+1CF71 003F
+1CF71 0061
+1CF71 0041
+1CF71 0062
+1CF72 0021
+1CF72 003F
+1CF72 0061
+1CF72 0041
+1CF72 0062
+1CF73 0021
+1CF73 003F
+1CF73 0061
+1CF73 0041
+1CF73 0062
+1CF74 0021
+1CF74 003F
+1CF74 0061
+1CF74 0041
+1CF74 0062
+1CF75 0021
+1CF75 003F
+1CF75 0061
+1CF75 0041
+1CF75 0062
+1CF76 0021
+1CF76 003F
+1CF76 0061
+1CF76 0041
+1CF76 0062
+1CF77 0021
+1CF77 003F
+1CF77 0061
+1CF77 0041
+1CF77 0062
+1CF78 0021
+1CF78 003F
+1CF78 0061
+1CF78 0041
+1CF78 0062
+1CF79 0021
+1CF79 003F
+1CF79 0061
+1CF79 0041
+1CF79 0062
+1CF7A 0021
+1CF7A 003F
+1CF7A 0061
+1CF7A 0041
+1CF7A 0062
+1CF7B 0021
+1CF7B 003F
+1CF7B 0061
+1CF7B 0041
+1CF7B 0062
+1CF7C 0021
+1CF7C 003F
+1CF7C 0061
+1CF7C 0041
+1CF7C 0062
+1CF7D 0021
+1CF7D 003F
+1CF7D 0061
+1CF7D 0041
+1CF7D 0062
+1CF7E 0021
+1CF7E 003F
+1CF7E 0061
+1CF7E 0041
+1CF7E 0062
+1CF7F 0021
+1CF7F 003F
+1CF7F 0061
+1CF7F 0041
+1CF7F 0062
+1CF80 0021
+1CF80 003F
+1CF80 0061
+1CF80 0041
+1CF80 0062
+1CF81 0021
+1CF81 003F
+1CF81 0061
+1CF81 0041
+1CF81 0062
+1CF82 0021
+1CF82 003F
+1CF82 0061
+1CF82 0041
+1CF82 0062
+1CF83 0021
+1CF83 003F
+1CF83 0061
+1CF83 0041
+1CF83 0062
+1CF84 0021
+1CF84 003F
+1CF84 0061
+1CF84 0041
+1CF84 0062
+1CF85 0021
+1CF85 003F
+1CF85 0061
+1CF85 0041
+1CF85 0062
+1CF86 0021
+1CF86 003F
+1CF86 0061
+1CF86 0041
+1CF86 0062
+1CF87 0021
+1CF87 003F
+1CF87 0061
+1CF87 0041
+1CF87 0062
+1CF88 0021
+1CF88 003F
+1CF88 0061
+1CF88 0041
+1CF88 0062
+1CF89 0021
+1CF89 003F
+1CF89 0061
+1CF89 0041
+1CF89 0062
+1CF8A 0021
+1CF8A 003F
+1CF8A 0061
+1CF8A 0041
+1CF8A 0062
+1CF8B 0021
+1CF8B 003F
+1CF8B 0061
+1CF8B 0041
+1CF8B 0062
+1CF8C 0021
+1CF8C 003F
+1CF8C 0061
+1CF8C 0041
+1CF8C 0062
+1CF8D 0021
+1CF8D 003F
+1CF8D 0061
+1CF8D 0041
+1CF8D 0062
+1CF8E 0021
+1CF8E 003F
+1CF8E 0061
+1CF8E 0041
+1CF8E 0062
+1CF8F 0021
+1CF8F 003F
+1CF8F 0061
+1CF8F 0041
+1CF8F 0062
+1CF90 0021
+1CF90 003F
+1CF90 0061
+1CF90 0041
+1CF90 0062
+1CF91 0021
+1CF91 003F
+1CF91 0061
+1CF91 0041
+1CF91 0062
+1CF92 0021
+1CF92 003F
+1CF92 0061
+1CF92 0041
+1CF92 0062
+1CF93 0021
+1CF93 003F
+1CF93 0061
+1CF93 0041
+1CF93 0062
+1CF94 0021
+1CF94 003F
+1CF94 0061
+1CF94 0041
+1CF94 0062
+1CF95 0021
+1CF95 003F
+1CF95 0061
+1CF95 0041
+1CF95 0062
+1CF96 0021
+1CF96 003F
+1CF96 0061
+1CF96 0041
+1CF96 0062
+1CF97 0021
+1CF97 003F
+1CF97 0061
+1CF97 0041
+1CF97 0062
+1CF98 0021
+1CF98 003F
+1CF98 0061
+1CF98 0041
+1CF98 0062
+1CF99 0021
+1CF99 003F
+1CF99 0061
+1CF99 0041
+1CF99 0062
+1CF9A 0021
+1CF9A 003F
+1CF9A 0061
+1CF9A 0041
+1CF9A 0062
+1CF9B 0021
+1CF9B 003F
+1CF9B 0061
+1CF9B 0041
+1CF9B 0062
+1CF9C 0021
+1CF9C 003F
+1CF9C 0061
+1CF9C 0041
+1CF9C 0062
+1CF9D 0021
+1CF9D 003F
+1CF9D 0061
+1CF9D 0041
+1CF9D 0062
+1CF9E 0021
+1CF9E 003F
+1CF9E 0061
+1CF9E 0041
+1CF9E 0062
+1CF9F 0021
+1CF9F 003F
+1CF9F 0061
+1CF9F 0041
+1CF9F 0062
+1CFA0 0021
+1CFA0 003F
+1CFA0 0061
+1CFA0 0041
+1CFA0 0062
+1CFA1 0021
+1CFA1 003F
+1CFA1 0061
+1CFA1 0041
+1CFA1 0062
+1CFA2 0021
+1CFA2 003F
+1CFA2 0061
+1CFA2 0041
+1CFA2 0062
+1CFA3 0021
+1CFA3 003F
+1CFA3 0061
+1CFA3 0041
+1CFA3 0062
+1CFA4 0021
+1CFA4 003F
+1CFA4 0061
+1CFA4 0041
+1CFA4 0062
+1CFA5 0021
+1CFA5 003F
+1CFA5 0061
+1CFA5 0041
+1CFA5 0062
+1CFA6 0021
+1CFA6 003F
+1CFA6 0061
+1CFA6 0041
+1CFA6 0062
+1CFA7 0021
+1CFA7 003F
+1CFA7 0061
+1CFA7 0041
+1CFA7 0062
+1CFA8 0021
+1CFA8 003F
+1CFA8 0061
+1CFA8 0041
+1CFA8 0062
+1CFA9 0021
+1CFA9 003F
+1CFA9 0061
+1CFA9 0041
+1CFA9 0062
+1CFAA 0021
+1CFAA 003F
+1CFAA 0061
+1CFAA 0041
+1CFAA 0062
+1CFAB 0021
+1CFAB 003F
+1CFAB 0061
+1CFAB 0041
+1CFAB 0062
+1CFAC 0021
+1CFAC 003F
+1CFAC 0061
+1CFAC 0041
+1CFAC 0062
+1CFAD 0021
+1CFAD 003F
+1CFAD 0061
+1CFAD 0041
+1CFAD 0062
+1CFAE 0021
+1CFAE 003F
+1CFAE 0061
+1CFAE 0041
+1CFAE 0062
+1CFAF 0021
+1CFAF 003F
+1CFAF 0061
+1CFAF 0041
+1CFAF 0062
+1CFB0 0021
+1CFB0 003F
+1CFB0 0061
+1CFB0 0041
+1CFB0 0062
+1CFB1 0021
+1CFB1 003F
+1CFB1 0061
+1CFB1 0041
+1CFB1 0062
+1CFB2 0021
+1CFB2 003F
+1CFB2 0061
+1CFB2 0041
+1CFB2 0062
+1CFB3 0021
+1CFB3 003F
+1CFB3 0061
+1CFB3 0041
+1CFB3 0062
+1CFB4 0021
+1CFB4 003F
+1CFB4 0061
+1CFB4 0041
+1CFB4 0062
+1CFB5 0021
+1CFB5 003F
+1CFB5 0061
+1CFB5 0041
+1CFB5 0062
+1CFB6 0021
+1CFB6 003F
+1CFB6 0061
+1CFB6 0041
+1CFB6 0062
+1CFB7 0021
+1CFB7 003F
+1CFB7 0061
+1CFB7 0041
+1CFB7 0062
+1CFB8 0021
+1CFB8 003F
+1CFB8 0061
+1CFB8 0041
+1CFB8 0062
+1CFB9 0021
+1CFB9 003F
+1CFB9 0061
+1CFB9 0041
+1CFB9 0062
+1CFBA 0021
+1CFBA 003F
+1CFBA 0061
+1CFBA 0041
+1CFBA 0062
+1CFBB 0021
+1CFBB 003F
+1CFBB 0061
+1CFBB 0041
+1CFBB 0062
+1CFBC 0021
+1CFBC 003F
+1CFBC 0061
+1CFBC 0041
+1CFBC 0062
+1CFBD 0021
+1CFBD 003F
+1CFBD 0061
+1CFBD 0041
+1CFBD 0062
+1CFBE 0021
+1CFBE 003F
+1CFBE 0061
+1CFBE 0041
+1CFBE 0062
+1CFBF 0021
+1CFBF 003F
+1CFBF 0061
+1CFBF 0041
+1CFBF 0062
+1CFC0 0021
+1CFC0 003F
+1CFC0 0061
+1CFC0 0041
+1CFC0 0062
+1CFC1 0021
+1CFC1 003F
+1CFC1 0061
+1CFC1 0041
+1CFC1 0062
+1CFC2 0021
+1CFC2 003F
+1CFC2 0061
+1CFC2 0041
+1CFC2 0062
+1CFC3 0021
+1CFC3 003F
+1CFC3 0061
+1CFC3 0041
+1CFC3 0062
1D000 0021
1D000 003F
1D000 0061
@@ -27886,6 +28990,16 @@ A4C6 0062
1D1E8 0061
1D1E8 0041
1D1E8 0062
+1D1E9 0021
+1D1E9 003F
+1D1E9 0061
+1D1E9 0041
+1D1E9 0062
+1D1EA 0021
+1D1EA 003F
+1D1EA 0061
+1D1EA 0041
+1D1EA 0062
1D200 0021
1D200 003F
1D200 0061
@@ -34361,6 +35475,11 @@ A4C6 0062
1F978 0061
1F978 0041
1F978 0062
+1F979 0021
+1F979 003F
+1F979 0061
+1F979 0041
+1F979 0062
1F97A 0021
1F97A 003F
1F97A 0061
@@ -34771,6 +35890,11 @@ A4C6 0062
1F9CB 0061
1F9CB 0041
1F9CB 0062
+1F9CC 0021
+1F9CC 003F
+1F9CC 0061
+1F9CC 0041
+1F9CC 0062
1F9CD 0021
1F9CD 003F
1F9CD 0061
@@ -35066,6 +36190,16 @@ A4C6 0062
1FA7A 0061
1FA7A 0041
1FA7A 0062
+1FA7B 0021
+1FA7B 003F
+1FA7B 0061
+1FA7B 0041
+1FA7B 0062
+1FA7C 0021
+1FA7C 003F
+1FA7C 0061
+1FA7C 0041
+1FA7C 0062
1FA80 0021
1FA80 003F
1FA80 0061
@@ -35226,6 +36360,26 @@ A4C6 0062
1FAA8 0061
1FAA8 0041
1FAA8 0062
+1FAA9 0021
+1FAA9 003F
+1FAA9 0061
+1FAA9 0041
+1FAA9 0062
+1FAAA 0021
+1FAAA 003F
+1FAAA 0061
+1FAAA 0041
+1FAAA 0062
+1FAAB 0021
+1FAAB 003F
+1FAAB 0061
+1FAAB 0041
+1FAAB 0062
+1FAAC 0021
+1FAAC 003F
+1FAAC 0061
+1FAAC 0041
+1FAAC 0062
1FAB0 0021
1FAB0 003F
1FAB0 0061
@@ -35261,6 +36415,26 @@ A4C6 0062
1FAB6 0061
1FAB6 0041
1FAB6 0062
+1FAB7 0021
+1FAB7 003F
+1FAB7 0061
+1FAB7 0041
+1FAB7 0062
+1FAB8 0021
+1FAB8 003F
+1FAB8 0061
+1FAB8 0041
+1FAB8 0062
+1FAB9 0021
+1FAB9 003F
+1FAB9 0061
+1FAB9 0041
+1FAB9 0062
+1FABA 0021
+1FABA 003F
+1FABA 0061
+1FABA 0041
+1FABA 0062
1FAC0 0021
1FAC0 003F
1FAC0 0061
@@ -35276,6 +36450,21 @@ A4C6 0062
1FAC2 0061
1FAC2 0041
1FAC2 0062
+1FAC3 0021
+1FAC3 003F
+1FAC3 0061
+1FAC3 0041
+1FAC3 0062
+1FAC4 0021
+1FAC4 003F
+1FAC4 0061
+1FAC4 0041
+1FAC4 0062
+1FAC5 0021
+1FAC5 003F
+1FAC5 0061
+1FAC5 0041
+1FAC5 0062
1FAD0 0021
1FAD0 003F
1FAD0 0061
@@ -35311,6 +36500,96 @@ A4C6 0062
1FAD6 0061
1FAD6 0041
1FAD6 0062
+1FAD7 0021
+1FAD7 003F
+1FAD7 0061
+1FAD7 0041
+1FAD7 0062
+1FAD8 0021
+1FAD8 003F
+1FAD8 0061
+1FAD8 0041
+1FAD8 0062
+1FAD9 0021
+1FAD9 003F
+1FAD9 0061
+1FAD9 0041
+1FAD9 0062
+1FAE0 0021
+1FAE0 003F
+1FAE0 0061
+1FAE0 0041
+1FAE0 0062
+1FAE1 0021
+1FAE1 003F
+1FAE1 0061
+1FAE1 0041
+1FAE1 0062
+1FAE2 0021
+1FAE2 003F
+1FAE2 0061
+1FAE2 0041
+1FAE2 0062
+1FAE3 0021
+1FAE3 003F
+1FAE3 0061
+1FAE3 0041
+1FAE3 0062
+1FAE4 0021
+1FAE4 003F
+1FAE4 0061
+1FAE4 0041
+1FAE4 0062
+1FAE5 0021
+1FAE5 003F
+1FAE5 0061
+1FAE5 0041
+1FAE5 0062
+1FAE6 0021
+1FAE6 003F
+1FAE6 0061
+1FAE6 0041
+1FAE6 0062
+1FAE7 0021
+1FAE7 003F
+1FAE7 0061
+1FAE7 0041
+1FAE7 0062
+1FAF0 0021
+1FAF0 003F
+1FAF0 0061
+1FAF0 0041
+1FAF0 0062
+1FAF1 0021
+1FAF1 003F
+1FAF1 0061
+1FAF1 0041
+1FAF1 0062
+1FAF2 0021
+1FAF2 003F
+1FAF2 0061
+1FAF2 0041
+1FAF2 0062
+1FAF3 0021
+1FAF3 003F
+1FAF3 0061
+1FAF3 0041
+1FAF3 0062
+1FAF4 0021
+1FAF4 003F
+1FAF4 0061
+1FAF4 0041
+1FAF4 0062
+1FAF5 0021
+1FAF5 003F
+1FAF5 0061
+1FAF5 0041
+1FAF5 0062
+1FAF6 0021
+1FAF6 003F
+1FAF6 0061
+1FAF6 0041
+1FAF6 0062
1F600 0021
1F600 003F
1F600 0061
@@ -36391,6 +37670,21 @@ A4C6 0062
1F6D7 0061
1F6D7 0041
1F6D7 0062
+1F6DD 0021
+1F6DD 003F
+1F6DD 0061
+1F6DD 0041
+1F6DD 0062
+1F6DE 0021
+1F6DE 003F
+1F6DE 0061
+1F6DE 0041
+1F6DE 0062
+1F6DF 0021
+1F6DF 003F
+1F6DF 0061
+1F6DF 0041
+1F6DF 0062
1F6E0 0021
1F6E0 003F
1F6E0 0061
@@ -37606,6 +38900,11 @@ A4C6 0062
1F7EB 0061
1F7EB 0041
1F7EB 0062
+1F7F0 0021
+1F7F0 003F
+1F7F0 0061
+1F7F0 0041
+1F7F0 0062
1F800 0021
1F800 003F
1F800 0061
@@ -41357,15 +42656,25 @@ FFFC 0061
FFFC 0041
FFFC 0062
02D0 0021
+10781 0021
02D0 003F
+10781 003F
02D0 0061
02D0 0041
+10781 0061
+10781 0041
02D0 0062
+10781 0062
02D1 0021
+10782 0021
02D1 003F
+10782 003F
02D1 0061
02D1 0041
+10782 0061
+10782 0041
02D1 0062
+10782 0062
0971 0021
0971 003F
0971 0061
@@ -41827,6 +43136,11 @@ FFE6 0062
20BF 0061
20BF 0041
20BF 0062
+20C0 0021
+20C0 003F
+20C0 0061
+20C0 0041
+20C0 0062
20A8 0021
20A8 003F
20A8 0061
@@ -44375,6 +45689,7 @@ ABF0 0021
11D50 0021
11DA0 0021
16A60 0021
+16AC0 0021
16B50 0021
16E80 0021
1D2E0 0021
@@ -44453,6 +45768,7 @@ ABF0 003F
11D50 003F
11DA0 003F
16A60 003F
+16AC0 003F
16B50 003F
16E80 003F
1D2E0 003F
@@ -44541,6 +45857,7 @@ ABF0 0061
11D50 0061
11DA0 0061
16A60 0061
+16AC0 0061
16B50 0061
16E80 0061
1D2E0 0061
@@ -44605,6 +45922,7 @@ ABF0 0041
11D50 0041
11DA0 0041
16A60 0041
+16AC0 0041
16B50 0041
16E80 0041
1D2E0 0041
@@ -44697,6 +46015,7 @@ ABF0 0062
11D50 0062
11DA0 0062
16A60 0062
+16AC0 0062
16B50 0062
16E80 0062
1D2E0 0062
@@ -44822,6 +46141,7 @@ ABF1 0021
1244F 0021
12458 0021
16A61 0021
+16AC1 0021
16B51 0021
16E81 0021
1D2E1 0021
@@ -44947,6 +46267,7 @@ ABF1 003F
1244F 003F
12458 003F
16A61 003F
+16AC1 003F
16B51 003F
16E81 003F
1D2E1 003F
@@ -45417,6 +46738,7 @@ ABF1 0061
1244F 0061
12458 0061
16A61 0061
+16AC1 0061
16B51 0061
16E81 0061
1D2E1 0061
@@ -45525,6 +46847,7 @@ ABF1 0041
1244F 0041
12458 0041
16A61 0041
+16AC1 0041
16B51 0041
16E81 0041
1D2E1 0041
@@ -45667,6 +46990,7 @@ ABF1 0062
1244F 0062
12458 0062
16A61 0062
+16AC1 0062
16B51 0062
16E81 0062
1D2E1 0062
@@ -45808,6 +47132,7 @@ ABF2 0021
12456 0021
12459 0021
16A62 0021
+16AC2 0021
16B52 0021
16E82 0021
1D2E2 0021
@@ -45929,6 +47254,7 @@ ABF2 003F
12456 003F
12459 003F
16A62 003F
+16AC2 003F
16B52 003F
16E82 003F
1D2E2 003F
@@ -46210,6 +47536,7 @@ ABF2 0061
12456 0061
12459 0061
16A62 0061
+16AC2 0061
16B52 0061
16E82 0061
1D2E2 0061
@@ -46313,6 +47640,7 @@ ABF2 0041
12456 0041
12459 0041
16A62 0041
+16AC2 0041
16B52 0041
16E82 0041
1D2E2 0041
@@ -46452,6 +47780,7 @@ ABF2 0062
12456 0062
12459 0062
16A62 0062
+16AC2 0062
16B52 0062
16E82 0062
1D2E2 0062
@@ -46603,6 +47932,7 @@ ABF3 0021
12451 0021
12457 0021
16A63 0021
+16AC3 0021
16B53 0021
16E83 0021
1D2E3 0021
@@ -46723,6 +48053,7 @@ ABF3 003F
12451 003F
12457 003F
16A63 003F
+16AC3 003F
16B53 003F
16E83 003F
1D2E3 003F
@@ -46928,6 +48259,7 @@ ABF3 0061
12451 0061
12457 0061
16A63 0061
+16AC3 0061
16B53 0061
16E83 0061
1D2E3 0061
@@ -47031,6 +48363,7 @@ ABF3 0041
12451 0041
12457 0041
16A63 0041
+16AC3 0041
16B53 0041
16E83 0041
1D2E3 0041
@@ -47168,6 +48501,7 @@ ABF3 0062
12451 0062
12457 0062
16A63 0062
+16AC3 0062
16B53 0062
16E83 0062
1D2E3 0062
@@ -47311,6 +48645,7 @@ ABF4 0021
12453 0021
12469 0021
16A64 0021
+16AC4 0021
16B54 0021
16E84 0021
1D2E4 0021
@@ -47428,6 +48763,7 @@ ABF4 003F
12453 003F
12469 003F
16A64 003F
+16AC4 003F
16B54 003F
16E84 003F
1D2E4 003F
@@ -47610,6 +48946,7 @@ ABF4 0061
12453 0061
12469 0061
16A64 0061
+16AC4 0061
16B54 0061
16E84 0061
1D2E4 0061
@@ -47711,6 +49048,7 @@ ABF4 0041
12453 0041
12469 0041
16A64 0041
+16AC4 0041
16B54 0041
16E84 0041
1D2E4 0041
@@ -47844,6 +49182,7 @@ ABF4 0062
12453 0062
12469 0062
16A64 0062
+16AC4 0062
16B54 0062
16E84 0062
1D2E4 0062
@@ -47985,6 +49324,7 @@ ABF5 0021
12455 0021
1246A 0021
16A65 0021
+16AC5 0021
16B55 0021
16E85 0021
1D2E5 0021
@@ -48102,6 +49442,7 @@ ABF5 003F
12455 003F
1246A 003F
16A65 003F
+16AC5 003F
16B55 003F
16E85 003F
1D2E5 003F
@@ -48249,6 +49590,7 @@ ABF5 0061
12455 0061
1246A 0061
16A65 0061
+16AC5 0061
16B55 0061
16E85 0061
1D2E5 0061
@@ -48350,6 +49692,7 @@ ABF5 0041
12455 0041
1246A 0041
16A65 0041
+16AC5 0041
16B55 0041
16E85 0041
1D2E5 0041
@@ -48483,6 +49826,7 @@ ABF5 0062
12455 0062
1246A 0062
16A65 0062
+16AC5 0062
16B55 0062
16E85 0062
1D2E5 0062
@@ -48605,6 +49949,7 @@ ABF6 0021
1244E 0021
1246B 0021
16A66 0021
+16AC6 0021
16B56 0021
16E86 0021
1D2E6 0021
@@ -48705,6 +50050,7 @@ ABF6 003F
1244E 003F
1246B 003F
16A66 003F
+16AC6 003F
16B56 003F
16E86 003F
1D2E6 003F
@@ -48820,6 +50166,7 @@ ABF6 0061
1244E 0061
1246B 0061
16A66 0061
+16AC6 0061
16B56 0061
16E86 0061
1D2E6 0061
@@ -48904,6 +50251,7 @@ ABF6 0041
1244E 0041
1246B 0041
16A66 0041
+16AC6 0041
16B56 0041
16E86 0041
1D2E6 0041
@@ -49020,6 +50368,7 @@ ABF6 0062
1244E 0062
1246B 0062
16A66 0062
+16AC6 0062
16B56 0062
16E86 0062
1D2E6 0062
@@ -49140,6 +50489,7 @@ ABF7 0021
12443 0021
1246C 0021
16A67 0021
+16AC7 0021
16B57 0021
16E87 0021
1D2E7 0021
@@ -49240,6 +50590,7 @@ ABF7 003F
12443 003F
1246C 003F
16A67 003F
+16AC7 003F
16B57 003F
16E87 003F
1D2E7 003F
@@ -49360,6 +50711,7 @@ ABF7 0061
12443 0061
1246C 0061
16A67 0061
+16AC7 0061
16B57 0061
16E87 0061
1D2E7 0061
@@ -49444,6 +50796,7 @@ ABF7 0041
12443 0041
1246C 0041
16A67 0041
+16AC7 0041
16B57 0041
16E87 0041
1D2E7 0041
@@ -49560,6 +50913,7 @@ ABF7 0062
12443 0062
1246C 0062
16A67 0062
+16AC7 0062
16B57 0062
16E87 0062
1D2E7 0062
@@ -49679,6 +51033,7 @@ ABF8 0021
12445 0021
1246D 0021
16A68 0021
+16AC8 0021
16B58 0021
16E88 0021
1D2E8 0021
@@ -49778,6 +51133,7 @@ ABF8 003F
12445 003F
1246D 003F
16A68 003F
+16AC8 003F
16B58 003F
16E88 003F
1D2E8 003F
@@ -49887,6 +51243,7 @@ ABF8 0061
12445 0061
1246D 0061
16A68 0061
+16AC8 0061
16B58 0061
16E88 0061
1D2E8 0061
@@ -49970,6 +51327,7 @@ ABF8 0041
12445 0041
1246D 0041
16A68 0041
+16AC8 0041
16B58 0041
16E88 0041
1D2E8 0041
@@ -50085,6 +51443,7 @@ ABF8 0062
12445 0062
1246D 0062
16A68 0062
+16AC8 0062
16B58 0062
16E88 0062
1D2E8 0062
@@ -50211,6 +51570,7 @@ ABF9 0021
12449 0021
1246E 0021
16A69 0021
+16AC9 0021
16B59 0021
16E89 0021
1D2E9 0021
@@ -50312,6 +51672,7 @@ ABF9 003F
12449 003F
1246E 003F
16A69 003F
+16AC9 003F
16B59 003F
16E89 003F
1D2E9 003F
@@ -50418,6 +51779,7 @@ ABF9 0061
12449 0061
1246E 0061
16A69 0061
+16AC9 0061
16B59 0061
16E89 0061
1D2E9 0061
@@ -50503,6 +51865,7 @@ ABF9 0041
12449 0041
1246E 0041
16A69 0041
+16AC9 0041
16B59 0041
16E89 0041
1D2E9 0041
@@ -50620,6 +51983,7 @@ ABF9 0062
12449 0062
1246E 0062
16A69 0062
+16AC9 0062
16B59 0062
16E89 0062
1D2E9 0062
@@ -50807,6 +52171,23 @@ FF19 0062
0749 0061
074A 0061
07FA 0061
+0890 0061
+0891 0061
+0898 0061
+0899 0061
+089A 0061
+089B 0061
+089C 0061
+089D 0061
+08CA 0061
+08CB 0061
+08CC 0061
+08CD 0061
+08CE 0061
+08CF 0061
+08D0 0061
+08D1 0061
+08D2 0061
08D3 0061
08D4 0061
08D5 0061
@@ -50851,6 +52232,7 @@ FF19 0062
180C 0061
180D 0061
180E 0061
+180F 0061
1A7F 0061
1B6B 0061
1B6C 0061
@@ -50998,6 +52380,75 @@ FFFB 0061
1BCA1 0061
1BCA2 0061
1BCA3 0061
+1CF00 0061
+1CF01 0061
+1CF02 0061
+1CF03 0061
+1CF04 0061
+1CF05 0061
+1CF06 0061
+1CF07 0061
+1CF08 0061
+1CF09 0061
+1CF0A 0061
+1CF0B 0061
+1CF0C 0061
+1CF0D 0061
+1CF0E 0061
+1CF0F 0061
+1CF10 0061
+1CF11 0061
+1CF12 0061
+1CF13 0061
+1CF14 0061
+1CF15 0061
+1CF16 0061
+1CF17 0061
+1CF18 0061
+1CF19 0061
+1CF1A 0061
+1CF1B 0061
+1CF1C 0061
+1CF1D 0061
+1CF1E 0061
+1CF1F 0061
+1CF20 0061
+1CF21 0061
+1CF22 0061
+1CF23 0061
+1CF24 0061
+1CF25 0061
+1CF26 0061
+1CF27 0061
+1CF28 0061
+1CF29 0061
+1CF2A 0061
+1CF2B 0061
+1CF2C 0061
+1CF2D 0061
+1CF30 0061
+1CF31 0061
+1CF32 0061
+1CF33 0061
+1CF34 0061
+1CF35 0061
+1CF36 0061
+1CF37 0061
+1CF38 0061
+1CF39 0061
+1CF3A 0061
+1CF3B 0061
+1CF3C 0061
+1CF3D 0061
+1CF3E 0061
+1CF3F 0061
+1CF40 0061
+1CF41 0061
+1CF42 0061
+1CF43 0061
+1CF44 0061
+1CF45 0061
+1CF46 0061
1D165 0061
1D166 0061
1D167 0061
@@ -51655,6 +53106,23 @@ E01EF 0061
0749 0041
074A 0041
07FA 0041
+0890 0041
+0891 0041
+0898 0041
+0899 0041
+089A 0041
+089B 0041
+089C 0041
+089D 0041
+08CA 0041
+08CB 0041
+08CC 0041
+08CD 0041
+08CE 0041
+08CF 0041
+08D0 0041
+08D1 0041
+08D2 0041
08D3 0041
08D4 0041
08D5 0041
@@ -51699,6 +53167,7 @@ E01EF 0061
180C 0041
180D 0041
180E 0041
+180F 0041
1A7F 0041
1B6B 0041
1B6C 0041
@@ -51846,6 +53315,75 @@ FFFB 0041
1BCA1 0041
1BCA2 0041
1BCA3 0041
+1CF00 0041
+1CF01 0041
+1CF02 0041
+1CF03 0041
+1CF04 0041
+1CF05 0041
+1CF06 0041
+1CF07 0041
+1CF08 0041
+1CF09 0041
+1CF0A 0041
+1CF0B 0041
+1CF0C 0041
+1CF0D 0041
+1CF0E 0041
+1CF0F 0041
+1CF10 0041
+1CF11 0041
+1CF12 0041
+1CF13 0041
+1CF14 0041
+1CF15 0041
+1CF16 0041
+1CF17 0041
+1CF18 0041
+1CF19 0041
+1CF1A 0041
+1CF1B 0041
+1CF1C 0041
+1CF1D 0041
+1CF1E 0041
+1CF1F 0041
+1CF20 0041
+1CF21 0041
+1CF22 0041
+1CF23 0041
+1CF24 0041
+1CF25 0041
+1CF26 0041
+1CF27 0041
+1CF28 0041
+1CF29 0041
+1CF2A 0041
+1CF2B 0041
+1CF2C 0041
+1CF2D 0041
+1CF30 0041
+1CF31 0041
+1CF32 0041
+1CF33 0041
+1CF34 0041
+1CF35 0041
+1CF36 0041
+1CF37 0041
+1CF38 0041
+1CF39 0041
+1CF3A 0041
+1CF3B 0041
+1CF3C 0041
+1CF3D 0041
+1CF3E 0041
+1CF3F 0041
+1CF40 0041
+1CF41 0041
+1CF42 0041
+1CF43 0041
+1CF44 0041
+1CF45 0041
+1CF46 0041
1D165 0041
1D166 0041
1D167 0041
@@ -52658,6 +54196,14 @@ E01EF 0041
1AB4 0061
1ABB 0061
1ABC 0061
+1AC1 0061
+1AC2 0061
+1AC5 0061
+1AC6 0061
+1AC7 0061
+1AC8 0061
+1AC9 0061
+1ACB 0061
1DC0 0061
1DC1 0061
1DC3 0061
@@ -52691,7 +54237,10 @@ A67D 0061
10F49 0061
10F4A 0061
10F4C 0061
+10F82 0061
+10F84 0061
1BC9D 0061
+1E2AE 0061
030D 0041
030E 0041
0312 0041
@@ -52731,6 +54280,14 @@ A67D 0061
1AB4 0041
1ABB 0041
1ABC 0041
+1AC1 0041
+1AC2 0041
+1AC5 0041
+1AC6 0041
+1AC7 0041
+1AC8 0041
+1AC9 0041
+1ACB 0041
1DC0 0041
1DC1 0041
1DC3 0041
@@ -52764,7 +54321,10 @@ A67D 0041
10F49 0041
10F4A 0041
10F4C 0041
+10F82 0041
+10F84 0041
1BC9D 0041
+1E2AE 0041
0316 0061
0317 0061
0318 0061
@@ -52810,10 +54370,14 @@ A67D 0041
1AB9 0061
1ABA 0061
1ABD 0061
+1AC3 0061
+1AC4 0061
+1ACA 0061
1DC2 0061
1DCF 0061
1DD0 0061
1DF9 0061
+1DFA 0061
1DFC 0061
1DFD 0061
1DFF 0061
@@ -52831,6 +54395,8 @@ FE27 0061
10F4E 0061
10F4F 0061
10F50 0061
+10F83 0061
+10F85 0061
0316 0041
0317 0041
0318 0041
@@ -52876,10 +54442,14 @@ FE27 0061
1AB9 0041
1ABA 0041
1ABD 0041
+1AC3 0041
+1AC4 0041
+1ACA 0041
1DC2 0041
1DCF 0041
1DD0 0041
1DF9 0041
+1DFA 0041
1DFC 0041
1DFD 0041
1DFF 0041
@@ -52897,6 +54467,8 @@ FE27 0041
10F4E 0041
10F4F 0041
10F50 0041
+10F83 0041
+10F85 0041
0336 0061
0337 0061
20D8 0061
@@ -53176,9 +54748,13 @@ FE7F 0041
FE7E 0061
FE7E 0041
0653 0061
+089E 0061
+089F 0061
0AFC 0061
10EAC 0061
0653 0041
+089E 0041
+089F 0041
0AFC 0041
10EAC 0041
0654 0061
@@ -53321,6 +54897,7 @@ A6F1 0041
0AFE 0061
0AFF 0061
0B3C 0061
+0C3C 0061
0CBC 0061
1B34 0061
1BE6 0061
@@ -53349,6 +54926,7 @@ A9B3 0061
0AFE 0041
0AFF 0041
0B3C 0041
+0C3C 0041
0CBC 0041
1B34 0041
1BE6 0041
@@ -53864,7 +55442,9 @@ A79A 0021
01E1 0021
01E0 0021
0105 0021
+A7C1 0021
0104 0021
+A7C0 0021
0101 0021
0100 0021
1EA3 0021
@@ -53967,7 +55547,9 @@ A79A 003F
01E1 003F
01E0 003F
0105 003F
+A7C1 003F
0104 003F
+A7C0 003F
0101 003F
0100 003F
1EA3 003F
@@ -54180,8 +55762,12 @@ A79A 0041
01E0 0041
0105 0061
0105 0041
+A7C1 0061
+A7C1 0041
0104 0061
0104 0041
+A7C0 0061
+A7C0 0041
0101 0061
0101 0041
0100 0061
@@ -54218,14 +55804,19 @@ A79A 0041
1DD3 0041
A733 0021
A732 0021
+10780 0021
A733 003F
A732 003F
+10780 003F
A733 0061
A733 0041
A732 0061
A732 0041
+10780 0061
+10780 0041
A733 0062
A732 0062
+10780 0062
0061 0062
FF41 0062
0363 0062
@@ -54311,7 +55902,9 @@ A79A 0062
01E1 0062
01E0 0062
0105 0062
+A7C1 0062
0104 0062
+A7C0 0062
0101 0062
0100 0062
1EA3 0062
@@ -54354,6 +55947,7 @@ A79A 0062
1DD4 0021
00C6 0021
1D2D 0021
+10783 0021
01FD 0021
01FC 0021
01E3 0021
@@ -54362,6 +55956,7 @@ A79A 0062
1DD4 003F
00C6 003F
1D2D 003F
+10783 003F
01FD 003F
01FC 003F
01E3 003F
@@ -54373,7 +55968,9 @@ A79A 0062
00C6 0061
00C6 0041
1D2D 0061
+10783 0061
1D2D 0041
+10783 0041
01FD 0061
01FD 0041
01FC 0061
@@ -54386,6 +55983,7 @@ A79A 0062
1DD4 0062
00C6 0062
1D2D 0062
+10783 0062
01FD 0062
01FC 0062
01E3 0062
@@ -54726,6 +56324,23 @@ AB64 0062
0749 0062
074A 0062
07FA 0062
+0890 0062
+0891 0062
+0898 0062
+0899 0062
+089A 0062
+089B 0062
+089C 0062
+089D 0062
+08CA 0062
+08CB 0062
+08CC 0062
+08CD 0062
+08CE 0062
+08CF 0062
+08D0 0062
+08D1 0062
+08D2 0062
08D3 0062
08D4 0062
08D5 0062
@@ -54770,6 +56385,7 @@ AB64 0062
180C 0062
180D 0062
180E 0062
+180F 0062
1A7F 0062
1B6B 0062
1B6C 0062
@@ -54917,6 +56533,75 @@ FFFB 0062
1BCA1 0062
1BCA2 0062
1BCA3 0062
+1CF00 0062
+1CF01 0062
+1CF02 0062
+1CF03 0062
+1CF04 0062
+1CF05 0062
+1CF06 0062
+1CF07 0062
+1CF08 0062
+1CF09 0062
+1CF0A 0062
+1CF0B 0062
+1CF0C 0062
+1CF0D 0062
+1CF0E 0062
+1CF0F 0062
+1CF10 0062
+1CF11 0062
+1CF12 0062
+1CF13 0062
+1CF14 0062
+1CF15 0062
+1CF16 0062
+1CF17 0062
+1CF18 0062
+1CF19 0062
+1CF1A 0062
+1CF1B 0062
+1CF1C 0062
+1CF1D 0062
+1CF1E 0062
+1CF1F 0062
+1CF20 0062
+1CF21 0062
+1CF22 0062
+1CF23 0062
+1CF24 0062
+1CF25 0062
+1CF26 0062
+1CF27 0062
+1CF28 0062
+1CF29 0062
+1CF2A 0062
+1CF2B 0062
+1CF2C 0062
+1CF2D 0062
+1CF30 0062
+1CF31 0062
+1CF32 0062
+1CF33 0062
+1CF34 0062
+1CF35 0062
+1CF36 0062
+1CF37 0062
+1CF38 0062
+1CF39 0062
+1CF3A 0062
+1CF3B 0062
+1CF3C 0062
+1CF3D 0062
+1CF3E 0062
+1CF3F 0062
+1CF40 0062
+1CF41 0062
+1CF42 0062
+1CF43 0062
+1CF44 0062
+1CF45 0062
+1CF46 0062
1D165 0062
1D166 0062
1D167 0062
@@ -55514,6 +57199,14 @@ E01EF 0062
1AB4 0062
1ABB 0062
1ABC 0062
+1AC1 0062
+1AC2 0062
+1AC5 0062
+1AC6 0062
+1AC7 0062
+1AC8 0062
+1AC9 0062
+1ACB 0062
1DC0 0062
1DC1 0062
1DC3 0062
@@ -55547,7 +57240,10 @@ A67D 0062
10F49 0062
10F4A 0062
10F4C 0062
+10F82 0062
+10F84 0062
1BC9D 0062
+1E2AE 0062
0316 0062
0317 0062
0318 0062
@@ -55593,10 +57289,14 @@ A67D 0062
1AB9 0062
1ABA 0062
1ABD 0062
+1AC3 0062
+1AC4 0062
+1ACA 0062
1DC2 0062
1DCF 0062
1DD0 0062
1DF9 0062
+1DFA 0062
1DFC 0062
1DFD 0062
1DFF 0062
@@ -55614,6 +57314,8 @@ FE27 0062
10F4E 0062
10F4F 0062
10F50 0062
+10F83 0062
+10F85 0062
0336 0062
0337 0062
20D8 0062
@@ -55753,6 +57455,8 @@ FC63 0062
FE7F 0062
FE7E 0062
0653 0062
+089E 0062
+089F 0062
0AFC 0062
10EAC 0062
0654 0062
@@ -55829,6 +57533,7 @@ A6F1 0062
0AFE 0062
0AFF 0062
0B3C 0062
+0C3C 0062
0CBC 0062
1B34 0062
1BE6 0062
@@ -56285,10 +57990,15 @@ FF22 0062
33C3 0041
33C3 0062
0299 0021
+10784 0021
0299 003F
+10784 003F
0299 0061
0299 0041
+10784 0061
+10784 0041
0299 0062
+10784 0062
0180 0021
0243 0021
0180 003F
@@ -56331,14 +58041,19 @@ A796 0062
1D80 0062
0253 0021
0181 0021
+10785 0021
0253 003F
0181 003F
+10785 003F
0253 0061
0253 0041
0181 0061
0181 0041
+10785 0061
+10785 0041
0253 0062
0181 0062
+10785 0062
0183 0021
0182 0021
0183 003F
@@ -56448,6 +58163,7 @@ FF23 0021
1F12B 0021
1F152 0021
1D9C 0021
+A7F2 0021
1F132 0021
1F172 0021
0107 0021
@@ -56501,6 +58217,7 @@ FF23 003F
1F12B 003F
1F152 003F
1D9C 003F
+A7F2 003F
1F132 003F
1F172 003F
0107 003F
@@ -56607,8 +58324,10 @@ FF23 0041
1F152 0041
1D9C 0061
1D9C 0041
+A7F2 0061
1F132 0061
1F172 0061
+A7F2 0041
1F132 0041
1F172 0041
0107 0061
@@ -56680,6 +58399,7 @@ FF23 0062
1F12B 0062
1F152 0062
1D9C 0062
+A7F2 0062
1F132 0062
1F172 0062
0107 0062
@@ -56775,6 +58495,11 @@ A7C4 0061
A7C4 0041
A794 0062
A7C4 0062
+1DF1D 0021
+1DF1D 003F
+1DF1D 0061
+1DF1D 0041
+1DF1D 0062
0188 0021
0187 0021
0188 003F
@@ -57221,6 +58946,7 @@ A779 0062
02A3 0021
01F2 0021
01F1 0021
+10787 0021
01C6 0021
01C5 0021
01C4 0021
@@ -57228,6 +58954,7 @@ A779 0062
02A3 003F
01F2 003F
01F1 003F
+10787 003F
01C6 003F
01C5 003F
01C4 003F
@@ -57239,6 +58966,8 @@ A779 0062
01F2 0041
01F1 0061
01F1 0041
+10787 0061
+10787 0041
01C6 0061
01C6 0041
01C5 0061
@@ -57249,24 +58978,50 @@ A779 0062
02A3 0062
01F2 0062
01F1 0062
+10787 0062
01C6 0062
01C5 0062
01C4 0062
AB66 0021
+10788 0021
AB66 003F
+10788 003F
AB66 0061
AB66 0041
+10788 0061
+10788 0041
AB66 0062
+10788 0062
02A5 0021
+10789 0021
02A5 003F
+10789 003F
02A5 0061
02A5 0041
+10789 0061
+10789 0041
02A5 0062
+10789 0062
02A4 0021
+1078A 0021
02A4 003F
+1078A 003F
02A4 0061
02A4 0041
+1078A 0061
+1078A 0041
02A4 0062
+1078A 0062
+1DF12 0021
+1DF12 003F
+1DF12 0061
+1DF12 0041
+1DF12 0062
+1DF19 0021
+1DF19 003F
+1DF19 0061
+1DF19 0041
+1DF19 0062
1D05 0021
1D05 003F
1D05 0061
@@ -57299,29 +59054,44 @@ A7C7 0062
1D81 0062
0256 0021
0189 0021
+1078B 0021
0256 003F
0189 003F
+1078B 003F
0256 0061
0256 0041
0189 0061
0189 0041
+1078B 0061
+1078B 0041
0256 0062
0189 0062
+1078B 0062
0257 0021
018A 0021
+1078C 0021
0257 003F
018A 003F
+1078C 003F
0257 0061
0257 0041
018A 0061
018A 0041
+1078C 0061
+1078C 0041
0257 0062
018A 0062
+1078C 0062
1D91 0021
+1078D 0021
1D91 003F
+1078D 003F
1D91 0061
1D91 0041
+1078D 0061
+1078D 0041
1D91 0062
+1078D 0062
018C 0021
018B 0021
018C 003F
@@ -58097,10 +59867,15 @@ AB34 0062
1D93 0041
1D93 0062
0258 0021
+1078E 0021
0258 003F
+1078E 003F
0258 0061
0258 0041
+1078E 0061
+1078E 0041
0258 0062
+1078E 0062
025A 0021
025A 003F
025A 0061
@@ -58142,20 +59917,30 @@ A7AB 0062
025D 0041
025D 0062
025E 0021
+1078F 0021
025E 003F
+1078F 003F
025E 0061
025E 0041
+1078F 0061
+1078F 0041
025E 0062
+1078F 0062
029A 0021
029A 003F
029A 0061
029A 0041
029A 0062
0264 0021
+10791 0021
0264 003F
+10791 003F
0264 0061
0264 0041
+10791 0061
+10791 0041
0264 0062
+10791 0062
0066 0307 0334
0066 0334 0307
1E1F 0334
@@ -58199,6 +59984,7 @@ FF26 0021
24BB 0021
1F155 0021
1DA0 0021
+A7F3 0021
1F135 0021
1F175 0021
1E1F 0021
@@ -58240,6 +60026,7 @@ FF26 003F
24BB 003F
1F155 003F
1DA0 003F
+A7F3 003F
1F135 003F
1F175 003F
1E1F 003F
@@ -58316,8 +60103,10 @@ FF26 0041
1F155 0041
1DA0 0061
1DA0 0041
+A7F3 0061
1F135 0061
1F175 0061
+A7F3 0041
1F135 0041
1F175 0041
1E1F 0061
@@ -58368,6 +60157,7 @@ FF26 0062
24BB 0062
1F155 0062
1DA0 0062
+A7F3 0062
1F135 0062
1F175 0062
1E1F 0062
@@ -58405,10 +60195,20 @@ FB02 0062
3399 0041
3399 0062
02A9 0021
+10790 0021
+1DF00 0021
02A9 003F
+10790 003F
+1DF00 003F
02A9 0061
02A9 0041
+10790 0061
+10790 0041
+1DF00 0061
+1DF00 0041
02A9 0062
+10790 0062
+1DF00 0062
1F193 0021
1F193 003F
1F193 0061
@@ -58515,6 +60315,7 @@ A7FB 0062
1E20 0334
0334 1DDA
1DDA 0334
+1ACC 0334
0067 0021
FF47 0021
1DDA 0021
@@ -58569,6 +60370,7 @@ FF27 0021
1E20 0021
A7A1 0021
A7A0 0021
+1ACC 0021
1D79 0021
A77D 0021
0067 003F
@@ -58625,6 +60427,7 @@ FF27 003F
1E20 003F
A7A1 003F
A7A0 003F
+1ACC 003F
1D79 003F
A77D 003F
0067 0061
@@ -58735,7 +60538,9 @@ A7A1 0061
A7A1 0041
A7A0 0061
A7A0 0041
+1ACC 0061
1D79 0061
+1ACC 0041
1D79 0041
A77D 0061
A77D 0041
@@ -58798,6 +60603,7 @@ FF27 0062
1E20 0062
A7A1 0062
A7A0 0062
+1ACC 0062
1D79 0062
A77D 0062
3387 0021
@@ -58820,6 +60626,16 @@ A77D 0062
33C9 0061
33C9 0041
33C9 0062
+A7D1 0021
+A7D0 0021
+A7D1 003F
+A7D0 003F
+A7D1 0061
+A7D1 0041
+A7D0 0061
+A7D0 0041
+A7D1 0062
+A7D0 0062
0261 0021
A7AC 0021
1DA2 0021
@@ -58835,6 +60651,11 @@ A7AC 0041
0261 0062
A7AC 0062
1DA2 0062
+1DF01 0021
+1DF01 003F
+1DF01 0061
+1DF01 0041
+1DF01 0062
AB36 0021
AB36 003F
AB36 0061
@@ -58844,14 +60665,19 @@ AB36 0062
1DDB 0334
0262 0021
1DDB 0021
+10792 0021
0262 003F
1DDB 003F
+10792 003F
0262 0061
0262 0041
1DDB 0061
1DDB 0041
+10792 0061
+10792 0041
0262 0062
1DDB 0062
+10792 0062
01E5 0021
01E4 0021
01E5 003F
@@ -58869,24 +60695,39 @@ AB36 0062
1D83 0062
0260 0021
0193 0021
+10793 0021
0260 003F
0193 003F
+10793 003F
0260 0061
0260 0041
0193 0061
0193 0041
+10793 0061
+10793 0041
0260 0062
0193 0062
+10793 0062
029B 0021
+10794 0021
029B 003F
+10794 003F
029B 0061
029B 0041
+10794 0061
+10794 0041
029B 0062
+10794 0062
1D77 0021
1D77 003F
1D77 0061
1D77 0041
1D77 0062
+1DF02 0021
+1DF02 003F
+1DF02 0061
+1DF02 0041
+1DF02 0062
A77F 0021
A77E 0021
A77F 003F
@@ -59022,6 +60863,7 @@ FF28 0021
210F 0021
0126 0021
A7F8 0021
+10795 0021
1E25 0021
1E24 0021
1E2B 0021
@@ -59080,6 +60922,7 @@ FF28 003F
210F 003F
0126 003F
A7F8 003F
+10795 003F
1E25 003F
1E24 003F
1E2B 003F
@@ -59190,7 +61033,9 @@ FF28 0041
0126 0061
0126 0041
A7F8 0061
+10795 0061
A7F8 0041
+10795 0041
1E25 0061
1E25 0041
1E24 0061
@@ -59259,6 +61104,7 @@ FF28 0062
210F 0062
0126 0062
A7F8 0062
+10795 0062
1E25 0062
1E24 0062
1E2B 0062
@@ -59305,10 +61151,15 @@ A7F8 0062
3390 0041
3390 0062
029C 0021
+10796 0021
029C 003F
+10796 003F
029C 0061
029C 0041
+10796 0061
+10796 0041
029C 0062
+10796 0062
0195 0021
01F6 0021
0195 003F
@@ -59385,10 +61236,15 @@ A727 0062
A726 0062
AB5C 0062
0267 0021
+10797 0021
0267 003F
+10797 003F
0267 0061
0267 0041
+10797 0061
+10797 0041
0267 0062
+10797 0062
02BB 0021
02BB 003F
02BB 0061
@@ -60010,6 +61866,11 @@ A7F7 0062
1DA7 0041
1D7B 0062
1DA7 0062
+1DF1A 0021
+1DF1A 003F
+1DF1A 0061
+1DF1A 0041
+1DF1A 0062
1D96 0021
1D96 003F
1D96 0061
@@ -60315,10 +62176,15 @@ A7B2 0062
025F 0062
1DA1 0062
0284 0021
+10798 0021
0284 003F
+10798 003F
0284 0061
0284 0041
+10798 0061
+10798 0041
0284 0062
+10798 0062
006B 0301 0334
006B 0334 0301
006B 0334 0341
@@ -60757,6 +62623,11 @@ A744 0061
A744 0041
A745 0062
A744 0062
+1DF03 0021
+1DF03 003F
+1DF03 0061
+1DF03 0041
+1DF03 0062
029E 0021
A7B0 0021
029E 003F
@@ -60767,6 +62638,11 @@ A7B0 0061
A7B0 0041
029E 0062
A7B0 0062
+1DF10 0021
+1DF10 003F
+1DF10 0061
+1DF10 0041
+1DF10 0062
006C 0301 0334
006C 0334 0301
006C 0334 0341
@@ -61193,10 +63069,15 @@ FF2C 0062
1F1A9 0041
1F1A9 0062
02AA 0021
+10799 0021
02AA 003F
+10799 003F
02AA 0061
02AA 0041
+10799 0061
+10799 0041
02AA 0062
+10799 0062
32CF 0021
32CF 003F
32CF 0061
@@ -61208,10 +63089,15 @@ FF2C 0062
33D3 0041
33D3 0062
02AB 0021
+1079A 0021
02AB 003F
+1079A 003F
02AB 0061
02AB 0041
+1079A 0061
+1079A 0041
02AB 0062
+1079A 0062
0334 1DDE
1DDE 0334
029F 0021
@@ -61308,14 +63194,34 @@ AB39 0041
AB39 0062
026C 0021
A7AD 0021
+1079B 0021
026C 003F
A7AD 003F
+1079B 003F
026C 0061
026C 0041
A7AD 0061
A7AD 0041
+1079B 0061
+1079B 0041
026C 0062
A7AD 0062
+1079B 0062
+1DF04 0021
+1079C 0021
+1DF04 003F
+1079C 003F
+1DF04 0061
+1DF04 0041
+1079C 0061
+1079C 0041
+1DF04 0062
+1079C 0062
+1DF13 0021
+1DF13 003F
+1DF13 0061
+1DF13 0041
+1DF13 0062
AB37 0021
AB5D 0021
AB37 003F
@@ -61347,10 +63253,20 @@ AB5D 0062
026D 0062
1DA9 0062
A78E 0021
+1079D 0021
A78E 003F
+1079D 003F
A78E 0061
A78E 0041
+1079D 0061
+1079D 0041
A78E 0062
+1079D 0062
+1DF11 0021
+1DF11 003F
+1DF11 0061
+1DF11 0041
+1DF11 0062
0234 0021
0234 003F
0234 0061
@@ -61362,10 +63278,25 @@ A772 0061
A772 0041
A772 0062
026E 0021
+1079E 0021
026E 003F
+1079E 003F
026E 0061
026E 0041
+1079E 0061
+1079E 0041
026E 0062
+1079E 0062
+1DF05 0021
+1079F 0021
+1DF05 003F
+1079F 003F
+1DF05 0061
+1DF05 0041
+1079F 0061
+1079F 0041
+1DF05 0062
+1079F 0062
A781 0021
A780 0021
A781 003F
@@ -61382,10 +63313,25 @@ A780 0062
019B 0041
019B 0062
028E 0021
+107A0 0021
028E 003F
+107A0 003F
028E 0061
028E 0041
+107A0 0061
+107A0 0041
028E 0062
+107A0 0062
+1DF06 0021
+107A1 0021
+1DF06 003F
+107A1 003F
+1DF06 0061
+1DF06 0041
+107A1 0061
+107A1 0041
+1DF06 0062
+107A1 0062
006D 0301 0334
006D 0334 0301
006D 0341 0334
@@ -62362,6 +64308,16 @@ AB3C 003F
AB3C 0061
AB3C 0041
AB3C 0062
+1DF14 0021
+1DF14 003F
+1DF14 0061
+1DF14 0041
+1DF14 0062
+1DF07 0021
+1DF07 003F
+1DF07 0061
+1DF07 0041
+1DF07 0062
00F8 0301 0334
00F8 0334 0301
00F8 0334 0341
@@ -62701,6 +64657,7 @@ A79C 0021
0230 0021
00F8 0021
00D8 0021
+107A2 0021
01FF 0021
01FE 0021
01EB 0021
@@ -62817,6 +64774,7 @@ A79C 003F
0230 003F
00F8 003F
00D8 003F
+107A2 003F
01FF 003F
01FE 003F
01EB 003F
@@ -63014,6 +64972,8 @@ A79C 0041
00F8 0041
00D8 0061
00D8 0041
+107A2 0061
+107A2 0041
01FF 0061
01FF 0041
01FE 0061
@@ -63165,6 +65125,7 @@ A79C 0062
0230 0062
00F8 0062
00D8 0062
+107A2 0062
01FF 0062
01FE 0062
01EB 0062
@@ -63251,10 +65212,15 @@ AB3D 0061
AB3D 0041
AB3D 0062
0276 0021
+107A3 0021
0276 003F
+107A3 003F
0276 0061
0276 0041
+107A3 0061
+107A3 0041
0276 0062
+107A3 0062
1D14 0021
1D14 003F
1D14 0061
@@ -63295,6 +65261,11 @@ AB3E 003F
AB3E 0061
AB3E 0041
AB3E 0062
+1DF1B 0021
+1DF1B 003F
+1DF1B 0061
+1DF1B 0041
+1DF1B 0062
0254 0021
0186 0021
1D53 0021
@@ -63396,10 +65367,15 @@ A74A 0041
A74B 0062
A74A 0062
0277 0021
+107A4 0021
0277 003F
+107A4 003F
0277 0061
0277 0041
+107A4 0061
+107A4 0041
0277 0062
+107A4 0062
A7B7 0021
A7B6 0021
A7B7 003F
@@ -63854,6 +65830,8 @@ FF31 0021
1D680 0021
24C6 0021
1F160 0021
+107A5 0021
+A7F4 0021
1F140 0021
1F180 0021
0071 003F
@@ -63889,6 +65867,8 @@ FF31 003F
1D680 003F
24C6 003F
1F160 003F
+107A5 003F
+A7F4 003F
1F140 003F
1F180 003F
0071 0061
@@ -63957,8 +65937,12 @@ FF31 0041
1F160 0061
24C6 0041
1F160 0041
+107A5 0061
+107A5 0041
+A7F4 0061
1F140 0061
1F180 0061
+A7F4 0041
1F140 0041
1F180 0041
0071 0062
@@ -63994,6 +65978,8 @@ FF31 0062
1D680 0062
24C6 0062
1F160 0062
+107A5 0062
+A7F4 0062
1F140 0062
1F180 0062
0239 0021
@@ -64108,6 +66094,9 @@ A758 0062
036C 0334
0334 1DCA
1DCA 0334
+1ACD 0334
+0334 1DE3
+1DE3 0334
0072 0021
FF52 0021
036C 0021
@@ -64169,8 +66158,12 @@ A7A6 0021
1E5C 0021
1E5F 0021
1E5E 0021
+1ACD 0021
A783 0021
A782 0021
+1DE3 0021
+A75B 0021
+A75A 0021
0072 003F
FF52 003F
036C 003F
@@ -64232,8 +66225,12 @@ A7A6 003F
1E5C 003F
1E5F 003F
1E5E 003F
+1ACD 003F
A783 003F
A782 003F
+1DE3 003F
+A75B 003F
+A75A 003F
0072 0061
0072 0041
FF52 0061
@@ -64356,10 +66353,18 @@ A7A6 0041
1E5F 0041
1E5E 0061
1E5E 0041
+1ACD 0061
A783 0061
+1ACD 0041
A783 0041
A782 0061
A782 0041
+1DE3 0061
+A75B 0061
+1DE3 0041
+A75B 0041
+A75A 0061
+A75A 0041
33AD 0021
33AD 003F
33AE 0021
@@ -64436,8 +66441,12 @@ A7A6 0062
1E5C 0062
1E5F 0062
1E5E 0062
+1ACD 0062
A783 0062
A782 0062
+1DE3 0062
+A75B 0062
+A75A 0062
AB45 0021
AB45 003F
AB45 0061
@@ -64448,40 +66457,28 @@ AB45 0062
0280 0021
1DE2 0021
01A6 0021
+107AA 0021
0280 003F
1DE2 003F
01A6 003F
+107AA 003F
0280 0061
0280 0041
1DE2 0061
1DE2 0041
01A6 0061
01A6 0041
+107AA 0061
+107AA 0041
0280 0062
1DE2 0062
01A6 0062
+107AA 0062
AB46 0021
AB46 003F
AB46 0061
AB46 0041
AB46 0062
-0334 1DE3
-1DE3 0334
-A75B 0021
-1DE3 0021
-A75A 0021
-A75B 003F
-1DE3 003F
-A75A 003F
-A75B 0061
-A75B 0041
-1DE3 0061
-1DE3 0041
-A75A 0061
-A75A 0041
-A75B 0062
-1DE3 0062
-A75A 0062
1D19 0021
1D19 003F
1D19 0061
@@ -64518,10 +66515,25 @@ A75A 0062
1D1A 0041
1D1A 0062
027A 0021
+107A6 0021
027A 003F
+107A6 003F
027A 0061
027A 0041
+107A6 0061
+107A6 0041
027A 0062
+107A6 0062
+1DF08 0021
+107A7 0021
+1DF08 003F
+107A7 003F
+1DF08 0061
+1DF08 0041
+107A7 0061
+107A7 0041
+1DF08 0062
+107A7 0062
1D89 0021
1D89 003F
1D89 0061
@@ -64549,29 +66561,44 @@ A75A 0062
027C 0062
027D 0021
2C64 0021
+107A8 0021
027D 003F
2C64 003F
+107A8 003F
027D 0061
027D 0041
2C64 0061
2C64 0041
+107A8 0061
+107A8 0041
027D 0062
2C64 0062
+107A8 0062
AB49 0021
AB49 003F
AB49 0061
AB49 0041
AB49 0062
027E 0021
+107A9 0021
027E 003F
+107A9 003F
027E 0061
027E 0041
+107A9 0061
+107A9 0041
027E 0062
+107A9 0062
1D73 0021
1D73 003F
1D73 0061
1D73 0041
1D73 0062
+1DF16 0021
+1DF16 003F
+1DF16 0061
+1DF16 0041
+1DF16 0062
027F 0021
027F 003F
027F 0061
@@ -64617,6 +66644,11 @@ AB68 003F
AB68 0061
AB68 0041
AB68 0062
+1DF15 0021
+1DF15 003F
+1DF15 0061
+1DF15 0041
+1DF15 0062
A775 0021
A775 003F
A775 0061
@@ -64774,9 +66806,11 @@ A7A8 0021
0218 0021
017F 0021
1DE5 0021
+1E9B 0021
A785 0021
A784 0021
-1E9B 0021
+A7D9 0021
+A7D8 0021
0073 003F
FF53 003F
1DE4 003F
@@ -64839,9 +66873,11 @@ A7A8 003F
0218 003F
017F 003F
1DE5 003F
+1E9B 003F
A785 003F
A784 003F
-1E9B 003F
+A7D9 003F
+A7D8 003F
0073 0061
0073 0041
FF53 0061
@@ -64964,14 +67000,18 @@ A7A8 0041
0218 0041
017F 0061
1DE5 0061
-A785 0061
017F 0041
1DE5 0041
+1E9B 0061
+1E9B 0041
+A785 0061
A785 0041
A784 0061
A784 0041
-1E9B 0061
-1E9B 0041
+A7D9 0061
+A7D9 0041
+A7D8 0061
+A7D8 0041
1F18D 0021
1F18D 003F
1F18D 0061
@@ -65039,9 +67079,11 @@ A7A8 0062
0218 0062
017F 0062
1DE5 0062
+1E9B 0062
A785 0062
A784 0062
-1E9B 0062
+A7D9 0062
+A7D8 0062
1F14C 0021
1F14C 003F
1F14C 0061
@@ -65137,6 +67179,16 @@ A7C5 0041
0282 0062
A7C5 0062
1DB3 0062
+1DF1E 0021
+107BA 0021
+1DF1E 003F
+107BA 003F
+1DF1E 0061
+1DF1E 0041
+107BA 0061
+107BA 0041
+1DF1E 0062
+107BA 0062
023F 0021
2C7E 0021
023F 003F
@@ -65147,6 +67199,16 @@ A7C5 0062
2C7E 0041
023F 0062
2C7E 0062
+A7D7 0021
+A7D6 0021
+A7D7 003F
+A7D6 003F
+A7D7 0061
+A7D7 0041
+A7D6 0061
+A7D6 0041
+A7D7 0062
+A7D6 0062
1E9C 0021
1E9C 003F
1E9C 0061
@@ -65189,6 +67251,11 @@ AB4D 0062
1D8B 0061
1D8B 0041
1D8B 0062
+1D98 0021
+1D98 003F
+1D98 0061
+1D98 0041
+1D98 0062
01AA 0021
01AA 003F
01AA 0061
@@ -65199,16 +67266,21 @@ AB4D 0062
0285 0061
0285 0041
0285 0062
-1D98 0021
-1D98 003F
-1D98 0061
-1D98 0041
-1D98 0062
0286 0021
0286 003F
0286 0061
0286 0041
0286 0062
+1DF0B 0021
+1DF0B 003F
+1DF0B 0061
+1DF0B 0041
+1DF0B 0062
+1DF0C 0021
+1DF0C 003F
+1DF0C 0061
+1DF0C 0041
+1DF0C 0062
0074 030C 0334
0074 0334 030C
0165 0334
@@ -65256,6 +67328,7 @@ AB4D 0062
1E6E 0334
0334 036D
036D 0334
+1ACE 0334
0074 0021
FF54 0021
036D 0021
@@ -65310,6 +67383,7 @@ FF34 0021
1E70 0021
1E6F 0021
1E6E 0021
+1ACE 0021
A787 0021
A786 0021
0074 003F
@@ -65366,6 +67440,7 @@ FF34 003F
1E70 003F
1E6F 003F
1E6E 003F
+1ACE 003F
A787 003F
A786 003F
0074 0061
@@ -65476,7 +67551,9 @@ FF34 0041
1E6F 0041
1E6E 0061
1E6E 0041
+1ACE 0061
A787 0061
+1ACE 0041
A787 0041
A786 0061
A786 0041
@@ -65534,13 +67611,19 @@ FF34 0062
1E70 0062
1E6F 0062
1E6E 0062
+1ACE 0062
A787 0062
A786 0062
02A8 0021
+107AB 0021
02A8 003F
+107AB 003F
02A8 0061
02A8 0041
+107AB 0061
+107AB 0041
02A8 0062
+107AB 0062
2121 0021
2121 003F
2121 0061
@@ -65563,24 +67646,49 @@ A786 0062
2122 0062
01BE 0021
02A6 0021
+107AC 0021
01BE 003F
02A6 003F
+107AC 003F
01BE 0061
02A6 0061
01BE 0041
02A6 0041
+107AC 0061
+107AC 0041
01BE 0062
02A6 0062
+107AC 0062
AB67 0021
+107AD 0021
AB67 003F
+107AD 003F
AB67 0061
AB67 0041
+107AD 0061
+107AD 0041
AB67 0062
+107AD 0062
02A7 0021
+107AE 0021
02A7 003F
+107AE 003F
02A7 0061
02A7 0041
+107AE 0061
+107AE 0041
02A7 0062
+107AE 0062
+1DF17 0021
+1DF17 003F
+1DF17 0061
+1DF17 0041
+1DF17 0062
+1DF1C 0021
+1DF1C 003F
+1DF1C 0061
+1DF1C 0041
+1DF1C 0062
A729 0021
A728 0021
A729 003F
@@ -65643,14 +67751,24 @@ A728 0062
01AC 0062
0288 0021
01AE 0021
+107AF 0021
0288 003F
01AE 003F
+107AF 003F
0288 0061
0288 0041
01AE 0061
01AE 0041
+107AF 0061
+107AF 0041
0288 0062
01AE 0062
+107AF 0062
+1DF09 0021
+1DF09 003F
+1DF09 0061
+1DF09 0041
+1DF09 0062
0236 0021
0236 003F
0236 0061
@@ -65671,6 +67789,11 @@ A7B1 0061
A7B1 0041
0287 0062
A7B1 0062
+1DF0D 0021
+1DF0D 003F
+1DF0D 0061
+1DF0D 0041
+1DF0D 0062
0075 0301 0334
0075 0334 0301
0075 0334 0341
@@ -66923,10 +69046,15 @@ A75E 0062
01B2 0062
1DB9 0062
2C71 0021
+107B0 0021
2C71 003F
+107B0 003F
2C71 0061
2C71 0041
+107B0 0061
+107B0 0041
2C71 0062
+107B0 0062
2C74 0021
2C74 003F
2C74 0061
@@ -67056,6 +69184,8 @@ FF37 0021
1E86 0021
1E89 0021
1E88 0021
+A7C3 0021
+A7C2 0021
0077 003F
FF57 003F
1ABF 003F
@@ -67108,6 +69238,8 @@ FF37 003F
1E86 003F
1E89 003F
1E88 003F
+A7C3 003F
+A7C2 003F
0077 0061
0077 0041
FF57 0061
@@ -67212,6 +69344,10 @@ FF37 0041
1E89 0041
1E88 0061
1E88 0041
+A7C3 0061
+A7C3 0041
+A7C2 0061
+A7C2 0041
0077 0062
FF57 0062
1ABF 0062
@@ -67264,6 +69400,8 @@ FF37 0062
1E86 0062
1E89 0062
1E88 0062
+A7C3 0062
+A7C2 0062
33DD 0021
33DD 003F
33DD 0061
@@ -67289,16 +69427,6 @@ FF37 0062
1D21 0061
1D21 0041
1D21 0062
-A7C3 0021
-A7C2 0021
-A7C3 003F
-A7C2 003F
-A7C3 0061
-A7C3 0041
-A7C2 0061
-A7C2 0041
-A7C3 0062
-A7C2 0062
2C73 0021
2C72 0021
2C73 003F
@@ -67962,10 +70090,15 @@ FF39 0062
1EF5 0062
1EF4 0062
028F 0021
+107B2 0021
028F 003F
+107B2 003F
028F 0061
028F 0041
+107B2 0061
+107B2 0041
028F 0062
+107B2 0062
024F 0021
024E 0021
024F 003F
@@ -68437,6 +70570,11 @@ A762 0062
01B8 0041
01B9 0062
01B8 0062
+1DF18 0021
+1DF18 003F
+1DF18 0061
+1DF18 0041
+1DF18 0062
1D9A 0021
1D9A 003F
1D9A 0061
@@ -68462,6 +70600,11 @@ A762 0062
00DE 0041
00FE 0062
00DE 0062
+A7D3 0021
+A7D3 003F
+A7D3 0061
+A7D3 0041
+A7D3 0062
A765 0021
A764 0021
A765 003F
@@ -68492,6 +70635,11 @@ A766 0062
01F7 0041
01BF 0062
01F7 0062
+A7D5 0021
+A7D5 003F
+A7D5 0061
+A7D5 0041
+A7D5 0062
A769 0021
A768 0021
A769 003F
@@ -68740,50 +70888,100 @@ A724 0041
A725 0062
A724 0062
02A1 0021
+107B3 0021
02A1 003F
+107B3 003F
02A1 0061
02A1 0041
+107B3 0061
+107B3 0041
02A1 0062
+107B3 0062
02A2 0021
+107B4 0021
02A2 003F
+107B4 003F
02A2 0061
02A2 0041
+107B4 0061
+107B4 0041
02A2 0062
+107B4 0062
0296 0021
0296 003F
0296 0061
0296 0041
0296 0062
+1DF0E 0021
+1DF0E 003F
+1DF0E 0061
+1DF0E 0041
+1DF0E 0062
01C0 0021
+107B6 0021
01C0 003F
+107B6 003F
01C0 0061
01C0 0041
+107B6 0061
+107B6 0041
01C0 0062
+107B6 0062
01C1 0021
+107B7 0021
01C1 003F
+107B7 003F
01C1 0061
01C1 0041
+107B7 0061
+107B7 0041
01C1 0062
+107B7 0062
01C2 0021
+107B8 0021
01C2 003F
+107B8 003F
01C2 0061
01C2 0041
+107B8 0061
+107B8 0041
01C2 0062
+107B8 0062
01C3 0021
01C3 003F
01C3 0061
01C3 0041
01C3 0062
+1DF0A 0021
+107B9 0021
+1DF0A 003F
+107B9 003F
+1DF0A 0061
+1DF0A 0041
+107B9 0061
+107B9 0041
+1DF0A 0062
+107B9 0062
0297 0021
0297 003F
0297 0061
0297 0041
0297 0062
+1DF0F 0021
+1DF0F 003F
+1DF0F 0061
+1DF0F 0041
+1DF0F 0062
0298 0021
+107B5 0021
0298 003F
+107B5 003F
0298 0061
0298 0041
+107B5 0061
+107B5 0041
0298 0062
+107B5 0062
02AC 0021
02AC 003F
02AC 0061
@@ -76619,6 +78817,16 @@ A65E 0062
2C2E 0041
2C5E 0062
2C2E 0062
+2C5F 0021
+2C2F 0021
+2C5F 003F
+2C2F 003F
+2C5F 0061
+2C5F 0041
+2C2F 0061
+2C2F 0041
+2C5F 0062
+2C2F 0062
0334 10376
10376 0334
10350 0021
@@ -78881,24 +81089,59 @@ FB4A 0062
081B 0062
0621 0021
0674 0021
+0883 0021
+0887 0021
FE80 0021
06FD 0021
0621 003F
0674 003F
+0883 003F
+0887 003F
FE80 003F
06FD 003F
0621 0061
0621 0041
0674 0061
+0883 0061
+0887 0061
0674 0041
+0883 0041
+0887 0041
FE80 0061
FE80 0041
06FD 0061
06FD 0041
0621 0062
0674 0062
+0883 0062
+0887 0062
FE80 0062
06FD 0062
+0675 0021
+0675 003F
+0675 0061
+0675 0041
+0675 0062
+0676 0021
+0676 003F
+0676 0061
+0676 0041
+0676 0062
+0677 0021
+FBDD 0021
+0677 003F
+FBDD 003F
+0677 0061
+0677 0041
+FBDD 0061
+FBDD 0041
+0677 0062
+FBDD 0062
+0678 0021
+0678 003F
+0678 0061
+0678 0041
+0678 0062
0622 0334
0627 0334 0653
0627 0653 0334
@@ -79264,6 +81507,25 @@ FBF6 0062
08AC 0041
08AC 0062
0627 0021
+0870 0021
+0871 0021
+0872 0021
+0873 0021
+0874 0021
+0875 0021
+0876 0021
+0877 0021
+0878 0021
+0879 0021
+087A 0021
+087B 0021
+087C 0021
+087D 0021
+087E 0021
+087F 0021
+0880 0021
+0881 0021
+0882 0021
08AD 0021
1EE00 0021
1EE80 0021
@@ -79272,6 +81534,25 @@ FE8D 0021
FD3C 0021
FD3D 0021
0627 003F
+0870 003F
+0871 003F
+0872 003F
+0873 003F
+0874 003F
+0875 003F
+0876 003F
+0877 003F
+0878 003F
+0879 003F
+087A 003F
+087B 003F
+087C 003F
+087D 003F
+087E 003F
+087F 003F
+0880 003F
+0881 003F
+0882 003F
08AD 003F
1EE00 003F
1EE80 003F
@@ -79281,7 +81562,45 @@ FD3C 003F
FD3D 003F
0627 0061
0627 0041
+0870 0061
+0871 0061
+0872 0061
+0873 0061
+0874 0061
+0875 0061
+0876 0061
+0877 0061
+0878 0061
+0879 0061
+087A 0061
+087B 0061
+087C 0061
+087D 0061
+087E 0061
+087F 0061
+0880 0061
+0881 0061
+0882 0061
08AD 0061
+0870 0041
+0871 0041
+0872 0041
+0873 0041
+0874 0041
+0875 0041
+0876 0041
+0877 0041
+0878 0041
+0879 0041
+087A 0041
+087B 0041
+087C 0041
+087D 0041
+087E 0041
+087F 0041
+0880 0041
+0881 0041
+0882 0041
08AD 0041
1EE00 0061
1EE80 0061
@@ -79300,6 +81619,25 @@ FD3D 0041
0627 0001 0655 0061
0627 0591 0655 0061
0627 0062
+0870 0062
+0871 0062
+0872 0062
+0873 0062
+0874 0062
+0875 0062
+0876 0062
+0877 0062
+0878 0062
+0879 0062
+087A 0062
+087B 0062
+087C 0062
+087D 0062
+087E 0062
+087F 0062
+0880 0062
+0881 0062
+0882 0062
08AD 0062
1EE00 0062
1EE80 0062
@@ -79307,11 +81645,6 @@ FE8E 0062
FE8D 0062
FD3C 0062
FD3D 0062
-0675 0021
-0675 003F
-0675 0061
-0675 0041
-0675 0062
FDF3 0021
FDF3 003F
FDF3 0061
@@ -80252,6 +82585,11 @@ FB74 0062
FB75 0062
FB73 0062
FB72 0062
+088A 0021
+088A 003F
+088A 0061
+088A 0041
+088A 0062
0686 0021
FB7C 0021
FB7D 0021
@@ -81892,6 +84230,16 @@ FC28 0062
08A3 0061
08A3 0041
08A3 0062
+088B 0021
+088B 003F
+088B 0061
+088B 0041
+088B 0062
+088C 0021
+088C 003F
+088C 0061
+088C 0041
+088C 0062
0639 0021
1EE0F 0021
1EE2F 0021
@@ -82552,6 +84900,11 @@ FC36 0062
08A5 0061
08A5 0041
08A5 0062
+08B5 0021
+08B5 003F
+08B5 0061
+08B5 0041
+08B5 0062
0643 0021
1EE0A 0021
1EE2A 0021
@@ -82817,6 +85170,11 @@ FB92 0062
08B0 0061
08B0 0041
08B0 0062
+08C8 0021
+08C8 003F
+08C8 0061
+08C8 0041
+08C8 0062
06B0 0021
06B0 003F
06B0 0061
@@ -82892,6 +85250,11 @@ FB96 0062
063B 0061
063B 0041
063B 0062
+088D 0021
+088D 003F
+088D 0061
+088D 0041
+088D 0062
063C 0021
063C 003F
063C 0061
@@ -83662,6 +86025,11 @@ FBA0 0062
0769 0061
0769 0041
0769 0062
+0889 0021
+0889 003F
+0889 0061
+0889 0041
+0889 0062
0647 0021
1EE24 0021
1EE64 0021
@@ -83840,6 +86208,7 @@ FBA5 0062
FBA4 0062
0648 0021
06E5 0021
+0884 0021
1EE05 0021
1EE85 0021
1EEA5 0021
@@ -83847,6 +86216,7 @@ FEEE 0021
FEED 0021
0648 003F
06E5 003F
+0884 003F
1EE05 003F
1EE85 003F
1EEA5 003F
@@ -83855,7 +86225,9 @@ FEED 003F
0648 0061
0648 0041
06E5 0061
+0884 0061
06E5 0041
+0884 0041
1EE05 0061
1EE85 0061
1EEA5 0061
@@ -83869,16 +86241,12 @@ FEED 0041
0648 0001 0654 0061
0648 0062
06E5 0062
+0884 0062
1EE05 0062
1EE85 0062
1EEA5 0062
FEEE 0062
FEED 0062
-0676 0021
-0676 003F
-0676 0061
-0676 0041
-0676 0062
FDF8 0021
FDF8 003F
FDF8 0061
@@ -83934,16 +86302,6 @@ FBD7 0041
06C7 0062
FBD8 0062
FBD7 0062
-0677 0021
-FBDD 0021
-0677 003F
-FBDD 003F
-0677 0061
-0677 0041
-FBDD 0061
-FBDD 0041
-0677 0062
-FBDD 0062
06C8 0021
FBDC 0021
FBDB 0021
@@ -84056,6 +86414,8 @@ FC90 0062
FC5D 0062
064A 0021
06E6 0021
+0885 0021
+0886 0021
1EE09 0021
1EE29 0021
1EE49 0021
@@ -84068,6 +86428,8 @@ FEF2 0021
FEF1 0021
064A 003F
06E6 003F
+0885 003F
+0886 003F
1EE09 003F
1EE29 003F
1EE49 003F
@@ -84081,7 +86443,11 @@ FEF1 003F
064A 0061
064A 0041
06E6 0061
+0885 0061
+0886 0061
06E6 0041
+0885 0041
+0886 0041
1EE09 0061
1EE29 0061
1EE49 0061
@@ -84105,6 +86471,8 @@ FEF1 0041
064A 0001 0654 0061
064A 0062
06E6 0062
+0885 0062
+0886 0062
1EE09 0062
1EE29 0062
1EE49 0062
@@ -84115,11 +86483,6 @@ FEF3 0062
FEF4 0062
FEF2 0062
FEF1 0062
-0678 0021
-0678 003F
-0678 0061
-0678 0041
-0678 0062
FCDA 0021
FC55 0021
FCDA 003F
@@ -84241,17 +86604,21 @@ FC5A 0041
FC96 0062
FC5A 0062
06CC 0021
+08C9 0021
FBFE 0021
FBFF 0021
FBFD 0021
FBFC 0021
06CC 003F
+08C9 003F
FBFE 003F
FBFF 003F
FBFD 003F
FBFC 003F
06CC 0061
06CC 0041
+08C9 0061
+08C9 0041
FBFE 0061
FBFE 0041
FBFF 0061
@@ -84261,6 +86628,7 @@ FBFD 0041
FBFC 0061
FBFC 0041
06CC 0062
+08C9 0062
FBFE 0062
FBFF 0062
FBFD 0062
@@ -84388,6 +86756,11 @@ FBB0 0062
077B 0061
077B 0041
077B 0062
+088E 0021
+088E 003F
+088E 0061
+088E 0041
+088E 0062
0710 0021
0710 003F
0710 0061
@@ -85618,11 +87991,21 @@ FBB0 0062
1380 0061
1380 0041
1380 0062
+1E7ED 0021
+1E7ED 003F
+1E7ED 0061
+1E7ED 0041
+1E7ED 0062
1381 0021
1381 003F
1381 0061
1381 0041
1381 0062
+1E7EE 0021
+1E7EE 003F
+1E7EE 0061
+1E7EE 0041
+1E7EE 0062
1382 0021
1382 003F
1382 0061
@@ -85888,6 +88271,11 @@ AB06 0062
1248 0061
1248 0041
1248 0062
+1E7F0 0021
+1E7F0 003F
+1E7F0 0061
+1E7F0 0041
+1E7F0 0062
124A 0021
124A 003F
124A 0061
@@ -85898,11 +88286,21 @@ AB06 0062
124B 0061
124B 0041
124B 0062
+1E7F1 0021
+1E7F1 003F
+1E7F1 0061
+1E7F1 0041
+1E7F1 0062
124C 0021
124C 003F
124C 0061
124C 0041
124C 0062
+1E7F2 0021
+1E7F2 003F
+1E7F2 0061
+1E7F2 0041
+1E7F2 0062
124D 0021
124D 003F
124D 0061
@@ -86013,11 +88411,21 @@ AB06 0062
1384 0061
1384 0041
1384 0062
+1E7F3 0021
+1E7F3 003F
+1E7F3 0061
+1E7F3 0041
+1E7F3 0062
1385 0021
1385 003F
1385 0061
1385 0041
1385 0062
+1E7F4 0021
+1E7F4 003F
+1E7F4 0061
+1E7F4 0041
+1E7F4 0062
1386 0021
1386 003F
1386 0061
@@ -86408,6 +88816,11 @@ AB06 0062
12B0 0061
12B0 0041
12B0 0062
+1E7F5 0021
+1E7F5 003F
+1E7F5 0061
+1E7F5 0041
+1E7F5 0062
12B2 0021
12B2 003F
12B2 0061
@@ -86418,11 +88831,21 @@ AB06 0062
12B3 0061
12B3 0041
12B3 0062
+1E7F6 0021
+1E7F6 003F
+1E7F6 0061
+1E7F6 0041
+1E7F6 0062
12B4 0021
12B4 003F
12B4 0061
12B4 0041
12B4 0062
+1E7F7 0021
+1E7F7 003F
+1E7F7 0061
+1E7F7 0041
+1E7F7 0062
12B5 0021
12B5 003F
12B5 0061
@@ -86463,11 +88886,21 @@ AB06 0062
12BE 0061
12BE 0041
12BE 0062
+1E7E8 0021
+1E7E8 003F
+1E7E8 0061
+1E7E8 0041
+1E7E8 0062
12C0 0021
12C0 003F
12C0 0061
12C0 0041
12C0 0062
+1E7E9 0021
+1E7E9 003F
+1E7E9 0061
+1E7E9 0041
+1E7E9 0062
12C2 0021
12C2 003F
12C2 0061
@@ -86478,11 +88911,21 @@ AB06 0062
12C3 0061
12C3 0041
12C3 0062
+1E7EA 0021
+1E7EA 003F
+1E7EA 0061
+1E7EA 0041
+1E7EA 0062
12C4 0021
12C4 003F
12C4 0061
12C4 0041
12C4 0062
+1E7EB 0021
+1E7EB 003F
+1E7EB 0061
+1E7EB 0041
+1E7EB 0062
12C5 0021
12C5 003F
12C5 0061
@@ -86928,6 +89371,11 @@ AB0E 0062
1310 0061
1310 0041
1310 0062
+1E7F8 0021
+1E7F8 003F
+1E7F8 0061
+1E7F8 0041
+1E7F8 0062
1312 0021
1312 003F
1312 0061
@@ -86938,11 +89386,21 @@ AB0E 0062
1313 0061
1313 0041
1313 0062
+1E7F9 0021
+1E7F9 003F
+1E7F9 0061
+1E7F9 0041
+1E7F9 0062
1314 0021
1314 003F
1314 0061
1314 0041
1314 0062
+1E7FA 0021
+1E7FA 003F
+1E7FA 0061
+1E7FA 0041
+1E7FA 0062
1315 0021
1315 003F
1315 0061
@@ -87338,11 +89796,21 @@ AB2E 0062
1388 0061
1388 0041
1388 0062
+1E7FB 0021
+1E7FB 003F
+1E7FB 0061
+1E7FB 0041
+1E7FB 0062
1389 0021
1389 003F
1389 0061
1389 0041
1389 0062
+1E7FC 0021
+1E7FC 003F
+1E7FC 0061
+1E7FC 0041
+1E7FC 0062
138A 0021
138A 003F
138A 0061
@@ -87398,11 +89866,21 @@ AB2E 0062
138C 0061
138C 0041
138C 0062
+1E7FD 0021
+1E7FD 003F
+1E7FD 0061
+1E7FD 0041
+1E7FD 0062
138D 0021
138D 003F
138D 0061
138D 0041
138D 0062
+1E7FE 0021
+1E7FE 003F
+1E7FE 0061
+1E7FE 0041
+1E7FE 0062
138E 0021
138E 003F
138E 0061
@@ -87643,36 +90121,71 @@ AB2E 0062
2DCE 0061
2DCE 0041
2DCE 0062
+1E7E0 0021
+1E7E0 003F
+1E7E0 0061
+1E7E0 0041
+1E7E0 0062
2DD0 0021
2DD0 003F
2DD0 0061
2DD0 0041
2DD0 0062
+1E7E1 0021
+1E7E1 003F
+1E7E1 0061
+1E7E1 0041
+1E7E1 0062
2DD1 0021
2DD1 003F
2DD1 0061
2DD1 0041
2DD1 0062
+1E7E2 0021
+1E7E2 003F
+1E7E2 0061
+1E7E2 0041
+1E7E2 0062
2DD2 0021
2DD2 003F
2DD2 0061
2DD2 0041
2DD2 0062
+1E7E3 0021
+1E7E3 003F
+1E7E3 0061
+1E7E3 0041
+1E7E3 0062
2DD3 0021
2DD3 003F
2DD3 0061
2DD3 0041
2DD3 0062
+1E7E4 0021
+1E7E4 003F
+1E7E4 0061
+1E7E4 0041
+1E7E4 0062
2DD4 0021
2DD4 003F
2DD4 0061
2DD4 0041
2DD4 0062
+1E7E5 0021
+1E7E5 003F
+1E7E5 0061
+1E7E5 0041
+1E7E5 0062
2DD5 0021
2DD5 003F
2DD5 0061
2DD5 0041
2DD5 0062
+1E7E6 0021
+1E7E6 003F
+1E7E6 0061
+1E7E6 0041
+1E7E6 0062
2DD6 0021
2DD6 003F
2DD6 0061
@@ -90288,6 +92801,11 @@ A8FF 0062
0C28 0061
0C28 0041
0C28 0062
+0C5D 0021
+0C5D 003F
+0C5D 0061
+0C5D 0041
+0C5D 0062
0C2A 0021
0C2A 003F
0C2A 0061
@@ -90665,6 +93183,11 @@ A8FF 0062
0CA8 0061
0CA8 0041
0CA8 0062
+0CDD 0021
+0CDD 003F
+0CDD 0061
+0CDD 0041
+0CDD 0062
0CAA 0021
0CAA 003F
0CAA 0061
@@ -92924,6 +95447,11 @@ A8C4 0062
110B4 0061
110B4 0041
110B4 0062
+110C2 0021
+110C2 003F
+110C2 0061
+110C2 0041
+110C2 0062
110B5 0021
110B5 003F
110B5 0061
@@ -97256,6 +99784,41 @@ A8C4 0062
11719 0061
11719 0041
11719 0062
+11740 0021
+11740 003F
+11740 0061
+11740 0041
+11740 0062
+11741 0021
+11741 003F
+11741 0061
+11741 0041
+11741 0062
+11742 0021
+11742 003F
+11742 0061
+11742 0041
+11742 0062
+11743 0021
+11743 003F
+11743 0061
+11743 0041
+11743 0062
+11744 0021
+11744 003F
+11744 0061
+11744 0041
+11744 0062
+11745 0021
+11745 003F
+11745 0061
+11745 0041
+11745 0062
+11746 0021
+11746 003F
+11746 0061
+11746 0041
+11746 0062
11720 0021
11720 003F
11720 0061
@@ -98208,6 +100771,11 @@ A8C4 0062
1100E 0061
1100E 0041
1100E 0062
+11071 0021
+11071 003F
+11071 0061
+11071 0041
+11071 0062
1100F 0021
1100F 003F
1100F 0061
@@ -98218,6 +100786,11 @@ A8C4 0062
11010 0061
11010 0041
11010 0062
+11072 0021
+11072 003F
+11072 0061
+11072 0041
+11072 0062
11011 0021
11011 003F
11011 0061
@@ -98413,6 +100986,11 @@ A8C4 0062
11035 0061
11035 0041
11035 0062
+11075 0021
+11075 003F
+11075 0061
+11075 0041
+11075 0062
11036 0021
11036 003F
11036 0061
@@ -98473,6 +101051,11 @@ A8C4 0062
11041 0061
11041 0041
11041 0062
+11073 0021
+11073 003F
+11073 0061
+11073 0041
+11073 0062
11042 0021
11042 003F
11042 0061
@@ -98483,6 +101066,11 @@ A8C4 0062
11043 0061
11043 0041
11043 0062
+11074 0021
+11074 003F
+11074 0061
+11074 0041
+11074 0062
11044 0021
11044 003F
11044 0061
@@ -98507,6 +101095,12 @@ A8C4 0062
1107F 0061
1107F 0041
1107F 0062
+11070 0334
+11070 0021
+11070 003F
+11070 0061
+11070 0041
+11070 0062
10A00 0021
10A00 003F
10A00 0061
@@ -108259,6 +110853,16 @@ A873 0062
170C 0061
170C 0041
170C 0062
+170D 0021
+170D 003F
+170D 0061
+170D 0041
+170D 0062
+171F 0021
+171F 003F
+171F 0061
+171F 0041
+171F 0062
170E 0021
170E 003F
170E 0061
@@ -108296,6 +110900,12 @@ A873 0062
1714 0061
1714 0041
1714 0062
+1715 0334
+1715 0021
+1715 003F
+1715 0061
+1715 0041
+1715 0062
1720 0021
1720 003F
1720 0061
@@ -110196,6 +112806,11 @@ A9FA 0062
109D 0061
109D 0041
109D 0062
+1086 0021
+1086 003F
+1086 0061
+1086 0041
+1086 0062
1034 0021
1034 003F
1034 0061
@@ -110221,11 +112836,6 @@ A9E5 003F
A9E5 0061
A9E5 0041
A9E5 0062
-1086 0021
-1086 003F
-1086 0061
-1086 0041
-1086 0062
0334 1039
1039 0334
1039 0021
@@ -114052,6 +116662,11 @@ AA4D 0062
1B1A 0061
1B1A 0041
1B1A 0062
+1B4C 0021
+1B4C 003F
+1B4C 0061
+1B4C 0041
+1B4C 0062
1B1B 0021
1B1B 003F
1B1B 0061
@@ -120223,6 +122838,86 @@ ABBF 0062
18F5 0061
18F5 0041
18F5 0062
+11AB0 0021
+11AB0 003F
+11AB0 0061
+11AB0 0041
+11AB0 0062
+11AB1 0021
+11AB1 003F
+11AB1 0061
+11AB1 0041
+11AB1 0062
+11AB2 0021
+11AB2 003F
+11AB2 0061
+11AB2 0041
+11AB2 0062
+11AB3 0021
+11AB3 003F
+11AB3 0061
+11AB3 0041
+11AB3 0062
+11AB4 0021
+11AB4 003F
+11AB4 0061
+11AB4 0041
+11AB4 0062
+11AB5 0021
+11AB5 003F
+11AB5 0061
+11AB5 0041
+11AB5 0062
+11AB6 0021
+11AB6 003F
+11AB6 0061
+11AB6 0041
+11AB6 0062
+11AB7 0021
+11AB7 003F
+11AB7 0061
+11AB7 0041
+11AB7 0062
+11AB8 0021
+11AB8 003F
+11AB8 0061
+11AB8 0041
+11AB8 0062
+11AB9 0021
+11AB9 003F
+11AB9 0061
+11AB9 0041
+11AB9 0062
+11ABA 0021
+11ABA 003F
+11ABA 0061
+11ABA 0041
+11ABA 0062
+11ABB 0021
+11ABB 003F
+11ABB 0061
+11ABB 0041
+11ABB 0062
+11ABC 0021
+11ABC 003F
+11ABC 0061
+11ABC 0041
+11ABC 0062
+11ABD 0021
+11ABD 003F
+11ABD 0061
+11ABD 0041
+11ABD 0062
+11ABE 0021
+11ABE 003F
+11ABE 0061
+11ABE 0041
+11ABE 0062
+11ABF 0021
+11ABF 003F
+11ABF 0061
+11ABF 0041
+11ABF 0062
1681 0021
1681 003F
1681 0061
@@ -132688,6 +135383,11 @@ FF6C 0062
30E4 0062
FF94 0062
32F3 0062
+1B120 0021
+1B120 003F
+1B120 0061
+1B120 0041
+1B120 0062
3085 0021
3086 0021
30E5 0021
@@ -132728,6 +135428,11 @@ FF95 0062
3350 0061
3350 0041
3350 0062
+1B121 0021
+1B121 003F
+1B121 0061
+1B121 0041
+1B121 0062
3087 0021
3088 0021
30E7 0021
@@ -132999,6 +135704,16 @@ FF9C 0062
30F0 0062
32FC 0062
30F8 0062
+1B11F 0021
+1B122 0021
+1B11F 003F
+1B122 003F
+1B11F 0061
+1B11F 0041
+1B122 0061
+1B122 0041
+1B11F 0062
+1B122 0062
30F1 0334 3099
30F1 3099 0334
30F9 0334
@@ -143015,6 +145730,156 @@ A4F7 0062
1E14E 0061
1E14E 0041
1E14E 0062
+1E290 0021
+1E290 003F
+1E290 0061
+1E290 0041
+1E290 0062
+1E291 0021
+1E291 003F
+1E291 0061
+1E291 0041
+1E291 0062
+1E292 0021
+1E292 003F
+1E292 0061
+1E292 0041
+1E292 0062
+1E293 0021
+1E293 003F
+1E293 0061
+1E293 0041
+1E293 0062
+1E294 0021
+1E294 003F
+1E294 0061
+1E294 0041
+1E294 0062
+1E295 0021
+1E295 003F
+1E295 0061
+1E295 0041
+1E295 0062
+1E296 0021
+1E296 003F
+1E296 0061
+1E296 0041
+1E296 0062
+1E297 0021
+1E297 003F
+1E297 0061
+1E297 0041
+1E297 0062
+1E298 0021
+1E298 003F
+1E298 0061
+1E298 0041
+1E298 0062
+1E299 0021
+1E299 003F
+1E299 0061
+1E299 0041
+1E299 0062
+1E29A 0021
+1E29A 003F
+1E29A 0061
+1E29A 0041
+1E29A 0062
+1E29B 0021
+1E29B 003F
+1E29B 0061
+1E29B 0041
+1E29B 0062
+1E29C 0021
+1E29C 003F
+1E29C 0061
+1E29C 0041
+1E29C 0062
+1E29D 0021
+1E29D 003F
+1E29D 0061
+1E29D 0041
+1E29D 0062
+1E29E 0021
+1E29E 003F
+1E29E 0061
+1E29E 0041
+1E29E 0062
+1E29F 0021
+1E29F 003F
+1E29F 0061
+1E29F 0041
+1E29F 0062
+1E2A0 0021
+1E2A0 003F
+1E2A0 0061
+1E2A0 0041
+1E2A0 0062
+1E2A1 0021
+1E2A1 003F
+1E2A1 0061
+1E2A1 0041
+1E2A1 0062
+1E2A2 0021
+1E2A2 003F
+1E2A2 0061
+1E2A2 0041
+1E2A2 0062
+1E2A3 0021
+1E2A3 003F
+1E2A3 0061
+1E2A3 0041
+1E2A3 0062
+1E2A4 0021
+1E2A4 003F
+1E2A4 0061
+1E2A4 0041
+1E2A4 0062
+1E2A5 0021
+1E2A5 003F
+1E2A5 0061
+1E2A5 0041
+1E2A5 0062
+1E2A6 0021
+1E2A6 003F
+1E2A6 0061
+1E2A6 0041
+1E2A6 0062
+1E2A7 0021
+1E2A7 003F
+1E2A7 0061
+1E2A7 0041
+1E2A7 0062
+1E2A8 0021
+1E2A8 003F
+1E2A8 0061
+1E2A8 0041
+1E2A8 0062
+1E2A9 0021
+1E2A9 003F
+1E2A9 0061
+1E2A9 0041
+1E2A9 0062
+1E2AA 0021
+1E2AA 003F
+1E2AA 0061
+1E2AA 0041
+1E2AA 0062
+1E2AB 0021
+1E2AB 003F
+1E2AB 0061
+1E2AB 0041
+1E2AB 0062
+1E2AC 0021
+1E2AC 003F
+1E2AC 0061
+1E2AC 0041
+1E2AC 0062
+1E2AD 0021
+1E2AD 003F
+1E2AD 0061
+1E2AD 0041
+1E2AD 0062
1E2C0 0021
1E2C0 003F
1E2C0 0061
@@ -146010,6 +148875,356 @@ A4F7 0062
10563 0061
10563 0041
10563 0062
+10597 0021
+10570 0021
+10597 003F
+10570 003F
+10597 0061
+10597 0041
+10570 0061
+10570 0041
+10597 0062
+10570 0062
+10598 0021
+10571 0021
+10598 003F
+10571 003F
+10598 0061
+10598 0041
+10571 0061
+10571 0041
+10598 0062
+10571 0062
+10599 0021
+10572 0021
+10599 003F
+10572 003F
+10599 0061
+10599 0041
+10572 0061
+10572 0041
+10599 0062
+10572 0062
+1059A 0021
+10573 0021
+1059A 003F
+10573 003F
+1059A 0061
+1059A 0041
+10573 0061
+10573 0041
+1059A 0062
+10573 0062
+1059B 0021
+10574 0021
+1059B 003F
+10574 003F
+1059B 0061
+1059B 0041
+10574 0061
+10574 0041
+1059B 0062
+10574 0062
+1059C 0021
+10575 0021
+1059C 003F
+10575 003F
+1059C 0061
+1059C 0041
+10575 0061
+10575 0041
+1059C 0062
+10575 0062
+1059D 0021
+10576 0021
+1059D 003F
+10576 003F
+1059D 0061
+1059D 0041
+10576 0061
+10576 0041
+1059D 0062
+10576 0062
+1059E 0021
+10577 0021
+1059E 003F
+10577 003F
+1059E 0061
+1059E 0041
+10577 0061
+10577 0041
+1059E 0062
+10577 0062
+1059F 0021
+10578 0021
+1059F 003F
+10578 003F
+1059F 0061
+1059F 0041
+10578 0061
+10578 0041
+1059F 0062
+10578 0062
+105A0 0021
+10579 0021
+105A0 003F
+10579 003F
+105A0 0061
+105A0 0041
+10579 0061
+10579 0041
+105A0 0062
+10579 0062
+105A1 0021
+1057A 0021
+105A1 003F
+1057A 003F
+105A1 0061
+105A1 0041
+1057A 0061
+1057A 0041
+105A1 0062
+1057A 0062
+105A3 0021
+1057C 0021
+105A3 003F
+1057C 003F
+105A3 0061
+105A3 0041
+1057C 0061
+1057C 0041
+105A3 0062
+1057C 0062
+105A4 0021
+1057D 0021
+105A4 003F
+1057D 003F
+105A4 0061
+105A4 0041
+1057D 0061
+1057D 0041
+105A4 0062
+1057D 0062
+105A5 0021
+1057E 0021
+105A5 003F
+1057E 003F
+105A5 0061
+105A5 0041
+1057E 0061
+1057E 0041
+105A5 0062
+1057E 0062
+105A6 0021
+1057F 0021
+105A6 003F
+1057F 003F
+105A6 0061
+105A6 0041
+1057F 0061
+1057F 0041
+105A6 0062
+1057F 0062
+105A7 0021
+10580 0021
+105A7 003F
+10580 003F
+105A7 0061
+105A7 0041
+10580 0061
+10580 0041
+105A7 0062
+10580 0062
+105A8 0021
+10581 0021
+105A8 003F
+10581 003F
+105A8 0061
+105A8 0041
+10581 0061
+10581 0041
+105A8 0062
+10581 0062
+105A9 0021
+10582 0021
+105A9 003F
+10582 003F
+105A9 0061
+105A9 0041
+10582 0061
+10582 0041
+105A9 0062
+10582 0062
+105AA 0021
+10583 0021
+105AA 003F
+10583 003F
+105AA 0061
+105AA 0041
+10583 0061
+10583 0041
+105AA 0062
+10583 0062
+105AB 0021
+10584 0021
+105AB 003F
+10584 003F
+105AB 0061
+105AB 0041
+10584 0061
+10584 0041
+105AB 0062
+10584 0062
+105AC 0021
+10585 0021
+105AC 003F
+10585 003F
+105AC 0061
+105AC 0041
+10585 0061
+10585 0041
+105AC 0062
+10585 0062
+105AD 0021
+10586 0021
+105AD 003F
+10586 003F
+105AD 0061
+105AD 0041
+10586 0061
+10586 0041
+105AD 0062
+10586 0062
+105AE 0021
+10587 0021
+105AE 003F
+10587 003F
+105AE 0061
+105AE 0041
+10587 0061
+10587 0041
+105AE 0062
+10587 0062
+105AF 0021
+10588 0021
+105AF 003F
+10588 003F
+105AF 0061
+105AF 0041
+10588 0061
+10588 0041
+105AF 0062
+10588 0062
+105B0 0021
+10589 0021
+105B0 003F
+10589 003F
+105B0 0061
+105B0 0041
+10589 0061
+10589 0041
+105B0 0062
+10589 0062
+105B1 0021
+1058A 0021
+105B1 003F
+1058A 003F
+105B1 0061
+105B1 0041
+1058A 0061
+1058A 0041
+105B1 0062
+1058A 0062
+105B3 0021
+1058C 0021
+105B3 003F
+1058C 003F
+105B3 0061
+105B3 0041
+1058C 0061
+1058C 0041
+105B3 0062
+1058C 0062
+105B4 0021
+1058D 0021
+105B4 003F
+1058D 003F
+105B4 0061
+105B4 0041
+1058D 0061
+1058D 0041
+105B4 0062
+1058D 0062
+105B5 0021
+1058E 0021
+105B5 003F
+1058E 003F
+105B5 0061
+105B5 0041
+1058E 0061
+1058E 0041
+105B5 0062
+1058E 0062
+105B6 0021
+1058F 0021
+105B6 003F
+1058F 003F
+105B6 0061
+105B6 0041
+1058F 0061
+1058F 0041
+105B6 0062
+1058F 0062
+105B7 0021
+10590 0021
+105B7 003F
+10590 003F
+105B7 0061
+105B7 0041
+10590 0061
+10590 0041
+105B7 0062
+10590 0062
+105B8 0021
+10591 0021
+105B8 003F
+10591 003F
+105B8 0061
+105B8 0041
+10591 0061
+10591 0041
+105B8 0062
+10591 0062
+105B9 0021
+10592 0021
+105B9 003F
+10592 003F
+105B9 0061
+105B9 0041
+10592 0061
+10592 0041
+105B9 0062
+10592 0062
+105BB 0021
+10594 0021
+105BB 003F
+10594 003F
+105BB 0061
+105BB 0041
+10594 0061
+10594 0041
+105BB 0062
+10594 0062
+105BC 0021
+10595 0021
+105BC 003F
+10595 003F
+105BC 0061
+105BC 0041
+10595 0061
+10595 0041
+105BC 0062
+10595 0062
110D0 0021
110D0 003F
110D0 0061
@@ -146290,6 +149505,401 @@ A4F7 0062
16A5E 0061
16A5E 0041
16A5E 0062
+16A70 0021
+16A70 003F
+16A70 0061
+16A70 0041
+16A70 0062
+16A71 0021
+16A71 003F
+16A71 0061
+16A71 0041
+16A71 0062
+16A72 0021
+16A72 003F
+16A72 0061
+16A72 0041
+16A72 0062
+16A73 0021
+16A73 003F
+16A73 0061
+16A73 0041
+16A73 0062
+16A74 0021
+16A74 003F
+16A74 0061
+16A74 0041
+16A74 0062
+16A75 0021
+16A75 003F
+16A75 0061
+16A75 0041
+16A75 0062
+16A76 0021
+16A76 003F
+16A76 0061
+16A76 0041
+16A76 0062
+16A77 0021
+16A77 003F
+16A77 0061
+16A77 0041
+16A77 0062
+16A78 0021
+16A78 003F
+16A78 0061
+16A78 0041
+16A78 0062
+16A79 0021
+16A79 003F
+16A79 0061
+16A79 0041
+16A79 0062
+16A7A 0021
+16A7A 003F
+16A7A 0061
+16A7A 0041
+16A7A 0062
+16A7B 0021
+16A7B 003F
+16A7B 0061
+16A7B 0041
+16A7B 0062
+16A7C 0021
+16A7C 003F
+16A7C 0061
+16A7C 0041
+16A7C 0062
+16A7D 0021
+16A7D 003F
+16A7D 0061
+16A7D 0041
+16A7D 0062
+16A7E 0021
+16A7E 003F
+16A7E 0061
+16A7E 0041
+16A7E 0062
+16A7F 0021
+16A7F 003F
+16A7F 0061
+16A7F 0041
+16A7F 0062
+16A80 0021
+16A80 003F
+16A80 0061
+16A80 0041
+16A80 0062
+16A81 0021
+16A81 003F
+16A81 0061
+16A81 0041
+16A81 0062
+16A82 0021
+16A82 003F
+16A82 0061
+16A82 0041
+16A82 0062
+16A83 0021
+16A83 003F
+16A83 0061
+16A83 0041
+16A83 0062
+16A84 0021
+16A84 003F
+16A84 0061
+16A84 0041
+16A84 0062
+16A85 0021
+16A85 003F
+16A85 0061
+16A85 0041
+16A85 0062
+16A86 0021
+16A86 003F
+16A86 0061
+16A86 0041
+16A86 0062
+16A87 0021
+16A87 003F
+16A87 0061
+16A87 0041
+16A87 0062
+16A88 0021
+16A88 003F
+16A88 0061
+16A88 0041
+16A88 0062
+16A89 0021
+16A89 003F
+16A89 0061
+16A89 0041
+16A89 0062
+16A8A 0021
+16A8A 003F
+16A8A 0061
+16A8A 0041
+16A8A 0062
+16A8B 0021
+16A8B 003F
+16A8B 0061
+16A8B 0041
+16A8B 0062
+16A8C 0021
+16A8C 003F
+16A8C 0061
+16A8C 0041
+16A8C 0062
+16A8D 0021
+16A8D 003F
+16A8D 0061
+16A8D 0041
+16A8D 0062
+16A8E 0021
+16A8E 003F
+16A8E 0061
+16A8E 0041
+16A8E 0062
+16A8F 0021
+16A8F 003F
+16A8F 0061
+16A8F 0041
+16A8F 0062
+16A90 0021
+16A90 003F
+16A90 0061
+16A90 0041
+16A90 0062
+16A91 0021
+16A91 003F
+16A91 0061
+16A91 0041
+16A91 0062
+16A92 0021
+16A92 003F
+16A92 0061
+16A92 0041
+16A92 0062
+16A93 0021
+16A93 003F
+16A93 0061
+16A93 0041
+16A93 0062
+16A94 0021
+16A94 003F
+16A94 0061
+16A94 0041
+16A94 0062
+16A95 0021
+16A95 003F
+16A95 0061
+16A95 0041
+16A95 0062
+16A96 0021
+16A96 003F
+16A96 0061
+16A96 0041
+16A96 0062
+16A97 0021
+16A97 003F
+16A97 0061
+16A97 0041
+16A97 0062
+16A98 0021
+16A98 003F
+16A98 0061
+16A98 0041
+16A98 0062
+16A99 0021
+16A99 003F
+16A99 0061
+16A99 0041
+16A99 0062
+16A9A 0021
+16A9A 003F
+16A9A 0061
+16A9A 0041
+16A9A 0062
+16A9B 0021
+16A9B 003F
+16A9B 0061
+16A9B 0041
+16A9B 0062
+16A9C 0021
+16A9C 003F
+16A9C 0061
+16A9C 0041
+16A9C 0062
+16A9D 0021
+16A9D 003F
+16A9D 0061
+16A9D 0041
+16A9D 0062
+16A9E 0021
+16A9E 003F
+16A9E 0061
+16A9E 0041
+16A9E 0062
+16A9F 0021
+16A9F 003F
+16A9F 0061
+16A9F 0041
+16A9F 0062
+16AA0 0021
+16AA0 003F
+16AA0 0061
+16AA0 0041
+16AA0 0062
+16AA1 0021
+16AA1 003F
+16AA1 0061
+16AA1 0041
+16AA1 0062
+16AA2 0021
+16AA2 003F
+16AA2 0061
+16AA2 0041
+16AA2 0062
+16AA3 0021
+16AA3 003F
+16AA3 0061
+16AA3 0041
+16AA3 0062
+16AA4 0021
+16AA4 003F
+16AA4 0061
+16AA4 0041
+16AA4 0062
+16AA5 0021
+16AA5 003F
+16AA5 0061
+16AA5 0041
+16AA5 0062
+16AA6 0021
+16AA6 003F
+16AA6 0061
+16AA6 0041
+16AA6 0062
+16AA7 0021
+16AA7 003F
+16AA7 0061
+16AA7 0041
+16AA7 0062
+16AA8 0021
+16AA8 003F
+16AA8 0061
+16AA8 0041
+16AA8 0062
+16AA9 0021
+16AA9 003F
+16AA9 0061
+16AA9 0041
+16AA9 0062
+16AAA 0021
+16AAA 003F
+16AAA 0061
+16AAA 0041
+16AAA 0062
+16AAB 0021
+16AAB 003F
+16AAB 0061
+16AAB 0041
+16AAB 0062
+16AAC 0021
+16AAC 003F
+16AAC 0061
+16AAC 0041
+16AAC 0062
+16AAD 0021
+16AAD 003F
+16AAD 0061
+16AAD 0041
+16AAD 0062
+16AAE 0021
+16AAE 003F
+16AAE 0061
+16AAE 0041
+16AAE 0062
+16AAF 0021
+16AAF 003F
+16AAF 0061
+16AAF 0041
+16AAF 0062
+16AB0 0021
+16AB0 003F
+16AB0 0061
+16AB0 0041
+16AB0 0062
+16AB1 0021
+16AB1 003F
+16AB1 0061
+16AB1 0041
+16AB1 0062
+16AB2 0021
+16AB2 003F
+16AB2 0061
+16AB2 0041
+16AB2 0062
+16AB3 0021
+16AB3 003F
+16AB3 0061
+16AB3 0041
+16AB3 0062
+16AB4 0021
+16AB4 003F
+16AB4 0061
+16AB4 0041
+16AB4 0062
+16AB5 0021
+16AB5 003F
+16AB5 0061
+16AB5 0041
+16AB5 0062
+16AB6 0021
+16AB6 003F
+16AB6 0061
+16AB6 0041
+16AB6 0062
+16AB7 0021
+16AB7 003F
+16AB7 0061
+16AB7 0041
+16AB7 0062
+16AB8 0021
+16AB8 003F
+16AB8 0061
+16AB8 0041
+16AB8 0062
+16AB9 0021
+16AB9 003F
+16AB9 0061
+16AB9 0041
+16AB9 0062
+16ABA 0021
+16ABA 003F
+16ABA 0061
+16ABA 0041
+16ABA 0062
+16ABB 0021
+16ABB 003F
+16ABB 0061
+16ABB 0041
+16ABB 0062
+16ABC 0021
+16ABC 003F
+16ABC 0061
+16ABC 0041
+16ABC 0062
+16ABD 0021
+16ABD 003F
+16ABD 0061
+16ABD 0041
+16ABD 0062
+16ABE 0021
+16ABE 003F
+16ABE 0061
+16ABE 0041
+16ABE 0062
10000 0021
10000 003F
10000 0061
@@ -149325,6 +152935,491 @@ A4F7 0062
1083F 0061
1083F 0041
1083F 0062
+12F90 0021
+12F90 003F
+12F90 0061
+12F90 0041
+12F90 0062
+12F91 0021
+12F91 003F
+12F91 0061
+12F91 0041
+12F91 0062
+12F92 0021
+12F92 003F
+12F92 0061
+12F92 0041
+12F92 0062
+12F93 0021
+12F93 003F
+12F93 0061
+12F93 0041
+12F93 0062
+12F94 0021
+12F94 003F
+12F94 0061
+12F94 0041
+12F94 0062
+12F95 0021
+12F95 003F
+12F95 0061
+12F95 0041
+12F95 0062
+12F96 0021
+12F96 003F
+12F96 0061
+12F96 0041
+12F96 0062
+12F97 0021
+12F97 003F
+12F97 0061
+12F97 0041
+12F97 0062
+12F98 0021
+12F98 003F
+12F98 0061
+12F98 0041
+12F98 0062
+12F99 0021
+12F99 003F
+12F99 0061
+12F99 0041
+12F99 0062
+12F9A 0021
+12F9A 003F
+12F9A 0061
+12F9A 0041
+12F9A 0062
+12F9B 0021
+12F9B 003F
+12F9B 0061
+12F9B 0041
+12F9B 0062
+12F9C 0021
+12F9C 003F
+12F9C 0061
+12F9C 0041
+12F9C 0062
+12F9D 0021
+12F9D 003F
+12F9D 0061
+12F9D 0041
+12F9D 0062
+12F9E 0021
+12F9E 003F
+12F9E 0061
+12F9E 0041
+12F9E 0062
+12F9F 0021
+12F9F 003F
+12F9F 0061
+12F9F 0041
+12F9F 0062
+12FA0 0021
+12FA0 003F
+12FA0 0061
+12FA0 0041
+12FA0 0062
+12FA1 0021
+12FA1 003F
+12FA1 0061
+12FA1 0041
+12FA1 0062
+12FA2 0021
+12FA2 003F
+12FA2 0061
+12FA2 0041
+12FA2 0062
+12FA3 0021
+12FA3 003F
+12FA3 0061
+12FA3 0041
+12FA3 0062
+12FA4 0021
+12FA4 003F
+12FA4 0061
+12FA4 0041
+12FA4 0062
+12FA5 0021
+12FA5 003F
+12FA5 0061
+12FA5 0041
+12FA5 0062
+12FA6 0021
+12FA6 003F
+12FA6 0061
+12FA6 0041
+12FA6 0062
+12FA7 0021
+12FA7 003F
+12FA7 0061
+12FA7 0041
+12FA7 0062
+12FA8 0021
+12FA8 003F
+12FA8 0061
+12FA8 0041
+12FA8 0062
+12FA9 0021
+12FA9 003F
+12FA9 0061
+12FA9 0041
+12FA9 0062
+12FAA 0021
+12FAA 003F
+12FAA 0061
+12FAA 0041
+12FAA 0062
+12FAB 0021
+12FAB 003F
+12FAB 0061
+12FAB 0041
+12FAB 0062
+12FAC 0021
+12FAC 003F
+12FAC 0061
+12FAC 0041
+12FAC 0062
+12FAD 0021
+12FAD 003F
+12FAD 0061
+12FAD 0041
+12FAD 0062
+12FAE 0021
+12FAE 003F
+12FAE 0061
+12FAE 0041
+12FAE 0062
+12FAF 0021
+12FAF 003F
+12FAF 0061
+12FAF 0041
+12FAF 0062
+12FB0 0021
+12FB0 003F
+12FB0 0061
+12FB0 0041
+12FB0 0062
+12FB1 0021
+12FB1 003F
+12FB1 0061
+12FB1 0041
+12FB1 0062
+12FB2 0021
+12FB2 003F
+12FB2 0061
+12FB2 0041
+12FB2 0062
+12FB3 0021
+12FB3 003F
+12FB3 0061
+12FB3 0041
+12FB3 0062
+12FB4 0021
+12FB4 003F
+12FB4 0061
+12FB4 0041
+12FB4 0062
+12FB5 0021
+12FB5 003F
+12FB5 0061
+12FB5 0041
+12FB5 0062
+12FB6 0021
+12FB6 003F
+12FB6 0061
+12FB6 0041
+12FB6 0062
+12FB7 0021
+12FB7 003F
+12FB7 0061
+12FB7 0041
+12FB7 0062
+12FB8 0021
+12FB8 003F
+12FB8 0061
+12FB8 0041
+12FB8 0062
+12FB9 0021
+12FB9 003F
+12FB9 0061
+12FB9 0041
+12FB9 0062
+12FBA 0021
+12FBA 003F
+12FBA 0061
+12FBA 0041
+12FBA 0062
+12FBB 0021
+12FBB 003F
+12FBB 0061
+12FBB 0041
+12FBB 0062
+12FBC 0021
+12FBC 003F
+12FBC 0061
+12FBC 0041
+12FBC 0062
+12FBD 0021
+12FBD 003F
+12FBD 0061
+12FBD 0041
+12FBD 0062
+12FBE 0021
+12FBE 003F
+12FBE 0061
+12FBE 0041
+12FBE 0062
+12FBF 0021
+12FBF 003F
+12FBF 0061
+12FBF 0041
+12FBF 0062
+12FC0 0021
+12FC0 003F
+12FC0 0061
+12FC0 0041
+12FC0 0062
+12FC1 0021
+12FC1 003F
+12FC1 0061
+12FC1 0041
+12FC1 0062
+12FC2 0021
+12FC2 003F
+12FC2 0061
+12FC2 0041
+12FC2 0062
+12FC3 0021
+12FC3 003F
+12FC3 0061
+12FC3 0041
+12FC3 0062
+12FC4 0021
+12FC4 003F
+12FC4 0061
+12FC4 0041
+12FC4 0062
+12FC5 0021
+12FC5 003F
+12FC5 0061
+12FC5 0041
+12FC5 0062
+12FC6 0021
+12FC6 003F
+12FC6 0061
+12FC6 0041
+12FC6 0062
+12FC7 0021
+12FC7 003F
+12FC7 0061
+12FC7 0041
+12FC7 0062
+12FC8 0021
+12FC8 003F
+12FC8 0061
+12FC8 0041
+12FC8 0062
+12FC9 0021
+12FC9 003F
+12FC9 0061
+12FC9 0041
+12FC9 0062
+12FCA 0021
+12FCA 003F
+12FCA 0061
+12FCA 0041
+12FCA 0062
+12FCB 0021
+12FCB 003F
+12FCB 0061
+12FCB 0041
+12FCB 0062
+12FCC 0021
+12FCC 003F
+12FCC 0061
+12FCC 0041
+12FCC 0062
+12FCD 0021
+12FCD 003F
+12FCD 0061
+12FCD 0041
+12FCD 0062
+12FCE 0021
+12FCE 003F
+12FCE 0061
+12FCE 0041
+12FCE 0062
+12FCF 0021
+12FCF 003F
+12FCF 0061
+12FCF 0041
+12FCF 0062
+12FD0 0021
+12FD0 003F
+12FD0 0061
+12FD0 0041
+12FD0 0062
+12FD1 0021
+12FD1 003F
+12FD1 0061
+12FD1 0041
+12FD1 0062
+12FD2 0021
+12FD2 003F
+12FD2 0061
+12FD2 0041
+12FD2 0062
+12FD3 0021
+12FD3 003F
+12FD3 0061
+12FD3 0041
+12FD3 0062
+12FD4 0021
+12FD4 003F
+12FD4 0061
+12FD4 0041
+12FD4 0062
+12FD5 0021
+12FD5 003F
+12FD5 0061
+12FD5 0041
+12FD5 0062
+12FD6 0021
+12FD6 003F
+12FD6 0061
+12FD6 0041
+12FD6 0062
+12FD7 0021
+12FD7 003F
+12FD7 0061
+12FD7 0041
+12FD7 0062
+12FD8 0021
+12FD8 003F
+12FD8 0061
+12FD8 0041
+12FD8 0062
+12FD9 0021
+12FD9 003F
+12FD9 0061
+12FD9 0041
+12FD9 0062
+12FDA 0021
+12FDA 003F
+12FDA 0061
+12FDA 0041
+12FDA 0062
+12FDB 0021
+12FDB 003F
+12FDB 0061
+12FDB 0041
+12FDB 0062
+12FDC 0021
+12FDC 003F
+12FDC 0061
+12FDC 0041
+12FDC 0062
+12FDD 0021
+12FDD 003F
+12FDD 0061
+12FDD 0041
+12FDD 0062
+12FDE 0021
+12FDE 003F
+12FDE 0061
+12FDE 0041
+12FDE 0062
+12FDF 0021
+12FDF 003F
+12FDF 0061
+12FDF 0041
+12FDF 0062
+12FE0 0021
+12FE0 003F
+12FE0 0061
+12FE0 0041
+12FE0 0062
+12FE1 0021
+12FE1 003F
+12FE1 0061
+12FE1 0041
+12FE1 0062
+12FE2 0021
+12FE2 003F
+12FE2 0061
+12FE2 0041
+12FE2 0062
+12FE3 0021
+12FE3 003F
+12FE3 0061
+12FE3 0041
+12FE3 0062
+12FE4 0021
+12FE4 003F
+12FE4 0061
+12FE4 0041
+12FE4 0062
+12FE5 0021
+12FE5 003F
+12FE5 0061
+12FE5 0041
+12FE5 0062
+12FE6 0021
+12FE6 003F
+12FE6 0061
+12FE6 0041
+12FE6 0062
+12FE7 0021
+12FE7 003F
+12FE7 0061
+12FE7 0041
+12FE7 0062
+12FE8 0021
+12FE8 003F
+12FE8 0061
+12FE8 0041
+12FE8 0062
+12FE9 0021
+12FE9 003F
+12FE9 0061
+12FE9 0041
+12FE9 0062
+12FEA 0021
+12FEA 003F
+12FEA 0061
+12FEA 0041
+12FEA 0062
+12FEB 0021
+12FEB 003F
+12FEB 0061
+12FEB 0041
+12FEB 0062
+12FEC 0021
+12FEC 003F
+12FEC 0061
+12FEC 0041
+12FEC 0062
+12FED 0021
+12FED 003F
+12FED 0061
+12FED 0041
+12FED 0062
+12FEE 0021
+12FEE 003F
+12FEE 0061
+12FEE 0041
+12FEE 0062
+12FEF 0021
+12FEF 003F
+12FEF 0061
+12FEF 0041
+12FEF 0062
+12FF0 0021
+12FF0 003F
+12FF0 0061
+12FF0 0041
+12FF0 0062
10A60 0021
10A60 003F
10A60 0061
@@ -151225,6 +155320,96 @@ A4F7 0062
10F44 0061
10F44 0041
10F44 0062
+10F70 0021
+10F70 003F
+10F70 0061
+10F70 0041
+10F70 0062
+10F71 0021
+10F71 003F
+10F71 0061
+10F71 0041
+10F71 0062
+10F72 0021
+10F72 003F
+10F72 0061
+10F72 0041
+10F72 0062
+10F73 0021
+10F73 003F
+10F73 0061
+10F73 0041
+10F73 0062
+10F74 0021
+10F74 003F
+10F74 0061
+10F74 0041
+10F74 0062
+10F75 0021
+10F75 003F
+10F75 0061
+10F75 0041
+10F75 0062
+10F76 0021
+10F76 003F
+10F76 0061
+10F76 0041
+10F76 0062
+10F77 0021
+10F77 003F
+10F77 0061
+10F77 0041
+10F77 0062
+10F78 0021
+10F78 003F
+10F78 0061
+10F78 0041
+10F78 0062
+10F79 0021
+10F79 003F
+10F79 0061
+10F79 0041
+10F79 0062
+10F7A 0021
+10F7A 003F
+10F7A 0061
+10F7A 0041
+10F7A 0062
+10F7B 0021
+10F7B 003F
+10F7B 0061
+10F7B 0041
+10F7B 0062
+10F7C 0021
+10F7C 003F
+10F7C 0061
+10F7C 0041
+10F7C 0062
+10F7D 0021
+10F7D 003F
+10F7D 0061
+10F7D 0041
+10F7D 0062
+10F7E 0021
+10F7E 003F
+10F7E 0061
+10F7E 0041
+10F7E 0062
+10F7F 0021
+10F7F 003F
+10F7F 0061
+10F7F 0041
+10F7F 0062
+10F80 0021
+10F80 003F
+10F80 0061
+10F80 0041
+10F80 0062
+10F81 0021
+10F81 003F
+10F81 0061
+10F81 0041
+10F81 0062
10E80 0021
10E80 003F
10E80 0061
@@ -172210,11 +176395,6 @@ FACE 0062
0378 0061
0378 0041
0378 0062
-9FFD 0021
-9FFD 003F
-9FFD 0061
-9FFD 0041
-9FFD 0062
D800 0021
D800 003F
D800 0061
@@ -172340,16 +176520,16 @@ FFF0 0062
1FFFF 0061
1FFFF 0041
1FFFF 0062
-2A6DE 0021
-2A6DE 003F
-2A6DE 0061
-2A6DE 0041
-2A6DE 0062
-2B735 0021
-2B735 003F
-2B735 0061
-2B735 0041
-2B735 0062
+2A6E0 0021
+2A6E0 003F
+2A6E0 0061
+2A6E0 0041
+2A6E0 0062
+2B739 0021
+2B739 003F
+2B739 0061
+2B739 0041
+2B739 0062
2B81E 0021
2B81E 003F
2B81E 0061
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt b/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
index 99cc92cde93..9b53c26b757 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
@@ -1,10 +1,10 @@
# CollationTest_CLDR_SHIFTED_SHORT.txt
-# Date: 2020-02-12, 17:50:42 GMT
-# © 2020 Unicode®, Inc.
+# Date: 2021-08-17, 17:34:28 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
-# UCA Version: 13.0.0
-# UCD Version: 13.0.0
+# UCA Version: 14.0.0
+# UCD Version: 14.0.0
# For a description of the format and usage, see
# http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Data_Files
@@ -130,6 +130,8 @@ FE58 003F
2E17 003F
2E40 0021
2E40 003F
+2E5D 0021
+2E5D 003F
301C 0021
301C 003F
3030 0021
@@ -452,6 +454,23 @@ A6F4 003F
0749 0021
074A 0021
07FA 0021
+0890 0021
+0891 0021
+0898 0021
+0899 0021
+089A 0021
+089B 0021
+089C 0021
+089D 0021
+08CA 0021
+08CB 0021
+08CC 0021
+08CD 0021
+08CE 0021
+08CF 0021
+08D0 0021
+08D1 0021
+08D2 0021
08D3 0021
08D4 0021
08D5 0021
@@ -496,6 +515,7 @@ A6F4 003F
180C 0021
180D 0021
180E 0021
+180F 0021
1A7F 0021
1B6B 0021
1B6C 0021
@@ -643,6 +663,75 @@ FFFB 0021
1BCA1 0021
1BCA2 0021
1BCA3 0021
+1CF00 0021
+1CF01 0021
+1CF02 0021
+1CF03 0021
+1CF04 0021
+1CF05 0021
+1CF06 0021
+1CF07 0021
+1CF08 0021
+1CF09 0021
+1CF0A 0021
+1CF0B 0021
+1CF0C 0021
+1CF0D 0021
+1CF0E 0021
+1CF0F 0021
+1CF10 0021
+1CF11 0021
+1CF12 0021
+1CF13 0021
+1CF14 0021
+1CF15 0021
+1CF16 0021
+1CF17 0021
+1CF18 0021
+1CF19 0021
+1CF1A 0021
+1CF1B 0021
+1CF1C 0021
+1CF1D 0021
+1CF1E 0021
+1CF1F 0021
+1CF20 0021
+1CF21 0021
+1CF22 0021
+1CF23 0021
+1CF24 0021
+1CF25 0021
+1CF26 0021
+1CF27 0021
+1CF28 0021
+1CF29 0021
+1CF2A 0021
+1CF2B 0021
+1CF2C 0021
+1CF2D 0021
+1CF30 0021
+1CF31 0021
+1CF32 0021
+1CF33 0021
+1CF34 0021
+1CF35 0021
+1CF36 0021
+1CF37 0021
+1CF38 0021
+1CF39 0021
+1CF3A 0021
+1CF3B 0021
+1CF3C 0021
+1CF3D 0021
+1CF3E 0021
+1CF3F 0021
+1CF40 0021
+1CF41 0021
+1CF42 0021
+1CF43 0021
+1CF44 0021
+1CF45 0021
+1CF46 0021
1D165 0021
1D166 0021
1D167 0021
@@ -1169,6 +1258,8 @@ FF01 003F
2049 003F
00A1 0021
00A1 003F
+2E53 0021
+2E53 003F
055C 0021
055C 003F
07F9 0021
@@ -1323,6 +1414,23 @@ FF01 003F
0749 003F
074A 003F
07FA 003F
+0890 003F
+0891 003F
+0898 003F
+0899 003F
+089A 003F
+089B 003F
+089C 003F
+089D 003F
+08CA 003F
+08CB 003F
+08CC 003F
+08CD 003F
+08CE 003F
+08CF 003F
+08D0 003F
+08D1 003F
+08D2 003F
08D3 003F
08D4 003F
08D5 003F
@@ -1367,6 +1475,7 @@ FF01 003F
180C 003F
180D 003F
180E 003F
+180F 003F
1A7F 003F
1B6B 003F
1B6C 003F
@@ -1514,6 +1623,75 @@ FFFB 003F
1BCA1 003F
1BCA2 003F
1BCA3 003F
+1CF00 003F
+1CF01 003F
+1CF02 003F
+1CF03 003F
+1CF04 003F
+1CF05 003F
+1CF06 003F
+1CF07 003F
+1CF08 003F
+1CF09 003F
+1CF0A 003F
+1CF0B 003F
+1CF0C 003F
+1CF0D 003F
+1CF0E 003F
+1CF0F 003F
+1CF10 003F
+1CF11 003F
+1CF12 003F
+1CF13 003F
+1CF14 003F
+1CF15 003F
+1CF16 003F
+1CF17 003F
+1CF18 003F
+1CF19 003F
+1CF1A 003F
+1CF1B 003F
+1CF1C 003F
+1CF1D 003F
+1CF1E 003F
+1CF1F 003F
+1CF20 003F
+1CF21 003F
+1CF22 003F
+1CF23 003F
+1CF24 003F
+1CF25 003F
+1CF26 003F
+1CF27 003F
+1CF28 003F
+1CF29 003F
+1CF2A 003F
+1CF2B 003F
+1CF2C 003F
+1CF2D 003F
+1CF30 003F
+1CF31 003F
+1CF32 003F
+1CF33 003F
+1CF34 003F
+1CF35 003F
+1CF36 003F
+1CF37 003F
+1CF38 003F
+1CF39 003F
+1CF3A 003F
+1CF3B 003F
+1CF3C 003F
+1CF3D 003F
+1CF3E 003F
+1CF3F 003F
+1CF40 003F
+1CF41 003F
+1CF42 003F
+1CF43 003F
+1CF44 003F
+1CF45 003F
+1CF46 003F
1D165 003F
1D166 003F
1D167 003F
@@ -2042,6 +2220,8 @@ FF1F 003F
00BF 003F
2E2E 0021
2E2E 003F
+2E54 0021
+2E54 003F
055E 0021
055E 003F
061F 0021
@@ -2278,6 +2458,8 @@ ABEB 003F
1C7E 003F
1C7F 0021
1C7F 003F
+061D 0021
+061D 003F
0700 0021
0700 003F
07F7 0021
@@ -2296,6 +2478,10 @@ ABEB 003F
1B5A 003F
1B5B 0021
1B5B 003F
+1B7D 0021
+1B7D 003F
+1B7E 0021
+1B7E 003F
A9C1 0021
A9C1 003F
A9C2 0021
@@ -2356,6 +2542,18 @@ A95F 003F
10F59 0334
10F59 0021
10F59 003F
+10F86 0334
+10F86 0021
+10F86 003F
+10F87 0334
+10F87 0021
+10F87 003F
+10F88 0334
+10F88 0021
+10F88 003F
+10F89 0334
+10F89 0021
+10F89 003F
110BE 0334
110BE 0021
110BE 003F
@@ -2459,6 +2657,12 @@ A95F 003F
12474 0334
12474 0021
12474 003F
+12FF1 0334
+12FF1 0021
+12FF1 003F
+12FF2 0334
+12FF2 0021
+12FF2 003F
0027 0021
FF07 0021
0027 003F
@@ -2719,6 +2923,22 @@ FF60 003F
2E28 003F
2E29 0021
2E29 003F
+2E55 0021
+2E55 003F
+2E56 0021
+2E56 003F
+2E57 0021
+2E57 003F
+2E58 0021
+2E58 003F
+2E59 0021
+2E59 003F
+2E5A 0021
+2E5A 003F
+2E5B 0021
+2E5B 003F
+2E5C 0021
+2E5C 003F
2329 0021
3008 0021
FE3F 0021
@@ -3479,6 +3699,9 @@ AA5C 003F
11643 0334
11643 0021
11643 003F
+116B9 0334
+116B9 0021
+116B9 003F
1183B 0334
1183B 0021
1183B 003F
@@ -3629,6 +3852,14 @@ AA5C 003F
1AB4 0021
1ABB 0021
1ABC 0021
+1AC1 0021
+1AC2 0021
+1AC5 0021
+1AC6 0021
+1AC7 0021
+1AC8 0021
+1AC9 0021
+1ACB 0021
1DC0 0021
1DC1 0021
1DC3 0021
@@ -3662,7 +3893,10 @@ A67D 0021
10F49 0021
10F4A 0021
10F4C 0021
+10F82 0021
+10F84 0021
1BC9D 0021
+1E2AE 0021
030D 003F
030E 003F
0312 003F
@@ -3702,6 +3936,14 @@ A67D 0021
1AB4 003F
1ABB 003F
1ABC 003F
+1AC1 003F
+1AC2 003F
+1AC5 003F
+1AC6 003F
+1AC7 003F
+1AC8 003F
+1AC9 003F
+1ACB 003F
1DC0 003F
1DC1 003F
1DC3 003F
@@ -3735,7 +3977,10 @@ A67D 003F
10F49 003F
10F4A 003F
10F4C 003F
+10F82 003F
+10F84 003F
1BC9D 003F
+1E2AE 003F
1BC9D 0334
0316 0021
0317 0021
@@ -3782,10 +4027,14 @@ A67D 003F
1AB9 0021
1ABA 0021
1ABD 0021
+1AC3 0021
+1AC4 0021
+1ACA 0021
1DC2 0021
1DCF 0021
1DD0 0021
1DF9 0021
+1DFA 0021
1DFC 0021
1DFD 0021
1DFF 0021
@@ -3803,6 +4052,8 @@ FE27 0021
10F4E 0021
10F4F 0021
10F50 0021
+10F83 0021
+10F85 0021
0316 003F
0317 003F
0318 003F
@@ -3848,10 +4099,14 @@ FE27 0021
1AB9 003F
1ABA 003F
1ABD 003F
+1AC3 003F
+1AC4 003F
+1ACA 003F
1DC2 003F
1DCF 003F
1DD0 003F
1DF9 003F
+1DFA 003F
1DFC 003F
1DFD 003F
1DFF 003F
@@ -3869,6 +4124,8 @@ FE27 003F
10F4E 003F
10F4F 003F
10F50 003F
+10F83 003F
+10F85 003F
0336 0021
0337 0021
20D8 0021
@@ -4097,6 +4354,21 @@ FF9F 003F
0749 0334
0334 074A
074A 0334
+0898 0334
+0899 0334
+089A 0334
+089B 0334
+089C 0334
+089D 0334
+08CA 0334
+08CB 0334
+08CC 0334
+08CD 0334
+08CE 0334
+08CF 0334
+08D0 0334
+08D1 0334
+08D2 0334
0334 08D3
08D3 0334
0334 08D4
@@ -4403,6 +4675,75 @@ FE2F 0334
1BCA1 0334
1BCA2 0334
1BCA3 0334
+1CF00 0334
+1CF01 0334
+1CF02 0334
+1CF03 0334
+1CF04 0334
+1CF05 0334
+1CF06 0334
+1CF07 0334
+1CF08 0334
+1CF09 0334
+1CF0A 0334
+1CF0B 0334
+1CF0C 0334
+1CF0D 0334
+1CF0E 0334
+1CF0F 0334
+1CF10 0334
+1CF11 0334
+1CF12 0334
+1CF13 0334
+1CF14 0334
+1CF15 0334
+1CF16 0334
+1CF17 0334
+1CF18 0334
+1CF19 0334
+1CF1A 0334
+1CF1B 0334
+1CF1C 0334
+1CF1D 0334
+1CF1E 0334
+1CF1F 0334
+1CF20 0334
+1CF21 0334
+1CF22 0334
+1CF23 0334
+1CF24 0334
+1CF25 0334
+1CF26 0334
+1CF27 0334
+1CF28 0334
+1CF29 0334
+1CF2A 0334
+1CF2B 0334
+1CF2C 0334
+1CF2D 0334
+1CF30 0334
+1CF31 0334
+1CF32 0334
+1CF33 0334
+1CF34 0334
+1CF35 0334
+1CF36 0334
+1CF37 0334
+1CF38 0334
+1CF39 0334
+1CF3A 0334
+1CF3B 0334
+1CF3C 0334
+1CF3D 0334
+1CF3E 0334
+1CF3F 0334
+1CF40 0334
+1CF41 0334
+1CF42 0334
+1CF43 0334
+1CF44 0334
+1CF45 0334
+1CF46 0334
1D167 0334
1D168 0334
1D169 0334
@@ -4998,6 +5339,14 @@ E01EF 0334
1ABB 0334
0334 1ABC
1ABC 0334
+1AC1 0334
+1AC2 0334
+1AC5 0334
+1AC6 0334
+1AC7 0334
+1AC8 0334
+1AC9 0334
+1ACB 0334
0334 1DC0
1DC0 0334
0334 1DC1
@@ -5064,6 +5413,9 @@ A67D 0334
10F4A 0334
0334 10F4C
10F4C 0334
+10F82 0334
+10F84 0334
+1E2AE 0334
0316 0334
0334 0316
0317 0334
@@ -5154,6 +5506,9 @@ A67D 0334
1ABA 0334
0334 1ABD
1ABD 0334
+1AC3 0334
+1AC4 0334
+1ACA 0334
0334 1DC2
1DC2 0334
0334 1DCF
@@ -5162,6 +5517,7 @@ A67D 0334
1DD0 0334
0334 1DF9
1DF9 0334
+1DFA 0334
0334 1DFC
1DFC 0334
0334 1DFD
@@ -5196,6 +5552,8 @@ FE27 0334
10F4F 0334
0334 10F50
10F50 0334
+10F83 0334
+10F85 0334
0334 3099
3099 0334
0334 309A
@@ -5371,6 +5729,8 @@ FB1E 0334
0652 0334
0334 0653
0653 0334
+089E 0334
+089F 0334
0334 10EAC
10EAC 0334
0334 0654
@@ -5505,6 +5865,7 @@ A6F1 0334
0ABC 0334
0334 0B3C
0B3C 0334
+0C3C 0334
0334 0CBC
0CBC 0334
0334 1B34
@@ -5888,9 +6249,13 @@ FE7E 0021
FE7E 003F
1123E 0334
0653 0021
+089E 0021
+089F 0021
0AFC 0021
10EAC 0021
0653 003F
+089E 003F
+089F 003F
0AFC 003F
10EAC 003F
0654 0021
@@ -6038,6 +6403,7 @@ A6F1 003F
0AFE 0021
0AFF 0021
0B3C 0021
+0C3C 0021
0CBC 0021
1B34 0021
1BE6 0021
@@ -6066,6 +6432,7 @@ A9B3 0021
0AFE 003F
0AFF 003F
0B3C 003F
+0C3C 003F
0CBC 003F
1B34 003F
1BE6 003F
@@ -7277,6 +7644,84 @@ AB5B 003F
AB5B 0061
AB5B 0041
AB5B 0062
+1AFF0 0021
+1AFF0 003F
+1AFF0 0334
+1AFF0 0061
+1AFF0 0041
+1AFF0 0062
+1AFF1 0021
+1AFF1 003F
+1AFF1 0334
+1AFF1 0061
+1AFF1 0041
+1AFF1 0062
+1AFF2 0021
+1AFF2 003F
+1AFF2 0334
+1AFF2 0061
+1AFF2 0041
+1AFF2 0062
+1AFF3 0021
+1AFF3 003F
+1AFF3 0334
+1AFF3 0061
+1AFF3 0041
+1AFF3 0062
+1AFF5 0021
+1AFF5 003F
+1AFF5 0334
+1AFF5 0061
+1AFF5 0041
+1AFF5 0062
+1AFF6 0021
+1AFF6 003F
+1AFF6 0334
+1AFF6 0061
+1AFF6 0041
+1AFF6 0062
+1AFF7 0021
+1AFF7 003F
+1AFF7 0334
+1AFF7 0061
+1AFF7 0041
+1AFF7 0062
+1AFF8 0021
+1AFF8 003F
+1AFF8 0334
+1AFF8 0061
+1AFF8 0041
+1AFF8 0062
+1AFF9 0021
+1AFF9 003F
+1AFF9 0334
+1AFF9 0061
+1AFF9 0041
+1AFF9 0062
+1AFFA 0021
+1AFFA 003F
+1AFFA 0334
+1AFFA 0061
+1AFFA 0041
+1AFFA 0062
+1AFFB 0021
+1AFFB 003F
+1AFFB 0334
+1AFFB 0061
+1AFFB 0041
+1AFFB 0062
+1AFFD 0021
+1AFFD 003F
+1AFFD 0334
+1AFFD 0061
+1AFFD 0041
+1AFFD 0062
+1AFFE 0021
+1AFFE 003F
+1AFFE 0334
+1AFFE 0061
+1AFFE 0041
+1AFFE 0062
00B0 0021
00B0 003F
00B0 0061
@@ -7344,11 +7789,111 @@ AB5B 0062
06E9 0061
06E9 0041
06E9 0062
+FD40 0021
+FD40 003F
+FD40 0061
+FD40 0041
+FD40 0062
+FD41 0021
+FD41 003F
+FD41 0061
+FD41 0041
+FD41 0062
+FD42 0021
+FD42 003F
+FD42 0061
+FD42 0041
+FD42 0062
+FD43 0021
+FD43 003F
+FD43 0061
+FD43 0041
+FD43 0062
+FD44 0021
+FD44 003F
+FD44 0061
+FD44 0041
+FD44 0062
+FD45 0021
+FD45 003F
+FD45 0061
+FD45 0041
+FD45 0062
+FD46 0021
+FD46 003F
+FD46 0061
+FD46 0041
+FD46 0062
+FD47 0021
+FD47 003F
+FD47 0061
+FD47 0041
+FD47 0062
+FD48 0021
+FD48 003F
+FD48 0061
+FD48 0041
+FD48 0062
+FD49 0021
+FD49 003F
+FD49 0061
+FD49 0041
+FD49 0062
+FD4A 0021
+FD4A 003F
+FD4A 0061
+FD4A 0041
+FD4A 0062
+FD4B 0021
+FD4B 003F
+FD4B 0061
+FD4B 0041
+FD4B 0062
+FD4C 0021
+FD4C 003F
+FD4C 0061
+FD4C 0041
+FD4C 0062
+FD4D 0021
+FD4D 003F
+FD4D 0061
+FD4D 0041
+FD4D 0062
+FD4E 0021
+FD4E 003F
+FD4E 0061
+FD4E 0041
+FD4E 0062
+FD4F 0021
+FD4F 003F
+FD4F 0061
+FD4F 0041
+FD4F 0062
+FDCF 0021
+FDCF 003F
+FDCF 0061
+FDCF 0041
+FDCF 0062
FDFD 0021
FDFD 003F
FDFD 0061
FDFD 0041
FDFD 0062
+FDFE 0021
+FDFE 003F
+FDFE 0061
+FDFE 0041
+FDFE 0062
+FDFF 0021
+FDFF 003F
+FDFF 0061
+FDFF 0041
+FDFF 0062
+0888 0021
+0888 003F
+0888 0061
+0888 0041
+0888 0062
FBB2 0021
FBB2 003F
FBB2 0061
@@ -7429,6 +7974,11 @@ FBC1 003F
FBC1 0061
FBC1 0041
FBC1 0062
+FBC2 0021
+FBC2 003F
+FBC2 0061
+FBC2 0041
+FBC2 0062
07F6 0021
07F6 003F
07F6 0061
@@ -23608,6 +24158,702 @@ A4C6 0062
1E14F 0061
1E14F 0041
1E14F 0062
+1CF50 0021
+1CF50 003F
+1CF50 0334
+1CF50 0061
+1CF50 0041
+1CF50 0062
+1CF51 0021
+1CF51 003F
+1CF51 0334
+1CF51 0061
+1CF51 0041
+1CF51 0062
+1CF52 0021
+1CF52 003F
+1CF52 0334
+1CF52 0061
+1CF52 0041
+1CF52 0062
+1CF53 0021
+1CF53 003F
+1CF53 0334
+1CF53 0061
+1CF53 0041
+1CF53 0062
+1CF54 0021
+1CF54 003F
+1CF54 0334
+1CF54 0061
+1CF54 0041
+1CF54 0062
+1CF55 0021
+1CF55 003F
+1CF55 0334
+1CF55 0061
+1CF55 0041
+1CF55 0062
+1CF56 0021
+1CF56 003F
+1CF56 0334
+1CF56 0061
+1CF56 0041
+1CF56 0062
+1CF57 0021
+1CF57 003F
+1CF57 0334
+1CF57 0061
+1CF57 0041
+1CF57 0062
+1CF58 0021
+1CF58 003F
+1CF58 0334
+1CF58 0061
+1CF58 0041
+1CF58 0062
+1CF59 0021
+1CF59 003F
+1CF59 0334
+1CF59 0061
+1CF59 0041
+1CF59 0062
+1CF5A 0021
+1CF5A 003F
+1CF5A 0334
+1CF5A 0061
+1CF5A 0041
+1CF5A 0062
+1CF5B 0021
+1CF5B 003F
+1CF5B 0334
+1CF5B 0061
+1CF5B 0041
+1CF5B 0062
+1CF5C 0021
+1CF5C 003F
+1CF5C 0334
+1CF5C 0061
+1CF5C 0041
+1CF5C 0062
+1CF5D 0021
+1CF5D 003F
+1CF5D 0334
+1CF5D 0061
+1CF5D 0041
+1CF5D 0062
+1CF5E 0021
+1CF5E 003F
+1CF5E 0334
+1CF5E 0061
+1CF5E 0041
+1CF5E 0062
+1CF5F 0021
+1CF5F 003F
+1CF5F 0334
+1CF5F 0061
+1CF5F 0041
+1CF5F 0062
+1CF60 0021
+1CF60 003F
+1CF60 0334
+1CF60 0061
+1CF60 0041
+1CF60 0062
+1CF61 0021
+1CF61 003F
+1CF61 0334
+1CF61 0061
+1CF61 0041
+1CF61 0062
+1CF62 0021
+1CF62 003F
+1CF62 0334
+1CF62 0061
+1CF62 0041
+1CF62 0062
+1CF63 0021
+1CF63 003F
+1CF63 0334
+1CF63 0061
+1CF63 0041
+1CF63 0062
+1CF64 0021
+1CF64 003F
+1CF64 0334
+1CF64 0061
+1CF64 0041
+1CF64 0062
+1CF65 0021
+1CF65 003F
+1CF65 0334
+1CF65 0061
+1CF65 0041
+1CF65 0062
+1CF66 0021
+1CF66 003F
+1CF66 0334
+1CF66 0061
+1CF66 0041
+1CF66 0062
+1CF67 0021
+1CF67 003F
+1CF67 0334
+1CF67 0061
+1CF67 0041
+1CF67 0062
+1CF68 0021
+1CF68 003F
+1CF68 0334
+1CF68 0061
+1CF68 0041
+1CF68 0062
+1CF69 0021
+1CF69 003F
+1CF69 0334
+1CF69 0061
+1CF69 0041
+1CF69 0062
+1CF6A 0021
+1CF6A 003F
+1CF6A 0334
+1CF6A 0061
+1CF6A 0041
+1CF6A 0062
+1CF6B 0021
+1CF6B 003F
+1CF6B 0334
+1CF6B 0061
+1CF6B 0041
+1CF6B 0062
+1CF6C 0021
+1CF6C 003F
+1CF6C 0334
+1CF6C 0061
+1CF6C 0041
+1CF6C 0062
+1CF6D 0021
+1CF6D 003F
+1CF6D 0334
+1CF6D 0061
+1CF6D 0041
+1CF6D 0062
+1CF6E 0021
+1CF6E 003F
+1CF6E 0334
+1CF6E 0061
+1CF6E 0041
+1CF6E 0062
+1CF6F 0021
+1CF6F 003F
+1CF6F 0334
+1CF6F 0061
+1CF6F 0041
+1CF6F 0062
+1CF70 0021
+1CF70 003F
+1CF70 0334
+1CF70 0061
+1CF70 0041
+1CF70 0062
+1CF71 0021
+1CF71 003F
+1CF71 0334
+1CF71 0061
+1CF71 0041
+1CF71 0062
+1CF72 0021
+1CF72 003F
+1CF72 0334
+1CF72 0061
+1CF72 0041
+1CF72 0062
+1CF73 0021
+1CF73 003F
+1CF73 0334
+1CF73 0061
+1CF73 0041
+1CF73 0062
+1CF74 0021
+1CF74 003F
+1CF74 0334
+1CF74 0061
+1CF74 0041
+1CF74 0062
+1CF75 0021
+1CF75 003F
+1CF75 0334
+1CF75 0061
+1CF75 0041
+1CF75 0062
+1CF76 0021
+1CF76 003F
+1CF76 0334
+1CF76 0061
+1CF76 0041
+1CF76 0062
+1CF77 0021
+1CF77 003F
+1CF77 0334
+1CF77 0061
+1CF77 0041
+1CF77 0062
+1CF78 0021
+1CF78 003F
+1CF78 0334
+1CF78 0061
+1CF78 0041
+1CF78 0062
+1CF79 0021
+1CF79 003F
+1CF79 0334
+1CF79 0061
+1CF79 0041
+1CF79 0062
+1CF7A 0021
+1CF7A 003F
+1CF7A 0334
+1CF7A 0061
+1CF7A 0041
+1CF7A 0062
+1CF7B 0021
+1CF7B 003F
+1CF7B 0334
+1CF7B 0061
+1CF7B 0041
+1CF7B 0062
+1CF7C 0021
+1CF7C 003F
+1CF7C 0334
+1CF7C 0061
+1CF7C 0041
+1CF7C 0062
+1CF7D 0021
+1CF7D 003F
+1CF7D 0334
+1CF7D 0061
+1CF7D 0041
+1CF7D 0062
+1CF7E 0021
+1CF7E 003F
+1CF7E 0334
+1CF7E 0061
+1CF7E 0041
+1CF7E 0062
+1CF7F 0021
+1CF7F 003F
+1CF7F 0334
+1CF7F 0061
+1CF7F 0041
+1CF7F 0062
+1CF80 0021
+1CF80 003F
+1CF80 0334
+1CF80 0061
+1CF80 0041
+1CF80 0062
+1CF81 0021
+1CF81 003F
+1CF81 0334
+1CF81 0061
+1CF81 0041
+1CF81 0062
+1CF82 0021
+1CF82 003F
+1CF82 0334
+1CF82 0061
+1CF82 0041
+1CF82 0062
+1CF83 0021
+1CF83 003F
+1CF83 0334
+1CF83 0061
+1CF83 0041
+1CF83 0062
+1CF84 0021
+1CF84 003F
+1CF84 0334
+1CF84 0061
+1CF84 0041
+1CF84 0062
+1CF85 0021
+1CF85 003F
+1CF85 0334
+1CF85 0061
+1CF85 0041
+1CF85 0062
+1CF86 0021
+1CF86 003F
+1CF86 0334
+1CF86 0061
+1CF86 0041
+1CF86 0062
+1CF87 0021
+1CF87 003F
+1CF87 0334
+1CF87 0061
+1CF87 0041
+1CF87 0062
+1CF88 0021
+1CF88 003F
+1CF88 0334
+1CF88 0061
+1CF88 0041
+1CF88 0062
+1CF89 0021
+1CF89 003F
+1CF89 0334
+1CF89 0061
+1CF89 0041
+1CF89 0062
+1CF8A 0021
+1CF8A 003F
+1CF8A 0334
+1CF8A 0061
+1CF8A 0041
+1CF8A 0062
+1CF8B 0021
+1CF8B 003F
+1CF8B 0334
+1CF8B 0061
+1CF8B 0041
+1CF8B 0062
+1CF8C 0021
+1CF8C 003F
+1CF8C 0334
+1CF8C 0061
+1CF8C 0041
+1CF8C 0062
+1CF8D 0021
+1CF8D 003F
+1CF8D 0334
+1CF8D 0061
+1CF8D 0041
+1CF8D 0062
+1CF8E 0021
+1CF8E 003F
+1CF8E 0334
+1CF8E 0061
+1CF8E 0041
+1CF8E 0062
+1CF8F 0021
+1CF8F 003F
+1CF8F 0334
+1CF8F 0061
+1CF8F 0041
+1CF8F 0062
+1CF90 0021
+1CF90 003F
+1CF90 0334
+1CF90 0061
+1CF90 0041
+1CF90 0062
+1CF91 0021
+1CF91 003F
+1CF91 0334
+1CF91 0061
+1CF91 0041
+1CF91 0062
+1CF92 0021
+1CF92 003F
+1CF92 0334
+1CF92 0061
+1CF92 0041
+1CF92 0062
+1CF93 0021
+1CF93 003F
+1CF93 0334
+1CF93 0061
+1CF93 0041
+1CF93 0062
+1CF94 0021
+1CF94 003F
+1CF94 0334
+1CF94 0061
+1CF94 0041
+1CF94 0062
+1CF95 0021
+1CF95 003F
+1CF95 0334
+1CF95 0061
+1CF95 0041
+1CF95 0062
+1CF96 0021
+1CF96 003F
+1CF96 0334
+1CF96 0061
+1CF96 0041
+1CF96 0062
+1CF97 0021
+1CF97 003F
+1CF97 0334
+1CF97 0061
+1CF97 0041
+1CF97 0062
+1CF98 0021
+1CF98 003F
+1CF98 0334
+1CF98 0061
+1CF98 0041
+1CF98 0062
+1CF99 0021
+1CF99 003F
+1CF99 0334
+1CF99 0061
+1CF99 0041
+1CF99 0062
+1CF9A 0021
+1CF9A 003F
+1CF9A 0334
+1CF9A 0061
+1CF9A 0041
+1CF9A 0062
+1CF9B 0021
+1CF9B 003F
+1CF9B 0334
+1CF9B 0061
+1CF9B 0041
+1CF9B 0062
+1CF9C 0021
+1CF9C 003F
+1CF9C 0334
+1CF9C 0061
+1CF9C 0041
+1CF9C 0062
+1CF9D 0021
+1CF9D 003F
+1CF9D 0334
+1CF9D 0061
+1CF9D 0041
+1CF9D 0062
+1CF9E 0021
+1CF9E 003F
+1CF9E 0334
+1CF9E 0061
+1CF9E 0041
+1CF9E 0062
+1CF9F 0021
+1CF9F 003F
+1CF9F 0334
+1CF9F 0061
+1CF9F 0041
+1CF9F 0062
+1CFA0 0021
+1CFA0 003F
+1CFA0 0334
+1CFA0 0061
+1CFA0 0041
+1CFA0 0062
+1CFA1 0021
+1CFA1 003F
+1CFA1 0334
+1CFA1 0061
+1CFA1 0041
+1CFA1 0062
+1CFA2 0021
+1CFA2 003F
+1CFA2 0334
+1CFA2 0061
+1CFA2 0041
+1CFA2 0062
+1CFA3 0021
+1CFA3 003F
+1CFA3 0334
+1CFA3 0061
+1CFA3 0041
+1CFA3 0062
+1CFA4 0021
+1CFA4 003F
+1CFA4 0334
+1CFA4 0061
+1CFA4 0041
+1CFA4 0062
+1CFA5 0021
+1CFA5 003F
+1CFA5 0334
+1CFA5 0061
+1CFA5 0041
+1CFA5 0062
+1CFA6 0021
+1CFA6 003F
+1CFA6 0334
+1CFA6 0061
+1CFA6 0041
+1CFA6 0062
+1CFA7 0021
+1CFA7 003F
+1CFA7 0334
+1CFA7 0061
+1CFA7 0041
+1CFA7 0062
+1CFA8 0021
+1CFA8 003F
+1CFA8 0334
+1CFA8 0061
+1CFA8 0041
+1CFA8 0062
+1CFA9 0021
+1CFA9 003F
+1CFA9 0334
+1CFA9 0061
+1CFA9 0041
+1CFA9 0062
+1CFAA 0021
+1CFAA 003F
+1CFAA 0334
+1CFAA 0061
+1CFAA 0041
+1CFAA 0062
+1CFAB 0021
+1CFAB 003F
+1CFAB 0334
+1CFAB 0061
+1CFAB 0041
+1CFAB 0062
+1CFAC 0021
+1CFAC 003F
+1CFAC 0334
+1CFAC 0061
+1CFAC 0041
+1CFAC 0062
+1CFAD 0021
+1CFAD 003F
+1CFAD 0334
+1CFAD 0061
+1CFAD 0041
+1CFAD 0062
+1CFAE 0021
+1CFAE 003F
+1CFAE 0334
+1CFAE 0061
+1CFAE 0041
+1CFAE 0062
+1CFAF 0021
+1CFAF 003F
+1CFAF 0334
+1CFAF 0061
+1CFAF 0041
+1CFAF 0062
+1CFB0 0021
+1CFB0 003F
+1CFB0 0334
+1CFB0 0061
+1CFB0 0041
+1CFB0 0062
+1CFB1 0021
+1CFB1 003F
+1CFB1 0334
+1CFB1 0061
+1CFB1 0041
+1CFB1 0062
+1CFB2 0021
+1CFB2 003F
+1CFB2 0334
+1CFB2 0061
+1CFB2 0041
+1CFB2 0062
+1CFB3 0021
+1CFB3 003F
+1CFB3 0334
+1CFB3 0061
+1CFB3 0041
+1CFB3 0062
+1CFB4 0021
+1CFB4 003F
+1CFB4 0334
+1CFB4 0061
+1CFB4 0041
+1CFB4 0062
+1CFB5 0021
+1CFB5 003F
+1CFB5 0334
+1CFB5 0061
+1CFB5 0041
+1CFB5 0062
+1CFB6 0021
+1CFB6 003F
+1CFB6 0334
+1CFB6 0061
+1CFB6 0041
+1CFB6 0062
+1CFB7 0021
+1CFB7 003F
+1CFB7 0334
+1CFB7 0061
+1CFB7 0041
+1CFB7 0062
+1CFB8 0021
+1CFB8 003F
+1CFB8 0334
+1CFB8 0061
+1CFB8 0041
+1CFB8 0062
+1CFB9 0021
+1CFB9 003F
+1CFB9 0334
+1CFB9 0061
+1CFB9 0041
+1CFB9 0062
+1CFBA 0021
+1CFBA 003F
+1CFBA 0334
+1CFBA 0061
+1CFBA 0041
+1CFBA 0062
+1CFBB 0021
+1CFBB 003F
+1CFBB 0334
+1CFBB 0061
+1CFBB 0041
+1CFBB 0062
+1CFBC 0021
+1CFBC 003F
+1CFBC 0334
+1CFBC 0061
+1CFBC 0041
+1CFBC 0062
+1CFBD 0021
+1CFBD 003F
+1CFBD 0334
+1CFBD 0061
+1CFBD 0041
+1CFBD 0062
+1CFBE 0021
+1CFBE 003F
+1CFBE 0334
+1CFBE 0061
+1CFBE 0041
+1CFBE 0062
+1CFBF 0021
+1CFBF 003F
+1CFBF 0334
+1CFBF 0061
+1CFBF 0041
+1CFBF 0062
+1CFC0 0021
+1CFC0 003F
+1CFC0 0334
+1CFC0 0061
+1CFC0 0041
+1CFC0 0062
+1CFC1 0021
+1CFC1 003F
+1CFC1 0334
+1CFC1 0061
+1CFC1 0041
+1CFC1 0062
+1CFC2 0021
+1CFC2 003F
+1CFC2 0334
+1CFC2 0061
+1CFC2 0041
+1CFC2 0062
+1CFC3 0021
+1CFC3 003F
+1CFC3 0334
+1CFC3 0061
+1CFC3 0041
+1CFC3 0062
1D000 0021
1D000 003F
1D000 0334
@@ -26297,6 +27543,18 @@ A4C6 0062
1D1E8 0061
1D1E8 0041
1D1E8 0062
+1D1E9 0021
+1D1E9 003F
+1D1E9 0334
+1D1E9 0061
+1D1E9 0041
+1D1E9 0062
+1D1EA 0021
+1D1EA 003F
+1D1EA 0334
+1D1EA 0061
+1D1EA 0041
+1D1EA 0062
1D200 0021
1D200 003F
1D200 0334
@@ -34067,6 +35325,12 @@ A4C6 0062
1F978 0061
1F978 0041
1F978 0062
+1F979 0021
+1F979 003F
+1F979 0334
+1F979 0061
+1F979 0041
+1F979 0062
1F97A 0021
1F97A 003F
1F97A 0334
@@ -34559,6 +35823,12 @@ A4C6 0062
1F9CB 0061
1F9CB 0041
1F9CB 0062
+1F9CC 0021
+1F9CC 003F
+1F9CC 0334
+1F9CC 0061
+1F9CC 0041
+1F9CC 0062
1F9CD 0021
1F9CD 003F
1F9CD 0334
@@ -34913,6 +36183,18 @@ A4C6 0062
1FA7A 0061
1FA7A 0041
1FA7A 0062
+1FA7B 0021
+1FA7B 003F
+1FA7B 0334
+1FA7B 0061
+1FA7B 0041
+1FA7B 0062
+1FA7C 0021
+1FA7C 003F
+1FA7C 0334
+1FA7C 0061
+1FA7C 0041
+1FA7C 0062
1FA80 0021
1FA80 003F
1FA80 0334
@@ -35105,6 +36387,30 @@ A4C6 0062
1FAA8 0061
1FAA8 0041
1FAA8 0062
+1FAA9 0021
+1FAA9 003F
+1FAA9 0334
+1FAA9 0061
+1FAA9 0041
+1FAA9 0062
+1FAAA 0021
+1FAAA 003F
+1FAAA 0334
+1FAAA 0061
+1FAAA 0041
+1FAAA 0062
+1FAAB 0021
+1FAAB 003F
+1FAAB 0334
+1FAAB 0061
+1FAAB 0041
+1FAAB 0062
+1FAAC 0021
+1FAAC 003F
+1FAAC 0334
+1FAAC 0061
+1FAAC 0041
+1FAAC 0062
1FAB0 0021
1FAB0 003F
1FAB0 0334
@@ -35147,6 +36453,30 @@ A4C6 0062
1FAB6 0061
1FAB6 0041
1FAB6 0062
+1FAB7 0021
+1FAB7 003F
+1FAB7 0334
+1FAB7 0061
+1FAB7 0041
+1FAB7 0062
+1FAB8 0021
+1FAB8 003F
+1FAB8 0334
+1FAB8 0061
+1FAB8 0041
+1FAB8 0062
+1FAB9 0021
+1FAB9 003F
+1FAB9 0334
+1FAB9 0061
+1FAB9 0041
+1FAB9 0062
+1FABA 0021
+1FABA 003F
+1FABA 0334
+1FABA 0061
+1FABA 0041
+1FABA 0062
1FAC0 0021
1FAC0 003F
1FAC0 0334
@@ -35165,6 +36495,24 @@ A4C6 0062
1FAC2 0061
1FAC2 0041
1FAC2 0062
+1FAC3 0021
+1FAC3 003F
+1FAC3 0334
+1FAC3 0061
+1FAC3 0041
+1FAC3 0062
+1FAC4 0021
+1FAC4 003F
+1FAC4 0334
+1FAC4 0061
+1FAC4 0041
+1FAC4 0062
+1FAC5 0021
+1FAC5 003F
+1FAC5 0334
+1FAC5 0061
+1FAC5 0041
+1FAC5 0062
1FAD0 0021
1FAD0 003F
1FAD0 0334
@@ -35207,6 +36555,114 @@ A4C6 0062
1FAD6 0061
1FAD6 0041
1FAD6 0062
+1FAD7 0021
+1FAD7 003F
+1FAD7 0334
+1FAD7 0061
+1FAD7 0041
+1FAD7 0062
+1FAD8 0021
+1FAD8 003F
+1FAD8 0334
+1FAD8 0061
+1FAD8 0041
+1FAD8 0062
+1FAD9 0021
+1FAD9 003F
+1FAD9 0334
+1FAD9 0061
+1FAD9 0041
+1FAD9 0062
+1FAE0 0021
+1FAE0 003F
+1FAE0 0334
+1FAE0 0061
+1FAE0 0041
+1FAE0 0062
+1FAE1 0021
+1FAE1 003F
+1FAE1 0334
+1FAE1 0061
+1FAE1 0041
+1FAE1 0062
+1FAE2 0021
+1FAE2 003F
+1FAE2 0334
+1FAE2 0061
+1FAE2 0041
+1FAE2 0062
+1FAE3 0021
+1FAE3 003F
+1FAE3 0334
+1FAE3 0061
+1FAE3 0041
+1FAE3 0062
+1FAE4 0021
+1FAE4 003F
+1FAE4 0334
+1FAE4 0061
+1FAE4 0041
+1FAE4 0062
+1FAE5 0021
+1FAE5 003F
+1FAE5 0334
+1FAE5 0061
+1FAE5 0041
+1FAE5 0062
+1FAE6 0021
+1FAE6 003F
+1FAE6 0334
+1FAE6 0061
+1FAE6 0041
+1FAE6 0062
+1FAE7 0021
+1FAE7 003F
+1FAE7 0334
+1FAE7 0061
+1FAE7 0041
+1FAE7 0062
+1FAF0 0021
+1FAF0 003F
+1FAF0 0334
+1FAF0 0061
+1FAF0 0041
+1FAF0 0062
+1FAF1 0021
+1FAF1 003F
+1FAF1 0334
+1FAF1 0061
+1FAF1 0041
+1FAF1 0062
+1FAF2 0021
+1FAF2 003F
+1FAF2 0334
+1FAF2 0061
+1FAF2 0041
+1FAF2 0062
+1FAF3 0021
+1FAF3 003F
+1FAF3 0334
+1FAF3 0061
+1FAF3 0041
+1FAF3 0062
+1FAF4 0021
+1FAF4 003F
+1FAF4 0334
+1FAF4 0061
+1FAF4 0041
+1FAF4 0062
+1FAF5 0021
+1FAF5 003F
+1FAF5 0334
+1FAF5 0061
+1FAF5 0041
+1FAF5 0062
+1FAF6 0021
+1FAF6 003F
+1FAF6 0334
+1FAF6 0061
+1FAF6 0041
+1FAF6 0062
1F600 0021
1F600 003F
1F600 0334
@@ -36503,6 +37959,24 @@ A4C6 0062
1F6D7 0061
1F6D7 0041
1F6D7 0062
+1F6DD 0021
+1F6DD 003F
+1F6DD 0334
+1F6DD 0061
+1F6DD 0041
+1F6DD 0062
+1F6DE 0021
+1F6DE 003F
+1F6DE 0334
+1F6DE 0061
+1F6DE 0041
+1F6DE 0062
+1F6DF 0021
+1F6DF 003F
+1F6DF 0334
+1F6DF 0061
+1F6DF 0041
+1F6DF 0062
1F6E0 0021
1F6E0 003F
1F6E0 0334
@@ -37961,6 +39435,12 @@ A4C6 0062
1F7EB 0061
1F7EB 0041
1F7EB 0062
+1F7F0 0021
+1F7F0 003F
+1F7F0 0334
+1F7F0 0061
+1F7F0 0041
+1F7F0 0062
1F800 0021
1F800 003F
1F800 0334
@@ -42403,14 +43883,26 @@ FFFC 0041
FFFC 0062
02D0 0021
02D0 003F
+10781 0021
+10781 003F
+10781 0334
02D0 0061
02D0 0041
+10781 0061
+10781 0041
02D0 0062
+10781 0062
02D1 0021
02D1 003F
+10782 0021
+10782 003F
+10782 0334
02D1 0061
02D1 0041
+10782 0061
+10782 0041
02D1 0062
+10782 0062
0971 0021
0971 003F
0971 0061
@@ -42885,6 +44377,11 @@ FFE6 0062
20BF 0061
20BF 0041
20BF 0062
+20C0 0021
+20C0 003F
+20C0 0061
+20C0 0041
+20C0 0062
20A8 0021
20A8 003F
20A8 0061
@@ -45868,6 +47365,7 @@ ABF0 0021
11D50 0021
11DA0 0021
16A60 0021
+16AC0 0021
16B50 0021
16E80 0021
1D2E0 0021
@@ -45932,6 +47430,7 @@ ABF0 003F
11D50 003F
11DA0 003F
16A60 003F
+16AC0 003F
16B50 003F
16E80 003F
1D2E0 003F
@@ -45991,6 +47490,7 @@ FF10 003F
11D50 0334
11DA0 0334
16A60 0334
+16AC0 0334
16B50 0334
16E80 0334
1D2E0 0334
@@ -46068,6 +47568,7 @@ ABF0 0061
11D50 0061
11DA0 0061
16A60 0061
+16AC0 0061
16B50 0061
16E80 0061
1D2E0 0061
@@ -46132,6 +47633,7 @@ ABF0 0041
11D50 0041
11DA0 0041
16A60 0041
+16AC0 0041
16B50 0041
16E80 0041
1D2E0 0041
@@ -46228,6 +47730,7 @@ ABF0 0062
11D50 0062
11DA0 0062
16A60 0062
+16AC0 0062
16B50 0062
16E80 0062
1D2E0 0062
@@ -46350,6 +47853,7 @@ ABF1 0021
1244F 0021
12458 0021
16A61 0021
+16AC1 0021
16B51 0021
16E81 0021
1D2E1 0021
@@ -46458,6 +47962,7 @@ ABF1 003F
1244F 003F
12458 003F
16A61 003F
+16AC1 003F
16B51 003F
16E81 003F
1D2E1 003F
@@ -46561,6 +48066,7 @@ FF11 003F
1244F 0334
12458 0334
16A61 0334
+16AC1 0334
16B51 0334
16E81 0334
1D2E1 0334
@@ -47072,6 +48578,7 @@ ABF1 0061
1244F 0061
12458 0061
16A61 0061
+16AC1 0061
16B51 0061
16E81 0061
1D2E1 0061
@@ -47180,6 +48687,7 @@ ABF1 0041
1244F 0041
12458 0041
16A61 0041
+16AC1 0041
16B51 0041
16E81 0041
1D2E1 0041
@@ -47328,6 +48836,7 @@ ABF1 0062
1244F 0062
12458 0062
16A61 0062
+16AC1 0062
16B51 0062
16E81 0062
1D2E1 0062
@@ -47467,6 +48976,7 @@ ABF2 0021
12456 0021
12459 0021
16A62 0021
+16AC2 0021
16B52 0021
16E82 0021
1D2E2 0021
@@ -47570,6 +49080,7 @@ ABF2 003F
12456 003F
12459 003F
16A62 003F
+16AC2 003F
16B52 003F
16E82 003F
1D2E2 003F
@@ -47669,6 +49180,7 @@ FF12 003F
12456 0334
12459 0334
16A62 0334
+16AC2 0334
16B52 0334
16E82 0334
1D2E2 0334
@@ -47948,6 +49460,7 @@ ABF2 0061
12456 0061
12459 0061
16A62 0061
+16AC2 0061
16B52 0061
16E82 0061
1D2E2 0061
@@ -48051,6 +49564,7 @@ ABF2 0041
12456 0041
12459 0041
16A62 0041
+16AC2 0041
16B52 0041
16E82 0041
1D2E2 0041
@@ -48196,6 +49710,7 @@ ABF2 0062
12456 0062
12459 0062
16A62 0062
+16AC2 0062
16B52 0062
16E82 0062
1D2E2 0062
@@ -48347,6 +49862,7 @@ ABF3 0021
12451 0021
12457 0021
16A63 0021
+16AC3 0021
16B53 0021
16E83 0021
1D2E3 0021
@@ -48450,6 +49966,7 @@ ABF3 003F
12451 003F
12457 003F
16A63 003F
+16AC3 003F
16B53 003F
16E83 003F
1D2E3 003F
@@ -48549,6 +50066,7 @@ FF13 003F
12451 0334
12457 0334
16A63 0334
+16AC3 0334
16B53 0334
16E83 0334
1D2E3 0334
@@ -48744,6 +50262,7 @@ ABF3 0061
12451 0061
12457 0061
16A63 0061
+16AC3 0061
16B53 0061
16E83 0061
1D2E3 0061
@@ -48847,6 +50366,7 @@ ABF3 0041
12451 0041
12457 0041
16A63 0041
+16AC3 0041
16B53 0041
16E83 0041
1D2E3 0041
@@ -48990,6 +50510,7 @@ ABF3 0062
12451 0062
12457 0062
16A63 0062
+16AC3 0062
16B53 0062
16E83 0062
1D2E3 0062
@@ -49132,6 +50653,7 @@ ABF4 0021
12453 0021
12469 0021
16A64 0021
+16AC4 0021
16B54 0021
16E84 0021
1D2E4 0021
@@ -49233,6 +50755,7 @@ ABF4 003F
12453 003F
12469 003F
16A64 003F
+16AC4 003F
16B54 003F
16E84 003F
1D2E4 003F
@@ -49332,6 +50855,7 @@ FF14 003F
12453 0334
12469 0334
16A64 0334
+16AC4 0334
16B54 0334
16E84 0334
1D2E4 0334
@@ -49502,6 +51026,7 @@ ABF4 0061
12453 0061
12469 0061
16A64 0061
+16AC4 0061
16B54 0061
16E84 0061
1D2E4 0061
@@ -49603,6 +51128,7 @@ ABF4 0041
12453 0041
12469 0041
16A64 0041
+16AC4 0041
16B54 0041
16E84 0041
1D2E4 0041
@@ -49742,6 +51268,7 @@ ABF4 0062
12453 0062
12469 0062
16A64 0062
+16AC4 0062
16B54 0062
16E84 0062
1D2E4 0062
@@ -49882,6 +51409,7 @@ ABF5 0021
12455 0021
1246A 0021
16A65 0021
+16AC5 0021
16B55 0021
16E85 0021
1D2E5 0021
@@ -49983,6 +51511,7 @@ ABF5 003F
12455 003F
1246A 003F
16A65 003F
+16AC5 003F
16B55 003F
16E85 003F
1D2E5 003F
@@ -50082,6 +51611,7 @@ FF15 003F
12455 0334
1246A 0334
16A65 0334
+16AC5 0334
16B55 0334
16E85 0334
1D2E5 0334
@@ -50218,6 +51748,7 @@ ABF5 0061
12455 0061
1246A 0061
16A65 0061
+16AC5 0061
16B55 0061
16E85 0061
1D2E5 0061
@@ -50319,6 +51850,7 @@ ABF5 0041
12455 0041
1246A 0041
16A65 0041
+16AC5 0041
16B55 0041
16E85 0041
1D2E5 0041
@@ -50458,6 +51990,7 @@ ABF5 0062
12455 0062
1246A 0062
16A65 0062
+16AC5 0062
16B55 0062
16E85 0062
1D2E5 0062
@@ -50578,6 +52111,7 @@ ABF6 0021
1244E 0021
1246B 0021
16A66 0021
+16AC6 0021
16B56 0021
16E86 0021
1D2E6 0021
@@ -50662,6 +52196,7 @@ ABF6 003F
1244E 003F
1246B 003F
16A66 003F
+16AC6 003F
16B56 003F
16E86 003F
1D2E6 003F
@@ -50743,6 +52278,7 @@ FF16 003F
1244E 0334
1246B 0334
16A66 0334
+16AC6 0334
16B56 0334
16E86 0334
1D2E6 0334
@@ -50847,6 +52383,7 @@ ABF6 0061
1244E 0061
1246B 0061
16A66 0061
+16AC6 0061
16B56 0061
16E86 0061
1D2E6 0061
@@ -50931,6 +52468,7 @@ ABF6 0041
1244E 0041
1246B 0041
16A66 0041
+16AC6 0041
16B56 0041
16E86 0041
1D2E6 0041
@@ -51053,6 +52591,7 @@ ABF6 0062
1244E 0062
1246B 0062
16A66 0062
+16AC6 0062
16B56 0062
16E86 0062
1D2E6 0062
@@ -51171,6 +52710,7 @@ ABF7 0021
12443 0021
1246C 0021
16A67 0021
+16AC7 0021
16B57 0021
16E87 0021
1D2E7 0021
@@ -51255,6 +52795,7 @@ ABF7 003F
12443 003F
1246C 003F
16A67 003F
+16AC7 003F
16B57 003F
16E87 003F
1D2E7 003F
@@ -51337,6 +52878,7 @@ FF17 003F
12443 0334
1246C 0334
16A67 0334
+16AC7 0334
16B57 0334
16E87 0334
1D2E7 0334
@@ -51446,6 +52988,7 @@ ABF7 0061
12443 0061
1246C 0061
16A67 0061
+16AC7 0061
16B57 0061
16E87 0061
1D2E7 0061
@@ -51530,6 +53073,7 @@ ABF7 0041
12443 0041
1246C 0041
16A67 0041
+16AC7 0041
16B57 0041
16E87 0041
1D2E7 0041
@@ -51652,6 +53196,7 @@ ABF7 0062
12443 0062
1246C 0062
16A67 0062
+16AC7 0062
16B57 0062
16E87 0062
1D2E7 0062
@@ -51769,6 +53314,7 @@ ABF8 0021
12445 0021
1246D 0021
16A68 0021
+16AC8 0021
16B58 0021
16E88 0021
1D2E8 0021
@@ -51852,6 +53398,7 @@ ABF8 003F
12445 003F
1246D 003F
16A68 003F
+16AC8 003F
16B58 003F
16E88 003F
1D2E8 003F
@@ -51933,6 +53480,7 @@ FF18 003F
12445 0334
1246D 0334
16A68 0334
+16AC8 0334
16B58 0334
16E88 0334
1D2E8 0334
@@ -52030,6 +53578,7 @@ ABF8 0061
12445 0061
1246D 0061
16A68 0061
+16AC8 0061
16B58 0061
16E88 0061
1D2E8 0061
@@ -52113,6 +53662,7 @@ ABF8 0041
12445 0041
1246D 0041
16A68 0041
+16AC8 0041
16B58 0041
16E88 0041
1D2E8 0041
@@ -52234,6 +53784,7 @@ ABF8 0062
12445 0062
1246D 0062
16A68 0062
+16AC8 0062
16B58 0062
16E88 0062
1D2E8 0062
@@ -52359,6 +53910,7 @@ ABF9 0021
12449 0021
1246E 0021
16A69 0021
+16AC9 0021
16B59 0021
16E89 0021
1D2E9 0021
@@ -52444,6 +53996,7 @@ ABF9 003F
12449 003F
1246E 003F
16A69 003F
+16AC9 003F
16B59 003F
16E89 003F
1D2E9 003F
@@ -52527,6 +54080,7 @@ FF19 003F
12449 0334
1246E 0334
16A69 0334
+16AC9 0334
16B59 0334
16E89 0334
1D2E9 0334
@@ -52621,6 +54175,7 @@ ABF9 0061
12449 0061
1246E 0061
16A69 0061
+16AC9 0061
16B59 0061
16E89 0061
1D2E9 0061
@@ -52706,6 +54261,7 @@ ABF9 0041
12449 0041
1246E 0041
16A69 0041
+16AC9 0041
16B59 0041
16E89 0041
1D2E9 0041
@@ -52829,6 +54385,7 @@ ABF9 0062
12449 0062
1246E 0062
16A69 0062
+16AC9 0062
16B59 0062
16E89 0062
1D2E9 0062
@@ -52935,6 +54492,7 @@ FE58 0061
2E43 0061
2E17 0061
2E40 0061
+2E5D 0061
301C 0061
3030 0061
30A0 0061
@@ -53029,6 +54587,7 @@ FE15 0061
FE57 0061
FF01 0061
00A1 0061
+2E53 0061
055C 0061
07F9 0061
1944 0061
@@ -53041,6 +54600,7 @@ FE56 0061
FF1F 0061
00BF 0061
2E2E 0061
+2E54 0061
055E 0061
061F 0061
0709 0061
@@ -53144,6 +54704,7 @@ ABEB 0061
16A6F 0061
1C7E 0061
1C7F 0061
+061D 0061
0700 0061
07F7 0061
10FB 0061
@@ -53153,6 +54714,8 @@ ABEB 0061
1A1F 0061
1B5A 0061
1B5B 0061
+1B7D 0061
+1B7E 0061
A9C1 0061
A9C2 0061
A9C3 0061
@@ -53177,6 +54740,10 @@ A95F 0061
10F57 0061
10F58 0061
10F59 0061
+10F86 0061
+10F87 0061
+10F88 0061
+10F89 0061
110BE 0061
110BF 0061
11140 0061
@@ -53217,6 +54784,8 @@ A95F 0061
12472 0061
12473 0061
12474 0061
+12FF1 0061
+12FF2 0061
0027 0061
FF07 0061
2018 0061
@@ -53347,6 +54916,14 @@ FF60 0061
2E27 0061
2E28 0061
2E29 0061
+2E55 0061
+2E56 0061
+2E57 0061
+2E58 0061
+2E59 0061
+2E5A 0061
+2E5B 0061
+2E5C 0061
2329 0061
3008 0061
FE3F 0061
@@ -53677,6 +55254,7 @@ AA5C 0061
115D6 0061
115D7 0061
11643 0061
+116B9 0061
1183B 0061
11945 0061
119E2 0061
@@ -53840,6 +55418,23 @@ AA5C 0061
0749 0061
074A 0061
07FA 0061
+0890 0061
+0891 0061
+0898 0061
+0899 0061
+089A 0061
+089B 0061
+089C 0061
+089D 0061
+08CA 0061
+08CB 0061
+08CC 0061
+08CD 0061
+08CE 0061
+08CF 0061
+08D0 0061
+08D1 0061
+08D2 0061
08D3 0061
08D4 0061
08D5 0061
@@ -53884,6 +55479,7 @@ AA5C 0061
180C 0061
180D 0061
180E 0061
+180F 0061
1A7F 0061
1B6B 0061
1B6C 0061
@@ -54031,6 +55627,75 @@ FFFB 0061
1BCA1 0061
1BCA2 0061
1BCA3 0061
+1CF00 0061
+1CF01 0061
+1CF02 0061
+1CF03 0061
+1CF04 0061
+1CF05 0061
+1CF06 0061
+1CF07 0061
+1CF08 0061
+1CF09 0061
+1CF0A 0061
+1CF0B 0061
+1CF0C 0061
+1CF0D 0061
+1CF0E 0061
+1CF0F 0061
+1CF10 0061
+1CF11 0061
+1CF12 0061
+1CF13 0061
+1CF14 0061
+1CF15 0061
+1CF16 0061
+1CF17 0061
+1CF18 0061
+1CF19 0061
+1CF1A 0061
+1CF1B 0061
+1CF1C 0061
+1CF1D 0061
+1CF1E 0061
+1CF1F 0061
+1CF20 0061
+1CF21 0061
+1CF22 0061
+1CF23 0061
+1CF24 0061
+1CF25 0061
+1CF26 0061
+1CF27 0061
+1CF28 0061
+1CF29 0061
+1CF2A 0061
+1CF2B 0061
+1CF2C 0061
+1CF2D 0061
+1CF30 0061
+1CF31 0061
+1CF32 0061
+1CF33 0061
+1CF34 0061
+1CF35 0061
+1CF36 0061
+1CF37 0061
+1CF38 0061
+1CF39 0061
+1CF3A 0061
+1CF3B 0061
+1CF3C 0061
+1CF3D 0061
+1CF3E 0061
+1CF3F 0061
+1CF40 0061
+1CF41 0061
+1CF42 0061
+1CF43 0061
+1CF44 0061
+1CF45 0061
+1CF46 0061
1D165 0061
1D166 0061
1D167 0061
@@ -54640,6 +56305,7 @@ FE58 0041
2E43 0041
2E17 0041
2E40 0041
+2E5D 0041
301C 0041
3030 0041
30A0 0041
@@ -54734,6 +56400,7 @@ FE15 0041
FE57 0041
FF01 0041
00A1 0041
+2E53 0041
055C 0041
07F9 0041
1944 0041
@@ -54746,6 +56413,7 @@ FE56 0041
FF1F 0041
00BF 0041
2E2E 0041
+2E54 0041
055E 0041
061F 0041
0709 0041
@@ -54849,6 +56517,7 @@ ABEB 0041
16A6F 0041
1C7E 0041
1C7F 0041
+061D 0041
0700 0041
07F7 0041
10FB 0041
@@ -54858,6 +56527,8 @@ ABEB 0041
1A1F 0041
1B5A 0041
1B5B 0041
+1B7D 0041
+1B7E 0041
A9C1 0041
A9C2 0041
A9C3 0041
@@ -54882,6 +56553,10 @@ A95F 0041
10F57 0041
10F58 0041
10F59 0041
+10F86 0041
+10F87 0041
+10F88 0041
+10F89 0041
110BE 0041
110BF 0041
11140 0041
@@ -54922,6 +56597,8 @@ A95F 0041
12472 0041
12473 0041
12474 0041
+12FF1 0041
+12FF2 0041
0027 0041
FF07 0041
2018 0041
@@ -55052,6 +56729,14 @@ FF60 0041
2E27 0041
2E28 0041
2E29 0041
+2E55 0041
+2E56 0041
+2E57 0041
+2E58 0041
+2E59 0041
+2E5A 0041
+2E5B 0041
+2E5C 0041
2329 0041
3008 0041
FE3F 0041
@@ -55382,6 +57067,7 @@ AA5C 0041
115D6 0041
115D7 0041
11643 0041
+116B9 0041
1183B 0041
11945 0041
119E2 0041
@@ -55545,6 +57231,23 @@ AA5C 0041
0749 0041
074A 0041
07FA 0041
+0890 0041
+0891 0041
+0898 0041
+0899 0041
+089A 0041
+089B 0041
+089C 0041
+089D 0041
+08CA 0041
+08CB 0041
+08CC 0041
+08CD 0041
+08CE 0041
+08CF 0041
+08D0 0041
+08D1 0041
+08D2 0041
08D3 0041
08D4 0041
08D5 0041
@@ -55589,6 +57292,7 @@ AA5C 0041
180C 0041
180D 0041
180E 0041
+180F 0041
1A7F 0041
1B6B 0041
1B6C 0041
@@ -55736,6 +57440,75 @@ FFFB 0041
1BCA1 0041
1BCA2 0041
1BCA3 0041
+1CF00 0041
+1CF01 0041
+1CF02 0041
+1CF03 0041
+1CF04 0041
+1CF05 0041
+1CF06 0041
+1CF07 0041
+1CF08 0041
+1CF09 0041
+1CF0A 0041
+1CF0B 0041
+1CF0C 0041
+1CF0D 0041
+1CF0E 0041
+1CF0F 0041
+1CF10 0041
+1CF11 0041
+1CF12 0041
+1CF13 0041
+1CF14 0041
+1CF15 0041
+1CF16 0041
+1CF17 0041
+1CF18 0041
+1CF19 0041
+1CF1A 0041
+1CF1B 0041
+1CF1C 0041
+1CF1D 0041
+1CF1E 0041
+1CF1F 0041
+1CF20 0041
+1CF21 0041
+1CF22 0041
+1CF23 0041
+1CF24 0041
+1CF25 0041
+1CF26 0041
+1CF27 0041
+1CF28 0041
+1CF29 0041
+1CF2A 0041
+1CF2B 0041
+1CF2C 0041
+1CF2D 0041
+1CF30 0041
+1CF31 0041
+1CF32 0041
+1CF33 0041
+1CF34 0041
+1CF35 0041
+1CF36 0041
+1CF37 0041
+1CF38 0041
+1CF39 0041
+1CF3A 0041
+1CF3B 0041
+1CF3C 0041
+1CF3D 0041
+1CF3E 0041
+1CF3F 0041
+1CF40 0041
+1CF41 0041
+1CF42 0041
+1CF43 0041
+1CF44 0041
+1CF45 0041
+1CF46 0041
1D165 0041
1D166 0041
1D167 0041
@@ -56387,8 +58160,12 @@ A79A 003F
01E0 003F
0105 0021
0105 003F
+A7C1 0021
+A7C1 003F
0104 0021
0104 003F
+A7C0 0021
+A7C0 003F
0101 0021
0101 003F
0100 0021
@@ -56752,6 +58529,14 @@ A79A 003F
1AB4 0061
1ABB 0061
1ABC 0061
+1AC1 0061
+1AC2 0061
+1AC5 0061
+1AC6 0061
+1AC7 0061
+1AC8 0061
+1AC9 0061
+1ACB 0061
1DC0 0061
1DC1 0061
1DC3 0061
@@ -56785,7 +58570,10 @@ A67D 0061
10F49 0061
10F4A 0061
10F4C 0061
+10F82 0061
+10F84 0061
1BC9D 0061
+1E2AE 0061
030D 0041
030E 0041
0312 0041
@@ -56825,6 +58613,14 @@ A67D 0061
1AB4 0041
1ABB 0041
1ABC 0041
+1AC1 0041
+1AC2 0041
+1AC5 0041
+1AC6 0041
+1AC7 0041
+1AC8 0041
+1AC9 0041
+1ACB 0041
1DC0 0041
1DC1 0041
1DC3 0041
@@ -56858,7 +58654,10 @@ A67D 0041
10F49 0041
10F4A 0041
10F4C 0041
+10F82 0041
+10F84 0041
1BC9D 0041
+1E2AE 0041
0316 0061
0317 0061
0318 0061
@@ -56904,10 +58703,14 @@ A67D 0041
1AB9 0061
1ABA 0061
1ABD 0061
+1AC3 0061
+1AC4 0061
+1ACA 0061
1DC2 0061
1DCF 0061
1DD0 0061
1DF9 0061
+1DFA 0061
1DFC 0061
1DFD 0061
1DFF 0061
@@ -56925,6 +58728,8 @@ FE27 0061
10F4E 0061
10F4F 0061
10F50 0061
+10F83 0061
+10F85 0061
0316 0041
0317 0041
0318 0041
@@ -56970,10 +58775,14 @@ FE27 0061
1AB9 0041
1ABA 0041
1ABD 0041
+1AC3 0041
+1AC4 0041
+1ACA 0041
1DC2 0041
1DCF 0041
1DD0 0041
1DF9 0041
+1DFA 0041
1DFC 0041
1DFD 0041
1DFF 0041
@@ -56991,6 +58800,8 @@ FE27 0041
10F4E 0041
10F4F 0041
10F50 0041
+10F83 0041
+10F85 0041
0336 0061
0337 0061
20D8 0061
@@ -57270,9 +59081,13 @@ FE7F 0041
FE7E 0061
FE7E 0041
0653 0061
+089E 0061
+089F 0061
0AFC 0061
10EAC 0061
0653 0041
+089E 0041
+089F 0041
0AFC 0041
10EAC 0041
0654 0061
@@ -57415,6 +59230,7 @@ A6F1 0041
0AFE 0061
0AFF 0061
0B3C 0061
+0C3C 0061
0CBC 0061
1B34 0061
1BE6 0061
@@ -57443,6 +59259,7 @@ A9B3 0061
0AFE 0041
0AFF 0041
0B3C 0041
+0C3C 0041
0CBC 0041
1B34 0041
1BE6 0041
@@ -57958,6 +59775,8 @@ A732 003F
1D43 0061
00AA 0041
1D43 0041
+10780 0021
+10780 003F
2090 0061
2090 0041
1D2C 0061
@@ -57966,6 +59785,7 @@ A732 003F
1D2C 0041
1F130 0041
1F170 0041
+10780 0334
00E1 0061
00E1 0041
00C1 0061
@@ -58056,8 +59876,12 @@ A79A 0041
01E0 0041
0105 0061
0105 0041
+A7C1 0061
+A7C1 0041
0104 0061
0104 0041
+A7C0 0061
+A7C0 0041
0101 0061
0101 0041
0100 0061
@@ -58096,8 +59920,11 @@ A733 0061
A733 0041
A732 0061
A732 0041
+10780 0061
+10780 0041
A733 0062
A732 0062
+10780 0062
0061 0062
FF41 0062
249C 0062
@@ -58188,7 +60015,9 @@ A79A 0062
01E1 0062
01E0 0062
0105 0062
+A7C1 0062
0104 0062
+A7C0 0062
0101 0062
0100 0062
1EA3 0062
@@ -58221,7 +60050,9 @@ A79A 0062
00C6 0021
00C6 003F
1D2D 0021
+10783 0021
1D2D 003F
+10783 003F
01FD 0021
01FD 003F
01FC 0021
@@ -58230,6 +60061,7 @@ A79A 0062
01E3 003F
01E2 0021
01E2 003F
+10783 0334
00E6 0301 0334
00E6 0334 0301
00E6 0334 0341
@@ -58253,7 +60085,9 @@ A79A 0062
00C6 0061
00C6 0041
1D2D 0061
+10783 0061
1D2D 0041
+10783 0041
01FD 0061
01FD 0041
01FC 0061
@@ -58266,6 +60100,7 @@ A79A 0062
1DD4 0062
00C6 0062
1D2D 0062
+10783 0062
01FD 0062
01FC 0062
01E3 0062
@@ -58537,6 +60372,7 @@ FE58 0062
2E43 0062
2E17 0062
2E40 0062
+2E5D 0062
301C 0062
3030 0062
30A0 0062
@@ -58631,6 +60467,7 @@ FE15 0062
FE57 0062
FF01 0062
00A1 0062
+2E53 0062
055C 0062
07F9 0062
1944 0062
@@ -58643,6 +60480,7 @@ FE56 0062
FF1F 0062
00BF 0062
2E2E 0062
+2E54 0062
055E 0062
061F 0062
0709 0062
@@ -58746,6 +60584,7 @@ ABEB 0062
16A6F 0062
1C7E 0062
1C7F 0062
+061D 0062
0700 0062
07F7 0062
10FB 0062
@@ -58755,6 +60594,8 @@ ABEB 0062
1A1F 0062
1B5A 0062
1B5B 0062
+1B7D 0062
+1B7E 0062
A9C1 0062
A9C2 0062
A9C3 0062
@@ -58779,6 +60620,10 @@ A95F 0062
10F57 0062
10F58 0062
10F59 0062
+10F86 0062
+10F87 0062
+10F88 0062
+10F89 0062
110BE 0062
110BF 0062
11140 0062
@@ -58819,6 +60664,8 @@ A95F 0062
12472 0062
12473 0062
12474 0062
+12FF1 0062
+12FF2 0062
0027 0062
FF07 0062
2018 0062
@@ -58949,6 +60796,14 @@ FF60 0062
2E27 0062
2E28 0062
2E29 0062
+2E55 0062
+2E56 0062
+2E57 0062
+2E58 0062
+2E59 0062
+2E5A 0062
+2E5B 0062
+2E5C 0062
2329 0062
3008 0062
FE3F 0062
@@ -59279,6 +61134,7 @@ AA5C 0062
115D6 0062
115D7 0062
11643 0062
+116B9 0062
1183B 0062
11945 0062
119E2 0062
@@ -59442,6 +61298,23 @@ AA5C 0062
0749 0062
074A 0062
07FA 0062
+0890 0062
+0891 0062
+0898 0062
+0899 0062
+089A 0062
+089B 0062
+089C 0062
+089D 0062
+08CA 0062
+08CB 0062
+08CC 0062
+08CD 0062
+08CE 0062
+08CF 0062
+08D0 0062
+08D1 0062
+08D2 0062
08D3 0062
08D4 0062
08D5 0062
@@ -59486,6 +61359,7 @@ AA5C 0062
180C 0062
180D 0062
180E 0062
+180F 0062
1A7F 0062
1B6B 0062
1B6C 0062
@@ -59633,6 +61507,75 @@ FFFB 0062
1BCA1 0062
1BCA2 0062
1BCA3 0062
+1CF00 0062
+1CF01 0062
+1CF02 0062
+1CF03 0062
+1CF04 0062
+1CF05 0062
+1CF06 0062
+1CF07 0062
+1CF08 0062
+1CF09 0062
+1CF0A 0062
+1CF0B 0062
+1CF0C 0062
+1CF0D 0062
+1CF0E 0062
+1CF0F 0062
+1CF10 0062
+1CF11 0062
+1CF12 0062
+1CF13 0062
+1CF14 0062
+1CF15 0062
+1CF16 0062
+1CF17 0062
+1CF18 0062
+1CF19 0062
+1CF1A 0062
+1CF1B 0062
+1CF1C 0062
+1CF1D 0062
+1CF1E 0062
+1CF1F 0062
+1CF20 0062
+1CF21 0062
+1CF22 0062
+1CF23 0062
+1CF24 0062
+1CF25 0062
+1CF26 0062
+1CF27 0062
+1CF28 0062
+1CF29 0062
+1CF2A 0062
+1CF2B 0062
+1CF2C 0062
+1CF2D 0062
+1CF30 0062
+1CF31 0062
+1CF32 0062
+1CF33 0062
+1CF34 0062
+1CF35 0062
+1CF36 0062
+1CF37 0062
+1CF38 0062
+1CF39 0062
+1CF3A 0062
+1CF3B 0062
+1CF3C 0062
+1CF3D 0062
+1CF3E 0062
+1CF3F 0062
+1CF40 0062
+1CF41 0062
+1CF42 0062
+1CF43 0062
+1CF44 0062
+1CF45 0062
+1CF46 0062
1D165 0062
1D166 0062
1D167 0062
@@ -60351,6 +62294,14 @@ FF22 003F
1AB4 0062
1ABB 0062
1ABC 0062
+1AC1 0062
+1AC2 0062
+1AC5 0062
+1AC6 0062
+1AC7 0062
+1AC8 0062
+1AC9 0062
+1ACB 0062
1DC0 0062
1DC1 0062
1DC3 0062
@@ -60384,7 +62335,10 @@ A67D 0062
10F49 0062
10F4A 0062
10F4C 0062
+10F82 0062
+10F84 0062
1BC9D 0062
+1E2AE 0062
0316 0062
0317 0062
0318 0062
@@ -60430,10 +62384,14 @@ A67D 0062
1AB9 0062
1ABA 0062
1ABD 0062
+1AC3 0062
+1AC4 0062
+1ACA 0062
1DC2 0062
1DCF 0062
1DD0 0062
1DF9 0062
+1DFA 0062
1DFC 0062
1DFD 0062
1DFF 0062
@@ -60451,6 +62409,8 @@ FE27 0062
10F4E 0062
10F4F 0062
10F50 0062
+10F83 0062
+10F85 0062
0336 0062
0337 0062
20D8 0062
@@ -60590,6 +62550,8 @@ FC63 0062
FE7F 0062
FE7E 0062
0653 0062
+089E 0062
+089F 0062
0AFC 0062
10EAC 0062
0654 0062
@@ -60666,6 +62628,7 @@ A6F1 0062
0AFE 0062
0AFF 0062
0B3C 0062
+0C3C 0062
0CBC 0062
1B34 0062
1BE6 0062
@@ -61041,9 +63004,15 @@ FF22 0062
33C3 0062
0299 0021
0299 003F
+10784 0021
+10784 003F
+10784 0334
0299 0061
0299 0041
+10784 0061
+10784 0041
0299 0062
+10784 0062
0180 0021
0180 003F
0243 0021
@@ -61088,12 +63057,18 @@ A796 0062
0253 003F
0181 0021
0181 003F
+10785 0021
+10785 003F
+10785 0334
0253 0061
0253 0041
0181 0061
0181 0041
+10785 0061
+10785 0041
0253 0062
0181 0062
+10785 0062
0183 0021
0183 003F
0182 0021
@@ -61202,8 +63177,10 @@ FF23 003F
1F152 003F
1D9C 0021
1D9C 003F
+A7F2 0021
1F132 0021
1F172 0021
+A7F2 003F
1F132 003F
1F172 003F
0107 0021
@@ -61389,8 +63366,10 @@ FF23 0041
1F152 0041
1D9C 0061
1D9C 0041
+A7F2 0061
1F132 0061
1F172 0061
+A7F2 0041
1F132 0041
1F172 0041
0107 0061
@@ -61464,6 +63443,7 @@ FF23 0062
1F12B 0062
1F152 0062
1D9C 0062
+A7F2 0062
1F132 0062
1F172 0062
0107 0062
@@ -61572,6 +63552,12 @@ A7C4 0061
A7C4 0041
A794 0062
A7C4 0062
+1DF1D 0021
+1DF1D 003F
+1DF1D 0334
+1DF1D 0061
+1DF1D 0041
+1DF1D 0062
0188 0021
0188 003F
0187 0021
@@ -62064,12 +64050,15 @@ A779 0062
01F2 003F
01F1 0021
01F1 003F
+10787 0021
+10787 003F
01C6 0021
01C6 003F
01C5 0021
01C5 003F
01C4 0021
01C4 003F
+10787 0334
01F3 0061
02A3 0061
01F3 0041
@@ -62078,6 +64067,8 @@ A779 0062
01F2 0041
01F1 0061
01F1 0041
+10787 0061
+10787 0041
01C6 0061
01C6 0041
01C5 0061
@@ -62088,24 +64079,55 @@ A779 0062
02A3 0062
01F2 0062
01F1 0062
+10787 0062
01C6 0062
01C5 0062
01C4 0062
AB66 0021
AB66 003F
+10788 0021
+10788 003F
+10788 0334
AB66 0061
AB66 0041
+10788 0061
+10788 0041
AB66 0062
+10788 0062
02A5 0021
02A5 003F
+10789 0021
+10789 003F
+10789 0334
02A5 0061
02A5 0041
+10789 0061
+10789 0041
02A5 0062
+10789 0062
02A4 0021
02A4 003F
+1078A 0021
+1078A 003F
+1078A 0334
02A4 0061
02A4 0041
+1078A 0061
+1078A 0041
02A4 0062
+1078A 0062
+1DF12 0021
+1DF12 003F
+1DF12 0334
+1DF12 0061
+1DF12 0041
+1DF12 0062
+1DF19 0021
+1DF19 003F
+1DF19 0334
+1DF19 0061
+1DF19 0041
+1DF19 0062
1D05 0021
1D05 003F
1D05 0061
@@ -62140,27 +64162,45 @@ A7C7 0062
0256 003F
0189 0021
0189 003F
+1078B 0021
+1078B 003F
+1078B 0334
0256 0061
0256 0041
0189 0061
0189 0041
+1078B 0061
+1078B 0041
0256 0062
0189 0062
+1078B 0062
0257 0021
0257 003F
018A 0021
018A 003F
+1078C 0021
+1078C 003F
+1078C 0334
0257 0061
0257 0041
018A 0061
018A 0041
+1078C 0061
+1078C 0041
0257 0062
018A 0062
+1078C 0062
1D91 0021
1D91 003F
+1078D 0021
+1078D 003F
+1078D 0334
1D91 0061
1D91 0041
+1078D 0061
+1078D 0041
1D91 0062
+1078D 0062
018C 0021
018C 003F
018B 0021
@@ -62975,9 +65015,15 @@ AB34 0062
1D93 0062
0258 0021
0258 003F
+1078E 0021
+1078E 003F
+1078E 0334
0258 0061
0258 0041
+1078E 0061
+1078E 0041
0258 0062
+1078E 0062
025A 0021
025A 003F
025A 0061
@@ -63020,9 +65066,15 @@ A7AB 0062
025D 0062
025E 0021
025E 003F
+1078F 0021
+1078F 003F
+1078F 0334
025E 0061
025E 0041
+1078F 0061
+1078F 0041
025E 0062
+1078F 0062
029A 0021
029A 003F
029A 0061
@@ -63030,9 +65082,15 @@ A7AB 0062
029A 0062
0264 0021
0264 003F
+10791 0021
+10791 003F
+10791 0334
0264 0061
0264 0041
+10791 0061
+10791 0041
0264 0062
+10791 0062
0066 0021
0066 003F
FF46 0021
@@ -63108,8 +65166,10 @@ FF26 003F
1F155 003F
1DA0 0021
1DA0 003F
+A7F3 0021
1F135 0021
1F175 0021
+A7F3 003F
1F135 003F
1F175 003F
1E1F 0021
@@ -63230,8 +65290,10 @@ FF26 0041
1F155 0041
1DA0 0061
1DA0 0041
+A7F3 0061
1F135 0061
1F175 0061
+A7F3 0041
1F135 0041
1F175 0041
1E1F 0061
@@ -63284,6 +65346,7 @@ FF26 0062
24BB 0062
1F155 0062
1DA0 0062
+A7F3 0062
1F135 0062
1F175 0062
1E1F 0062
@@ -63322,9 +65385,21 @@ FB02 0062
3399 0062
02A9 0021
02A9 003F
+10790 0021
+10790 003F
+10790 0334
+1DF00 0021
+1DF00 003F
+1DF00 0334
02A9 0061
02A9 0041
+10790 0061
+10790 0041
+1DF00 0061
+1DF00 0041
02A9 0062
+10790 0062
+1DF00 0062
1F193 0021
1F193 003F
1F193 0334
@@ -63571,12 +65646,15 @@ A7A0 003F
0047 0304 0334
0047 0334 0304
1E20 0334
+1ACC 0021
1D79 0021
+1ACC 003F
1D79 003F
A77D 0021
A77D 003F
0334 1DDA
1DDA 0334
+1ACC 0334
0067 0061
0067 0041
FF47 0061
@@ -63689,7 +65767,9 @@ A7A1 0061
A7A1 0041
A7A0 0061
A7A0 0041
+1ACC 0061
1D79 0061
+1ACC 0041
1D79 0041
A77D 0061
A77D 0041
@@ -63756,6 +65836,7 @@ FF27 0062
1E20 0062
A7A1 0062
A7A0 0062
+1ACC 0062
1D79 0062
A77D 0062
3387 0061
@@ -63776,6 +65857,16 @@ A77D 0062
33C9 0061
33C9 0041
33C9 0062
+A7D1 0021
+A7D1 003F
+A7D0 0021
+A7D0 003F
+A7D1 0061
+A7D1 0041
+A7D0 0061
+A7D0 0041
+A7D1 0062
+A7D0 0062
0261 0021
0261 003F
A7AC 0021
@@ -63791,6 +65882,12 @@ A7AC 0041
0261 0062
A7AC 0062
1DA2 0062
+1DF01 0021
+1DF01 003F
+1DF01 0334
+1DF01 0061
+1DF01 0041
+1DF01 0062
AB36 0021
AB36 003F
AB36 0061
@@ -63800,14 +65897,20 @@ AB36 0062
0262 003F
1DDB 0021
1DDB 003F
+10792 0021
+10792 003F
+10792 0334
0334 1DDB
1DDB 0334
0262 0061
0262 0041
1DDB 0061
1DDB 0041
+10792 0061
+10792 0041
0262 0062
1DDB 0062
+10792 0062
01E5 0021
01E5 003F
01E4 0021
@@ -63827,22 +65930,40 @@ AB36 0062
0260 003F
0193 0021
0193 003F
+10793 0021
+10793 003F
+10793 0334
0260 0061
0260 0041
0193 0061
0193 0041
+10793 0061
+10793 0041
0260 0062
0193 0062
+10793 0062
029B 0021
029B 003F
+10794 0021
+10794 003F
+10794 0334
029B 0061
029B 0041
+10794 0061
+10794 0041
029B 0062
+10794 0062
1D77 0021
1D77 003F
1D77 0061
1D77 0041
1D77 0062
+1DF02 0021
+1DF02 003F
+1DF02 0334
+1DF02 0061
+1DF02 0041
+1DF02 0062
A77F 0021
A77F 003F
A77E 0021
@@ -63988,7 +66109,10 @@ FF28 003F
0126 0021
0126 003F
A7F8 0021
+10795 0021
A7F8 003F
+10795 003F
+10795 0334
1E25 0021
1E25 003F
1E24 0021
@@ -64182,7 +66306,9 @@ FF28 0041
0126 0061
0126 0041
A7F8 0061
+10795 0061
A7F8 0041
+10795 0041
1E25 0061
1E25 0041
1E24 0061
@@ -64251,6 +66377,7 @@ FF28 0062
210F 0062
0126 0062
A7F8 0062
+10795 0062
1E25 0062
1E24 0062
1E2B 0062
@@ -64302,9 +66429,15 @@ A7F8 0062
3390 0062
029C 0021
029C 003F
+10796 0021
+10796 003F
+10796 0334
029C 0061
029C 0041
+10796 0061
+10796 0041
029C 0062
+10796 0062
0195 0021
0195 003F
01F6 0021
@@ -64382,9 +66515,15 @@ A726 0062
AB5C 0062
0267 0021
0267 003F
+10797 0021
+10797 003F
+10797 0334
0267 0061
0267 0041
+10797 0061
+10797 0041
0267 0062
+10797 0062
02BB 0021
02BB 003F
02BB 0061
@@ -65047,6 +67186,12 @@ A7F7 0062
1DA7 0041
1D7B 0062
1DA7 0062
+1DF1A 0021
+1DF1A 003F
+1DF1A 0334
+1DF1A 0061
+1DF1A 0041
+1DF1A 0062
1D96 0021
1D96 003F
1D96 0061
@@ -65394,9 +67539,15 @@ A7B2 0062
1DA1 0062
0284 0021
0284 003F
+10798 0021
+10798 003F
+10798 0334
0284 0061
0284 0041
+10798 0061
+10798 0041
0284 0062
+10798 0062
006B 0021
006B 003F
FF4B 0021
@@ -65875,6 +68026,12 @@ A744 0061
A744 0041
A745 0062
A744 0062
+1DF03 0021
+1DF03 003F
+1DF03 0334
+1DF03 0061
+1DF03 0041
+1DF03 0062
029E 0021
029E 003F
A7B0 0021
@@ -65885,6 +68042,12 @@ A7B0 0061
A7B0 0041
029E 0062
A7B0 0062
+1DF10 0021
+1DF10 003F
+1DF10 0334
+1DF10 0061
+1DF10 0041
+1DF10 0062
006C 0021
006C 003F
FF4C 0021
@@ -66352,9 +68515,15 @@ FF2C 0062
1F1A9 0062
02AA 0021
02AA 003F
+10799 0021
+10799 003F
+10799 0334
02AA 0061
02AA 0041
+10799 0061
+10799 0041
02AA 0062
+10799 0062
32CF 0021
32CF 003F
32CF 0061
@@ -66367,9 +68536,15 @@ FF2C 0062
33D3 0062
02AB 0021
02AB 003F
+1079A 0021
+1079A 003F
+1079A 0334
02AB 0061
02AB 0041
+1079A 0061
+1079A 0041
02AB 0062
+1079A 0062
029F 0021
029F 003F
1DDE 0021
@@ -66468,12 +68643,36 @@ AB39 0062
026C 003F
A7AD 0021
A7AD 003F
+1079B 0021
+1079B 003F
+1079B 0334
026C 0061
026C 0041
A7AD 0061
A7AD 0041
+1079B 0061
+1079B 0041
026C 0062
A7AD 0062
+1079B 0062
+1DF04 0021
+1DF04 003F
+1079C 0021
+1079C 003F
+1DF04 0334
+1079C 0334
+1DF04 0061
+1DF04 0041
+1079C 0061
+1079C 0041
+1DF04 0062
+1079C 0062
+1DF13 0021
+1DF13 003F
+1DF13 0334
+1DF13 0061
+1DF13 0041
+1DF13 0062
AB37 0021
AB37 003F
AB5D 0021
@@ -66506,9 +68705,21 @@ AB5D 0062
1DA9 0062
A78E 0021
A78E 003F
+1079D 0021
+1079D 003F
+1079D 0334
A78E 0061
A78E 0041
+1079D 0061
+1079D 0041
A78E 0062
+1079D 0062
+1DF11 0021
+1DF11 003F
+1DF11 0334
+1DF11 0061
+1DF11 0041
+1DF11 0062
0234 0021
0234 003F
0234 0061
@@ -66521,9 +68732,27 @@ A772 0041
A772 0062
026E 0021
026E 003F
+1079E 0021
+1079E 003F
+1079E 0334
026E 0061
026E 0041
+1079E 0061
+1079E 0041
026E 0062
+1079E 0062
+1DF05 0021
+1DF05 003F
+1079F 0021
+1079F 003F
+1DF05 0334
+1079F 0334
+1DF05 0061
+1DF05 0041
+1079F 0061
+1079F 0041
+1DF05 0062
+1079F 0062
A781 0021
A781 003F
A780 0021
@@ -66541,9 +68770,27 @@ A780 0062
019B 0062
028E 0021
028E 003F
+107A0 0021
+107A0 003F
+107A0 0334
028E 0061
028E 0041
+107A0 0061
+107A0 0041
028E 0062
+107A0 0062
+1DF06 0021
+1DF06 003F
+107A1 0021
+107A1 003F
+1DF06 0334
+107A1 0334
+1DF06 0061
+1DF06 0041
+107A1 0061
+107A1 0041
+1DF06 0062
+107A1 0062
006D 0021
006D 003F
FF4D 0021
@@ -67604,6 +69851,18 @@ AB3C 003F
AB3C 0061
AB3C 0041
AB3C 0062
+1DF14 0021
+1DF14 003F
+1DF14 0334
+1DF14 0061
+1DF14 0041
+1DF14 0062
+1DF07 0021
+1DF07 003F
+1DF07 0334
+1DF07 0061
+1DF07 0041
+1DF07 0062
006F 0021
006F 003F
FF4F 0021
@@ -67771,10 +70030,13 @@ A79C 003F
00F8 003F
00D8 0021
00D8 003F
+107A2 0021
+107A2 003F
01FF 0021
01FF 003F
01FE 0021
01FE 003F
+107A2 0334
00F8 0301 0334
00F8 0334 0301
00F8 0334 0341
@@ -68293,6 +70555,8 @@ A79C 0041
00F8 0041
00D8 0061
00D8 0041
+107A2 0061
+107A2 0041
01FF 0061
01FF 0041
01FE 0061
@@ -68446,6 +70710,7 @@ A79C 0062
0230 0062
00F8 0062
00D8 0062
+107A2 0062
01FF 0062
01FE 0062
01EB 0062
@@ -68534,9 +70799,15 @@ AB3D 0041
AB3D 0062
0276 0021
0276 003F
+107A3 0021
+107A3 003F
+107A3 0334
0276 0061
0276 0041
+107A3 0061
+107A3 0041
0276 0062
+107A3 0062
1D14 0021
1D14 003F
1D14 0061
@@ -68577,6 +70848,12 @@ AB3E 003F
AB3E 0061
AB3E 0041
AB3E 0062
+1DF1B 0021
+1DF1B 003F
+1DF1B 0334
+1DF1B 0061
+1DF1B 0041
+1DF1B 0062
0254 0021
0254 003F
0186 0021
@@ -68679,9 +70956,15 @@ A74B 0062
A74A 0062
0277 0021
0277 003F
+107A4 0021
+107A4 003F
+107A4 0334
0277 0061
0277 0041
+107A4 0061
+107A4 0041
0277 0062
+107A4 0062
A7B7 0021
A7B7 003F
A7B6 0021
@@ -69216,8 +71499,12 @@ FF31 003F
1F160 0021
24C6 003F
1F160 003F
+107A5 0021
+107A5 003F
+A7F4 0021
1F140 0021
1F180 0021
+A7F4 003F
1F140 003F
1F180 003F
1D42A 0334
@@ -69246,6 +71533,7 @@ FF31 003F
1D64C 0334
1D680 0334
1F160 0334
+107A5 0334
1F140 0334
1F180 0334
0071 0061
@@ -69318,8 +71606,12 @@ FF31 0041
1F160 0061
24C6 0041
1F160 0041
+107A5 0061
+107A5 0041
+A7F4 0061
1F140 0061
1F180 0061
+A7F4 0041
1F140 0041
1F180 0041
0071 0062
@@ -69357,6 +71649,8 @@ FF31 0062
1D680 0062
24C6 0062
1F160 0062
+107A5 0062
+A7F4 0062
1F140 0062
1F180 0062
0239 0021
@@ -69621,14 +71915,25 @@ A7A6 003F
0052 0331 0334
0052 0334 0331
1E5E 0334
+1ACD 0021
A783 0021
+1ACD 003F
A783 003F
A782 0021
A782 003F
+1DE3 0021
+A75B 0021
+1DE3 003F
+A75B 003F
+A75A 0021
+A75A 003F
0334 036C
036C 0334
0334 1DCA
1DCA 0334
+1ACD 0334
+0334 1DE3
+1DE3 0334
0072 0061
0072 0041
FF52 0061
@@ -69755,10 +72060,18 @@ A7A6 0041
1E5F 0041
1E5E 0061
1E5E 0041
+1ACD 0061
A783 0061
+1ACD 0041
A783 0041
A782 0061
A782 0041
+1DE3 0061
+A75B 0061
+1DE3 0041
+A75B 0041
+A75A 0061
+A75A 0041
33AD 0021
33AD 003F
33AE 0021
@@ -69837,8 +72150,12 @@ A7A6 0062
1E5C 0062
1E5F 0062
1E5E 0062
+1ACD 0062
A783 0062
A782 0062
+1DE3 0062
+A75B 0062
+A75A 0062
AB45 0021
AB45 003F
AB45 0061
@@ -69850,6 +72167,9 @@ AB45 0062
1DE2 003F
01A6 0021
01A6 003F
+107AA 0021
+107AA 003F
+107AA 0334
0334 1DE2
1DE2 0334
0280 0061
@@ -69858,31 +72178,17 @@ AB45 0062
1DE2 0041
01A6 0061
01A6 0041
+107AA 0061
+107AA 0041
0280 0062
1DE2 0062
01A6 0062
+107AA 0062
AB46 0021
AB46 003F
AB46 0061
AB46 0041
AB46 0062
-A75B 0021
-A75B 003F
-1DE3 0021
-1DE3 003F
-A75A 0021
-A75A 003F
-0334 1DE3
-1DE3 0334
-A75B 0061
-A75B 0041
-1DE3 0061
-1DE3 0041
-A75A 0061
-A75A 0041
-A75B 0062
-1DE3 0062
-A75A 0062
1D19 0021
1D19 003F
1D19 0061
@@ -69920,9 +72226,27 @@ A75A 0062
1D1A 0062
027A 0021
027A 003F
+107A6 0021
+107A6 003F
+107A6 0334
027A 0061
027A 0041
+107A6 0061
+107A6 0041
027A 0062
+107A6 0062
+1DF08 0021
+1DF08 003F
+107A7 0021
+107A7 003F
+1DF08 0334
+107A7 0334
+1DF08 0061
+1DF08 0041
+107A7 0061
+107A7 0041
+1DF08 0062
+107A7 0062
1D89 0021
1D89 003F
1D89 0061
@@ -69952,12 +72276,18 @@ A75A 0062
027D 003F
2C64 0021
2C64 003F
+107A8 0021
+107A8 003F
+107A8 0334
027D 0061
027D 0041
2C64 0061
2C64 0041
+107A8 0061
+107A8 0041
027D 0062
2C64 0062
+107A8 0062
AB49 0021
AB49 003F
AB49 0061
@@ -69965,14 +72295,26 @@ AB49 0041
AB49 0062
027E 0021
027E 003F
+107A9 0021
+107A9 003F
+107A9 0334
027E 0061
027E 0041
+107A9 0061
+107A9 0041
027E 0062
+107A9 0062
1D73 0021
1D73 003F
1D73 0061
1D73 0041
1D73 0062
+1DF16 0021
+1DF16 003F
+1DF16 0334
+1DF16 0061
+1DF16 0041
+1DF16 0062
027F 0021
027F 003F
027F 0061
@@ -70018,6 +72360,12 @@ AB68 003F
AB68 0061
AB68 0041
AB68 0062
+1DF15 0021
+1DF15 003F
+1DF15 0334
+1DF15 0061
+1DF15 0041
+1DF15 0062
A775 0021
A775 003F
A775 0061
@@ -70265,17 +72613,21 @@ A7A8 003F
0218 0334
017F 0021
1DE5 0021
-A785 0021
017F 003F
1DE5 003F
-A785 003F
-A784 0021
-A784 003F
1E9B 0021
1E9B 003F
017F 0307 0334
017F 0334 0307
1E9B 0334
+A785 0021
+A785 003F
+A784 0021
+A784 003F
+A7D9 0021
+A7D9 003F
+A7D8 0021
+A7D8 003F
0334 1DE4
1DE4 0334
0334 1DE5
@@ -70411,14 +72763,18 @@ A7A8 0041
0218 0041
017F 0061
1DE5 0061
-A785 0061
017F 0041
1DE5 0041
+1E9B 0061
+1E9B 0041
+A785 0061
A785 0041
A784 0061
A784 0041
-1E9B 0061
-1E9B 0041
+A7D9 0061
+A7D9 0041
+A7D8 0061
+A7D8 0041
1F18D 0061
1F18D 0041
1F18D 0062
@@ -70487,9 +72843,11 @@ A7A8 0062
0218 0062
017F 0062
1DE5 0062
+1E9B 0062
A785 0062
A784 0062
-1E9B 0062
+A7D9 0062
+A7D8 0062
1F14C 0021
1F14C 003F
1F14C 0334
@@ -70589,6 +72947,18 @@ A7C5 0041
0282 0062
A7C5 0062
1DB3 0062
+1DF1E 0021
+1DF1E 003F
+107BA 0021
+107BA 003F
+1DF1E 0334
+107BA 0334
+1DF1E 0061
+1DF1E 0041
+107BA 0061
+107BA 0041
+1DF1E 0062
+107BA 0062
023F 0021
023F 003F
2C7E 0021
@@ -70599,6 +72969,16 @@ A7C5 0062
2C7E 0041
023F 0062
2C7E 0062
+A7D7 0021
+A7D7 003F
+A7D6 0021
+A7D6 003F
+A7D7 0061
+A7D7 0041
+A7D6 0061
+A7D6 0041
+A7D7 0062
+A7D6 0062
1E9C 0021
1E9C 003F
1E9C 0061
@@ -70641,6 +73021,11 @@ AB4D 0062
1D8B 0061
1D8B 0041
1D8B 0062
+1D98 0021
+1D98 003F
+1D98 0061
+1D98 0041
+1D98 0062
01AA 0021
01AA 003F
01AA 0061
@@ -70651,16 +73036,23 @@ AB4D 0062
0285 0061
0285 0041
0285 0062
-1D98 0021
-1D98 003F
-1D98 0061
-1D98 0041
-1D98 0062
0286 0021
0286 003F
0286 0061
0286 0041
0286 0062
+1DF0B 0021
+1DF0B 003F
+1DF0B 0334
+1DF0B 0061
+1DF0B 0041
+1DF0B 0062
+1DF0C 0021
+1DF0C 003F
+1DF0C 0334
+1DF0C 0061
+1DF0C 0041
+1DF0C 0062
0074 0021
0074 003F
FF54 0021
@@ -70848,12 +73240,15 @@ FF34 003F
0054 0331 0334
0054 0334 0331
1E6E 0334
+1ACE 0021
A787 0021
+1ACE 003F
A787 003F
A786 0021
A786 003F
0334 036D
036D 0334
+1ACE 0334
0074 0061
0074 0041
FF54 0061
@@ -70966,7 +73361,9 @@ FF34 0041
1E6F 0041
1E6E 0061
1E6E 0041
+1ACE 0061
A787 0061
+1ACE 0041
A787 0041
A786 0061
A786 0041
@@ -71026,13 +73423,20 @@ FF34 0062
1E70 0062
1E6F 0062
1E6E 0062
+1ACE 0062
A787 0062
A786 0062
02A8 0021
02A8 003F
+107AB 0021
+107AB 003F
+107AB 0334
02A8 0061
02A8 0041
+107AB 0061
+107AB 0041
02A8 0062
+107AB 0062
2121 0021
2121 003F
2121 0061
@@ -71057,22 +73461,52 @@ A786 0062
02A6 0021
01BE 003F
02A6 003F
+107AC 0021
+107AC 003F
+107AC 0334
01BE 0061
02A6 0061
01BE 0041
02A6 0041
+107AC 0061
+107AC 0041
01BE 0062
02A6 0062
+107AC 0062
AB67 0021
AB67 003F
+107AD 0021
+107AD 003F
+107AD 0334
AB67 0061
AB67 0041
+107AD 0061
+107AD 0041
AB67 0062
+107AD 0062
02A7 0021
02A7 003F
+107AE 0021
+107AE 003F
+107AE 0334
02A7 0061
02A7 0041
+107AE 0061
+107AE 0041
02A7 0062
+107AE 0062
+1DF17 0021
+1DF17 003F
+1DF17 0334
+1DF17 0061
+1DF17 0041
+1DF17 0062
+1DF1C 0021
+1DF1C 003F
+1DF1C 0334
+1DF1C 0061
+1DF1C 0041
+1DF1C 0062
A729 0021
A729 003F
A728 0021
@@ -71137,12 +73571,24 @@ A728 0062
0288 003F
01AE 0021
01AE 003F
+107AF 0021
+107AF 003F
+107AF 0334
0288 0061
0288 0041
01AE 0061
01AE 0041
+107AF 0061
+107AF 0041
0288 0062
01AE 0062
+107AF 0062
+1DF09 0021
+1DF09 003F
+1DF09 0334
+1DF09 0061
+1DF09 0041
+1DF09 0062
0236 0021
0236 003F
0236 0061
@@ -71163,6 +73609,12 @@ A7B1 0061
A7B1 0041
0287 0062
A7B1 0062
+1DF0D 0021
+1DF0D 003F
+1DF0D 0334
+1DF0D 0061
+1DF0D 0041
+1DF0D 0062
0075 0021
0075 003F
FF55 0021
@@ -72500,9 +74952,15 @@ A75E 0062
1DB9 0062
2C71 0021
2C71 003F
+107B0 0021
+107B0 003F
+107B0 0334
2C71 0061
2C71 0041
+107B0 0061
+107B0 0041
2C71 0062
+107B0 0062
2C74 0021
2C74 003F
2C74 0061
@@ -72714,6 +75172,10 @@ FF37 003F
0057 0323 0334
0057 0334 0323
1E88 0334
+A7C3 0021
+A7C3 003F
+A7C2 0021
+A7C2 003F
0334 1ABF
1ABF 0334
0334 1DF1
@@ -72826,6 +75288,10 @@ FF37 0041
1E89 0041
1E88 0061
1E88 0041
+A7C3 0061
+A7C3 0041
+A7C2 0061
+A7C2 0041
0077 0062
FF57 0062
24B2 0062
@@ -72882,6 +75348,8 @@ FF37 0062
1E86 0062
1E89 0062
1E88 0062
+A7C3 0062
+A7C2 0062
33DD 0061
33DD 0041
33DD 0062
@@ -72908,16 +75376,6 @@ FF37 0062
1D21 0061
1D21 0041
1D21 0062
-A7C3 0021
-A7C3 003F
-A7C2 0021
-A7C2 003F
-A7C3 0061
-A7C3 0041
-A7C2 0061
-A7C2 0041
-A7C3 0062
-A7C2 0062
2C73 0021
2C73 003F
2C72 0021
@@ -73662,9 +76120,15 @@ FF39 0062
1EF4 0062
028F 0021
028F 003F
+107B2 0021
+107B2 003F
+107B2 0334
028F 0061
028F 0041
+107B2 0061
+107B2 0041
028F 0062
+107B2 0062
024F 0021
024F 003F
024E 0021
@@ -74174,6 +76638,12 @@ A762 0062
01B8 0041
01B9 0062
01B8 0062
+1DF18 0021
+1DF18 003F
+1DF18 0334
+1DF18 0061
+1DF18 0041
+1DF18 0062
1D9A 0021
1D9A 003F
1D9A 0061
@@ -74199,6 +76669,11 @@ A762 0062
00DE 0041
00FE 0062
00DE 0062
+A7D3 0021
+A7D3 003F
+A7D3 0061
+A7D3 0041
+A7D3 0062
A765 0021
A765 003F
A764 0021
@@ -74229,6 +76704,11 @@ A766 0062
01F7 0041
01BF 0062
01F7 0062
+A7D5 0021
+A7D5 003F
+A7D5 0061
+A7D5 0041
+A7D5 0062
A769 0021
A769 003F
A768 0021
@@ -74478,49 +76958,109 @@ A725 0062
A724 0062
02A1 0021
02A1 003F
+107B3 0021
+107B3 003F
+107B3 0334
02A1 0061
02A1 0041
+107B3 0061
+107B3 0041
02A1 0062
+107B3 0062
02A2 0021
02A2 003F
+107B4 0021
+107B4 003F
+107B4 0334
02A2 0061
02A2 0041
+107B4 0061
+107B4 0041
02A2 0062
+107B4 0062
0296 0021
0296 003F
0296 0061
0296 0041
0296 0062
+1DF0E 0021
+1DF0E 003F
+1DF0E 0334
+1DF0E 0061
+1DF0E 0041
+1DF0E 0062
01C0 0021
01C0 003F
+107B6 0021
+107B6 003F
+107B6 0334
01C0 0061
01C0 0041
+107B6 0061
+107B6 0041
01C0 0062
+107B6 0062
01C1 0021
01C1 003F
+107B7 0021
+107B7 003F
+107B7 0334
01C1 0061
01C1 0041
+107B7 0061
+107B7 0041
01C1 0062
+107B7 0062
01C2 0021
01C2 003F
+107B8 0021
+107B8 003F
+107B8 0334
01C2 0061
01C2 0041
+107B8 0061
+107B8 0041
01C2 0062
+107B8 0062
01C3 0021
01C3 003F
01C3 0061
01C3 0041
01C3 0062
+1DF0A 0021
+1DF0A 003F
+107B9 0021
+107B9 003F
+1DF0A 0334
+107B9 0334
+1DF0A 0061
+1DF0A 0041
+107B9 0061
+107B9 0041
+1DF0A 0062
+107B9 0062
0297 0021
0297 003F
0297 0061
0297 0041
0297 0062
+1DF0F 0021
+1DF0F 003F
+1DF0F 0334
+1DF0F 0061
+1DF0F 0041
+1DF0F 0062
0298 0021
0298 003F
+107B5 0021
+107B5 003F
+107B5 0334
0298 0061
0298 0041
+107B5 0061
+107B5 0041
0298 0062
+107B5 0062
02AC 0021
02AC 003F
02AC 0061
@@ -82638,6 +85178,16 @@ A65E 0062
2C2E 0041
2C5E 0062
2C2E 0062
+2C5F 0021
+2C5F 003F
+2C2F 0021
+2C2F 003F
+2C5F 0061
+2C5F 0041
+2C2F 0061
+2C2F 0041
+2C5F 0062
+2C2F 0062
10350 0021
10350 003F
10376 0021
@@ -84961,7 +87511,11 @@ FB4A 0062
0621 0021
0621 003F
0674 0021
+0883 0021
+0887 0021
0674 003F
+0883 003F
+0887 003F
FE80 0021
FE80 003F
06FD 0021
@@ -84969,15 +87523,46 @@ FE80 003F
0621 0061
0621 0041
0674 0061
+0883 0061
+0887 0061
0674 0041
+0883 0041
+0887 0041
FE80 0061
FE80 0041
06FD 0061
06FD 0041
0621 0062
0674 0062
+0883 0062
+0887 0062
FE80 0062
06FD 0062
+0675 0021
+0675 003F
+0675 0061
+0675 0041
+0675 0062
+0676 0021
+0676 003F
+0676 0061
+0676 0041
+0676 0062
+0677 0021
+0677 003F
+FBDD 0021
+FBDD 003F
+0677 0061
+0677 0041
+FBDD 0061
+FBDD 0041
+0677 0062
+FBDD 0062
+0678 0021
+0678 003F
+0678 0061
+0678 0041
+0678 0062
0622 0021
0627 0653 0021
0622 003F
@@ -85344,7 +87929,45 @@ FBF6 0062
08AC 0062
0627 0021
0627 003F
+0870 0021
+0871 0021
+0872 0021
+0873 0021
+0874 0021
+0875 0021
+0876 0021
+0877 0021
+0878 0021
+0879 0021
+087A 0021
+087B 0021
+087C 0021
+087D 0021
+087E 0021
+087F 0021
+0880 0021
+0881 0021
+0882 0021
08AD 0021
+0870 003F
+0871 003F
+0872 003F
+0873 003F
+0874 003F
+0875 003F
+0876 003F
+0877 003F
+0878 003F
+0879 003F
+087A 003F
+087B 003F
+087C 003F
+087D 003F
+087E 003F
+087F 003F
+0880 003F
+0881 003F
+0882 003F
08AD 003F
1EE00 0021
1EE80 0021
@@ -85362,7 +87985,45 @@ FD3D 0021
FD3D 003F
0627 0061
0627 0041
+0870 0061
+0871 0061
+0872 0061
+0873 0061
+0874 0061
+0875 0061
+0876 0061
+0877 0061
+0878 0061
+0879 0061
+087A 0061
+087B 0061
+087C 0061
+087D 0061
+087E 0061
+087F 0061
+0880 0061
+0881 0061
+0882 0061
08AD 0061
+0870 0041
+0871 0041
+0872 0041
+0873 0041
+0874 0041
+0875 0041
+0876 0041
+0877 0041
+0878 0041
+0879 0041
+087A 0041
+087B 0041
+087C 0041
+087D 0041
+087E 0041
+087F 0041
+0880 0041
+0881 0041
+0882 0041
08AD 0041
1EE00 0061
1EE80 0061
@@ -85381,6 +88042,25 @@ FD3D 0041
0627 0001 0655 0061
0627 0591 0655 0061
0627 0062
+0870 0062
+0871 0062
+0872 0062
+0873 0062
+0874 0062
+0875 0062
+0876 0062
+0877 0062
+0878 0062
+0879 0062
+087A 0062
+087B 0062
+087C 0062
+087D 0062
+087E 0062
+087F 0062
+0880 0062
+0881 0062
+0882 0062
08AD 0062
1EE00 0062
1EE80 0062
@@ -85388,11 +88068,6 @@ FE8E 0062
FE8D 0062
FD3C 0062
FD3D 0062
-0675 0021
-0675 003F
-0675 0061
-0675 0041
-0675 0062
FDF3 0021
FDF3 003F
FDF3 0061
@@ -86356,6 +89031,11 @@ FB74 0062
FB75 0062
FB73 0062
FB72 0062
+088A 0021
+088A 003F
+088A 0061
+088A 0041
+088A 0062
0686 0021
0686 003F
FB7C 0021
@@ -88052,6 +90732,16 @@ FC28 0062
08A3 0061
08A3 0041
08A3 0062
+088B 0021
+088B 003F
+088B 0061
+088B 0041
+088B 0062
+088C 0021
+088C 003F
+088C 0061
+088C 0041
+088C 0062
0639 0021
0639 003F
1EE0F 0021
@@ -88739,6 +91429,11 @@ FC36 0062
08A5 0061
08A5 0041
08A5 0062
+08B5 0021
+08B5 003F
+08B5 0061
+08B5 0041
+08B5 0062
0643 0021
0643 003F
1EE0A 0021
@@ -89007,6 +91702,11 @@ FB92 0062
08B0 0061
08B0 0041
08B0 0062
+08C8 0021
+08C8 003F
+08C8 0061
+08C8 0041
+08C8 0062
06B0 0021
06B0 003F
06B0 0061
@@ -89082,6 +91782,11 @@ FB96 0062
063B 0061
063B 0041
063B 0062
+088D 0021
+088D 003F
+088D 0061
+088D 0041
+088D 0062
063C 0021
063C 003F
063C 0061
@@ -89870,6 +92575,11 @@ FBA0 0062
0769 0061
0769 0041
0769 0062
+0889 0021
+0889 003F
+0889 0061
+0889 0041
+0889 0062
0647 0021
0647 003F
1EE24 0021
@@ -90052,7 +92762,9 @@ FBA4 0062
0648 0021
0648 003F
06E5 0021
+0884 0021
06E5 003F
+0884 003F
1EE05 0021
1EE85 0021
1EEA5 0021
@@ -90069,7 +92781,9 @@ FEED 003F
0648 0061
0648 0041
06E5 0061
+0884 0061
06E5 0041
+0884 0041
1EE05 0061
1EE85 0061
1EEA5 0061
@@ -90083,16 +92797,12 @@ FEED 0041
0648 0001 0654 0061
0648 0062
06E5 0062
+0884 0062
1EE05 0062
1EE85 0062
1EEA5 0062
FEEE 0062
FEED 0062
-0676 0021
-0676 003F
-0676 0061
-0676 0041
-0676 0062
FDF8 0021
FDF8 003F
FDF8 0061
@@ -90148,16 +92858,6 @@ FBD7 0041
06C7 0062
FBD8 0062
FBD7 0062
-0677 0021
-0677 003F
-FBDD 0021
-FBDD 003F
-0677 0061
-0677 0041
-FBDD 0061
-FBDD 0041
-0677 0062
-FBDD 0062
06C8 0021
06C8 003F
FBDC 0021
@@ -90271,7 +92971,11 @@ FC5D 0062
064A 0021
064A 003F
06E6 0021
+0885 0021
+0886 0021
06E6 003F
+0885 003F
+0886 003F
1EE09 0021
1EE29 0021
1EE49 0021
@@ -90301,7 +93005,11 @@ FEF1 003F
064A 0061
064A 0041
06E6 0061
+0885 0061
+0886 0061
06E6 0041
+0885 0041
+0886 0041
1EE09 0061
1EE29 0061
1EE49 0061
@@ -90325,6 +93033,8 @@ FEF1 0041
064A 0001 0654 0061
064A 0062
06E6 0062
+0885 0062
+0886 0062
1EE09 0062
1EE29 0062
1EE49 0062
@@ -90335,11 +93045,6 @@ FEF3 0062
FEF4 0062
FEF2 0062
FEF1 0062
-0678 0021
-0678 003F
-0678 0061
-0678 0041
-0678 0062
FCDA 0021
FCDA 003F
FC55 0021
@@ -90462,6 +93167,8 @@ FC96 0062
FC5A 0062
06CC 0021
06CC 003F
+08C9 0021
+08C9 003F
FBFE 0021
FBFE 003F
FBFF 0021
@@ -90472,6 +93179,8 @@ FBFC 0021
FBFC 003F
06CC 0061
06CC 0041
+08C9 0061
+08C9 0041
FBFE 0061
FBFE 0041
FBFF 0061
@@ -90481,6 +93190,7 @@ FBFD 0041
FBFC 0061
FBFC 0041
06CC 0062
+08C9 0062
FBFE 0062
FBFF 0062
FBFD 0062
@@ -90608,6 +93318,11 @@ FBB0 0062
077B 0061
077B 0041
077B 0062
+088E 0021
+088E 003F
+088E 0061
+088E 0041
+088E 0062
0710 0021
0710 003F
0710 0061
@@ -91838,11 +94553,23 @@ FBB0 0062
1380 0061
1380 0041
1380 0062
+1E7ED 0021
+1E7ED 003F
+1E7ED 0334
+1E7ED 0061
+1E7ED 0041
+1E7ED 0062
1381 0021
1381 003F
1381 0061
1381 0041
1381 0062
+1E7EE 0021
+1E7EE 003F
+1E7EE 0334
+1E7EE 0061
+1E7EE 0041
+1E7EE 0062
1382 0021
1382 003F
1382 0061
@@ -92108,6 +94835,12 @@ AB06 0062
1248 0061
1248 0041
1248 0062
+1E7F0 0021
+1E7F0 003F
+1E7F0 0334
+1E7F0 0061
+1E7F0 0041
+1E7F0 0062
124A 0021
124A 003F
124A 0061
@@ -92118,11 +94851,23 @@ AB06 0062
124B 0061
124B 0041
124B 0062
+1E7F1 0021
+1E7F1 003F
+1E7F1 0334
+1E7F1 0061
+1E7F1 0041
+1E7F1 0062
124C 0021
124C 003F
124C 0061
124C 0041
124C 0062
+1E7F2 0021
+1E7F2 003F
+1E7F2 0334
+1E7F2 0061
+1E7F2 0041
+1E7F2 0062
124D 0021
124D 003F
124D 0061
@@ -92233,11 +94978,23 @@ AB06 0062
1384 0061
1384 0041
1384 0062
+1E7F3 0021
+1E7F3 003F
+1E7F3 0334
+1E7F3 0061
+1E7F3 0041
+1E7F3 0062
1385 0021
1385 003F
1385 0061
1385 0041
1385 0062
+1E7F4 0021
+1E7F4 003F
+1E7F4 0334
+1E7F4 0061
+1E7F4 0041
+1E7F4 0062
1386 0021
1386 003F
1386 0061
@@ -92628,6 +95385,12 @@ AB06 0062
12B0 0061
12B0 0041
12B0 0062
+1E7F5 0021
+1E7F5 003F
+1E7F5 0334
+1E7F5 0061
+1E7F5 0041
+1E7F5 0062
12B2 0021
12B2 003F
12B2 0061
@@ -92638,11 +95401,23 @@ AB06 0062
12B3 0061
12B3 0041
12B3 0062
+1E7F6 0021
+1E7F6 003F
+1E7F6 0334
+1E7F6 0061
+1E7F6 0041
+1E7F6 0062
12B4 0021
12B4 003F
12B4 0061
12B4 0041
12B4 0062
+1E7F7 0021
+1E7F7 003F
+1E7F7 0334
+1E7F7 0061
+1E7F7 0041
+1E7F7 0062
12B5 0021
12B5 003F
12B5 0061
@@ -92683,11 +95458,23 @@ AB06 0062
12BE 0061
12BE 0041
12BE 0062
+1E7E8 0021
+1E7E8 003F
+1E7E8 0334
+1E7E8 0061
+1E7E8 0041
+1E7E8 0062
12C0 0021
12C0 003F
12C0 0061
12C0 0041
12C0 0062
+1E7E9 0021
+1E7E9 003F
+1E7E9 0334
+1E7E9 0061
+1E7E9 0041
+1E7E9 0062
12C2 0021
12C2 003F
12C2 0061
@@ -92698,11 +95485,23 @@ AB06 0062
12C3 0061
12C3 0041
12C3 0062
+1E7EA 0021
+1E7EA 003F
+1E7EA 0334
+1E7EA 0061
+1E7EA 0041
+1E7EA 0062
12C4 0021
12C4 003F
12C4 0061
12C4 0041
12C4 0062
+1E7EB 0021
+1E7EB 003F
+1E7EB 0334
+1E7EB 0061
+1E7EB 0041
+1E7EB 0062
12C5 0021
12C5 003F
12C5 0061
@@ -93148,6 +95947,12 @@ AB0E 0062
1310 0061
1310 0041
1310 0062
+1E7F8 0021
+1E7F8 003F
+1E7F8 0334
+1E7F8 0061
+1E7F8 0041
+1E7F8 0062
1312 0021
1312 003F
1312 0061
@@ -93158,11 +95963,23 @@ AB0E 0062
1313 0061
1313 0041
1313 0062
+1E7F9 0021
+1E7F9 003F
+1E7F9 0334
+1E7F9 0061
+1E7F9 0041
+1E7F9 0062
1314 0021
1314 003F
1314 0061
1314 0041
1314 0062
+1E7FA 0021
+1E7FA 003F
+1E7FA 0334
+1E7FA 0061
+1E7FA 0041
+1E7FA 0062
1315 0021
1315 003F
1315 0061
@@ -93558,11 +96375,23 @@ AB2E 0062
1388 0061
1388 0041
1388 0062
+1E7FB 0021
+1E7FB 003F
+1E7FB 0334
+1E7FB 0061
+1E7FB 0041
+1E7FB 0062
1389 0021
1389 003F
1389 0061
1389 0041
1389 0062
+1E7FC 0021
+1E7FC 003F
+1E7FC 0334
+1E7FC 0061
+1E7FC 0041
+1E7FC 0062
138A 0021
138A 003F
138A 0061
@@ -93618,11 +96447,23 @@ AB2E 0062
138C 0061
138C 0041
138C 0062
+1E7FD 0021
+1E7FD 003F
+1E7FD 0334
+1E7FD 0061
+1E7FD 0041
+1E7FD 0062
138D 0021
138D 003F
138D 0061
138D 0041
138D 0062
+1E7FE 0021
+1E7FE 003F
+1E7FE 0334
+1E7FE 0061
+1E7FE 0041
+1E7FE 0062
138E 0021
138E 003F
138E 0061
@@ -93863,36 +96704,78 @@ AB2E 0062
2DCE 0061
2DCE 0041
2DCE 0062
+1E7E0 0021
+1E7E0 003F
+1E7E0 0334
+1E7E0 0061
+1E7E0 0041
+1E7E0 0062
2DD0 0021
2DD0 003F
2DD0 0061
2DD0 0041
2DD0 0062
+1E7E1 0021
+1E7E1 003F
+1E7E1 0334
+1E7E1 0061
+1E7E1 0041
+1E7E1 0062
2DD1 0021
2DD1 003F
2DD1 0061
2DD1 0041
2DD1 0062
+1E7E2 0021
+1E7E2 003F
+1E7E2 0334
+1E7E2 0061
+1E7E2 0041
+1E7E2 0062
2DD2 0021
2DD2 003F
2DD2 0061
2DD2 0041
2DD2 0062
+1E7E3 0021
+1E7E3 003F
+1E7E3 0334
+1E7E3 0061
+1E7E3 0041
+1E7E3 0062
2DD3 0021
2DD3 003F
2DD3 0061
2DD3 0041
2DD3 0062
+1E7E4 0021
+1E7E4 003F
+1E7E4 0334
+1E7E4 0061
+1E7E4 0041
+1E7E4 0062
2DD4 0021
2DD4 003F
2DD4 0061
2DD4 0041
2DD4 0062
+1E7E5 0021
+1E7E5 003F
+1E7E5 0334
+1E7E5 0061
+1E7E5 0041
+1E7E5 0062
2DD5 0021
2DD5 003F
2DD5 0061
2DD5 0041
2DD5 0062
+1E7E6 0021
+1E7E6 003F
+1E7E6 0334
+1E7E6 0061
+1E7E6 0041
+1E7E6 0062
2DD6 0021
2DD6 003F
2DD6 0061
@@ -96508,6 +99391,11 @@ A8FF 0062
0C28 0061
0C28 0041
0C28 0062
+0C5D 0021
+0C5D 003F
+0C5D 0061
+0C5D 0041
+0C5D 0062
0C2A 0021
0C2A 003F
0C2A 0061
@@ -96885,6 +99773,11 @@ A8FF 0062
0CA8 0061
0CA8 0041
0CA8 0062
+0CDD 0021
+0CDD 003F
+0CDD 0061
+0CDD 0041
+0CDD 0062
0CAA 0021
0CAA 003F
0CAA 0061
@@ -99191,6 +102084,12 @@ A8C4 0062
110B4 0061
110B4 0041
110B4 0062
+110C2 0021
+110C2 003F
+110C2 0334
+110C2 0061
+110C2 0041
+110C2 0062
110B5 0021
110B5 003F
110B5 0334
@@ -104365,6 +107264,48 @@ A8C4 0062
11719 0061
11719 0041
11719 0062
+11740 0021
+11740 003F
+11740 0334
+11740 0061
+11740 0041
+11740 0062
+11741 0021
+11741 003F
+11741 0334
+11741 0061
+11741 0041
+11741 0062
+11742 0021
+11742 003F
+11742 0334
+11742 0061
+11742 0041
+11742 0062
+11743 0021
+11743 003F
+11743 0334
+11743 0061
+11743 0041
+11743 0062
+11744 0021
+11744 003F
+11744 0334
+11744 0061
+11744 0041
+11744 0062
+11745 0021
+11745 003F
+11745 0334
+11745 0061
+11745 0041
+11745 0062
+11746 0021
+11746 003F
+11746 0334
+11746 0061
+11746 0041
+11746 0062
11720 0021
11720 003F
11720 0334
@@ -105450,6 +108391,12 @@ A8C4 0062
1100E 0061
1100E 0041
1100E 0062
+11071 0021
+11071 003F
+11071 0334
+11071 0061
+11071 0041
+11071 0062
1100F 0021
1100F 003F
1100F 0334
@@ -105462,6 +108409,12 @@ A8C4 0062
11010 0061
11010 0041
11010 0062
+11072 0021
+11072 003F
+11072 0334
+11072 0061
+11072 0041
+11072 0062
11011 0021
11011 003F
11011 0334
@@ -105696,6 +108649,12 @@ A8C4 0062
11035 0061
11035 0041
11035 0062
+11075 0021
+11075 003F
+11075 0334
+11075 0061
+11075 0041
+11075 0062
11036 0021
11036 003F
11036 0334
@@ -105768,6 +108727,12 @@ A8C4 0062
11041 0061
11041 0041
11041 0062
+11073 0021
+11073 003F
+11073 0334
+11073 0061
+11073 0041
+11073 0062
11042 0021
11042 003F
11042 0334
@@ -105780,6 +108745,12 @@ A8C4 0062
11043 0061
11043 0041
11043 0062
+11074 0021
+11074 003F
+11074 0334
+11074 0061
+11074 0041
+11074 0062
11044 0021
11044 003F
11044 0334
@@ -105806,6 +108777,12 @@ A8C4 0062
1107F 0061
1107F 0041
1107F 0062
+11070 0021
+11070 003F
+11070 0334
+11070 0061
+11070 0041
+11070 0062
10A00 0021
10A00 003F
10A00 0334
@@ -115851,6 +118828,16 @@ A873 0062
170C 0061
170C 0041
170C 0062
+170D 0021
+170D 003F
+170D 0061
+170D 0041
+170D 0062
+171F 0021
+171F 003F
+171F 0061
+171F 0041
+171F 0062
170E 0021
170E 003F
170E 0061
@@ -115888,6 +118875,12 @@ A873 0062
1714 0061
1714 0041
1714 0062
+1715 0021
+1715 003F
+1715 0334
+1715 0061
+1715 0041
+1715 0062
1720 0021
1720 003F
1720 0061
@@ -117811,6 +120804,11 @@ A9FA 0062
109D 0061
109D 0041
109D 0062
+1086 0021
+1086 003F
+1086 0061
+1086 0041
+1086 0062
1034 0021
1034 003F
1034 0061
@@ -117836,11 +120834,6 @@ A9E5 003F
A9E5 0061
A9E5 0041
A9E5 0062
-1086 0021
-1086 003F
-1086 0061
-1086 0041
-1086 0062
1039 0021
1039 003F
0334 1039
@@ -121757,6 +124750,11 @@ AA4D 0062
1B1A 0061
1B1A 0041
1B1A 0062
+1B4C 0021
+1B4C 003F
+1B4C 0061
+1B4C 0041
+1B4C 0062
1B1B 0021
1B1B 003F
1B1B 0061
@@ -128000,6 +130998,102 @@ ABBF 0062
18F5 0061
18F5 0041
18F5 0062
+11AB0 0021
+11AB0 003F
+11AB0 0334
+11AB0 0061
+11AB0 0041
+11AB0 0062
+11AB1 0021
+11AB1 003F
+11AB1 0334
+11AB1 0061
+11AB1 0041
+11AB1 0062
+11AB2 0021
+11AB2 003F
+11AB2 0334
+11AB2 0061
+11AB2 0041
+11AB2 0062
+11AB3 0021
+11AB3 003F
+11AB3 0334
+11AB3 0061
+11AB3 0041
+11AB3 0062
+11AB4 0021
+11AB4 003F
+11AB4 0334
+11AB4 0061
+11AB4 0041
+11AB4 0062
+11AB5 0021
+11AB5 003F
+11AB5 0334
+11AB5 0061
+11AB5 0041
+11AB5 0062
+11AB6 0021
+11AB6 003F
+11AB6 0334
+11AB6 0061
+11AB6 0041
+11AB6 0062
+11AB7 0021
+11AB7 003F
+11AB7 0334
+11AB7 0061
+11AB7 0041
+11AB7 0062
+11AB8 0021
+11AB8 003F
+11AB8 0334
+11AB8 0061
+11AB8 0041
+11AB8 0062
+11AB9 0021
+11AB9 003F
+11AB9 0334
+11AB9 0061
+11AB9 0041
+11AB9 0062
+11ABA 0021
+11ABA 003F
+11ABA 0334
+11ABA 0061
+11ABA 0041
+11ABA 0062
+11ABB 0021
+11ABB 003F
+11ABB 0334
+11ABB 0061
+11ABB 0041
+11ABB 0062
+11ABC 0021
+11ABC 003F
+11ABC 0334
+11ABC 0061
+11ABC 0041
+11ABC 0062
+11ABD 0021
+11ABD 003F
+11ABD 0334
+11ABD 0061
+11ABD 0041
+11ABD 0062
+11ABE 0021
+11ABE 003F
+11ABE 0334
+11ABE 0061
+11ABE 0041
+11ABE 0062
+11ABF 0021
+11ABF 003F
+11ABF 0334
+11ABF 0061
+11ABF 0041
+11ABF 0062
1681 0021
1681 003F
1681 0061
@@ -141729,6 +144823,12 @@ FF6C 0062
30E4 0062
FF94 0062
32F3 0062
+1B120 0021
+1B120 003F
+1B120 0334
+1B120 0061
+1B120 0041
+1B120 0062
3085 0021
3085 003F
3086 0021
@@ -141769,6 +144869,12 @@ FF95 0062
3350 0061
3350 0041
3350 0062
+1B121 0021
+1B121 003F
+1B121 0334
+1B121 0061
+1B121 0041
+1B121 0062
3087 0021
3087 003F
3088 0021
@@ -142042,6 +145148,18 @@ FF9C 0062
30F0 0062
32FC 0062
30F8 0062
+1B11F 0021
+1B11F 003F
+1B122 0021
+1B122 003F
+1B11F 0334
+1B122 0334
+1B11F 0061
+1B11F 0041
+1B122 0061
+1B122 0041
+1B11F 0062
+1B122 0062
1B151 0021
1B151 003F
3091 0021
@@ -152762,6 +155880,186 @@ A4F7 0062
1E14E 0061
1E14E 0041
1E14E 0062
+1E290 0021
+1E290 003F
+1E290 0334
+1E290 0061
+1E290 0041
+1E290 0062
+1E291 0021
+1E291 003F
+1E291 0334
+1E291 0061
+1E291 0041
+1E291 0062
+1E292 0021
+1E292 003F
+1E292 0334
+1E292 0061
+1E292 0041
+1E292 0062
+1E293 0021
+1E293 003F
+1E293 0334
+1E293 0061
+1E293 0041
+1E293 0062
+1E294 0021
+1E294 003F
+1E294 0334
+1E294 0061
+1E294 0041
+1E294 0062
+1E295 0021
+1E295 003F
+1E295 0334
+1E295 0061
+1E295 0041
+1E295 0062
+1E296 0021
+1E296 003F
+1E296 0334
+1E296 0061
+1E296 0041
+1E296 0062
+1E297 0021
+1E297 003F
+1E297 0334
+1E297 0061
+1E297 0041
+1E297 0062
+1E298 0021
+1E298 003F
+1E298 0334
+1E298 0061
+1E298 0041
+1E298 0062
+1E299 0021
+1E299 003F
+1E299 0334
+1E299 0061
+1E299 0041
+1E299 0062
+1E29A 0021
+1E29A 003F
+1E29A 0334
+1E29A 0061
+1E29A 0041
+1E29A 0062
+1E29B 0021
+1E29B 003F
+1E29B 0334
+1E29B 0061
+1E29B 0041
+1E29B 0062
+1E29C 0021
+1E29C 003F
+1E29C 0334
+1E29C 0061
+1E29C 0041
+1E29C 0062
+1E29D 0021
+1E29D 003F
+1E29D 0334
+1E29D 0061
+1E29D 0041
+1E29D 0062
+1E29E 0021
+1E29E 003F
+1E29E 0334
+1E29E 0061
+1E29E 0041
+1E29E 0062
+1E29F 0021
+1E29F 003F
+1E29F 0334
+1E29F 0061
+1E29F 0041
+1E29F 0062
+1E2A0 0021
+1E2A0 003F
+1E2A0 0334
+1E2A0 0061
+1E2A0 0041
+1E2A0 0062
+1E2A1 0021
+1E2A1 003F
+1E2A1 0334
+1E2A1 0061
+1E2A1 0041
+1E2A1 0062
+1E2A2 0021
+1E2A2 003F
+1E2A2 0334
+1E2A2 0061
+1E2A2 0041
+1E2A2 0062
+1E2A3 0021
+1E2A3 003F
+1E2A3 0334
+1E2A3 0061
+1E2A3 0041
+1E2A3 0062
+1E2A4 0021
+1E2A4 003F
+1E2A4 0334
+1E2A4 0061
+1E2A4 0041
+1E2A4 0062
+1E2A5 0021
+1E2A5 003F
+1E2A5 0334
+1E2A5 0061
+1E2A5 0041
+1E2A5 0062
+1E2A6 0021
+1E2A6 003F
+1E2A6 0334
+1E2A6 0061
+1E2A6 0041
+1E2A6 0062
+1E2A7 0021
+1E2A7 003F
+1E2A7 0334
+1E2A7 0061
+1E2A7 0041
+1E2A7 0062
+1E2A8 0021
+1E2A8 003F
+1E2A8 0334
+1E2A8 0061
+1E2A8 0041
+1E2A8 0062
+1E2A9 0021
+1E2A9 003F
+1E2A9 0334
+1E2A9 0061
+1E2A9 0041
+1E2A9 0062
+1E2AA 0021
+1E2AA 003F
+1E2AA 0334
+1E2AA 0061
+1E2AA 0041
+1E2AA 0062
+1E2AB 0021
+1E2AB 003F
+1E2AB 0334
+1E2AB 0061
+1E2AB 0041
+1E2AB 0062
+1E2AC 0021
+1E2AC 003F
+1E2AC 0334
+1E2AC 0061
+1E2AC 0041
+1E2AC 0062
+1E2AD 0021
+1E2AD 003F
+1E2AD 0334
+1E2AD 0061
+1E2AD 0041
+1E2AD 0062
1E2C0 0021
1E2C0 003F
1E2C0 0334
@@ -156356,6 +159654,426 @@ A4F7 0062
10563 0061
10563 0041
10563 0062
+10597 0021
+10597 003F
+10570 0021
+10570 003F
+10597 0334
+10570 0334
+10597 0061
+10597 0041
+10570 0061
+10570 0041
+10597 0062
+10570 0062
+10598 0021
+10598 003F
+10571 0021
+10571 003F
+10598 0334
+10571 0334
+10598 0061
+10598 0041
+10571 0061
+10571 0041
+10598 0062
+10571 0062
+10599 0021
+10599 003F
+10572 0021
+10572 003F
+10599 0334
+10572 0334
+10599 0061
+10599 0041
+10572 0061
+10572 0041
+10599 0062
+10572 0062
+1059A 0021
+1059A 003F
+10573 0021
+10573 003F
+1059A 0334
+10573 0334
+1059A 0061
+1059A 0041
+10573 0061
+10573 0041
+1059A 0062
+10573 0062
+1059B 0021
+1059B 003F
+10574 0021
+10574 003F
+1059B 0334
+10574 0334
+1059B 0061
+1059B 0041
+10574 0061
+10574 0041
+1059B 0062
+10574 0062
+1059C 0021
+1059C 003F
+10575 0021
+10575 003F
+1059C 0334
+10575 0334
+1059C 0061
+1059C 0041
+10575 0061
+10575 0041
+1059C 0062
+10575 0062
+1059D 0021
+1059D 003F
+10576 0021
+10576 003F
+1059D 0334
+10576 0334
+1059D 0061
+1059D 0041
+10576 0061
+10576 0041
+1059D 0062
+10576 0062
+1059E 0021
+1059E 003F
+10577 0021
+10577 003F
+1059E 0334
+10577 0334
+1059E 0061
+1059E 0041
+10577 0061
+10577 0041
+1059E 0062
+10577 0062
+1059F 0021
+1059F 003F
+10578 0021
+10578 003F
+1059F 0334
+10578 0334
+1059F 0061
+1059F 0041
+10578 0061
+10578 0041
+1059F 0062
+10578 0062
+105A0 0021
+105A0 003F
+10579 0021
+10579 003F
+105A0 0334
+10579 0334
+105A0 0061
+105A0 0041
+10579 0061
+10579 0041
+105A0 0062
+10579 0062
+105A1 0021
+105A1 003F
+1057A 0021
+1057A 003F
+105A1 0334
+1057A 0334
+105A1 0061
+105A1 0041
+1057A 0061
+1057A 0041
+105A1 0062
+1057A 0062
+105A3 0021
+105A3 003F
+1057C 0021
+1057C 003F
+105A3 0334
+1057C 0334
+105A3 0061
+105A3 0041
+1057C 0061
+1057C 0041
+105A3 0062
+1057C 0062
+105A4 0021
+105A4 003F
+1057D 0021
+1057D 003F
+105A4 0334
+1057D 0334
+105A4 0061
+105A4 0041
+1057D 0061
+1057D 0041
+105A4 0062
+1057D 0062
+105A5 0021
+105A5 003F
+1057E 0021
+1057E 003F
+105A5 0334
+1057E 0334
+105A5 0061
+105A5 0041
+1057E 0061
+1057E 0041
+105A5 0062
+1057E 0062
+105A6 0021
+105A6 003F
+1057F 0021
+1057F 003F
+105A6 0334
+1057F 0334
+105A6 0061
+105A6 0041
+1057F 0061
+1057F 0041
+105A6 0062
+1057F 0062
+105A7 0021
+105A7 003F
+10580 0021
+10580 003F
+105A7 0334
+10580 0334
+105A7 0061
+105A7 0041
+10580 0061
+10580 0041
+105A7 0062
+10580 0062
+105A8 0021
+105A8 003F
+10581 0021
+10581 003F
+105A8 0334
+10581 0334
+105A8 0061
+105A8 0041
+10581 0061
+10581 0041
+105A8 0062
+10581 0062
+105A9 0021
+105A9 003F
+10582 0021
+10582 003F
+105A9 0334
+10582 0334
+105A9 0061
+105A9 0041
+10582 0061
+10582 0041
+105A9 0062
+10582 0062
+105AA 0021
+105AA 003F
+10583 0021
+10583 003F
+105AA 0334
+10583 0334
+105AA 0061
+105AA 0041
+10583 0061
+10583 0041
+105AA 0062
+10583 0062
+105AB 0021
+105AB 003F
+10584 0021
+10584 003F
+105AB 0334
+10584 0334
+105AB 0061
+105AB 0041
+10584 0061
+10584 0041
+105AB 0062
+10584 0062
+105AC 0021
+105AC 003F
+10585 0021
+10585 003F
+105AC 0334
+10585 0334
+105AC 0061
+105AC 0041
+10585 0061
+10585 0041
+105AC 0062
+10585 0062
+105AD 0021
+105AD 003F
+10586 0021
+10586 003F
+105AD 0334
+10586 0334
+105AD 0061
+105AD 0041
+10586 0061
+10586 0041
+105AD 0062
+10586 0062
+105AE 0021
+105AE 003F
+10587 0021
+10587 003F
+105AE 0334
+10587 0334
+105AE 0061
+105AE 0041
+10587 0061
+10587 0041
+105AE 0062
+10587 0062
+105AF 0021
+105AF 003F
+10588 0021
+10588 003F
+105AF 0334
+10588 0334
+105AF 0061
+105AF 0041
+10588 0061
+10588 0041
+105AF 0062
+10588 0062
+105B0 0021
+105B0 003F
+10589 0021
+10589 003F
+105B0 0334
+10589 0334
+105B0 0061
+105B0 0041
+10589 0061
+10589 0041
+105B0 0062
+10589 0062
+105B1 0021
+105B1 003F
+1058A 0021
+1058A 003F
+105B1 0334
+1058A 0334
+105B1 0061
+105B1 0041
+1058A 0061
+1058A 0041
+105B1 0062
+1058A 0062
+105B3 0021
+105B3 003F
+1058C 0021
+1058C 003F
+105B3 0334
+1058C 0334
+105B3 0061
+105B3 0041
+1058C 0061
+1058C 0041
+105B3 0062
+1058C 0062
+105B4 0021
+105B4 003F
+1058D 0021
+1058D 003F
+105B4 0334
+1058D 0334
+105B4 0061
+105B4 0041
+1058D 0061
+1058D 0041
+105B4 0062
+1058D 0062
+105B5 0021
+105B5 003F
+1058E 0021
+1058E 003F
+105B5 0334
+1058E 0334
+105B5 0061
+105B5 0041
+1058E 0061
+1058E 0041
+105B5 0062
+1058E 0062
+105B6 0021
+105B6 003F
+1058F 0021
+1058F 003F
+105B6 0334
+1058F 0334
+105B6 0061
+105B6 0041
+1058F 0061
+1058F 0041
+105B6 0062
+1058F 0062
+105B7 0021
+105B7 003F
+10590 0021
+10590 003F
+105B7 0334
+10590 0334
+105B7 0061
+105B7 0041
+10590 0061
+10590 0041
+105B7 0062
+10590 0062
+105B8 0021
+105B8 003F
+10591 0021
+10591 003F
+105B8 0334
+10591 0334
+105B8 0061
+105B8 0041
+10591 0061
+10591 0041
+105B8 0062
+10591 0062
+105B9 0021
+105B9 003F
+10592 0021
+10592 003F
+105B9 0334
+10592 0334
+105B9 0061
+105B9 0041
+10592 0061
+10592 0041
+105B9 0062
+10592 0062
+105BB 0021
+105BB 003F
+10594 0021
+10594 003F
+105BB 0334
+10594 0334
+105BB 0061
+105BB 0041
+10594 0061
+10594 0041
+105BB 0062
+10594 0062
+105BC 0021
+105BC 003F
+10595 0021
+10595 003F
+105BC 0334
+10595 0334
+105BC 0061
+105BC 0041
+10595 0061
+10595 0041
+105BC 0062
+10595 0062
110D0 0021
110D0 003F
110D0 0334
@@ -156692,6 +160410,480 @@ A4F7 0062
16A5E 0061
16A5E 0041
16A5E 0062
+16A70 0021
+16A70 003F
+16A70 0334
+16A70 0061
+16A70 0041
+16A70 0062
+16A71 0021
+16A71 003F
+16A71 0334
+16A71 0061
+16A71 0041
+16A71 0062
+16A72 0021
+16A72 003F
+16A72 0334
+16A72 0061
+16A72 0041
+16A72 0062
+16A73 0021
+16A73 003F
+16A73 0334
+16A73 0061
+16A73 0041
+16A73 0062
+16A74 0021
+16A74 003F
+16A74 0334
+16A74 0061
+16A74 0041
+16A74 0062
+16A75 0021
+16A75 003F
+16A75 0334
+16A75 0061
+16A75 0041
+16A75 0062
+16A76 0021
+16A76 003F
+16A76 0334
+16A76 0061
+16A76 0041
+16A76 0062
+16A77 0021
+16A77 003F
+16A77 0334
+16A77 0061
+16A77 0041
+16A77 0062
+16A78 0021
+16A78 003F
+16A78 0334
+16A78 0061
+16A78 0041
+16A78 0062
+16A79 0021
+16A79 003F
+16A79 0334
+16A79 0061
+16A79 0041
+16A79 0062
+16A7A 0021
+16A7A 003F
+16A7A 0334
+16A7A 0061
+16A7A 0041
+16A7A 0062
+16A7B 0021
+16A7B 003F
+16A7B 0334
+16A7B 0061
+16A7B 0041
+16A7B 0062
+16A7C 0021
+16A7C 003F
+16A7C 0334
+16A7C 0061
+16A7C 0041
+16A7C 0062
+16A7D 0021
+16A7D 003F
+16A7D 0334
+16A7D 0061
+16A7D 0041
+16A7D 0062
+16A7E 0021
+16A7E 003F
+16A7E 0334
+16A7E 0061
+16A7E 0041
+16A7E 0062
+16A7F 0021
+16A7F 003F
+16A7F 0334
+16A7F 0061
+16A7F 0041
+16A7F 0062
+16A80 0021
+16A80 003F
+16A80 0334
+16A80 0061
+16A80 0041
+16A80 0062
+16A81 0021
+16A81 003F
+16A81 0334
+16A81 0061
+16A81 0041
+16A81 0062
+16A82 0021
+16A82 003F
+16A82 0334
+16A82 0061
+16A82 0041
+16A82 0062
+16A83 0021
+16A83 003F
+16A83 0334
+16A83 0061
+16A83 0041
+16A83 0062
+16A84 0021
+16A84 003F
+16A84 0334
+16A84 0061
+16A84 0041
+16A84 0062
+16A85 0021
+16A85 003F
+16A85 0334
+16A85 0061
+16A85 0041
+16A85 0062
+16A86 0021
+16A86 003F
+16A86 0334
+16A86 0061
+16A86 0041
+16A86 0062
+16A87 0021
+16A87 003F
+16A87 0334
+16A87 0061
+16A87 0041
+16A87 0062
+16A88 0021
+16A88 003F
+16A88 0334
+16A88 0061
+16A88 0041
+16A88 0062
+16A89 0021
+16A89 003F
+16A89 0334
+16A89 0061
+16A89 0041
+16A89 0062
+16A8A 0021
+16A8A 003F
+16A8A 0334
+16A8A 0061
+16A8A 0041
+16A8A 0062
+16A8B 0021
+16A8B 003F
+16A8B 0334
+16A8B 0061
+16A8B 0041
+16A8B 0062
+16A8C 0021
+16A8C 003F
+16A8C 0334
+16A8C 0061
+16A8C 0041
+16A8C 0062
+16A8D 0021
+16A8D 003F
+16A8D 0334
+16A8D 0061
+16A8D 0041
+16A8D 0062
+16A8E 0021
+16A8E 003F
+16A8E 0334
+16A8E 0061
+16A8E 0041
+16A8E 0062
+16A8F 0021
+16A8F 003F
+16A8F 0334
+16A8F 0061
+16A8F 0041
+16A8F 0062
+16A90 0021
+16A90 003F
+16A90 0334
+16A90 0061
+16A90 0041
+16A90 0062
+16A91 0021
+16A91 003F
+16A91 0334
+16A91 0061
+16A91 0041
+16A91 0062
+16A92 0021
+16A92 003F
+16A92 0334
+16A92 0061
+16A92 0041
+16A92 0062
+16A93 0021
+16A93 003F
+16A93 0334
+16A93 0061
+16A93 0041
+16A93 0062
+16A94 0021
+16A94 003F
+16A94 0334
+16A94 0061
+16A94 0041
+16A94 0062
+16A95 0021
+16A95 003F
+16A95 0334
+16A95 0061
+16A95 0041
+16A95 0062
+16A96 0021
+16A96 003F
+16A96 0334
+16A96 0061
+16A96 0041
+16A96 0062
+16A97 0021
+16A97 003F
+16A97 0334
+16A97 0061
+16A97 0041
+16A97 0062
+16A98 0021
+16A98 003F
+16A98 0334
+16A98 0061
+16A98 0041
+16A98 0062
+16A99 0021
+16A99 003F
+16A99 0334
+16A99 0061
+16A99 0041
+16A99 0062
+16A9A 0021
+16A9A 003F
+16A9A 0334
+16A9A 0061
+16A9A 0041
+16A9A 0062
+16A9B 0021
+16A9B 003F
+16A9B 0334
+16A9B 0061
+16A9B 0041
+16A9B 0062
+16A9C 0021
+16A9C 003F
+16A9C 0334
+16A9C 0061
+16A9C 0041
+16A9C 0062
+16A9D 0021
+16A9D 003F
+16A9D 0334
+16A9D 0061
+16A9D 0041
+16A9D 0062
+16A9E 0021
+16A9E 003F
+16A9E 0334
+16A9E 0061
+16A9E 0041
+16A9E 0062
+16A9F 0021
+16A9F 003F
+16A9F 0334
+16A9F 0061
+16A9F 0041
+16A9F 0062
+16AA0 0021
+16AA0 003F
+16AA0 0334
+16AA0 0061
+16AA0 0041
+16AA0 0062
+16AA1 0021
+16AA1 003F
+16AA1 0334
+16AA1 0061
+16AA1 0041
+16AA1 0062
+16AA2 0021
+16AA2 003F
+16AA2 0334
+16AA2 0061
+16AA2 0041
+16AA2 0062
+16AA3 0021
+16AA3 003F
+16AA3 0334
+16AA3 0061
+16AA3 0041
+16AA3 0062
+16AA4 0021
+16AA4 003F
+16AA4 0334
+16AA4 0061
+16AA4 0041
+16AA4 0062
+16AA5 0021
+16AA5 003F
+16AA5 0334
+16AA5 0061
+16AA5 0041
+16AA5 0062
+16AA6 0021
+16AA6 003F
+16AA6 0334
+16AA6 0061
+16AA6 0041
+16AA6 0062
+16AA7 0021
+16AA7 003F
+16AA7 0334
+16AA7 0061
+16AA7 0041
+16AA7 0062
+16AA8 0021
+16AA8 003F
+16AA8 0334
+16AA8 0061
+16AA8 0041
+16AA8 0062
+16AA9 0021
+16AA9 003F
+16AA9 0334
+16AA9 0061
+16AA9 0041
+16AA9 0062
+16AAA 0021
+16AAA 003F
+16AAA 0334
+16AAA 0061
+16AAA 0041
+16AAA 0062
+16AAB 0021
+16AAB 003F
+16AAB 0334
+16AAB 0061
+16AAB 0041
+16AAB 0062
+16AAC 0021
+16AAC 003F
+16AAC 0334
+16AAC 0061
+16AAC 0041
+16AAC 0062
+16AAD 0021
+16AAD 003F
+16AAD 0334
+16AAD 0061
+16AAD 0041
+16AAD 0062
+16AAE 0021
+16AAE 003F
+16AAE 0334
+16AAE 0061
+16AAE 0041
+16AAE 0062
+16AAF 0021
+16AAF 003F
+16AAF 0334
+16AAF 0061
+16AAF 0041
+16AAF 0062
+16AB0 0021
+16AB0 003F
+16AB0 0334
+16AB0 0061
+16AB0 0041
+16AB0 0062
+16AB1 0021
+16AB1 003F
+16AB1 0334
+16AB1 0061
+16AB1 0041
+16AB1 0062
+16AB2 0021
+16AB2 003F
+16AB2 0334
+16AB2 0061
+16AB2 0041
+16AB2 0062
+16AB3 0021
+16AB3 003F
+16AB3 0334
+16AB3 0061
+16AB3 0041
+16AB3 0062
+16AB4 0021
+16AB4 003F
+16AB4 0334
+16AB4 0061
+16AB4 0041
+16AB4 0062
+16AB5 0021
+16AB5 003F
+16AB5 0334
+16AB5 0061
+16AB5 0041
+16AB5 0062
+16AB6 0021
+16AB6 003F
+16AB6 0334
+16AB6 0061
+16AB6 0041
+16AB6 0062
+16AB7 0021
+16AB7 003F
+16AB7 0334
+16AB7 0061
+16AB7 0041
+16AB7 0062
+16AB8 0021
+16AB8 003F
+16AB8 0334
+16AB8 0061
+16AB8 0041
+16AB8 0062
+16AB9 0021
+16AB9 003F
+16AB9 0334
+16AB9 0061
+16AB9 0041
+16AB9 0062
+16ABA 0021
+16ABA 003F
+16ABA 0334
+16ABA 0061
+16ABA 0041
+16ABA 0062
+16ABB 0021
+16ABB 003F
+16ABB 0334
+16ABB 0061
+16ABB 0041
+16ABB 0062
+16ABC 0021
+16ABC 003F
+16ABC 0334
+16ABC 0061
+16ABC 0041
+16ABC 0062
+16ABD 0021
+16ABD 003F
+16ABD 0334
+16ABD 0061
+16ABD 0041
+16ABD 0062
+16ABE 0021
+16ABE 003F
+16ABE 0334
+16ABE 0061
+16ABE 0041
+16ABE 0062
10000 0021
10000 003F
10000 0334
@@ -160334,6 +164526,588 @@ A4F7 0062
1083F 0061
1083F 0041
1083F 0062
+12F90 0021
+12F90 003F
+12F90 0334
+12F90 0061
+12F90 0041
+12F90 0062
+12F91 0021
+12F91 003F
+12F91 0334
+12F91 0061
+12F91 0041
+12F91 0062
+12F92 0021
+12F92 003F
+12F92 0334
+12F92 0061
+12F92 0041
+12F92 0062
+12F93 0021
+12F93 003F
+12F93 0334
+12F93 0061
+12F93 0041
+12F93 0062
+12F94 0021
+12F94 003F
+12F94 0334
+12F94 0061
+12F94 0041
+12F94 0062
+12F95 0021
+12F95 003F
+12F95 0334
+12F95 0061
+12F95 0041
+12F95 0062
+12F96 0021
+12F96 003F
+12F96 0334
+12F96 0061
+12F96 0041
+12F96 0062
+12F97 0021
+12F97 003F
+12F97 0334
+12F97 0061
+12F97 0041
+12F97 0062
+12F98 0021
+12F98 003F
+12F98 0334
+12F98 0061
+12F98 0041
+12F98 0062
+12F99 0021
+12F99 003F
+12F99 0334
+12F99 0061
+12F99 0041
+12F99 0062
+12F9A 0021
+12F9A 003F
+12F9A 0334
+12F9A 0061
+12F9A 0041
+12F9A 0062
+12F9B 0021
+12F9B 003F
+12F9B 0334
+12F9B 0061
+12F9B 0041
+12F9B 0062
+12F9C 0021
+12F9C 003F
+12F9C 0334
+12F9C 0061
+12F9C 0041
+12F9C 0062
+12F9D 0021
+12F9D 003F
+12F9D 0334
+12F9D 0061
+12F9D 0041
+12F9D 0062
+12F9E 0021
+12F9E 003F
+12F9E 0334
+12F9E 0061
+12F9E 0041
+12F9E 0062
+12F9F 0021
+12F9F 003F
+12F9F 0334
+12F9F 0061
+12F9F 0041
+12F9F 0062
+12FA0 0021
+12FA0 003F
+12FA0 0334
+12FA0 0061
+12FA0 0041
+12FA0 0062
+12FA1 0021
+12FA1 003F
+12FA1 0334
+12FA1 0061
+12FA1 0041
+12FA1 0062
+12FA2 0021
+12FA2 003F
+12FA2 0334
+12FA2 0061
+12FA2 0041
+12FA2 0062
+12FA3 0021
+12FA3 003F
+12FA3 0334
+12FA3 0061
+12FA3 0041
+12FA3 0062
+12FA4 0021
+12FA4 003F
+12FA4 0334
+12FA4 0061
+12FA4 0041
+12FA4 0062
+12FA5 0021
+12FA5 003F
+12FA5 0334
+12FA5 0061
+12FA5 0041
+12FA5 0062
+12FA6 0021
+12FA6 003F
+12FA6 0334
+12FA6 0061
+12FA6 0041
+12FA6 0062
+12FA7 0021
+12FA7 003F
+12FA7 0334
+12FA7 0061
+12FA7 0041
+12FA7 0062
+12FA8 0021
+12FA8 003F
+12FA8 0334
+12FA8 0061
+12FA8 0041
+12FA8 0062
+12FA9 0021
+12FA9 003F
+12FA9 0334
+12FA9 0061
+12FA9 0041
+12FA9 0062
+12FAA 0021
+12FAA 003F
+12FAA 0334
+12FAA 0061
+12FAA 0041
+12FAA 0062
+12FAB 0021
+12FAB 003F
+12FAB 0334
+12FAB 0061
+12FAB 0041
+12FAB 0062
+12FAC 0021
+12FAC 003F
+12FAC 0334
+12FAC 0061
+12FAC 0041
+12FAC 0062
+12FAD 0021
+12FAD 003F
+12FAD 0334
+12FAD 0061
+12FAD 0041
+12FAD 0062
+12FAE 0021
+12FAE 003F
+12FAE 0334
+12FAE 0061
+12FAE 0041
+12FAE 0062
+12FAF 0021
+12FAF 003F
+12FAF 0334
+12FAF 0061
+12FAF 0041
+12FAF 0062
+12FB0 0021
+12FB0 003F
+12FB0 0334
+12FB0 0061
+12FB0 0041
+12FB0 0062
+12FB1 0021
+12FB1 003F
+12FB1 0334
+12FB1 0061
+12FB1 0041
+12FB1 0062
+12FB2 0021
+12FB2 003F
+12FB2 0334
+12FB2 0061
+12FB2 0041
+12FB2 0062
+12FB3 0021
+12FB3 003F
+12FB3 0334
+12FB3 0061
+12FB3 0041
+12FB3 0062
+12FB4 0021
+12FB4 003F
+12FB4 0334
+12FB4 0061
+12FB4 0041
+12FB4 0062
+12FB5 0021
+12FB5 003F
+12FB5 0334
+12FB5 0061
+12FB5 0041
+12FB5 0062
+12FB6 0021
+12FB6 003F
+12FB6 0334
+12FB6 0061
+12FB6 0041
+12FB6 0062
+12FB7 0021
+12FB7 003F
+12FB7 0334
+12FB7 0061
+12FB7 0041
+12FB7 0062
+12FB8 0021
+12FB8 003F
+12FB8 0334
+12FB8 0061
+12FB8 0041
+12FB8 0062
+12FB9 0021
+12FB9 003F
+12FB9 0334
+12FB9 0061
+12FB9 0041
+12FB9 0062
+12FBA 0021
+12FBA 003F
+12FBA 0334
+12FBA 0061
+12FBA 0041
+12FBA 0062
+12FBB 0021
+12FBB 003F
+12FBB 0334
+12FBB 0061
+12FBB 0041
+12FBB 0062
+12FBC 0021
+12FBC 003F
+12FBC 0334
+12FBC 0061
+12FBC 0041
+12FBC 0062
+12FBD 0021
+12FBD 003F
+12FBD 0334
+12FBD 0061
+12FBD 0041
+12FBD 0062
+12FBE 0021
+12FBE 003F
+12FBE 0334
+12FBE 0061
+12FBE 0041
+12FBE 0062
+12FBF 0021
+12FBF 003F
+12FBF 0334
+12FBF 0061
+12FBF 0041
+12FBF 0062
+12FC0 0021
+12FC0 003F
+12FC0 0334
+12FC0 0061
+12FC0 0041
+12FC0 0062
+12FC1 0021
+12FC1 003F
+12FC1 0334
+12FC1 0061
+12FC1 0041
+12FC1 0062
+12FC2 0021
+12FC2 003F
+12FC2 0334
+12FC2 0061
+12FC2 0041
+12FC2 0062
+12FC3 0021
+12FC3 003F
+12FC3 0334
+12FC3 0061
+12FC3 0041
+12FC3 0062
+12FC4 0021
+12FC4 003F
+12FC4 0334
+12FC4 0061
+12FC4 0041
+12FC4 0062
+12FC5 0021
+12FC5 003F
+12FC5 0334
+12FC5 0061
+12FC5 0041
+12FC5 0062
+12FC6 0021
+12FC6 003F
+12FC6 0334
+12FC6 0061
+12FC6 0041
+12FC6 0062
+12FC7 0021
+12FC7 003F
+12FC7 0334
+12FC7 0061
+12FC7 0041
+12FC7 0062
+12FC8 0021
+12FC8 003F
+12FC8 0334
+12FC8 0061
+12FC8 0041
+12FC8 0062
+12FC9 0021
+12FC9 003F
+12FC9 0334
+12FC9 0061
+12FC9 0041
+12FC9 0062
+12FCA 0021
+12FCA 003F
+12FCA 0334
+12FCA 0061
+12FCA 0041
+12FCA 0062
+12FCB 0021
+12FCB 003F
+12FCB 0334
+12FCB 0061
+12FCB 0041
+12FCB 0062
+12FCC 0021
+12FCC 003F
+12FCC 0334
+12FCC 0061
+12FCC 0041
+12FCC 0062
+12FCD 0021
+12FCD 003F
+12FCD 0334
+12FCD 0061
+12FCD 0041
+12FCD 0062
+12FCE 0021
+12FCE 003F
+12FCE 0334
+12FCE 0061
+12FCE 0041
+12FCE 0062
+12FCF 0021
+12FCF 003F
+12FCF 0334
+12FCF 0061
+12FCF 0041
+12FCF 0062
+12FD0 0021
+12FD0 003F
+12FD0 0334
+12FD0 0061
+12FD0 0041
+12FD0 0062
+12FD1 0021
+12FD1 003F
+12FD1 0334
+12FD1 0061
+12FD1 0041
+12FD1 0062
+12FD2 0021
+12FD2 003F
+12FD2 0334
+12FD2 0061
+12FD2 0041
+12FD2 0062
+12FD3 0021
+12FD3 003F
+12FD3 0334
+12FD3 0061
+12FD3 0041
+12FD3 0062
+12FD4 0021
+12FD4 003F
+12FD4 0334
+12FD4 0061
+12FD4 0041
+12FD4 0062
+12FD5 0021
+12FD5 003F
+12FD5 0334
+12FD5 0061
+12FD5 0041
+12FD5 0062
+12FD6 0021
+12FD6 003F
+12FD6 0334
+12FD6 0061
+12FD6 0041
+12FD6 0062
+12FD7 0021
+12FD7 003F
+12FD7 0334
+12FD7 0061
+12FD7 0041
+12FD7 0062
+12FD8 0021
+12FD8 003F
+12FD8 0334
+12FD8 0061
+12FD8 0041
+12FD8 0062
+12FD9 0021
+12FD9 003F
+12FD9 0334
+12FD9 0061
+12FD9 0041
+12FD9 0062
+12FDA 0021
+12FDA 003F
+12FDA 0334
+12FDA 0061
+12FDA 0041
+12FDA 0062
+12FDB 0021
+12FDB 003F
+12FDB 0334
+12FDB 0061
+12FDB 0041
+12FDB 0062
+12FDC 0021
+12FDC 003F
+12FDC 0334
+12FDC 0061
+12FDC 0041
+12FDC 0062
+12FDD 0021
+12FDD 003F
+12FDD 0334
+12FDD 0061
+12FDD 0041
+12FDD 0062
+12FDE 0021
+12FDE 003F
+12FDE 0334
+12FDE 0061
+12FDE 0041
+12FDE 0062
+12FDF 0021
+12FDF 003F
+12FDF 0334
+12FDF 0061
+12FDF 0041
+12FDF 0062
+12FE0 0021
+12FE0 003F
+12FE0 0334
+12FE0 0061
+12FE0 0041
+12FE0 0062
+12FE1 0021
+12FE1 003F
+12FE1 0334
+12FE1 0061
+12FE1 0041
+12FE1 0062
+12FE2 0021
+12FE2 003F
+12FE2 0334
+12FE2 0061
+12FE2 0041
+12FE2 0062
+12FE3 0021
+12FE3 003F
+12FE3 0334
+12FE3 0061
+12FE3 0041
+12FE3 0062
+12FE4 0021
+12FE4 003F
+12FE4 0334
+12FE4 0061
+12FE4 0041
+12FE4 0062
+12FE5 0021
+12FE5 003F
+12FE5 0334
+12FE5 0061
+12FE5 0041
+12FE5 0062
+12FE6 0021
+12FE6 003F
+12FE6 0334
+12FE6 0061
+12FE6 0041
+12FE6 0062
+12FE7 0021
+12FE7 003F
+12FE7 0334
+12FE7 0061
+12FE7 0041
+12FE7 0062
+12FE8 0021
+12FE8 003F
+12FE8 0334
+12FE8 0061
+12FE8 0041
+12FE8 0062
+12FE9 0021
+12FE9 003F
+12FE9 0334
+12FE9 0061
+12FE9 0041
+12FE9 0062
+12FEA 0021
+12FEA 003F
+12FEA 0334
+12FEA 0061
+12FEA 0041
+12FEA 0062
+12FEB 0021
+12FEB 003F
+12FEB 0334
+12FEB 0061
+12FEB 0041
+12FEB 0062
+12FEC 0021
+12FEC 003F
+12FEC 0334
+12FEC 0061
+12FEC 0041
+12FEC 0062
+12FED 0021
+12FED 003F
+12FED 0334
+12FED 0061
+12FED 0041
+12FED 0062
+12FEE 0021
+12FEE 003F
+12FEE 0334
+12FEE 0061
+12FEE 0041
+12FEE 0062
+12FEF 0021
+12FEF 003F
+12FEF 0334
+12FEF 0061
+12FEF 0041
+12FEF 0062
+12FF0 0021
+12FF0 003F
+12FF0 0334
+12FF0 0061
+12FF0 0041
+12FF0 0062
10A60 0021
10A60 003F
10A60 0334
@@ -162614,6 +167388,114 @@ A4F7 0062
10F44 0061
10F44 0041
10F44 0062
+10F70 0021
+10F70 003F
+10F70 0334
+10F70 0061
+10F70 0041
+10F70 0062
+10F71 0021
+10F71 003F
+10F71 0334
+10F71 0061
+10F71 0041
+10F71 0062
+10F72 0021
+10F72 003F
+10F72 0334
+10F72 0061
+10F72 0041
+10F72 0062
+10F73 0021
+10F73 003F
+10F73 0334
+10F73 0061
+10F73 0041
+10F73 0062
+10F74 0021
+10F74 003F
+10F74 0334
+10F74 0061
+10F74 0041
+10F74 0062
+10F75 0021
+10F75 003F
+10F75 0334
+10F75 0061
+10F75 0041
+10F75 0062
+10F76 0021
+10F76 003F
+10F76 0334
+10F76 0061
+10F76 0041
+10F76 0062
+10F77 0021
+10F77 003F
+10F77 0334
+10F77 0061
+10F77 0041
+10F77 0062
+10F78 0021
+10F78 003F
+10F78 0334
+10F78 0061
+10F78 0041
+10F78 0062
+10F79 0021
+10F79 003F
+10F79 0334
+10F79 0061
+10F79 0041
+10F79 0062
+10F7A 0021
+10F7A 003F
+10F7A 0334
+10F7A 0061
+10F7A 0041
+10F7A 0062
+10F7B 0021
+10F7B 003F
+10F7B 0334
+10F7B 0061
+10F7B 0041
+10F7B 0062
+10F7C 0021
+10F7C 003F
+10F7C 0334
+10F7C 0061
+10F7C 0041
+10F7C 0062
+10F7D 0021
+10F7D 003F
+10F7D 0334
+10F7D 0061
+10F7D 0041
+10F7D 0062
+10F7E 0021
+10F7E 003F
+10F7E 0334
+10F7E 0061
+10F7E 0041
+10F7E 0062
+10F7F 0021
+10F7F 003F
+10F7F 0334
+10F7F 0061
+10F7F 0041
+10F7F 0062
+10F80 0021
+10F80 003F
+10F80 0334
+10F80 0061
+10F80 0041
+10F80 0062
+10F81 0021
+10F81 003F
+10F81 0334
+10F81 0061
+10F81 0041
+10F81 0062
10E80 0021
10E80 003F
10E80 0334
@@ -187199,11 +192081,6 @@ FACE 0062
0378 0061
0378 0041
0378 0062
-9FFD 0021
-9FFD 003F
-9FFD 0061
-9FFD 0041
-9FFD 0062
D800 0021
D800 003F
D800 0061
@@ -187331,18 +192208,18 @@ FFF0 0062
1FFFF 0061
1FFFF 0041
1FFFF 0062
-2A6DE 0021
-2A6DE 003F
-2A6DE 0334
-2A6DE 0061
-2A6DE 0041
-2A6DE 0062
-2B735 0021
-2B735 003F
-2B735 0334
-2B735 0061
-2B735 0041
-2B735 0062
+2A6E0 0021
+2A6E0 003F
+2A6E0 0334
+2A6E0 0061
+2A6E0 0041
+2A6E0 0062
+2B739 0021
+2B739 003F
+2B739 0334
+2B739 0061
+2B739 0041
+2B739 0062
2B81E 0021
2B81E 003F
2B81E 0334
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
index 8f096229620..0e3949c32dc 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
@@ -1,6 +1,6 @@
-# GraphemeBreakTest-cldr-13.0.0.txt
-# Date: 2020-02-07, 21:43:46 GMT
-# © 2020 Unicode®, Inc.
+# GraphemeBreakTest-cldr-14.0.0.txt
+# Date: 2021-08-17, 04:43:19 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt b/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt
index 28c5b64e0e9..42e09043567 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTestV2.txt
@@ -1,11 +1,11 @@
# IdnaTestV2.txt
-# Date: 2019-11-07, 13:47:27 GMT
-# © 2019 Unicode®, Inc.
+# Date: 2021-08-17, 19:34:01 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode IDNA Compatible Preprocessing for UTS #46
-# Version: 13.0.0
+# Version: 14.0.0
#
# For documentation and usage, see http://www.unicode.org/reports/tr46
#
@@ -16,7 +16,7 @@
# This file is in UTF-8, where characters may be escaped using the \uXXXX or \x{XXXX}
# convention where they could otherwise have a confusing display.
# These characters include control codes and combining marks.
-#
+#
# Columns (c1, c2,...) are separated by semicolons.
# Leading and trailing spaces and tabs in each column are ignored.
# Comments are indicated with hash marks.
@@ -40,21 +40,21 @@
# A blank value means the same as the toAsciiNStatus value.
# An explicit [] means no errors.
#
-# The line comments currently show visible characters that have been escaped.
-#
+# The line comments currently show visible characters that have been escaped.
+#
# CONFORMANCE:
#
# To test for conformance to UTS #46, an implementation will perform the toUnicode, toAsciiN, and
-# toAsciiT operations on the source string, then verify the resulting strings and relevant status
+# toAsciiT operations on the source string, then verify the resulting strings and relevant status
# values.
#
# If the implementation converts illegal code points into U+FFFD (as per
-# http://www.unicode.org/reports/tr46/proposed.html#Processing) then the string comparisons need to
-# account for that by treating U+FFFD in the actual value as a wildcard when comparing to the
+# https://www.unicode.org/reports/tr46/#Processing) then the string comparisons need to
+# account for that by treating U+FFFD in the actual value as a wildcard when comparing to the
# expected value in the test file.
#
# A status in toUnicode, toAsciiN or toAsciiT is indicated by a value in square brackets,
-# such as "[B5 B6]". In such a case, the contents is a list of status codes based on the step
+# such as "[B5 B6]". In such a case, the contents is a list of status codes based on the step
# numbers in UTS #46 and IDNA2008, with the following formats.
#
# Pn for Section 4 Processing step n
@@ -65,7 +65,7 @@
# Cn for ContextJ (in IDNA2008)
# Xn for toUnicode issues (see below)
#
-# Thus C1 = Appendix A.1. ZERO WIDTH NON-JOINER, and C2 = Appendix A.2. ZERO WIDTH JOINER.
+# Thus C1 = Appendix A.1. ZERO WIDTH NON-JOINER, and C2 = Appendix A.2. ZERO WIDTH JOINER.
# (The CONTEXTO tests are optional for client software, and not tested here.)
#
# Implementations that allow values of particular input flags to be false would ignore
@@ -802,9 +802,9 @@ xn--3gb910r.; ⴙظ.; [B5, B6]; xn--3gb910r.; ; ; # ⴙظ.
xn--3gb910r.xn--1ug; ⴙظ.‍; [B1, B5, B6, C2]; xn--3gb910r.xn--1ug; ; ; # ⴙظ.
xn--3gb194c.; Ⴙظ.; [B5, B6, V6]; xn--3gb194c.; ; ; # Ⴙظ.
xn--3gb194c.xn--1ug; Ⴙظ.‍; [B1, B5, B6, C2, V6]; xn--3gb194c.xn--1ug; ; ; # Ⴙظ.
-󠆸。₆0𐺧ݖ; .60𐺧ݖ; [B1, P1, V6, X4_2]; .xn--60-cke9470y; [B1, P1, V6, A4_2]; ; # .60𐺧ݖ
-󠆸。60𐺧ݖ; .60𐺧ݖ; [B1, P1, V6, X4_2]; .xn--60-cke9470y; [B1, P1, V6, A4_2]; ; # .60𐺧ݖ
-.xn--60-cke9470y; .60𐺧ݖ; [B1, V6, X4_2]; .xn--60-cke9470y; [B1, V6, A4_2]; ; # .60𐺧ݖ
+󠆸。₆0𐺧ݖ; .60𐺧ݖ; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60𐺧ݖ
+󠆸。60𐺧ݖ; .60𐺧ݖ; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60𐺧ݖ
+.xn--60-cke9470y; .60𐺧ݖ; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60𐺧ݖ
6ࡏ。-𑈴; 6ࡏ.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6ࡏ.-𑈴
6ࡏ。-𑈴; 6ࡏ.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6ࡏ.-𑈴
xn--6-jjd.xn----6n8i; 6ࡏ.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6ࡏ.-𑈴
@@ -817,15 +817,15 @@ xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ‍񋌿𐹰.્σ𞰎ࣖ; [B1, C2, V5, V6];
xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ‍񋌿𐹰.્ς𞰎ࣖ; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; ; # 𐹰.્ςࣖ
‍񋌿𐹰。્Σ𞰎ࣖ; ‍񋌿𐹰.્σ𞰎ࣖ; [B1, C2, P1, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, P1, V5, V6] # 𐹰.્σࣖ
‍񋌿𐹰。્σ𞰎ࣖ; ‍񋌿𐹰.્σ𞰎ࣖ; [B1, C2, P1, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, P1, V5, V6] # 𐹰.્σࣖ
-⒈񟄜Ⴓ⒪.්򘘶ࢋ𐹢; ⒈񟄜Ⴓ⒪.්򘘶ࢋ𐹢; [B1, P1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්𐹢
-1.񟄜Ⴓ(o).්򘘶ࢋ𐹢; ; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්𐹢
-1.񟄜ⴓ(o).්򘘶ࢋ𐹢; ; [B1, B6, P1, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.ⴓ(o).්𐹢
-1.񟄜Ⴓ(O).්򘘶ࢋ𐹢; 1.񟄜Ⴓ(o).්򘘶ࢋ𐹢; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්𐹢
-1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; 1.񟄜Ⴓ(o).්򘘶ࢋ𐹢; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්𐹢
-1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; 1.񟄜ⴓ(o).්򘘶ࢋ𐹢; [B1, B6, P1, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.ⴓ(o).්𐹢
-⒈񟄜ⴓ⒪.්򘘶ࢋ𐹢; ⒈񟄜ⴓ⒪.්򘘶ࢋ𐹢; [B1, P1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්𐹢
-xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ⒈񟄜ⴓ⒪.්򘘶ࢋ𐹢; [B1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්𐹢
-xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ⒈񟄜Ⴓ⒪.්򘘶ࢋ𐹢; [B1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්𐹢
+⒈񟄜Ⴓ⒪.්򘘶ࢋ𐹢; ⒈񟄜Ⴓ⒪.්򘘶ࢋ𐹢; [B1, P1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්ࢋ𐹢
+1.񟄜Ⴓ(o).්򘘶ࢋ𐹢; ; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋ𐹢
+1.񟄜ⴓ(o).්򘘶ࢋ𐹢; ; [B1, B6, P1, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.ⴓ(o).්ࢋ𐹢
+1.񟄜Ⴓ(O).්򘘶ࢋ𐹢; 1.񟄜Ⴓ(o).්򘘶ࢋ𐹢; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋ𐹢
+1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; 1.񟄜Ⴓ(o).්򘘶ࢋ𐹢; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋ𐹢
+1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; 1.񟄜ⴓ(o).්򘘶ࢋ𐹢; [B1, B6, P1, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.ⴓ(o).්ࢋ𐹢
+⒈񟄜ⴓ⒪.්򘘶ࢋ𐹢; ⒈񟄜ⴓ⒪.්򘘶ࢋ𐹢; [B1, P1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්ࢋ𐹢
+xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ⒈񟄜ⴓ⒪.්򘘶ࢋ𐹢; [B1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්ࢋ𐹢
+xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ⒈񟄜Ⴓ⒪.්򘘶ࢋ𐹢; [B1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්ࢋ𐹢
𞤷.𐮐𞢁𐹠ؤ; ; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.𐮐𞢁𐹠ؤ
𞤷.𐮐𞢁𐹠ؤ; 𞤷.𐮐𞢁𐹠ؤ; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.𐮐𞢁𐹠ؤ
𞤕.𐮐𞢁𐹠ؤ; 𞤷.𐮐𞢁𐹠ؤ; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.𐮐𞢁𐹠ؤ
@@ -1073,10 +1073,10 @@ xn--yyb56242i.xn----zir1232guu71b; 򈛉ࢩ.⧅񘘡-𐭡; [B1, B5, B6, V6]; xn--y
xn--yyb780jll63m.xn----zir1232guu71b; 򈛉‌ࢩ.⧅񘘡-𐭡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; ; # ࢩ.⧅-𐭡
룱‍𰍨‌。𝨖︒; 룱‍𰍨‌.𝨖︒; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [P1, V5, V6] # 룱𰍨.𝨖︒
룱‍𰍨‌。𝨖︒; 룱‍𰍨‌.𝨖︒; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [P1, V5, V6] # 룱𰍨.𝨖︒
-룱‍𰍨‌。𝨖。; 룱‍𰍨‌.𝨖.; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [P1, V5, V6] # 룱𰍨.𝨖.
-룱‍𰍨‌。𝨖。; 룱‍𰍨‌.𝨖.; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [P1, V5, V6] # 룱𰍨.𝨖.
-xn--ct2b0738h.xn--772h.; 룱𰍨.𝨖.; [V5, V6]; xn--ct2b0738h.xn--772h.; ; ; # 룱𰍨.𝨖.
-xn--0ugb3358ili2v.xn--772h.; 룱‍𰍨‌.𝨖.; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--772h.; ; ; # 룱𰍨.𝨖.
+룱‍𰍨‌。𝨖。; 룱‍𰍨‌.𝨖.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [V5] # 룱𰍨.𝨖.
+룱‍𰍨‌。𝨖。; 룱‍𰍨‌.𝨖.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [V5] # 룱𰍨.𝨖.
+xn--ct2b0738h.xn--772h.; 룱𰍨.𝨖.; [V5]; xn--ct2b0738h.xn--772h.; ; ; # 룱𰍨.𝨖.
+xn--0ugb3358ili2v.xn--772h.; 룱‍𰍨‌.𝨖.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; ; # 룱𰍨.𝨖.
xn--ct2b0738h.xn--y86cl899a; 룱𰍨.𝨖︒; [V5, V6]; xn--ct2b0738h.xn--y86cl899a; ; ; # 룱𰍨.𝨖︒
xn--0ugb3358ili2v.xn--y86cl899a; 룱‍𰍨‌.𝨖︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; ; # 룱𰍨.𝨖︒
🄄.᳜⒈ß; 🄄.᳜⒈ß; [P1, V5, V6]; xn--x07h.xn--zca344lmif; ; xn--x07h.xn--ss-k1r094b; # 🄄.᳜⒈ß
@@ -2063,20 +2063,22 @@ xn--hdh7151p.xn--tsh1248a; ≯𞱸.誆⒈; [B1, V6]; xn--hdh7151p.xn--tsh1248a;
ؖ𞥙䐊ِ.。م↺ڜ; ؖ𞥙䐊ِ..م↺ڜ; [B1, V5, X4_2]; xn--4fb0j490qjg4x..xn--hhb8o948e; [B1, V5, A4_2]; ; # ؖ𞥙䐊ِ..م↺ڜ
xn--4fb0j490qjg4x..xn--hhb8o948e; ؖ𞥙䐊ِ..م↺ڜ; [B1, V5, X4_2]; xn--4fb0j490qjg4x..xn--hhb8o948e; [B1, V5, A4_2]; ; # ؖ𞥙䐊ِ..م↺ڜ
xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ؖ𞥙䐊ِ.︒م↺ڜ; [B1, V5, V6]; xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ; ; # ؖ𞥙䐊ِ.︒م↺ڜ
-퀬-?񶳒.‌ૅ󩸤۴; ; [C1, P1, V6]; 퀬-?񶳒.xn--hmb76q48y18505a; [C1, P1, V6, A3]; 퀬-?񶳒.xn--hmb76q74166b; [P1, V5, V6, A3] # 퀬-.ૅ۴
-퀬-?񶳒.‌ૅ󩸤۴; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; 퀬-?񶳒.xn--hmb76q48y18505a; [C1, P1, V6, A3]; 퀬-?񶳒.xn--hmb76q74166b; [P1, V5, V6, A3] # 퀬-.ૅ۴
-퀬-?񶳒.xn--hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; 퀬-?񶳒.xn--hmb76q74166b; [P1, V5, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.xn--hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; 퀬-?񶳒.xn--hmb76q74166b; [P1, V5, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.XN--HMB76Q74166B; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; 퀬-?񶳒.xn--hmb76q74166b; [P1, V5, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.XN--HMB76Q74166B; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; 퀬-?񶳒.xn--hmb76q74166b; [P1, V5, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.Xn--Hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; 퀬-?񶳒.xn--hmb76q74166b; [P1, V5, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.Xn--Hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; 퀬-?񶳒.xn--hmb76q74166b; [P1, V5, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.xn--hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; 퀬-?񶳒.xn--hmb76q48y18505a; [C1, P1, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.xn--hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; 퀬-?񶳒.xn--hmb76q48y18505a; [C1, P1, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.XN--HMB76Q48Y18505A; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; 퀬-?񶳒.xn--hmb76q48y18505a; [C1, P1, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.XN--HMB76Q48Y18505A; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; 퀬-?񶳒.xn--hmb76q48y18505a; [C1, P1, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.Xn--Hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; 퀬-?񶳒.xn--hmb76q48y18505a; [C1, P1, V6, A3]; ; # 퀬-.ૅ۴
-퀬-?񶳒.Xn--Hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; 퀬-?񶳒.xn--hmb76q48y18505a; [C1, P1, V6, A3]; ; # 퀬-.ૅ۴
+퀬-?񶳒.‌ૅ󩸤۴; ; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; xn---?-6g4k75207c.xn--hmb76q74166b; [P1, V5, V6] # 퀬-?.ૅ۴
+퀬-?񶳒.‌ૅ󩸤۴; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; xn---?-6g4k75207c.xn--hmb76q74166b; [P1, V5, V6] # 퀬-?.ૅ۴
+xn---?-6g4k75207c.xn--hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+xn---?-6g4k75207c.xn--hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.xn--hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.xn--hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.XN--HMB76Q74166B; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.XN--HMB76Q74166B; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.Xn--Hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.Xn--Hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.xn--hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.xn--hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.XN--HMB76Q48Y18505A; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.XN--HMB76Q48Y18505A; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.Xn--Hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.Xn--Hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
Ⴌ.𐹾︒𑁿𞾄; ; [B1, P1, V6]; xn--knd.xn--y86c030a9ob6374b; ; ; # Ⴌ.𐹾︒𑁿
Ⴌ.𐹾。𑁿𞾄; Ⴌ.𐹾.𑁿𞾄; [B1, P1, V5, V6]; xn--knd.xn--2o0d.xn--q30dg029a; ; ; # Ⴌ.𐹾.𑁿
ⴌ.𐹾。𑁿𞾄; ⴌ.𐹾.𑁿𞾄; [B1, P1, V5, V6]; xn--3kj.xn--2o0d.xn--q30dg029a; ; ; # ⴌ.𐹾.𑁿
@@ -2726,10 +2728,8 @@ xn--mta176j97cl2q.2; ᮬⴌ‌̥.2; [C1, V5]; xn--mta176j97cl2q.2; ; ; # ᮬⴌ
xn--mta930emri.2; ᮬႬ̥.2; [V5, V6]; xn--mta930emri.2; ; ; # ᮬႬ̥.2
xn--mta930emribme.2; ᮬႬ‌̥.2; [C1, V5, V6]; xn--mta930emribme.2; ; ; # ᮬႬ̥.2
ᮬⴌ‌̥。𝟸; ᮬⴌ‌̥.2; [C1, V5]; xn--mta176j97cl2q.2; ; xn--mta176jjjm.2; [V5] # ᮬⴌ̥.2
-?。꠆٩󠒩; ?.꠆٩󠒩; [B1, P1, V5, V6]; ?.xn--iib9583fusy0i; [B1, P1, V5, V6, A3]; ; # .꠆٩
-?.xn--iib9583fusy0i; ?.꠆٩󠒩; [B1, P1, V5, V6]; ?.xn--iib9583fusy0i; [B1, P1, V5, V6, A3]; ; # .꠆٩
-?.XN--IIB9583FUSY0I; ?.꠆٩󠒩; [B1, P1, V5, V6]; ?.xn--iib9583fusy0i; [B1, P1, V5, V6, A3]; ; # .꠆٩
-?.Xn--Iib9583fusy0i; ?.꠆٩󠒩; [B1, P1, V5, V6]; ?.xn--iib9583fusy0i; [B1, P1, V5, V6, A3]; ; # .꠆٩
+?。꠆٩󠒩; ?.꠆٩󠒩; [B1, P1, V5, V6]; ?.xn--iib9583fusy0i; ; ; # ?.꠆٩
+?.xn--iib9583fusy0i; ?.꠆٩󠒩; [B1, P1, V5, V6]; ?.xn--iib9583fusy0i; ; ; # ?.꠆٩
󠄁͟⾶。₇︒눇≮; ͟飛.7︒눇≮; [P1, V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮
󠄁͟⾶。₇︒눇≮; ͟飛.7︒눇≮; [P1, V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮
󠄁͟飛。7。눇≮; ͟飛.7.눇≮; [P1, V5, V6]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮
@@ -2897,9 +2897,9 @@ xn--iym9428c.xn--0ug46a7218cllv0c; 𑄳㴼.‌𐹡⃫񫺦; [B1, C1, V5, V6]; xn-
񠻟𐹳𑈯。̝; 񠻟𐹳𑈯.̝; [B1, B3, B5, B6, P1, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # 𐹳𑈯.̝
񠻟𐹳𑈯。̝; 񠻟𐹳𑈯.̝; [B1, B3, B5, B6, P1, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # 𐹳𑈯.̝
xn--ro0dw7dey96m.xn--eta; 񠻟𐹳𑈯.̝; [B1, B3, B5, B6, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # 𐹳𑈯.̝
-ᢊ뾜󠱴𑚶。࢝𐹥; ᢊ뾜󠱴𑚶.࢝𐹥; [P1, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.𐹥
-ᢊ뾜󠱴𑚶。࢝𐹥; ᢊ뾜󠱴𑚶.࢝𐹥; [P1, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.𐹥
-xn--39e4566fjv8bwmt6n.xn--myb6415k; ᢊ뾜󠱴𑚶.࢝𐹥; [V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.𐹥
+ᢊ뾜󠱴𑚶。࢝𐹥; ᢊ뾜󠱴𑚶.࢝𐹥; [B1, P1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.࢝𐹥
+ᢊ뾜󠱴𑚶。࢝𐹥; ᢊ뾜󠱴𑚶.࢝𐹥; [B1, P1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.࢝𐹥
+xn--39e4566fjv8bwmt6n.xn--myb6415k; ᢊ뾜󠱴𑚶.࢝𐹥; [B1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.࢝𐹥
𐹥≠。𐋲󠧠‌; 𐹥≠.𐋲󠧠‌; [B1, C1, P1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, P1, V6] # 𐹥≠.𐋲
𐹥≠。𐋲󠧠‌; 𐹥≠.𐋲󠧠‌; [B1, C1, P1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, P1, V6] # 𐹥≠.𐋲
𐹥≠。𐋲󠧠‌; 𐹥≠.𐋲󠧠‌; [B1, C1, P1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, P1, V6] # 𐹥≠.𐋲
@@ -3024,16 +3024,17 @@ xn--4gb3736kk4zf.xn--3xa4248dy27d; 🜑𐹧ع.ς𑍍蜹; [B1]; xn--4gb3736kk4zf.
򫠐ス􆟤٩.󚃟; 򫠐ス􆟤٩.󚃟; [B5, B6, P1, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
򫠐ス􆟤٩.󚃟; ; [B5, B6, P1, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
xn--iib777sp230oo708a.xn--7824e; 򫠐ス􆟤٩.󚃟; [B5, B6, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
-𝪣򕡝.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-𝪣򕡝.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-𝪣򕡝.֚?ۂ; ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-𝪣򕡝.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-xn--8c3hu7971a.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-xn--8c3hu7971a.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-XN--8C3HU7971A.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-XN--8C3HU7971A.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-Xn--8c3hu7971a.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
-Xn--8c3hu7971a.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.֚?ۂ; [B1, P1, V5, V6, A3]; ; # 𝪣.֚ۂ
+𝪣򕡝.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+𝪣򕡝.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+𝪣򕡝.֚?ۂ; ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+𝪣򕡝.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+xn--8c3hu7971a.xn--?-wec30g; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+xn--8c3hu7971a.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+xn--8c3hu7971a.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+XN--8C3HU7971A.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+XN--8C3HU7971A.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+Xn--8c3hu7971a.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
+Xn--8c3hu7971a.֚?ۂ; 𝪣򕡝.֚?ۂ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ
٠򪓵‌。ݗ; ٠򪓵‌.ݗ; [B1, C1, P1, V6]; xn--8hb852ke991q.xn--bpb; ; xn--8hb82030l.xn--bpb; [B1, P1, V6] # ٠.ݗ
xn--8hb82030l.xn--bpb; ٠򪓵.ݗ; [B1, V6]; xn--8hb82030l.xn--bpb; ; ; # ٠.ݗ
xn--8hb852ke991q.xn--bpb; ٠򪓵‌.ݗ; [B1, C1, V6]; xn--8hb852ke991q.xn--bpb; ; ; # ٠.ݗ
@@ -3072,8 +3073,8 @@ xn----p26i72em2894c.xn--zw6h; -𑄳󠊗𐹩.𞮱; [B1, V3, V6]; xn----p26i72em28
ڹ.ᡳᅟ; ; [P1, V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
xn--skb.xn--osd737a; ڹ.ᡳᅟ; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
㨛𘱎.︒𝟕ഁ; 㨛𘱎.︒7ഁ; [P1, V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7ഁ
-㨛𘱎.。7ഁ; 㨛𘱎..7ഁ; [P1, V6, X4_2]; xn--mbm8237g..xn--7-7hf; [P1, V6, A4_2]; ; # 㨛𘱎..7ഁ
-xn--mbm8237g..xn--7-7hf; 㨛𘱎..7ഁ; [V6, X4_2]; xn--mbm8237g..xn--7-7hf; [V6, A4_2]; ; # 㨛𘱎..7ഁ
+㨛𘱎.。7ഁ; 㨛𘱎..7ഁ; [X4_2]; xn--mbm8237g..xn--7-7hf; [A4_2]; ; # 㨛𘱎..7ഁ
+xn--mbm8237g..xn--7-7hf; 㨛𘱎..7ഁ; [X4_2]; xn--mbm8237g..xn--7-7hf; [A4_2]; ; # 㨛𘱎..7ഁ
xn--mbm8237g.xn--7-7hf1526p; 㨛𘱎.︒7ഁ; [V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7ഁ
۝𻱧-。𞷁⁤𞤣≮; ۝𻱧-.𞷁𞤣≮; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
۝𻱧-。𞷁⁤𞤣≮; ۝𻱧-.𞷁𞤣≮; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
@@ -3135,23 +3136,25 @@ xn--3shy698frsu9dt1me.xn----x310m; ⒒򨘙򳳠𑓀.-󞡊; [V3, V6]; xn--3shy698f
-。‍; -.‍; [C2, V3]; -.xn--1ug; ; -.; [V3] # -.
-.; ; [V3]; ; ; ; # -.
-.xn--1ug; -.‍; [C2, V3]; -.xn--1ug; ; ; # -.
-≮ᡬ.ς¹-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.ς1-?; [P1, V6, A3]; xn--88e732c.σ1-?; # ≮ᡬ.ς1-
-≮ᡬ.ς¹-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.ς1-?; [P1, V6, A3]; xn--88e732c.σ1-?; # ≮ᡬ.ς1-
-≮ᡬ.ς1-?; ; [P1, V6]; xn--88e732c.ς1-?; [P1, V6, A3]; xn--88e732c.σ1-?; # ≮ᡬ.ς1-
-≮ᡬ.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.ς1-?; [P1, V6, A3]; xn--88e732c.σ1-?; # ≮ᡬ.ς1-
-≮ᡬ.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-≮ᡬ.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-≮ᡬ.σ1-?; ; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-≮ᡬ.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-XN--88E732C.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.ς1-?; [P1, V6, A3]; xn--88e732c.σ1-?; # ≮ᡬ.ς1-
-Xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.ς1-?; [P1, V6, A3]; xn--88e732c.σ1-?; # ≮ᡬ.ς1-
-Xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-≮ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-≮ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-≮ᡬ.σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
-≮ᡬ.σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.σ1-?; [P1, V6, A3]; ; # ≮ᡬ.σ1-
+≮ᡬ.ς¹-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+≮ᡬ.ς¹-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+≮ᡬ.ς1-?; ; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+≮ᡬ.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+≮ᡬ.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.σ1-?; ; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+xn--88e732c.xn--1-?-pzc; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+xn--88e732c.xn--1-?-lzc; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; ; # ≮ᡬ.ς1-?
+≮ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+XN--88E732C.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+Xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+Xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
ቬ򔠼񁗶。𐨬𝟠; ቬ򔠼񁗶.𐨬8; [P1, V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.𐨬8
ቬ򔠼񁗶。𐨬8; ቬ򔠼񁗶.𐨬8; [P1, V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.𐨬8
xn--d0d41273c887z.xn--8-ob5i; ቬ򔠼񁗶.𐨬8; [V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.𐨬8
@@ -3613,27 +3616,30 @@ xn--4-tnc6ck183523b.xn--d5a; ضي4ه󎊯.Ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.x
-.xn--kfb8dy983hgl7g; -.؂آ𑆾🐹; [B1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾🐹
󙶜ᢘ。᩿⺢; 󙶜ᢘ.᩿⺢; [P1, V5, V6]; xn--ibf35138o.xn--fpfz94g; ; ; # ᢘ.᩿⺢
xn--ibf35138o.xn--fpfz94g; 󙶜ᢘ.᩿⺢; [V5, V6]; xn--ibf35138o.xn--fpfz94g; ; ; # ᢘ.᩿⺢
-≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, B5, P1, V6]; xn--jndx718cnnl.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ႷᠤႫ.͌س觴
-≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, B5, P1, V6]; xn--jndx718cnnl.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ႷᠤႫ.͌س觴
-≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, B5, P1, V6]; xn--jndx718cnnl.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ႷᠤႫ.͌س觴
-≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, B5, P1, V6]; xn--jndx718cnnl.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ႷᠤႫ.͌س觴
-≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--66e353ce0ilb.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ⴗᠤⴋ.͌س觴
-≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--66e353ce0ilb.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ⴗᠤⴋ.͌س觴
-≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--vnd619as6ig6k.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠Ⴗᠤⴋ.͌س觴
-≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--vnd619as6ig6k.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠Ⴗᠤⴋ.͌س觴
-xn--vnd619as6ig6k.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--vnd619as6ig6k.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠Ⴗᠤⴋ.͌س觴
-XN--VND619AS6IG6K.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--vnd619as6ig6k.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠Ⴗᠤⴋ.͌س觴
-Xn--Vnd619as6ig6k.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--vnd619as6ig6k.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠Ⴗᠤⴋ.͌س觴
-xn--66e353ce0ilb.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--66e353ce0ilb.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ⴗᠤⴋ.͌س觴
-XN--66E353CE0ILB.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--66e353ce0ilb.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ⴗᠤⴋ.͌س觴
-Xn--66e353ce0ilb.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--66e353ce0ilb.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ⴗᠤⴋ.͌س觴
-xn--jndx718cnnl.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, B5, P1, V6]; xn--jndx718cnnl.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ႷᠤႫ.͌س觴
-XN--JNDX718CNNL.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, B5, P1, V6]; xn--jndx718cnnl.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ႷᠤႫ.͌س觴
-Xn--Jndx718cnnl.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, B5, P1, V6]; xn--jndx718cnnl.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ႷᠤႫ.͌س觴
-≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--66e353ce0ilb.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ⴗᠤⴋ.͌س觴
-≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--66e353ce0ilb.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠ⴗᠤⴋ.͌س觴
-≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--vnd619as6ig6k.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠Ⴗᠤⴋ.͌س觴
-≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, B5, P1, V6]; xn--vnd619as6ig6k.?͌س觴; [B1, B5, P1, V6, A3]; ; # ≠Ⴗᠤⴋ.͌س觴
+≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+xn--66e353ce0ilb.xn--?-7fb34t0u7s; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+xn--jndx718cnnl.xn--?-7fb34t0u7s; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+xn--vnd619as6ig6k.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+XN--VND619AS6IG6K.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+Xn--Vnd619as6ig6k.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+xn--66e353ce0ilb.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+XN--66E353CE0ILB.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+Xn--66e353ce0ilb.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+xn--jndx718cnnl.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+XN--JNDX718CNNL.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+Xn--Jndx718cnnl.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
٧.𐥨; ; [B1, P1, V6]; xn--gib.xn--vm9c; ; ; # ٧.
xn--gib.xn--vm9c; ٧.𐥨; [B1, V6]; xn--gib.xn--vm9c; ; ; # ٧.
꧀𝟯。‍񼑥𐹪᯳; ꧀3.‍񼑥𐹪᯳; [B1, C2, P1, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; xn--3-5z4e.xn--1zfz754hncv8b; [B5, P1, V5, V6] # ꧀3.𐹪᯳
@@ -4211,14 +4217,13 @@ xn----4-p16k.xn--zca; 齙--4.ß; ; xn----4-p16k.xn--zca; ; ; # 齙--4.ß
᯲.𐹢𞀖‌; ; [B1, C1, V5]; xn--0zf.xn--0ug9894grqqf; ; xn--0zf.xn--9n0d2296a; [B1, V5] # ᯲.𐹢𞀖
xn--0zf.xn--9n0d2296a; ᯲.𐹢𞀖; [B1, V5]; xn--0zf.xn--9n0d2296a; ; ; # ᯲.𐹢𞀖
xn--0zf.xn--0ug9894grqqf; ᯲.𐹢𞀖‌; [B1, C1, V5]; xn--0zf.xn--0ug9894grqqf; ; ; # ᯲.𐹢𞀖
-󃲙󠋘。?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.?-‍; [C2, P1, V6, A3]; xn--ct86d8w51a.?-; [P1, V3, V6, A3] # .-
-󃲙󠋘。?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.?-‍; [C2, P1, V6, A3]; xn--ct86d8w51a.?-; [P1, V3, V6, A3] # .-
-xn--ct86d8w51a.?-; 󃲙󠋘.?-; [P1, V3, V6]; xn--ct86d8w51a.?-; [P1, V3, V6, A3]; ; # .-
-XN--CT86D8W51A.?-; 󃲙󠋘.?-; [P1, V3, V6]; xn--ct86d8w51a.?-; [P1, V3, V6, A3]; ; # .-
-Xn--Ct86d8w51a.?-; 󃲙󠋘.?-; [P1, V3, V6]; xn--ct86d8w51a.?-; [P1, V3, V6, A3]; ; # .-
-xn--ct86d8w51a.?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.?-‍; [C2, P1, V6, A3]; xn--ct86d8w51a.?-; [P1, V3, V6, A3] # .-
-XN--CT86D8W51A.?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.?-‍; [C2, P1, V6, A3]; xn--ct86d8w51a.?-; [P1, V3, V6, A3] # .-
-Xn--Ct86d8w51a.?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.?-‍; [C2, P1, V6, A3]; xn--ct86d8w51a.?-; [P1, V3, V6, A3] # .-
+󃲙󠋘。?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
+󃲙󠋘。?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
+xn--ct86d8w51a.?-; 󃲙󠋘.?-; [P1, V3, V6]; xn--ct86d8w51a.?-; ; ; # .?-
+xn--ct86d8w51a.xn--?--n1t; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; ; # .?-
+xn--ct86d8w51a.?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
+XN--CT86D8W51A.?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
+Xn--Ct86d8w51a.?-‍; 󃲙󠋘.?-‍; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
᩠.𞵷-𝪩悎; ᩠.𞵷-𝪩悎; [B1, B2, B3, B6, P1, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # ᩠.-𝪩悎
᩠.𞵷-𝪩悎; ; [B1, B2, B3, B6, P1, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # ᩠.-𝪩悎
xn--jof.xn----gf4bq282iezpa; ᩠.𞵷-𝪩悎; [B1, B2, B3, B6, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # ᩠.-𝪩悎
@@ -4229,11 +4234,9 @@ xn--xx5gy2741c.xn--re6hw266j; 𛜯󠊛.𞤳񏥾; [B2, B3, B6, V6]; xn--xx5gy2741
𛜯󠊛.𞤑񏥾; 𛜯󠊛.𞤳񏥾; [B2, B3, B6, P1, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
ܜ𐫒خ.𐋲; ; [B1]; xn--tgb98b8643d.xn--m97c; ; ; # ܜ𐫒خ.𐋲
xn--tgb98b8643d.xn--m97c; ܜ𐫒خ.𐋲; [B1]; xn--tgb98b8643d.xn--m97c; ; ; # ܜ𐫒خ.𐋲
-𐼑𞤓ط࣢.?; 𐼑𞤵ط࣢.?; [P1, V6]; xn--2gb08k9w69agm0g.?; [P1, V6, A3]; ; # 𐼑𞤵ط.
-𐼑𞤵ط࣢.?; ; [P1, V6]; xn--2gb08k9w69agm0g.?; [P1, V6, A3]; ; # 𐼑𞤵ط.
-xn--2gb08k9w69agm0g.?; 𐼑𞤵ط࣢.?; [P1, V6]; xn--2gb08k9w69agm0g.?; [P1, V6, A3]; ; # 𐼑𞤵ط.
-XN--2GB08K9W69AGM0G.?; 𐼑𞤵ط࣢.?; [P1, V6]; xn--2gb08k9w69agm0g.?; [P1, V6, A3]; ; # 𐼑𞤵ط.
-Xn--2gb08k9w69agm0g.?; 𐼑𞤵ط࣢.?; [P1, V6]; xn--2gb08k9w69agm0g.?; [P1, V6, A3]; ; # 𐼑𞤵ط.
+𐼑𞤓ط࣢.?; 𐼑𞤵ط࣢.?; [B1, P1, V6]; xn--2gb08k9w69agm0g.?; ; ; # 𐼑𞤵ط.?
+𐼑𞤵ط࣢.?; ; [B1, P1, V6]; xn--2gb08k9w69agm0g.?; ; ; # 𐼑𞤵ط.?
+xn--2gb08k9w69agm0g.?; 𐼑𞤵ط࣢.?; [B1, P1, V6]; xn--2gb08k9w69agm0g.?; ; ; # 𐼑𞤵ط.?
Ↄ。᳔੍𞷣; Ↄ.᳔੍𞷣; [B1, P1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.᳔੍
Ↄ。᳔੍𞷣; Ↄ.᳔੍𞷣; [B1, P1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.᳔੍
ↄ。᳔੍𞷣; ↄ.᳔੍𞷣; [B1, P1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.᳔੍
@@ -4291,12 +4294,12 @@ xn--ju8a625r.xn--hpb0073k; ꗷ𑆀.ݝ𐩒; ; xn--ju8a625r.xn--hpb0073k; ; ; #
9.≯-。。򩑣-񞛠; 9.≯-..򩑣-񞛠; [P1, V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [P1, V3, V6, A4_2]; ; # 9.≯-..-
9.xn----ogo..xn----xj54d1s69k; 9.≯-..򩑣-񞛠; [V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [V3, V6, A4_2]; ; # 9.≯-..-
xn----ogot9g.xn----n89hl0522az9u2a; ⒐≯-.︒򩑣-񞛠; [V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # ⒐≯-.︒-
-򈪚ೣჁ󠢏.؝; 򈪚ೣჁ󠢏.؝; [B6, P1, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.
-򈪚ೣჁ󠢏.؝; ; [B6, P1, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.
-򈪚ೣⴡ󠢏.؝; ; [B6, P1, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.
-xn--vuc226n8n28lmju7a.xn--cgb; 򈪚ೣⴡ󠢏.؝; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.
-xn--vuc49qvu85xmju7a.xn--cgb; 򈪚ೣჁ󠢏.؝; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.
-򈪚ೣⴡ󠢏.؝; 򈪚ೣⴡ󠢏.؝; [B6, P1, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.
+򈪚ೣჁ󠢏.؝; 򈪚ೣჁ󠢏.؝; [B6, P1, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.؝
+򈪚ೣჁ󠢏.؝; ; [B6, P1, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.؝
+򈪚ೣⴡ󠢏.؝; ; [B6, P1, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.؝
+xn--vuc226n8n28lmju7a.xn--cgb; 򈪚ೣⴡ󠢏.؝; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.؝
+xn--vuc49qvu85xmju7a.xn--cgb; 򈪚ೣჁ󠢏.؝; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.؝
+򈪚ೣⴡ󠢏.؝; 򈪚ೣⴡ󠢏.؝; [B6, P1, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.؝
ᷫ。𐋩ظ-𐫮; ᷫ.𐋩ظ-𐫮; [B1, B3, B6, V5]; xn--gfg.xn----xnc0815qyyg; ; ; # ᷫ.𐋩ظ-𐫮
xn--gfg.xn----xnc0815qyyg; ᷫ.𐋩ظ-𐫮; [B1, B3, B6, V5]; xn--gfg.xn----xnc0815qyyg; ; ; # ᷫ.𐋩ظ-𐫮
싇。⾇𐳋Ⴝ; 싇.舛𐳋Ⴝ; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ
@@ -4450,10 +4453,10 @@ xn--3xa.xn--dhbip2802atb20c; ς.فمي🞛⒈; [V6]; xn--3xa.xn--dhbip2802atb20c
🗩-。𐹻󐞆񥉮; 🗩-.𐹻󐞆񥉮; [B1, P1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.𐹻
🗩-。𐹻󐞆񥉮; 🗩-.𐹻󐞆񥉮; [B1, P1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.𐹻
xn----6t3s.xn--zo0d4811u6ru6a; 🗩-.𐹻󐞆񥉮; [B1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.𐹻
-𐡜-🔪。𝟻‌𐿀; 𐡜-🔪.5‌𐿀; [B1, B3, C1, P1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3, P1, V6] # 𐡜-🔪.5𐿀
-𐡜-🔪。5‌𐿀; 𐡜-🔪.5‌𐿀; [B1, B3, C1, P1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3, P1, V6] # 𐡜-🔪.5𐿀
-xn----5j4iv089c.xn--5-bn7i; 𐡜-🔪.5𐿀; [B1, B3, V6]; xn----5j4iv089c.xn--5-bn7i; ; ; # 𐡜-🔪.5𐿀
-xn----5j4iv089c.xn--5-sgn7149h; 𐡜-🔪.5‌𐿀; [B1, B3, C1, V6]; xn----5j4iv089c.xn--5-sgn7149h; ; ; # 𐡜-🔪.5𐿀
+𐡜-🔪。𝟻‌𐿀; 𐡜-🔪.5‌𐿀; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3] # 𐡜-🔪.5𐿀
+𐡜-🔪。5‌𐿀; 𐡜-🔪.5‌𐿀; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3] # 𐡜-🔪.5𐿀
+xn----5j4iv089c.xn--5-bn7i; 𐡜-🔪.5𐿀; [B1, B3]; xn----5j4iv089c.xn--5-bn7i; ; ; # 𐡜-🔪.5𐿀
+xn----5j4iv089c.xn--5-sgn7149h; 𐡜-🔪.5‌𐿀; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; ; # 𐡜-🔪.5𐿀
𐹣늿‍ß.ߏ0ּ; 𐹣늿‍ß.ߏ0ּ; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ß.ߏ0ּ
𐹣늿‍ß.ߏ0ּ; 𐹣늿‍ß.ߏ0ּ; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ß.ߏ0ּ
𐹣늿‍ß.ߏ0ּ; ; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ß.ߏ0ּ
@@ -5213,16 +5216,17 @@ xn--zzfy954hga2415t.xn--6-h0g; ᯱ𐹳𐹵𞤼.6Ⴅ; [B1, V5, V6]; xn--zzfy954hg
xn--2sb691q.-5--; ߛⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5--
xn--2sb866b.-5--; ߛჀ.-5--; [B1, B2, B3, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5--
ߛⴠ。-⁵--; ߛⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5--
-≯?󠑕。𐹷𐹻≯𐷒; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕。𐹷𐹻≯𐷒; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕。𐹷𐹻≯𐷒; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕。𐹷𐹻≯𐷒; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕.xn--hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕.xn--hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕.XN--HDH8283GDOAQA; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕.XN--HDH8283GDOAQA; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕.Xn--Hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
-≯?󠑕.Xn--Hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; ≯?󠑕.xn--hdh8283gdoaqa; [B1, P1, V6, A3]; ; # ≯.𐹷𐹻≯
+≯?󠑕。𐹷𐹻≯𐷒; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕。𐹷𐹻≯𐷒; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕。𐹷𐹻≯𐷒; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕。𐹷𐹻≯𐷒; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+xn--?-ogo25661n.xn--hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕.xn--hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕.xn--hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕.XN--HDH8283GDOAQA; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕.XN--HDH8283GDOAQA; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕.Xn--Hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
+≯?󠑕.Xn--Hdh8283gdoaqa; ≯?󠑕.𐹷𐹻≯𐷒; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯
㍔ࣦݼ‍。͆򁳊𝅶؄; ルーブルࣦݼ‍.͆򁳊𝅶؄; [B1, B5, B6, C2, P1, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, P1, V5, V6] # ルーブルࣦݼ.͆
ルーブルࣦݼ‍。͆򁳊𝅶؄; ルーブルࣦݼ‍.͆򁳊𝅶؄; [B1, B5, B6, C2, P1, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, P1, V5, V6] # ルーブルࣦݼ.͆
ルーブルࣦݼ‍。͆򁳊𝅶؄; ルーブルࣦݼ‍.͆򁳊𝅶؄; [B1, B5, B6, C2, P1, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, P1, V5, V6] # ルーブルࣦݼ.͆
@@ -5664,9 +5668,9 @@ xn--rgbd2e831i.xn----zyc875efr3a; ᪲مخج.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgb
xn--ce6h.xn----cod.; 𞤤.-ࢣ.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ.
𞤂.-ࢣ︒; 𞤤.-ࢣ︒; [B1, P1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
xn--ce6h.xn----cod7069p; 𞤤.-ࢣ︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
-‌𐺨.࡙--; ; [B1, C1, P1, V3, V5, V6]; xn--0ug7905g.xn-----h6e; ; xn--9p0d.xn-----h6e; [B1, P1, V3, V5, V6] # 𐺨.࡙--
-xn--9p0d.xn-----h6e; 𐺨.࡙--; [B1, V3, V5, V6]; xn--9p0d.xn-----h6e; ; ; # 𐺨.࡙--
-xn--0ug7905g.xn-----h6e; ‌𐺨.࡙--; [B1, C1, V3, V5, V6]; xn--0ug7905g.xn-----h6e; ; ; # 𐺨.࡙--
+‌𐺨.࡙--; ; [B1, C1, V3, V5]; xn--0ug7905g.xn-----h6e; ; xn--9p0d.xn-----h6e; [B1, V3, V5] # 𐺨.࡙--
+xn--9p0d.xn-----h6e; 𐺨.࡙--; [B1, V3, V5]; xn--9p0d.xn-----h6e; ; ; # 𐺨.࡙--
+xn--0ug7905g.xn-----h6e; ‌𐺨.࡙--; [B1, C1, V3, V5]; xn--0ug7905g.xn-----h6e; ; ; # 𐺨.࡙--
𐋸󮘋Ⴢ.Ⴁ; ; [P1, V6]; xn--6nd5215jr2u0h.xn--8md; ; ; # 𐋸Ⴢ.Ⴁ
𐋸󮘋ⴢ.ⴁ; ; [P1, V6]; xn--qlj1559dr224h.xn--skj; ; ; # 𐋸ⴢ.ⴁ
𐋸󮘋Ⴢ.ⴁ; ; [P1, V6]; xn--6nd5215jr2u0h.xn--skj; ; ; # 𐋸Ⴢ.ⴁ
@@ -6221,25 +6225,29 @@ xn--1ugx063g1if.xn--q0s; 𐫜𑌼‍.婀; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; ;
󠅽。。𐹯。⬳᩸; ..𐹯.⬳᩸; [B1, X4_2]; ..xn--no0d.xn--7of309e; [B1, A4_2]; ; # ..𐹯.⬳᩸
..xn--no0d.xn--7of309e; ..𐹯.⬳᩸; [B1, X4_2]; ..xn--no0d.xn--7of309e; [B1, A4_2]; ; # ..𐹯.⬳᩸
xn--y86ca186j.xn--7of309e; ︒︒𐹯.⬳᩸; [B1, V6]; xn--y86ca186j.xn--7of309e; ; ; # ︒︒𐹯.⬳᩸
-𝟖ß.󠄐-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.-?Ⴏ; [P1, V3, V6, A3]; 8ss.-?Ⴏ; # 8ß.-Ⴏ
-8ß.󠄐-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.-?Ⴏ; [P1, V3, V6, A3]; 8ss.-?Ⴏ; # 8ß.-Ⴏ
-8ß.󠄐-?ⴏ; 8ß.-?ⴏ; [P1, V3, V6]; xn--8-qfa.-?ⴏ; [P1, V3, V6, A3]; 8ss.-?ⴏ; # 8ß.-ⴏ
-8SS.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-Ⴏ
-8ss.󠄐-?ⴏ; 8ss.-?ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-ⴏ
-8ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-Ⴏ
-8ss.-?Ⴏ; ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-Ⴏ
-8ss.-?ⴏ; ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-ⴏ
-8SS.-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-Ⴏ
-xn--8-qfa.-?ⴏ; 8ß.-?ⴏ; [P1, V3, V6]; xn--8-qfa.-?ⴏ; [P1, V3, V6, A3]; ; # 8ß.-ⴏ
-XN--8-QFA.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.-?Ⴏ; [P1, V3, V6, A3]; ; # 8ß.-Ⴏ
-Xn--8-Qfa.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.-?Ⴏ; [P1, V3, V6, A3]; ; # 8ß.-Ⴏ
-xn--8-qfa.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.-?Ⴏ; [P1, V3, V6, A3]; ; # 8ß.-Ⴏ
-𝟖ß.󠄐-?ⴏ; 8ß.-?ⴏ; [P1, V3, V6]; xn--8-qfa.-?ⴏ; [P1, V3, V6, A3]; 8ss.-?ⴏ; # 8ß.-ⴏ
-𝟖SS.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-Ⴏ
-𝟖ss.󠄐-?ⴏ; 8ss.-?ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-ⴏ
-𝟖ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-Ⴏ
-𝟖Ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-Ⴏ
-8Ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; ; [P1, V3, V6, A3]; ; # 8ss.-Ⴏ
+𝟖ß.󠄐-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; 8ss.xn---?-gfk; # 8ß.-?Ⴏ
+8ß.󠄐-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; 8ss.xn---?-gfk; # 8ß.-?Ⴏ
+8ß.󠄐-?ⴏ; 8ß.-?ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-261a; ; 8ss.xn---?-261a; # 8ß.-?ⴏ
+8SS.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.󠄐-?ⴏ; 8ss.-?ⴏ; [P1, V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?ⴏ
+8ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.xn---?-gfk; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.xn---?-261a; 8ss.-?ⴏ; [P1, V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?ⴏ
+xn--8-qfa.xn---?-261a; 8ß.-?ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-261a; ; ; # 8ß.-?ⴏ
+xn--8-qfa.xn---?-gfk; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
+𝟖ß.󠄐-?ⴏ; 8ß.-?ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-261a; ; 8ss.xn---?-261a; # 8ß.-?ⴏ
+𝟖SS.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+𝟖ss.󠄐-?ⴏ; 8ss.-?ⴏ; [P1, V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?ⴏ
+𝟖ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.-?Ⴏ; ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.-?ⴏ; ; [P1, V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?ⴏ
+8SS.-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+xn--8-qfa.-?ⴏ; 8ß.-?ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-261a; ; ; # 8ß.-?ⴏ
+XN--8-QFA.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
+Xn--8-Qfa.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
+xn--8-qfa.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
+𝟖Ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8Ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-‍󠋟.‌𐹣Ⴅ; ; [B1, C1, C2, P1, V3, V6]; xn----ugnv7071n.xn--dnd999e4j4p; ; xn----s721m.xn--dnd9201k; [B1, P1, V3, V6] # -.𐹣Ⴅ
-‍󠋟.‌𐹣ⴅ; ; [B1, C1, C2, P1, V3, V6]; xn----ugnv7071n.xn--0ugz32cgr0p; ; xn----s721m.xn--wkj1423e; [B1, P1, V3, V6] # -.𐹣ⴅ
xn----s721m.xn--wkj1423e; -󠋟.𐹣ⴅ; [B1, V3, V6]; xn----s721m.xn--wkj1423e; ; ; # -.𐹣ⴅ
@@ -6252,14 +6260,10 @@ xn----ugnv7071n.xn--dnd999e4j4p; -‍󠋟.‌𐹣Ⴅ; [B1, C1, C2, V3, V6]; xn--
ꦹ‍큷𻶡。2; ꦹ‍큷𻶡.2; [C2, P1, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [P1, V5, V6] # ꦹ큷.2
xn--0m9as84e2e21c.2; ꦹ큷𻶡.2; [V5, V6]; xn--0m9as84e2e21c.2; ; ; # ꦹ큷.2
xn--1ug1435cfkyaoi04d.2; ꦹ‍큷𻶡.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; ; # ꦹ큷.2
-?.🄄𞯘; ; [B1, P1, V6]; ?.xn--3x6hx6f; [B1, P1, V6, A3]; ; # .🄄
-?.3,𞯘; ; [B1, P1, V6]; ?.xn--3,-tb22a; [B1, P1, V6, A3]; ; # .3,
-?.xn--3,-tb22a; ?.3,𞯘; [B1, P1, V6]; ?.xn--3,-tb22a; [B1, P1, V6, A3]; ; # .3,
-?.XN--3,-TB22A; ?.3,𞯘; [B1, P1, V6]; ?.xn--3,-tb22a; [B1, P1, V6, A3]; ; # .3,
-?.Xn--3,-Tb22a; ?.3,𞯘; [B1, P1, V6]; ?.xn--3,-tb22a; [B1, P1, V6, A3]; ; # .3,
-?.xn--3x6hx6f; ?.🄄𞯘; [B1, P1, V6]; ?.xn--3x6hx6f; [B1, P1, V6, A3]; ; # .🄄
-?.XN--3X6HX6F; ?.🄄𞯘; [B1, P1, V6]; ?.xn--3x6hx6f; [B1, P1, V6, A3]; ; # .🄄
-?.Xn--3x6hx6f; ?.🄄𞯘; [B1, P1, V6]; ?.xn--3x6hx6f; [B1, P1, V6, A3]; ; # .🄄
+?.🄄𞯘; ; [B1, P1, V6]; ?.xn--3x6hx6f; ; ; # ?.🄄
+?.3,𞯘; ; [B1, P1, V6]; ?.xn--3,-tb22a; ; ; # ?.3,
+?.xn--3,-tb22a; ?.3,𞯘; [B1, P1, V6]; ?.xn--3,-tb22a; ; ; # ?.3,
+?.xn--3x6hx6f; ?.🄄𞯘; [B1, P1, V6]; ?.xn--3x6hx6f; ; ; # ?.🄄
𝨖𐩙。۝󀡶ꣅ⒈; 𝨖𐩙.۝󀡶ꣅ⒈; [B1, P1, V5, V6]; xn--rt9cl956a.xn--tlb403mxv4g06s9i; ; ; # 𝨖.ꣅ⒈
𝨖𐩙。۝󀡶ꣅ1.; 𝨖𐩙.۝󀡶ꣅ1.; [B1, P1, V5, V6]; xn--rt9cl956a.xn--1-dxc8545j0693i.; ; ; # 𝨖.ꣅ1.
xn--rt9cl956a.xn--1-dxc8545j0693i.; 𝨖𐩙.۝󀡶ꣅ1.; [B1, V5, V6]; xn--rt9cl956a.xn--1-dxc8545j0693i.; ; ; # 𝨖.ꣅ1.
@@ -6319,16 +6323,22 @@ xn--1mnx647cg3x1b.xn--4-zfb502tlsl; 𑆀䁴񤧣.ⴕ4‌͈; [C1, V5, V6]; xn--1mn
xn--1mnx647cg3x1b.xn--4-zfb324h; 𑆀䁴񤧣.Ⴕ4͈; [V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h; ; ; # 𑆀䁴.Ⴕ4͈
xn--1mnx647cg3x1b.xn--4-zfb324h32o; 𑆀䁴񤧣.Ⴕ4‌͈; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; ; # 𑆀䁴.Ⴕ4͈
𑆀䁴񤧣.ⴕ𝟜‌͈; 𑆀䁴񤧣.ⴕ4‌͈; [C1, P1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; xn--1mnx647cg3x1b.xn--4-zfb5123a; [P1, V5, V6] # 𑆀䁴.ⴕ4͈
-憡?‌Ⴔ.𐋮‍≠; ; [C1, C2, P1, V6]; 憡?‌Ⴔ.xn--1ug73gl146a; [C1, C2, P1, V6, A3]; 憡?Ⴔ.xn--1chz659f; [P1, V6, A3] # 憡Ⴔ.𐋮≠
-憡?‌Ⴔ.𐋮‍≠; 憡?‌Ⴔ.𐋮‍≠; [C1, C2, P1, V6]; 憡?‌Ⴔ.xn--1ug73gl146a; [C1, C2, P1, V6, A3]; 憡?Ⴔ.xn--1chz659f; [P1, V6, A3] # 憡Ⴔ.𐋮≠
-憡?‌ⴔ.𐋮‍≠; 憡?‌ⴔ.𐋮‍≠; [C1, C2, P1, V6]; 憡?‌ⴔ.xn--1ug73gl146a; [C1, C2, P1, V6, A3]; 憡?ⴔ.xn--1chz659f; [P1, V6, A3] # 憡ⴔ.𐋮≠
-憡?‌ⴔ.𐋮‍≠; ; [C1, C2, P1, V6]; 憡?‌ⴔ.xn--1ug73gl146a; [C1, C2, P1, V6, A3]; 憡?ⴔ.xn--1chz659f; [P1, V6, A3] # 憡ⴔ.𐋮≠
-憡?ⴔ.xn--1chz659f; 憡?ⴔ.𐋮≠; [P1, V6]; 憡?ⴔ.xn--1chz659f; [P1, V6, A3]; ; # 憡ⴔ.𐋮≠
-憡?Ⴔ.XN--1CHZ659F; 憡?Ⴔ.𐋮≠; [P1, V6]; 憡?Ⴔ.xn--1chz659f; [P1, V6, A3]; ; # 憡Ⴔ.𐋮≠
-憡?Ⴔ.xn--1chz659f; 憡?Ⴔ.𐋮≠; [P1, V6]; 憡?Ⴔ.xn--1chz659f; [P1, V6, A3]; ; # 憡Ⴔ.𐋮≠
-憡?‌ⴔ.xn--1ug73gl146a; 憡?‌ⴔ.𐋮‍≠; [C1, C2, P1, V6]; 憡?‌ⴔ.xn--1ug73gl146a; [C1, C2, P1, V6, A3]; 憡?ⴔ.xn--1ug73gl146a; [C2, P1, V6, A3] # 憡ⴔ.𐋮≠
-憡?‌Ⴔ.XN--1UG73GL146A; 憡?‌Ⴔ.𐋮‍≠; [C1, C2, P1, V6]; 憡?‌Ⴔ.xn--1ug73gl146a; [C1, C2, P1, V6, A3]; 憡?Ⴔ.xn--1ug73gl146a; [C2, P1, V6, A3] # 憡Ⴔ.𐋮≠
-憡?‌Ⴔ.xn--1ug73gl146a; 憡?‌Ⴔ.𐋮‍≠; [C1, C2, P1, V6]; 憡?‌Ⴔ.xn--1ug73gl146a; [C1, C2, P1, V6, A3]; 憡?Ⴔ.xn--1ug73gl146a; [C2, P1, V6, A3] # 憡Ⴔ.𐋮≠
-憡?Ⴔ.xn--1ug73gl146a; 憡?Ⴔ.𐋮‍≠; [C2, P1, V6]; 憡?Ⴔ.xn--1ug73gl146a; [C2, P1, V6, A3]; ; # 憡Ⴔ.𐋮≠
-憡?ⴔ.xn--1ug73gl146a; 憡?ⴔ.𐋮‍≠; [C2, P1, V6]; 憡?ⴔ.xn--1ug73gl146a; [C2, P1, V6, A3]; ; # 憡ⴔ.𐋮≠
-憡?Ⴔ.XN--1UG73GL146A; 憡?Ⴔ.𐋮‍≠; [C2, P1, V6]; 憡?Ⴔ.xn--1ug73gl146a; [C2, P1, V6, A3]; ; # 憡Ⴔ.𐋮≠
+憡?‌Ⴔ.𐋮‍≠; ; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1chz659f; [P1, V6] # 憡?Ⴔ.𐋮≠
+憡?‌Ⴔ.𐋮‍≠; 憡?‌Ⴔ.𐋮‍≠; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1chz659f; [P1, V6] # 憡?Ⴔ.𐋮≠
+憡?‌ⴔ.𐋮‍≠; 憡?‌ⴔ.𐋮‍≠; [C1, C2, P1, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1chz659f; [P1, V6] # 憡?ⴔ.𐋮≠
+憡?‌ⴔ.𐋮‍≠; ; [C1, C2, P1, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1chz659f; [P1, V6] # 憡?ⴔ.𐋮≠
+xn--?-fwsr13r.xn--1chz659f; 憡?ⴔ.𐋮≠; [P1, V6]; xn--?-fwsr13r.xn--1chz659f; ; ; # 憡?ⴔ.𐋮≠
+xn--?-sgn310doh5c.xn--1ug73gl146a; 憡?‌ⴔ.𐋮‍≠; [C1, C2, P1, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; ; # 憡?ⴔ.𐋮≠
+xn--?-c1g3623d.xn--1chz659f; 憡?Ⴔ.𐋮≠; [P1, V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?Ⴔ.𐋮≠
+xn--?-c1g798iy27d.xn--1ug73gl146a; 憡?‌Ⴔ.𐋮‍≠; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; ; # 憡?Ⴔ.𐋮≠
+憡?ⴔ.xn--1chz659f; 憡?ⴔ.𐋮≠; [P1, V6]; xn--?-fwsr13r.xn--1chz659f; ; ; # 憡?ⴔ.𐋮≠
+憡?Ⴔ.XN--1CHZ659F; 憡?Ⴔ.𐋮≠; [P1, V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?Ⴔ.𐋮≠
+憡?Ⴔ.xn--1chz659f; 憡?Ⴔ.𐋮≠; [P1, V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?Ⴔ.𐋮≠
+憡?‌ⴔ.xn--1ug73gl146a; 憡?‌ⴔ.𐋮‍≠; [C1, C2, P1, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1ug73gl146a; [C2, P1, V6] # 憡?ⴔ.𐋮≠
+憡?‌Ⴔ.XN--1UG73GL146A; 憡?‌Ⴔ.𐋮‍≠; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1ug73gl146a; [C2, P1, V6] # 憡?Ⴔ.𐋮≠
+憡?‌Ⴔ.xn--1ug73gl146a; 憡?‌Ⴔ.𐋮‍≠; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1ug73gl146a; [C2, P1, V6] # 憡?Ⴔ.𐋮≠
+xn--?-c1g3623d.xn--1ug73gl146a; 憡?Ⴔ.𐋮‍≠; [C2, P1, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?Ⴔ.𐋮≠
+xn--?-fwsr13r.xn--1ug73gl146a; 憡?ⴔ.𐋮‍≠; [C2, P1, V6]; xn--?-fwsr13r.xn--1ug73gl146a; ; ; # 憡?ⴔ.𐋮≠
+憡?Ⴔ.xn--1ug73gl146a; 憡?Ⴔ.𐋮‍≠; [C2, P1, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?Ⴔ.𐋮≠
+憡?ⴔ.xn--1ug73gl146a; 憡?ⴔ.𐋮‍≠; [C2, P1, V6]; xn--?-fwsr13r.xn--1ug73gl146a; ; ; # 憡?ⴔ.𐋮≠
+憡?Ⴔ.XN--1UG73GL146A; 憡?Ⴔ.𐋮‍≠; [C2, P1, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?Ⴔ.𐋮≠
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
index d8666c458fc..8d1cef0f785 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
@@ -1,6 +1,6 @@
-# LineBreakTest-13.0.0.txt
-# Date: 2019-11-21, 16:13:36 GMT
-# © 2019 Unicode®, Inc.
+# LineBreakTest-14.0.0.txt
+# Date: 2021-08-20, 21:08:45 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -1846,9 +1846,9 @@
× AC00 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× AC00 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC00 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× AC00 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× AC00 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× AC00 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× AC00 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
@@ -2018,9 +2018,9 @@
× AC01 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× AC01 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC01 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× AC01 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× AC01 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× AC01 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× AC01 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
@@ -3050,9 +3050,9 @@
× 1100 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1100 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1100 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 1100 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× 1100 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1100 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 1100 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
@@ -3222,9 +3222,9 @@
× 11A8 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 11A8 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 11A8 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 11A8 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 11A8 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
@@ -3394,9 +3394,9 @@
× 1160 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1160 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× 1160 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1160 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 1160 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
@@ -4538,13 +4538,13 @@
× 0024 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0024 × 0308 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0024 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0024 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0024 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0024 × 0308 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0024 × 0308 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0024 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0024 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0024 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0024 × 0308 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0024 × 0308 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0024 × 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0024 × 0020 ÷ 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
@@ -4566,17 +4566,17 @@
× 0024 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0024 × 0308 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
× 0024 × 0308 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0024 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0024 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0024 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0024 × 0308 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0024 × 0308 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0024 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0024 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0024 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0024 × 0308 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0024 × 0308 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0024 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0024 × 0308 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0024 × 0308 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0024 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0024 × 0020 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
@@ -5838,9 +5838,9 @@
× 261D × 0020 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
× 261D × 0308 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -7452,9 +7452,9 @@
× 1160 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 11A8 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
-× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
+× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0066 × 0069 × 006E × 0061 × 006C ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
× 0063 × 0061 × 006E × 0027 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0063 × 0061 × 006E × 2019 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
@@ -7678,7 +7678,9 @@
× 1F1F7 × 1F1FA ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [30.13] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
× 1F1F7 × 1F1FA × 200B ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.12] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
× 05D0 × 002D × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) × [21.1] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1F02C × 1F3FF ÷ # × [0.3] <reserved-1F02C> (Other) × [30.22] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3]
+× 00A9 ÷ 1F3FF ÷ # × [0.3] COPYRIGHT SIGN (AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3]
#
-# Lines: 7652
+# Lines: 7654
#
# EOF
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
index 5ae1f881100..61ea42cf1a2 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
@@ -1,6 +1,6 @@
-# SentenceBreakTest-13.0.0.txt
-# Date: 2019-11-20, 22:27:22 GMT
-# © 2019 Unicode®, Inc.
+# SentenceBreakTest-14.0.0.txt
+# Date: 2021-03-08, 06:22:40 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/Thai_codepoints_exclusive_model5_heavy.txt b/Build/source/libs/icu/icu-src/source/test/testdata/Thai_codepoints_exclusive_model5_heavy.txt
new file mode 100644
index 00000000000..12051cc7183
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/Thai_codepoints_exclusive_model5_heavy.txt
@@ -0,0 +1,6009 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+Thai_codepoints_exclusive_model5_heavy:table(nofallback){
+ model{"Thai_codepoints_exclusive_model5_heavy"}
+ type{"codepoints"}
+ embeddings:int{20}
+ hunits:int{15}
+ dict{
+ "ก",
+ "ข",
+ "ฃ",
+ "ค",
+ "ฅ",
+ "ฆ",
+ "ง",
+ "จ",
+ "ฉ",
+ "ช",
+ "ซ",
+ "ฌ",
+ "ญ",
+ "ฎ",
+ "ฏ",
+ "ฐ",
+ "ฑ",
+ "ฒ",
+ "ณ",
+ "ด",
+ "ต",
+ "ถ",
+ "ท",
+ "ธ",
+ "น",
+ "บ",
+ "ป",
+ "ผ",
+ "ฝ",
+ "พ",
+ "ฟ",
+ "ภ",
+ "ม",
+ "ย",
+ "ร",
+ "ฤ",
+ "ล",
+ "ฦ",
+ "ว",
+ "ศ",
+ "ษ",
+ "ส",
+ "ห",
+ "ฬ",
+ "อ",
+ "ฮ",
+ "ฯ",
+ "ะ",
+ "ั",
+ "า",
+ "ำ",
+ "ิ",
+ "ี",
+ "ึ",
+ "ื",
+ "ุ",
+ "ู",
+ "ฺ",
+ "เ",
+ "แ",
+ "โ",
+ "ใ",
+ "ไ",
+ "ๅ",
+ "ๆ",
+ "็",
+ "่",
+ "้",
+ "๊",
+ "๋",
+ "์",
+ "ํ",
+ "๎",
+ }
+ data:intvector{
+ -1112142886,
+ 1022015995,
+ -1125173248,
+ -1100799408,
+ 1023132438,
+ 1050484808,
+ 1026205999,
+ 1032710067,
+ 1046378394,
+ 1020985791,
+ 1036159587,
+ -1136782966,
+ -1099992628,
+ -1114608928,
+ -1131786450,
+ -1123270559,
+ 1039102136,
+ -1144039147,
+ 1019520363,
+ 1041361138,
+ -1114142348,
+ 1053217804,
+ 1030216786,
+ -1082938607,
+ -1084500897,
+ 1032756706,
+ 1064206118,
+ 1039151957,
+ -1130631323,
+ 1051035319,
+ 1034731880,
+ 1032110134,
+ -1137977531,
+ 1044988933,
+ -1140733360,
+ -1122779265,
+ 1030946466,
+ -1127687766,
+ -1139363102,
+ -1140108208,
+ -1128283161,
+ 1018376486,
+ 1006332800,
+ -1125087891,
+ 981337728,
+ -1131553280,
+ -1119960025,
+ 1001190936,
+ -1122468115,
+ 1011213568,
+ 1000366720,
+ -1126342208,
+ -1122565971,
+ -1149961520,
+ -1161720416,
+ 1025239545,
+ 1028108593,
+ 1027989965,
+ 1012367732,
+ -1134732492,
+ -1119317919,
+ 1047083276,
+ 1032333784,
+ -1097422528,
+ -1098579845,
+ -1094249518,
+ 1072435681,
+ 1038815900,
+ -1098761610,
+ 1048719446,
+ 1057011082,
+ 1025825300,
+ 1033498510,
+ -1100001246,
+ -1138092260,
+ 1024004387,
+ 1005619315,
+ -1089740171,
+ -1091731239,
+ -1112538356,
+ -1119921286,
+ 1006826880,
+ -1120119958,
+ 1007617676,
+ 1021615770,
+ 1017793730,
+ -1122502208,
+ -1132701772,
+ -1120923027,
+ 1021989582,
+ -1126083840,
+ -1128161913,
+ 1025794513,
+ 1023805127,
+ -1165613472,
+ 1007917556,
+ 1024604055,
+ 1023859761,
+ -1135187224,
+ -1121362029,
+ 1053450272,
+ 1039147779,
+ 1031611782,
+ 1046032625,
+ 1035485208,
+ 1066180234,
+ 1055203351,
+ 1060722108,
+ 1067398205,
+ 1067248418,
+ 1060338368,
+ 1054951594,
+ 1053672679,
+ 1060245644,
+ -1089463057,
+ 1042720369,
+ -1098665812,
+ 991643040,
+ 1052434216,
+ 1057303437,
+ 1045577562,
+ -1110305368,
+ -1127665672,
+ -1117972763,
+ 1028429541,
+ 1050608468,
+ 1042282064,
+ 1001667408,
+ 1062603745,
+ -1111946928,
+ 1007493638,
+ 994038276,
+ 1060222968,
+ 1045588839,
+ 1015730978,
+ 1029298010,
+ 1008413085,
+ -1087007400,
+ -1076414892,
+ 1040695695,
+ -1098111929,
+ 1048011403,
+ -1127013559,
+ 1010093040,
+ -1096417427,
+ 1009117872,
+ 1058602660,
+ 1046393001,
+ 1036576320,
+ 1042714411,
+ 1067008565,
+ 985100184,
+ 1027297703,
+ -1086931026,
+ 1034391360,
+ -1103684384,
+ 1047329601,
+ -1111618698,
+ -1100391220,
+ 1078105105,
+ -1085587846,
+ 993694838,
+ 1058324137,
+ 1032681814,
+ 1042935163,
+ 1063074685,
+ 1063141103,
+ 1070855881,
+ -1094134873,
+ -1103805514,
+ 1063166420,
+ 1067476872,
+ 1066647305,
+ -1096818071,
+ -1117425502,
+ -1106371417,
+ -1098917838,
+ 1058358246,
+ 1046936337,
+ -1098750062,
+ -1109595326,
+ 1055323791,
+ 1043746546,
+ -1114915950,
+ -1136085366,
+ -1125086548,
+ 1034585216,
+ -1101874078,
+ -1124216465,
+ 1049108823,
+ 1030164839,
+ 1040486633,
+ 1035743102,
+ -1097326976,
+ -1111017020,
+ -1115467981,
+ -1168197240,
+ -1112996497,
+ 1060090255,
+ -1127638945,
+ -1101576250,
+ -1102361840,
+ -1124440148,
+ -1093806600,
+ -1096495350,
+ 1050133774,
+ 1050888557,
+ 1047331694,
+ -1082145670,
+ -1124306310,
+ 1068189358,
+ -1105824738,
+ 1033999031,
+ -1094699242,
+ 1040291690,
+ -1096048849,
+ 1049336560,
+ -1112766686,
+ -1106792774,
+ 1056462717,
+ -1076324112,
+ -1079313428,
+ 1086831672,
+ 1064009469,
+ 1058107462,
+ 1060449591,
+ 1056786761,
+ -1083662356,
+ -1084614668,
+ -1089832108,
+ 1062515103,
+ 1075761788,
+ 1073179411,
+ 1050059337,
+ -1073197030,
+ -1072731868,
+ -1076240289,
+ 1063031569,
+ 1047677013,
+ -1081173102,
+ 1067561167,
+ 1045872868,
+ -1112308279,
+ -1098168946,
+ -1098328137,
+ -1099421055,
+ 1046157095,
+ -1083736549,
+ 1049972032,
+ 1047009250,
+ -1118211699,
+ 1028385208,
+ 1060697477,
+ 1032941944,
+ -1096597404,
+ 1042221963,
+ -1101318484,
+ -1102143343,
+ -1137422076,
+ 1049932231,
+ 1064408586,
+ -1118537258,
+ 1030282246,
+ -1109387106,
+ 1021529631,
+ -1108379587,
+ -1112963520,
+ -1102719742,
+ -1097036827,
+ 1050027534,
+ -1099956183,
+ -1169663760,
+ -1093334446,
+ 1011158517,
+ -1097490100,
+ 1049127366,
+ -1112947286,
+ -1079023204,
+ 1052799915,
+ -1106276452,
+ 1059198605,
+ -1127910006,
+ -1133714057,
+ 1059739926,
+ 1015687803,
+ -1106074871,
+ 1031187596,
+ -1092299807,
+ 1039173944,
+ 1036688610,
+ -1113810959,
+ 1052937595,
+ -1109007573,
+ 1046000128,
+ 1032229353,
+ -1150896180,
+ 1005846394,
+ -1106396410,
+ 1050956673,
+ 1024130450,
+ 1046659963,
+ -1096387337,
+ 1028377889,
+ 1048428578,
+ -1103208885,
+ 1056381111,
+ 1022698025,
+ -1087977657,
+ -1063114902,
+ -1102519833,
+ 1040815297,
+ -1113821673,
+ -1116410140,
+ 1049706791,
+ 1034727879,
+ -1109436885,
+ -1113715132,
+ 1070543343,
+ -1100691233,
+ -1104698221,
+ -1089349215,
+ 1062448120,
+ -1107038086,
+ 1081735807,
+ -1101037024,
+ 1058396081,
+ 1051068175,
+ 1057830431,
+ 1066704444,
+ 1058316471,
+ -1064766866,
+ 1055332076,
+ -1077262660,
+ -1071393093,
+ -1082359043,
+ 1049350879,
+ 1056152663,
+ 1068117957,
+ 1074315373,
+ 1078355364,
+ -1077924161,
+ -1113396736,
+ 1015949809,
+ -1084823421,
+ 1031517475,
+ -1089817230,
+ -1133045992,
+ -1082593211,
+ 1064626576,
+ 1061099477,
+ 1072093629,
+ 1063524548,
+ 1056764674,
+ 1018307844,
+ -1078829891,
+ 1059204563,
+ -1062632876,
+ 1026839174,
+ 1054021142,
+ 1060397676,
+ 1048365992,
+ -1129808592,
+ -1113133888,
+ 1076508122,
+ -1108599130,
+ -1107486940,
+ -1090253452,
+ 1053535181,
+ 1042672601,
+ 1029961747,
+ -1106719800,
+ -1108361723,
+ -1092918873,
+ 1050729703,
+ 1026397855,
+ 1061916068,
+ 1045446195,
+ -1098033376,
+ 1067152172,
+ 1046255054,
+ 1028309489,
+ 996220676,
+ 1008417548,
+ -1134436375,
+ 1009526264,
+ -1096216927,
+ 1020043295,
+ 1049988494,
+ 1076038547,
+ -1098204869,
+ 1031071426,
+ -1132982748,
+ 1041392893,
+ 1025589103,
+ -1117858950,
+ 1007457380,
+ 1043084330,
+ 1045764805,
+ 1023101121,
+ 1031601696,
+ 1036206282,
+ 1038824655,
+ -1128251993,
+ -1092046290,
+ -1110727526,
+ -1107149911,
+ 1053450757,
+ -1094550681,
+ 1034477318,
+ 1050480069,
+ 1075548692,
+ 982712072,
+ 1044227159,
+ -1086832604,
+ -1117519365,
+ 1029302186,
+ -1114806777,
+ 1025222987,
+ 1020221606,
+ 1054665285,
+ 1032564337,
+ 1037981030,
+ 1037728198,
+ -1105288195,
+ -1123438924,
+ 1049762423,
+ 1040101862,
+ -1117416321,
+ 1026661546,
+ 1013157053,
+ 1026215998,
+ 1040865932,
+ 1049264606,
+ -1125505568,
+ -1078136163,
+ 1036097545,
+ 1031076305,
+ -1091440737,
+ 1056540945,
+ 982065336,
+ 1032419740,
+ 1046623378,
+ 1026133441,
+ -1113794757,
+ -1109465378,
+ -1102224728,
+ 1037496815,
+ 1046023761,
+ -1084559173,
+ 1016827292,
+ -1112048036,
+ 1031883279,
+ 1030074689,
+ -1096001197,
+ -1092406715,
+ 1025211910,
+ 1023865732,
+ -1095428734,
+ -1105089966,
+ -1111812516,
+ 1033954734,
+ 1055944100,
+ -1130926620,
+ -1082801756,
+ -1085938523,
+ -1103658415,
+ -1105868257,
+ 991788760,
+ 1049289519,
+ -1117061338,
+ -1112533965,
+ 1046292013,
+ -1122601016,
+ -1102695003,
+ 1043325012,
+ -1136293669,
+ -1135618564,
+ 1044087704,
+ 1042142930,
+ 1047878450,
+ 1037695728,
+ 991555604,
+ 1015721543,
+ 1040947455,
+ 1016622332,
+ 1044393689,
+ 1039541183,
+ 1020912721,
+ 1041041701,
+ -1079986399,
+ 996483758,
+ 1015397180,
+ 1075933341,
+ 1027690631,
+ -1107625806,
+ 1023040890,
+ 990648860,
+ -1107217956,
+ -1106109484,
+ 1042203660,
+ -1098735155,
+ -1139303445,
+ 1002398272,
+ 1046542239,
+ -1151191140,
+ -1087802245,
+ 1035637639,
+ 1053123212,
+ 1037749066,
+ 1029601324,
+ -1129172868,
+ 1011008383,
+ 1043665745,
+ 1029571770,
+ -1111617096,
+ -1113451765,
+ 1036683638,
+ 1062038436,
+ -1080062124,
+ 1034909239,
+ -1113107468,
+ -1114093412,
+ 1038130918,
+ 1032374956,
+ -1123850759,
+ 1050654558,
+ 1043410937,
+ 1069499289,
+ 1032487622,
+ -1109588636,
+ 1043552731,
+ 1045453626,
+ 1024279868,
+ -1105847845,
+ -1089181841,
+ -1116255962,
+ -1101558140,
+ 1041412961,
+ 1032867215,
+ 1043781178,
+ -1086371588,
+ 1036848380,
+ -1123310774,
+ -1116149174,
+ -1095023843,
+ 1032608464,
+ 1062808440,
+ 1044841121,
+ -1073366711,
+ 1046058438,
+ -1112445192,
+ 1053592138,
+ -1123670785,
+ -1087748983,
+ -1089549859,
+ -1104113333,
+ -1095571224,
+ 1062921561,
+ -1097459519,
+ -1103412706,
+ -1098924635,
+ -1111240610,
+ 1049147653,
+ -1089997365,
+ 1025167041,
+ -1098897195,
+ 1057310525,
+ 1047772542,
+ -1072410265,
+ 1069306827,
+ -1116996462,
+ 1054018744,
+ 1043958767,
+ -1132260547,
+ -1095353842,
+ -1106192743,
+ -1096047203,
+ -1104187117,
+ -1095326068,
+ 1036434121,
+ -1099305704,
+ 1031988361,
+ 1016161599,
+ -1104819156,
+ -1097489565,
+ -1098385753,
+ 968425106,
+ 1055833249,
+ 1051809991,
+ 1044933577,
+ 1056960383,
+ 1039430864,
+ 1018653589,
+ -1091685824,
+ -1106210796,
+ -1111687961,
+ -1147407865,
+ 1059541007,
+ 988984874,
+ 1055026064,
+ 1051128238,
+ 1044204721,
+ -1117126028,
+ -1081307207,
+ -1112332414,
+ 1049913714,
+ 1042672021,
+ -1080834611,
+ 1045458848,
+ -1096407894,
+ 1051945347,
+ -1114476288,
+ 1057350775,
+ -1100992246,
+ -1121192423,
+ 1048975306,
+ 1045547342,
+ 1049265110,
+ -1084480057,
+ 1036745924,
+ -1090054093,
+ 1058655949,
+ 1038881452,
+ -1106118085,
+ 1033293246,
+ -1117933067,
+ 1050716794,
+ -1081118715,
+ -1101672007,
+ 1030539599,
+ -1097731291,
+ 1042375023,
+ -1107020970,
+ -1114993674,
+ -1095830391,
+ -1099527256,
+ -1123518057,
+ 1012010606,
+ -1122457730,
+ -1095746157,
+ -1122154772,
+ -1105548053,
+ 1035186166,
+ 1044157338,
+ -1105563005,
+ -1111009280,
+ -1149980260,
+ -1137136897,
+ 1050163870,
+ -1103243771,
+ 1063065214,
+ -1123420480,
+ -1107738468,
+ 1040775585,
+ 996723658,
+ -1119711139,
+ 1043946628,
+ 1011039588,
+ 1008098413,
+ 1048765167,
+ 1040632503,
+ 1030360491,
+ -1151705195,
+ 1012436928,
+ 1026781769,
+ -1105341064,
+ -1121741584,
+ -1078453765,
+ -1134705050,
+ -1107279375,
+ -1148308189,
+ -1143660328,
+ -1129112269,
+ 1022253427,
+ 1028153652,
+ 1005081690,
+ 1048817730,
+ -1117724615,
+ -1123310453,
+ 1003667636,
+ 1043097228,
+ 1018047333,
+ 1023538839,
+ 1044330352,
+ -1120010905,
+ 1016496220,
+ -1121034623,
+ -1096494176,
+ -1112263297,
+ -1107664001,
+ -1122101147,
+ 1018932563,
+ -1097747548,
+ 1034600934,
+ 1024335727,
+ 1024378335,
+ -1089997467,
+ 1047290487,
+ 1040732808,
+ -1111862285,
+ 996269492,
+ 1062131365,
+ 1051163373,
+ -1097245131,
+ 1026476065,
+ -1097950128,
+ -1181491648,
+ 1057319639,
+ 1054717902,
+ 1068243850,
+ 1070458036,
+ 1040614968,
+ 1057712619,
+ 1041891477,
+ 996873130,
+ -1085678190,
+ 1037051098,
+ -1084390041,
+ 1071189356,
+ 1051389434,
+ 1059945562,
+ 1029713604,
+ 1035379758,
+ -1111776196,
+ -1110151337,
+ -1112944775,
+ -1115194531,
+ -1145688998,
+ 1035482170,
+ 1044183193,
+ 1017845127,
+ 1042463653,
+ 1048639746,
+ 1042416746,
+ 1017397020,
+ 1038096860,
+ -1148144850,
+ 1075454425,
+ 1004341604,
+ 1028735898,
+ -1126402637,
+ 1011163096,
+ 1019915794,
+ -1119811465,
+ 1002262144,
+ -1123458796,
+ -1129996781,
+ -1122013011,
+ 1003142064,
+ 1026657395,
+ -1120710166,
+ 1027121863,
+ -1139361140,
+ -1126353011,
+ 1025753249,
+ 1025311809,
+ -1132116858,
+ -1142567888,
+ -1148347472,
+ -1123523318,
+ 1035702878,
+ -1114058388,
+ -1140927010,
+ -1106280552,
+ 1033371368,
+ -1095717737,
+ -1123671827,
+ -1124274879,
+ -1129140638,
+ 1028502112,
+ 1022938241,
+ -1128542878,
+ 1010613179,
+ 1060725547,
+ 1023232113,
+ 1010423983,
+ 1026265552,
+ -1113100489,
+ -1134564466,
+ -1127300113,
+ -1132009810,
+ 1049596084,
+ 1034080175,
+ 1058400369,
+ -1127163186,
+ -1099431986,
+ 1047119197,
+ -1105068035,
+ -1123983835,
+ -1101799513,
+ -1112466792,
+ 1043275617,
+ 1044177748,
+ -1098165892,
+ -1098412394,
+ 1012215367,
+ 1007930070,
+ 1048940544,
+ 1036086205,
+ -1123995260,
+ 1042212524,
+ 1048907853,
+ -1103152485,
+ 1089370340,
+ 1026699487,
+ 1055671923,
+ -1089787522,
+ -1093440024,
+ -1087569724,
+ 1025239388,
+ 1078473007,
+ -1090450901,
+ -1106755259,
+ -1102699953,
+ 1063832016,
+ 1063754515,
+ 1038524079,
+ -1078766962,
+ 1068697821,
+ 1061026109,
+ -1092588602,
+ 1033163390,
+ 1022050802,
+ -1115019936,
+ -1098343325,
+ 1058696575,
+ 1041439457,
+ -1083501436,
+ -1117723542,
+ 1033850029,
+ 1040956104,
+ 1035130155,
+ -1098581350,
+ -1100090268,
+ -1098120736,
+ -1109851470,
+ -1105608959,
+ 1033608343,
+ 1032647664,
+ -1128627588,
+ -1086492775,
+ 1071666056,
+ 1055633947,
+ -1100458192,
+ -1067731643,
+ -1095821801,
+ 1007586139,
+ -1104777445,
+ 1031160515,
+ 1060668869,
+ -1129872890,
+ 1065642984,
+ 1050032203,
+ -1112900738,
+ -1124549289,
+ -1123217122,
+ -1123719173,
+ 1033139985,
+ 1023480135,
+ 1027831889,
+ 1068437169,
+ -1090152050,
+ -1095912478,
+ 1069844952,
+ 1076964924,
+ 1069234215,
+ 1053153550,
+ 1062096591,
+ 1059064214,
+ -1071739536,
+ -1114364263,
+ -1081590277,
+ 1085216321,
+ -1116255690,
+ -1091824161,
+ 1058499361,
+ 1025188955,
+ 1063156907,
+ 1047391398,
+ 1047389155,
+ -1111613033,
+ -1138623972,
+ -1189061440,
+ 1024283229,
+ 1014779455,
+ 1058413314,
+ 1024668701,
+ 1065365917,
+ -1096963820,
+ 1040719493,
+ 1008394816,
+ 941291776,
+ -1102163784,
+ -1113586441,
+ -1126765560,
+ -1114872148,
+ 1032724239,
+ -1123949754,
+ -1120342081,
+ -1114626181,
+ -1084887221,
+ 1036741376,
+ 1007255306,
+ 1066767093,
+ -1091640560,
+ 1048879832,
+ 1068679971,
+ 1051008719,
+ 1056054221,
+ -1122391018,
+ 1083316140,
+ 1067427715,
+ 1049501912,
+ -1088618965,
+ -1107706735,
+ -1083905156,
+ 1045284725,
+ 1061369758,
+ 1059119792,
+ 1064570427,
+ -1097926866,
+ -1073674680,
+ 1067660927,
+ 1079107292,
+ -1066140356,
+ 1085839841,
+ -1074316543,
+ -1089217614,
+ 1075872248,
+ 1054492330,
+ -1111432007,
+ 1070975506,
+ -1075403801,
+ 1064495663,
+ 1060419457,
+ -1076545200,
+ 1060874285,
+ 1048707575,
+ 1029544818,
+ 1057267184,
+ 1037782530,
+ -1086364447,
+ -1053104307,
+ -1127106244,
+ 1084060317,
+ 1022439476,
+ 989609152,
+ 1017066198,
+ -1125145024,
+ -1127703760,
+ -1094469174,
+ -1112926140,
+ 1048678792,
+ -1127970346,
+ -1115109395,
+ 1063853578,
+ -1092313358,
+ -1104283752,
+ -1143055518,
+ -1097246267,
+ -1106961859,
+ -1120988658,
+ -1090123167,
+ 1033044539,
+ 1037713133,
+ -1101324370,
+ -1108799458,
+ -1112827804,
+ -1118816563,
+ 1064140640,
+ -1106828742,
+ -1082471461,
+ 1042876664,
+ 1039561414,
+ 1092654239,
+ 1061889611,
+ -1107273254,
+ 1018112462,
+ 1036017542,
+ -1053121651,
+ 1034501448,
+ -1150367220,
+ -1083779609,
+ 1042197168,
+ 1032940413,
+ 1016256333,
+ -1087799928,
+ 1034636268,
+ -1089757166,
+ -1118686450,
+ -1077897279,
+ -1081460274,
+ -1130388019,
+ -1112999843,
+ 1062029009,
+ 1061616629,
+ 1022167120,
+ -1122548007,
+ -1111441711,
+ -1101611621,
+ 1032173396,
+ -1088586271,
+ -1114868480,
+ -1093738795,
+ 1056345318,
+ 1038862738,
+ 1042289595,
+ -1118250294,
+ -1103467253,
+ 1025694397,
+ 1029797752,
+ -1098202518,
+ 1067540857,
+ 1034586028,
+ -1108401285,
+ 1051037688,
+ -1153727288,
+ 1048156866,
+ 1051117949,
+ -1125389590,
+ -1110370626,
+ 1039080686,
+ -1086814014,
+ -1104973801,
+ 1030890222,
+ 1038791401,
+ -1096879288,
+ 954808192,
+ -1091807427,
+ 1047357388,
+ -1101502900,
+ -1055621002,
+ -1093887384,
+ -1128269778,
+ 1061258439,
+ 1061504127,
+ -1106249573,
+ -1098893537,
+ 1015050648,
+ -1097688475,
+ 1067006435,
+ -1098482597,
+ -1081758707,
+ 1063982329,
+ 1054205060,
+ -1100893539,
+ -1071578205,
+ 1055905306,
+ -1079709095,
+ -1076194686,
+ 1044879912,
+ -1074595880,
+ 1042929878,
+ -1099658044,
+ 1061211727,
+ 1056388658,
+ -1152657679,
+ -1120561002,
+ -1098227599,
+ -1098272650,
+ -1078323290,
+ 1032971226,
+ -1089677392,
+ -1105506372,
+ -1121781756,
+ 1047391948,
+ -1055240080,
+ 1003412848,
+ 1035833832,
+ 1054314870,
+ -1082257396,
+ -1067718493,
+ -1103818090,
+ -1112627982,
+ 1080186471,
+ 1062439556,
+ 1026146332,
+ 1049093237,
+ 1088204726,
+ -1092341663,
+ -1098456055,
+ -1148594911,
+ -1078666696,
+ -1098653957,
+ -1098586798,
+ -1105733192,
+ -1046097944,
+ -1108378088,
+ -1095390121,
+ 1057204768,
+ -1113330806,
+ -1074605496,
+ -1101093867,
+ 1043781781,
+ 1067108097,
+ 1062508503,
+ -1064505704,
+ -1087170847,
+ 1096964638,
+ -1088371415,
+ -1098435709,
+ 1033541419,
+ -1099805808,
+ -1107483636,
+ 1049158481,
+ -1116577042,
+ -1104928424,
+ -1116326696,
+ -1098239444,
+ 1042477236,
+ -1148790480,
+ -1098755778,
+ -1094992264,
+ 1040057688,
+ 1053130357,
+ 1050971016,
+ -1106098134,
+ -1083876968,
+ 1031900248,
+ -1103520174,
+ 1038711608,
+ -1100924600,
+ -1108904850,
+ 1078713854,
+ 1050444655,
+ 1071333022,
+ -1085112574,
+ 1018596324,
+ 1030349732,
+ -1101655842,
+ -1074078890,
+ -1113738218,
+ 1044695671,
+ -1127891352,
+ 1049283376,
+ 1040311657,
+ 1015275615,
+ 1044904931,
+ -1137142484,
+ -1087703920,
+ -1079022386,
+ 1065559052,
+ 1085144133,
+ -1060952690,
+ -1067294846,
+ -1072207705,
+ 1074947839,
+ -1071728660,
+ 1081496020,
+ 1083501184,
+ -1071725027,
+ 1073209959,
+ 1087116105,
+ -1073583691,
+ 1082654230,
+ 1077871273,
+ -1083433007,
+ -1071002250,
+ 1097555253,
+ 1067904877,
+ -1073497745,
+ 1084156302,
+ 1066568511,
+ -1124724697,
+ -1088995175,
+ 1009941114,
+ 1040575721,
+ -1107944044,
+ -1112731713,
+ 1041625836,
+ -1135683889,
+ 1069637422,
+ 1016421618,
+ -1111718551,
+ -1106212688,
+ -1088301223,
+ -1098080176,
+ 1044130421,
+ 1043258136,
+ -1111375787,
+ -1060145853,
+ 1076085295,
+ 1067508619,
+ -1111691368,
+ -1064587125,
+ -1117434350,
+ 1046349103,
+ -1116825988,
+ -1116314431,
+ -1131050203,
+ -1173325504,
+ 1063826676,
+ 1015706191,
+ -1096722756,
+ -1102973541,
+ -1097605564,
+ -1122775641,
+ -1141874679,
+ -1138787618,
+ -1107110775,
+ -1081249742,
+ 1092999827,
+ 1069496896,
+ -1092956545,
+ -1094393010,
+ -1108801143,
+ 1057732655,
+ -1112727767,
+ -1101766945,
+ 1046525526,
+ -1119775326,
+ 1062537567,
+ 1014696856,
+ -1107982092,
+ -1109346028,
+ -1078220807,
+ -1127889738,
+ 1048583950,
+ 1046974108,
+ -1102223436,
+ -1076971169,
+ 1067111829,
+ 1077021861,
+ -1106768011,
+ -1085716262,
+ 1040676378,
+ 1090287988,
+ 1034310097,
+ -1080353111,
+ -1105105728,
+ 1070827244,
+ 1074698027,
+ -1115826258,
+ 1020482726,
+ -1114869375,
+ -1080039761,
+ 1049420800,
+ -1087453501,
+ -1098305355,
+ -1103533518,
+ -1074628380,
+ 1079432278,
+ 1084218902,
+ -1109672758,
+ -1094337205,
+ -1126413192,
+ 1076177944,
+ 1056044669,
+ -1079240771,
+ 1047862569,
+ 1053744602,
+ 1064575772,
+ 1021461806,
+ -1094128634,
+ 1025164030,
+ -1079218891,
+ 1055657242,
+ -1101369629,
+ -1093353650,
+ -1111705638,
+ -1128145472,
+ -1137250176,
+ 1019937326,
+ 1000111744,
+ -1143076456,
+ -1131195756,
+ -1139991528,
+ 1024378001,
+ -1134660264,
+ -1141602096,
+ -1135507416,
+ -1126676013,
+ -1119829805,
+ -1169554240,
+ 1024450801,
+ 1023621303,
+ 1022883066,
+ -1128009075,
+ -1170426240,
+ -1132665292,
+ -1112533934,
+ -1086527521,
+ 1047526444,
+ -1109108328,
+ -1088626627,
+ 1044716888,
+ 1042539478,
+ 1048259999,
+ 1048879571,
+ -1103962017,
+ 1047312143,
+ 1047412994,
+ -1092571556,
+ 1073710677,
+ -1092457413,
+ -1061185604,
+ 1110986393,
+ -1153033472,
+ 1071919540,
+ 1057757671,
+ 1062702233,
+ -1092269532,
+ -1113817593,
+ 1069300936,
+ 1037085384,
+ -1068603892,
+ -1091011058,
+ 1071304330,
+ -1109541750,
+ -1082016029,
+ -1103324610,
+ -1114364756,
+ 1068343444,
+ -1100263541,
+ -1099988897,
+ 1074943545,
+ 1018757866,
+ 1045203594,
+ -1106521275,
+ 1022305126,
+ 1012325600,
+ -1102220535,
+ -1101855042,
+ 991739120,
+ 1051674020,
+ -1099547477,
+ -1102256887,
+ -1128380454,
+ 1053646696,
+ 1029659006,
+ -1100287537,
+ -1101680491,
+ 1036475144,
+ 1038245264,
+ 1054412075,
+ 1036761096,
+ -1105931674,
+ -1115756566,
+ 1020637679,
+ -1096798452,
+ -1124183847,
+ -1113699971,
+ -1101947741,
+ 1024460414,
+ 1046074389,
+ 1031982101,
+ -1106329366,
+ -1123877593,
+ -1110687236,
+ 1015550489,
+ -1129002228,
+ -1102774656,
+ 1029337312,
+ 1038358661,
+ 1048682931,
+ 1083596602,
+ -1100180031,
+ -1097624759,
+ 1023093199,
+ -1103346971,
+ 1016286259,
+ -1081755598,
+ -1065040396,
+ -1103175742,
+ 1074328674,
+ 1064300945,
+ -1076613881,
+ 1066638055,
+ -1098024316,
+ 1058997433,
+ -1072700177,
+ -1090886027,
+ -1078109023,
+ -1104578605,
+ 1039109280,
+ -1088791302,
+ -1116697248,
+ 1083141792,
+ 1065554509,
+ 1061833734,
+ -1089097794,
+ -1111745699,
+ -1076260754,
+ 1071466765,
+ 1032168637,
+ 1050078938,
+ -1076401012,
+ -1093235609,
+ 1054720234,
+ 1054022435,
+ -1079052506,
+ -1077406095,
+ -1110979491,
+ -1108827709,
+ -1088300442,
+ 1066974396,
+ -1106856888,
+ 1066103170,
+ -1080849546,
+ -1091860549,
+ 1074276619,
+ 1060120849,
+ -1093159275,
+ 1058443125,
+ 1052812953,
+ -1087312837,
+ -1123018315,
+ -1074833496,
+ 1050835132,
+ -1056049490,
+ 1069794163,
+ 1057896888,
+ -1085721579,
+ -1096480758,
+ 1063457785,
+ 1060181960,
+ -1107262610,
+ -1108171862,
+ -1100751638,
+ 1079422871,
+ -1121881616,
+ 1015932802,
+ 1024437273,
+ 1023649273,
+ -1138251956,
+ -1124369094,
+ -1138196520,
+ 1024804169,
+ -1124672006,
+ 1001400472,
+ 1023470897,
+ -1129768365,
+ -1128296998,
+ -1155497312,
+ 1020973314,
+ -1122695827,
+ 1004203624,
+ 1011138304,
+ 992872448,
+ 1025950385,
+ -1124387808,
+ -1121101219,
+ -1134101800,
+ 1027086385,
+ -1121641760,
+ -1127134041,
+ -1121530496,
+ 1015289338,
+ -1138171148,
+ -1150036272,
+ 1019474842,
+ -1121223920,
+ -1131136268,
+ -1119516208,
+ 1011518872,
+ -1128380864,
+ -1138555596,
+ 1027287959,
+ -1138775832,
+ -1120532845,
+ -1076776426,
+ -1068753966,
+ 1026851696,
+ 1065114679,
+ -1080209479,
+ 1073303520,
+ -1078607455,
+ -1063734957,
+ 1068468651,
+ 1061997649,
+ 1040377631,
+ 1049338907,
+ -1065173173,
+ 1100487291,
+ 1049546709,
+ -1081642857,
+ 1096760986,
+ -1058217861,
+ -1051548473,
+ 1062059416,
+ -1086136706,
+ 1040518680,
+ -1085777355,
+ 1048517798,
+ -1093253849,
+ -1060007016,
+ -1078404789,
+ 1032403177,
+ -1129424934,
+ -1072873590,
+ -1089332334,
+ 1041319054,
+ -1080345393,
+ -1105101776,
+ -1081734509,
+ 1089543724,
+ 1021458090,
+ 1050480135,
+ 1033433398,
+ 1077335149,
+ 1091282827,
+ 1076395028,
+ 1051979199,
+ 1066791605,
+ 1082620490,
+ -1097001291,
+ -1076237500,
+ 1059574381,
+ -1081506209,
+ 1074376860,
+ -1092724497,
+ 1040290837,
+ -1100521243,
+ 1039059487,
+ 1038136838,
+ 1022379574,
+ 1054658544,
+ 1038009073,
+ -1142504948,
+ -1109625903,
+ 1048893970,
+ -1096453981,
+ 1068696444,
+ -1097253680,
+ 1040145799,
+ -1056876617,
+ 1043214598,
+ -1088736510,
+ -1122278838,
+ -1076133629,
+ 1055886200,
+ 1045809780,
+ -1077394358,
+ -1111363940,
+ 1000133972,
+ -1096634430,
+ -1113128519,
+ -1160693530,
+ 1033688319,
+ 1067677940,
+ 1059590666,
+ 1038824812,
+ 1064071232,
+ -1097426716,
+ 1063003534,
+ 1076407941,
+ 1053592567,
+ -1106751777,
+ 1010786314,
+ -1077799804,
+ 1055164930,
+ -1115283956,
+ 1058733906,
+ 1047232938,
+ -1114179656,
+ -1077565612,
+ -1090507647,
+ 1048809787,
+ -1105733237,
+ -1056002724,
+ -1074700939,
+ -1069086205,
+ -1120465447,
+ -1085016100,
+ -1066471054,
+ -1119333921,
+ -1075266836,
+ 1036083725,
+ 1059121875,
+ 1090621000,
+ 1070569148,
+ -1121371819,
+ 1037912940,
+ -1115350445,
+ -1091334697,
+ -1104314364,
+ -1099629801,
+ 1043010753,
+ 971378272,
+ 1037393575,
+ -1099178262,
+ -1085307143,
+ -1098740425,
+ -1114024627,
+ -1093408855,
+ 1053903662,
+ 1045881997,
+ 1050547290,
+ 1051150264,
+ 1087093160,
+ -1092317649,
+ -1114780283,
+ -1109942498,
+ 1063883153,
+ -1093981679,
+ 1061453742,
+ -1119215386,
+ 1033617209,
+ -1122702860,
+ -1077901206,
+ 1078907062,
+ -1091533790,
+ 1082462597,
+ -1119237959,
+ 1067954962,
+ 1059521332,
+ -1089167110,
+ -1100254913,
+ 1027895023,
+ 1059327438,
+ 1069822859,
+ 1054593222,
+ 1073517215,
+ -1097665655,
+ 1027578567,
+ -1104444091,
+ 1054046107,
+ -1098873808,
+ 1033663584,
+ 1052243907,
+ 1053724008,
+ 1042615881,
+ -1102134389,
+ -1061805344,
+ -1090111569,
+ -1090059625,
+ -1071574022,
+ 1048895109,
+ 1098860204,
+ 1026038242,
+ -1107378525,
+ 1046704944,
+ 1059737890,
+ -1094719456,
+ -1094714899,
+ 990635502,
+ -1148308832,
+ -1084709027,
+ -1148318652,
+ -1093689192,
+ -1072322695,
+ -1073689554,
+ -1077038663,
+ -1153407730,
+ -1077374934,
+ 1072484038,
+ 1015979614,
+ 1067497822,
+ 977676612,
+ 1030661302,
+ -1072754113,
+ -1114653553,
+ 1047724224,
+ 1079709926,
+ -1059472659,
+ 1085157999,
+ -1102656622,
+ -1109219002,
+ -1098622132,
+ -1084284216,
+ -1093090461,
+ -1073795745,
+ -1070941955,
+ 1058202501,
+ -1101511318,
+ 1025725599,
+ -1097732654,
+ -1090049044,
+ -1098329293,
+ 1045850289,
+ -1083353312,
+ 1054784523,
+ -1090395494,
+ -1086629132,
+ -1096498434,
+ -1078439126,
+ -1108646662,
+ -1097536532,
+ 1061418855,
+ -1088869168,
+ 1052494574,
+ 1050905542,
+ 1064926876,
+ 1066027486,
+ 1058505378,
+ -1095240532,
+ 1076675252,
+ -1098516335,
+ -1101534988,
+ -1089472515,
+ -1092425426,
+ 1052374562,
+ 1059051189,
+ 1040343600,
+ 1050100637,
+ -1127812846,
+ -1126641701,
+ 1044779806,
+ 1033012230,
+ -1094455025,
+ 1073758049,
+ -1108511542,
+ 1046297209,
+ -1077671683,
+ 1061967884,
+ -1094073263,
+ 1069708962,
+ -1099794981,
+ 1015307400,
+ -1070713193,
+ 1060278500,
+ 1054640671,
+ 1074365598,
+ 1056973122,
+ -1087137620,
+ 1061218125,
+ -1112099491,
+ -1090074255,
+ 1042323645,
+ 1063044205,
+ -1079729458,
+ 1068166951,
+ -1082722785,
+ 1037286701,
+ -1095469714,
+ -1089085075,
+ -1092322099,
+ -1135905427,
+ -1121133484,
+ -1062983146,
+ -1102584076,
+ -1088303303,
+ -1079129930,
+ 1062430659,
+ -1108380969,
+ 1074071065,
+ -1117711325,
+ -1114490322,
+ -1115671090,
+ 1084443497,
+ -1117290878,
+ -1097206300,
+ 1023561118,
+ 1078864276,
+ 1063126254,
+ -1104170232,
+ 1065233243,
+ -1098881707,
+ -1051568408,
+ -1064594130,
+ 1024756962,
+ -1105146706,
+ -1104830217,
+ 1031357873,
+ 1059900624,
+ -1171702904,
+ 1018772535,
+ -1123132580,
+ 1000544924,
+ 1071666943,
+ 1070723112,
+ 1064704878,
+ 1065620813,
+ 1021277512,
+ 1056772379,
+ -1092338561,
+ -1157300745,
+ 1050088271,
+ -1154330639,
+ -1069435959,
+ -1095936875,
+ 1046671098,
+ -1103997422,
+ -1078224444,
+ 1077312986,
+ -1088381096,
+ 1024297364,
+ -1123275351,
+ 1062952217,
+ 1057257953,
+ -1091150401,
+ -1098399414,
+ 1034851227,
+ -1104820405,
+ -1087699720,
+ 1072895709,
+ 1059632617,
+ 1043960173,
+ -1103135882,
+ -1074139329,
+ 1070509289,
+ -1079356492,
+ 1057810633,
+ 1045311499,
+ 1050991234,
+ -1090981273,
+ 1040796924,
+ -1098431776,
+ 1058552284,
+ -1083694266,
+ -1067754836,
+ -1094437603,
+ -1071281374,
+ 1021402473,
+ -1062773640,
+ 1046837090,
+ 1075111427,
+ -1105915356,
+ 1070292934,
+ -1072063591,
+ 1056306312,
+ -1118197038,
+ -1117068570,
+ 1010488035,
+ 1044472756,
+ 1015444060,
+ -1154727720,
+ -1081374536,
+ 1028434840,
+ 1040801757,
+ -1084320543,
+ 1040704751,
+ -1129618454,
+ 1041004351,
+ -1100568983,
+ 1074038985,
+ -1083427883,
+ 1066419516,
+ -1118155596,
+ -1086846822,
+ -1098255205,
+ -1103549152,
+ -1073043011,
+ 1041896915,
+ 1068307934,
+ -1097206540,
+ -1127599814,
+ 1051315501,
+ -1121266909,
+ 1062879850,
+ -1101842630,
+ 1057008995,
+ 1091809875,
+ -1149263750,
+ 1059868316,
+ -1107284171,
+ -1080686633,
+ -1113828551,
+ -1131445952,
+ -1100201821,
+ 1029205967,
+ -1086886287,
+ 1075992600,
+ -1126726129,
+ 1060227641,
+ -1079298818,
+ 1047808643,
+ -1131444958,
+ 1043469769,
+ -1079146261,
+ -1100769695,
+ -1077804106,
+ -1128625084,
+ -1083388174,
+ -1104340366,
+ -1107882837,
+ -1080621265,
+ 1014317111,
+ 1071451071,
+ 1064934547,
+ 1079519851,
+ -1154353504,
+ -1129394350,
+ -1104715888,
+ -1114911465,
+ 1034260087,
+ 1008961006,
+ -1113007949,
+ 1015530374,
+ -1106087356,
+ -1095473111,
+ -1100625038,
+ 1062766837,
+ 1044344680,
+ -1096999290,
+ -1096848110,
+ 1008793418,
+ 1059152310,
+ -1101269349,
+ 1024538726,
+ -1071590200,
+ -1114352740,
+ -1105563066,
+ 1075977560,
+ -1075258869,
+ 1047205877,
+ -1098514488,
+ -1087817427,
+ 1039796765,
+ -1070784382,
+ -1097794867,
+ -1121016782,
+ 1033923239,
+ 1046732145,
+ 1051246769,
+ -1093594985,
+ -1061707311,
+ 1026580312,
+ -1099058477,
+ 1050414886,
+ -1088292784,
+ 1050290886,
+ -1161120474,
+ -1097284228,
+ -1075941822,
+ 1053430800,
+ 1056617490,
+ -1091051392,
+ -1095239226,
+ 1037420212,
+ -1091973708,
+ 1049884815,
+ 1076399682,
+ -1092239797,
+ 1062492627,
+ -1119415806,
+ -1076790480,
+ -1077768220,
+ 1041180590,
+ -1085341219,
+ 1052879692,
+ 1027073606,
+ -1134392080,
+ 1012212229,
+ 1053716919,
+ -1092846515,
+ 1088322020,
+ -1121061061,
+ -1127040596,
+ 1036851237,
+ -1140484760,
+ -1145466706,
+ -1113969314,
+ -1138660126,
+ 1050242309,
+ 1059738181,
+ 1061053936,
+ -1121844915,
+ -1100135503,
+ -1084563141,
+ -1088572316,
+ 1070991745,
+ -1081069809,
+ 1059262048,
+ -1081092185,
+ -1109144600,
+ 1054577935,
+ -1097612367,
+ 1046307637,
+ 1068434021,
+ -1096740521,
+ 1054376638,
+ 1043628404,
+ 1056156729,
+ -1082893113,
+ 1038998114,
+ -1089532167,
+ 1046374850,
+ 1046461574,
+ 1054381293,
+ 1041706699,
+ 1055751373,
+ 1048109313,
+ -1113706021,
+ 1055089251,
+ 1058975944,
+ 1060411139,
+ -1098101305,
+ 1057224589,
+ -1098617074,
+ 1041497031,
+ -1093135092,
+ 1053450854,
+ 1057185560,
+ 1040351569,
+ -1084262175,
+ -1087457692,
+ -1098498016,
+ -1082954296,
+ 1048546609,
+ -1097178355,
+ 1058135845,
+ 1031319413,
+ 1028105489,
+ 1043481292,
+ 1040778335,
+ -1084916966,
+ -1117060762,
+ 1032139362,
+ -1115470770,
+ -1078724949,
+ 1008676346,
+ 1018881076,
+ -1125682945,
+ 1015806373,
+ -1101024228,
+ -1083638368,
+ -1045289442,
+ -1088504827,
+ 1026365336,
+ -1106782586,
+ 1057680568,
+ -1095839471,
+ 1027066426,
+ -1073369157,
+ 1048448330,
+ -1121125182,
+ 1071415891,
+ 1033725375,
+ -1096163570,
+ 1039113747,
+ 1050002785,
+ 1050127420,
+ -1109369387,
+ 1063207871,
+ 1089629881,
+ 1077267315,
+ -1122315187,
+ -1101141546,
+ 1073150160,
+ -1114194069,
+ 1057023309,
+ -1083036334,
+ 1048120523,
+ 1051324008,
+ -1086124011,
+ 1044901208,
+ 1028643402,
+ 1057771195,
+ -1077537136,
+ -1067515826,
+ -1090391875,
+ 1067192534,
+ 1053591075,
+ -1079119892,
+ 1044348474,
+ -1099108936,
+ 1046240307,
+ 1041580459,
+ -1083931162,
+ 1067508686,
+ 1009776564,
+ -1090791293,
+ -1113258072,
+ -1098094610,
+ -1079366779,
+ -1091388148,
+ 1027430106,
+ 1029099611,
+ 1057283699,
+ -1116803848,
+ -1089652788,
+ -1087501660,
+ 1067569729,
+ -1090225994,
+ 1067902306,
+ -1091976765,
+ 1059825700,
+ -1102239545,
+ 1076277626,
+ 1018519046,
+ 1050462204,
+ -1082646321,
+ -1082581762,
+ 1084249376,
+ -1122081336,
+ 1044551611,
+ 1058161868,
+ -1090250472,
+ 1052125678,
+ 1045108238,
+ 1052144620,
+ 1088746634,
+ -1104487169,
+ -1120351132,
+ 1006857664,
+ -1055713214,
+ -1101907647,
+ -1120262183,
+ 1044381356,
+ -1117094210,
+ 1057135799,
+ 1059044940,
+ -1108959260,
+ -1106088394,
+ 1038906467,
+ 1059122238,
+ -1104822378,
+ -1097212085,
+ -1113527346,
+ 1062766339,
+ 1021556280,
+ 1057552876,
+ -1067047199,
+ -1098328508,
+ 1041011120,
+ -1080585365,
+ 1055935500,
+ 1075786681,
+ -1086110507,
+ -1100617028,
+ 1043863011,
+ -1100104093,
+ -1117783390,
+ -1102653272,
+ 1048175719,
+ -1102980766,
+ 1045528553,
+ -1125159663,
+ -1111554832,
+ -1053139493,
+ -1126469851,
+ -1097433686,
+ 1043476480,
+ -1123701348,
+ -1102395573,
+ 1018729848,
+ -1074674582,
+ 1036770914,
+ 1038675777,
+ -1069881148,
+ 1057294326,
+ 1075778891,
+ 1070521707,
+ -1107203853,
+ 1030059080,
+ -1110828397,
+ -1113598695,
+ -1095457363,
+ -1076246276,
+ 1068917466,
+ 1041303307,
+ 1071628147,
+ 1042155002,
+ -1116689521,
+ -1106510147,
+ 1055009129,
+ 1028016012,
+ -1114606752,
+ 1050998911,
+ 1058181755,
+ -1115207801,
+ 1071301130,
+ -1106783182,
+ 1032728185,
+ 1029931124,
+ -1103358071,
+ -1111341440,
+ 1057400672,
+ 1044776135,
+ -1089700281,
+ 1050559516,
+ -1110940155,
+ -1064398182,
+ -1112115732,
+ 1049070416,
+ -1065831907,
+ 1038444223,
+ 1083870666,
+ 1040538907,
+ 1059076100,
+ 1043335408,
+ 1058481306,
+ -1096867324,
+ 986176632,
+ 1039839060,
+ -1122512580,
+ -1104351450,
+ 1019150543,
+ -1100276389,
+ -1080012205,
+ -1066573929,
+ -1080936991,
+ -1113068897,
+ -1074336627,
+ 1076597519,
+ -1094951772,
+ -1089145332,
+ -1088539096,
+ 1057487683,
+ -1080655104,
+ 1029075388,
+ -1097569736,
+ 1076124608,
+ -1065273427,
+ 1073347862,
+ -1102443180,
+ 1045343551,
+ 1027301799,
+ -1123290634,
+ -1079368639,
+ 1067635765,
+ 1058340092,
+ 1047363605,
+ 1065689216,
+ -1064413774,
+ -1082553211,
+ 1001234374,
+ 1010377188,
+ -1094467713,
+ 1033526688,
+ -1076217997,
+ -1080572331,
+ -1139267577,
+ 1040213815,
+ -1082004927,
+ 1045127053,
+ -1066836007,
+ 1050166380,
+ 1078577332,
+ 1071856680,
+ -1097482814,
+ -1094349403,
+ 1040246533,
+ -1089969685,
+ 1045968053,
+ -1120143875,
+ 1053582713,
+ -1107868137,
+ 1053432305,
+ 1065070263,
+ 1032675647,
+ -1145812666,
+ 1034578019,
+ -1092416435,
+ -1084687339,
+ -1098509205,
+ -1104567896,
+ -1138618283,
+ 1044820678,
+ -1097007611,
+ -1113361769,
+ 1038766850,
+ -1093851655,
+ 1043750271,
+ -1064691005,
+ 1044788983,
+ -1080471275,
+ -1096618011,
+ -1073390549,
+ -1087782184,
+ 1071036871,
+ 1055906679,
+ 1058031238,
+ -1084237544,
+ -1136041143,
+ 1058056876,
+ -1130356754,
+ 1049343559,
+ -1094543351,
+ 1067894705,
+ 1073975214,
+ -1105030236,
+ 1067196699,
+ 1041357427,
+ 1056648330,
+ -1074682149,
+ 1056589532,
+ 1050725566,
+ 1058825411,
+ 1057917846,
+ -1083043358,
+ -1078060954,
+ -1089076502,
+ 1072070062,
+ -1087683196,
+ -1111616387,
+ 1072040426,
+ 1035730370,
+ 1088200335,
+ -1090136870,
+ -1086263405,
+ -1076034988,
+ 1067264014,
+ 1049671719,
+ 1040647012,
+ -1076455395,
+ -1093882649,
+ -1077851543,
+ -1074407252,
+ -1078688858,
+ -1129244389,
+ 1052126792,
+ 1027943141,
+ 1058423050,
+ 1061777350,
+ -1084192094,
+ -1128970460,
+ 1022269016,
+ -1119070785,
+ -1087428236,
+ 1026052593,
+ 1051232663,
+ 1054747204,
+ -1110507192,
+ -1096946041,
+ -1076840485,
+ -1125418256,
+ -1088447973,
+ -1072025603,
+ 1073061502,
+ 1077603018,
+ 1046201396,
+ -1090456361,
+ 1050734390,
+ 1062401764,
+ 1025521708,
+ 1051086456,
+ 1061572407,
+ 1055113539,
+ -1069478622,
+ -1111759819,
+ -1061732886,
+ 1047828017,
+ 1050100133,
+ 1055802175,
+ 1061983393,
+ 1028782168,
+ -1097965182,
+ 1051039190,
+ -1075993561,
+ -1089045606,
+ -1092945897,
+ 1059757146,
+ 1024771983,
+ 1028018612,
+ -1106881278,
+ -1119011613,
+ -1079567275,
+ -1106923118,
+ -1105931641,
+ 1009403864,
+ 1036997876,
+ 1065169712,
+ 1050942181,
+ 1041699810,
+ 1067436447,
+ -1128786698,
+ -1078047469,
+ -1121820194,
+ -1087347508,
+ -1106758326,
+ -1137860208,
+ 1058395170,
+ 1028754710,
+ -1118280590,
+ -1120191863,
+ 1062878818,
+ 1024198223,
+ 1044335018,
+ -1109926548,
+ 1069422594,
+ 1028675226,
+ 1033159308,
+ 1051743787,
+ -1101742364,
+ 1061579704,
+ 1034480940,
+ 1061303380,
+ -1086790547,
+ 1067500795,
+ 1045434994,
+ 1009010253,
+ -1080377807,
+ 1078066078,
+ -1105929243,
+ 1061065268,
+ -1156238212,
+ -1093169160,
+ -1119834279,
+ -1082021458,
+ 1044137537,
+ -1069247006,
+ 1050377642,
+ -1094401698,
+ -1088763823,
+ 1062651887,
+ 1040204870,
+ -1097431786,
+ -1098756159,
+ -1083005251,
+ -1092422961,
+ -1066900112,
+ 1063142176,
+ -1107371597,
+ 1068217130,
+ -1095231878,
+ 1040202935,
+ -1112643906,
+ 1051720675,
+ -1095588720,
+ 1026329227,
+ 1042208084,
+ 1049688618,
+ -1104573847,
+ 1070591720,
+ 1031978166,
+ 1051280940,
+ -1081472229,
+ 1028226197,
+ 1050191890,
+ 1028585724,
+ -1089619339,
+ 1038235108,
+ 1033683900,
+ -1105544845,
+ -1131937670,
+ -1148179391,
+ 1007099285,
+ 1029610866,
+ 1067705972,
+ 1018828786,
+ -1088585830,
+ 1014063544,
+ 1068238935,
+ -1045037867,
+ 1042181032,
+ 1054299697,
+ 1009715047,
+ -1121472379,
+ 1041325848,
+ 1044822047,
+ -1132885932,
+ 1050221383,
+ -1126397312,
+ -1074221670,
+ 1057254046,
+ -1090213226,
+ -1085854268,
+ 1049520335,
+ 1059216466,
+ -1061028472,
+ 1069628724,
+ 1042219566,
+ 1038538011,
+ 1031421541,
+ -1048645382,
+ 1042734110,
+ 1050887822,
+ 1034185080,
+ -1100843765,
+ -1082307893,
+ 1062468404,
+ -1061696524,
+ 1057840823,
+ 1052654869,
+ 1087460083,
+ -1101331830,
+ -1096235118,
+ -1073722803,
+ 1058695312,
+ -1080182488,
+ -1097705027,
+ 1063654922,
+ 1046162447,
+ -1080409052,
+ 1059526525,
+ -1095324041,
+ 1033945475,
+ 1071275584,
+ -1086898377,
+ -1081576955,
+ 1048642406,
+ -1113068764,
+ -1132095198,
+ -1141226140,
+ 1052605695,
+ -1105541686,
+ 1043294808,
+ -1131399758,
+ -1085109897,
+ 1045898604,
+ 1051077094,
+ 1032033610,
+ -1088887730,
+ 1075130900,
+ -1098777566,
+ -1071036342,
+ -1092204440,
+ -1097396928,
+ -1111678653,
+ -1090820484,
+ 1010666146,
+ -1089136606,
+ 1051559073,
+ 1058171135,
+ -1071586511,
+ -1068894815,
+ -1139826174,
+ -1118612398,
+ -1077068946,
+ 1064015277,
+ 1057710262,
+ 1063936640,
+ 1043257690,
+ -1103761710,
+ 1061988948,
+ -1085435280,
+ -1115357824,
+ -1093065668,
+ -1095135775,
+ 956354848,
+ -1078569158,
+ -1091280222,
+ -1099335524,
+ -1094296585,
+ -1085990414,
+ -1090267920,
+ -1083193669,
+ 1061923945,
+ 1077792954,
+ -1105050939,
+ 1052237872,
+ -1082548051,
+ 1056690152,
+ 999810075,
+ -1105643876,
+ -1118276077,
+ 1039038464,
+ 1046107474,
+ 1049382776,
+ 1040546156,
+ 1021880058,
+ -1120690762,
+ 1023714491,
+ -1108777472,
+ 999880287,
+ 1009619399,
+ -1108345408,
+ -1106297621,
+ 1031087646,
+ -1095426874,
+ -1094448171,
+ 1038355233,
+ 1027113996,
+ 1067939744,
+ 1061928385,
+ -1080069839,
+ -1099892034,
+ -1085768015,
+ -1116411326,
+ -1085471433,
+ -1098641555,
+ -1118079928,
+ -1097813986,
+ -1105620870,
+ -1101269020,
+ 1095957527,
+ 1061245044,
+ -1079976494,
+ -1086798159,
+ 1069053387,
+ -1066746488,
+ -1131806845,
+ 1009903444,
+ 1049830646,
+ 1061820288,
+ -1134787805,
+ 1037076348,
+ 1049880544,
+ -1101035297,
+ 1061880625,
+ -1064919978,
+ -1103720384,
+ -1096765657,
+ 1091204721,
+ -1088521051,
+ 1017746144,
+ -1102072082,
+ 1056356099,
+ 1034843755,
+ -1113279780,
+ 1022097768,
+ -1095632069,
+ 1040985366,
+ 1064703104,
+ 1055381202,
+ 1023446828,
+ 1048703942,
+ 1070404381,
+ -1097027573,
+ 1049036754,
+ -1097838125,
+ -1108959069,
+ -1111909899,
+ -1101209677,
+ -1062801819,
+ 1026507377,
+ -1137018202,
+ 1034293644,
+ 1045502456,
+ 1053473962,
+ 1034468501,
+ 1035390213,
+ -1130809976,
+ -1088610400,
+ -1154873816,
+ 1068950519,
+ 1041697506,
+ 1035738526,
+ -1102545923,
+ 1012218267,
+ -1122618623,
+ -1113691826,
+ -1114698216,
+ -1121634413,
+ 1048834276,
+ 1098678446,
+ 1008467404,
+ -1086271722,
+ -1111523418,
+ 1016364617,
+ 1085976194,
+ -1104238112,
+ -1105997138,
+ -1088733779,
+ -1055970440,
+ -1129326178,
+ 1044985082,
+ -1095654738,
+ -1116152386,
+ 1057061270,
+ 1072169535,
+ -1102338918,
+ -1124220232,
+ -1120875624,
+ 1025849952,
+ 1026255553,
+ 1052459829,
+ 1046607219,
+ -1099423693,
+ -1129789567,
+ -1111679452,
+ -1094743695,
+ 995818526,
+ -1104411820,
+ -1080769096,
+ 1011007781,
+ 1057706147,
+ -1098383556,
+ -1127609364,
+ -1150658752,
+ 1019632393,
+ -1107883581,
+ -1125081732,
+ 1029805004,
+ 1035917712,
+ -1106979284,
+ 1032451994,
+ -1094124206,
+ -1063374894,
+ -1122981377,
+ -1099332354,
+ -1109008674,
+ -1110615735,
+ 1066899783,
+ -1096257140,
+ -1044340179,
+ -1098303095,
+ 1048084042,
+ -1077999849,
+ -1103162706,
+ 1026704922,
+ 1072506224,
+ -1081555130,
+ 1015513561,
+ -1088250143,
+ -1118395672,
+ 1050442176,
+ 1023069232,
+ 1060769224,
+ -1076890508,
+ 1070265467,
+ 1046410594,
+ -1085646773,
+ 1075697007,
+ 1079198686,
+ 1061452855,
+ 1066173988,
+ 1088242023,
+ 1070134005,
+ -1067676980,
+ -1086036764,
+ 1074886201,
+ 1068425673,
+ 1082485237,
+ 1072576458,
+ 1083870137,
+ 1049015685,
+ 1070949277,
+ -1067660553,
+ 1092721194,
+ -1059520503,
+ 1092514417,
+ -1079772700,
+ -1107017113,
+ 1084749690,
+ 1062031305,
+ -1056374984,
+ 1079974074,
+ -1094485972,
+ 1067608636,
+ 1058415532,
+ 1057432245,
+ -1076367586,
+ -1080041807,
+ 1057178920,
+ 1068385466,
+ -1088569973,
+ 1058323424,
+ 1049483942,
+ 1048866149,
+ 1044147988,
+ 1028301135,
+ 1044761640,
+ -1058091890,
+ -1076203774,
+ -1135995544,
+ 1070877324,
+ -1088227942,
+ -1066435532,
+ -1079153810,
+ 1078456181,
+ -1073755295,
+ 1074434968,
+ 1046387755,
+ -1062717141,
+ 1007282622,
+ -1072018528,
+ -1065260007,
+ 1076735686,
+ 1065952933,
+ 1066889906,
+ -1098014897,
+ 1062690991,
+ 1075566080,
+ -1100106876,
+ -1080664433,
+ -1080229602,
+ 1059659774,
+ 1060198916,
+ 1064126808,
+ -1083532637,
+ -1078289035,
+ 1056327616,
+ -1072812454,
+ -1095700493,
+ -1088872370,
+ -1112605280,
+ -1074306019,
+ 1064189687,
+ 1044450287,
+ -1078006586,
+ 1064863578,
+ 1052451283,
+ 1061708334,
+ -1078766107,
+ -1071599579,
+ 1055632856,
+ 1079971864,
+ 1049538532,
+ 1073080405,
+ -1112554920,
+ -1078873504,
+ 1068928616,
+ 1073990143,
+ -1136324284,
+ -1105801215,
+ 1065738004,
+ -1092356980,
+ 1034584154,
+ -1091392121,
+ -1087854038,
+ 1036345827,
+ -1100948573,
+ -1076402023,
+ 1080028399,
+ -1071652679,
+ 1032075306,
+ 1075774600,
+ -1090754841,
+ -1083136212,
+ -1066530546,
+ 1063397682,
+ 1061684090,
+ 1057582454,
+ 1062621006,
+ 1066029731,
+ 1065327998,
+ -1140734260,
+ -1069785540,
+ 1087488993,
+ -1078775974,
+ 1071329514,
+ -1066454728,
+ -1122838091,
+ -1066503111,
+ 1067587186,
+ -1110228298,
+ 1057456982,
+ 1047849867,
+ -1069699601,
+ -1119970637,
+ -1069909361,
+ 1083026227,
+ -1078661419,
+ 1087116985,
+ -1081995433,
+ 1068482966,
+ -1071633621,
+ 1077565021,
+ 1063480917,
+ -1078385385,
+ -1123784787,
+ 1067339464,
+ -1137501929,
+ 1055736185,
+ -1056006834,
+ 1056925952,
+ 1053501806,
+ -1089422204,
+ -1072853332,
+ -1097378998,
+ 1062234595,
+ 1063119015,
+ -1079522614,
+ -1073303368,
+ 1036838796,
+ -1086443430,
+ 1058493710,
+ -1091492465,
+ 1004585638,
+ 1054761047,
+ 1067294791,
+ 1052181171,
+ -1081668235,
+ -1064919034,
+ -1074251690,
+ 1040257544,
+ 1067211795,
+ 1072643035,
+ 1064204292,
+ 1082355383,
+ 1066871279,
+ -1086005345,
+ -1071276423,
+ 1020403381,
+ -1069129015,
+ 1079627883,
+ -1080805257,
+ 1066111544,
+ 1094234146,
+ -1073535617,
+ -1093818432,
+ 1067258205,
+ -1053648219,
+ 1058248029,
+ 1073864931,
+ 1061557055,
+ 1044755358,
+ 1070828946,
+ 1066992158,
+ -1079468921,
+ -1088982654,
+ -1066736546,
+ -1076109989,
+ 1076079133,
+ -1072528746,
+ -1066256370,
+ -1065424755,
+ -1081443727,
+ -1069553727,
+ -1057799231,
+ 1055027521,
+ -1078408861,
+ -1074661672,
+ -1080238969,
+ -1064900020,
+ 1082448343,
+ -1063429600,
+ 1053707478,
+ -1068308930,
+ 1058091465,
+ 1042635727,
+ 1061312882,
+ 1050709715,
+ 1059671860,
+ -1079884339,
+ 1047057611,
+ 1015214238,
+ -1081551950,
+ 1026967091,
+ -1090516213,
+ -1073435373,
+ 1071315281,
+ -1080390637,
+ -1063713855,
+ -1092349359,
+ 1066207318,
+ 1058143051,
+ 1065206939,
+ -1061793336,
+ 1068270402,
+ 1068942228,
+ 1061601814,
+ 1051590109,
+ 1071208577,
+ 1059230405,
+ 1011247586,
+ 1066564111,
+ -1066681962,
+ 1089904954,
+ 1090797750,
+ -1078502816,
+ -1089109941,
+ 1087245299,
+ 1071011898,
+ -1083862514,
+ -1085952079,
+ -1120592113,
+ 1078394949,
+ 1067621616,
+ 1078725849,
+ 1078711890,
+ 1068321634,
+ 1089700219,
+ 1083939308,
+ 1079614296,
+ -1075534587,
+ 1077892978,
+ -1086458113,
+ 1069940802,
+ 1089371190,
+ -1089849649,
+ -1073570319,
+ -1089828236,
+ -1065013400,
+ 1066862048,
+ 1087172508,
+ 1074767310,
+ 1037029046,
+ 1049405961,
+ -1096953767,
+ -1086248773,
+ -1100884666,
+ 1050136239,
+ -1086065045,
+ -1084417489,
+ 1065290865,
+ 1057368650,
+ -1076437124,
+ -1095636829,
+ 1067167414,
+ 1046512899,
+ -1081539164,
+ 1077573551,
+ 1088587598,
+ 1073668319,
+ -1083877985,
+ 1074046781,
+ -1065212815,
+ -1072191094,
+ -1086997419,
+ -1070280096,
+ 1049401974,
+ -1096873167,
+ 1078160337,
+ 1077650414,
+ 1068670314,
+ 1083491088,
+ 1074727270,
+ -1073595466,
+ 1052723480,
+ -1075840469,
+ 1067755008,
+ 1056289080,
+ -1096368907,
+ 1072926301,
+ 1052450367,
+ -1079551372,
+ 1082714949,
+ 1065201860,
+ 1079540239,
+ -1076849528,
+ 1065546712,
+ -1062071907,
+ 1082190245,
+ 1074189107,
+ -1086031445,
+ -1063908152,
+ -1084877264,
+ 1058058036,
+ -1073859222,
+ -1080823112,
+ 1074492055,
+ -1093730163,
+ 1065763433,
+ -1074777145,
+ 1079121047,
+ 1050344297,
+ 1056736781,
+ 1046691014,
+ 1053380764,
+ -1082824193,
+ -1078281137,
+ -1101209509,
+ -1113534303,
+ 1060815350,
+ 1048917084,
+ 1059383128,
+ 1042810161,
+ 1017514320,
+ 1058373745,
+ 1058423454,
+ 1061180562,
+ -1106764001,
+ 1070706845,
+ 1062247969,
+ 1058454024,
+ -1073210891,
+ -1080035860,
+ -1074130945,
+ -1077977888,
+ -1106608737,
+ -1072431556,
+ 1060607517,
+ 1068413982,
+ 1070629772,
+ 1069390761,
+ 1052186531,
+ 1088756573,
+ 1076618987,
+ 1038897707,
+ 1066517810,
+ 1061355549,
+ 1084281133,
+ -1087946115,
+ 1080721469,
+ 1048334042,
+ -1084853801,
+ 1042956382,
+ 1081943943,
+ 1067722159,
+ 1078074026,
+ -1086066891,
+ 1064529254,
+ 1077476152,
+ -1070487389,
+ -1074125564,
+ -1090165849,
+ -1073724619,
+ -1075864581,
+ -1074876568,
+ -1069553737,
+ -1089292005,
+ -1073247450,
+ -1068433541,
+ -1073513394,
+ 1081535439,
+ -1073952231,
+ -1120384240,
+ 1050672631,
+ 1062327799,
+ -1101301654,
+ -1096587673,
+ 1048023548,
+ -1124692403,
+ -1114672270,
+ 1049347010,
+ -1090928947,
+ -1093135941,
+ -1102243790,
+ 1066152227,
+ -1075899831,
+ -1085954963,
+ -1097002040,
+ 1076391390,
+ -1077074420,
+ -1083248838,
+ -1068308708,
+ -1077045927,
+ -1064200893,
+ -1076418791,
+ -1130928304,
+ -1106701175,
+ 1066966367,
+ 1068808045,
+ 1064285849,
+ -1071617683,
+ -1085648829,
+ -1084839220,
+ 1075722375,
+ -1075227029,
+ -1076991103,
+ -1102181329,
+ -1085974287,
+ 1035460311,
+ -1082523720,
+ -1093507817,
+ -1073595268,
+ -1080825268,
+ -1102814833,
+ -1085742672,
+ 1032057614,
+ 1067219607,
+ -1089083538,
+ 1060693244,
+ 1050523210,
+ 1077647222,
+ 1072456964,
+ 1054645815,
+ 1079389936,
+ -1092051366,
+ 1054911232,
+ 1076067027,
+ 1069801777,
+ 1078401391,
+ 1060509203,
+ 1082231820,
+ -1096079047,
+ -1098850661,
+ 1064794010,
+ 1051778113,
+ 1065813563,
+ 1058029473,
+ -1115980307,
+ 1045719169,
+ 1044645971,
+ -1090183692,
+ -1096822499,
+ 1035143591,
+ 1035006112,
+ -1097619439,
+ 1067966278,
+ 1056179605,
+ -1093978594,
+ -1072194192,
+ -1081911739,
+ 1061662057,
+ -1082024861,
+ -1081977101,
+ 1053596612,
+ -1075015646,
+ -1082676199,
+ -1083216015,
+ -1106107516,
+ -1073262468,
+ -1092849850,
+ 1060319801,
+ -1081000845,
+ 1041199036,
+ 1085067385,
+ 1078261337,
+ 1053149600,
+ 1057519721,
+ -1069121657,
+ 1074268471,
+ 1068732386,
+ 1044705074,
+ 1073226855,
+ 1057487061,
+ 1078268994,
+ -1074206725,
+ -1064109222,
+ -1109697426,
+ -1073607463,
+ -1110606900,
+ -1068950889,
+ 1067798841,
+ 1083148371,
+ 1090043030,
+ 1082712819,
+ -1066377380,
+ 1065160933,
+ -1071649446,
+ -1066790601,
+ -1076750713,
+ 1069838332,
+ -1090798990,
+ -1082330457,
+ -1087823630,
+ -1082095674,
+ 1053932511,
+ 1056386208,
+ 1056247178,
+ 1063377095,
+ 1057877093,
+ 1061943159,
+ -1098767670,
+ -1101586138,
+ -1088127403,
+ -1101447408,
+ -1086247101,
+ -1082609657,
+ 1079084482,
+ -1156771842,
+ -1063995634,
+ 1062377902,
+ -1092234759,
+ 1068867059,
+ 1071134455,
+ -1081828114,
+ -1059919627,
+ -1091579351,
+ 1068206302,
+ 1041297160,
+ -1079063981,
+ -1089664143,
+ 1078436659,
+ 1065229015,
+ -1066237902,
+ -1072980041,
+ -1069084095,
+ -1094043570,
+ -1095657875,
+ -1072810624,
+ -1067622880,
+ 1071148506,
+ 1024574881,
+ 1083968244,
+ 1075350777,
+ -1071641477,
+ -1087684948,
+ 1075604126,
+ -1081747451,
+ -1082508160,
+ 1084405195,
+ -1090794481,
+ 1076030367,
+ -1107129634,
+ -1070835138,
+ -1090195048,
+ 1093829923,
+ 1050743684,
+ -1098514348,
+ -1077892275,
+ -1069653917,
+ -1084383914,
+ -1072478409,
+ -1080609272,
+ -1093473989,
+ 1061433177,
+ -1104327244,
+ 1060752161,
+ 1044341335,
+ 1061756987,
+ -1094945053,
+ -1093661988,
+ -1082714903,
+ -1132324365,
+ -1087039621,
+ -1114721102,
+ 1049199931,
+ 1028119668,
+ -1104740833,
+ -1081777963,
+ -1064257866,
+ -1080928043,
+ 1051246013,
+ -1081179341,
+ -1070688243,
+ -1091799259,
+ -1068287038,
+ 1073778343,
+ 1049610191,
+ -1085743075,
+ -1074440777,
+ 1033613920,
+ 1074905071,
+ 1069356513,
+ -1060825784,
+ -1065528538,
+ -1073292391,
+ -1078194132,
+ -1083207957,
+ 1076597497,
+ 1080425058,
+ -1068958909,
+ -1071602404,
+ 1076880835,
+ -1080253683,
+ 1071750553,
+ 1081665376,
+ -1058286301,
+ 1091122866,
+ 1084975577,
+ -1062873607,
+ 1086945357,
+ 1072174356,
+ -1076793924,
+ -1065167485,
+ -1056616077,
+ -1064826650,
+ 1098465054,
+ 1093135615,
+ -1115833298,
+ 1082414959,
+ 1057700805,
+ 1099681734,
+ 1091335969,
+ 1032421026,
+ 1083975635,
+ -1090196147,
+ -1074244936,
+ 1062937567,
+ 1071365347,
+ -1075671179,
+ 1067607300,
+ 1074163292,
+ 1066689692,
+ 1072279745,
+ -1103552819,
+ 1051394884,
+ 1059486828,
+ 1075051506,
+ 1093433556,
+ 1090477571,
+ 1070061387,
+ -1063918002,
+ -1075123675,
+ -1058428867,
+ -1105399600,
+ 1075745983,
+ 1085383141,
+ -1070717823,
+ -1096022597,
+ -1081065836,
+ 1076325162,
+ -1084886491,
+ 1066333850,
+ 1064651186,
+ -1087383458,
+ 1076837229,
+ 1071466165,
+ 1037509557,
+ -1055020035,
+ -1103352108,
+ -1079764188,
+ 1059867377,
+ 1074764019,
+ 1052033771,
+ -1103942715,
+ -1129753792,
+ -1103733156,
+ -1066168683,
+ -1079407006,
+ -1072929154,
+ -1114038066,
+ 1069355646,
+ 1061380628,
+ 1092428593,
+ -1062931900,
+ 1077016981,
+ 1067954562,
+ -1066022515,
+ -1069296532,
+ -1065165532,
+ 1066418199,
+ -1083198990,
+ -1062138642,
+ 1039412213,
+ 1054566951,
+ 1058544442,
+ -1080854214,
+ 1062828221,
+ 1060381878,
+ 1051383759,
+ 1025557752,
+ 1061767893,
+ 1053472396,
+ -1087318098,
+ 1024213391,
+ -1091642702,
+ -1073703032,
+ 1064901599,
+ 1060707749,
+ 1067576020,
+ 1066122966,
+ 1029035677,
+ 1066514439,
+ 1078659184,
+ -1079360755,
+ 1077760563,
+ -1070782406,
+ 1077384140,
+ 1048153590,
+ 1065142806,
+ 1048963740,
+ -1090009560,
+ 1074584296,
+ 1081014261,
+ 1084532795,
+ -1081591304,
+ 1068270282,
+ -1068869299,
+ -1060313283,
+ -1063790161,
+ 1077732317,
+ -1084811134,
+ 1050196203,
+ 1081176258,
+ -1068945659,
+ 1076327026,
+ -1071702377,
+ -1079793990,
+ -1065706719,
+ 1097143985,
+ 1075234409,
+ -1087303414,
+ 1029635393,
+ -1071688807,
+ 1067167436,
+ -1058232174,
+ 1085130710,
+ 1084606446,
+ 1075080696,
+ 1050187012,
+ -1072261402,
+ 1040776284,
+ 1075217674,
+ -1075838278,
+ -1080468608,
+ -1103938421,
+ -1085653733,
+ 1045705385,
+ 1054455484,
+ 1066391003,
+ -1068948732,
+ 1043419423,
+ 1058142933,
+ 1050026934,
+ -1154467788,
+ 1024860803,
+ -1079309845,
+ -1105733590,
+ 1073903750,
+ -1049934934,
+ -1060697818,
+ -1073837240,
+ 1088521027,
+ -1072911598,
+ -1063644368,
+ -1102921206,
+ -1065114610,
+ -1073519502,
+ -1063622734,
+ 1056728416,
+ 1060395380,
+ -1080796350,
+ -1067806445,
+ -1090424350,
+ -1077196829,
+ -1083465245,
+ -1074737753,
+ -1097841212,
+ 1083934404,
+ -1117691169,
+ -1072291745,
+ 1034484760,
+ 1059835874,
+ -1072968093,
+ -1080434766,
+ 1050066111,
+ -1068215254,
+ 1065926750,
+ 1082869813,
+ -1070256691,
+ 1068535412,
+ 1079717196,
+ 1065384790,
+ 1025102881,
+ 1075840818,
+ 1068631687,
+ 1049592193,
+ 1087658718,
+ -1086232391,
+ -1078522365,
+ -1084149956,
+ 1083481034,
+ 1083887146,
+ -1126231393,
+ 1060129811,
+ 1022413845,
+ 1058066590,
+ 1066025573,
+ -1090433445,
+ 1061882544,
+ -1099326408,
+ -1089712089,
+ 1036884381,
+ -1109770950,
+ 1047747587,
+ 1049510393,
+ -1090009773,
+ 1060216121,
+ 1063294688,
+ -1075826194,
+ 1035702705,
+ 1060187339,
+ 1049833865,
+ 1076620654,
+ 1043803001,
+ -1061847505,
+ -1106825593,
+ 1067836940,
+ 1068895148,
+ -1072903669,
+ -1095328821,
+ -1097327901,
+ -1087735790,
+ -1080335941,
+ -1062360779,
+ 1077035501,
+ 1058794348,
+ 1075165510,
+ -1067363599,
+ -1076075856,
+ -1069900917,
+ 1054628224,
+ -1061574712,
+ -1069842450,
+ 1080343508,
+ 1074273897,
+ -1096184976,
+ -1062963380,
+ 1067636789,
+ 1083427123,
+ 1079395460,
+ 1078842257,
+ -1054195161,
+ -1043905372,
+ 1065813592,
+ -1110516617,
+ -1068339006,
+ -1057021894,
+ -1074807624,
+ 1078071715,
+ 1051158311,
+ 1076472727,
+ -1084578836,
+ 1063117850,
+ 1011834892,
+ -1109628788,
+ 1026753026,
+ -1082826487,
+ -1094438531,
+ 1069653113,
+ 1054869206,
+ -1077900087,
+ -1106426291,
+ -1080065472,
+ -1115986311,
+ -1117245279,
+ 1058594291,
+ -1078749506,
+ -1090329222,
+ -1062993043,
+ 1068819668,
+ 1056825712,
+ 1075388354,
+ 1084966478,
+ 1075208338,
+ -1056993281,
+ -1064707401,
+ 1091669216,
+ 1066544150,
+ -1062604491,
+ -1085631322,
+ 1075907951,
+ 1074212097,
+ 1074777345,
+ -1085491900,
+ 1083112976,
+ -1097060002,
+ -1117180055,
+ 1086746883,
+ -1092656792,
+ -1077119376,
+ -1079890267,
+ -1089081131,
+ 1065398088,
+ 1077826452,
+ -1156959612,
+ -1077475540,
+ -1080563435,
+ -1069433148,
+ 1030480392,
+ -1080872613,
+ -1072689895,
+ -1071598955,
+ -1064668279,
+ -1067102783,
+ -1071890249,
+ -1066278250,
+ -1071501388,
+ -1090069096,
+ -1066727137,
+ -1077423863,
+ -1087047673,
+ -1075249091,
+ 1057286366,
+ -1094000813,
+ 1064942477,
+ -1090008846,
+ -1081455003,
+ -1100719995,
+ -1089206325,
+ -1089409245,
+ 1050408049,
+ -1131338168,
+ -1095443294,
+ -1088650953,
+ -1081737050,
+ -1093821661,
+ -1106793231,
+ -1146738372,
+ 1054872181,
+ -1094079372,
+ -1083664966,
+ -1084952918,
+ -1068652225,
+ -1074001135,
+ -1074665560,
+ 1071124302,
+ -1078363945,
+ -1073191007,
+ -1077449805,
+ 1060629567,
+ -1109321916,
+ 1062887600,
+ 1012671747,
+ 1080107749,
+ 1059042461,
+ 1075142621,
+ 1046653511,
+ 1074752564,
+ -1073818768,
+ 1053882406,
+ 1095860894,
+ 1057528124,
+ 1065282045,
+ 1064309811,
+ -1103831819,
+ 1035173658,
+ 1049467656,
+ -1101120960,
+ 1070415741,
+ 1045917006,
+ -1143883796,
+ 1076137357,
+ -1094317942,
+ -1080562194,
+ -1080851059,
+ 1036275378,
+ -1118278354,
+ 1031196950,
+ 1075521742,
+ 1079990820,
+ -1088582829,
+ -1097975711,
+ -1098537600,
+ 1058212506,
+ 1056653853,
+ 1051455788,
+ 1020870095,
+ -1112321050,
+ -1092812180,
+ 1050221286,
+ -1110285162,
+ 1005945048,
+ 1009789000,
+ -1098152556,
+ 1052439131,
+ -1106427938,
+ 1033809489,
+ 1025770532,
+ -1073694825,
+ 1034103574,
+ -1076461704,
+ 1046660922,
+ 1055824666,
+ 1037233620,
+ 1017461040,
+ -1092415486,
+ -1113636480,
+ -1101207449,
+ -1098615563,
+ -1078797285,
+ -1098245423,
+ -1097823666,
+ 1036233459,
+ -1069045946,
+ -1088035948,
+ -1083414111,
+ -1100142347,
+ -1098170803,
+ 1061294368,
+ -1113063995,
+ -1055968431,
+ -1079933026,
+ -1095965147,
+ -1088818767,
+ -1131910954,
+ -1088449737,
+ -1123783565,
+ 1034081064,
+ 1067133570,
+ -1096896817,
+ -1111884906,
+ -1073637740,
+ 1061593585,
+ 1054029410,
+ -1098484988,
+ -1100628946,
+ -1096090407,
+ -1116848590,
+ 1032476319,
+ 1040593813,
+ -1069995587,
+ -1130731664,
+ 1035913995,
+ 1070427690,
+ 1044843567,
+ -1095835600,
+ -1140463270,
+ 1042245762,
+ 1063441406,
+ -1129668303,
+ 1065011193,
+ -1083669928,
+ 1016771306,
+ -1082098902,
+ -1104608563,
+ -1065349807,
+ -1117213831,
+ -1110902306,
+ -1067538753,
+ -1118162344,
+ 1061811691,
+ 1027821147,
+ 1008886678,
+ -1111043862,
+ -1105992425,
+ 1067999355,
+ 1079077994,
+ 1059091827,
+ -1079451589,
+ 1069493094,
+ -1079317800,
+ 1062207382,
+ 1029450432,
+ -1083725947,
+ -1060151093,
+ -1062754096,
+ 1039847147,
+ 1043007777,
+ 1082842101,
+ -1125434366,
+ -1077469092,
+ -1098855413,
+ -1088552645,
+ -1076246575,
+ 1038793462,
+ 1043293790,
+ -1108642528,
+ 1016576866,
+ 1052485577,
+ -1096296548,
+ -1111570281,
+ -1088004010,
+ -1085254162,
+ -1089758734,
+ -1106051266,
+ -1096229032,
+ 1032150365,
+ 1023157842,
+ -1082048549,
+ -1086953413,
+ -1055933048,
+ 1026027629,
+ 1066821279,
+ -1074945707,
+ -1073265380,
+ -1098024649,
+ 1037012156,
+ 1042600366,
+ 1065419516,
+ 1008779449,
+ 1021036749,
+ -1112849663,
+ 1016340896,
+ -1069928415,
+ -1098046083,
+ -1072002293,
+ -1139984195,
+ -1105686300,
+ -1067598860,
+ -1070642109,
+ 1073736923,
+ -1112316909,
+ 1036760059,
+ 1040197259,
+ 1026116069,
+ -1099917785,
+ 1032977355,
+ 1029746153,
+ -1080083046,
+ 1051503274,
+ -1056450088,
+ 1026294795,
+ -1148039337,
+ 1073428281,
+ -1104495006,
+ -1069775398,
+ 1083962475,
+ 1070848071,
+ 1040545949,
+ 1058612022,
+ 1094487159,
+ -1106766762,
+ 1035081711,
+ 1066232205,
+ -1114364932,
+ 1068379946,
+ 989396664,
+ 1045754620,
+ -1108751558,
+ 1066714659,
+ 1069587267,
+ -1062621663,
+ 1054676735,
+ -1093548272,
+ -1080219576,
+ -1083588913,
+ 1065769242,
+ 1001109332,
+ 1062369919,
+ -1087924095,
+ 1068683839,
+ -1081431869,
+ -1097563746,
+ 1021963412,
+ -1107786873,
+ 1051424904,
+ 1026688234,
+ 1034486426,
+ 1044381860,
+ 1009521747,
+ -1112206457,
+ 1009276670,
+ 968081504,
+ 1029198196,
+ -1142710885,
+ 1061770066,
+ 1009886522,
+ 1074836474,
+ 1057761818,
+ -1102483745,
+ -1063116380,
+ -1081180032,
+ 1054589221,
+ -1086509063,
+ -1121187228,
+ -1090560198,
+ 1019068286,
+ 1043481168,
+ 1063714784,
+ -1094326873,
+ -1104688272,
+ 1050426253,
+ -1076816211,
+ 1085608691,
+ 1068759274,
+ 1056636285,
+ -1103120040,
+ -1104573482,
+ -1100795974,
+ -1094762187,
+ 1090929037,
+ 1048779756,
+ 1034325665,
+ 1051518193,
+ -1097500483,
+ 1059333620,
+ -1104576273,
+ -1079780843,
+ -1134210166,
+ 1057923645,
+ -1110014136,
+ 1066496837,
+ 1073256528,
+ -1078908274,
+ -1114870975,
+ -1162040136,
+ 1032685434,
+ -1121683732,
+ 1038630784,
+ 1049666220,
+ 1066704815,
+ 1061105999,
+ -1080802693,
+ 1067618337,
+ 1059314098,
+ 1049276887,
+ -1111261961,
+ -1104920288,
+ -1139114953,
+ 1033417269,
+ -1095002069,
+ 1049245152,
+ -1126707995,
+ 1073767974,
+ 1029721952,
+ 1079059266,
+ 1027677416,
+ 1066413678,
+ -1108878514,
+ -1097385058,
+ -1089681908,
+ 1048338378,
+ -1103063756,
+ 1049360922,
+ 1014771189,
+ 1047323930,
+ -1102826136,
+ -1116874530,
+ 1060376646,
+ -1081709552,
+ 1081550965,
+ -1120140906,
+ 1059080831,
+ -1085276407,
+ 1061232029,
+ 1046312594,
+ 1077756255,
+ -1073996415,
+ -1091076001,
+ -1094039904,
+ -1064471634,
+ 1056534629,
+ 1049825347,
+ -1127205501,
+ -1092856071,
+ -1115120081,
+ 1035305972,
+ 1031904125,
+ 1038215337,
+ 1054529105,
+ -1086429520,
+ 1073509161,
+ -1065130149,
+ -1069385164,
+ -1075323512,
+ -1075579681,
+ 1052673161,
+ -1102409588,
+ -1083384773,
+ 1066375463,
+ 1065540281,
+ 1045813188,
+ 1032119451,
+ 1038490380,
+ -1112382085,
+ 1055827782,
+ -1091856215,
+ -1096446360,
+ -1100343966,
+ -1109314859,
+ 1043264181,
+ 995519009,
+ -1116689234,
+ -1100105504,
+ -1090354621,
+ -1116790582,
+ -1146776125,
+ 1086283871,
+ 1074421317,
+ 1031182193,
+ -1074652621,
+ -1094854618,
+ 1072662419,
+ -1087073131,
+ 1041295469,
+ 1045596906,
+ -1085315949,
+ 1046684804,
+ 1052694849,
+ -1087707564,
+ -1102352805,
+ 994333880,
+ -1111019566,
+ -1072882721,
+ -1106972509,
+ -1094310602,
+ -1095848134,
+ -1042810724,
+ -1106742274,
+ -1081779818,
+ 1023224274,
+ -1108999367,
+ -1091045979,
+ -1077612531,
+ 1015928244,
+ 1034184336,
+ -1105495701,
+ -1080955483,
+ 1081020606,
+ -1094116545,
+ -1109317248,
+ 1076726457,
+ -1105922070,
+ 1068191843,
+ -1089857630,
+ -1092191526,
+ -1155659428,
+ 1042803768,
+ -1051195897,
+ 1041403174,
+ -1060767075,
+ -1095004849,
+ 1059151143,
+ -1109499350,
+ -1116944223,
+ 1029753618,
+ 1045720759,
+ -1140282182,
+ 1040708237,
+ 1023454634,
+ -1125250467,
+ -1120476985,
+ 1019525753,
+ -1087354491,
+ -1129880628,
+ -1070706324,
+ 1025075891,
+ -1109223383,
+ -1072082899,
+ -1096118188,
+ 1066278561,
+ 1054006844,
+ 1042263396,
+ 1051582742,
+ 1038243248,
+ -1089385836,
+ 1035322572,
+ 1031266090,
+ -1079780996,
+ -1122251795,
+ -1079018616,
+ 1020096336,
+ 1052388459,
+ 1046453686,
+ -1089257529,
+ -1085441077,
+ -1084887411,
+ -1076939418,
+ 1077231925,
+ -1129445824,
+ -1069833659,
+ -1095584582,
+ -1096264362,
+ 1023724410,
+ -1115327044,
+ -1109153199,
+ -1116264636,
+ -1093051457,
+ 1033325906,
+ -1099305077,
+ -1081564929,
+ 1048347774,
+ 1050394659,
+ -1066254862,
+ -1121440311,
+ -1068906145,
+ 1071818861,
+ -1111273403,
+ 1013667466,
+ -1135806490,
+ 1059755247,
+ -1085609179,
+ -1116573375,
+ -1108497859,
+ 988493944,
+ 1050912899,
+ 1050353061,
+ -1091185954,
+ 1032643522,
+ 1029772696,
+ 999528251,
+ 1054764156,
+ 1033966038,
+ -1113804358,
+ -1100134170,
+ -1118964261,
+ 1025851864,
+ -1100311623,
+ 1064234782,
+ -1078826372,
+ 1016921231,
+ 1040340762,
+ -1088796173,
+ -1095796292,
+ -1098116397,
+ 1058561117,
+ -1102601892,
+ 1039652318,
+ 1066288705,
+ 1041402944,
+ 1049555860,
+ 1023039061,
+ -1095725815,
+ 1063219048,
+ 1069656512,
+ 1044492474,
+ 1058499408,
+ -1088217882,
+ 1058627409,
+ 1050946663,
+ 1063555874,
+ 1052243273,
+ -1100643076,
+ -1103509887,
+ 1047366464,
+ 1067772487,
+ 1046056514,
+ -1093762089,
+ 1057292530,
+ 1046140249,
+ 1052543745,
+ 1054469336,
+ -1087026448,
+ 1047343971,
+ -1140417937,
+ 1069316435,
+ -1113584613,
+ -1115671374,
+ 1063526812,
+ -1127147682,
+ 1042317031,
+ -1104472001,
+ 1044317175,
+ -1114235506,
+ 1051474366,
+ 1033419960,
+ 1043787013,
+ -1118096392,
+ 1016135278,
+ 1037955613,
+ 1009256418,
+ -1128166665,
+ 1025260648,
+ 1042087575,
+ 1040044418,
+ -1110761022,
+ -1125173269,
+ 1049397967,
+ 1041037912,
+ -1074008375,
+ 1060582175,
+ -1102352680,
+ -1102529558,
+ -1109656784,
+ 1014232974,
+ -1125639928,
+ -1138300092,
+ -1101767872,
+ -1063152830,
+ -1092361416,
+ -1103001045,
+ -1093264931,
+ 1081726981,
+ -1066324633,
+ -1098332876,
+ -1135853668,
+ -1068283484,
+ -1105194686,
+ -1098672157,
+ -1188226048,
+ -1054619068,
+ -1096678908,
+ -1099861615,
+ -1094517888,
+ 1047234861,
+ -1072172757,
+ 1034156319,
+ 1058039512,
+ -1132204056,
+ 1057041961,
+ -1096751975,
+ -1060451968,
+ 990663340,
+ 1049117095,
+ -1115760171,
+ 1071298529,
+ 1050407281,
+ -1121965834,
+ 1046742675,
+ 1036877871,
+ 1081353628,
+ 1083166230,
+ 1055905528,
+ 1014478344,
+ -1095434948,
+ -1096807770,
+ 1023642014,
+ 1007652908,
+ 1016467853,
+ 1026167346,
+ 1026241388,
+ 1024716916,
+ 1009263438,
+ -1100923949,
+ 1039141649,
+ 1019141153,
+ -1154600414,
+ -1064077207,
+ 1065349327,
+ 1046062186,
+ 1069652559,
+ -1122512185,
+ -1087962709,
+ 1033480961,
+ 1030707133,
+ -1107290514,
+ -1105306163,
+ 1024956446,
+ 1049043710,
+ -1115090108,
+ 1057313762,
+ 1015132238,
+ -1133792200,
+ -1081350800,
+ -1096556987,
+ -1097780736,
+ 1040922960,
+ -1095385967,
+ 1075399060,
+ -1091198005,
+ -1085657576,
+ 1044250337,
+ -1109058577,
+ -1064320541,
+ 1048463021,
+ 1070971084,
+ -1110908229,
+ -1104680129,
+ 1050274581,
+ -1122573264,
+ -1092161197,
+ 1093847267,
+ -1114441453,
+ 1068325041,
+ -1103613503,
+ -1110892490,
+ -1146855686,
+ -1122903300,
+ -1072201294,
+ -1099858436,
+ -1069581533,
+ -1087365770,
+ 1042354092,
+ -1098268286,
+ -1106246744,
+ 1009353454,
+ 1041888973,
+ 1048127340,
+ -1098805476,
+ 1038778874,
+ -1163874732,
+ -1112861490,
+ 1024964310,
+ -1071211787,
+ 1046254300,
+ -1098106537,
+ 1003869038,
+ -1100386433,
+ -1087496191,
+ 1045620767,
+ 1048618698,
+ 1050155775,
+ 1047541596,
+ 1064033910,
+ 1043537127,
+ 1048748278,
+ -1128558893,
+ 1041141738,
+ -1081933600,
+ 1040923529,
+ -1079218733,
+ 1041633084,
+ 1010016700,
+ -1071576159,
+ -1069950010,
+ -1067574262,
+ -1083816196,
+ -1081791817,
+ 1082224907,
+ -1094194048,
+ -1114960478,
+ 1049145416,
+ -1098874192,
+ -1075864756,
+ 1040548445,
+ 1035261858,
+ -1114809469,
+ -1112931236,
+ 1054464306,
+ 1052392971,
+ -1110465824,
+ -1080137274,
+ 1048408421,
+ -1087479402,
+ -1096974068,
+ -1099899227,
+ 1034048578,
+ 1044292342,
+ 1073314714,
+ -1092732712,
+ -1069482678,
+ -1089285726,
+ 1074082435,
+ -1113138873,
+ -1076132205,
+ 1028849655,
+ 1043743154,
+ -1110058602,
+ 1078495121,
+ -1124196514,
+ -1119391625,
+ 1013678443,
+ 1017365227,
+ -1070519590,
+ -1107832206,
+ -1056149188,
+ -1128750967,
+ -1098454631,
+ -1070463108,
+ -1070962198,
+ -1134525387,
+ 1028241776,
+ -1121256300,
+ 1042193347,
+ -1133776328,
+ -1104309782,
+ -1110887390,
+ -1159278860,
+ -1073882715,
+ 1026697931,
+ -1061244388,
+ 1032620983,
+ -1081911059,
+ 1070028800,
+ 1035633267,
+ 1057520786,
+ -1076168138,
+ -1067928588,
+ -1109174311,
+ -1120851167,
+ 1080456296,
+ -1100756666,
+ 1038265539,
+ 1042352949,
+ -1095571013,
+ 1060653693,
+ 1027077756,
+ -1081454708,
+ -1080541889,
+ -1080706171,
+ 1046273030,
+ -1107330002,
+ 1042637298,
+ -1094761920,
+ -1107452257,
+ 1074640302,
+ 1032463658,
+ 1034718950,
+ -1096594083,
+ 1034814304,
+ -1084109209,
+ -1083306614,
+ 1044347486,
+ -1129979008,
+ 1057083462,
+ -1098167469,
+ 1040678078,
+ -1094886848,
+ -1125769728,
+ -1123450964,
+ 982132520,
+ 1016522622,
+ 1023654486,
+ 1037493617,
+ -1098610920,
+ -1109276867,
+ -1115083031,
+ -1048040293,
+ -1097796845,
+ -1086944358,
+ -1092921713,
+ 1034303516,
+ 1032126697,
+ 987624556,
+ 1013020825,
+ 1043689476,
+ -1100767350,
+ -1102535321,
+ -1100808737,
+ -1109887555,
+ -1132344954,
+ -1100886549,
+ 1047997617,
+ 1082483178,
+ 1040579610,
+ 1060790515,
+ -1086236375,
+ 1065151234,
+ -1076840354,
+ 1072208923,
+ 1101383977,
+ -1088301852,
+ 1041938316,
+ -1088848687,
+ -1090855338,
+ -1081261641,
+ -1093000516,
+ 1041471566,
+ 1040298794,
+ -1088290199,
+ -1095616012,
+ -1097070405,
+ -1087007972,
+ -1071930078,
+ -1081511406,
+ -1103799606,
+ -1137168042,
+ 1033630283,
+ 1065158598,
+ -1099675657,
+ 1060739092,
+ 1064837457,
+ 1042079286,
+ -1098903474,
+ -1119008790,
+ 1032246349,
+ -1113373416,
+ 1066104399,
+ 1023774672,
+ -1113898222,
+ -1094310895,
+ 1052152475,
+ -1098749228,
+ -1084345013,
+ 1053094651,
+ 1056960113,
+ -1116307468,
+ 1061624352,
+ 1027159872,
+ 1042933883,
+ 1067802552,
+ -1107604936,
+ 1033016960,
+ -1092664144,
+ 1057771978,
+ -1072094652,
+ -1082955198,
+ -1077320939,
+ -1065293639,
+ -1082886840,
+ -1089676614,
+ -1095782407,
+ 1057241814,
+ 1048190079,
+ 1077115080,
+ 1067505511,
+ -1091227649,
+ 1105075155,
+ -1071766402,
+ 1048856434,
+ 1049031469,
+ -1098857067,
+ 1045422408,
+ 1055207212,
+ -1115122357,
+ -1095061320,
+ -1133095655,
+ 1055550539,
+ 1048811184,
+ 1034124811,
+ 1048835059,
+ -1056644317,
+ 1062288026,
+ -1082197712,
+ -1085570290,
+ 1065651610,
+ 1030530498,
+ 1031200626,
+ 1090705590,
+ 1043366214,
+ 1091079496,
+ 1060247623,
+ -1087651946,
+ 1030437690,
+ 1063182906,
+ 1045327719,
+ -1105588619,
+ -1096300046,
+ -1086250117,
+ 1026020703,
+ 1016503211,
+ -1109977896,
+ 1001067655,
+ 1048675556,
+ -1086933808,
+ 1075302320,
+ -1128105311,
+ -1093534001,
+ 1061680967,
+ 1060238569,
+ 1056591683,
+ 1053155886,
+ -1098219909,
+ 1069842651,
+ -1137306212,
+ -1142382733,
+ 1061095347,
+ -1105597656,
+ 1042390959,
+ -1137502930,
+ 1071549698,
+ 1026087628,
+ -1094245518,
+ 1082068268,
+ 1033557922,
+ 1033916128,
+ 1048876221,
+ 1069913878,
+ -1110394253,
+ 1051709874,
+ 1074811940,
+ 1038831397,
+ 1061337028,
+ -1106933941,
+ -1104510613,
+ -1104911957,
+ 1042737234,
+ -1088491754,
+ 1068643139,
+ -1113316744,
+ 1040888761,
+ 1078951474,
+ 1067154212,
+ 1061943722,
+ 1050144835,
+ -1106212636,
+ -1105938238,
+ 1024581259,
+ 1091985702,
+ 1033704036,
+ 1023767756,
+ 1051239009,
+ -1081540147,
+ 1077014680,
+ 1069264901,
+ -1125609744,
+ -1123730114,
+ 1055532569,
+ -1095827325,
+ -1132085416,
+ 1017458242,
+ 1018739068,
+ -1131770423,
+ 1068502187,
+ -1104018971,
+ 1053209515,
+ -1139031838,
+ -1122585477,
+ 1046443358,
+ 1079392894,
+ -1080439252,
+ 1045634505,
+ -1123718382,
+ 1040203287,
+ -1112337418,
+ 1051570174,
+ 1020373895,
+ -1103130437,
+ 1078045080,
+ 1041554993,
+ 1058426261,
+ -1105076678,
+ 1049355307,
+ 1076201494,
+ -1119099290,
+ 1053207675,
+ 1069440963,
+ 1060427936,
+ -1076238873,
+ 1052883645,
+ 1070482780,
+ -1086053069,
+ -1084460593,
+ -1080047559,
+ -1090352170,
+ -1058063114,
+ -1086921893,
+ -1077915253,
+ -1069512105,
+ -1089802680,
+ -1100682506,
+ 1069669387,
+ 1060513141,
+ 1075125286,
+ -1101251750,
+ -1071716216,
+ -1104070617,
+ -1089132481,
+ -1073154148,
+ -1084784208,
+ 1055060797,
+ -1087536442,
+ 1051276034,
+ -1088195190,
+ -1127710292,
+ 1046914119,
+ 1037579884,
+ 1042135758,
+ -1079711212,
+ -1108602591,
+ -1107733440,
+ -1085344093,
+ -1107697506,
+ 1048184653,
+ 1074117960,
+ 1039428236,
+ -1116835301,
+ 1032553510,
+ -1095116446,
+ 1046203710,
+ 1077289693,
+ -1073260876,
+ -1113791118,
+ -1090096782,
+ 1055064942,
+ -1085653402,
+ 1061715963,
+ 1053889876,
+ 1056963632,
+ -1110502078,
+ -1098402846,
+ 1032111162,
+ -1088309322,
+ -1081828413,
+ -1078393640,
+ -1094852903,
+ -1079831854,
+ 1061086550,
+ -1098734193,
+ -1097904672,
+ 1078424707,
+ 1040388223,
+ 1061741404,
+ -1113986180,
+ 1044045556,
+ -1095649366,
+ 1050470009,
+ 1049735759,
+ -1087300887,
+ 1037829555,
+ -1087763448,
+ -1091825834,
+ -1092133022,
+ -1088491757,
+ 1063235779,
+ 1060016889,
+ 1049929792,
+ 1026285210,
+ 1072702848,
+ 1041334744,
+ -1075565492,
+ -1070172286,
+ 1028971757,
+ -1112524333,
+ 1011654513,
+ -1110590262,
+ 1057534411,
+ -1100654514,
+ 1062707314,
+ 1032220453,
+ -1159772744,
+ 1019541216,
+ 1010901058,
+ -1085070749,
+ 1057233620,
+ -1092582174,
+ -1121251116,
+ -1079672062,
+ -1098094663,
+ -1086910885,
+ -1084293970,
+ -1110004833,
+ -1110494549,
+ -1084527832,
+ -1095761963,
+ -1091338272,
+ -1117530634,
+ 1047880417,
+ -1089127120,
+ -1121551424,
+ 991652140,
+ 1049344691,
+ 1046990280,
+ -1086135028,
+ -1096746049,
+ -1099701659,
+ -1071013054,
+ 1050985756,
+ -1076198825,
+ 1033375632,
+ -1069835654,
+ 1066729683,
+ 1061085435,
+ 1071695896,
+ 1044800143,
+ 1086684694,
+ 1057626859,
+ 1061231091,
+ 1083927829,
+ 1058195076,
+ 1065887882,
+ 1042642097,
+ 1062752333,
+ -1080744643,
+ 1065820676,
+ 1054354940,
+ 1041534206,
+ 1052434846,
+ 1072897666,
+ -1089823763,
+ 1042737833,
+ 1079116653,
+ -1082291857,
+ 1040891180,
+ 1020491653,
+ -1100951857,
+ 1014562208,
+ 1041643696,
+ 1049305375,
+ 994275076,
+ 1059170068,
+ 999854826,
+ -1113999902,
+ 1040734394,
+ -1114786184,
+ -1130226180,
+ 1031898579,
+ 1053724169,
+ -1118747622,
+ -1102619890,
+ -1079509471,
+ 1036452396,
+ -1101317824,
+ 1030514921,
+ -1098431648,
+ 1057774310,
+ -1114251326,
+ -1098253426,
+ 1067513769,
+ 1034218985,
+ 1044185499,
+ -1128016534,
+ 1005472800,
+ -1088759611,
+ -1124965948,
+ 1074500636,
+ 1075703777,
+ -1081367004,
+ 1075837697,
+ -1104080613,
+ 1060763020,
+ 1060890354,
+ 1029540106,
+ -1075488432,
+ -1128423987,
+ -1097219486,
+ 1030891556,
+ -1085940117,
+ 1041487871,
+ -1093979919,
+ -1102105546,
+ 1075817483,
+ -1087678952,
+ 1063208822,
+ -1103414159,
+ -1083856904,
+ -1107055449,
+ -1104604636,
+ -1064623273,
+ -1098338183,
+ -1057171075,
+ -1091326318,
+ 1049370304,
+ -1095225598,
+ -1114243934,
+ 1034971111,
+ -1110717887,
+ 1062257923,
+ -1135330065,
+ -1124817042,
+ -1128518755,
+ -1090955151,
+ -1121752796,
+ -1098186061,
+ -1112007375,
+ -1080293454,
+ 1021070694,
+ 1046118589,
+ -1070059557,
+ -1100284911,
+ -1089146842,
+ -1124995886,
+ 1059998935,
+ 1043473236,
+ -1122928510,
+ 1026959553,
+ 1058803787,
+ -1139860726,
+ -1101692400,
+ 1038855160,
+ -1070837770,
+ -1117272865,
+ -1072457461,
+ 1075668035,
+ 1052856705,
+ 1051132668,
+ 1084469309,
+ -1104577368,
+ -1062072088,
+ 1070905923,
+ 1055072332,
+ 1080995029,
+ 1064796380,
+ 1067102640,
+ 1055207607,
+ -1084950051,
+ 1054366166,
+ -1067816598,
+ -1057254067,
+ -1080779850,
+ -1062125565,
+ -1089354059,
+ -1067729196,
+ 1059301625,
+ 1066280387,
+ -1070442543,
+ -1076017152,
+ -1084306000,
+ -1102247205,
+ -1073619199,
+ 1060983776,
+ -1082647657,
+ -1085174619,
+ 1050940452,
+ 1055700487,
+ 1068370562,
+ -1087161341,
+ 1071546051,
+ -1090142284,
+ -1091880168,
+ -1079508100,
+ -1088129479,
+ 1062283648,
+ -1104490094,
+ 1041730425,
+ 1062860734,
+ 1059047162,
+ 1062660648,
+ 1086014902,
+ -1077815510,
+ -1099686170,
+ 1072683655,
+ 1077112219,
+ 1079435147,
+ 1065446760,
+ 1070426429,
+ -1090141701,
+ 1043656753,
+ -1085154873,
+ -1069408347,
+ 1068213106,
+ 1061959674,
+ 1070057876,
+ 1075639211,
+ 1035799408,
+ 1038374459,
+ 1066690647,
+ 1039661209,
+ 1044647203,
+ 1062023173,
+ -1088468043,
+ -1079165925,
+ -1080336498,
+ 1068130569,
+ -1077493406,
+ 1074217257,
+ -1101727172,
+ -1085379174,
+ -1070481672,
+ 1057529522,
+ -1076522193,
+ -1073924795,
+ 1082312198,
+ -1064314607,
+ 1067061448,
+ 1068218316,
+ -1079222876,
+ -1119617023,
+ 1069930539,
+ -1090924901,
+ 1075182877,
+ 1079708151,
+ -1100065892,
+ -1089600121,
+ -1116492203,
+ -1086472107,
+ 1032157576,
+ -1072230606,
+ -1079439244,
+ 1059474144,
+ -1088502908,
+ 1047501927,
+ -1094320071,
+ 1068087040,
+ -1087532275,
+ -1097996011,
+ -1082432729,
+ 1079834747,
+ -1070564609,
+ -1068847264,
+ -1072725058,
+ -1067951169,
+ -1069765987,
+ 1081507675,
+ 1052176603,
+ -1068918124,
+ 1064777857,
+ -1102908869,
+ -1105072458,
+ 1077574212,
+ 1060566264,
+ 1055658928,
+ -1102809937,
+ -1063898364,
+ -1078424254,
+ 1069856456,
+ 1080230047,
+ 1082102894,
+ 1085825073,
+ 1075013346,
+ 1075686667,
+ -1075678085,
+ 1036979328,
+ 1057776047,
+ 1073308450,
+ -1098665897,
+ 1068835544,
+ 1062026186,
+ 1073115015,
+ -1108835930,
+ 1059194909,
+ -1073264910,
+ 1080909556,
+ -1062755957,
+ -1057186943,
+ -1079805436,
+ -1090052576,
+ -1094985070,
+ -1082234213,
+ 1061738033,
+ 1058858038,
+ 1033335443,
+ -1092867209,
+ 1051746309,
+ -1070732239,
+ 1059876194,
+ -1089599015,
+ -1097807493,
+ 1058252370,
+ 1068758970,
+ 1056092463,
+ 1054205382,
+ -1078621136,
+ -1082559630,
+ -1071670612,
+ 1055675893,
+ -1086963788,
+ -1066927582,
+ 1085374430,
+ -1092045876,
+ -1089239053,
+ -1062177169,
+ 1074714216,
+ -1063238637,
+ 1074199777,
+ 1025053201,
+ -1081436824,
+ 1066916555,
+ 1074783687,
+ 1074020846,
+ -1085577315,
+ 1065482474,
+ 1077138633,
+ 1054498494,
+ -1114828571,
+ -1070442607,
+ -1064385934,
+ -1089735557,
+ 1093796263,
+ -1068759439,
+ 1071490382,
+ 1042018930,
+ -1097971822,
+ 1038348488,
+ 1040032887,
+ -1070880443,
+ -1116903647,
+ 1074268567,
+ -1086812810,
+ -1069807455,
+ 1078684860,
+ -1082836394,
+ 1071746535,
+ 1041542471,
+ 1074310491,
+ -1091968963,
+ 1073791918,
+ 1001317682,
+ -1082375516,
+ -1081603396,
+ -1078587263,
+ -1072273634,
+ 1049284485,
+ 1043446264,
+ -1121610917,
+ -1079834545,
+ 1044252087,
+ -1090838379,
+ 1066022288,
+ 1068104825,
+ 1051795406,
+ 1065935796,
+ -1090488493,
+ -1091327171,
+ -1075273149,
+ 1026565785,
+ -1092721748,
+ -1068118543,
+ -1080128501,
+ -1077559912,
+ -1068232755,
+ -1073195588,
+ -1080534792,
+ -1057676851,
+ 1072770856,
+ -1075114170,
+ 1066544368,
+ 1061367904,
+ -1102189169,
+ 1051872010,
+ 1067567478,
+ 1065976570,
+ -1089309914,
+ -1062197738,
+ -1083836863,
+ 1074973060,
+ 1073854473,
+ 1043022865,
+ -1098974295,
+ -1081132748,
+ -1059501560,
+ 1040631691,
+ 1056646734,
+ -1102933001,
+ -1069334873,
+ 1073890909,
+ -1113630628,
+ -1076035932,
+ -1069397950,
+ -1071300977,
+ 1053943262,
+ 1078091462,
+ -1085796399,
+ 1089658550,
+ -1073288455,
+ 1080248330,
+ -1086351284,
+ 1078693386,
+ 1064406302,
+ -1077766119,
+ -1064731484,
+ 1087660804,
+ 1067732981,
+ 1045203754,
+ -1103048335,
+ 1060545913,
+ -1096332107,
+ -1083293377,
+ 1057611205,
+ -1087034823,
+ 1042901203,
+ 1056715956,
+ 1057174656,
+ -1103188499,
+ 1044453092,
+ -1096816437,
+ 1062349173,
+ -1073740860,
+ -1071759336,
+ 1055419708,
+ -1142092534,
+ 1071502777,
+ 1064246014,
+ 1078990907,
+ -1086152414,
+ -1096040036,
+ -1075924931,
+ -1080978512,
+ 1055199559,
+ -1081392276,
+ 1035288904,
+ -1089680737,
+ -1076337896,
+ 1073423898,
+ 1069292535,
+ -1064055954,
+ 1090960417,
+ 1079942060,
+ -1066963987,
+ -1096319162,
+ -1089876921,
+ 1053123604,
+ 1053708252,
+ -1073513132,
+ -1090291890,
+ 1074096972,
+ 1073676769,
+ -1087719621,
+ 1085962835,
+ 1079469569,
+ 1071264268,
+ 1082484662,
+ 1084166605,
+ 1077004204,
+ -1082573634,
+ 1070066035,
+ 1066697933,
+ -1094468185,
+ -1077585897,
+ -1075600768,
+ 1088320289,
+ 1065452455,
+ 1049821475,
+ -1083507825,
+ 1051754205,
+ 1081333053,
+ 1063331691,
+ -1081514753,
+ 1066432444,
+ 1059677844,
+ -1099913465,
+ -1079249069,
+ -1088251951,
+ 1070335310,
+ 1063342158,
+ -1105555777,
+ -1094005138,
+ -1061701238,
+ 1098772169,
+ 1073824053,
+ -1070702592,
+ -1071528531,
+ -1104601247,
+ -1044236884,
+ 1070937415,
+ 1060115132,
+ -1123217926,
+ 1077418536,
+ 1075860698,
+ 1064319370,
+ -1091063118,
+ 1074950458,
+ -1089148562,
+ 1066586982,
+ -1121727677,
+ 1077161927,
+ 1089399528,
+ -1104495507,
+ -1069586212,
+ 1053993420,
+ 1059807630,
+ -1100580144,
+ 1040110421,
+ -1093179374,
+ -1087651939,
+ 1074426855,
+ 1045797782,
+ -1069086230,
+ 1055969570,
+ -1089861015,
+ 1060312633,
+ -1077745793,
+ 1034752961,
+ 1084326421,
+ 1064133403,
+ -1091538243,
+ 1058076150,
+ -1083637363,
+ -1085222946,
+ 1059485423,
+ -1099107020,
+ 1017448082,
+ 1050929193,
+ 1055097846,
+ 1055051818,
+ 1064228520,
+ -1097026773,
+ 1061423312,
+ 1050837763,
+ -1087424574,
+ -1101651767,
+ -1107600209,
+ 1057738770,
+ 1056163057,
+ 1055550837,
+ 1048774136,
+ 1052738826,
+ 1040922466,
+ 1065825890,
+ 1056333210,
+ -1119838246,
+ 1069707566,
+ -1108739607,
+ 1061411245,
+ 1053608268,
+ 1073681397,
+ 1052530285,
+ 1051010186,
+ -1097740460,
+ -1094115110,
+ 1044118279,
+ -1129600054,
+ 1082289039,
+ 1066799129,
+ 1078781300,
+ -1081013937,
+ -1069937030,
+ -1077860004,
+ 1086676616,
+ -1080932789,
+ 1044418821,
+ 1081256636,
+ 1066194730,
+ -1084906390,
+ -1112480383,
+ -1058456757,
+ 1065746114,
+ -1094890171,
+ 1083060853,
+ -1086869728,
+ -1069706041,
+ 1076896493,
+ -1069282161,
+ -1061755306,
+ -1075010779,
+ -1072189133,
+ 1068738612,
+ -1090575121,
+ -1086529456,
+ -1072268957,
+ 1067443427,
+ -1069194492,
+ 1032826221,
+ -1085284060,
+ -1088078224,
+ -1090596209,
+ 1058834569,
+ -1077178107,
+ 1066621338,
+ -1103344414,
+ 1025311783,
+ -1089034178,
+ -1090262211,
+ 1057579528,
+ 1052416261,
+ -1082386193,
+ -1097536223,
+ -1081452489,
+ 1071328832,
+ -1078697763,
+ -1069751364,
+ 1048476747,
+ -1080760528,
+ 1084960029,
+ -1080516085,
+ -1098594893,
+ 1069006490,
+ -1113326964,
+ 1076454499,
+ 1073927745,
+ 1065418353,
+ -1083032016,
+ -1059474833,
+ -1056831127,
+ -1086276730,
+ -1072960495,
+ -1056810954,
+ -1080969042,
+ 1083495315,
+ 1074173798,
+ 1091086404,
+ 1081474700,
+ -1070528780,
+ 1062482265,
+ 1059888858,
+ 1083892629,
+ -1076483659,
+ 1091708866,
+ 1084965657,
+ 1075566853,
+ -1081756227,
+ -1081726568,
+ 1063923864,
+ -1053578524,
+ 1085067103,
+ -1066970430,
+ -1083775032,
+ 1075590482,
+ -1098283473,
+ -1078407137,
+ 1084098755,
+ -1071807240,
+ 1049497446,
+ -1078560716,
+ -1065954341,
+ 1057357022,
+ -1119486527,
+ 1056565510,
+ -1079490839,
+ -1080869038,
+ -1105622600,
+ 1058209036,
+ 1068123949,
+ 1060977542,
+ 1078309340,
+ -1094666916,
+ 1074709781,
+ -1084508139,
+ 1080427985,
+ 1054225965,
+ -1089017114,
+ 1098855881,
+ -1085398374,
+ -1080907252,
+ 1058747819,
+ 1082151659,
+ 1060124483,
+ -1076996780,
+ -1056428997,
+ -1071022659,
+ -1072123294,
+ -1067373293,
+ 1064252298,
+ -1084192165,
+ -1090065379,
+ -1083993137,
+ 1089425398,
+ -1091006077,
+ -1072929550,
+ 1024820864,
+ 1058497880,
+ -1071577660,
+ 1051966835,
+ 1050043658,
+ -1106608742,
+ 1083499783,
+ -1089054165,
+ 1077581178,
+ -1071895762,
+ -1071164651,
+ -1063540228,
+ 1070111774,
+ -1064910621,
+ -1073185636,
+ -1081562553,
+ -1089502809,
+ -1101995000,
+ -1076566685,
+ 1065421852,
+ 1070815279,
+ 1078898784,
+ -1070864012,
+ 1058736451,
+ 1026346456,
+ 1030707198,
+ -1095063965,
+ 1037951821,
+ -1081549970,
+ 1077948848,
+ -1084705999,
+ 1056658700,
+ -1086630310,
+ 1060296850,
+ -1081803996,
+ 1058110021,
+ 1055441119,
+ 1060470789,
+ 1087243485,
+ 1065968091,
+ -1079217907,
+ 1070775987,
+ 1074142778,
+ -1092917914,
+ 1082791424,
+ -1090854598,
+ 1073019018,
+ -1064461095,
+ 1026096769,
+ -1075591491,
+ -1073530054,
+ 1057490083,
+ 1040019626,
+ 1082688949,
+ 1084269438,
+ 1076504678,
+ 1082279372,
+ -1058232986,
+ -1101219398,
+ -1069952070,
+ 1086735896,
+ 1074776146,
+ 1083685327,
+ 1075356329,
+ -1089412311,
+ 1070347698,
+ 1017281343,
+ 1074115187,
+ -1086442894,
+ 1077037901,
+ -1084846846,
+ -1054522320,
+ 1057274264,
+ -1076055886,
+ -1056854700,
+ 1053972924,
+ 1090049700,
+ 1069473845,
+ 1062434913,
+ -1070332800,
+ 1044817203,
+ 1049380759,
+ 1062896914,
+ 1069129469,
+ -1075875029,
+ -1097413617,
+ 1072334223,
+ -1094204378,
+ -1074300443,
+ -1109424842,
+ 1030434806,
+ 1072216405,
+ -1081891711,
+ -1079117077,
+ 1068797868,
+ 1059575965,
+ -1077931322,
+ -1107455564,
+ -1062989448,
+ -1057366451,
+ -1065814248,
+ -1077106280,
+ 1073407228,
+ -1071639693,
+ 1074913040,
+ -1066559117,
+ -1074016647,
+ -1087190687,
+ -1092916957,
+ 1041756694,
+ -1097362733,
+ -1094341084,
+ -1074989988,
+ -1074430611,
+ -1060272623,
+ -1073661695,
+ -1054909418,
+ -1079696192,
+ -1072254210,
+ 1071217498,
+ 1054465367,
+ -1079539621,
+ -1070857187,
+ -1099428378,
+ -1072634749,
+ 1074532894,
+ -1053999040,
+ -1085286595,
+ 1058772264,
+ -1094023953,
+ -1078825117,
+ -1078492867,
+ -1069574890,
+ -1063442059,
+ -1063783541,
+ 1081791252,
+ 1087808476,
+ 1073876199,
+ -1104108170,
+ 1059115298,
+ -1074062867,
+ -1071859545,
+ -1079193842,
+ 1074305058,
+ -1078276926,
+ -1081826277,
+ 1053141834,
+ -1097412698,
+ -1089721662,
+ 1061456928,
+ -1110259277,
+ 1045044774,
+ 1037455330,
+ -1091902715,
+ -1079960883,
+ -1087866459,
+ -1070915648,
+ -1095952207,
+ 1041937738,
+ 1068160141,
+ -1063662656,
+ -1081156166,
+ -1072979161,
+ -1113811316,
+ -1111634157,
+ 1068370190,
+ -1069960887,
+ 1068303824,
+ 1073594478,
+ 1076882095,
+ 1074322174,
+ -1076778539,
+ 1068946286,
+ 1076054654,
+ -1069288350,
+ 1053155915,
+ -1059539660,
+ 1039329960,
+ -1080709293,
+ 1088497558,
+ -1081214997,
+ -1113462385,
+ -1080679476,
+ 1060144289,
+ 1061740277,
+ 1041131162,
+ -1064156667,
+ -1097003393,
+ -1118766824,
+ -1090152778,
+ -1091052903,
+ 1080766008,
+ -1073382417,
+ 1088875648,
+ 1081277980,
+ 1075909640,
+ -1081993958,
+ 1042141260,
+ -1097474981,
+ 1066198760,
+ -1075941409,
+ -1071803565,
+ 1082265933,
+ -1079712163,
+ -1081755886,
+ -1077928831,
+ -1068269940,
+ 1075322391,
+ -1082055303,
+ 1061117289,
+ -1086288445,
+ 1067937632,
+ 1063605507,
+ -1090393486,
+ 1048505206,
+ -1077012559,
+ -1076892492,
+ -1099263084,
+ 1068758761,
+ -1053398025,
+ -1059895211,
+ 1063097062,
+ 1050713656,
+ -1061078659,
+ 1074447782,
+ 1054041571,
+ -1076271799,
+ 1069500446,
+ -1097294543,
+ 1073595340,
+ 1060631532,
+ -1092333596,
+ -1075835936,
+ -1096840352,
+ 1034364037,
+ 1075494906,
+ 1067380035,
+ 1069759058,
+ -1060545009,
+ -1093709388,
+ -1101356991,
+ -1082398499,
+ -1094643747,
+ 1051775043,
+ 1060684773,
+ -1080747781,
+ 1056831527,
+ -1080570091,
+ -1081437154,
+ 1058755844,
+ 1056049211,
+ 1065832345,
+ 1065328568,
+ 1066604660,
+ 1074388591,
+ 1075486132,
+ -1078192543,
+ -1137023356,
+ 1068873348,
+ 1070719029,
+ 1080182947,
+ -1074093107,
+ 1073507733,
+ 1062460734,
+ -1084848626,
+ 1050378822,
+ -1095139310,
+ 1059272266,
+ -1088623080,
+ 1034943000,
+ 1062874456,
+ 1064050465,
+ 1059366211,
+ -1079619711,
+ -1081236918,
+ -1085325820,
+ -1079211766,
+ -1073747243,
+ -1075800663,
+ -1063667360,
+ -1076936449,
+ -1067808084,
+ -1060257053,
+ -1079854365,
+ 1074427786,
+ 1077876532,
+ -1067103714,
+ 1060526042,
+ 1069675528,
+ 1076049222,
+ 1065567505,
+ 1065459553,
+ 1074261360,
+ -1084276542,
+ -1071259550,
+ 1054460423,
+ -1075229919,
+ -1064493728,
+ 1074012149,
+ 1078747321,
+ -1062228492,
+ -1106498344,
+ 1085498178,
+ -1086944311,
+ -1092691833,
+ 1050199716,
+ -1050213469,
+ 1043002996,
+ 1082108686,
+ 1076770879,
+ 1060041972,
+ 1092621262,
+ -1058380159,
+ -1064767238,
+ -1065759210,
+ -1061069687,
+ -1069190901,
+ -1073681401,
+ -1083919144,
+ 1081334508,
+ -1079812154,
+ -1089449821,
+ -1078166082,
+ -1071932716,
+ 1073993126,
+ 1060292808,
+ 1049130204,
+ -1115347208,
+ -1072332734,
+ 1071451452,
+ 1061964921,
+ -1079938076,
+ -1094563432,
+ 1047408745,
+ -1079387208,
+ 1059630497,
+ 1068295956,
+ 1040297449,
+ -1075886015,
+ 1094713741,
+ 1083582037,
+ -1077673444,
+ 1056276851,
+ 1082750847,
+ -1073309362,
+ 1070626228,
+ 1069006533,
+ -1080080685,
+ 1049681293,
+ 1055760024,
+ 1074307485,
+ 1064783469,
+ 1062314109,
+ -1070104828,
+ 1070555709,
+ -1091400623,
+ -1112516869,
+ -1071525317,
+ -1075015534,
+ -1070940415,
+ 1069773289,
+ 1040841934,
+ 1076131258,
+ 1042614295,
+ -1088141139,
+ 1065374771,
+ 1094285756,
+ 1017068122,
+ -1072808760,
+ -1061880539,
+ -1080712196,
+ 1058634945,
+ -1079518730,
+ -1066906217,
+ 1062924165,
+ -1067542576,
+ -1064483304,
+ -1085326798,
+ -1084067716,
+ -1073400848,
+ -1072429767,
+ -1069109494,
+ -1066943220,
+ -1089457808,
+ 1069069582,
+ -1117659879,
+ 1034492160,
+ -1091799514,
+ 1069710965,
+ 1064032673,
+ -1097096787,
+ -1113300251,
+ 1053319517,
+ -1106458097,
+ 1060726107,
+ -1079783297,
+ 1041529710,
+ -1135183991,
+ 1077810022,
+ -1111950806,
+ 1069372559,
+ 1064548503,
+ -1079905508,
+ -1080536162,
+ -1081405226,
+ -1077104911,
+ 1060146884,
+ -1075031932,
+ -1098786972,
+ -1089305195,
+ -1072122659,
+ -1077422284,
+ -1074207277,
+ 1066214727,
+ 1063817636,
+ -1087076915,
+ -1070789027,
+ -1079419299,
+ -1102326704,
+ 1074719023,
+ 1058215432,
+ 1065117788,
+ 1064151005,
+ -1084897377,
+ -1072227976,
+ -1067069183,
+ 1074635513,
+ 1075410143,
+ -1068671458,
+ -1082182838,
+ -1085141288,
+ 1074447194,
+ 1057732998,
+ 1070054614,
+ -1075719191,
+ -1092943862,
+ 1081129863,
+ 1067016035,
+ -1074841132,
+ 1038589549,
+ 1069382796,
+ -1080463733,
+ 1072751666,
+ -1088642594,
+ -1064781076,
+ 1077395104,
+ -1073298823,
+ -1070966289,
+ 1076633669,
+ 1071122826,
+ 1066627963,
+ -1089299302,
+ -1073396632,
+ -1080615966,
+ -1081495440,
+ 1078165299,
+ 1062684374,
+ -1074249545,
+ 1009146638,
+ 1070474734,
+ 1062495624,
+ -1085201985,
+ -1086456817,
+ 1068069425,
+ 1072555562,
+ -1079076254,
+ 1059770243,
+ -1073043435,
+ 1048308902,
+ -1085143719,
+ 1075043138,
+ -1080765521,
+ -1068280264,
+ 1059123057,
+ -1073565669,
+ 1060705313,
+ 1074116891,
+ -1076198562,
+ 1061291760,
+ 1061739723,
+ -1073168396,
+ -1069386543,
+ 1073932891,
+ 1073727749,
+ -1064701917,
+ -1071225708,
+ -1121996336,
+ 1040337279,
+ 1061039848,
+ 1071055349,
+ -1118815737,
+ -1073997438,
+ 1039975550,
+ -1068950127,
+ 1022486332,
+ 1050701981,
+ 1065267866,
+ 1070119429,
+ -1118909672,
+ 1065802630,
+ -1078657212,
+ 1074890831,
+ 1075232126,
+ -1069379922,
+ -1064920696,
+ 1082598372,
+ -1080402689,
+ -1078587987,
+ 1080431609,
+ 1069725744,
+ -1081104770,
+ -1084686570,
+ 1062445098,
+ -1074242879,
+ -1073979052,
+ 1077085178,
+ 1080102900,
+ -1082019710,
+ 1055962666,
+ 1049986043,
+ 1057393316,
+ -1078108093,
+ -1078281035,
+ 1075125839,
+ 1084069292,
+ -1073054274,
+ 1071679103,
+ 1064979946,
+ -1077073298,
+ -1069682066,
+ -1069271317,
+ 1083435508,
+ 1083855843,
+ 1060212571,
+ 1055148732,
+ 1072376825,
+ -1071045753,
+ }
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/Thai_codepoints_exclusive_model5_heavy_Test.txt b/Build/source/libs/icu/icu-src/source/test/testdata/Thai_codepoints_exclusive_model5_heavy_Test.txt
new file mode 100644
index 00000000000..d47ceea6590
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/Thai_codepoints_exclusive_model5_heavy_Test.txt
@@ -0,0 +1,97 @@
+# Copyright (C) 2020 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+Note: model Thai_codepoints_exclusive_model5_heavy has been trained using an exclusive data set. However, if you like you can still test it by other types of data sets (not recommended).
+Model: Thai_codepoints_exclusive_model5_heavy
+Embedding: codepoints
+Input: ปฏิญญาสากลว่าด้วยสิทธิมนุษยชน
+Output: |ปฏิญญา|สากลว่า|ด้วย|สิทธิ|มนุษย|ชน|
+Input: คำปรารภ
+Output: |คำ|ปรารภ|
+Input: โดยที่การยอมรับนับถือเกียรติศักดิ์ประจำตัว
+Output: |โดย|ที่|การ|ยอม|รับ|นับ|ถือ|เกียรติศักดิ์|ประจำ|ตัว|
+Input: และสิทธิเท่าเทียมกันและโอนมิได้ของบรรดา
+Output: |และ|สิทธิ|เท่า|เทียม|กัน|และ|โอน|มิ|ได้|ของ|บรรดา|
+Input: สมาชิก
+Output: |สมา|ชิก|
+Input: ทั้ง
+Output: |ทั้ง|
+Input: หลายแห่งครอบครัว
+Output: |หลาย|แห่ง|ครอบครัว|
+Input: มนุษย์เป็นหลักมูลเหตุแห่งอิสรภาพ
+Output: |มนุษย์|เป็น|หลักมูล|เหตุ|แห่ง|อิสรภาพ|
+Input: ความยุติธรรม
+Output: |ความ|ยุติ|ธรรม|
+Input: และสันติภาพในโลก
+Output: |และ|สันติภาพ|ใน|โลก|
+Input: โดยที่การไม่นำพาและการเหยียดหยามต่อสิทธิมนุษยชน
+Output: |โดย|ที่|การ|ไม่|นำ|พา|และ|การ|เหยียด|หยาม|ต่อ|สิทธิ|มนุษยชน|
+Input: ยังผลให้มีการหระทำอันป่าเถื่อน
+Output: |ยัง|ผล|ให้|มี|การ|หระทำ|อัน|ป่า|เถื่อ|น|
+Input: ซี่งเป็นการละเมิดมโนธรรมของมนุษยชาติอย่างร้ายแรง
+Output: |ซี่ง|เป็น|การ|ละเมิดมโนธรรม|ของ|มนุษยชาติ|อย่าง|ร้าย|แรง|
+Input: และใต้
+Output: |และ|ใต้|
+Input: ได้
+Output: |ได้|
+Input: มีการประกาศว่า
+Output: |มี|การ|ประกาศ|ว่า|
+Input: ปณิธานสูงสุดของสามัญชนได้แก่ความต้องการให้มนุษย์มีชีวิตอยู่ในโลกด้วยอิสรภาพในการพูด
+Output: |ปณิธาน|สูงสุด|ของ|สามัญชน|ได้|แก่|ความ|ต้องการ|ให้|มนุษย์|มี|ชีวิต|อยู่|ใน|โลก|ด้วย|อิสรภาพ|ใน|การ|พูด|
+Input: และความเชื่อถือ
+Output: |และ|ความ|เชื่อถือ|
+Input: และอิสรภาพพ้นจากความหวาดกลัวและความต้องการ
+Output: |และ|อิสรภาพ|พ้น|จาก|ความ|หวาด|กลัว|และ|ความ|ต้องการ|
+Input: โดยที่เป็นการจำเป็นอย่างยิ่งที่สิทธิมนุษยชนควรได้รับความคุ้มครองโดยหลักบังคับของกฎหมาย
+Output: |โดย|ที่|เป็น|การ|จำเป็น|อย่าง|ยิ่ง|ที่|สิทธิ|มนุษยชน|ควร|ได้|รับ|ความ|คุ้มครอง|โดย|หลัก|บังคับ|ของ|กฎหมาย|
+Input: ถ้าไม่ประสงค์จะให้คนตกอยู่ในบังคับให้หันเข้าหาการขบถขัดขืนต่อทรราชและการกดขี่เป็นวิถีทางสุดท้าย
+Output: |ถ้า|ไม่|ประสงค์|จะ|ให้|คน|ตก|อยู่|ใน|บังคับ|ให้|หัน|เข้า|หา|การ|ขบถ|ขัด|ขืน|ต่อทรราช|และ|การ|กด|ขี่|เป็น|วิถี|ทาง|สุด|ท้าย|
+Input: โดยที่ประชากรแห่งสหประชาชาติได้ยืนยันไว้ในกฎบัตรถึงความเชื่อมั่นในสิทธิมนุษยชนอันเป็นหลักมูล
+Output: |โดย|ที่|ประชากร|แห่ง|สหประชา|ชาติ|ได้|ยืน|ยัน|ไว้|ใน|กฎบัตร|ถึง|ความ|เชื่อมั่น|ใน|สิทธิ|มนุษยชน|อัน|เป็น|หลัก|มู|ล|
+Input: ในเกียรติศักดิ์และคุณค่าของมนุษย์และในสิทธิเท่าเทียมกันของบรรดาชายและหญิง
+Output: |ใน|เกียรติศักดิ์|และ|คุณค่า|ของ|มนุษย์|และ|ใน|สิทธิ|เท่า|เทียม|กัน|ของ|บรรดา|ชาย|และ|หญิง|
+Input: และได้ตกลงใจที่จะส่งเสริมความก้าวหน้าทางสังคม
+Output: |และ|ได้|ตก|ลงใจ|ที่|จะ|ส่ง|เสริม|ความ|ก้าว|หน้า|ทาง|สังคม|
+Input: และมาตรฐานแห่งชีวิตที่ดีขึ้นด้วยในอิสรภาพ
+Output: |และ|มาตรฐาน|แห่ง|ชีวิต|ที่|ดี|ขึ้น|ด้วย|ใน|อิสรภาพ|
+Input: อันกว้างขวางยิ่งขึ้น
+Output: |อัน|กว้าง|ขวาง|ยิ่ง|ขึ้น|
+Input: โดยที่รัฐสมาชิกต่างปฎิญาณจะให้บรรลุถึงซึ่งการส่งเสริมการเคารพและการปฎิบัติตามทั่วสากลต่อสิทธิมนุษยชนและอิสรภาพหลักมูล
+Output: |โดย|ที่|รัฐสมา|ชิก|ต่าง|ปฎิญาณ|จะ|ให้|บรรลุ|ถึง|ซึ่ง|การ|ส่ง|เสริม|การ|เคารพ|และ|การ|ปฎิบัติ|ตาม|ทั่วสากล|ต่อ|สิทธิ|มนุษยชน|และ|อิสรภาพ|หลัก|มู|ล|
+Input: โดยร่วมมือกับสหประชาชาติ
+Output: |โดย|ร่วม|มือ|กับ|สหประชา|ชาติ|
+Input: โดยที่ความเข้าใจร่วมกันในสิทธิ
+Output: |โดย|ที่|ความ|เข้าใจ|ร่วม|กัน|ใน|สิทธิ|
+Input: และอิสรภาพเหล่านี้เป็นสิ่งสำคัญอย่างยิ่ง
+Output: |และ|อิสรภาพ|เหล่า|นี้|เป็น|สิ่ง|สำคัญ|อย่าง|ยิ่ง|
+Input: เพื่อให้ปฏิญาณนี้สำเร็จผลเต็มบริบูรณ์
+Output: |เพื่อ|ให้|ปฏิญาณ|นี้|สำเร็จ|ผล|เต็ม|บริบูรณ์|
+Input: ฉะนั้น
+Output: |ฉะนั้น|
+Input: บัดนี้สมัชชาจึงประกาศว่า
+Output: |บัด|นี้|สมัชชา|จึง|ประกาศ|ว่า|
+Input: ปฏิญญาสากลว่าด้วยสิทธิมนุษยชนนี้
+Output: |ปฏิญญา|สากลว่า|ด้วย|สิทธิ|มนุษยชน|นี้|
+Input: เป็นมาตรฐานร่วมกันแห่งความสำเร็จสำหรับบรรดาประชากรและประชาชาติทั้งหลาย
+Output: |เป็น|มาตรฐาน|ร่วม|กัน|แห่ง|ความ|สำเร็จ|สำหรับ|บรรดา|ประชากร|และ|ประชาชาติ|ทั้ง|หลาย|
+Input: เพื่อจุดหมายปลายทางที่ว่า
+Output: |เพื่อ|จุดหมาย|ปลาย|ทาง|ที่|ว่า|
+Input: เอกชนทุกคนและองค์การชองสังคมทุกองค์การ
+Output: |เอกชน|ทุก|คน|และ|องค์|การ|ชอง|สังคม|ทุก|องค์|การ|
+Input: โดยการรำลึกถึงปฏิญญานี้เป็นเนืองนิจ
+Output: |โดย|การ|รำลึก|ถึง|ปฏิญญา|นี้|เป็น|เนือง|นิจ|
+Input: จะบากบั่นพยายามด้วยการสอนและศึกษา
+Output: |จะ|บาก|บั่นพยายาม|ด้วย|การ|สอน|และ|ศึกษา|
+Input: ในอันที่จะส่งเสริมการเคารพสิทธิและอิสรภาพเหล่านี้
+Output: |ใน|อัน|ที่|จะ|ส่ง|เสริม|การ|เคารพ|สิทธิ|และ|อิสรภาพ|เหล่า|นี้|
+Input: และด้วยมาตรการอันก้าวหน้าทั้งในประเทศและระหว่างประเทศ
+Output: |และ|ด้วย|มาตรการ|อัน|ก้าว|หน้า|ทั้ง|ใน|ประเทศ|และ|ระหว่าง|ประเทศ|
+Input: ในอันที่จะให้มีการยอมรับนับถือ
+Output: |ใน|อัน|ที่|จะ|ให้|มี|การ|ยอม|รับ|นับ|ถือ|
+Input: และการปฏิบัติตามโดยสากลและอย่างเป็นผลจริงจัง
+Output: |และ|การ|ปฏิบัติ|ตาม|โดย|สากล|และ|อย่าง|เป็น|ผล|จริง|จัง|
+Input: ทั้งในบรรดาประชาชนของรัฐสมาชิกด้วยกันเอง
+Output: |ทั้ง|ใน|บรรดา|ประชาชน|ของ|รัฐสมา|ชิก|ด้วย|กัน|เอง|
+Input: และในบรรดาประชาชนของดินแดนที่อยู่ใตัอำนาจของรัฐนั้น
+Output: |และ|ใน|บรรดา|ประชาชน|ของ|ดิน|แดน|ที่|อยู่|ใตัอำนาจ|ของ|รัฐ|นั้น|
+Input: ๆ
+Output: |ๆ|
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/Thai_graphclust_model4_heavy.txt b/Build/source/libs/icu/icu-src/source/test/testdata/Thai_graphclust_model4_heavy.txt
new file mode 100644
index 00000000000..dc77bc958fe
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/Thai_graphclust_model4_heavy.txt
@@ -0,0 +1,13509 @@
+// © 2021 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+Thai_graphclust_model4_heavy:table(nofallback){
+ model{"Thai_graphclust_model4_heavy"}
+ type{"graphclust"}
+ embeddings:int{16}
+ hunits:int{23}
+ dict{
+ "า",
+ "น",
+ "อ",
+ "ง",
+ "เ",
+ " ",
+ "ก",
+ "ร",
+ "ย",
+ "ม",
+ "ว",
+ "ะ",
+ "ห",
+ "ไ",
+ "แ",
+ "บ",
+ "ล",
+ "ด",
+ "ใ",
+ "ค",
+ "จ",
+ "ป",
+ "ส",
+ "ที่",
+ "ต",
+ "ข",
+ "พ",
+ "ท",
+ "ด้",
+ "ม่",
+ "\"",
+ "ว่",
+ "ป็",
+ "โ",
+ "มี",
+ "ช",
+ "ห้",
+ ".",
+ "กั",
+ "ต่",
+ "รั",
+ "ก็",
+ "ณ",
+ "ล้",
+ "ข้",
+ "ล่",
+ "ลั",
+ "ต้",
+ "ถ",
+ "นี้",
+ "ทำ",
+ "ย่",
+ "วั",
+ "ษ",
+ "ผ",
+ "ๆ",
+ "ศ",
+ "ยู่",
+ "น้",
+ "ภ",
+ "ติ",
+ "ผู้",
+ "ดี",
+ "รื",
+ "ญ",
+ "รี",
+ "ร้",
+ "ช่",
+ "ธ",
+ "ริ",
+ "ตั",
+ "นั้",
+ "ยั",
+ "ส่",
+ "สี",
+ "กิ",
+ "นั",
+ "รื่",
+ "สั",
+ "มื",
+ "ช้",
+ "ขึ้",
+ "ก่",
+ "จั",
+ "0",
+ "1",
+ "วิ",
+ "ดิ",
+ "ฐ",
+ "ทั้",
+ "มั",
+ "บ้",
+ "ร่",
+ "2",
+ "ซึ่",
+ "ถึ",
+ "พื่",
+ "นิ",
+ "น้ำ",
+ "คุ",
+ "ท่",
+ "น่",
+ "อี",
+ "ดั",
+ "มื่",
+ ")",
+ "(",
+ "บั",
+ "รู้",
+ "จ้",
+ "ว้",
+ "คื",
+ "ทุ",
+ "พั",
+ "ลื",
+ "ม้",
+ "สำ",
+ "5",
+ "สุ",
+ "จำ",
+ "ค่",
+ "พิ",
+ "นำ",
+ "ห็",
+ "ตั้",
+ "จึ",
+ "ดู",
+ "ลู",
+ "ปั",
+ "หั",
+ "สิ",
+ "ณ์",
+ "3",
+ "ปี",
+ "นึ่",
+ "ร์",
+ "-",
+ "กำ",
+ "ที",
+ "ฉ",
+ "ยุ",
+ "อั",
+ "4",
+ "ตุ",
+ "ลิ",
+ "ย์",
+ "ฉั",
+ "ถู",
+ "ด็",
+ "๒",
+ "ผ่",
+ "คำ",
+ "ชี",
+ "ข่",
+ "ถ้",
+ "ชื่",
+ "คั",
+ "รั้",
+ "e",
+ "พื้",
+ "ชุ",
+ "ญ่",
+ "รู",
+ "๑",
+ "ธิ",
+ "นุ",
+ "ท้",
+ "สู",
+ "ปิ",
+ "คิ",
+ "พู",
+ ",",
+ "a",
+ "ก้",
+ "ทั",
+ "ค้",
+ "?",
+ "มิ",
+ "ห่",
+ "i",
+ "ฟ",
+ "บุ",
+ "ล็",
+ "ญิ",
+ "รุ",
+ "งิ",
+ "นั่",
+ "o",
+ "ซ",
+ "๐",
+ "ชิ",
+ "จุ",
+ "ดำ",
+ "ขั",
+ "พี",
+ "6",
+ "n",
+ "ลุ่",
+ "พ่",
+ "t",
+ "ลี่",
+ "ตำ",
+ "ผิ",
+ "อ่",
+ "สิ่",
+ "r",
+ "ร็",
+ "กี่",
+ "อุ",
+ "ฯ",
+ "สื",
+ "ฎ",
+ "๕",
+ "อื่",
+ "9",
+ "ค์",
+ "บิ",
+ "นี่",
+ "7",
+ "ฝ",
+ "๓",
+ "ฏิ",
+ "8",
+ "ฒ",
+ "น์",
+ "s",
+ "อ้",
+ "ฝ่",
+ "นื่",
+ "ทั่",
+ "ศั",
+ "มู",
+ "ยื",
+ "พิ่",
+ "ธี",
+ "ป่",
+ "ยิ",
+ "อำ",
+ "ศึ",
+ "บ่",
+ "ชั",
+ "ป้",
+ "ฤ",
+ "ถื",
+ "l",
+ "๔",
+ "ลุ",
+ "นี",
+ "สื่",
+ "ณี",
+ "ดื",
+ "ย้",
+ "สั่",
+ "ภั",
+ "ลำ",
+ "ว์",
+ "อิ",
+ "นุ่",
+ "มุ",
+ "ผ้",
+ "c",
+ "พี่",
+ "ขี",
+ "ยิ่",
+ "ริ่",
+ "ลื่",
+ "ลี้",
+ "ฟั",
+ "ฟ้",
+ "สึ",
+ "ต์",
+ "ลี",
+ "ชั้",
+ "พื",
+ "!",
+ "นึ",
+ "u",
+ "กุ",
+ "พ์",
+ "ส้",
+ "สู่",
+ "ถุ",
+ "ซื้",
+ "มั่",
+ "ง่",
+ "ธุ์",
+ "นู",
+ "ภู",
+ "นื้",
+ "ตี",
+ "มู่",
+ "ชื้",
+ "รุ่",
+ "ต็",
+ "m",
+ "นื",
+ "บี",
+ "ทิ",
+ "h",
+ "ซี",
+ "d",
+ "ย็",
+ "ห์",
+ "ข็",
+ "ชี้",
+ "ธ์",
+ "ผั",
+ "สื้",
+ "๖",
+ "ชั่",
+ "จิ",
+ "ซิ",
+ "๘",
+ "ท์",
+ "คู่",
+ "ยิ้",
+ "ฏ",
+ "จ็",
+ "ษั",
+ "ตู",
+ "จ่",
+ "ศิ",
+ "รึ",
+ "p",
+ "ถ่",
+ "ลึ",
+ "๙",
+ "๗",
+ "พุ",
+ "ฮ",
+ ":",
+ "g",
+ "ด่",
+ "ขั้",
+ "สิ้",
+ "กี",
+ "ยื่",
+ "ซ้",
+ "ต่ำ",
+ "วี",
+ "หิ",
+ "ถิ่",
+ "อ็",
+ "ดุ",
+ "กื",
+ "พ้",
+ "ฆ",
+ "ธุ",
+ "บู",
+ }
+ data:intvector{
+ 1022389126,
+ 1067251134,
+ -1073298609,
+ 1084522537,
+ -1118974035,
+ -1113849258,
+ 1017677956,
+ 1003942845,
+ -1128137457,
+ -1106745766,
+ -1121591513,
+ 1081715487,
+ -1160773200,
+ 983284104,
+ 996444050,
+ 1040931358,
+ -1102594288,
+ 1041068351,
+ -1117156308,
+ 1048763822,
+ 1052063507,
+ -1095517424,
+ 1025198600,
+ -1111586221,
+ 1023583435,
+ 1038210699,
+ 1025665246,
+ 1045239867,
+ 1052854629,
+ 1028029035,
+ -1130359118,
+ -1084587469,
+ -1113607735,
+ 1038640454,
+ -1115640705,
+ 1019854654,
+ -1100191095,
+ -1113138990,
+ -1122162195,
+ 1038173258,
+ -1103889257,
+ 1035578006,
+ -1111880739,
+ 1016167278,
+ 993663504,
+ -1106012803,
+ 1041057636,
+ 1059184655,
+ 1039731968,
+ 1049553679,
+ -1110833391,
+ 1064786229,
+ 1042739722,
+ -1104274168,
+ -1103707718,
+ -1121830245,
+ 1044006212,
+ 1047028787,
+ 1057010133,
+ 1051941722,
+ 1069353836,
+ 1037909304,
+ -1132299692,
+ -1102988690,
+ -1105201510,
+ -1083913607,
+ 1067326521,
+ -1082464066,
+ -1077014153,
+ 1052819874,
+ 1054293710,
+ 1038150002,
+ -1065289217,
+ 1017665917,
+ -1090350225,
+ 1036135834,
+ 1053683078,
+ -1074902006,
+ 1051370600,
+ 1029803694,
+ -1055513148,
+ -1098457250,
+ -1069170350,
+ -1084840380,
+ 1091272482,
+ 1062605510,
+ 1051814971,
+ -1055561551,
+ 1048591550,
+ 1087257952,
+ 1084232049,
+ -1088714442,
+ -1072640372,
+ 1081032624,
+ 1047651008,
+ 1075322291,
+ -1115360846,
+ -1110634075,
+ 1035518506,
+ 1041419165,
+ -1113622378,
+ 1027633066,
+ 1040261513,
+ 1019990204,
+ -1141630700,
+ 1024160644,
+ -1073990107,
+ 1043080313,
+ 1063331644,
+ 998542050,
+ -1117348381,
+ -1101532131,
+ 1060921578,
+ 1011895193,
+ -1115120330,
+ -1110646092,
+ -1121361776,
+ 1041992091,
+ -1106590224,
+ -1103854023,
+ -1112270157,
+ 1036714402,
+ 1018710850,
+ -1117854635,
+ -1128921562,
+ -1109253397,
+ -1096280733,
+ -1115534618,
+ 1050480529,
+ 1025436503,
+ -1106188402,
+ 1048394931,
+ 1035734714,
+ -1094317578,
+ -1120986377,
+ -1099176311,
+ 1043090526,
+ -1110338941,
+ -1105980415,
+ 1024570215,
+ -1119991718,
+ -1143114794,
+ 1039929364,
+ 1008501931,
+ 1027253194,
+ -1115969487,
+ 1030441640,
+ 1026929836,
+ 1046448752,
+ -1115510612,
+ -1104087282,
+ 1023421141,
+ -1140811960,
+ 1045660662,
+ 1060626092,
+ -1121173469,
+ -1118911550,
+ 1040337304,
+ 1044549262,
+ -1112864828,
+ 1057280108,
+ 1035531520,
+ -1114492687,
+ 1039942963,
+ -1104931936,
+ -1085430645,
+ -1101827251,
+ 1043955092,
+ -1097611099,
+ -1114945310,
+ 1049479203,
+ 1052806415,
+ 1049808644,
+ -1121876116,
+ -1096392774,
+ 1045585367,
+ 1031831105,
+ 1091422960,
+ -1089326424,
+ 1073934820,
+ -1130556357,
+ 1040440790,
+ -1060245750,
+ 1047934933,
+ -1108345423,
+ 1034607819,
+ -1100099689,
+ 1076202274,
+ 1046016805,
+ 1049236000,
+ -1091725034,
+ -1102555399,
+ -1112292306,
+ -1089892967,
+ 1054947831,
+ 1008074836,
+ -1104578773,
+ -1119391358,
+ 1060125262,
+ 1056576720,
+ -1068399993,
+ -1069346654,
+ 1023778675,
+ -1105007919,
+ -1096898284,
+ -1084621044,
+ -1094030100,
+ 1044166152,
+ 1032772288,
+ 1014724080,
+ 1059347843,
+ -1137150312,
+ 1041151788,
+ 1065480904,
+ 1082871750,
+ 1077928232,
+ -1080798848,
+ -1096480843,
+ 1043814536,
+ -1091853688,
+ -1083580812,
+ -1086276838,
+ 1076784946,
+ -1120795612,
+ -1106752746,
+ -1073596733,
+ 1061285760,
+ -1097265948,
+ -1098804871,
+ -1129917644,
+ 1075017064,
+ 1065604638,
+ -1069356686,
+ -1080614681,
+ -1099988799,
+ 1049641120,
+ 1040423940,
+ -1091442821,
+ 1060020096,
+ 1032790390,
+ -1114597615,
+ 1012268192,
+ -1108519762,
+ 1046797086,
+ 1033708897,
+ 1039129778,
+ 1038726421,
+ 1043153820,
+ -1142008527,
+ -1136784122,
+ -1083614921,
+ 1036266979,
+ 1075766245,
+ 1021621682,
+ -1092847361,
+ -1080610933,
+ 1055933966,
+ 1047937868,
+ -1111723827,
+ -1105482073,
+ 1035450752,
+ -1114790268,
+ 1047805589,
+ -1105890267,
+ 1049195277,
+ 1027929368,
+ 1050592500,
+ -1096094826,
+ -1096454433,
+ -1153026270,
+ -1091733587,
+ 1044984589,
+ -1117553538,
+ 1046224506,
+ 991391852,
+ 1033852518,
+ 1007440138,
+ -1116380979,
+ -1114694037,
+ 1030143406,
+ 1049606146,
+ -1111122136,
+ 1045604710,
+ 1046365980,
+ 1078239591,
+ 1038380082,
+ 1047744829,
+ -1102188114,
+ 1026159600,
+ -1098440008,
+ 1074638088,
+ -1122822034,
+ 1048797602,
+ 1057201470,
+ 1067614496,
+ 1079378854,
+ -1089267293,
+ 1063294316,
+ 1043692236,
+ 1028025728,
+ -1121920755,
+ -1095571863,
+ 1076738374,
+ -1120807555,
+ 999125231,
+ -1107197460,
+ 1042955267,
+ -1113933445,
+ 1026563040,
+ 1050414338,
+ 1050262156,
+ 1061357286,
+ -1116489390,
+ -1120862924,
+ 1035976754,
+ 1004983080,
+ -1129664245,
+ -1108070843,
+ 1054627697,
+ 1035953146,
+ 1024000183,
+ -1099730729,
+ 1020266571,
+ 1050649735,
+ 1037625762,
+ 1073136027,
+ -1115183678,
+ -1108596886,
+ -1095420589,
+ -1110908824,
+ 1049009843,
+ -1097157612,
+ -1106142932,
+ 1041924646,
+ 1067008080,
+ -1131796483,
+ -1087991497,
+ 1026719933,
+ -1139663232,
+ -1096161133,
+ -1118738392,
+ 1042742170,
+ 1041409952,
+ 1003519884,
+ -1097998285,
+ 1041120168,
+ -1084550656,
+ 1008948200,
+ 1049273181,
+ -1095730157,
+ 1046918092,
+ -1132748003,
+ -1097472286,
+ -1117535563,
+ 1041421007,
+ -1104465758,
+ -1099594535,
+ 1044516018,
+ 1045640538,
+ -1113375230,
+ -1103078709,
+ -1104401802,
+ -1060962935,
+ -1093593469,
+ 1059333894,
+ -1107339316,
+ 1050713471,
+ 1049127649,
+ -1087348447,
+ -1095067496,
+ -1079662087,
+ -1090292883,
+ 1064292680,
+ 1082176310,
+ -1096419465,
+ -1085365514,
+ 1054321934,
+ 1067051600,
+ 1041961381,
+ 1039225198,
+ 1033767781,
+ 1082015490,
+ -1091843100,
+ 1062801719,
+ -1123750511,
+ -1138001791,
+ 1032292274,
+ 1016439434,
+ -1172354176,
+ -1103697441,
+ 1044982612,
+ -1102645420,
+ 1032158610,
+ -1097155008,
+ -1118913357,
+ 1023704189,
+ -1153747839,
+ -1103869704,
+ 1063932412,
+ 1029483062,
+ 1032910664,
+ -1114522025,
+ -1130581966,
+ 1046705753,
+ 1041000189,
+ 1066644846,
+ 1018648740,
+ 1039339382,
+ -1097978108,
+ -1070241245,
+ -1101839343,
+ -1093511938,
+ -1097998556,
+ -1111822546,
+ 1085467699,
+ 1026380238,
+ -1104582862,
+ -1089342893,
+ 1031933087,
+ -1110641883,
+ -1108616903,
+ 1027142951,
+ 1040847367,
+ -1123201448,
+ 1029604926,
+ 1035681286,
+ -1112728041,
+ -1144404148,
+ 1040640819,
+ -1128401168,
+ 1057730239,
+ 1032186954,
+ -1109602776,
+ -1097978738,
+ 1045082517,
+ -1112654090,
+ 1023940919,
+ 1055125694,
+ 1046308411,
+ 1017244208,
+ -1112592590,
+ -1094637620,
+ -1135612618,
+ -1106212740,
+ -1121402741,
+ -1113983482,
+ 1044479138,
+ 1014339208,
+ -1096740567,
+ 1053670407,
+ -1102133501,
+ -1114465610,
+ 1073094087,
+ 1074231509,
+ 1040845423,
+ 1037219027,
+ -1098192676,
+ 1058569595,
+ -1098103097,
+ -1095450515,
+ 1061168047,
+ -1129086100,
+ 1056208494,
+ -1067422008,
+ -1062531727,
+ 1044505662,
+ -1089045496,
+ -1130116506,
+ 1079581946,
+ 1052657340,
+ -1074971461,
+ -1076736916,
+ -1091737464,
+ 1067288956,
+ 1065745424,
+ 1037136683,
+ -1099866656,
+ 1083797940,
+ -1076465094,
+ -1097304562,
+ -1081943183,
+ 1074336768,
+ -1079717683,
+ -1100752079,
+ 1073843764,
+ -1106650010,
+ -1104296084,
+ 1035763240,
+ -1112467894,
+ 1052002853,
+ -1079903903,
+ 1060984976,
+ -1121234236,
+ -1101933751,
+ 1057898022,
+ -1064364352,
+ 1053127743,
+ 1046157899,
+ 1064924298,
+ -1118399159,
+ 1054774036,
+ -1095872295,
+ -1114838646,
+ 1083746977,
+ 1045839431,
+ 1041441966,
+ 1060894422,
+ -1097710819,
+ -1080120815,
+ 1043996308,
+ -1089289613,
+ -1094677705,
+ 1056814741,
+ -1132112333,
+ -1096088071,
+ 1024167686,
+ -1070549094,
+ -1111577886,
+ 1040825750,
+ 1080502837,
+ -1081968178,
+ -1060502714,
+ 1049174873,
+ -1088382260,
+ -1107179080,
+ -1101041901,
+ 1033142471,
+ -1119869204,
+ -1114383287,
+ -1084812316,
+ 1059558562,
+ -1103489396,
+ -1096533944,
+ 1050275514,
+ 1055115036,
+ 1027523263,
+ -1067016118,
+ -1111669635,
+ -1097984476,
+ 1017137404,
+ 998926074,
+ -1059192628,
+ 1053397070,
+ -1093654978,
+ -1089198085,
+ -1105621616,
+ -1077228236,
+ -1092194636,
+ 1073973786,
+ 1069506468,
+ -1079769581,
+ -1086284050,
+ 1059280797,
+ 1066026340,
+ 1058919823,
+ 1032504205,
+ -1131177853,
+ 1071347168,
+ -1113883567,
+ 1048935414,
+ 1015059818,
+ -1106159995,
+ -1102248646,
+ -1106385043,
+ -1101870598,
+ 1032729385,
+ 1049278223,
+ 1046258510,
+ -1084682746,
+ -1095448370,
+ -1093002821,
+ 1015740095,
+ 1031542712,
+ -1091802945,
+ 1049379104,
+ -1139122912,
+ 1053655202,
+ -1068570085,
+ 1045773591,
+ -1113640200,
+ 1069497917,
+ 1067737582,
+ 1051238633,
+ -1071275113,
+ 1070917396,
+ 1056977899,
+ 1073815233,
+ -1105571216,
+ -1051968693,
+ -1112451252,
+ -1086510633,
+ 1056824376,
+ -1139640639,
+ 1035223860,
+ -1132310236,
+ 1054473346,
+ 1047314472,
+ 1035032361,
+ -1119664671,
+ 1044191902,
+ -1107142543,
+ 1060307588,
+ -1097964197,
+ 1048950448,
+ -1111460763,
+ -1116082332,
+ 1038854133,
+ -1072852368,
+ 1023898172,
+ -1104335899,
+ 1090920703,
+ -1114862554,
+ 1046330102,
+ 1049597756,
+ 1058814307,
+ 1071502403,
+ 1032549421,
+ 1042820165,
+ 1045269170,
+ -1099020760,
+ -1093649008,
+ -1101934344,
+ 1037711174,
+ -1113716179,
+ -1114985058,
+ -1093874974,
+ 1058874181,
+ -1116560551,
+ 1051989589,
+ -1097179241,
+ 1010176853,
+ -1110685542,
+ 1066510341,
+ -1095783857,
+ 1027268737,
+ 1051028128,
+ -1118938058,
+ 1046223745,
+ 1077127978,
+ -1062203306,
+ -1095071753,
+ -1123778221,
+ 1042661923,
+ 1039017644,
+ -1099516216,
+ 1034066287,
+ 1045164678,
+ 1050891622,
+ -1072584438,
+ -1087116935,
+ -1127743258,
+ -1100999111,
+ -1106171467,
+ -1080376539,
+ 1040266004,
+ 1041038860,
+ -1083313167,
+ -1100860432,
+ -1106070658,
+ -1086617880,
+ 1072159619,
+ 1066137902,
+ -1080687242,
+ 1048442842,
+ -1179254336,
+ 1073965129,
+ 1034690304,
+ -1117828854,
+ -1129386888,
+ 1075215199,
+ -1104724990,
+ 1044665618,
+ 1045351858,
+ 1067926581,
+ -1094438352,
+ 1048794241,
+ -1094318394,
+ 1051789365,
+ -1088196240,
+ 1050927398,
+ 1031092900,
+ -1097000008,
+ 1041539763,
+ 1066722614,
+ -1097076672,
+ 1054018859,
+ 1043773891,
+ 1057491760,
+ 1045111815,
+ 1034416147,
+ -1104176302,
+ 1039977063,
+ -1113702492,
+ 1026664324,
+ -1120975133,
+ -1109362535,
+ 1052147431,
+ -1079827834,
+ -1134287145,
+ -1110376399,
+ -1106309420,
+ 1044271324,
+ -1100782234,
+ -1083460469,
+ -1088607100,
+ 1015447693,
+ 1031901326,
+ -1097574959,
+ 1051200607,
+ 1055411526,
+ 1051955489,
+ 1052717886,
+ 1068863700,
+ 1042339497,
+ -1103492484,
+ -1106670504,
+ -1094179326,
+ 1044896027,
+ 1050649624,
+ -1082059766,
+ -1121319629,
+ 1024510265,
+ -1113475335,
+ 1059370703,
+ -1106140955,
+ -1079912584,
+ 1045966335,
+ 1034709660,
+ -1094918574,
+ -1082374366,
+ 1031782616,
+ -1077607172,
+ -1087640684,
+ 1052368082,
+ -1088110374,
+ -1100046990,
+ -1123025974,
+ -1111338782,
+ -1104814607,
+ -1098423583,
+ 1024772918,
+ 1050081804,
+ 1041358855,
+ 1026507906,
+ 1047694933,
+ 1057110925,
+ -1083882318,
+ -1100653929,
+ 1046039044,
+ -1100614993,
+ 1025808432,
+ -1080855680,
+ -1111052706,
+ 1042714326,
+ -1111963405,
+ -1109790140,
+ -1076024916,
+ -1083480442,
+ -1112870197,
+ 1063731183,
+ 1035025260,
+ -1135516598,
+ -1131958046,
+ -1099370418,
+ -1095524867,
+ -1104207077,
+ 1031017151,
+ 1044681596,
+ -1094980579,
+ -1080761460,
+ -1107846337,
+ -1098057880,
+ 1029872329,
+ -1091203961,
+ 1056019413,
+ 1025097310,
+ -1105812803,
+ -1140473668,
+ -1101191592,
+ 1051664216,
+ 1055594987,
+ -1117451824,
+ 1057936259,
+ -1052165465,
+ -1087861934,
+ -1096313100,
+ -1076016584,
+ -1096946313,
+ 1063469637,
+ 1077808731,
+ -1082651089,
+ -1074713799,
+ 1052325739,
+ -1106042884,
+ -1112513665,
+ 1041408487,
+ -1104871098,
+ 1088751753,
+ -1090182330,
+ 1055495150,
+ -1077017047,
+ -1092478591,
+ -1098332080,
+ -1086750560,
+ 1064535604,
+ 1057988369,
+ -1082573228,
+ -1092792099,
+ 1062925248,
+ 1066432504,
+ -1105976949,
+ -1128293664,
+ 1033079569,
+ 1077359064,
+ -1106944162,
+ 1058090631,
+ -1095874246,
+ -1101548746,
+ -1094515052,
+ 1010756008,
+ 1044815464,
+ -1092319626,
+ 1049560143,
+ 1042420885,
+ 1041340533,
+ -1104087382,
+ 1040942862,
+ -1087510896,
+ -1105704094,
+ -1120060650,
+ -1072698314,
+ -1109633863,
+ 1030977992,
+ -1097866886,
+ -1096359072,
+ -1105801835,
+ 1031922871,
+ 1069522226,
+ 1068218869,
+ 1064015033,
+ -1088809311,
+ 1040482952,
+ -1109814799,
+ 1034322262,
+ 1034057290,
+ -1085228821,
+ 1054291679,
+ -1105707888,
+ 1042505441,
+ -1073198546,
+ 1061728755,
+ -1103782539,
+ 1045187643,
+ -1101748360,
+ 1067303247,
+ -1121254141,
+ -1091085846,
+ -1095324418,
+ 1019914295,
+ -1110798141,
+ 1018740467,
+ -1080076869,
+ 1040643577,
+ -1089176483,
+ 1060125533,
+ 1068798206,
+ -1065460687,
+ 1027462892,
+ 1047935899,
+ -1101284506,
+ -1113437083,
+ -1096793088,
+ 1043564588,
+ -1086404633,
+ 1055282566,
+ 1069928662,
+ -1097380741,
+ 1028639919,
+ 1054757612,
+ -1105626801,
+ -1088824734,
+ 1018115294,
+ -1057282814,
+ -1086180102,
+ 1031740724,
+ 1064334097,
+ 1043662229,
+ -1084729315,
+ 1058010322,
+ 1064434190,
+ 1049256501,
+ 1036833778,
+ -1110294183,
+ 1102520808,
+ -1125883300,
+ 1051360035,
+ 1065641062,
+ -1113519747,
+ 1016471224,
+ -1102919034,
+ -1107025373,
+ -1143848204,
+ 1045304934,
+ -1113942279,
+ 1042238648,
+ 1042177617,
+ 1046344287,
+ 1035907492,
+ -1138763462,
+ -1135214067,
+ -1106224370,
+ 1033999925,
+ -1089007179,
+ 1066391589,
+ 1047540654,
+ 1071026907,
+ 1086139419,
+ 1066190758,
+ 989913944,
+ 1041972710,
+ 1042122040,
+ 1068982701,
+ -1073267522,
+ 1065355820,
+ 1078687427,
+ 1052185526,
+ -1115586080,
+ -1092157660,
+ -1109651691,
+ -1101688213,
+ 1030024320,
+ 1025811052,
+ -1106368908,
+ 1043278567,
+ -1097985914,
+ 1047946781,
+ -1074764627,
+ -1106511321,
+ -1063762067,
+ 1036390717,
+ 1069886139,
+ -1095435010,
+ 1057003812,
+ -1101443109,
+ -1121365002,
+ -1115115521,
+ -1112551763,
+ 1028408105,
+ 1020719308,
+ -1098647785,
+ 1068179037,
+ -1135127949,
+ 1048222351,
+ -1101798783,
+ 1065492612,
+ -1110953074,
+ -1100202379,
+ -1118545196,
+ 1056604854,
+ -1159102376,
+ -1109903855,
+ -1119201408,
+ -1119153632,
+ -1137591912,
+ 1048169270,
+ 1032430338,
+ 1034758462,
+ -1094330559,
+ 1067262478,
+ -1081779643,
+ 1063924587,
+ 1039384358,
+ 1058808312,
+ 1051207305,
+ 1052088697,
+ -1121944519,
+ -1077341522,
+ -1096695519,
+ -1089514639,
+ -1089237587,
+ 1068567020,
+ 1084670569,
+ -1066628764,
+ -1083538017,
+ -1108724879,
+ 1069342412,
+ -1106719362,
+ 1016197408,
+ 1042183515,
+ 1051767767,
+ -1104766450,
+ 1045958446,
+ -1094372447,
+ 1026000832,
+ -1082605548,
+ -1097468897,
+ 1045199926,
+ 1044085416,
+ -1090415199,
+ -1098294453,
+ 1044526094,
+ 1050384655,
+ 1023628064,
+ -1100865916,
+ -1078040485,
+ 1050711748,
+ -1086836926,
+ 1061885010,
+ -1113221797,
+ 1043465252,
+ -1088067014,
+ -1099767807,
+ 1032786663,
+ -1088460042,
+ -1090131113,
+ 1059524169,
+ -1075687938,
+ -1093067773,
+ 1048216075,
+ 1019741785,
+ -1103857132,
+ -1080782851,
+ -1094274025,
+ -1091574030,
+ 1055153955,
+ -1129457544,
+ 1041518177,
+ -1108232315,
+ -1115828116,
+ -1112340264,
+ -1103535292,
+ -1106212470,
+ -1102175532,
+ -1109211847,
+ 1016682236,
+ -1130716340,
+ 1028363560,
+ -1100277528,
+ -1083557477,
+ 1054628975,
+ -1144541884,
+ -1102676486,
+ 1049426305,
+ 1056526020,
+ -1104898594,
+ -1097792273,
+ -1118298461,
+ -1097617641,
+ -1104090432,
+ -1099026858,
+ 1022905060,
+ -1081757523,
+ -1071782371,
+ -1110646486,
+ 1043943815,
+ 1016595900,
+ -1098052581,
+ -1111029962,
+ -1092754333,
+ -1104650305,
+ 1033265564,
+ -1106611753,
+ 1031192857,
+ -1108196290,
+ 1054902078,
+ -1103329200,
+ 1021782134,
+ -1093360242,
+ -1152279012,
+ -1088284901,
+ -1114723494,
+ 1074889339,
+ -1100454734,
+ 1022363638,
+ -1121424374,
+ -1114305424,
+ 1041305723,
+ -1120488653,
+ -1149114025,
+ 1057868538,
+ 1042812650,
+ 1049468597,
+ 1040277486,
+ -1089593599,
+ -1107007202,
+ 1037656113,
+ 1054620501,
+ -1064774508,
+ 1048315268,
+ 1042044168,
+ -1105334446,
+ -1103230173,
+ -1090387219,
+ 982528480,
+ -1113889597,
+ 1048719235,
+ 1033459820,
+ -1090259316,
+ 1032988030,
+ -1131086930,
+ 1060062502,
+ -1112005671,
+ 1040287466,
+ -1076291491,
+ 1053786651,
+ 1056702608,
+ 1021940289,
+ 1049113784,
+ -1066443617,
+ -1103494375,
+ -1115863930,
+ -1136799488,
+ -1087993047,
+ -1077215405,
+ -1123360312,
+ -1117488893,
+ -1080691538,
+ -1144327042,
+ -1077216501,
+ 1071034597,
+ -1116847375,
+ -1070986943,
+ 1069743315,
+ 1026058492,
+ 1025438728,
+ 1038590701,
+ -1120213671,
+ -1095800355,
+ 1060255774,
+ -1080151109,
+ 1056970875,
+ -1086306989,
+ -1114282162,
+ 1054598390,
+ 1061623709,
+ -1077688878,
+ 1057107855,
+ -1083265044,
+ 1059155853,
+ -1105386021,
+ 1068221427,
+ -1096348913,
+ 1074838269,
+ 1068713598,
+ 1042630074,
+ -1102684139,
+ 1066146082,
+ 1054083433,
+ -1105707637,
+ -1101533515,
+ -1078305699,
+ -1085781589,
+ 1046100171,
+ -1073038571,
+ 1078282369,
+ -1083440158,
+ 1038813678,
+ 1049101925,
+ 1066560449,
+ 1050873457,
+ 1070387153,
+ 1032814391,
+ 1058081700,
+ 1058287933,
+ 1060870696,
+ 1060585257,
+ 1021640235,
+ -1064726187,
+ -1083735110,
+ -1083286707,
+ -1102293006,
+ 1050955345,
+ 1055736686,
+ -1119474343,
+ 1050085822,
+ -1140591218,
+ 994061368,
+ -1093449937,
+ -1106624979,
+ 1040842267,
+ 1079611273,
+ 1040625646,
+ 1074960591,
+ -1081595318,
+ -1087487008,
+ -1084207993,
+ -1086268540,
+ -1092503578,
+ 1055680820,
+ 1060911937,
+ -1081329640,
+ -1098867892,
+ 1056382888,
+ 1040312233,
+ -1107030053,
+ -1081419030,
+ -1093519303,
+ 1055117760,
+ -1101270781,
+ 1060510450,
+ 1051381383,
+ -1116151218,
+ -1101987856,
+ -1120327394,
+ 1042822671,
+ 999930816,
+ 1065642983,
+ 1075020137,
+ -1064515132,
+ -1078399069,
+ 1053029813,
+ -1093860790,
+ -1085929067,
+ -1088621951,
+ 1084058837,
+ -1102548981,
+ 1038543223,
+ -1081436922,
+ 1049583389,
+ 1041931140,
+ -1163385068,
+ 1047688448,
+ 1069046426,
+ -1089489688,
+ -1084013931,
+ -1080114557,
+ -1155689352,
+ -1087166984,
+ -1110218761,
+ 1021377867,
+ -1099145306,
+ -1087484905,
+ -1074629779,
+ 1043570942,
+ -1101928006,
+ 1055947645,
+ -1064364012,
+ -1073937192,
+ 1041340513,
+ -1088424190,
+ -1068086951,
+ -1086998808,
+ -1095131018,
+ 1031389424,
+ -1077573808,
+ -1077312019,
+ -1072301452,
+ 1068512505,
+ -1087374540,
+ -1088856487,
+ 1058413661,
+ -1104207084,
+ -1104462524,
+ 1069138556,
+ 1041048044,
+ 1075904816,
+ -1079099432,
+ -1090213347,
+ -1094790200,
+ -1093715360,
+ -1089177860,
+ -1085045723,
+ -1098822572,
+ 1050772843,
+ 1057084755,
+ -1086702285,
+ 1054774667,
+ -1102495130,
+ 1004113411,
+ 1046459425,
+ 1090762496,
+ 1035914882,
+ -1094090470,
+ -1081216220,
+ 1062401813,
+ 1041783312,
+ 1029970156,
+ -1101882336,
+ 1049834620,
+ 1058068482,
+ -1083437109,
+ 1040603949,
+ 1020426122,
+ -1111421049,
+ 1058284163,
+ -1091888623,
+ 1048398839,
+ 1044502887,
+ -1120674962,
+ 1036556962,
+ 1053076148,
+ -1097885394,
+ -1127031508,
+ 1053376810,
+ 1058479600,
+ -1064976341,
+ 1011958810,
+ -1085954816,
+ 1064055442,
+ 1024528785,
+ 1062008606,
+ 1074100087,
+ 1066722220,
+ 1078826432,
+ -1094281540,
+ 1054196716,
+ 1032208428,
+ -1089863538,
+ -1093489795,
+ -1086426092,
+ 1076544562,
+ -1083666740,
+ -1123392245,
+ 1046363283,
+ 1012150490,
+ 1045535421,
+ 1074979147,
+ 1074766689,
+ -1107401134,
+ 1025231078,
+ 1041604626,
+ 1058747559,
+ -1078873659,
+ -1097191827,
+ -1112017505,
+ 1047474415,
+ 1058023215,
+ -1063225199,
+ -1100296221,
+ -1107009693,
+ -1101238878,
+ 1040686337,
+ -1087784548,
+ -1082169969,
+ 1049148712,
+ 1074325422,
+ -1064787515,
+ -1083014586,
+ 1040517690,
+ -1105277421,
+ -1112452062,
+ -1125416254,
+ 1028710391,
+ 1013852066,
+ -1081986965,
+ -1083747441,
+ 1048744238,
+ -1113946568,
+ 1075188744,
+ 1070525883,
+ 1031858443,
+ -1087381608,
+ -1128359983,
+ 1042594144,
+ 1066515390,
+ -1083885761,
+ -1068676680,
+ -1107563280,
+ -1078350682,
+ -1089513526,
+ -1118172822,
+ 1041920251,
+ -1098047329,
+ 1046061006,
+ 1048739457,
+ -1090092842,
+ -1074260161,
+ 1050699109,
+ 1066258082,
+ -1081622183,
+ -1075132670,
+ -1106961637,
+ -1093300564,
+ 1038184035,
+ -1105885052,
+ 1053579110,
+ -1130378266,
+ -1134283841,
+ -1100397615,
+ -1115981048,
+ 1009261498,
+ -1088329107,
+ -1072762174,
+ 1053779847,
+ 1066921918,
+ -1070869349,
+ -1078104211,
+ -1093807783,
+ -1088970151,
+ 1059914296,
+ 1048129739,
+ 1058853571,
+ -1087078639,
+ -1095131245,
+ 1048653707,
+ -1104802210,
+ -1090409762,
+ 1044261773,
+ 1059539610,
+ -1097661566,
+ -1081174282,
+ 1048040328,
+ -1118427935,
+ -1107146088,
+ -1098456475,
+ -1077781251,
+ 1058736191,
+ 1050389565,
+ -1096411903,
+ 1035471220,
+ -1098923324,
+ 1007436053,
+ -1102200555,
+ -1087259794,
+ 1058844497,
+ 1042041002,
+ -1086504313,
+ -1081160652,
+ 1066999313,
+ -1088651398,
+ -1077738135,
+ -1082799807,
+ 1077961108,
+ 1034486585,
+ -1092007780,
+ -1109311176,
+ 1049404441,
+ -1095456401,
+ -1070720663,
+ 1042418628,
+ -1094644206,
+ -1099286532,
+ -1100905264,
+ 1044589678,
+ -1080048775,
+ 1048862452,
+ 1067084954,
+ 978634976,
+ -1090703981,
+ -1097044590,
+ -1074077315,
+ 1039282474,
+ -1098645960,
+ -1086492817,
+ 1046186586,
+ 1022952245,
+ -1117721551,
+ -1097585741,
+ 1023667086,
+ -1093050526,
+ -1075439504,
+ -1059024690,
+ -1092115159,
+ 1049070109,
+ 1064746073,
+ -1081563224,
+ -1098288658,
+ 1021503268,
+ -1117647479,
+ -1150841469,
+ -1097872092,
+ -1090059244,
+ -1073156631,
+ 1036246895,
+ 1063221391,
+ -1070051522,
+ -1078620339,
+ -1096704551,
+ -1086066286,
+ 1059919237,
+ 1052486517,
+ 1055431489,
+ 1045069942,
+ -1104708399,
+ 1022534038,
+ -1135723646,
+ -1123421323,
+ -1098878893,
+ -1112252984,
+ 1059434567,
+ -1070966283,
+ -1096656934,
+ 1059663270,
+ -1150976900,
+ 1011628514,
+ -1108845043,
+ -1093353595,
+ -1082082640,
+ 1050035584,
+ -1091368438,
+ 1029279737,
+ 1054727071,
+ -1089731419,
+ -1083904069,
+ 1036035678,
+ -1119422910,
+ 1050564938,
+ 1029971791,
+ 1018957670,
+ -1061135082,
+ 1053222185,
+ -1119546396,
+ 1046888289,
+ -1111836357,
+ -1086566381,
+ -1105411448,
+ 1053660504,
+ -1105982782,
+ -1114012008,
+ -1135616604,
+ -1104107103,
+ 1039884892,
+ 1041603934,
+ 1054962344,
+ -1107216307,
+ 1052963626,
+ -1092741274,
+ 1051020461,
+ -1102515213,
+ -1127591974,
+ 1060542359,
+ -1088274951,
+ 1067792997,
+ -1096808996,
+ 1070805012,
+ 1074669144,
+ 1067618473,
+ 1078788289,
+ 1052092567,
+ 1063911219,
+ 1053676632,
+ 1008113906,
+ -1112124864,
+ -1073498836,
+ -1095211312,
+ -1086003281,
+ 1058848877,
+ -1073276452,
+ 1071565291,
+ -1105974036,
+ 1048177056,
+ 1073320214,
+ 1079072598,
+ 1046168386,
+ 1059322493,
+ 1044768878,
+ 1050215138,
+ -1091696333,
+ -1088099624,
+ -1097004828,
+ -1083655114,
+ -1106624701,
+ -1063927784,
+ 1040159059,
+ -1089202594,
+ 1048804175,
+ 1076563441,
+ -1081631040,
+ -1080631019,
+ -1074492891,
+ 1035970563,
+ 1071255277,
+ 1064735702,
+ -1119238833,
+ -1093403187,
+ 1079480877,
+ -1081973818,
+ 1058296490,
+ 1076809948,
+ -1135580635,
+ -1095955591,
+ 1057799176,
+ -1075481450,
+ -1088784908,
+ -1084626588,
+ 1068164762,
+ -1070920375,
+ -1080364630,
+ -1095602000,
+ -1097049094,
+ -1097858295,
+ -1113057006,
+ -1108683760,
+ -1099739468,
+ -1097577252,
+ -1137452882,
+ -1159088756,
+ -1091787027,
+ -1077809991,
+ -1098057331,
+ 1033766380,
+ 1040894625,
+ -1093106623,
+ -1087391602,
+ -1092218276,
+ -1123859300,
+ 1045118674,
+ -1111403865,
+ 1057668305,
+ -1093239459,
+ 1036562356,
+ -1081529934,
+ -1096722646,
+ -1118539424,
+ -1103565932,
+ 1091237478,
+ -1094890230,
+ 1045506286,
+ 1019390438,
+ 1053541163,
+ 1031924657,
+ -1071699584,
+ -1074092135,
+ 1050097183,
+ -1092530648,
+ 1073911254,
+ 1050260954,
+ -1090747588,
+ 1069276769,
+ -1103947839,
+ 1040709151,
+ 1050947694,
+ -1090239971,
+ 1078302438,
+ 1076086000,
+ -1089207949,
+ -1113059450,
+ 1035715497,
+ 1011328498,
+ 1062194325,
+ 1040829469,
+ 1033547279,
+ -1134041160,
+ -1112382570,
+ -1120738699,
+ 1026786253,
+ 1035246655,
+ -1086626374,
+ 1038319041,
+ 1057381051,
+ -1115333070,
+ 1048761924,
+ 1051094867,
+ -1059968689,
+ 1035207794,
+ 1043830983,
+ 1044211614,
+ -1106211021,
+ 1042451792,
+ -1084034947,
+ 1059567085,
+ 1009662771,
+ 1056516006,
+ -1082892932,
+ 1021249426,
+ 1046660531,
+ 1049458923,
+ -1093842422,
+ 1032944398,
+ -1078411277,
+ -1089670356,
+ 1054040210,
+ -1093148310,
+ 1033124048,
+ 1047391813,
+ 1063411634,
+ 1065123025,
+ -1094780260,
+ 1055636478,
+ 1082306567,
+ 1060339562,
+ 1068393490,
+ -1131546692,
+ 1040300026,
+ 1041285256,
+ -1082700214,
+ -1080268847,
+ -1076743779,
+ -1097250505,
+ -1089758894,
+ 1055812962,
+ -1073630247,
+ 1046738243,
+ -1106538775,
+ 1053011131,
+ -1081448810,
+ 1079469754,
+ 1057164328,
+ 1050863660,
+ 1051816951,
+ 1062978315,
+ 1023987344,
+ 1060214216,
+ 1023464328,
+ 1042683198,
+ -1097697353,
+ 1063667676,
+ 1052695574,
+ -1080519961,
+ 1044510184,
+ 1044391354,
+ -1081910218,
+ -1090097904,
+ 1069841313,
+ -1061400606,
+ -1101263219,
+ 1043214598,
+ -1113762125,
+ -1121709895,
+ -1104707272,
+ 1059793032,
+ -1087344625,
+ -1104005290,
+ -1072718233,
+ 1022941213,
+ -1088036343,
+ -1077932528,
+ -1111953107,
+ 1044616552,
+ 1071379958,
+ -1115723260,
+ -1074288004,
+ -1078402557,
+ 1036231939,
+ 1040697180,
+ -1096936479,
+ 1045800857,
+ 1057473704,
+ -1095944258,
+ -1109317274,
+ -1099905481,
+ -1107475077,
+ 1045950125,
+ 1082629558,
+ -1087208697,
+ 1023595688,
+ 1058623368,
+ -1130859401,
+ -1102880744,
+ -1101202268,
+ -1080464601,
+ 1070391727,
+ -1092421463,
+ 1049704729,
+ -1091689147,
+ -1132831921,
+ 1050371674,
+ 1038904388,
+ -1087953126,
+ -1079529841,
+ 1038947934,
+ -1093515926,
+ -1063516773,
+ 1035470630,
+ -1084743680,
+ 1041190296,
+ 1065269370,
+ 1086996453,
+ 1059471782,
+ -1079485033,
+ -1094032790,
+ 1067053282,
+ -1057454671,
+ 1074287772,
+ -1104587865,
+ 1035138928,
+ 1051332492,
+ 1050380010,
+ 1051411572,
+ 1050975287,
+ 1043239463,
+ 1078123394,
+ -1089332205,
+ 1035551450,
+ 1042307927,
+ -1089154986,
+ 1040414764,
+ -1068923278,
+ 1073401311,
+ -1108867508,
+ 1052250354,
+ -1080230054,
+ 1027239769,
+ 1063368447,
+ -1096785651,
+ -1097894006,
+ 1031287900,
+ -1103942036,
+ -1106118231,
+ -1114783765,
+ 1061765579,
+ -1072477148,
+ -1111010687,
+ -1096109791,
+ 1046858986,
+ 1044017949,
+ 1025040006,
+ 1051357746,
+ 1060779470,
+ 1048769097,
+ -1121926305,
+ -1104991672,
+ 1048914712,
+ -1100444382,
+ -1100196098,
+ -1094832222,
+ 1042436138,
+ 1032240215,
+ 1020306676,
+ -1087675260,
+ -1113161926,
+ -1100728550,
+ -1110266198,
+ 1070475064,
+ 1067663401,
+ -1092270334,
+ -1087302179,
+ -1089838337,
+ 1036712510,
+ -1102749878,
+ -1087219692,
+ -1088475152,
+ 1061467054,
+ 1052043441,
+ -1129951534,
+ -1105445527,
+ -1101711751,
+ 1033952341,
+ 1058753786,
+ 1053430291,
+ 1085188845,
+ -1096385218,
+ 1071507316,
+ -1106741441,
+ -1089013821,
+ -1111135393,
+ -1097679347,
+ -1086726324,
+ -1076881663,
+ -1140034942,
+ -1095498970,
+ -1091302480,
+ -1097693923,
+ -1094743091,
+ 1049893297,
+ -1105833899,
+ 1057311247,
+ -1104462179,
+ 1060713290,
+ 1032001744,
+ -1088529794,
+ 1053205938,
+ 1050424000,
+ -1134676428,
+ 1070294285,
+ -1063993272,
+ -1076883289,
+ -1102920805,
+ 1072457608,
+ -1096071911,
+ -1092808923,
+ 1090723381,
+ 1066722129,
+ 1082782575,
+ -1080956700,
+ 1040431207,
+ -1090873842,
+ -1066053135,
+ -1085080784,
+ -1056740305,
+ -1087743925,
+ 1076474418,
+ -1101755208,
+ 1045840181,
+ -1089425895,
+ -1109495501,
+ 1043207603,
+ -1083851953,
+ -1074809209,
+ 1054337585,
+ 1065718430,
+ -1070373502,
+ -1075241237,
+ -1099975529,
+ -1086993843,
+ 1061350818,
+ -1151145104,
+ 1059708713,
+ 1006604424,
+ 1048152729,
+ -1112936784,
+ 1020134845,
+ -1103491697,
+ -1070529412,
+ 1077529577,
+ 1056407889,
+ -1086034553,
+ -1057457079,
+ 1054065994,
+ 1040348105,
+ -1072776928,
+ 1052353615,
+ 1085979700,
+ 1053912462,
+ -1084056406,
+ -1092723091,
+ 1058731302,
+ 1037981552,
+ -1095669415,
+ 1063224549,
+ -1096780390,
+ 1053763301,
+ -1092119763,
+ 1058915573,
+ -1088664874,
+ -1107171186,
+ -1073526758,
+ 1057978966,
+ 1065944966,
+ 1058334202,
+ -1095173975,
+ -1108666529,
+ 1064140367,
+ 1041084942,
+ 1050541034,
+ -1096634275,
+ -1094844936,
+ 1057451762,
+ 1058044390,
+ 1062111381,
+ -1095518263,
+ 1049290892,
+ 1031030184,
+ 1056170832,
+ 1073545760,
+ -1057131706,
+ -1094296520,
+ -1091768874,
+ 1072506057,
+ -1106432754,
+ -1098382399,
+ -1084323511,
+ 1085396225,
+ 1043576319,
+ -1102904245,
+ -1083319795,
+ -1103316872,
+ -1086492015,
+ -1087483117,
+ -1069227130,
+ -1088647131,
+ 1051497986,
+ -1108251259,
+ -1112687730,
+ -1081546339,
+ -1093463052,
+ 1050442565,
+ 1072657247,
+ -1083769760,
+ -1104380802,
+ 1064886481,
+ 1055507322,
+ 1060802572,
+ -1095173729,
+ -1155157402,
+ 1094615971,
+ -1081689268,
+ 1055455263,
+ -1124602770,
+ -1088631331,
+ -1077251231,
+ -1098200196,
+ 1058459289,
+ -1061502972,
+ -1090820838,
+ 1051861547,
+ -1075703266,
+ 1035777193,
+ 1044377255,
+ 1033150069,
+ 1055673800,
+ -1103282953,
+ -1084246178,
+ -1081821420,
+ -1097858027,
+ -1096643095,
+ -1094739414,
+ 1049060956,
+ 1022688388,
+ 1071347871,
+ 1069601398,
+ 1067908736,
+ -1125540288,
+ -1089491961,
+ -1086473176,
+ -1093090919,
+ -1106243181,
+ -1087677601,
+ -1073546101,
+ 1050495592,
+ 1036800908,
+ -1106805144,
+ 1062320147,
+ -1101568190,
+ 1065042644,
+ 1072865495,
+ 1065744948,
+ 1079347161,
+ -1095946298,
+ 1054807603,
+ 1053183241,
+ 1033970566,
+ -1105931435,
+ -1074160655,
+ -1107426517,
+ -1089237907,
+ -1082655148,
+ 1030370394,
+ -1103346274,
+ 1032313432,
+ 1056312466,
+ 1088683838,
+ -1086252531,
+ -1121709795,
+ 1058684283,
+ -1097976793,
+ -1101002198,
+ -1098599302,
+ -1072278629,
+ 1074740017,
+ -1088540543,
+ 1057076773,
+ 1041205108,
+ -1100981508,
+ -1119747878,
+ -1097454000,
+ 1039723284,
+ -1101651004,
+ 1023810744,
+ 1053783821,
+ -1093313451,
+ -1086539655,
+ 1043513795,
+ -1078452864,
+ -1106418037,
+ -1104985440,
+ -1096324864,
+ -1082658694,
+ -1073225044,
+ -1082358609,
+ 1075680230,
+ -1097181557,
+ -1072025691,
+ 1023842998,
+ 1055895899,
+ 1067648620,
+ -1073245720,
+ -1080610746,
+ -1096775654,
+ -1081611526,
+ -1100279739,
+ -1068996425,
+ 1059080934,
+ 1029614587,
+ -1074146570,
+ -1114338292,
+ -1080957099,
+ -1081982087,
+ 1073860220,
+ -1091868575,
+ -1101328787,
+ -1073800081,
+ 1066329418,
+ 1068799274,
+ 1073838155,
+ -1065202645,
+ -1089793084,
+ 1077564694,
+ -1090341883,
+ 1061334776,
+ 1032038502,
+ 1031272050,
+ -1165778336,
+ 1051562239,
+ 1036328740,
+ 1069638379,
+ 1048281413,
+ 1057443471,
+ -1090181698,
+ -1080562347,
+ 1029212198,
+ -1065435214,
+ -1097266534,
+ -1083856011,
+ -1099685383,
+ 1041987521,
+ -1105042659,
+ 1038821836,
+ -1111251434,
+ 1053042672,
+ -1093318835,
+ -1089040772,
+ -1075925199,
+ 1035538951,
+ 1065856278,
+ -1073952912,
+ -1073900187,
+ -1099681774,
+ -1086918522,
+ 1062370024,
+ -1110436973,
+ 1060318087,
+ -1084027081,
+ -1068816104,
+ 1066342155,
+ 1031252577,
+ -1089848033,
+ 1067902436,
+ 1030585588,
+ 1032216069,
+ 1061930346,
+ -1081369427,
+ 1037831893,
+ -1100939652,
+ -1080684484,
+ 1043316542,
+ -1079793048,
+ 1060194061,
+ -1172315120,
+ 1040411683,
+ -1098613260,
+ 1022194152,
+ 1052751985,
+ -1087598955,
+ -1074990859,
+ 1052327407,
+ 1061653786,
+ -1074136652,
+ -1075664750,
+ -1096977443,
+ -1087029056,
+ 1060327991,
+ 1054570249,
+ 1058773359,
+ 1074417795,
+ 1057865836,
+ -1059797830,
+ 1083387342,
+ 1069756706,
+ -1079701970,
+ -1074172006,
+ -1074246993,
+ 1067052129,
+ -1096745025,
+ -1065578626,
+ 1092776373,
+ 1094443328,
+ 1056892631,
+ 1075073941,
+ -1068521399,
+ -1080951911,
+ 1040340138,
+ -1098265623,
+ -1094670334,
+ 1066911766,
+ 1088244616,
+ -1088509675,
+ -1104988034,
+ 1061020372,
+ -1115885178,
+ -1099638654,
+ -1081564375,
+ -1071565879,
+ 1049977861,
+ -1080525591,
+ -1101700451,
+ -1076559418,
+ -1083520886,
+ 1071720638,
+ -1075591534,
+ -1082125312,
+ 1063432964,
+ 1054370445,
+ 1035411359,
+ -1071772195,
+ -1110612310,
+ -1072985382,
+ -1097895656,
+ 1064133001,
+ -1080047419,
+ 1055699512,
+ 1050008843,
+ 1048732097,
+ 1026366608,
+ -1083325783,
+ -1095139957,
+ -1123929692,
+ -1083823152,
+ -1090559409,
+ 1073509671,
+ -1064994210,
+ -1092686772,
+ 1056938533,
+ -1089569561,
+ -1102865778,
+ -1081005289,
+ 1051880080,
+ -1079216193,
+ 1065334459,
+ 1065308546,
+ -1079732848,
+ 1080631662,
+ 1033763718,
+ -1101744891,
+ -1128493598,
+ -1081586680,
+ 1058110723,
+ -1094634651,
+ -1112541847,
+ -1082076328,
+ -1126783154,
+ -1101873836,
+ 1070209117,
+ 1050368351,
+ -1081176050,
+ -1107832914,
+ 1046358156,
+ 1014780230,
+ -1071384973,
+ -1097017776,
+ 1041980173,
+ 1045672696,
+ -1100424164,
+ 1052741603,
+ -1106794172,
+ -1091407698,
+ -1095955670,
+ 1016421881,
+ -1111403134,
+ 1021637170,
+ -1096580653,
+ -1095278984,
+ 1049084723,
+ 1048748560,
+ -1090638059,
+ 1076004063,
+ 1067168468,
+ 1030388512,
+ -1098546675,
+ 1072516400,
+ -1111587816,
+ -1089715135,
+ 1059333821,
+ -1089898828,
+ 1076142098,
+ 1063403595,
+ -1128200688,
+ 1023945766,
+ 1042553137,
+ -1124954412,
+ 1024191183,
+ 1050704684,
+ -1088296928,
+ -1084214551,
+ 1069103608,
+ -1121889002,
+ 1043652690,
+ -1101447583,
+ -1096040769,
+ 1054342471,
+ -1097086635,
+ -1102053330,
+ -1104819127,
+ 1036498396,
+ -1100240982,
+ 1041441742,
+ -1131415068,
+ -1085609324,
+ -1073191592,
+ -1144455982,
+ 1067476444,
+ -1074334373,
+ -1075868943,
+ -1103232832,
+ -1086136585,
+ 1057790504,
+ -1106851119,
+ 1056362850,
+ 1050021897,
+ -1093686713,
+ 1031101228,
+ 1044809287,
+ 1019104561,
+ -1091229316,
+ 1044988328,
+ 1055847189,
+ -1097350623,
+ 1056923775,
+ -1094382724,
+ -1094978650,
+ -1077485551,
+ 1035929302,
+ 1063046765,
+ -1091809927,
+ -1083453763,
+ -1089874578,
+ 1052147378,
+ -1085327816,
+ -1088561115,
+ 1068362805,
+ 1075942249,
+ 1077055440,
+ -1081464256,
+ 1047230850,
+ -1081938448,
+ -1074369005,
+ -1082566850,
+ -1105669021,
+ 1070080298,
+ 1060924244,
+ 1060914023,
+ -1103895289,
+ 1024231768,
+ -1097619894,
+ -1108738610,
+ -1098211911,
+ 1042978540,
+ -1101129486,
+ 1024774085,
+ 1047652906,
+ -1096119728,
+ 1042719719,
+ 1057748205,
+ 1052295199,
+ 1019656094,
+ -1086444406,
+ 1061718234,
+ -1098132864,
+ -1112095602,
+ -1090259805,
+ -1089251898,
+ 1043367862,
+ -1121177480,
+ 1068880559,
+ -1080588832,
+ -1080796173,
+ -1085757384,
+ -1134376294,
+ -1097065108,
+ 1027726329,
+ -1091009964,
+ 1056335077,
+ -1075869227,
+ -1096312609,
+ 1053610293,
+ 1015968838,
+ 1082471283,
+ 1057238229,
+ -1115944090,
+ -1076103737,
+ -1119110862,
+ 1056687130,
+ 1070201866,
+ -1075393952,
+ -1085533074,
+ -1097628270,
+ -1077030758,
+ -1134517554,
+ 1065339855,
+ -1113062046,
+ -1126049056,
+ 1069525231,
+ 1047621839,
+ -1081762072,
+ -1084643224,
+ -1091678393,
+ 1062097323,
+ -1083992020,
+ -1095183870,
+ 1067457236,
+ 1066075302,
+ 1059842340,
+ 1061321944,
+ -1072418702,
+ -1138517444,
+ -1088933577,
+ 1040796077,
+ 1044381695,
+ 1063901715,
+ -1085435665,
+ 1059148431,
+ 1078874491,
+ -1072215103,
+ 1060712533,
+ 1067980193,
+ -1099614486,
+ 1043527088,
+ -1095459320,
+ 1073892704,
+ -1110885517,
+ 1058710770,
+ -1081847143,
+ 1061208730,
+ -1098689188,
+ 1058139214,
+ -1099441204,
+ -1097345294,
+ -1114304002,
+ 1058720040,
+ -1083699038,
+ 1012118298,
+ -1061289021,
+ -1070998997,
+ -1106351767,
+ -1091788093,
+ 1035033481,
+ 1036963302,
+ -1112847832,
+ -1070060596,
+ -1097213462,
+ -1072329917,
+ -1084698408,
+ -1087208197,
+ -1094559612,
+ -1068632608,
+ -1067017497,
+ -1119733552,
+ -1082198260,
+ -1074121800,
+ 1059568086,
+ 1059034994,
+ -1086785829,
+ -1106341192,
+ 1058041328,
+ 1042025266,
+ -1106153562,
+ 1033721377,
+ 1057370618,
+ -1082785876,
+ -1098307622,
+ -1085679876,
+ 1041262590,
+ 1053981171,
+ -1085116360,
+ 1033075374,
+ 1059339696,
+ 1067326250,
+ -1064982199,
+ -1103350865,
+ -1103226645,
+ -1105364306,
+ -1082487914,
+ 1044890337,
+ 1084511183,
+ -1083805307,
+ -1093119714,
+ 1066317031,
+ 1052124795,
+ 1052035662,
+ 1008843602,
+ -1088429766,
+ 1074445946,
+ -1089636553,
+ 1065850233,
+ -1110146130,
+ 1048969492,
+ 1046531797,
+ -1113245045,
+ 1033076962,
+ 1073935023,
+ 1054202697,
+ 1055314926,
+ -1090312474,
+ -1081637653,
+ -1119965972,
+ -1085248861,
+ -1078604267,
+ -1098020082,
+ 1055752670,
+ 1053266780,
+ -1138162704,
+ 1017771187,
+ -1124304587,
+ 1026703648,
+ 1055271401,
+ -1103581204,
+ 1023893561,
+ 1022419569,
+ -1097429751,
+ -1120698721,
+ -1080409269,
+ -1090167070,
+ 1061784756,
+ 1032190545,
+ 1060363522,
+ 1037140116,
+ 1037682082,
+ -1083720754,
+ 1048814394,
+ 1024026925,
+ 1058952410,
+ -1081659079,
+ 1027889332,
+ 1032938943,
+ -1122406745,
+ -1087648736,
+ 1053163078,
+ -1084751705,
+ -1071627190,
+ 1056423864,
+ 1053746767,
+ -1070830777,
+ -1115106256,
+ -1084265615,
+ 1078926189,
+ -1129895546,
+ 1061887016,
+ -1101227946,
+ 1023199165,
+ 1066839890,
+ 1063155064,
+ -1083238384,
+ 1043447123,
+ -1078654544,
+ -1097635443,
+ 1054270324,
+ 1072132815,
+ -1080306967,
+ -1095318209,
+ -1087145462,
+ -1080553188,
+ -1090863406,
+ 1055400074,
+ -1097861701,
+ 1060499448,
+ 1074221713,
+ -1080658034,
+ -1078909315,
+ -1088756315,
+ -1124733485,
+ 1025430326,
+ 1030622701,
+ 1066338488,
+ 1033271182,
+ 1061452841,
+ -1103303589,
+ 1020432068,
+ -1112593950,
+ -1101060978,
+ -1079407500,
+ -1091872404,
+ 1058751084,
+ -1087224744,
+ -1100080172,
+ 1039775739,
+ -1086750997,
+ -1107073969,
+ -1095960529,
+ -1081161980,
+ -1079464508,
+ 1066968550,
+ 1045340435,
+ -1110527038,
+ 1062222043,
+ -1088707402,
+ -1076770303,
+ -1087331334,
+ -1091261253,
+ -1096044961,
+ -1078147268,
+ -1087104832,
+ 1060152742,
+ -1096244398,
+ 1066470572,
+ -1106458313,
+ 1034077930,
+ -1101516648,
+ 1034114546,
+ -1101361450,
+ 1041673599,
+ -1093195996,
+ -1092215090,
+ -1071310593,
+ 1017177119,
+ 1068625780,
+ -1073927045,
+ -1076208532,
+ -1102159824,
+ -1088778985,
+ 1063492075,
+ 1039935666,
+ 1060684926,
+ -1074390804,
+ 1064637928,
+ 1068541583,
+ -1077589716,
+ -1099699596,
+ 1107934289,
+ 1068152882,
+ 1080184752,
+ -1097466401,
+ 1075719820,
+ -1087633518,
+ -1073627231,
+ 1028884967,
+ -1081100762,
+ 1052997655,
+ 1079756735,
+ -1138754338,
+ -1075667905,
+ 1066353970,
+ -1102703211,
+ -1115384042,
+ 1075464773,
+ 1066715118,
+ 1063482852,
+ -1102635924,
+ 1059224528,
+ -1119640042,
+ -1096482991,
+ -1109540933,
+ -1078042718,
+ -1123466528,
+ 1039665011,
+ -1102772035,
+ 1055328115,
+ -1097715079,
+ 1066823762,
+ -1106702957,
+ 1036411096,
+ 1030588645,
+ -1136413630,
+ 1056977498,
+ 1050974936,
+ -1088735221,
+ 1043650611,
+ 1074981547,
+ 1010211888,
+ -1106414910,
+ -1084307568,
+ -1116302865,
+ -1120249702,
+ -1101963321,
+ -1097111195,
+ -1118457408,
+ 1071001821,
+ 1049948670,
+ -1122962736,
+ 1061799543,
+ -1088228560,
+ -1098406185,
+ -1073215934,
+ -1081311131,
+ -1103947762,
+ -1090225750,
+ -1103175276,
+ 1057158663,
+ 1044698359,
+ 1053481128,
+ 1061465526,
+ -1078133618,
+ 1064087779,
+ -1084122198,
+ -1077811964,
+ -1090421349,
+ -1082725514,
+ -1124819532,
+ 1062484653,
+ 1068524509,
+ -1140209548,
+ -1113700341,
+ 1067009486,
+ -1086443757,
+ 1034759119,
+ -1065049479,
+ 1067255382,
+ -1087008393,
+ -1082320470,
+ -1121299632,
+ -1077419552,
+ -1078815504,
+ -1091513260,
+ -1092498726,
+ 1066167555,
+ 1085306251,
+ -1073694642,
+ -1088820891,
+ 1088790705,
+ -1080264753,
+ -1092002755,
+ -1095716721,
+ -1095242590,
+ -1073415692,
+ 1024129048,
+ -1108776420,
+ 1029992310,
+ 1068140425,
+ -1081643244,
+ -1085513083,
+ -1089441990,
+ 1062348875,
+ 1059941786,
+ -1095285624,
+ -1086890475,
+ 1052798751,
+ -1103471177,
+ -1110165482,
+ 1053298386,
+ 1060037824,
+ 1069232585,
+ 1072368498,
+ 1074325579,
+ -1094643514,
+ -1089011701,
+ -1094720745,
+ -1080363012,
+ 1082194541,
+ 1041954308,
+ 1076791675,
+ -1080827594,
+ 1056245082,
+ -1095309338,
+ 1058775007,
+ 1032282996,
+ 1044435428,
+ -1078385674,
+ 1049803477,
+ 1050111947,
+ 1065115629,
+ -1079272433,
+ 1048573653,
+ -1081663553,
+ -1076641866,
+ -1148780406,
+ -1087935174,
+ -1086405309,
+ -1077855917,
+ 1040317471,
+ -1088270683,
+ -1077551502,
+ 1077828300,
+ 1079763752,
+ -1096458326,
+ -1089683328,
+ 1080200441,
+ 1082453389,
+ 1048817306,
+ -1146756708,
+ 1044061615,
+ 1092079183,
+ -1087975737,
+ -1094773078,
+ 1042370976,
+ -1080554586,
+ 1063807294,
+ -1095561883,
+ 1045039598,
+ -1095969371,
+ 1069126713,
+ 1050994829,
+ -1105047029,
+ -1095223006,
+ 1014611638,
+ -1079488314,
+ -1060662945,
+ -1086801010,
+ 1049317159,
+ -1078240326,
+ 1046847186,
+ -1094432265,
+ 1031164794,
+ -1116675309,
+ -1112982560,
+ 1074660265,
+ 1056561975,
+ 1045758917,
+ -1100919034,
+ 1033553736,
+ -1101868185,
+ 1044393030,
+ 1049141899,
+ -1147261347,
+ 1063041917,
+ -1135791798,
+ 1058938059,
+ 1032565982,
+ 1040769791,
+ 1037608199,
+ 1052153541,
+ 1058764597,
+ -1140617146,
+ 1062477356,
+ 1034524054,
+ 1043804783,
+ 1054638300,
+ -1095172011,
+ -1083900726,
+ 1033601283,
+ 1041771834,
+ -1146771136,
+ 1061717829,
+ -1125690505,
+ -1098675622,
+ 1059911258,
+ -1089364302,
+ -1080991056,
+ -1090314718,
+ -1085660863,
+ -1077436242,
+ -1087079938,
+ -1084818846,
+ 1061000670,
+ -1092914124,
+ 1059492189,
+ -1114266934,
+ 1057363068,
+ -1084218738,
+ 1042470998,
+ 1035356196,
+ -1107063377,
+ 1036266956,
+ -1080451812,
+ 1049514405,
+ 1015227879,
+ -1095414699,
+ 1061486944,
+ -1085189654,
+ -1077933318,
+ 1066356213,
+ 1047522946,
+ 1055826025,
+ 1038304658,
+ 1031794544,
+ -1088173233,
+ 1050188113,
+ -1097872659,
+ -1121901655,
+ 1033486763,
+ 1073358258,
+ 1067664029,
+ 1046834137,
+ -1083402142,
+ -1103308663,
+ -1094716399,
+ -1095138929,
+ -1080321295,
+ -1072184325,
+ -1126935360,
+ -1073382269,
+ -1081480424,
+ -1123432899,
+ -1130992809,
+ -1092277327,
+ -1079053625,
+ 1081721953,
+ -1141467879,
+ 1064698887,
+ -1095135075,
+ -1086617661,
+ 1018941222,
+ -1109968121,
+ 1054728187,
+ 1054352853,
+ -1101194102,
+ -1096293945,
+ -1098322404,
+ -1096203804,
+ -1089379717,
+ 1041105977,
+ 1046906254,
+ 990179278,
+ -1123048885,
+ 1072789275,
+ -1092138418,
+ -1100462251,
+ 1037260550,
+ 1041588327,
+ 1058995072,
+ 1061626605,
+ 1064139425,
+ 1065636324,
+ -1096222604,
+ -1100932172,
+ -1097316689,
+ -1071549882,
+ -1078095726,
+ 1063463392,
+ 1058556929,
+ 1070774109,
+ -1115038827,
+ -1119003205,
+ -1084529251,
+ 1073632289,
+ 1046750049,
+ 1059163491,
+ -1062040554,
+ -1103060941,
+ -1090323135,
+ 1045984440,
+ 1042964504,
+ 1042711503,
+ 1041916303,
+ -1096181931,
+ 1059998524,
+ -1111522042,
+ -1093869952,
+ 1063034780,
+ -1076861621,
+ 1073456622,
+ 1030860822,
+ 1056268521,
+ -1092839751,
+ 1062687381,
+ -1095004919,
+ 1028536199,
+ -1110429960,
+ -1075035284,
+ -1079771017,
+ -1077343160,
+ -1079912074,
+ -1086789817,
+ -1077435434,
+ -1091417581,
+ 1061561615,
+ -1103934145,
+ 1061973445,
+ -1104940048,
+ 1060248497,
+ -1106230593,
+ -1107431806,
+ 1046890528,
+ 1030919308,
+ -1095628507,
+ 1026355018,
+ -1081620782,
+ 1030917676,
+ -1099757289,
+ 1047481998,
+ -1123758627,
+ -1098171046,
+ -1075721375,
+ 1062623907,
+ 1061999985,
+ -1102633247,
+ 1044163567,
+ 1060407199,
+ -1109279931,
+ -1085482279,
+ -1115618973,
+ 1047204417,
+ 1018764578,
+ 1059548225,
+ -1102890551,
+ -1056589294,
+ -1102925760,
+ 1047080040,
+ -1084057185,
+ -1075579325,
+ 1076840723,
+ 1050066673,
+ 1088859550,
+ 1025846257,
+ -1087831227,
+ 1043580844,
+ -1103284358,
+ -1089796974,
+ -1093519152,
+ -1114447723,
+ -1083456309,
+ -1096405765,
+ -1124509148,
+ 1052545180,
+ 1050537389,
+ -1098229324,
+ -1089734970,
+ -1098118373,
+ 1000737926,
+ -1125221227,
+ -1115191755,
+ -1088591394,
+ -1079671556,
+ -1080656902,
+ 1049665349,
+ 1072732302,
+ 1070909040,
+ -1108966448,
+ -1098469108,
+ -1095460900,
+ 1023453948,
+ 1031320581,
+ -1098126087,
+ 1059771327,
+ 1033803288,
+ 1047164128,
+ -1077729692,
+ -1105002078,
+ -1100535307,
+ 1048722878,
+ 1076891586,
+ 1046919384,
+ 1025235734,
+ -1070309466,
+ -1109047938,
+ -1088536412,
+ -1083411997,
+ -1110329597,
+ 1085095348,
+ 1061880442,
+ 1053155404,
+ -1100606009,
+ 1060351424,
+ -1112409095,
+ 1075164903,
+ -1107541227,
+ 1073064379,
+ 1067515178,
+ 1064821534,
+ 1059855784,
+ 1067009810,
+ 1051230670,
+ -1122522083,
+ -1074298595,
+ -1086126562,
+ -1085620903,
+ 1065648839,
+ -1109932216,
+ -1105438383,
+ 1032746351,
+ -1093193913,
+ -1070175728,
+ -1089374088,
+ -1080503676,
+ -1069837835,
+ -1086872453,
+ -1102401564,
+ 1056239549,
+ -1126355617,
+ -1090272973,
+ 1054032867,
+ 1067403802,
+ 1035145396,
+ 1053776853,
+ -1097854786,
+ 1038559624,
+ 991179568,
+ 1045094702,
+ -1075891852,
+ 1032231627,
+ 1065804762,
+ -1077389404,
+ -1072472372,
+ -1111236745,
+ -1087632621,
+ 1054501023,
+ -1095782627,
+ 1056031106,
+ 1068294417,
+ -1095625510,
+ -1090494360,
+ 1054283900,
+ -1090121099,
+ 1049255386,
+ 1037405036,
+ 1052378271,
+ 1066438216,
+ -1098088141,
+ -1081685976,
+ -1101814736,
+ -1075801749,
+ -1171258688,
+ 1071568787,
+ -1127765620,
+ -1105397564,
+ -1115228578,
+ -1094008384,
+ -1098934734,
+ 1056369164,
+ 1062631339,
+ 1043782050,
+ 1067194739,
+ 1056664401,
+ -1081765652,
+ 1054972195,
+ 1039752061,
+ -1122753413,
+ 1037949111,
+ -1100972468,
+ -1099776392,
+ -1094294309,
+ -1080875790,
+ 1045332672,
+ -1148205857,
+ -1091424366,
+ 1052625175,
+ -1077012362,
+ 1057398883,
+ 1031171760,
+ -1106205632,
+ -1101813547,
+ -1089069889,
+ -1075711234,
+ 1064962663,
+ -1129589298,
+ 1059670737,
+ -1127848826,
+ 1035720932,
+ -1102970840,
+ 1040837285,
+ -1107005618,
+ -1083443928,
+ -1076819055,
+ 1040225802,
+ 1066042055,
+ -1076564162,
+ -1080397970,
+ -1110483697,
+ -1086920079,
+ 1055494624,
+ -1093147187,
+ 1055822993,
+ -1101834991,
+ -1130563874,
+ -1088265302,
+ 1063720087,
+ 1018513490,
+ 1078491993,
+ 1069105744,
+ 1050210857,
+ -1084742767,
+ -1089287945,
+ -1099890380,
+ -1089181407,
+ -1081072954,
+ -1087030387,
+ 1057685494,
+ 1040765465,
+ -1086750408,
+ 1066212825,
+ -1098625692,
+ 1064044907,
+ -1064574008,
+ -1081250296,
+ 1058581568,
+ -1106795306,
+ -1096097364,
+ 1034028806,
+ -1082034821,
+ -1062796057,
+ -1072881250,
+ 1070554785,
+ -1076530262,
+ 1078332045,
+ 1060168774,
+ 1037918554,
+ -1096580413,
+ -1093268450,
+ -1087517667,
+ -1083771092,
+ 1048744983,
+ -1083080279,
+ 1071395705,
+ -1083055735,
+ -1096930838,
+ 1043421684,
+ -1076575758,
+ 1068647956,
+ 1048895396,
+ 1063154947,
+ 1054560350,
+ 1051617311,
+ 1038192438,
+ 1032929159,
+ -1113812216,
+ -1080549388,
+ -1121847790,
+ 1060501244,
+ 1044998931,
+ -1104345382,
+ 1036202058,
+ 1056977561,
+ 1052945120,
+ -1077339320,
+ -1088951242,
+ -1083136530,
+ -1089743871,
+ -1117073598,
+ 1015728602,
+ 1044633101,
+ 1077464605,
+ 1083805105,
+ 1063399359,
+ 1071355243,
+ -1096082636,
+ 1013233361,
+ 1051211244,
+ -1096554527,
+ -1096016276,
+ -1113875048,
+ 1022124168,
+ -1063427685,
+ 1061625998,
+ -1103895551,
+ 1046182156,
+ 1052864795,
+ -1081490724,
+ -1075772699,
+ -1084401788,
+ -1087220045,
+ -1090839033,
+ 1045895823,
+ -1081946755,
+ -1095988213,
+ 1030566285,
+ -1097271599,
+ 1065617486,
+ 1070497590,
+ -1099661471,
+ 1055596399,
+ -1090165723,
+ -1138900960,
+ -1097187712,
+ 1042898077,
+ -1111312831,
+ -1081616637,
+ -1112539722,
+ -1103877370,
+ 1065914784,
+ -1140006986,
+ 1032023297,
+ 1045755288,
+ -1083123494,
+ 1046514523,
+ -1093874497,
+ -1098608882,
+ 1053850966,
+ 1015672558,
+ -1122051443,
+ 1082943719,
+ -1101985394,
+ 1058349512,
+ -1089569774,
+ 1042326549,
+ -1095882953,
+ -1085101862,
+ -1083761273,
+ -1108932649,
+ 1059243068,
+ 1079999545,
+ -1097534600,
+ -1091509526,
+ 1059793159,
+ 1040225970,
+ 1055990635,
+ 1093050201,
+ 1058736671,
+ -1102194583,
+ -1096755329,
+ -1077660162,
+ 1048211227,
+ 1040268621,
+ -1089736132,
+ 1059714120,
+ -1066095200,
+ -1076841225,
+ -1128326682,
+ -1104205704,
+ -1098434380,
+ -1093188533,
+ -1081082359,
+ -1109407100,
+ -1094804183,
+ 1075230030,
+ -1071834026,
+ -1098025800,
+ -1117689641,
+ -1078365194,
+ 1052001416,
+ 1059879049,
+ 1032078421,
+ -1080413190,
+ 1058534854,
+ 1042879045,
+ 1061261749,
+ -1093981358,
+ 1032598978,
+ 1086754338,
+ 1039868144,
+ -1095418562,
+ -1110596885,
+ -1095738374,
+ 1068215220,
+ -1097875857,
+ -1066901161,
+ 1062236156,
+ -1073071441,
+ -1088197201,
+ 1065743664,
+ -1099416350,
+ -1112524159,
+ 1062853920,
+ -1084020478,
+ -1076467703,
+ -1089738011,
+ -1089502310,
+ -1120828034,
+ -1081263735,
+ -1083558729,
+ 1052221230,
+ -1092943814,
+ 1067316915,
+ 1040756871,
+ 1063637570,
+ -1079813858,
+ -1087656393,
+ -1097149792,
+ -1095548515,
+ 1059488034,
+ 1060588594,
+ 1028367364,
+ -1097669782,
+ -1111949720,
+ 1057312029,
+ 1063936079,
+ -1083351951,
+ 1065866437,
+ 1026965869,
+ 1028594057,
+ 1062215821,
+ 1076985310,
+ 1068656446,
+ -1063504953,
+ 1074287274,
+ 1040223436,
+ -1063114370,
+ -1141086876,
+ 1054502210,
+ -1122374906,
+ -1089868589,
+ 1054967267,
+ 1066947385,
+ -1079168091,
+ 1043226244,
+ 1061514399,
+ 1028938145,
+ -1087159145,
+ -1098537747,
+ -1122088176,
+ -1077926853,
+ -1133463471,
+ 1055206349,
+ -1103575402,
+ -1083323193,
+ 1044145389,
+ 1047475260,
+ 1053268945,
+ -1114702670,
+ -1076372667,
+ 1052511825,
+ -1091955006,
+ 1065852543,
+ -1077555402,
+ -1086647759,
+ 1057299992,
+ -1082534633,
+ -1080696818,
+ 1073858755,
+ 1050656659,
+ 1067070367,
+ -1063748947,
+ 1073392531,
+ -1076751204,
+ -1070356892,
+ 1060851785,
+ -1069043451,
+ 1051140977,
+ 1053037340,
+ -1077198631,
+ -1093327652,
+ -1099127962,
+ -1094384894,
+ -1088084102,
+ -1071796876,
+ 1085453446,
+ 1044245310,
+ -1087440586,
+ -1093134815,
+ 1060747772,
+ 1072105156,
+ -1081880032,
+ 1058297099,
+ 1066138325,
+ 1052291799,
+ 1040318157,
+ 1050852212,
+ -1096754546,
+ 1041031452,
+ -1113432246,
+ -1085005790,
+ -1074409826,
+ 1044165275,
+ 1065668372,
+ -1075242660,
+ -1076020758,
+ -1102375098,
+ -1095500207,
+ 1059650756,
+ -1105952028,
+ 1058000232,
+ 1045804184,
+ 1066581347,
+ 1054192791,
+ 1047277624,
+ -1089102536,
+ 1059979951,
+ -1073012864,
+ 1031486334,
+ -1097892908,
+ -1110844950,
+ 1035810910,
+ 1074286669,
+ 1060157092,
+ 1048760056,
+ -1075407166,
+ 1033858398,
+ 1050340890,
+ -1089277071,
+ 1073519087,
+ 1044261254,
+ 1074265372,
+ 1080428529,
+ 1067234084,
+ 1081899041,
+ -1081290290,
+ 1063763041,
+ 1062667144,
+ 1032294554,
+ 1054327354,
+ -1072485832,
+ 1067100250,
+ -1093187513,
+ -1112769654,
+ 1047374260,
+ -1103798265,
+ 1049994267,
+ -1095904358,
+ -1093996851,
+ -1075963071,
+ 1051053420,
+ 1066145041,
+ -1075924418,
+ -1077905731,
+ -1155087567,
+ -1089862167,
+ 1060744691,
+ -1102698077,
+ 1064800118,
+ 1068293814,
+ 1068447361,
+ -1074272402,
+ 1082928320,
+ 1061192720,
+ 1044962564,
+ -1091153036,
+ -1081650314,
+ 1063637969,
+ -1079902614,
+ -1120862986,
+ 1074547920,
+ -1089375575,
+ 1048933536,
+ 1070807677,
+ -1089115396,
+ 1049733883,
+ -1073275918,
+ 1054973377,
+ -1094434458,
+ 1051830075,
+ 1052004643,
+ 1074587417,
+ 1079065627,
+ -1074505071,
+ -1086917116,
+ 1072966465,
+ 1030980734,
+ 1059228561,
+ -1080325018,
+ 1076350400,
+ -1085805275,
+ -1145685056,
+ -1090093559,
+ -1087273144,
+ -1108690492,
+ 1036701196,
+ 1061535985,
+ 1071165521,
+ 1077300276,
+ -1076528312,
+ 1055509825,
+ -1090051414,
+ -1108757472,
+ 1042661093,
+ 1047853126,
+ 1057955247,
+ -1078081243,
+ -1087201057,
+ -1096893965,
+ -1083086488,
+ -1087365214,
+ 1066095432,
+ 1064029056,
+ -1071151552,
+ 1049303848,
+ 1059642111,
+ 1064778243,
+ 1060795370,
+ 1039129232,
+ -1085621976,
+ 1071138944,
+ -1078994185,
+ -1102355275,
+ -1121919577,
+ 1042937493,
+ -1091259583,
+ -1117671828,
+ -1118871619,
+ -1087872845,
+ -1074297985,
+ 1056504446,
+ 1065476398,
+ -1073077768,
+ -1077486788,
+ -1098297937,
+ -1086356735,
+ 1053471242,
+ -1102559384,
+ 1050559261,
+ -1100735640,
+ 1054001984,
+ -1098145198,
+ -1122383541,
+ 1023579656,
+ -1080124173,
+ -1074467096,
+ 1049279592,
+ 1067335683,
+ -1071831187,
+ -1076582048,
+ -1103926716,
+ -1093031139,
+ 1062673941,
+ 1046811223,
+ 1056772434,
+ -1100226685,
+ 1038324624,
+ -1097163128,
+ 1048247490,
+ 1046549600,
+ -1092288675,
+ -1073512726,
+ 1057057863,
+ 1068202848,
+ -1077574135,
+ -1074223565,
+ 1033404554,
+ -1087953484,
+ 1051586314,
+ -1120243107,
+ 1059499258,
+ -1078897745,
+ 1060866360,
+ -1107697596,
+ 1063183489,
+ -1093037920,
+ -1071294591,
+ -1093352389,
+ 1059712972,
+ -1075530952,
+ -1084442997,
+ 1057246149,
+ 1068799015,
+ 1044130035,
+ -1072878989,
+ -1078431159,
+ -1081683770,
+ 1042121781,
+ -1121634795,
+ 1041388799,
+ 1051320982,
+ -1095660679,
+ 1053038040,
+ 1057957445,
+ 1072394640,
+ -1057584908,
+ -1075135520,
+ 1062359393,
+ -1079820405,
+ -1074950768,
+ -1055480276,
+ -1072324129,
+ 1081099105,
+ 1063499743,
+ -1089015869,
+ 1036543031,
+ 1058111861,
+ -1089206833,
+ -1105932186,
+ -1088431660,
+ -1082386530,
+ -1094272423,
+ -1081366901,
+ -1079261155,
+ 1047037205,
+ -1090409077,
+ 1034923521,
+ -1114814792,
+ 1057087077,
+ 1070765140,
+ 1056425076,
+ -1106944366,
+ -1127000330,
+ 1057569990,
+ -1094676843,
+ -1102451545,
+ -1088681940,
+ 1060776510,
+ -1087625672,
+ -1097552923,
+ -1106960511,
+ 1074178260,
+ 1023927137,
+ 1080300820,
+ -1077903509,
+ -1082026558,
+ 1034443379,
+ 1055241964,
+ -1153532229,
+ -1081269222,
+ -1096128558,
+ 1053009963,
+ 1034100044,
+ -1090224165,
+ -1105458255,
+ -1095954501,
+ -1115023748,
+ -1103360444,
+ -1106524031,
+ 1054024752,
+ -1106866474,
+ -1121217050,
+ -1107268195,
+ -1090075821,
+ 1052551600,
+ -1096937071,
+ 1083910451,
+ 1036443823,
+ 1066923852,
+ -1100612254,
+ -1114022888,
+ -1098132110,
+ -1083973775,
+ 1057576744,
+ -1097430498,
+ 1074562786,
+ -1092977036,
+ 1052639048,
+ 1081096601,
+ 1061049548,
+ 1072826230,
+ -1072090914,
+ -1089107032,
+ -1061568794,
+ -1085509572,
+ -1077686417,
+ -1096374285,
+ 1027628952,
+ 1080117848,
+ -1091845116,
+ 1094524950,
+ -1069293504,
+ 1070546636,
+ -1082301014,
+ 1050428942,
+ 1093588164,
+ 1006651746,
+ -1093808750,
+ 1076584235,
+ 1058058544,
+ 1074274867,
+ -1102721393,
+ 1057467011,
+ -1092571878,
+ -1083843380,
+ -1086048897,
+ -1091094705,
+ -1089777941,
+ 1066454211,
+ -1096401339,
+ 1045042845,
+ -1096622292,
+ 1029964745,
+ -1092398852,
+ 1052947126,
+ 1061921791,
+ -1170682209,
+ 1037610959,
+ -1114735263,
+ -1059968261,
+ -1106008794,
+ 1056991867,
+ -1091366662,
+ 1023515659,
+ 1065130377,
+ -1089584449,
+ 1051368168,
+ -1066680736,
+ 1050948695,
+ -1125479416,
+ 1049294758,
+ -1111636528,
+ 1068063636,
+ 1066268362,
+ -1117585895,
+ -1079232403,
+ -1096460603,
+ -1084401137,
+ -1095707514,
+ 1064687535,
+ 1058264580,
+ -1097873393,
+ -1096991254,
+ 1034960614,
+ 1060265650,
+ -1104009368,
+ 1060169749,
+ 1047920366,
+ 1062843436,
+ -1055764073,
+ 1057668488,
+ 1041007138,
+ -1064716620,
+ -1106478686,
+ -1056620788,
+ -1073905273,
+ 1068845738,
+ 1073366862,
+ 1036489847,
+ -1097620347,
+ 1057089555,
+ 1020234297,
+ -1068054324,
+ 1067857389,
+ 1058776576,
+ -1070578433,
+ -1060721051,
+ 1034610535,
+ -1079638890,
+ -1096889744,
+ -1106128304,
+ -1084270833,
+ -1076023474,
+ -1079564153,
+ -1081486055,
+ 1043840488,
+ 1057059233,
+ 1079802769,
+ -1083143026,
+ -1091267868,
+ 1067711869,
+ 1073325558,
+ 1065664728,
+ -1068472532,
+ 1056253644,
+ 1076888139,
+ 1054512215,
+ 1071621384,
+ -1062392978,
+ -1091717544,
+ -1085287856,
+ -1089387794,
+ 1053481562,
+ 1047398467,
+ -1108471004,
+ 1059138759,
+ 1055284806,
+ -1103698505,
+ -1102132682,
+ 1053607304,
+ -1132051362,
+ -1108197488,
+ -1092538497,
+ -1105835537,
+ -1054882752,
+ 1043921306,
+ 1057490618,
+ -1103508108,
+ 1041108365,
+ -1054758024,
+ -1079084532,
+ -1117411170,
+ -1086401297,
+ 1066028208,
+ -1095102118,
+ -1114508668,
+ -1123009306,
+ -1093314744,
+ 1044800464,
+ -1105239506,
+ -1104566286,
+ -1078386862,
+ 1037788791,
+ -1102282864,
+ -1109581320,
+ -1093258847,
+ 1069331949,
+ 1062824541,
+ -1104524762,
+ -1096856944,
+ -1048746543,
+ -1079136416,
+ -1076947396,
+ -1093947459,
+ -1089868175,
+ 1066724529,
+ 1050888806,
+ -1088084023,
+ -1084041765,
+ 1052376304,
+ 1022327316,
+ -1101981906,
+ 1070224387,
+ 1050583838,
+ 1069310703,
+ -1089319219,
+ 1064583292,
+ -1088719889,
+ -1090121066,
+ 1064869802,
+ -1088962461,
+ 1062088720,
+ 1029271608,
+ 1052836620,
+ -1122485228,
+ -1087379015,
+ 1042283539,
+ 1077095868,
+ 1077663159,
+ -1094155306,
+ 1072905705,
+ -1118027818,
+ 1054121072,
+ -1084027595,
+ -1079359692,
+ -1071008836,
+ -1096906649,
+ 1053654226,
+ 1061456633,
+ 1038154526,
+ -1104854632,
+ 1065815718,
+ -1105583746,
+ -1120718840,
+ 1038334673,
+ -1095342387,
+ 1052778792,
+ -1065993867,
+ -1078562338,
+ -1083600453,
+ -1095076202,
+ -1089140705,
+ -1078103529,
+ 1034923114,
+ 1054173097,
+ -1056482975,
+ -1093398651,
+ 1068445034,
+ -1109963228,
+ 1058598951,
+ -1091280438,
+ -1081729158,
+ -1119122834,
+ -1106957273,
+ -1088824555,
+ -1085816048,
+ -1062699235,
+ -1090230148,
+ 1055960430,
+ 1061338623,
+ -1073062002,
+ -1068432676,
+ -1098558291,
+ 1048465556,
+ -1103769260,
+ -1094895232,
+ -1079585405,
+ 1064573208,
+ 1058650775,
+ -1088681948,
+ -1080681863,
+ 1035754834,
+ 1062423709,
+ 1015136750,
+ -1066744596,
+ -1092108342,
+ 1065067488,
+ 1059624839,
+ -1105888144,
+ 1048309480,
+ -1090037541,
+ 1032739746,
+ 1085423393,
+ 1068244262,
+ -1094897900,
+ 1067045629,
+ -1072158084,
+ 1052873586,
+ 1033419331,
+ -1083062288,
+ 1037938543,
+ -1086175292,
+ -1063970328,
+ -1104242052,
+ 1051480839,
+ 1051963692,
+ 1014670004,
+ -1111723872,
+ -1075830867,
+ -1077098272,
+ 1048829436,
+ 1064055613,
+ -1072460841,
+ -1076446728,
+ 989580576,
+ -1088634744,
+ 1067431388,
+ -1089908135,
+ 1054201644,
+ 1058993939,
+ -1098385018,
+ -1104206938,
+ -1096659146,
+ -1091904666,
+ -1073391801,
+ 1047647684,
+ -1105885981,
+ -1103414738,
+ -1090064057,
+ -1088669230,
+ 974766400,
+ 1041866100,
+ 1070343769,
+ 1059801483,
+ -1092333095,
+ -1100006276,
+ -1089724390,
+ 1046809224,
+ -1111562076,
+ -1094858811,
+ 1056987120,
+ -1095486264,
+ 1071087610,
+ 1074832658,
+ 1046673019,
+ 1065971528,
+ -1085739544,
+ 1057071055,
+ 1057928254,
+ -1097989083,
+ -1093573195,
+ -1134147898,
+ 1061626789,
+ 1027917142,
+ -1109934532,
+ -1087469179,
+ -1097606981,
+ -1089466972,
+ -1075560893,
+ 1056678890,
+ -1092914774,
+ -1080701456,
+ 1067408903,
+ 1061705534,
+ 1068803149,
+ 1058998407,
+ -1056493178,
+ 1039463204,
+ -1095176220,
+ 1046058865,
+ 1029223604,
+ 1060849669,
+ 1073591984,
+ 1060789682,
+ 1067216519,
+ -1109554637,
+ 1047406711,
+ 1049974620,
+ 1048949419,
+ -1107018999,
+ -1091146354,
+ -1098013319,
+ -1101746240,
+ 1057867233,
+ 1061316692,
+ -1119751743,
+ 1053753756,
+ 1056774677,
+ -1101243114,
+ 1059391160,
+ 1041562924,
+ 1061007427,
+ 1057621627,
+ -1093981752,
+ 1040424615,
+ 1075677130,
+ -1111578681,
+ -1117588405,
+ 1045268430,
+ -1088308985,
+ -1082390176,
+ 1058267487,
+ -1110731324,
+ -1079168045,
+ -1070422740,
+ 1077436031,
+ -1084631179,
+ -1081694456,
+ -1067277962,
+ -1072347014,
+ -1093222986,
+ -1084914545,
+ -1076550619,
+ -1078739753,
+ 1070693518,
+ 1044703964,
+ -1072990502,
+ -1113692037,
+ -1094153651,
+ -1090507482,
+ 1044832502,
+ 1057612081,
+ -1090668341,
+ 1060043039,
+ -1097770099,
+ -1080035826,
+ 1058891493,
+ 1039563368,
+ -1102751785,
+ 1073973430,
+ 1043968185,
+ -1102193664,
+ -1085267533,
+ -1093614722,
+ -1120168079,
+ 1040805238,
+ 1083484794,
+ 1057535244,
+ -1112488610,
+ 1068945729,
+ -1072183180,
+ -1104874060,
+ 1045523203,
+ 1048082409,
+ -1129171178,
+ -1081738841,
+ -1062930607,
+ 1066753538,
+ 1034942858,
+ -1103740449,
+ -1118374557,
+ 1016437637,
+ 1049987383,
+ 1060023903,
+ -1095378231,
+ 1060967421,
+ 1037313720,
+ 1055743064,
+ -1115682943,
+ -1104239841,
+ -1084832310,
+ -1079517476,
+ -1095376634,
+ -1081021082,
+ 1028646408,
+ -1104983035,
+ -1070700584,
+ 1049311367,
+ -1072181595,
+ -1078644504,
+ -1112377776,
+ 1069492182,
+ -1090632342,
+ -1089955633,
+ 1041784553,
+ -1102690036,
+ 1067110798,
+ 1064588910,
+ 1074275760,
+ 1063142171,
+ -1086699382,
+ -1063826046,
+ 1064272055,
+ 1058833164,
+ -1098519109,
+ -1079192578,
+ -1105868775,
+ 1061701842,
+ 1065795218,
+ -1112102397,
+ 1067001540,
+ 1073091101,
+ 1058660092,
+ 1051362370,
+ -1081049392,
+ -1076818578,
+ -1072343982,
+ 1065170607,
+ -1074400084,
+ -1079736736,
+ -1100505622,
+ -1128817908,
+ 1083704964,
+ -1078150220,
+ -1085396706,
+ -1085375763,
+ -1090643720,
+ -1096747725,
+ -1089610668,
+ 1070968892,
+ 1060342413,
+ -1102306905,
+ -1081582215,
+ -1099877923,
+ -1104616045,
+ 1053800602,
+ -1081825527,
+ 1058315257,
+ -1099569518,
+ 1065521574,
+ -1078622416,
+ 1044747896,
+ -1068782972,
+ -1092004990,
+ -1081134128,
+ -1093386355,
+ -1097251534,
+ 1059733055,
+ -1071978865,
+ 1069344948,
+ 1042709617,
+ 1040303437,
+ 1069248631,
+ 1070143954,
+ 1057079063,
+ 1082631591,
+ 1043708746,
+ -1087337683,
+ -1083111718,
+ -1081564804,
+ 1066437358,
+ 1024895252,
+ -1084785386,
+ -1108215038,
+ -1092296946,
+ 1082011184,
+ -1125838198,
+ 1065485272,
+ -1078403580,
+ 1082942911,
+ 1073877871,
+ 1034192158,
+ 1074112032,
+ 1055956937,
+ 1052133140,
+ -1109885882,
+ 1075382766,
+ 1078792321,
+ -1064559472,
+ 1044042640,
+ 1039264607,
+ -1102220187,
+ -1124101624,
+ -1095611807,
+ -1069493436,
+ 1066596316,
+ -1103588785,
+ 1050254794,
+ -1081561496,
+ -1071520948,
+ 1029381641,
+ 1024953134,
+ 1065965894,
+ -1074796423,
+ -1086178671,
+ -1078215245,
+ -1095948861,
+ -1081046375,
+ -1081243613,
+ 1044739552,
+ -1087407219,
+ -1073152161,
+ -1082415056,
+ -1103019498,
+ 1077003386,
+ -1082836111,
+ 1046597240,
+ -1123443012,
+ 1073997042,
+ -1098791122,
+ 1065562247,
+ -1092987362,
+ -1086405638,
+ -1107992162,
+ 1058597005,
+ -1109266724,
+ 1053305036,
+ 1049559492,
+ 1076035238,
+ -1074529542,
+ -1094799490,
+ -1093418764,
+ -1070817681,
+ -1079800341,
+ -1086180854,
+ -1075487767,
+ 1073994985,
+ 1056109123,
+ -1104852775,
+ 1053186005,
+ -1100782824,
+ 1082872692,
+ 1073151006,
+ -1099358574,
+ 1071415156,
+ -1089887174,
+ 1055142268,
+ 1047811599,
+ -1088926180,
+ -1078851556,
+ -1093624095,
+ 1068361005,
+ -1075420188,
+ 1059607668,
+ 1052049810,
+ -1092075471,
+ -1099585188,
+ -1061354737,
+ -1094481285,
+ -1111214153,
+ 1064467407,
+ 1050508270,
+ -1082123428,
+ -1155260926,
+ -1086411993,
+ -1088931207,
+ 1028976316,
+ -1106803409,
+ 1037801286,
+ -1112304682,
+ 1067314666,
+ -1089589636,
+ 1022493862,
+ -1076032152,
+ 1062240368,
+ -1096440515,
+ -1121802112,
+ -1085425972,
+ 1057636653,
+ -1090698746,
+ -1076986971,
+ -1090175492,
+ -1073514730,
+ -1061113125,
+ -1073133932,
+ -1080155112,
+ 1071767595,
+ 1066182739,
+ 1066114681,
+ 1062190083,
+ -1078114309,
+ -1070538798,
+ 1050104409,
+ -1066949019,
+ 1049946473,
+ -1085844635,
+ -1077154104,
+ -1088794082,
+ -1071269635,
+ -1077060716,
+ 1048737515,
+ -1122247106,
+ -1081359682,
+ 1067947450,
+ -1111426970,
+ -1121352355,
+ 1051255128,
+ 1078322855,
+ 1068157287,
+ -1091998608,
+ -1086711581,
+ 1027784836,
+ 1031248683,
+ 1061022864,
+ 1072090519,
+ -1128786941,
+ -1071990164,
+ -1071929642,
+ -1059812748,
+ -1066088888,
+ 1068706289,
+ 1082188084,
+ 1093010580,
+ -1066767546,
+ -1082182979,
+ -1079719230,
+ 1076843868,
+ -1079293058,
+ -1064503881,
+ -1064235164,
+ 1090064061,
+ -1071850508,
+ -1077818917,
+ -1082328802,
+ -1069878548,
+ -1115388473,
+ -1096954695,
+ -1098160987,
+ 1072267375,
+ -1102467670,
+ 1070521397,
+ 1076027235,
+ 1055998619,
+ 1073352590,
+ 1059483949,
+ 1066404090,
+ 1074345245,
+ 1034725666,
+ -1106290840,
+ 1057353306,
+ 1046237922,
+ -1076059426,
+ -1099784821,
+ -1088006546,
+ -1076847160,
+ 1034602365,
+ 1068934680,
+ -1079225267,
+ -1084287241,
+ 1054408764,
+ 1064682930,
+ -1090439808,
+ 1036596979,
+ 1059561721,
+ 1054205308,
+ 1069175562,
+ 1050709731,
+ -1077546158,
+ 1076796516,
+ 1057439782,
+ -1100627946,
+ -1082871116,
+ -1071587303,
+ 1056284197,
+ -1087178238,
+ -1091095335,
+ 1072204569,
+ 1066171326,
+ 1049201966,
+ 1061906242,
+ -1078824181,
+ 1049106116,
+ -1102563206,
+ 1054407682,
+ -1098838720,
+ -1100137652,
+ 1042430467,
+ 1028345536,
+ -1080578087,
+ 1042867425,
+ -1111720831,
+ 1032440694,
+ -1087707130,
+ -1137444448,
+ -1088634808,
+ -1086433823,
+ -1123394164,
+ -1095024167,
+ -1089873108,
+ 1018448791,
+ 1040177558,
+ 1060354185,
+ -1117016965,
+ 1070649470,
+ 1060441355,
+ -1073440720,
+ 1063332840,
+ 1067089538,
+ -1075840539,
+ 1083690520,
+ -1101987414,
+ 1076204213,
+ -1084851752,
+ 1058054441,
+ -1089634304,
+ 1067318711,
+ -1095843076,
+ 1059392453,
+ 1034848766,
+ 1063815459,
+ 1053626804,
+ 1041348440,
+ -1080575422,
+ 1057142175,
+ -1093810168,
+ -1083182863,
+ -1071431199,
+ -1090272756,
+ -1088730805,
+ -1110812005,
+ -1096163851,
+ 1040459116,
+ -1097037328,
+ 1063662727,
+ -1072092407,
+ 1085374849,
+ 1066783342,
+ -1078022635,
+ -1073355345,
+ 1060640778,
+ -1088298302,
+ -1081690268,
+ 1044115733,
+ -1139617666,
+ -1104198305,
+ 1073909143,
+ 1065144486,
+ 1043875441,
+ 1058506714,
+ -1087394006,
+ 1056744286,
+ -1074502771,
+ -1078261490,
+ -1073946290,
+ -1075296230,
+ -1090054045,
+ 1068152810,
+ 1056420304,
+ -1095129259,
+ 1067828937,
+ 1077366049,
+ -1092195739,
+ 1041868091,
+ -1083143258,
+ -1094046192,
+ -1093662362,
+ -1093758959,
+ 1064631897,
+ 1088285508,
+ -1079331348,
+ -1078980960,
+ -1096327709,
+ 1045388705,
+ 1063209515,
+ -1070647526,
+ 1043356963,
+ 1053992241,
+ -1110175680,
+ 1061997092,
+ 1061568531,
+ 1078548696,
+ 1065052114,
+ -1078776785,
+ 1057151107,
+ -1094424624,
+ 1092649356,
+ -1103141207,
+ -1056472088,
+ 1082746901,
+ 1077402407,
+ 1065636839,
+ 1019854160,
+ -1072587931,
+ 1058920241,
+ -1110000762,
+ 1002518768,
+ -1102841027,
+ -1086079310,
+ 1081744377,
+ 1040821101,
+ 1053370280,
+ 1052157538,
+ 1049202830,
+ 1045785098,
+ -1081653435,
+ -1077760828,
+ 1062064634,
+ -1104173488,
+ -1103608550,
+ -1068157040,
+ -1074100601,
+ -1072130192,
+ 1062335536,
+ 1074736507,
+ 1091832501,
+ -1076609690,
+ -1086273306,
+ 1048016296,
+ 1072493442,
+ 1082629723,
+ 1043190432,
+ -1072832311,
+ 1094384908,
+ -1081588853,
+ 1065733930,
+ 1057677542,
+ -1095146264,
+ 1049732423,
+ -1137847498,
+ 1036306845,
+ -1067122633,
+ -1103224984,
+ 1043757565,
+ -1111395300,
+ -1099560782,
+ -1107837435,
+ 1050892699,
+ -1117813771,
+ 1023022432,
+ -1112968968,
+ -1099330908,
+ 1042766392,
+ -1085125207,
+ 1066349994,
+ -1101544418,
+ 1053970934,
+ 1080270073,
+ 1065462730,
+ 1075607852,
+ 1071339804,
+ -1098518801,
+ 1034873375,
+ -1096952680,
+ -1075596645,
+ 1048815869,
+ -1080445237,
+ -1087559597,
+ 1044631612,
+ -1101184985,
+ 1034024650,
+ -1083565984,
+ -1078059907,
+ -1095983778,
+ -1118091594,
+ 1066855289,
+ 1066911665,
+ -1070286601,
+ -1075935842,
+ 1039615124,
+ -1084654912,
+ -1098705069,
+ -1086720352,
+ 1040700962,
+ -1096548096,
+ -1084332989,
+ -1100168323,
+ 1053211448,
+ 1062011891,
+ -1081131852,
+ -1120473686,
+ 1063112025,
+ 1056918371,
+ -1098099878,
+ 1036453863,
+ -1074740686,
+ 1065384406,
+ 1062358917,
+ 1065480560,
+ -1110188052,
+ 1059085471,
+ 1075684999,
+ -1060775019,
+ 1072763283,
+ 1063645367,
+ -1091161446,
+ -1080784623,
+ -1085691510,
+ 1040776122,
+ 1058707985,
+ -1076853210,
+ 1071355744,
+ 1084233157,
+ 1062190737,
+ 1052326920,
+ -1089827407,
+ -1095657530,
+ 1047504134,
+ 1062462411,
+ 1007065088,
+ 1058751690,
+ -1082831810,
+ -1122931254,
+ 1071036708,
+ 1038551704,
+ 1037879998,
+ -1095200771,
+ 1065518593,
+ -1106897767,
+ 1068416532,
+ 1065528611,
+ 1032738934,
+ -1095171827,
+ -1093816707,
+ 1067472696,
+ -1081242783,
+ -1066899954,
+ 1054538197,
+ 1044822947,
+ 1064856896,
+ -1078443579,
+ 1060094648,
+ -1081015293,
+ 1052758725,
+ 1059056932,
+ -1068474308,
+ 1044623410,
+ 1049855879,
+ 1049803014,
+ -1094826119,
+ -1092862875,
+ -1077163622,
+ -1062910788,
+ -1073861855,
+ 1074471646,
+ 1038363002,
+ 1039542570,
+ -1078960402,
+ 1072433874,
+ -1088262667,
+ -1080210559,
+ 1071032209,
+ 1057889253,
+ 1060827223,
+ -1095098493,
+ -1097827838,
+ -1095354587,
+ 1032804013,
+ -1111573819,
+ 1051435975,
+ -1084804937,
+ 1027846290,
+ -1122088872,
+ 1045889162,
+ 1057123670,
+ -1095207551,
+ -1107155400,
+ 1052129430,
+ -1081055587,
+ 1070674856,
+ -1087866304,
+ 1042027942,
+ -1079991023,
+ 1071227430,
+ 1076142075,
+ 1044739268,
+ -1092423097,
+ 1075830271,
+ 1059737213,
+ 1066799034,
+ 1028762368,
+ -1111440974,
+ 1094663397,
+ 1049887322,
+ -1076209350,
+ -1064519486,
+ 1067443740,
+ -1101421262,
+ 1061721689,
+ -1114073250,
+ 1045453047,
+ 1050751092,
+ 1044807437,
+ 1077340994,
+ 1053637313,
+ 1062093438,
+ -1109082906,
+ -1085480082,
+ -1099089654,
+ -1118699049,
+ 1032517828,
+ -1093001905,
+ -1097035394,
+ 1015812101,
+ 1035017580,
+ 1011253698,
+ 1039690936,
+ 1045413893,
+ 1051147421,
+ 1069700691,
+ -1106671330,
+ 1026122800,
+ 1060501787,
+ -1081652243,
+ 1070581225,
+ 1053849910,
+ -1100604901,
+ -1075669635,
+ -1091178390,
+ -1094741872,
+ 1045377466,
+ 1055974508,
+ -1079437084,
+ -1083760443,
+ 1068871079,
+ 1068191829,
+ 1053556096,
+ -1086993629,
+ 1049800671,
+ -1070564302,
+ -1095243512,
+ -1059913571,
+ -1071098652,
+ 1071836486,
+ 1058615226,
+ -1107204785,
+ 1056368035,
+ 1054954744,
+ -1073435727,
+ -1072832700,
+ -1089596483,
+ -1085094509,
+ 1059427946,
+ 1026051664,
+ -1088967679,
+ 1059721573,
+ 1051520304,
+ 1046258044,
+ -1117676727,
+ 1071231394,
+ 1091686563,
+ 1052079392,
+ -1096093247,
+ 1082390156,
+ -1101654736,
+ -1081836723,
+ -1086993229,
+ -1098349963,
+ -1080987693,
+ -1066761819,
+ -1086503894,
+ -1088836273,
+ -1085847618,
+ -1085532875,
+ 1075005663,
+ -1152470516,
+ -1093385960,
+ -1079730951,
+ 1070211636,
+ -1097177916,
+ -1097211466,
+ 1062684297,
+ -1063676817,
+ 1052424522,
+ -1078721222,
+ -1082019461,
+ 1041489959,
+ -1073756394,
+ -1095357984,
+ 1066164531,
+ -1074689730,
+ 1077725134,
+ -1090324001,
+ -1104781638,
+ -1101423454,
+ 1005553656,
+ 1043338752,
+ 1053019392,
+ 1061094871,
+ -1104407761,
+ 1078018010,
+ -1096938228,
+ -1115172146,
+ -1094790420,
+ -1085434087,
+ 1059447995,
+ -1118344540,
+ -1086938691,
+ 1063896577,
+ -1093996425,
+ -1091302054,
+ 1042038435,
+ -1084028931,
+ -1078405851,
+ -1079631810,
+ -1083774964,
+ -1092157902,
+ -1090463013,
+ -1083981237,
+ 1057338064,
+ 1061166037,
+ 1055192566,
+ -1088177561,
+ 1065380601,
+ 1040236597,
+ -1071467105,
+ 1068117014,
+ -1084529870,
+ -1087509954,
+ 1050377191,
+ -1122615954,
+ 1067587283,
+ 1072532246,
+ -1092586912,
+ 1061162537,
+ 1058409039,
+ -1072128892,
+ 1061752524,
+ -1076482327,
+ 1067592472,
+ 1065706878,
+ 1051281233,
+ 1049051724,
+ 1054676935,
+ -1091786266,
+ -1126450489,
+ -1093638245,
+ -1082210010,
+ 1042864190,
+ -1075436625,
+ -1082499784,
+ 1059689274,
+ -1099570274,
+ 1048156249,
+ -1089836547,
+ 1054903477,
+ -1091874738,
+ -1069403332,
+ -1089153232,
+ 1025134666,
+ -1091499303,
+ 1046284322,
+ 1068356641,
+ 1079392583,
+ -1078968815,
+ -1089912076,
+ -1086976088,
+ 1063615336,
+ 1053219813,
+ -1088103115,
+ 1078575948,
+ 1070604878,
+ 1078019800,
+ 1070431413,
+ -1066447444,
+ 1075483819,
+ 1063140140,
+ -1075487297,
+ -1073538071,
+ -1073739294,
+ 1067277505,
+ 985682744,
+ -1063705215,
+ 1087552191,
+ 1095430171,
+ 1055155607,
+ 1061492627,
+ -1071314552,
+ -1071289180,
+ -1083007705,
+ -1069387387,
+ 1056988708,
+ -1079970264,
+ 1076467251,
+ 1067844771,
+ 1063661026,
+ -1075418323,
+ -1099186631,
+ 1018058413,
+ -1076291202,
+ -1075972466,
+ -1094356948,
+ 1050378557,
+ 1079139904,
+ -1077096391,
+ 1045552541,
+ 1050736562,
+ -1099081226,
+ -1093922188,
+ 1084783061,
+ -1081807142,
+ 1056589598,
+ -1109818622,
+ 1036703069,
+ -1084996821,
+ -1089447695,
+ -1078928485,
+ 1053617252,
+ 1040743151,
+ 1069450816,
+ 1073234856,
+ -1112370374,
+ -1057628563,
+ 1067390598,
+ 1066606763,
+ -1077485436,
+ -1079930053,
+ -1071499805,
+ 1072732530,
+ -1091348209,
+ -1070584945,
+ 1093526384,
+ 1090720468,
+ 1051028313,
+ 1074958850,
+ -1070388038,
+ -1111936455,
+ -1090353831,
+ 1052804272,
+ -1094222576,
+ 1046470490,
+ -1106436270,
+ 1038413042,
+ 1062260684,
+ -1076228838,
+ -1086412094,
+ 1015441412,
+ -1141998349,
+ -1130775736,
+ -1076828302,
+ 1058076874,
+ -1081465898,
+ -1156790622,
+ 1039379164,
+ -1098034765,
+ 1049376094,
+ -1125839108,
+ -1080160406,
+ -1075955069,
+ -1112851921,
+ 1066661785,
+ -1072596724,
+ -1076406566,
+ -1096151664,
+ -1083985291,
+ 1023483324,
+ -1088651799,
+ 1057709397,
+ 1065727914,
+ -1074338489,
+ 1033560578,
+ 1056499383,
+ -1080923285,
+ -1097199668,
+ 1066234202,
+ 1076787584,
+ 1074254399,
+ -1073013065,
+ -1106208406,
+ -1082337216,
+ -1109502586,
+ -1064781429,
+ -1064278521,
+ 1073829851,
+ -1073622472,
+ -1092177136,
+ 1057967459,
+ 1034061160,
+ -1081930961,
+ 1079388425,
+ 1049421574,
+ -1114643676,
+ -1084362959,
+ -1092842473,
+ 1049806686,
+ -1085036995,
+ -1113300506,
+ -1085847508,
+ -1092221642,
+ 1073779007,
+ -1089952840,
+ -1098751879,
+ -1119226245,
+ -1089868636,
+ -1104550244,
+ 1074699725,
+ 1055952528,
+ -1095836766,
+ -1083948043,
+ -1074099749,
+ 1050146921,
+ -1095534976,
+ -1089466614,
+ -1095115951,
+ -1083871046,
+ 1043358466,
+ 1022304316,
+ -1087125247,
+ 1050617789,
+ -1091020784,
+ -1090443952,
+ 1073816190,
+ 1040198487,
+ -1096534602,
+ 1073513961,
+ -1090229792,
+ -1096977062,
+ 1057572728,
+ -1067217670,
+ 1063963706,
+ -1089848091,
+ 1063061220,
+ 1044939314,
+ 1051075533,
+ -1094046255,
+ 1051305571,
+ -1115168055,
+ -1086702904,
+ -1074567503,
+ 1040819594,
+ 1069154987,
+ -1073890563,
+ -1076923581,
+ 1029672622,
+ -1087291231,
+ 1061925960,
+ -1100194623,
+ 1059864043,
+ 1076132744,
+ 1064950786,
+ -1065584210,
+ 1078817352,
+ 1070792100,
+ -1071976119,
+ -1072511134,
+ -1073876471,
+ 1081451119,
+ -1093924653,
+ -1060026171,
+ 1090338983,
+ 1098115746,
+ 1067032418,
+ 1090647568,
+ -1064318077,
+ -1090038459,
+ -1091067289,
+ -1083001875,
+ -1127959045,
+ 1057675112,
+ 1075796565,
+ -1080493222,
+ -1086198831,
+ 1067156807,
+ 1059615526,
+ -1099018892,
+ -1102959980,
+ -1082476683,
+ 1073741936,
+ -1113285493,
+ 1048020304,
+ 1056628663,
+ -1074950806,
+ 1055892555,
+ -1097455499,
+ 1060394274,
+ -1109227346,
+ -1088511815,
+ 1073339494,
+ 1060955703,
+ -1083257760,
+ 1028044644,
+ -1078487728,
+ -1081851732,
+ 1057256020,
+ -1074052215,
+ -1086517358,
+ 1049553145,
+ 1060650401,
+ -1083430813,
+ 1093683715,
+ 1060374745,
+ 1060418515,
+ -1107037657,
+ -1096650550,
+ 1075625396,
+ -1088341663,
+ -1086267156,
+ 1084701626,
+ 1060932882,
+ 1067216141,
+ -1089746054,
+ -1085373699,
+ -1096479815,
+ 1061576708,
+ -1117126216,
+ -1098689793,
+ -1089313743,
+ 1064459729,
+ 1063139325,
+ 1053299300,
+ 1066904970,
+ 1059834947,
+ -1086145225,
+ -1095148306,
+ 1054567152,
+ 1045703562,
+ 1069613689,
+ 1083512735,
+ -1092861010,
+ 1057032745,
+ -1071159076,
+ 1084872371,
+ 1028782956,
+ -1073505050,
+ 1080095938,
+ -1093487895,
+ -1079249574,
+ -1064075820,
+ 1057000971,
+ 1079893467,
+ -1100183378,
+ -1076767770,
+ 1069046602,
+ -1082291746,
+ -1097451099,
+ 1059983873,
+ -1076287587,
+ 1050673939,
+ -1089152773,
+ 1069904723,
+ -1093988350,
+ 1052520521,
+ -1090352609,
+ 1064396532,
+ 1058627268,
+ 1071595750,
+ -1082887414,
+ 1083981748,
+ -1106535785,
+ 1051651981,
+ 1042537203,
+ 1061607704,
+ 1061739745,
+ 1049677709,
+ -1055629957,
+ -1084229916,
+ 1067034295,
+ -1087249259,
+ 1050456202,
+ -1096901887,
+ -1107352054,
+ -1081500386,
+ -1086499465,
+ 1041375295,
+ 1043540510,
+ 1049418181,
+ -1085001050,
+ -1081816102,
+ 1053353703,
+ -1081036464,
+ -1068942711,
+ 1079562050,
+ -1105097202,
+ 1054816088,
+ -1072545863,
+ -1081457869,
+ -1080067928,
+ -1079484524,
+ 1084284541,
+ -1091367524,
+ -1097688225,
+ 1053364961,
+ -1084253870,
+ -1092066635,
+ 1048088066,
+ -1092196604,
+ 1065306886,
+ 1060870509,
+ 1048896943,
+ -1098227342,
+ 1063606905,
+ 1047660723,
+ 1065181317,
+ -1085389429,
+ -1071342856,
+ 1053640707,
+ -1076223816,
+ -1104459007,
+ -1080453095,
+ 1062913499,
+ -1062233270,
+ -1085474774,
+ -1086900068,
+ -1068108022,
+ 1072616918,
+ -1075146079,
+ 1046843891,
+ -1087583726,
+ 1071656201,
+ 1085115427,
+ -1066557169,
+ 1057144813,
+ -1084929477,
+ 1093520370,
+ 1071813455,
+ -1109024391,
+ 1019127925,
+ -1107653790,
+ -1080191569,
+ 1058322150,
+ -1081725195,
+ -1072461953,
+ -1088469789,
+ -1088641212,
+ -1089064887,
+ 1060128831,
+ 1056970180,
+ -1084454664,
+ 1025104841,
+ 1069553409,
+ -1088921150,
+ -1120110442,
+ -1091532923,
+ -1089817935,
+ -1110238350,
+ 1079793970,
+ 1055272684,
+ -1170166492,
+ -1085104861,
+ -1081702368,
+ -1051544993,
+ -1088129784,
+ 1069289705,
+ -1107773364,
+ 1060965490,
+ 1064278722,
+ -1097397721,
+ -1089302200,
+ 1060606251,
+ 1040510082,
+ 1052015871,
+ 1079105830,
+ -1084609850,
+ 1058041076,
+ 1056874509,
+ -1102548666,
+ 1050557594,
+ -1093960972,
+ -1098166373,
+ 1055471875,
+ 1075436110,
+ -1116471388,
+ -1096291730,
+ 1040857869,
+ -1096708540,
+ 1035719786,
+ -1102612002,
+ -1086215962,
+ -1072320731,
+ 1047276136,
+ 1068549536,
+ -1074864584,
+ -1074632459,
+ 1016146018,
+ -1087601836,
+ 1055147750,
+ -1097738423,
+ 1056281108,
+ 1050284345,
+ 1046009742,
+ -1110336370,
+ 1053671026,
+ -1092618519,
+ -1082096001,
+ -1073963355,
+ 1024797864,
+ 1070869849,
+ -1070982327,
+ -1075922293,
+ -1134271238,
+ -1091853954,
+ 1066706609,
+ -1098167474,
+ 1054154444,
+ -1088389862,
+ -1110592509,
+ 1085113843,
+ 1058901783,
+ -1071355453,
+ 1067128598,
+ -1102893353,
+ 1043137405,
+ -1064203572,
+ -1083445317,
+ -1068628124,
+ -1077907100,
+ 1054792161,
+ -1062295083,
+ -1089202282,
+ 1058183775,
+ 1054485532,
+ -1088867449,
+ 1072896775,
+ 1052067701,
+ -1078667305,
+ 1080612994,
+ -1073046988,
+ -1076986623,
+ 1065409329,
+ -1065127765,
+ -1096661876,
+ 1049129094,
+ -1088873609,
+ 1084273780,
+ 1070270414,
+ 1066009233,
+ 1065639014,
+ -1117935113,
+ -1091835354,
+ 1042758244,
+ -1097594047,
+ -1074251222,
+ -1086046230,
+ -1088389384,
+ 1065358316,
+ -1078915783,
+ 1059062227,
+ -1090370490,
+ -1089103030,
+ 1063868361,
+ -1080298756,
+ -1099129562,
+ 1051074789,
+ -1092907543,
+ 1051583303,
+ 1046239158,
+ -1100337309,
+ -1086996322,
+ -1089502476,
+ 1037005241,
+ 1021200686,
+ -1128129862,
+ -1101733400,
+ 1041513387,
+ 1042036694,
+ 1050950465,
+ 1063609342,
+ -1059666440,
+ -1096995920,
+ -1077358747,
+ 1082885425,
+ -1108973132,
+ -1096763358,
+ 1089363305,
+ 1051135386,
+ -1086783765,
+ 1050942365,
+ -1080263183,
+ -1081613264,
+ -1070203018,
+ -1076898416,
+ 1060662798,
+ -1081547523,
+ 1051549142,
+ 1025648022,
+ -1090432155,
+ 1050705332,
+ -1095435212,
+ -1097235358,
+ -1099680341,
+ 1070307680,
+ -1088193251,
+ -1065214670,
+ -1068069773,
+ -1080044083,
+ 1047633893,
+ -1089748526,
+ -1096814807,
+ -1089739599,
+ 1068725361,
+ -1114523036,
+ -1090298508,
+ 1061041874,
+ 1055031363,
+ -1093930762,
+ 1087711943,
+ 1058171654,
+ -1103146355,
+ -1107268204,
+ -1088964131,
+ -1086613379,
+ -1100624109,
+ 1064796898,
+ 1007668928,
+ -1105251138,
+ 1041294305,
+ -1107415098,
+ -1072318538,
+ 1071664767,
+ -1094108354,
+ 1069577929,
+ 1062622090,
+ 1066230529,
+ 1078009718,
+ -1096568871,
+ -1092040428,
+ 1041341213,
+ -1083979898,
+ -1069833062,
+ 1050179906,
+ -1111679386,
+ -1080164382,
+ 1052258881,
+ 1033792342,
+ 1052668402,
+ -1120771812,
+ -1078458040,
+ 1052597778,
+ -1092086888,
+ 1049114158,
+ -1087598188,
+ -1094496511,
+ 1042571479,
+ -1075161324,
+ 1089946360,
+ -1084880562,
+ 1065399659,
+ -1099479295,
+ -1102744861,
+ -1089424622,
+ -1092625292,
+ -1087452962,
+ 1066664966,
+ 1037677593,
+ -1069800960,
+ -1080001638,
+ 1075524530,
+ 1075513961,
+ -1072526445,
+ 1053471975,
+ -1095993899,
+ 1083704244,
+ -1073212904,
+ 1067441865,
+ -1087206679,
+ 1066133642,
+ -1069428425,
+ 1090188606,
+ 1047605300,
+ 1010822604,
+ 1034139585,
+ -1099032788,
+ -1111344719,
+ -1095507662,
+ -1071925527,
+ 1049760171,
+ 1051942999,
+ -1146384477,
+ -1096167522,
+ 1056109035,
+ 1019859146,
+ -1080396691,
+ 1083989172,
+ 1051675361,
+ 1076237965,
+ 1061402372,
+ 1064241602,
+ 1080076640,
+ 1067667409,
+ -1094215018,
+ 1055330873,
+ 1043383024,
+ -1092262453,
+ -1097376044,
+ 1041110080,
+ -1102573102,
+ -1089422902,
+ -1090220229,
+ -1090331058,
+ 1051051890,
+ -1098259979,
+ -1085771080,
+ 1052829361,
+ 1051762927,
+ -1093967068,
+ -1063327407,
+ -1079714254,
+ 1045447282,
+ -1098837884,
+ -1098024430,
+ 1068038360,
+ -1115672304,
+ -1083502155,
+ 1062754944,
+ 1066483016,
+ -1094483996,
+ -1085826553,
+ -1080777040,
+ 1075778943,
+ 1059939254,
+ 1062442232,
+ -1059288684,
+ 1058160662,
+ -1089671209,
+ -1074754009,
+ -1066902569,
+ -1095628993,
+ 1078332521,
+ 1039598522,
+ -1098658275,
+ 1055051308,
+ -1105621445,
+ 1069695983,
+ 1024914610,
+ -1095308244,
+ 1064611235,
+ 1065026143,
+ -1091912801,
+ -1072276338,
+ -1071524063,
+ -1102011897,
+ 1023390812,
+ -1098678666,
+ 1067016224,
+ -1089640666,
+ -1095904352,
+ 1046738839,
+ 1056407791,
+ -1078640143,
+ 1061008792,
+ -1062509412,
+ -1098364991,
+ -1071938403,
+ -1075625158,
+ -1095868740,
+ -1105430788,
+ -1077106628,
+ -1079646208,
+ -1063935333,
+ 1064210741,
+ 1051851364,
+ -1090709782,
+ 1050600131,
+ 1060412238,
+ 1058059283,
+ -1079760121,
+ 1060310526,
+ -1099274240,
+ 1058702623,
+ 1058117306,
+ -1061630937,
+ -1113443439,
+ 1081940244,
+ -1116446866,
+ 1068111218,
+ 1078968837,
+ -1086402891,
+ -1081905548,
+ 1062647107,
+ 1028507514,
+ 1053600394,
+ -1089822914,
+ -1098313952,
+ 1043685233,
+ 1073993408,
+ -1084319572,
+ -1074374909,
+ 1058219873,
+ 1047799595,
+ 1050292098,
+ 1074674978,
+ -1063116049,
+ 1057137505,
+ -1092448190,
+ 1043940731,
+ -1110914649,
+ -1073554653,
+ 1056782364,
+ 1076209754,
+ 1072843189,
+ -1050533451,
+ -1088528743,
+ -1082248811,
+ 1042643810,
+ 1054641264,
+ -1085904633,
+ 1043849712,
+ 1008956580,
+ -1102608949,
+ -1106128192,
+ -1118415532,
+ -1110708227,
+ 1025425530,
+ 1044902888,
+ 1034655661,
+ 1015983700,
+ 1075094025,
+ -1115507959,
+ 1048795442,
+ -1095623071,
+ -1084218032,
+ 1057508835,
+ -1088397221,
+ 1025411773,
+ 1055687015,
+ -1130045398,
+ -1101718300,
+ 1057611142,
+ 1066175964,
+ 1062724907,
+ -1121844168,
+ -1072758192,
+ -1136916453,
+ -1094002288,
+ 1065081601,
+ 1062169207,
+ 1064487599,
+ 1046069854,
+ 1067796319,
+ 1043443374,
+ -1093073633,
+ -1103574547,
+ 1059467131,
+ -1101436653,
+ -1090081519,
+ -1101018724,
+ 1009715729,
+ 1072745562,
+ -1105443694,
+ -1071886835,
+ 1079830724,
+ -1129805850,
+ 1057455272,
+ 1025207432,
+ 1049302097,
+ 1059266155,
+ 1063271276,
+ 1046965649,
+ 1081864757,
+ 1064067330,
+ -1087504035,
+ 1053367996,
+ -1120090694,
+ 1067457932,
+ 1061845776,
+ 1048821220,
+ 1030843170,
+ -1080990114,
+ -1079690006,
+ 1050764484,
+ 1042759697,
+ -1098343739,
+ -1106174692,
+ 1078065195,
+ 1042824056,
+ 1029087873,
+ -1093445729,
+ -1087364145,
+ 1033569868,
+ 1064253399,
+ -1126412514,
+ -1079959743,
+ 1043089346,
+ -1102241338,
+ -1181808888,
+ -1104478900,
+ -1106613499,
+ 1031657746,
+ -1087437718,
+ -1115755465,
+ -1090044698,
+ -1086869625,
+ 1031817220,
+ 1046055419,
+ 1045433767,
+ 1051208426,
+ -1071505224,
+ 1045573546,
+ 1070286583,
+ -1097263953,
+ 1061034849,
+ -1091847405,
+ -1113893396,
+ 1069837126,
+ 1057934400,
+ 1072372996,
+ 1046536186,
+ 1035611279,
+ -1091627963,
+ 1028884543,
+ -1090877466,
+ 1068115697,
+ -1123446160,
+ -1086850502,
+ 1055325566,
+ 1025155868,
+ -1072458908,
+ 1049498372,
+ 1052179133,
+ -1089020475,
+ 1075630756,
+ 1057437771,
+ -1089190805,
+ -1097922046,
+ 1059071573,
+ 1048153557,
+ 1088046471,
+ -1115427246,
+ -1089073800,
+ 1053312645,
+ 1043587663,
+ -1072863467,
+ 1049590351,
+ -1089703553,
+ 1063275515,
+ 1035347260,
+ 1081337900,
+ 1068263318,
+ -1082268705,
+ -1064755522,
+ -1096894092,
+ -1141273812,
+ 1044962590,
+ -1076626962,
+ 1038564061,
+ 1045596794,
+ 1077623116,
+ -1097129899,
+ -1096401456,
+ 1075818204,
+ -1091866705,
+ -1079351797,
+ 1047842657,
+ -1098503270,
+ -1115378975,
+ 1077758019,
+ -1093842379,
+ -1087015064,
+ -1085125152,
+ 1061702710,
+ 1070847833,
+ 1050830550,
+ 1040270962,
+ -1105470546,
+ -1092134389,
+ 1040262753,
+ -1180663160,
+ 1007814972,
+ -1097575043,
+ 1039976750,
+ 1045151146,
+ 1009551162,
+ 1065853601,
+ 1017998736,
+ 1043347229,
+ 1014312452,
+ -1111944692,
+ 1014254878,
+ 1007050100,
+ -1117387155,
+ -1094758484,
+ -1080192940,
+ -1131849794,
+ 1072108501,
+ 1028089891,
+ -1075010367,
+ 1048773425,
+ -1111037601,
+ -1064790645,
+ 1053526122,
+ 1027401194,
+ -1086277499,
+ 1045934229,
+ -1102721437,
+ 1025191335,
+ -1068287690,
+ -1088498633,
+ -1107125369,
+ 1054317512,
+ 1055115388,
+ -1092340675,
+ -1066438906,
+ 1052877528,
+ 1059849497,
+ 1072650839,
+ 1024967300,
+ 1059352006,
+ 1024016511,
+ 1082480441,
+ -1100631366,
+ 1060710701,
+ 1074195681,
+ -1070497444,
+ -1098721138,
+ 1055251703,
+ -1132315367,
+ -1098442804,
+ -1070547338,
+ -1098172405,
+ -1080937877,
+ 1050203011,
+ -1070396764,
+ -1127645024,
+ -1095334842,
+ 1054587874,
+ 1047541767,
+ -1097555379,
+ -1112266614,
+ 1044267070,
+ -1082114883,
+ 1031843622,
+ -1088409362,
+ 1047606272,
+ -1120739690,
+ 1074116186,
+ 1057393448,
+ -1090915532,
+ -1092982026,
+ -1107168574,
+ 1066650637,
+ -1106511415,
+ -1095668234,
+ 1046065269,
+ -1082422679,
+ -1095020010,
+ 1038928930,
+ -1090688039,
+ 1067508816,
+ 1050640379,
+ 1044386778,
+ -1108503451,
+ -1116664280,
+ 1024934761,
+ 1042405868,
+ -1091909864,
+ -1108482659,
+ -1107024607,
+ 1032354898,
+ 1024768353,
+ 1032576057,
+ -1129791518,
+ -1129128300,
+ 1024902173,
+ 1035370312,
+ 1038847016,
+ -1093289106,
+ 1046300991,
+ 1036144017,
+ 1040564242,
+ -1088027800,
+ 1032826560,
+ 1040079788,
+ 1035128071,
+ -1101339333,
+ 1034407011,
+ -1129385853,
+ -1147299492,
+ 1077145422,
+ 1060648787,
+ 1029775325,
+ 1094453826,
+ -1090910813,
+ -1106327939,
+ 1046618219,
+ -1103693216,
+ -1090665492,
+ 1034255056,
+ 1066809953,
+ 1058047119,
+ 1046510428,
+ 1045482847,
+ -1083080104,
+ -1097830961,
+ 1041860422,
+ 1048795332,
+ 1017091966,
+ 1031334205,
+ 1046087985,
+ -1138537514,
+ -1168199176,
+ -1079726987,
+ -1082720472,
+ 1069009318,
+ -1078274617,
+ 1064922232,
+ -1121871400,
+ -1074823702,
+ -1121561205,
+ -1102751089,
+ 1059675118,
+ -1079587020,
+ 1054311358,
+ 1075756797,
+ 1051676193,
+ 1010229163,
+ -1086412962,
+ -1089477236,
+ -1088513500,
+ 1050330920,
+ 1040827917,
+ 1057951946,
+ 1079215458,
+ -1105407526,
+ -1064408234,
+ 1057955338,
+ -1088721006,
+ 1071862113,
+ -1090017010,
+ 1048338537,
+ -1081094753,
+ 1057888113,
+ -1085018654,
+ 1037485578,
+ -1095775138,
+ -1079041277,
+ -1082769232,
+ 1038341583,
+ 1042434292,
+ -1069057881,
+ -1084750809,
+ -1074213227,
+ 1053789340,
+ 1019070966,
+ 1040518587,
+ -1081713738,
+ 1069449226,
+ 1069238712,
+ -1087591858,
+ -1081864214,
+ 1054702954,
+ -1161436212,
+ -1126495012,
+ -1097474684,
+ -1082965529,
+ 1032880414,
+ 1009164371,
+ -1109903761,
+ 1044903995,
+ -1113037076,
+ -1122279265,
+ -1103823944,
+ -1104674451,
+ -1113697007,
+ 1056281933,
+ -1106239582,
+ -1095106273,
+ -1132404808,
+ 1069518628,
+ -1129515614,
+ -1100172786,
+ 1047644574,
+ 1021350777,
+ -1087044685,
+ 1048066599,
+ 1036630800,
+ -1074640303,
+ -1122848060,
+ 1050404929,
+ -1111388281,
+ -1065651677,
+ -1103530349,
+ -1120619889,
+ 1037473744,
+ 1053866333,
+ -1085921679,
+ 1068266105,
+ 1071987492,
+ 1060578227,
+ 1061791040,
+ -1111985620,
+ 1074026927,
+ -1129032544,
+ -1087398700,
+ 1058347729,
+ -1087810373,
+ -1095419132,
+ -1099072328,
+ 1046003196,
+ -1090270774,
+ 1076983468,
+ 1034241185,
+ 1029110651,
+ -1060875127,
+ -1113726770,
+ 1042031929,
+ 1068844461,
+ -1097080534,
+ -1106160292,
+ 1039115306,
+ 1050149083,
+ 1045998279,
+ 1053488867,
+ 1057508678,
+ -1096467358,
+ -1119101547,
+ 1062022306,
+ -1098688403,
+ 1060210351,
+ 1046385454,
+ -1081346560,
+ -1093655938,
+ -1114722782,
+ -1089391172,
+ -1077104944,
+ -1103716973,
+ -1085071630,
+ -1092424319,
+ 1053557768,
+ -1099531311,
+ -1097114119,
+ -1123546363,
+ -1091426927,
+ -1088046427,
+ 1063751237,
+ 1025939027,
+ 1072830509,
+ 1065329233,
+ -1083909084,
+ 1031840572,
+ 1056167331,
+ 1053784810,
+ 1084691395,
+ 1024349430,
+ -1078451902,
+ -1090447093,
+ -1129112498,
+ -1109748272,
+ -1100330698,
+ 1073674924,
+ 1043294442,
+ -1105632860,
+ 1062115625,
+ 1018704108,
+ -1131484880,
+ 1035147332,
+ -1107229777,
+ -1104724226,
+ 1028334627,
+ 1059245601,
+ 1056195784,
+ -1115709971,
+ 1042247088,
+ -1113479482,
+ -1094994943,
+ 1062764492,
+ -1093126328,
+ -1080701102,
+ 1067028921,
+ -1102501706,
+ 1044963218,
+ 1037691958,
+ 1033146068,
+ -1096224942,
+ -1069785796,
+ 1033612092,
+ -1138329694,
+ 1074592462,
+ -1114217540,
+ 1028268405,
+ -1104166406,
+ 1011763782,
+ 1053870988,
+ 1026738983,
+ 1039442079,
+ 1043645907,
+ 1050146137,
+ 1049590691,
+ 1026380668,
+ -1105755699,
+ 1080516848,
+ -1103543194,
+ 1061907756,
+ 1054294338,
+ 1049302666,
+ -1065484395,
+ 1049399905,
+ -1098446521,
+ -1094503650,
+ -1091753172,
+ 1048890211,
+ -1118099335,
+ 1039484291,
+ -1156967082,
+ -1115976406,
+ 1048582426,
+ 1064779220,
+ 1057468439,
+ 1077908900,
+ 1015057667,
+ 1081924287,
+ 1006816006,
+ 1049185188,
+ -1073853278,
+ -1090335122,
+ 1057120995,
+ -1077747940,
+ 1057364403,
+ -1075157995,
+ 1050316774,
+ -1081283220,
+ 1047699539,
+ 1057181877,
+ 1058265359,
+ 1030247590,
+ -1089196379,
+ -1078280079,
+ 1052012481,
+ -1118615372,
+ -1090370605,
+ 1048543714,
+ -1110410413,
+ 1036678886,
+ -1117760409,
+ -1122617599,
+ -1110943156,
+ 1076842096,
+ -1098721663,
+ -1166389472,
+ -1122463350,
+ -1104202197,
+ 1026754206,
+ -1116449509,
+ 1028444795,
+ 1057375068,
+ 1007821417,
+ 1036338307,
+ 1031293672,
+ 1036429343,
+ -1084741501,
+ 1051249583,
+ 1025267264,
+ -1101058734,
+ -1121398855,
+ -1093010679,
+ -1107316949,
+ -1137383610,
+ 1024433951,
+ 1049147655,
+ -1065248949,
+ 1085436419,
+ -1120270402,
+ 1024809100,
+ -1100161409,
+ 1091730517,
+ -1089704034,
+ -1087518451,
+ 1054106290,
+ -1098884080,
+ 1066966460,
+ -1144108804,
+ 1049639448,
+ -1078986933,
+ -1090413339,
+ 1057737139,
+ -1097149968,
+ -1117959408,
+ 1069143516,
+ -1097091255,
+ 1071071627,
+ 1044029352,
+ -1097659032,
+ -1086342398,
+ -1100519930,
+ 1053725967,
+ 1059382465,
+ -1090112589,
+ 1058080319,
+ 1047316563,
+ 1063234320,
+ -1102844932,
+ -1104884659,
+ 1051820069,
+ 1048194334,
+ 1056557853,
+ -1100596088,
+ -1122883261,
+ -1101686600,
+ -1065077170,
+ 1066667074,
+ 1053485836,
+ -1100125171,
+ -1097853535,
+ 1033959077,
+ -1084638897,
+ -1115482282,
+ 1018691646,
+ -1108425845,
+ -1123347049,
+ 1067866192,
+ 1054528145,
+ 1047103832,
+ -1081358990,
+ -1101467730,
+ 1046966218,
+ 1060571672,
+ -1132564506,
+ -1113857322,
+ 1074779377,
+ 1052964973,
+ -1087722943,
+ 1048265436,
+ -1081649039,
+ -1101481965,
+ -1122419852,
+ -1083546544,
+ 1040338312,
+ 1008143503,
+ -1134231848,
+ 1054736434,
+ -1103642878,
+ -1126396835,
+ -1121757083,
+ 1061922138,
+ -1149681580,
+ -1123976581,
+ -1121263403,
+ 1042155906,
+ -1081892635,
+ -1120705863,
+ -1138113800,
+ -1108080500,
+ 1039254395,
+ 1024000080,
+ -1100737021,
+ -1115216444,
+ 1049921994,
+ -1089314872,
+ 1076883282,
+ 1055199753,
+ -1092248450,
+ -1126033642,
+ 1069186255,
+ 1042288426,
+ 1044378050,
+ -1111217738,
+ -1070623035,
+ 1050993956,
+ 1082010064,
+ -1056609835,
+ -1107489582,
+ 1059445070,
+ -1099987832,
+ 1031868346,
+ -1080830884,
+ -1083430632,
+ -1089030675,
+ -1106703888,
+ -1106879949,
+ 1069526500,
+ -1106514194,
+ 1062658849,
+ 1058251629,
+ 1056315198,
+ 1071949916,
+ -1130166178,
+ 1016732034,
+ -1113713111,
+ -1084254133,
+ -1087160907,
+ 1048797973,
+ -1097067348,
+ -1086228679,
+ -1109758019,
+ -1104947480,
+ -1114886036,
+ -1093451978,
+ 1068135908,
+ -1103030569,
+ -1110068614,
+ -1078778561,
+ 1021330862,
+ 1074071389,
+ -1099082853,
+ 1059867779,
+ -1098463980,
+ -1091937609,
+ 1058792408,
+ -1106369811,
+ 1046161352,
+ 1068251867,
+ -1072794363,
+ 1058801358,
+ 1057283369,
+ -1070336466,
+ 1032611490,
+ -1099767230,
+ -1137618454,
+ 1056208105,
+ -1089654248,
+ 1085521667,
+ 1032823312,
+ -1074990071,
+ -1099052751,
+ 1058186736,
+ -1122268328,
+ 1024246043,
+ -1094304683,
+ 1038219951,
+ -1147609785,
+ 1043385408,
+ -1126255853,
+ -1136878720,
+ 1043485810,
+ 1060948973,
+ -1131742993,
+ -1102028250,
+ -1121240728,
+ -1094346399,
+ 1008088172,
+ -1147080708,
+ 1028449225,
+ 1050644748,
+ -1093935180,
+ -1107475415,
+ -1112151149,
+ -1088941745,
+ 1026212167,
+ 1057075548,
+ 1052635536,
+ 1066801229,
+ 1054105502,
+ 1060258468,
+ 1052783445,
+ 1046838268,
+ 1043188730,
+ -1093030995,
+ -1115248247,
+ -1063267038,
+ 1054559157,
+ 1069007262,
+ 1048967043,
+ 1060510019,
+ -1079949372,
+ 1034731060,
+ -1089597354,
+ -1087954788,
+ 1021648712,
+ -1093594960,
+ -1113859809,
+ -1102461853,
+ -1104704594,
+ 1049658978,
+ -1094984090,
+ -1099135389,
+ 1055384259,
+ 1065392653,
+ -1097883604,
+ 1034820356,
+ -1076035544,
+ -1074802291,
+ -1072429863,
+ -1110232231,
+ -1104272544,
+ 1046425888,
+ 1036994328,
+ 1086042000,
+ -1103005158,
+ -1107052666,
+ 1025611723,
+ -1125987724,
+ 1059423195,
+ -1109613178,
+ -1088158336,
+ -1081924590,
+ 1040851177,
+ 1054571022,
+ 1051110169,
+ -1078093276,
+ -1132318700,
+ 1057215469,
+ 1065935153,
+ 1060393952,
+ 1046636121,
+ -1085786657,
+ 1029114976,
+ 1063195317,
+ 1045370689,
+ 1048713756,
+ 1065668116,
+ 1056118807,
+ 1041909862,
+ 1054001774,
+ -1109487520,
+ 1062410903,
+ -1076518209,
+ 1051736183,
+ 1017143970,
+ 1048709782,
+ 1066966807,
+ 1049086920,
+ -1115425321,
+ -1099239251,
+ -1120357791,
+ 1033810189,
+ -1101828932,
+ 1040737259,
+ 1052523013,
+ 1020774876,
+ -1118812681,
+ 1061009656,
+ -1134006216,
+ -1098249402,
+ -1134607968,
+ -1111486995,
+ -1114215148,
+ -1122246346,
+ 1067708400,
+ -1088590888,
+ 1015036572,
+ -1087898722,
+ -1093376778,
+ -1069987293,
+ -1096790902,
+ 1044108466,
+ 1027789570,
+ -1119570109,
+ -1089935388,
+ 981720392,
+ 1035068670,
+ -1119955215,
+ -1181150976,
+ -1072323456,
+ -1071302918,
+ 1052877780,
+ -1070817761,
+ -1112053877,
+ 1041065833,
+ -1123479364,
+ 1053095279,
+ -1056350667,
+ 1032924292,
+ 1038454156,
+ -1110087995,
+ 1041502961,
+ -1107765328,
+ -1104466765,
+ -1090155050,
+ -1079430505,
+ -1081710993,
+ 1041582337,
+ 1036802351,
+ 1060435576,
+ -1083570050,
+ -1102491341,
+ 1036526778,
+ 1073152894,
+ -1093328080,
+ 1030013299,
+ 1055006897,
+ -1100656781,
+ -1121599757,
+ 1042851602,
+ 1057712234,
+ 1066598539,
+ -1122034030,
+ 1041255361,
+ -1120120272,
+ -1089117115,
+ -1094419675,
+ -1133210459,
+ -1062646165,
+ 1004371032,
+ 1066429569,
+ -1085761586,
+ -1082615305,
+ -1097427178,
+ 1062292957,
+ 1083973510,
+ -1081124869,
+ -1085144614,
+ 1036646229,
+ 1067426240,
+ -1089101584,
+ 1054944316,
+ -1101988333,
+ -1095082210,
+ -1095530884,
+ -1094807081,
+ 1009207665,
+ 1034977629,
+ 1020194074,
+ 1044147685,
+ -1111613708,
+ -1119582871,
+ 1041126740,
+ 1009982966,
+ -1105236063,
+ -1111740516,
+ 1054560448,
+ 1023713181,
+ 1030923383,
+ 1059258175,
+ 1030949415,
+ 1060148150,
+ 1010015850,
+ -1090029250,
+ -1097900427,
+ 1031126853,
+ 1058764711,
+ 1033869813,
+ -1103150593,
+ -1118388674,
+ -1100529368,
+ -1088219344,
+ 1058628949,
+ 1052476224,
+ 1053386158,
+ 1067963040,
+ -1090469249,
+ 1040381010,
+ 1040290917,
+ 1084171423,
+ -1075250882,
+ -1100377221,
+ -1086759211,
+ 1016977718,
+ 1077559831,
+ -1112032019,
+ -1085337301,
+ 1047301988,
+ -1118693202,
+ 1068863203,
+ -1105232004,
+ 1049134387,
+ 1065089998,
+ 1041035823,
+ -1112444488,
+ 1002216554,
+ 1050208400,
+ -1075595329,
+ -1118004832,
+ -1088669990,
+ 1035372049,
+ 1063745959,
+ -1080393081,
+ 1071764751,
+ -1082976958,
+ 1037501694,
+ -1083178613,
+ 1038109647,
+ -1100318982,
+ -1108564672,
+ 1043190622,
+ 1041476506,
+ 1042024479,
+ -1082129322,
+ 1034196152,
+ 1054387858,
+ -1096397768,
+ -1105883617,
+ -1105880266,
+ -1086864956,
+ -1087990418,
+ 1027105629,
+ -1101530087,
+ -1073409393,
+ 1036521817,
+ 1050151594,
+ -1079341277,
+ 983229060,
+ -1109231741,
+ -1073921021,
+ -1126500680,
+ -1100464158,
+ -1094760275,
+ -1081210471,
+ 1039480023,
+ -1104875882,
+ -1091283534,
+ -1091210963,
+ 1042057905,
+ 1046813780,
+ -1118745781,
+ 1075338045,
+ 1053612986,
+ -1096698585,
+ -1097295978,
+ -1112907462,
+ -1101754937,
+ 1009967781,
+ -1113227028,
+ -1090900749,
+ -1104829502,
+ -1103985451,
+ 1043255388,
+ 1036573248,
+ -1140085424,
+ -1095228630,
+ 1034750206,
+ 1021785746,
+ 1015284978,
+ -1110630643,
+ -1109555662,
+ 1020393434,
+ -1095615393,
+ -1119013345,
+ -1093885608,
+ -1135068741,
+ 1055276359,
+ -1128271070,
+ 1044245605,
+ 1049950756,
+ 1046111178,
+ 1053970602,
+ 1017597214,
+ -1086143286,
+ -1093673531,
+ 1039505791,
+ -1095014217,
+ -1093448292,
+ 1067331365,
+ -1113282817,
+ -1106348832,
+ -1092143654,
+ 1008529746,
+ 1041993944,
+ -1095882762,
+ 1051639363,
+ 1065529518,
+ -1109684837,
+ 1067536459,
+ 1035640795,
+ -1098298958,
+ 1027370381,
+ 1018094460,
+ 1063290165,
+ -1093241607,
+ -1106570704,
+ -1141554680,
+ 1060443609,
+ 987121781,
+ -1109878315,
+ -1100226834,
+ -1075275617,
+ 1048750119,
+ -1146094604,
+ 1061051228,
+ 1075406467,
+ 1042469639,
+ -1053559376,
+ 1035371214,
+ 992104886,
+ 1047736411,
+ -1075414957,
+ 1051474397,
+ -1092641260,
+ 1058507536,
+ -1086612863,
+ -1079825029,
+ -1087678173,
+ -1096719453,
+ 1060185434,
+ 1049190725,
+ 1042611236,
+ -1094986753,
+ -1065974264,
+ -1114514671,
+ 1055209472,
+ 1062883956,
+ -1122223144,
+ 1068975898,
+ 1074181406,
+ -1098450957,
+ -1102442609,
+ -1100737104,
+ -1106005444,
+ -1135245802,
+ -1134788419,
+ -1122989064,
+ -1092512910,
+ 1040227134,
+ -1135507595,
+ -1097339692,
+ 1043993368,
+ 1024658448,
+ -1122294709,
+ -1098413112,
+ 1047822346,
+ -1114130156,
+ -1106754435,
+ -1089911062,
+ -1107302814,
+ -1126556097,
+ 1065515052,
+ -1146809632,
+ 1076173162,
+ -1095567567,
+ -1132872406,
+ -1087811785,
+ 1049780981,
+ 1030265843,
+ -1088618821,
+ -1107561095,
+ 1044249830,
+ -1107138332,
+ 1055122589,
+ -1103852342,
+ -1106171399,
+ 1042962558,
+ 1056326337,
+ -1080647161,
+ 1051310439,
+ -1054816494,
+ 1058811850,
+ 1068139492,
+ -1110959591,
+ 1059599843,
+ -1117887101,
+ -1073923317,
+ -1094992197,
+ 1068945852,
+ -1095679641,
+ -1104293414,
+ 1044966703,
+ -1094994460,
+ 1050485938,
+ 1060500803,
+ -1097050368,
+ 1081552604,
+ -1120229886,
+ 1061193337,
+ -1107161977,
+ -1088506729,
+ -1099973858,
+ 1045028387,
+ -1082063163,
+ 1061241950,
+ -1118510532,
+ -1103056995,
+ 1061167545,
+ -1086536056,
+ -1067881011,
+ 1048829680,
+ -1068021162,
+ -1082908260,
+ 1048142762,
+ -1072765564,
+ 1033740732,
+ -1099752003,
+ 1056099842,
+ 1051324249,
+ 1061901419,
+ -1151190048,
+ 1088560818,
+ 1058207283,
+ 1068704682,
+ 1028677843,
+ -1129269632,
+ -1108835099,
+ 1069389669,
+ 1045683751,
+ 1069753937,
+ 1049101425,
+ 1038915115,
+ -1138410998,
+ -1092615937,
+ -1078561042,
+ -1112857020,
+ -1103623904,
+ 1029284132,
+ 1067178288,
+ -1107049872,
+ 1039870477,
+ 1053155889,
+ 1050811933,
+ 1029385477,
+ -1114747716,
+ 1023476078,
+ -1111419888,
+ -1123101425,
+ -1115620498,
+ 1006841204,
+ 997642235,
+ -1117845252,
+ 1038387813,
+ 1042721541,
+ -1140197314,
+ -1098038916,
+ 1050396398,
+ 1048996856,
+ -1115459548,
+ 1024310124,
+ 1039032488,
+ -1113326743,
+ 1062089658,
+ -1092497356,
+ 1026871107,
+ -1089583742,
+ 1026695050,
+ -1105779594,
+ 1054078332,
+ -1087645177,
+ -1115392348,
+ 1056327009,
+ -1053766498,
+ -1125990757,
+ -1109830140,
+ -1090739080,
+ 1044618119,
+ -1105594174,
+ -1088113133,
+ 1049343067,
+ -1075076707,
+ -1092357289,
+ -1089336145,
+ -1071073331,
+ -1087315040,
+ -1108452282,
+ 1043269804,
+ -1080810652,
+ -1064573535,
+ 1047374464,
+ 1059970323,
+ 1057425602,
+ 1061675310,
+ 1035563702,
+ 1028375932,
+ -1094930685,
+ -1087206653,
+ -1123409085,
+ 1049834719,
+ 1066650077,
+ -1111178393,
+ -1079273393,
+ -1109969192,
+ 1074998134,
+ -1117597063,
+ -1074545973,
+ -1085912956,
+ 1043852655,
+ -1130839763,
+ -1099049360,
+ -1082825100,
+ -1104909231,
+ 1044450008,
+ -1117624937,
+ -1104387914,
+ 1041721821,
+ -1111841846,
+ 1051437165,
+ -1095674404,
+ -1103991461,
+ 1038570672,
+ -1103178207,
+ 1053558342,
+ -1116583017,
+ 1032442585,
+ 1046293094,
+ 1073376879,
+ 1046404137,
+ -1173176521,
+ 1057312507,
+ 1018303140,
+ 1035568717,
+ -1136685868,
+ 1049389646,
+ 1056323494,
+ 1025703904,
+ -1113182416,
+ 1049185966,
+ -1113141891,
+ 1065306522,
+ 1031450018,
+ -1133949480,
+ 1046762411,
+ 1016287901,
+ -1106495036,
+ 1041346829,
+ -1130235504,
+ -1099977072,
+ 1007896940,
+ -1060750611,
+ -1073036276,
+ 1026701581,
+ 1078676862,
+ 1016823298,
+ 1033689323,
+ 1030956140,
+ 1045259953,
+ -1084981797,
+ -1091619370,
+ -1054237143,
+ -1105985795,
+ -1090460062,
+ 1063264366,
+ -1110493978,
+ 1015619962,
+ 1051987568,
+ 1033061759,
+ -1093422293,
+ -1110924208,
+ -1111039386,
+ 1055289796,
+ -1081277893,
+ 1057711968,
+ 1025599770,
+ -1063230824,
+ 1047362777,
+ -1092632264,
+ 1069018118,
+ -1085850236,
+ -1081259876,
+ -1074752604,
+ 1012396028,
+ -1089317073,
+ -1095879328,
+ -1114002107,
+ -1113216599,
+ 1063986975,
+ -1132338848,
+ 1038199344,
+ -1102934943,
+ 1043418985,
+ 1042949181,
+ 1071394337,
+ -1090607427,
+ -1093609382,
+ -1115748559,
+ 1053073386,
+ -1062795083,
+ 1054968946,
+ -1084807203,
+ -1096443929,
+ -1090281535,
+ 1029767554,
+ -1109301390,
+ -1106064606,
+ 1066240253,
+ -1082140528,
+ -1116421811,
+ -1087215959,
+ -1086088874,
+ -1078095146,
+ 1067453679,
+ -1122319070,
+ -1101122832,
+ 1057011043,
+ 1049453304,
+ -1117807920,
+ -1100257889,
+ -1089727630,
+ 1048627187,
+ -1114254017,
+ -1111220128,
+ 1065071917,
+ -1101437537,
+ 1040437570,
+ -1083934254,
+ 1050824906,
+ -1144442970,
+ -1077896076,
+ 1053569341,
+ -1131695200,
+ 1049538176,
+ 1028048046,
+ 1039534735,
+ 1031484818,
+ 1035127261,
+ 1044941643,
+ 1050231126,
+ 1029702278,
+ 1017450452,
+ -1100044897,
+ 1057206521,
+ -1104085492,
+ -1098528069,
+ -1097709948,
+ 1047924307,
+ 1062432754,
+ -1100014078,
+ 1032255481,
+ -1091112777,
+ 1050581265,
+ -1090045241,
+ -1075186265,
+ 1041989940,
+ -1071435937,
+ -1096810298,
+ -1101200100,
+ -1096882547,
+ -1084417681,
+ -1081386915,
+ -1104913384,
+ -1115265966,
+ -1096059552,
+ 1041514899,
+ -1098898850,
+ 1040533842,
+ -1095075584,
+ -1113616665,
+ -1087130337,
+ 1043199304,
+ 1046393462,
+ 1038740366,
+ -1093729882,
+ 1060245190,
+ -1074450825,
+ -1105509093,
+ 1009027721,
+ 1060569333,
+ 1037645215,
+ 1060842212,
+ -1207503872,
+ -1151424532,
+ -1105281420,
+ 1054634256,
+ -1104203949,
+ 1077623863,
+ -1096085548,
+ 1075061393,
+ 1052065562,
+ 1057537026,
+ 1060230289,
+ -1103314027,
+ -1136674778,
+ -1088639093,
+ -1102257933,
+ -1102975794,
+ -1092109947,
+ -1074780649,
+ 994681688,
+ 1060480519,
+ -1098476254,
+ 1060270530,
+ 1049920223,
+ -1097627217,
+ 1035740218,
+ -1069129318,
+ -1079047758,
+ -1090121219,
+ 1031841269,
+ -1130160146,
+ 1044721617,
+ -1077104403,
+ -1136312760,
+ 1029704941,
+ -1085304400,
+ 1060310848,
+ -1111323206,
+ -1093419645,
+ 1036674176,
+ -1103055304,
+ 1069355440,
+ -1095212080,
+ -1133510048,
+ 1053708498,
+ 1024077428,
+ -1101711580,
+ 1044793419,
+ -1122072479,
+ -1146026843,
+ 1057803306,
+ -1122894547,
+ -1072699006,
+ -1095105679,
+ 1036106904,
+ -1112306892,
+ -1096554394,
+ 1055067619,
+ 1064577670,
+ -1081430352,
+ 1019576365,
+ 1050487720,
+ -1103616544,
+ -1081063270,
+ 1061720907,
+ -1085477060,
+ -1117229658,
+ -1074758356,
+ -1114318498,
+ 1059902361,
+ 1037753483,
+ -1103784583,
+ 1053166919,
+ 1042087169,
+ -1147345644,
+ 1074554673,
+ -1063651181,
+ -1066335303,
+ 1066408857,
+ -1060665381,
+ -1083674830,
+ 1062944961,
+ 1058973602,
+ -1075807612,
+ -1073137859,
+ 1079560985,
+ 1073227848,
+ 1078744398,
+ -1081551649,
+ -1089046982,
+ 1073086933,
+ 1064235655,
+ 1069734744,
+ -1078442664,
+ 1046707341,
+ 1075134062,
+ -1074644346,
+ 1064473025,
+ 1065935157,
+ -1088076986,
+ 1084139076,
+ 1037753757,
+ -1098108355,
+ 1081036488,
+ 1076216256,
+ -1075518055,
+ -1079118426,
+ 1067259640,
+ 1075653326,
+ 1088354069,
+ 1084067991,
+ 1074939208,
+ -1077886944,
+ 1079359294,
+ 1072082026,
+ -1081204426,
+ -1059872625,
+ 1058340680,
+ -1101036101,
+ -1074526240,
+ 1079947098,
+ -1076518295,
+ 1050408058,
+ 1062102837,
+ 1053097768,
+ 1065902359,
+ 1062592257,
+ 1049622415,
+ 1065499885,
+ -1075393717,
+ 1054730665,
+ -1108230914,
+ -1107125086,
+ -1127875233,
+ -1100112833,
+ 1063755564,
+ 1065983558,
+ 1065394821,
+ 1066239537,
+ -1091908036,
+ 1071884749,
+ 1052031889,
+ 1065373723,
+ -1081365896,
+ 1075041580,
+ -1089744735,
+ 1087095363,
+ -1089025914,
+ 1031316807,
+ -1062268502,
+ 1061880198,
+ 1077053094,
+ -1082904100,
+ 1085543985,
+ 1065488158,
+ -1063838704,
+ -1072741084,
+ 1074839523,
+ -1083018082,
+ -1070190075,
+ 1075171524,
+ -1076289892,
+ -1063204308,
+ -1090394623,
+ -1087827061,
+ -1076977464,
+ -1069305784,
+ 1057746459,
+ 1063140874,
+ -1084832610,
+ 1062897517,
+ 1074274945,
+ -1093415025,
+ 1038576590,
+ 1061092145,
+ 1089001619,
+ -1070658660,
+ -1078496166,
+ 1058106887,
+ -1067052905,
+ 1064353675,
+ 1070834893,
+ -1077133889,
+ -1080579457,
+ 1048926092,
+ 1057640404,
+ 1048219476,
+ -1090007227,
+ 1065091033,
+ 1054993356,
+ 1022285517,
+ -1080463197,
+ -1073594613,
+ 1062694298,
+ -1070630535,
+ -1098368416,
+ 1026083180,
+ 1071996685,
+ 1063519260,
+ -1076141391,
+ -1070440153,
+ -1069209497,
+ -1096646489,
+ -1065271957,
+ -1062144882,
+ -1078262046,
+ -1109991740,
+ -1089308407,
+ 1080504469,
+ 1049691139,
+ -1100081368,
+ 1052667217,
+ -1078073443,
+ 1053713024,
+ 1034206093,
+ -1081894380,
+ -1103134953,
+ -1088072490,
+ -1088221587,
+ 1032598163,
+ -1130556299,
+ -1123240112,
+ -1086125463,
+ 1059551197,
+ 1065671201,
+ -1086503984,
+ 1047226414,
+ -1086775718,
+ -1111861986,
+ -1122790635,
+ -1120182438,
+ -1139575981,
+ -1090459300,
+ -1091963660,
+ 1064556548,
+ -1113966100,
+ 1051260827,
+ -1096096649,
+ -1076263734,
+ -1080836303,
+ -1078460911,
+ 1076426444,
+ -1079979590,
+ 1053428617,
+ -1097419933,
+ -1079366581,
+ -1093410234,
+ 1062181259,
+ -1096449187,
+ -1085978055,
+ 1049158372,
+ -1076401483,
+ -1086925501,
+ -1092127136,
+ 1059957429,
+ -1078490037,
+ -1072616485,
+ 1057580187,
+ -1095315328,
+ 1077143475,
+ -1072068138,
+ 1070753738,
+ 1042139471,
+ 1058138090,
+ -1097809694,
+ 1055194040,
+ 1054856419,
+ -1053279029,
+ 1079835273,
+ 1076084715,
+ -1068163765,
+ 1066100769,
+ -1066597409,
+ -1068738436,
+ -1074042472,
+ -1111510672,
+ 1068485875,
+ -1080936107,
+ -1071587419,
+ -1081676755,
+ 1075637719,
+ 1062309873,
+ -1071418604,
+ -1069319174,
+ -1066305960,
+ -1069529372,
+ 1080858712,
+ 1063227876,
+ 1075809494,
+ -1073611346,
+ -1092568874,
+ 1062122407,
+ -1088644499,
+ 1075776019,
+ 1064684316,
+ -1093716517,
+ 1067119883,
+ 1082138535,
+ 1083462075,
+ 1022836246,
+ -1069630661,
+ 1073306903,
+ -1086893154,
+ 1057215505,
+ -1064351485,
+ -1089609406,
+ 1079922416,
+ 1074292381,
+ -1090900893,
+ -1105063847,
+ 1040158229,
+ -1077461783,
+ 1072513013,
+ -1133539367,
+ 1054284389,
+ 1070408171,
+ 1063286725,
+ -1126031306,
+ 1043561169,
+ 1066048056,
+ -1087608411,
+ 1067062798,
+ -1086136146,
+ 1067582901,
+ 1082436993,
+ 1047528823,
+ -1076259964,
+ -1091847371,
+ -1109455446,
+ -1070943921,
+ -1076894352,
+ 1058849802,
+ -1090371701,
+ -1114596581,
+ 1068062822,
+ -1064036339,
+ -1074440350,
+ -1074361877,
+ 1032799354,
+ -1100656717,
+ 1050271032,
+ 1062078057,
+ -1081631795,
+ 1079656564,
+ 1075119704,
+ -1079534328,
+ -1067897141,
+ -1056762737,
+ -1089436003,
+ -1078395578,
+ -1079616198,
+ -1075871781,
+ -1080845097,
+ 1082261460,
+ -1084198105,
+ -1068655706,
+ 1073048074,
+ -1077193084,
+ 1067890812,
+ -1082936755,
+ -1067201290,
+ 1067620237,
+ 1065911901,
+ -1075870013,
+ -1072779239,
+ 1064326372,
+ 1082992719,
+ -1072386531,
+ 1057010668,
+ -1078380952,
+ -1079162961,
+ 1060561552,
+ -1098229243,
+ 1084975563,
+ -1069519511,
+ 1075765444,
+ -1064389671,
+ 1066448250,
+ -1086947801,
+ 1079316358,
+ 1065691709,
+ 1060926838,
+ -1066227071,
+ 1053103817,
+ 1065944301,
+ -1067993673,
+ 1082419790,
+ -1087588636,
+ -1076743642,
+ -1082339837,
+ -1078863497,
+ -1066844626,
+ 1070815750,
+ -1073245414,
+ -1063437998,
+ 1049160358,
+ -1099864993,
+ -1105026778,
+ 1033721013,
+ 1054029791,
+ -1082299881,
+ -1083576168,
+ 1041175875,
+ -1082482793,
+ -1104319515,
+ -1088914676,
+ 1066740500,
+ 1067114977,
+ 1061460043,
+ -1078134051,
+ 1069248299,
+ -1087756436,
+ 1066751003,
+ -1090267715,
+ -1088460460,
+ 1066442950,
+ 1045613684,
+ 1074716838,
+ -1094660326,
+ 1060970210,
+ -1090026086,
+ 1074572135,
+ -1071361510,
+ -1070889767,
+ -1078395569,
+ 1060883685,
+ 1067979164,
+ 1067228967,
+ 1037424464,
+ -1065491989,
+ -1082300058,
+ 1059429486,
+ -1069492669,
+ 1068247017,
+ -1077561939,
+ 1060955142,
+ 1083847703,
+ 1067764877,
+ -1093821380,
+ 1071500050,
+ 1076501641,
+ 1071940244,
+ 1065100469,
+ 1058244464,
+ 1051776732,
+ 1084516603,
+ -1090452745,
+ 1057829707,
+ 1078829322,
+ -1083918765,
+ 1042547012,
+ -1072792091,
+ -1081239388,
+ -1113281688,
+ -1072033765,
+ -1076079915,
+ -1089103968,
+ -1096886121,
+ -1093477643,
+ -1075288026,
+ -1070662574,
+ 1062182262,
+ -1082825229,
+ -1096436549,
+ -1081884947,
+ -1066661566,
+ -1074706179,
+ 1074593541,
+ -1075771602,
+ 1066452144,
+ 1070077387,
+ -1068674444,
+ -1079006784,
+ 1078273962,
+ 1066542704,
+ 1063150880,
+ -1131216672,
+ 1061774065,
+ -1073112991,
+ -1086017283,
+ 1073630370,
+ -1080672605,
+ 1076922476,
+ 1058127277,
+ 1065978740,
+ 1076081001,
+ 1059890640,
+ 1064432730,
+ 1079678569,
+ 1052820063,
+ -1101403914,
+ -1089045740,
+ 1061084148,
+ -1077886375,
+ -1097258532,
+ 1051441222,
+ -1096040827,
+ 1061886150,
+ 1060876524,
+ 1048617498,
+ -1131953302,
+ 1018352820,
+ 1059330755,
+ -1105621682,
+ -1088780443,
+ -1088929767,
+ -1099188289,
+ 1076807963,
+ -1094678808,
+ 1066723161,
+ -1090543824,
+ 1054946355,
+ -1079391199,
+ -1089268986,
+ -1081432098,
+ -1081941474,
+ 1056524345,
+ 1068951551,
+ 1043597672,
+ 1057913202,
+ 1065963598,
+ -1079993979,
+ -1085282696,
+ 1067505795,
+ -1081976659,
+ 1044084590,
+ 1073392539,
+ 1064083779,
+ -1072622069,
+ 1064719326,
+ 1082186790,
+ -1071944920,
+ 1052748410,
+ 1071634447,
+ 1051670234,
+ -1094223379,
+ 1069265369,
+ 1070627139,
+ -1105806828,
+ -1076916265,
+ 1065995091,
+ -1092402311,
+ 1050050665,
+ -1098839941,
+ 1055397790,
+ -1080472964,
+ -1071429143,
+ 1067029046,
+ 1058960395,
+ 1074622903,
+ 1060471620,
+ -1098800771,
+ -1088166294,
+ -1078631322,
+ -1072371232,
+ 1060559807,
+ 1072656909,
+ 1080111424,
+ -1086357828,
+ 1077686406,
+ -1072726091,
+ 1074387564,
+ -1104469965,
+ 1058870318,
+ 1073324286,
+ 1069471301,
+ 1079033893,
+ 1059016128,
+ 1077776746,
+ 1073106751,
+ 1071889636,
+ -1070927005,
+ -1086868002,
+ 1068090115,
+ -1070448594,
+ -1090540757,
+ 1070685485,
+ 1063129718,
+ 1070536108,
+ 1074742700,
+ -1081690179,
+ 1027443884,
+ -1091145739,
+ -1088123336,
+ 1015139420,
+ -1087910814,
+ -1088752349,
+ 1035780621,
+ -1110306830,
+ -1092136102,
+ -1141437109,
+ 1063930496,
+ 1053900401,
+ -1100210020,
+ 1050805032,
+ -1083286907,
+ 1038911196,
+ -1086569470,
+ -1118679918,
+ 1041246402,
+ 1050618548,
+ 1058776300,
+ -1095207486,
+ 1056445550,
+ 1052520755,
+ -1113185923,
+ -1077022190,
+ -1074914107,
+ 1060129460,
+ 1060914277,
+ -1073836487,
+ 1037639755,
+ 1073280781,
+ 1064535672,
+ -1099835086,
+ 1050732521,
+ -1145982262,
+ -1078674577,
+ 1067917529,
+ -1111299671,
+ -1078932948,
+ 1057018084,
+ 1079648633,
+ 1040894660,
+ -1081662412,
+ 1071425533,
+ -1098410133,
+ 1059948420,
+ -1074910302,
+ -1106098008,
+ 1055692824,
+ 1074953479,
+ -1093039866,
+ -1084484701,
+ -1066849315,
+ -1058464798,
+ -1106884193,
+ -1097542792,
+ -1067536520,
+ -1070532849,
+ -1091076043,
+ 1076927405,
+ -1061465847,
+ 1038113567,
+ -1091003015,
+ -1085550416,
+ 1073297080,
+ 1070583290,
+ -1090438651,
+ -1080147427,
+ 1056176459,
+ -1083624779,
+ 1057498665,
+ 1069074685,
+ -1076825989,
+ 1077900028,
+ 1076064108,
+ 1052791385,
+ 1052739090,
+ 1043848517,
+ -1082193690,
+ -1090512009,
+ -1079305834,
+ 1060398879,
+ 1044494978,
+ -1087022812,
+ 1081054820,
+ 1023798805,
+ 1076628316,
+ 1058662376,
+ 1075006331,
+ -1078105880,
+ -1065487749,
+ -1086798122,
+ -1071922500,
+ 1058218202,
+ -1118409550,
+ 1042074469,
+ 1063969552,
+ -1101909227,
+ -1118558563,
+ 1049274557,
+ 1060371437,
+ -1081302415,
+ -1093806435,
+ 1054114691,
+ -1081963917,
+ 1065425577,
+ 1045714678,
+ -1090026209,
+ -1114527138,
+ -1072479502,
+ -1104934435,
+ -1088269025,
+ 1062302407,
+ -1100524342,
+ 1056792105,
+ 1069726958,
+ 1062492720,
+ -1071696569,
+ -1098367244,
+ 1077806283,
+ 1062137254,
+ -1108057900,
+ 1075817318,
+ 1072875893,
+ -1103179019,
+ -1072411691,
+ 1070457970,
+ 1067356701,
+ 1068806667,
+ 1059437122,
+ -1064520512,
+ 1038320033,
+ -1082939190,
+ -1079434469,
+ -1078505115,
+ 1054456405,
+ 1071121615,
+ 1036171774,
+ -1079804911,
+ -1068572805,
+ 1048992125,
+ -1093493012,
+ -1088319687,
+ 1066636287,
+ 1057589839,
+ -1067716732,
+ -1091445912,
+ 1031851041,
+ -1069122582,
+ 1069835055,
+ 1055035016,
+ -1066720856,
+ -1079341344,
+ -1079136946,
+ -1080816790,
+ -1096844749,
+ 1061266738,
+ -1085436371,
+ -1082804856,
+ -1067691676,
+ 1066346209,
+ 1077929327,
+ 1073582666,
+ 1058087463,
+ 1068094126,
+ -1080729906,
+ 1083445492,
+ -1089142629,
+ -1077962962,
+ 1065804781,
+ 1060468413,
+ 1059386101,
+ 1040535256,
+ 1068502301,
+ 1071214824,
+ -1062823698,
+ 1082711365,
+ 1040808639,
+ -1077040913,
+ 1055794046,
+ 1075281927,
+ -1067516350,
+ 1080706161,
+ -1120092601,
+ -1092185549,
+ -1094395848,
+ 1050304627,
+ 1063429672,
+ 1064436717,
+ 1038611863,
+ -1095538412,
+ 1034240734,
+ -1083541787,
+ 1065670052,
+ -1109993473,
+ 1045756328,
+ -1094092034,
+ -1109717362,
+ -1123867786,
+ 1039106561,
+ -1135606702,
+ -1095844439,
+ -1090579289,
+ -1089632757,
+ -1082066023,
+ -1097526499,
+ 1065726260,
+ 1051030258,
+ 1066301019,
+ -1089060150,
+ 1078037320,
+ -1073601163,
+ -1076050242,
+ -1106307239,
+ 1062314035,
+ 1066777313,
+ -1104143093,
+ -1096020297,
+ -1076629339,
+ -1073232493,
+ -1113689330,
+ 1035490317,
+ -1078229519,
+ 1054911588,
+ 1062795466,
+ -1071797101,
+ -1107390453,
+ 1057870548,
+ 1059810384,
+ -1097912845,
+ 1072721686,
+ -1081315313,
+ -1118230428,
+ 1072184375,
+ -1074209133,
+ -1110688340,
+ 1074444724,
+ -1073061006,
+ 1058417124,
+ -1087908948,
+ -1075962559,
+ 1062156694,
+ -1092270433,
+ -1078247465,
+ -1072170574,
+ -1080218612,
+ 1021463946,
+ 1057586136,
+ -1106114563,
+ -1089108299,
+ 1065158945,
+ 1053705852,
+ 1057485790,
+ 1037649662,
+ -1087360820,
+ 1038432063,
+ 1065787557,
+ 1064799982,
+ -1108874220,
+ -1072869961,
+ 1075057781,
+ -1075184425,
+ -1080566625,
+ -1099436339,
+ -1106332889,
+ -1087537092,
+ -1070425011,
+ -1063942737,
+ -1083373792,
+ 1070229091,
+ 1072130700,
+ 1053046986,
+ 1055283477,
+ 1066102796,
+ -1062204780,
+ -1099755415,
+ 1028168514,
+ -1101491336,
+ -1101247213,
+ -1087649515,
+ 1051221335,
+ 1015329731,
+ 1007861842,
+ 1056629218,
+ -1093480262,
+ -1181156804,
+ -1076635631,
+ 1055698206,
+ 1043665238,
+ -1080760646,
+ 1056222191,
+ 1039130571,
+ -1108265495,
+ -1069116168,
+ -1093288481,
+ -1077825943,
+ 1063053327,
+ -1142269376,
+ 1024246483,
+ -1083470935,
+ -1081242171,
+ -1088392132,
+ 1065098265,
+ -1105649250,
+ -1114254707,
+ -1076067680,
+ -1112920211,
+ -1078422884,
+ -1090003740,
+ 1067001275,
+ -1088260488,
+ -1090667158,
+ -1097993581,
+ -1080277704,
+ 1023007337,
+ -1106354240,
+ -1080553973,
+ 1058960699,
+ 1052265081,
+ -1085737549,
+ -1081756391,
+ 1056941090,
+ -1079025424,
+ -1078093313,
+ 1065385216,
+ 1068038776,
+ 1060379100,
+ 1056678637,
+ -1070704353,
+ -1077357144,
+ 1064048451,
+ 1050362135,
+ -1079040819,
+ -1087825055,
+ -1075880495,
+ 1069890056,
+ -1066985953,
+ -1087414216,
+ 1058971076,
+ 1054023714,
+ 1073090865,
+ -1096295800,
+ 1066099241,
+ 1072605185,
+ 1068017232,
+ -1096539426,
+ -1083025636,
+ 1064079118,
+ 1063778392,
+ -1079614176,
+ 1072267501,
+ -1083262523,
+ -1090629751,
+ -1081971621,
+ 1064029646,
+ 1059825110,
+ -1100577131,
+ 1066793193,
+ -1075449969,
+ -1074796400,
+ -1076368976,
+ 1072055397,
+ -1081247526,
+ -1069414791,
+ -1106166847,
+ -1073596755,
+ -1075113036,
+ 1052355903,
+ 1057495020,
+ 1051434632,
+ -1111377444,
+ 1050292798,
+ 1051507720,
+ 1037700787,
+ 1049917292,
+ -1094537388,
+ 1051081961,
+ 1059509960,
+ -1085260832,
+ 1052326688,
+ -1096479103,
+ 1045829697,
+ 1051582475,
+ 1067118345,
+ 1049742172,
+ 1042357487,
+ 1042597534,
+ -1085042105,
+ 1063914415,
+ -1088521312,
+ 1060104086,
+ -1078745381,
+ 1067862638,
+ -1091821852,
+ 1051493498,
+ -1086539370,
+ 1062819898,
+ 1050626483,
+ -1090383461,
+ 1068854792,
+ -1110753177,
+ -1078044493,
+ 1050604404,
+ -1079502360,
+ -1079547675,
+ -1100404348,
+ -1109844228,
+ -1087366197,
+ -1073056293,
+ -1088964247,
+ -1073016966,
+ -1072988698,
+ -1083327623,
+ 1066751318,
+ -1088263219,
+ 1078675351,
+ -1075498670,
+ 1066767257,
+ 1074404560,
+ 1072359046,
+ 1077706039,
+ -1055780335,
+ -1082365356,
+ -1086682118,
+ -1062915146,
+ -1070837926,
+ -1072396457,
+ 1056392122,
+ 1083335821,
+ -1092607195,
+ -1128790456,
+ 1071658907,
+ -1079819868,
+ -1068170642,
+ 1044806844,
+ -1084112626,
+ 1065341433,
+ 1062572661,
+ 1052618566,
+ 1046453122,
+ -1084834536,
+ -1063268894,
+ -1063013858,
+ -1098263564,
+ -1071253224,
+ 1059108515,
+ -1098292513,
+ -1064038835,
+ 1056370560,
+ -1080149920,
+ 1060107973,
+ 1059854414,
+ 1075438190,
+ 1073203142,
+ -1081212374,
+ 1074122928,
+ -1084418379,
+ -1106244900,
+ 1065294153,
+ -1098081457,
+ -1112309194,
+ -1096444036,
+ -1099283486,
+ -1072569816,
+ -1084164188,
+ 1039608809,
+ 1044922765,
+ -1092578083,
+ 1080891979,
+ -1082015717,
+ -1091828211,
+ 1076560066,
+ 1073666007,
+ -1103142142,
+ -1074127597,
+ -1088041982,
+ -1086523590,
+ -1096920567,
+ 1067103740,
+ 1069577620,
+ -1092996918,
+ -1101901137,
+ -1080886977,
+ -1072142758,
+ 1072862495,
+ 1070764882,
+ -1072449078,
+ -1063771106,
+ -1087835809,
+ -1083045286,
+ -1106804453,
+ -1076699311,
+ -1084672075,
+ 1060548767,
+ -1141334938,
+ 1071725775,
+ -1105541449,
+ -1056948165,
+ -1069899696,
+ 1062451139,
+ -1072673612,
+ -1074367545,
+ -1070710571,
+ 1075512231,
+ -1078943868,
+ -1137387067,
+ -1098330572,
+ 1060184652,
+ 1063110307,
+ -1104350244,
+ -1093964957,
+ -1087306482,
+ -1078523234,
+ 1080102815,
+ 1061973498,
+ -1097142129,
+ -1080792453,
+ -1114825126,
+ -1085077645,
+ 1074038815,
+ -1087951953,
+ -1115813873,
+ -1111513569,
+ -1098622205,
+ 1067728629,
+ 1059067352,
+ 1059237627,
+ 1068342465,
+ -1088965748,
+ -1079451105,
+ 1059387771,
+ -1097097098,
+ 1057448393,
+ -1085643523,
+ 1069454665,
+ -1101110974,
+ 1074448998,
+ 1052041247,
+ 1015965924,
+ -1075834522,
+ -1071639512,
+ -1086454941,
+ 1041043132,
+ 1078092140,
+ -1079205332,
+ 1067377271,
+ -1094732255,
+ -1070893474,
+ 1060681374,
+ -1085636506,
+ -1071577181,
+ -1115820121,
+ 1055197746,
+ 1033600919,
+ -1105980877,
+ 1035308775,
+ 1053215144,
+ 1053334834,
+ 1032579576,
+ -1087582404,
+ 1047272362,
+ 1038448145,
+ -1098588044,
+ 1060049522,
+ -1100071790,
+ 1059615328,
+ 1058043781,
+ 1058936069,
+ -1097375953,
+ -1099138783,
+ 1063901187,
+ -1102307502,
+ -1120394153,
+ -1095390898,
+ 1058633628,
+ 1051203889,
+ 1042691558,
+ 1059771796,
+ 1061141828,
+ -1095719020,
+ 1053168302,
+ 1040999395,
+ -1107508926,
+ 1057732882,
+ -1107032191,
+ -1085295167,
+ 1049823881,
+ -1083656834,
+ -1096950110,
+ -1074721388,
+ -1062935671,
+ 1051858961,
+ -1079456362,
+ 1057663274,
+ -1093836302,
+ -1083413360,
+ 1066767231,
+ 1066120138,
+ -1100142068,
+ 1071092702,
+ 1050853403,
+ -1091784999,
+ -1065092435,
+ 1060483931,
+ 1027588835,
+ -1080643582,
+ -1072942065,
+ -1093031570,
+ -1097429957,
+ -1106437518,
+ -1085087123,
+ 1050642071,
+ -1101616431,
+ -1080983213,
+ 1056730893,
+ -1078043188,
+ 1057483670,
+ -1073460453,
+ -1080394141,
+ -1093599999,
+ 1054325276,
+ 1082702169,
+ 1074933176,
+ -1080851978,
+ 1057201273,
+ -1094053711,
+ -1089205804,
+ 1057363672,
+ -1086904792,
+ 1055096528,
+ 1039993163,
+ 1076173944,
+ 1017537907,
+ 1059997908,
+ 1051374293,
+ 1080935481,
+ -1086323838,
+ -1084795252,
+ 1070666929,
+ 1075955951,
+ 1072608271,
+ -1111016475,
+ 1078829729,
+ -1118112077,
+ 1053719360,
+ -1097598562,
+ 1043968850,
+ -1080894013,
+ -1089956825,
+ 1048850772,
+ -1110058767,
+ 1028756370,
+ 1059222566,
+ 992572400,
+ -1080995251,
+ 1057373314,
+ 1059347033,
+ 1052956837,
+ -1073002248,
+ -1105385537,
+ -1107579077,
+ 1061841397,
+ 1056446341,
+ 1060245710,
+ -1081879406,
+ -1119849904,
+ -1076043681,
+ 1054975994,
+ 1049032829,
+ 1068424433,
+ -1086804754,
+ -1078506643,
+ 1036424930,
+ 1026225862,
+ 1021157284,
+ 1063752590,
+ -1105460322,
+ -1079324592,
+ 1058021316,
+ -1082557243,
+ 1054762773,
+ 1034194208,
+ -1090182571,
+ 1042311615,
+ -1103507660,
+ -1065817621,
+ -1083786711,
+ -1084877867,
+ 1057513001,
+ 1056710905,
+ -1100497262,
+ 1074143471,
+ -1173110424,
+ 1048795089,
+ -1107453991,
+ -1084675998,
+ -1097878445,
+ 1094386998,
+ 1074100791,
+ 1071665464,
+ -1079220094,
+ 1065525343,
+ -1079378304,
+ -1077218364,
+ -1079239048,
+ -1091286507,
+ 1053591845,
+ -1078787131,
+ 1065274560,
+ -1072547713,
+ -1084363942,
+ 1088071741,
+ -1082005017,
+ -1130717432,
+ 1045061671,
+ 1045970539,
+ 1061395651,
+ -1075316693,
+ -1096732053,
+ -1084625613,
+ -1084841604,
+ 1068526952,
+ 1065701666,
+ 1072113436,
+ 1061586888,
+ -1077861006,
+ -1070716565,
+ -1062815971,
+ -1072789358,
+ -1078691616,
+ 1052750813,
+ -1074866267,
+ -1089759526,
+ -1074054034,
+ -1072042640,
+ -1094116030,
+ 1043636580,
+ -1127046630,
+ 1053351244,
+ -1128324567,
+ 1061694916,
+ 1023978779,
+ 1028475744,
+ 1046467070,
+ -1098825639,
+ -1080302859,
+ -1104173264,
+ 1050571474,
+ -1085517353,
+ 1043262684,
+ -1097407615,
+ 1059954989,
+ -1128914416,
+ -1082842823,
+ 1036947223,
+ -1098907349,
+ 1060392493,
+ -1089371398,
+ -1091721343,
+ -1085626562,
+ 1071328160,
+ 1076938337,
+ 1066428116,
+ -1066231198,
+ 1076965740,
+ -1098159092,
+ -1082605584,
+ -1092218819,
+ 1058108174,
+ 1038501423,
+ -1098523559,
+ 1073834517,
+ 1046375510,
+ -1079047677,
+ -1096125648,
+ 1037880225,
+ -1078342541,
+ 1090373474,
+ 1049585311,
+ -1079127512,
+ 1038124228,
+ -1082273110,
+ 1069463525,
+ 1067217267,
+ -1118651219,
+ -1078376545,
+ -1088719598,
+ 1058776478,
+ 1043814497,
+ -1075277863,
+ 1072701174,
+ 1065671071,
+ -1070147413,
+ -1062325087,
+ -1092822098,
+ 1028671060,
+ -1066037934,
+ -1082878966,
+ -1087837465,
+ -1073520334,
+ -1079638235,
+ -1085813499,
+ -1073349234,
+ -1080965754,
+ 1075303292,
+ -1089140897,
+ 1045832609,
+ 1058469932,
+ 1083044860,
+ 1081352661,
+ 1064599351,
+ -1074172303,
+ -1098890486,
+ 1078253002,
+ -1081016418,
+ 1061707522,
+ 1072257712,
+ 1066112287,
+ 1076346609,
+ -1080203738,
+ 1077340514,
+ -1078482260,
+ -1121469108,
+ 1077812279,
+ 1073379446,
+ 1057914863,
+ -1097092524,
+ -1082577663,
+ 1058813128,
+ 1067286884,
+ -1090284780,
+ 1064471773,
+ 1060765787,
+ -1092344039,
+ -1105751320,
+ 1063137941,
+ -1088409371,
+ 1050516259,
+ -1078062607,
+ 1034960755,
+ -1085300060,
+ 1047593412,
+ -1081998199,
+ -1112063697,
+ 1043004159,
+ -1080865040,
+ 1062238789,
+ -1073429797,
+ -1114046409,
+ 1034066803,
+ 1053526894,
+ -1066340970,
+ 1079847339,
+ -1098038034,
+ 1065519090,
+ 1084134460,
+ 1078200614,
+ -1072002787,
+ 1052132949,
+ 1060950449,
+ 1031974903,
+ -1082936294,
+ 1066035564,
+ 1066205661,
+ -1079442876,
+ 1051687540,
+ -1089182828,
+ -1094314806,
+ -1071663019,
+ -1064504209,
+ 1065803646,
+ -1079651884,
+ -1127917510,
+ 1059386849,
+ -1078145176,
+ 1083588848,
+ 1053073555,
+ -1075001263,
+ -1105448057,
+ 1046593813,
+ 1046698476,
+ -1067106100,
+ 1049395370,
+ -1079274140,
+ 1068269028,
+ 1066066946,
+ -1080387143,
+ -1079413821,
+ 1060262189,
+ 1072219935,
+ 1069068577,
+ -1081510358,
+ -1107994358,
+ -1089632744,
+ -1080216655,
+ -1069256382,
+ -1094937085,
+ -1124264035,
+ 1050418768,
+ -1085529642,
+ 1076382848,
+ 1047866889,
+ -1079068321,
+ -1080695433,
+ 1056980204,
+ 1075228646,
+ 1060650786,
+ 1067699597,
+ 1068225902,
+ 1074892027,
+ -1068146744,
+ -1072729233,
+ 1069171041,
+ -1080931652,
+ 1063734670,
+ -1105900704,
+ 1062615000,
+ 1064994664,
+ 1071026709,
+ -1088583026,
+ 1058298554,
+ 1048750208,
+ 1038273748,
+ -1097111654,
+ 1043001059,
+ 1033823156,
+ 1049852168,
+ -1097004050,
+ -1077690253,
+ -1083473801,
+ -1100818160,
+ 1045059120,
+ -1131288198,
+ 1062066120,
+ -1082573257,
+ 1061658506,
+ 1042328589,
+ 1054523355,
+ 1064695961,
+ -1094529896,
+ -1128447718,
+ -1090146102,
+ 1054095564,
+ 1068928800,
+ 1070890990,
+ 1067889423,
+ 1059810470,
+ -1078801236,
+ 1076211723,
+ -1086990841,
+ -1072812256,
+ -1069774114,
+ -1107137389,
+ 1061354488,
+ 1052598831,
+ 1066721661,
+ -1083827843,
+ -1072561742,
+ 1072273925,
+ -1090689440,
+ -1076850452,
+ -1077067336,
+ 1074189733,
+ -1071796510,
+ -1121781591,
+ -1084382359,
+ 1075040821,
+ 1067936800,
+ -1117279311,
+ -1081800307,
+ 1055559042,
+ -1106497686,
+ -1085665064,
+ -1070267888,
+ -1096137513,
+ 1064396064,
+ 1076296796,
+ 1073428277,
+ -1085397353,
+ -1078428262,
+ 1075078800,
+ 1060586600,
+ 1033667475,
+ -1081124424,
+ -1089040810,
+ 1069133695,
+ 1063091111,
+ -1089980658,
+ 1065688007,
+ 1065159819,
+ 1052850957,
+ 1029827737,
+ -1071121949,
+ 1066611455,
+ 1060609855,
+ 1063613171,
+ -1085843159,
+ 1079489968,
+ 1063438902,
+ -1068079474,
+ 1066756648,
+ -1079235222,
+ 1073220314,
+ 1075670363,
+ 1068252272,
+ -1080173517,
+ 1049783955,
+ -1091460991,
+ -1085550130,
+ 1073062699,
+ 1065121778,
+ -1102180674,
+ -1081445123,
+ 1050323152,
+ -1112264922,
+ 1056370985,
+ -1110735526,
+ 1042257797,
+ 1036416908,
+ 1057319553,
+ 1039766371,
+ 1023895701,
+ -1088344787,
+ 1055116002,
+ 1041559023,
+ 1048460456,
+ -1095968679,
+ -1088657497,
+ 1015584156,
+ -1079036885,
+ -1088134234,
+ 1042530454,
+ 1026539929,
+ 1062629094,
+ 1060824774,
+ -1116711256,
+ 1059214983,
+ -1140723932,
+ 1041759641,
+ 1072900300,
+ 1070172407,
+ -1084478780,
+ 1069793606,
+ 1069636792,
+ -1086970887,
+ 1058191720,
+ 1042538768,
+ -1096626815,
+ 1049934202,
+ 1051992865,
+ -1075147332,
+ -1105467895,
+ 1069712163,
+ 1057541225,
+ 1060863600,
+ 1068668591,
+ 1030245396,
+ -1075313577,
+ 1069828117,
+ 1066748271,
+ -1073216923,
+ -1059833707,
+ -1057886730,
+ -1094486530,
+ -1081723305,
+ 1091512643,
+ 1074060112,
+ 1053979037,
+ -1086578035,
+ 1074242936,
+ -1093535243,
+ 1079032081,
+ -1080391017,
+ -1065346283,
+ -1079768166,
+ 1060052874,
+ 1070517331,
+ -1084152981,
+ 1073164781,
+ 1085548572,
+ 1055862797,
+ -1074772110,
+ -1084642654,
+ -1082264765,
+ 1055776769,
+ -1073435220,
+ 1053341304,
+ 1071676675,
+ 1034558460,
+ -1073465831,
+ 1068210489,
+ -1070762416,
+ 1063002769,
+ -1069919745,
+ -1117382277,
+ -1078475949,
+ -1072469773,
+ -1077804181,
+ 1091747999,
+ -1068535874,
+ -1080022918,
+ -1077027037,
+ -1072793905,
+ 1048942360,
+ 1048672087,
+ -1093286310,
+ -1089226685,
+ -1087006467,
+ -1069278240,
+ 1042746953,
+ -1106020225,
+ -1080516978,
+ 1069315172,
+ 1066470505,
+ -1090094249,
+ -1077749296,
+ -1088926731,
+ 1060909259,
+ 1054072230,
+ -1075335481,
+ -1104235191,
+ -1089952329,
+ 1057325522,
+ 1074183152,
+ -1112345906,
+ -1093719133,
+ -1097374394,
+ -1110389348,
+ -1062058098,
+ 989817808,
+ -1072101202,
+ 1087993604,
+ -1079023249,
+ 1074187512,
+ 1074805933,
+ 1085622986,
+ 1057442599,
+ 1072818094,
+ 1057615790,
+ -1066515503,
+ -1106960203,
+ -1079419072,
+ 1066504278,
+ 1059891316,
+ 1075901755,
+ 1076918500,
+ -1079287430,
+ 1078294861,
+ 1047411412,
+ -1088131344,
+ 1065659355,
+ -1073452965,
+ -1089412323,
+ 1073943716,
+ -1073218820,
+ -1096939301,
+ -1068212967,
+ 1050048101,
+ 1070821132,
+ 1058805728,
+ -1078171489,
+ -1089184873,
+ 1059816648,
+ 1080159526,
+ -1094591867,
+ 1049017407,
+ 1056103691,
+ -1120194648,
+ 1051796827,
+ 1051095114,
+ 1072438720,
+ -1067324671,
+ 1076721887,
+ -1089485961,
+ 1068771164,
+ 1054569171,
+ 1081159343,
+ 1074247594,
+ 1073913459,
+ -1086259559,
+ -1087815558,
+ -1085980563,
+ 1080799366,
+ -1085240255,
+ -1104285991,
+ 1079567177,
+ 1064774308,
+ 1074951581,
+ 1043992380,
+ 1063988881,
+ 1075911189,
+ 1058407739,
+ -1080135483,
+ -1070524555,
+ 1064219972,
+ 1055560380,
+ -1086457775,
+ 1069564014,
+ 1038848349,
+ 1022997659,
+ 1061203655,
+ -1115285378,
+ 1030718282,
+ 1058665727,
+ -1083093326,
+ 1049704618,
+ -1069887327,
+ 1033206762,
+ -1082632453,
+ 1056139317,
+ 1066083707,
+ 1055834409,
+ 1030231902,
+ 1055504744,
+ -1100858354,
+ -1079785141,
+ -1090275468,
+ 1049935591,
+ 1037178289,
+ -1096725787,
+ 1064724328,
+ 1059167637,
+ -1081027947,
+ 1065901137,
+ -1073683471,
+ 1063434206,
+ 1059700257,
+ 1070892322,
+ 1063020352,
+ -1091851347,
+ -1087712274,
+ 1066310705,
+ 1069459970,
+ -1066414298,
+ -1060168052,
+ -1130874822,
+ 1066671684,
+ -1076068234,
+ -1091824704,
+ 1058313492,
+ 1043007317,
+ -1098130956,
+ 1064198382,
+ -1087330866,
+ -1098165622,
+ 1069027816,
+ -1102465397,
+ 1058032336,
+ -1089714021,
+ -1083265070,
+ 1059004139,
+ -1145791189,
+ 1075868664,
+ -1080643453,
+ -1078337017,
+ 1048706856,
+ -1091602751,
+ 1041383077,
+ 1044870391,
+ -1088036065,
+ -1121264714,
+ -1075803708,
+ 1062976098,
+ 1074833747,
+ 1019481845,
+ 1074026507,
+ -1135809234,
+ 1058165298,
+ -1070262899,
+ 1069181744,
+ 1049124971,
+ 1050918062,
+ 1049921300,
+ -1072661475,
+ -1097717064,
+ 1066352515,
+ 1074469015,
+ 1068371294,
+ 1066732094,
+ 1047322900,
+ 1072323784,
+ 1054096748,
+ 1042188484,
+ 1071748351,
+ -1087040665,
+ -1086826561,
+ -1106061445,
+ -1131599924,
+ -1136733301,
+ 1033010956,
+ 1045151722,
+ -1083658347,
+ -1139407389,
+ 1030441194,
+ 1052833271,
+ -1086093153,
+ 1047376067,
+ 1058248834,
+ 1064066706,
+ 1057832229,
+ -1097842309,
+ -1090358535,
+ 1057239135,
+ 1025563238,
+ -1111810692,
+ 1051055676,
+ -1090774758,
+ 1049649702,
+ -1087402843,
+ 1049451132,
+ -1084715943,
+ 1063316097,
+ -1089222433,
+ 1051289353,
+ 1020530784,
+ -1091893836,
+ 1038314995,
+ 1057915071,
+ 1059739013,
+ -1129140422,
+ 1054661767,
+ 1049531140,
+ 1042085063,
+ 1053736325,
+ 1050776763,
+ -1087736858,
+ 1080250469,
+ -1097768811,
+ 1077270964,
+ 1059398132,
+ -1073558161,
+ 1042394275,
+ 1063467157,
+ -1087384055,
+ -1086100928,
+ 1072238087,
+ -1087874109,
+ -1084976552,
+ 1058935755,
+ 1059346721,
+ 1067381987,
+ -1060640682,
+ 1051798667,
+ -1081835489,
+ 1077282417,
+ 1070058302,
+ 1078054639,
+ -1103786610,
+ 1057015959,
+ 1074192303,
+ 1054244378,
+ -1114746465,
+ 1072189642,
+ -1105389517,
+ 1051645720,
+ -1067292943,
+ 1074119068,
+ 1065654852,
+ 1055084164,
+ -1077110118,
+ -1076429851,
+ -1081154745,
+ -1098361758,
+ -1077831776,
+ -1085309512,
+ -1092710776,
+ -1068323759,
+ 1063425677,
+ -1089290720,
+ -1092731294,
+ 1044450117,
+ -1071929362,
+ 1076691652,
+ -1073303997,
+ 1071365547,
+ 1049450772,
+ -1080135230,
+ 1065531318,
+ 1047343227,
+ -1085912829,
+ -1095531717,
+ -1096483839,
+ -1098291551,
+ -1096582750,
+ 1057528185,
+ -1094765668,
+ -1130937439,
+ 1041239242,
+ 1060434404,
+ -1084839248,
+ 1056168027,
+ -1081332479,
+ 1062129783,
+ 1050998439,
+ 1061868978,
+ 1051093099,
+ 1027811806,
+ -1081892001,
+ -1087642772,
+ 1052728422,
+ 1069627446,
+ -1097239757,
+ 1059405526,
+ 1065540454,
+ -1108452266,
+ -1084509379,
+ -1072042437,
+ 1080334207,
+ 1049726335,
+ 1063934303,
+ -1086075327,
+ -1066288362,
+ 1034769390,
+ 1082167150,
+ 1034674592,
+ 1069406906,
+ -1075334153,
+ 1063222686,
+ 1065011399,
+ -1097713874,
+ 1054168552,
+ 996598478,
+ 1057795099,
+ -1096616000,
+ 1059912476,
+ 1063155938,
+ 1070022761,
+ 1070252487,
+ -1099170210,
+ 1024948668,
+ 1057545364,
+ -1112376539,
+ -1084724482,
+ 1081181182,
+ 1076856031,
+ -1076999189,
+ -1071979928,
+ 1065916187,
+ -1089541296,
+ -1119465279,
+ -1090025563,
+ -1086302919,
+ -1097884197,
+ -1076883662,
+ -1122830138,
+ -1097760068,
+ 1050811702,
+ 1075657696,
+ 1077111462,
+ -1069450730,
+ 1063702521,
+ -1079026344,
+ -1079172362,
+ 1076863942,
+ -1089446338,
+ -1092291367,
+ 1068319796,
+ 1070299351,
+ -1067619940,
+ 1076432093,
+ 1082438341,
+ 1061905519,
+ 1045899223,
+ -1069403809,
+ 1061825689,
+ -1089908375,
+ -1084113681,
+ 1068113740,
+ 1043752921,
+ 1067406727,
+ -1078116404,
+ -1094377061,
+ 1061374358,
+ 1059182535,
+ 1052713845,
+ 1063767966,
+ 1049198757,
+ 1015529955,
+ 1045231471,
+ 1056110116,
+ -1100211758,
+ -1080167702,
+ 1061977840,
+ -1094011416,
+ -1085651691,
+ 1070811642,
+ 1030044626,
+ 1011368587,
+ 1042285467,
+ 1069099347,
+ 1059604468,
+ -1088987851,
+ 1036810911,
+ -1098102461,
+ 1043905112,
+ -1089302326,
+ 1079220934,
+ 1064904023,
+ 1075130581,
+ -1105502032,
+ 1076175749,
+ 1062693993,
+ 1053562940,
+ 1079427456,
+ 1053571293,
+ -1074816039,
+ 1066964210,
+ 1077824011,
+ 1069543377,
+ -1075430945,
+ 1087583643,
+ 1055090187,
+ -1121130780,
+ 1082153805,
+ 1067971164,
+ -1115216743,
+ 1062695322,
+ -1087125380,
+ -1081394990,
+ -1096129085,
+ 1051320882,
+ -1079915962,
+ 1009326294,
+ 1062984442,
+ -1088142827,
+ -1098075949,
+ -1105991780,
+ 1053628048,
+ 1062570027,
+ -1075853145,
+ -1106052622,
+ -1084364813,
+ -1076764498,
+ -1082919886,
+ -1100546239,
+ -1092162832,
+ 1065754380,
+ -1079122977,
+ 1062082178,
+ 1079791242,
+ 1058820284,
+ -1097111547,
+ -1073104270,
+ -1081569000,
+ -1100053450,
+ 1057083298,
+ 1055460980,
+ -1079388009,
+ 1080263417,
+ 1066723057,
+ -1073889218,
+ 1072049027,
+ -1094469241,
+ 1054416300,
+ -1092349820,
+ -1075916110,
+ 1074787659,
+ 1065018660,
+ -1087712576,
+ -1107183884,
+ 1066282623,
+ -1089377835,
+ 1058540088,
+ -1109674127,
+ -1095109721,
+ 1057108337,
+ 1029947759,
+ 1051057047,
+ -1101063588,
+ -1100764707,
+ -1106404193,
+ -1079398288,
+ 1043287130,
+ -1084342333,
+ 1045211208,
+ -1110723498,
+ -1090127026,
+ 1060998742,
+ 1042428042,
+ 1058936758,
+ 1027605986,
+ -1080246843,
+ -1103925062,
+ -1093858567,
+ 1060600242,
+ -1112412663,
+ 1052279111,
+ -1093359339,
+ 1066936034,
+ 1050473132,
+ 1044896125,
+ 1072862170,
+ 1069051258,
+ 1040726610,
+ -1103394132,
+ 1039559907,
+ -1090856022,
+ -1102439611,
+ -1079789594,
+ -1087082008,
+ -1080627388,
+ -1088244084,
+ 1068485135,
+ -1083820343,
+ 1068866157,
+ 1063835369,
+ -1076998123,
+ 1061823438,
+ 1047732325,
+ -1075277012,
+ -1076143589,
+ -1069225315,
+ -1076475828,
+ -1072277558,
+ -1077784588,
+ 1045834425,
+ 1036898898,
+ 1077796666,
+ -1065163610,
+ 1068716402,
+ -1070584515,
+ 1083143232,
+ -1080511017,
+ 1047636193,
+ -1090308998,
+ -1081042208,
+ 1051500701,
+ -1093695855,
+ -1071490874,
+ -1071932585,
+ 1067438291,
+ 1077176203,
+ -1073324455,
+ -1073270408,
+ 1077901961,
+ -1074363652,
+ -1089589896,
+ -1068664765,
+ 1037886391,
+ -1072267647,
+ -1062239817,
+ -1076102600,
+ 1061237869,
+ -1075355154,
+ 1072502609,
+ -1076122212,
+ 1049649254,
+ -1060049271,
+ -1086888413,
+ -1068525713,
+ -1070516757,
+ -1072954996,
+ -1072864002,
+ 1077220429,
+ -1081956996,
+ -1106823618,
+ -1080484344,
+ -1079128125,
+ -1106187294,
+ -1109807041,
+ 1059338146,
+ -1111229714,
+ -1084366594,
+ 1065448792,
+ -1077722902,
+ -1093398503,
+ -1103860959,
+ -1072813310,
+ 1052696603,
+ -1081264506,
+ 1041185275,
+ 1025589296,
+ 1059147169,
+ -1071970658,
+ -1109514546,
+ 1049648430,
+ 1068824322,
+ 1052300678,
+ 1053441577,
+ -1083951105,
+ -1073528746,
+ 1070165405,
+ -1074509338,
+ -1069650190,
+ -1101574226,
+ 1071726235,
+ -1078744965,
+ -1081777466,
+ -1074351936,
+ -1074738575,
+ -1096927855,
+ 1065410081,
+ -1078841165,
+ 1060093448,
+ -1090261930,
+ -1103732211,
+ -1103082452,
+ 1072879360,
+ -1090728047,
+ -1076817813,
+ -1088050288,
+ 960200096,
+ 1057747155,
+ -1093215534,
+ -1076287887,
+ -1114492307,
+ -1094302951,
+ -1084265999,
+ 1085799203,
+ 1065931186,
+ -1079859845,
+ -1081824184,
+ 1057473392,
+ 1068721327,
+ 1056379806,
+ 1037885829,
+ 1058936699,
+ -1109400993,
+ 1075991364,
+ -1084773216,
+ -1097401934,
+ -1072685187,
+ 1025877342,
+ -1111390026,
+ 1036256353,
+ 1056133693,
+ 1062308266,
+ 1076936714,
+ 1042340001,
+ -1080723366,
+ 1074410803,
+ 1054151101,
+ -1109539950,
+ -1111453005,
+ 1062964356,
+ 1072842889,
+ -1100115428,
+ 1035015390,
+ 1060187045,
+ -1077703371,
+ 1034905317,
+ 1077064223,
+ 1068263932,
+ 1034081516,
+ 1042885324,
+ 1067844014,
+ -1104897833,
+ 1038122798,
+ -1154924606,
+ -1134885507,
+ -1097574610,
+ -1105389021,
+ 1048850209,
+ -1092394734,
+ -1076292874,
+ -1097806949,
+ 1049623473,
+ -1094028515,
+ -1096647821,
+ -1101561918,
+ -1094062927,
+ -1095613819,
+ -1115820016,
+ 1037556636,
+ -1081042757,
+ 1018314812,
+ 1048324746,
+ 1061512804,
+ 1056824359,
+ 1040991922,
+ -1082568390,
+ -1097714424,
+ -1097169327,
+ -1095035072,
+ -1095987498,
+ 1060248078,
+ -1086381156,
+ 1038173768,
+ 1065066663,
+ 1047202672,
+ 1019328908,
+ 1050907180,
+ 1053945622,
+ 1073834505,
+ -1108286342,
+ 1094900707,
+ -1096733299,
+ 1059530154,
+ -1079697245,
+ 1062415453,
+ -1115669649,
+ -1070356621,
+ -1128587981,
+ -1094431229,
+ 1013746908,
+ 1084174807,
+ -1087130409,
+ 1050433893,
+ -1102864114,
+ 1032922673,
+ -1102941369,
+ 1061081632,
+ -1071891467,
+ -1113471904,
+ 1056561457,
+ 1053104717,
+ 1041300982,
+ 1009234668,
+ 1023675928,
+ -1084670817,
+ 1078735690,
+ 1053605258,
+ -1110358497,
+ 1025373968,
+ -1116078548,
+ 1027562857,
+ -1121584828,
+ 1046158104,
+ -1081358781,
+ -1110037619,
+ -1105307285,
+ -1122486452,
+ -1090445624,
+ 1068699370,
+ 1040512540,
+ -1085381811,
+ -1081188507,
+ -1110308525,
+ -1078451678,
+ -1089808172,
+ -1101120663,
+ -1111921156,
+ -1088981719,
+ 1054517670,
+ 1040107251,
+ 1034106958,
+ -1123267300,
+ -1071755850,
+ -1101767479,
+ -1142922256,
+ 1033446719,
+ -1075961761,
+ 1044237780,
+ -1111536372,
+ -1086023281,
+ -1104044817,
+ -1096703815,
+ -1086861745,
+ -1126115714,
+ 1058404141,
+ -1071094407,
+ -1096869231,
+ 1043050737,
+ 1069539684,
+ -1122158982,
+ 1001370896,
+ 1063359756,
+ 1012273580,
+ 1035036093,
+ 1067224760,
+ 1000720338,
+ -1093023655,
+ 1037713164,
+ 1070801452,
+ 1043983816,
+ 1070060986,
+ -1085728551,
+ 1064781873,
+ -1098463470,
+ -1101790683,
+ 1027310086,
+ -1137715420,
+ 1058514789,
+ 1066977055,
+ 1046953491,
+ 1065219505,
+ 1082236860,
+ 1050026711,
+ -1120819025,
+ 1073781725,
+ -1138269872,
+ 1063183513,
+ 1019689065,
+ -1122404190,
+ -1106579301,
+ 1040388384,
+ -1124922018,
+ -1060445151,
+ 1055588505,
+ -1109578488,
+ 1042300054,
+ 1042515581,
+ -1119012728,
+ -1087273634,
+ 1059317789,
+ -1095273052,
+ -1096569991,
+ -1095801395,
+ 1050973240,
+ -1104293576,
+ 1049615864,
+ -1091320724,
+ 1061604123,
+ -1112493770,
+ 1015033244,
+ 1045383760,
+ 1049939008,
+ -1123784058,
+ -1092003049,
+ -1110371139,
+ 1044463157,
+ 1019985138,
+ 1047595923,
+ 1033475488,
+ 1049987299,
+ 1050272505,
+ -1121942709,
+ 1052674457,
+ 1059055508,
+ 1034398901,
+ 1064431334,
+ 1063313601,
+ 1056097335,
+ -1101251683,
+ 1073796227,
+ -1079642609,
+ 1050505963,
+ 1041454051,
+ 1042578389,
+ 1087117245,
+ -1114154206,
+ 1043775900,
+ 1033925416,
+ -1135446495,
+ -1094264596,
+ -1102390012,
+ 1075018800,
+ 1039075500,
+ -1105641631,
+ 1064643320,
+ -1092297431,
+ -1097437569,
+ 1062869392,
+ 1051019385,
+ 1041517702,
+ -1074080100,
+ 1011567256,
+ 1032393153,
+ -1097449813,
+ 1019964591,
+ 1019088404,
+ 1032390479,
+ -1106452364,
+ -1100498865,
+ -1096754791,
+ 1037570646,
+ -1088298828,
+ -1071341024,
+ 1046835290,
+ -1086618959,
+ -1078690392,
+ 998224535,
+ 1010068917,
+ 1074151146,
+ 1048772874,
+ 1042054658,
+ -1081580921,
+ 1044280936,
+ -1096413011,
+ -1107530820,
+ -1103683056,
+ -1080135341,
+ 1041898437,
+ -1080691847,
+ -1092447878,
+ 1044972413,
+ 1033740165,
+ -1128530358,
+ 1014012435,
+ 1074411369,
+ -1086211124,
+ 1073181266,
+ -1110936204,
+ -1112304530,
+ -1093567724,
+ 1061319867,
+ -1074932378,
+ -1088710239,
+ 1051376511,
+ 1064430071,
+ 1079631639,
+ 1033200331,
+ -1123620980,
+ 1033308595,
+ 1090146106,
+ 1066879281,
+ -1131867070,
+ -1109071132,
+ -1128516410,
+ -1119275513,
+ 1006889538,
+ -1060007580,
+ -1067557528,
+ 1031687599,
+ -1074967941,
+ 1010091694,
+ -1098458429,
+ 1042180525,
+ 1032889288,
+ 1065519565,
+ -1102645118,
+ -1068310385,
+ -1076806196,
+ -1085649784,
+ -1066741281,
+ -1060344143,
+ -1105311600,
+ 1072689977,
+ -1103859754,
+ 1037010526,
+ -1135505620,
+ -1087822616,
+ 1019539432,
+ 1054090759,
+ -1126560408,
+ -1087246622,
+ 1043096853,
+ -1087384044,
+ 1032531278,
+ -1115577231,
+ -1076266635,
+ -1078453039,
+ 1042189782,
+ 1035028298,
+ -1095023847,
+ -1096930821,
+ 1072943772,
+ 1052533201,
+ 1010972628,
+ 975567080,
+ 1063961584,
+ 1028844432,
+ -1150436046,
+ 1063168668,
+ -1114266718,
+ -1081903612,
+ -1110279673,
+ 1054565100,
+ 1045466142,
+ 1081021853,
+ -1077013854,
+ 1065547996,
+ 1048213386,
+ -1125489238,
+ -1130017672,
+ -1080463949,
+ 1063981926,
+ 1047079221,
+ 1052369095,
+ -1056752343,
+ 1067623090,
+ 1074384291,
+ -1127000843,
+ 1054835573,
+ 1063317966,
+ 1036985280,
+ 1045069777,
+ -1112752882,
+ 1040341528,
+ 1024512519,
+ -1082030072,
+ 1049713686,
+ 1066799456,
+ 1035348492,
+ 1079137178,
+ 1068432425,
+ 1045025805,
+ 1049838155,
+ -1124308392,
+ 1066632714,
+ -1089512819,
+ 1050428347,
+ -1097991327,
+ 1057871383,
+ 1087389431,
+ 1035154843,
+ -1102734503,
+ 1072709916,
+ 1066408720,
+ 1047742646,
+ -1077868959,
+ 1010423052,
+ -1137251772,
+ -1126992745,
+ 1035779464,
+ -1070739294,
+ -1139563732,
+ 1052563252,
+ 1092204293,
+ 1058714562,
+ 1026173523,
+ -1099681202,
+ 1022746124,
+ 1067136480,
+ -1087872231,
+ -1083929037,
+ 1051419025,
+ -1104472802,
+ -1091389256,
+ -1096564910,
+ -1092514202,
+ 1049806192,
+ -1095598352,
+ -1078156211,
+ -1087149859,
+ -1106945344,
+ -1123651420,
+ 1041508947,
+ 1046840305,
+ 1049485381,
+ 1070895437,
+ 1054240548,
+ 1060387236,
+ -1109076247,
+ 1046400608,
+ 1055401277,
+ 1057356659,
+ -1120818165,
+ -1101155887,
+ 1072967855,
+ 1051506819,
+ -1108997068,
+ -1089842578,
+ -1119857364,
+ -1089071715,
+ 1028295942,
+ 1048280994,
+ -1114276160,
+ 1067603939,
+ 1025558355,
+ 1052124135,
+ 1075499604,
+ 1046958689,
+ -1063373485,
+ 1032294434,
+ -1120764604,
+ -1079273854,
+ -1094303882,
+ 1046806116,
+ -1064280035,
+ -1071199793,
+ -1079475163,
+ 1002985564,
+ -1094244583,
+ 1050336286,
+ 1049183698,
+ 1051518050,
+ -1079870951,
+ 1050144925,
+ -1099326432,
+ -1142618464,
+ -1114665863,
+ 1042524477,
+ -1081923305,
+ 1055945401,
+ -1086987519,
+ -1104726525,
+ 1010522480,
+ 1033893369,
+ -1092051876,
+ 1052970643,
+ 1049179437,
+ 1067390167,
+ 1025229745,
+ 1053859737,
+ 1053555319,
+ -1087024987,
+ 1038629677,
+ -1069277438,
+ -1108613095,
+ 1020156728,
+ 1047961724,
+ 1046007047,
+ -1092646356,
+ 1056507182,
+ 1048478806,
+ -1083861153,
+ -1095309066,
+ -1104718654,
+ -1081741217,
+ -1092363949,
+ 1055567398,
+ 1054052282,
+ 1049555378,
+ -1072326830,
+ 1058593638,
+ -1102060970,
+ -1103504325,
+ 1062424639,
+ 1042286729,
+ -1089708655,
+ -1088966599,
+ -1106281295,
+ -1110977896,
+ -1111246791,
+ 1054244280,
+ -1094312887,
+ -1122360467,
+ 1023552339,
+ 1025735436,
+ 1032600489,
+ 1020112385,
+ 1040818732,
+ 1040947167,
+ 1015141385,
+ 1055420577,
+ 1035728094,
+ 1061650514,
+ 1058052162,
+ -1108613300,
+ 1028189967,
+ -1106643376,
+ -1138151026,
+ 1029110404,
+ 1032348198,
+ -1090436352,
+ -1176502928,
+ -1091887033,
+ 1036620841,
+ 1054690065,
+ -1108406094,
+ -1118674457,
+ -1086164650,
+ 1034343555,
+ 1055975573,
+ -1071877808,
+ -1086233562,
+ -1087467262,
+ -1091298342,
+ 1041157970,
+ 1075858573,
+ 1061525221,
+ 1067235614,
+ -1105591544,
+ -1099585902,
+ -1106364904,
+ 1024569794,
+ 1062905013,
+ 1035618408,
+ -1094343602,
+ 1051675419,
+ 1046489478,
+ 1057615368,
+ -1073170069,
+ 1022694580,
+ -1060371314,
+ 1060749534,
+ 1060338171,
+ 1071392860,
+ 1067980590,
+ -1053917394,
+ -1083854728,
+ 1048746588,
+ 1049495813,
+ -1107691223,
+ -1097998035,
+ -1103721969,
+ 1030038348,
+ -1121724490,
+ 1077042718,
+ -1127093702,
+ -1096162461,
+ 1041442074,
+ -1097916707,
+ -1091571615,
+ -1116193384,
+ -1087548815,
+ 1054611067,
+ 1040929978,
+ 1063037472,
+ -1095349223,
+ -1127549002,
+ 1061844549,
+ 1057522840,
+ -1090692624,
+ 1025669889,
+ 1070987142,
+ -1106876817,
+ -1125548086,
+ 1062814475,
+ 1034060386,
+ 1058319656,
+ -1125508482,
+ 1034831203,
+ -1096194649,
+ -1108343647,
+ -1137683684,
+ -1090091058,
+ 1048778988,
+ -1080373042,
+ -1111712662,
+ 1045220954,
+ -1089107298,
+ -1111193267,
+ -1078818263,
+ -1107051452,
+ -1092973389,
+ 1059669928,
+ -1089835738,
+ -1094361862,
+ 1071922694,
+ 1037533228,
+ 1016432656,
+ -1110146087,
+ 1029554998,
+ 1020154908,
+ -1076604149,
+ -1124028416,
+ 1036869284,
+ -1108388771,
+ -1139822977,
+ 1028313487,
+ 1079680213,
+ -1081132384,
+ 1039874131,
+ -1065246521,
+ -1094419466,
+ -1071733639,
+ -1084925845,
+ 1056577957,
+ -1109966898,
+ 1060673952,
+ 1048970334,
+ -1095878726,
+ -1091712429,
+ 1028599394,
+ -1106062516,
+ 1032327345,
+ 1040653875,
+ -1095042321,
+ -1108645551,
+ -1106165089,
+ -1125556241,
+ -1109471523,
+ 1047775404,
+ -1150831386,
+ 1036288677,
+ -1088212477,
+ -1088887497,
+ 1026811718,
+ 1057393113,
+ -1054507412,
+ -1074760756,
+ 1041319624,
+ 1036434839,
+ -1113938645,
+ 1026892952,
+ -1077941982,
+ 1055951198,
+ -1079556334,
+ 1035573111,
+ -1103137222,
+ 1057161024,
+ -1093781993,
+ 1027078854,
+ -1100348445,
+ 1098902625,
+ 1055118072,
+ -1106234704,
+ 1044437783,
+ -1097343545,
+ 1077566532,
+ 1044676765,
+ -1073200871,
+ -1058011290,
+ 1046181829,
+ -1089043698,
+ 1020017590,
+ 1070001968,
+ 1051777124,
+ -1089640470,
+ 1068198279,
+ 1045842544,
+ -1103012447,
+ 1066582131,
+ 1006941991,
+ -1099538917,
+ 1042473764,
+ 1075661808,
+ -1082539608,
+ 1067744171,
+ 1042375009,
+ -1097760982,
+ -1102679198,
+ -1103761081,
+ -1097527587,
+ 1018784545,
+ -1104674733,
+ 1058680036,
+ -1074394194,
+ -1096088029,
+ 1040628670,
+ 1056681304,
+ 1066941237,
+ 1044180773,
+ 998742514,
+ 1045785794,
+ 1033207555,
+ 1057142146,
+ 1020611598,
+ 1047996759,
+ 1056579172,
+ 1061326250,
+ -1099122137,
+ -1097776533,
+ -1115286673,
+ -1096939740,
+ -1080679974,
+ -1100054925,
+ -1087985438,
+ -1059298708,
+ 1054063995,
+ 1058912591,
+ 1074365517,
+ 1040051456,
+ 1072228442,
+ 1037523553,
+ 1055553994,
+ 1039613858,
+ -1137214892,
+ -1101713795,
+ -1089649172,
+ 1040471753,
+ 1055445303,
+ -1087264510,
+ -1150551670,
+ -1113675353,
+ -1123118122,
+ 1058881947,
+ -1088324546,
+ -1083134137,
+ -1095378427,
+ -1117028853,
+ 1083066040,
+ 1071895095,
+ 1002095948,
+ -1092732985,
+ 1058613436,
+ -1094542429,
+ 1026144461,
+ 1038576774,
+ 1072868214,
+ -1137347382,
+ -1096060184,
+ 1068056494,
+ 1053525361,
+ 1040942795,
+ 1067529236,
+ -1078566220,
+ -1088691493,
+ 1056046389,
+ 1047454964,
+ -1110974057,
+ -1096351851,
+ 1029445627,
+ 1068366942,
+ 1077821919,
+ 1037562234,
+ 1041876770,
+ -1082780837,
+ -1092506475,
+ 1077805955,
+ -1100978881,
+ -1107178683,
+ 1078137123,
+ -1106895403,
+ -1090274166,
+ 1040252310,
+ 1011436393,
+ 1057962219,
+ 1064922536,
+ -1064961782,
+ 1037119288,
+ -1122448123,
+ 1018002358,
+ -1096008828,
+ 1025755367,
+ 986033088,
+ 1050112115,
+ 1055387943,
+ 1054063309,
+ 1065340867,
+ 1037889397,
+ -1104492376,
+ -1098453016,
+ -1112893716,
+ -1155831794,
+ 1063116258,
+ -1096250485,
+ -1117176977,
+ -1075243640,
+ -1095859938,
+ 1012363498,
+ -1098435387,
+ 1000856951,
+ 1059032697,
+ 1058467072,
+ 1053973824,
+ -1110389724,
+ 1070233181,
+ -1126107413,
+ -1085806370,
+ -1084862301,
+ -1084953562,
+ 1048828511,
+ -1093016660,
+ 1045273688,
+ -1055982633,
+ -1080731677,
+ -1089505943,
+ -1098554559,
+ 1044654304,
+ -1114226010,
+ -1103182745,
+ -1095662276,
+ -1108775896,
+ -1109361782,
+ -1160292530,
+ -1110284009,
+ -1123679636,
+ -1080969638,
+ 1068844192,
+ 1070422560,
+ 1033990671,
+ -1103957777,
+ -1084216044,
+ -1100153370,
+ 1042238931,
+ -1087605772,
+ 1079132332,
+ -1107000568,
+ 1036156756,
+ -1086827511,
+ -1085834128,
+ 1016553235,
+ -1129918868,
+ -1104881085,
+ 1038124514,
+ -1115519134,
+ 1068742276,
+ -1078867554,
+ 1059063415,
+ -1107151849,
+ -1081710847,
+ -1096081143,
+ 1035566467,
+ 1041809545,
+ 1045088524,
+ 1059353253,
+ -1119037746,
+ -1117875085,
+ -1087836810,
+ -1097829357,
+ 1088173289,
+ 1041363987,
+ 1058763748,
+ -1086346608,
+ -1084699541,
+ -1092088892,
+ -1080056826,
+ -1111840091,
+ 1051256296,
+ -1108444478,
+ -1052779885,
+ -1082593282,
+ -1103870113,
+ 1044059286,
+ 1048587963,
+ 1051361962,
+ 1052123116,
+ 1075203498,
+ 986672274,
+ -1115563892,
+ 1058115283,
+ 1033124247,
+ 1075970232,
+ -1089832001,
+ -1123779548,
+ -1106747763,
+ 1042158266,
+ -1156547324,
+ -1104444658,
+ 1026548068,
+ -1118583465,
+ -1110152303,
+ -1091848150,
+ 1052366706,
+ 1007786005,
+ 1068359195,
+ 1057959856,
+ -1098404633,
+ 1073585782,
+ 1048922473,
+ -1136871010,
+ -1088340135,
+ -1095340596,
+ -1083341451,
+ -1070612441,
+ 1041309272,
+ -1072556611,
+ -1076353974,
+ -1100606209,
+ -1105579112,
+ -1089995161,
+ -1105518002,
+ 1070070545,
+ 1066316432,
+ -1062238559,
+ 1051535494,
+ 1054908276,
+ -1092968143,
+ 1027446777,
+ 1042478949,
+ -1091625530,
+ -1086979787,
+ 1025303559,
+ 1089195819,
+ -1104909363,
+ 1072269441,
+ -1094477954,
+ -1110423890,
+ -1084755345,
+ 1016396822,
+ 1038564519,
+ 1093482883,
+ 1040805017,
+ 1068812881,
+ 1048045006,
+ -1095399347,
+ 1074976714,
+ 1034633753,
+ 1051341762,
+ -1095720691,
+ -1119533970,
+ 1017689948,
+ 1058737687,
+ -1096171698,
+ -1121321037,
+ -1074745716,
+ 1043211682,
+ 1052322270,
+ 1072221637,
+ -1085078517,
+ 1060001984,
+ -1113828882,
+ 1066883971,
+ 1015558093,
+ 1069507156,
+ 1039657916,
+ -1077908470,
+ -1089462841,
+ -1106007930,
+ 1049208239,
+ 1033874915,
+ -1108517432,
+ -1088117399,
+ -1076457500,
+ -1102869574,
+ 1044080557,
+ 1049823734,
+ 1005765759,
+ 1048389393,
+ 1068448378,
+ -1112087622,
+ -1101177624,
+ 1023354124,
+ -1129601378,
+ 1047535117,
+ -1101980026,
+ -1144141398,
+ -1073386570,
+ 1032982092,
+ -1116409011,
+ -1146145956,
+ -1096011582,
+ -1123786310,
+ 1043131631,
+ -1093296632,
+ -1112907496,
+ 1049063262,
+ 1074346039,
+ -1078985417,
+ 1061445053,
+ -1107056499,
+ 1052462164,
+ -1080940414,
+ 1026175972,
+ -1098987100,
+ -1101904967,
+ -1095607470,
+ 1062075527,
+ -1130722453,
+ -1056089628,
+ -1066829970,
+ -1132323824,
+ 1054322132,
+ -1133710168,
+ 1045042965,
+ 1059092363,
+ -1081249219,
+ -1121335765,
+ 1050001777,
+ -1110514479,
+ -1098046910,
+ -1116293167,
+ 1076609981,
+ -1081566288,
+ 1011850036,
+ -1107163658,
+ -1115284460,
+ -1090362884,
+ 1060354045,
+ -1079033992,
+ 1054834618,
+ 1068004817,
+ 1061423075,
+ -1062339007,
+ 1044578476,
+ -1112405961,
+ 1040095499,
+ 1093136592,
+ 1071813370,
+ -1146877255,
+ -1108653923,
+ 1019790793,
+ 1032731668,
+ 1031385670,
+ -1073271546,
+ -1087326354,
+ 1032661671,
+ 1068426298,
+ -1119338572,
+ -1095972228,
+ 1049307128,
+ 1036293383,
+ -1120606267,
+ 1041231992,
+ -1082535176,
+ 1063525065,
+ -1102143889,
+ -1084660772,
+ -1074672771,
+ -1105398728,
+ 1069855538,
+ 1049180524,
+ 1041627428,
+ -1123696375,
+ 1050916441,
+ -1102616991,
+ 1036948648,
+ -1123275051,
+ -1072454111,
+ 1051352751,
+ 1015202807,
+ -1106180428,
+ -1120957653,
+ -1099096601,
+ -1098102522,
+ -1114575445,
+ -1095892910,
+ -1083906161,
+ -1093308824,
+ -1109297598,
+ 1051239324,
+ -1110900786,
+ 1014044290,
+ 1069502211,
+ 1032805133,
+ 1024305678,
+ 1036326884,
+ -1115602962,
+ -1101167831,
+ 1043483264,
+ 1061768632,
+ 1090049230,
+ 1061911456,
+ -1083318070,
+ 1065269143,
+ 1052025815,
+ -1116873992,
+ -1119960147,
+ -1099503804,
+ -1076371987,
+ 1058219062,
+ 1059566851,
+ 1050724221,
+ 1067571965,
+ 1070234713,
+ -1114613986,
+ 1059865423,
+ 1065859693,
+ 1054783741,
+ 1047396449,
+ -1107549468,
+ 1044789537,
+ -1117677262,
+ -1099778343,
+ 1054408133,
+ 1042189166,
+ 1031916060,
+ -1070736690,
+ 1051041306,
+ -1131023634,
+ 1060764329,
+ -1108958868,
+ 1045322842,
+ 1051396747,
+ -1091455459,
+ -1049488734,
+ 1027980894,
+ 1056693221,
+ -1095018128,
+ 1078360860,
+ -1111103259,
+ -1074740082,
+ 1023794761,
+ 1059644964,
+ 1040857102,
+ -1115217186,
+ -1088420758,
+ 1070342893,
+ -1117555610,
+ 1048122006,
+ -1116679166,
+ -1100873655,
+ -1070350827,
+ -1105326015,
+ 1044622953,
+ -1098176681,
+ -1083557071,
+ -1101079509,
+ 1066287403,
+ -1109437795,
+ -1105925916,
+ 1052744014,
+ 1062993922,
+ 1062457532,
+ -1094758344,
+ 1049481930,
+ 1049708137,
+ 1041641095,
+ 1022667036,
+ 1032234176,
+ -1084723532,
+ 1030615782,
+ -1135164235,
+ 1049167690,
+ 1041571312,
+ -1110404216,
+ -1097290323,
+ 981792112,
+ -1116290780,
+ 1040931479,
+ 999607313,
+ -1122900218,
+ 1041750794,
+ -1113799250,
+ 1024301497,
+ 1074575874,
+ 1041536844,
+ 1038321383,
+ 1053625403,
+ 1047348600,
+ -1089060948,
+ -1079996278,
+ 1057791038,
+ -1100761484,
+ -1147572252,
+ 1033706264,
+ 1060196844,
+ -1093361352,
+ 1050778837,
+ -1114945022,
+ 1050388920,
+ 1041142146,
+ -1089111699,
+ 1046476562,
+ -1081679874,
+ 1054877183,
+ -1098390771,
+ -1112144368,
+ -1092723543,
+ -1096362191,
+ 1033298757,
+ -1117278177,
+ 1045676634,
+ -1086061473,
+ -1106644136,
+ -1109504420,
+ 1073509689,
+ 1058243939,
+ 1040953702,
+ 1036356830,
+ 1069254067,
+ 1075001020,
+ 1051077121,
+ -1083729598,
+ -1119615195,
+ -1075770007,
+ 1039899836,
+ -1113304520,
+ 1066763009,
+ -1084165619,
+ -1125269556,
+ 1083373410,
+ -1105458559,
+ 1050006332,
+ 1070386728,
+ -1092118911,
+ 1052279644,
+ -1097149596,
+ -1094265900,
+ -1080152264,
+ -1107163496,
+ -1166933152,
+ 1065041368,
+ 1053898706,
+ 1055855144,
+ -1090741265,
+ -1127163715,
+ -1083354019,
+ -1089111554,
+ -1092414600,
+ 1035558150,
+ -1077647343,
+ -1084838305,
+ -1094842131,
+ 1070036832,
+ -1103619772,
+ 1055523861,
+ 1034806145,
+ -1068629623,
+ -1104286818,
+ 1038415682,
+ -1145375423,
+ 1008280276,
+ 1051048259,
+ 1016925709,
+ 1072655794,
+ 1051308214,
+ 1061217469,
+ -1089823600,
+ 1058390960,
+ 1046359245,
+ -1095874990,
+ -1108400196,
+ -1107902413,
+ 1066301669,
+ -1085634886,
+ -1110168718,
+ 1065481726,
+ -1125604608,
+ 1041001713,
+ -1089787284,
+ -1123783026,
+ 1036278933,
+ 1067557668,
+ 1059001852,
+ 1065974672,
+ 1069558845,
+ 1057712767,
+ -1079755657,
+ 1044171021,
+ -1097977922,
+ -1096910792,
+ -1088849261,
+ 1031969691,
+ -1073619664,
+ 1050262083,
+ -1080241989,
+ 1044142814,
+ -1095291628,
+ 996294622,
+ -1060006839,
+ 1026847706,
+ -1085773080,
+ 1008735305,
+ -1197554176,
+ -1108515890,
+ -1079890460,
+ 1022975477,
+ 1067734975,
+ -1076611103,
+ -1095246144,
+ -1090339660,
+ 1067773141,
+ -1120822287,
+ -1134686440,
+ 1062232932,
+ 1028671397,
+ 1057208891,
+ 990627188,
+ 1049491806,
+ 1047538380,
+ 1054035425,
+ 1049722188,
+ -1117265503,
+ 1063925504,
+ 1054964146,
+ -1067306075,
+ -1105097592,
+ 1033275498,
+ -1096639519,
+ 1049456826,
+ 1078215858,
+ -1107851288,
+ 1047335701,
+ -1066131535,
+ -1090542477,
+ 1043275538,
+ -1102743731,
+ -1095269912,
+ -1108005951,
+ -1073538540,
+ -1102647327,
+ 1072994573,
+ 1065721656,
+ -1112747769,
+ -1086715977,
+ -1110564884,
+ -1087976820,
+ -1093112579,
+ -1080743208,
+ 1052541072,
+ 1053463916,
+ 1034829814,
+ -1111412539,
+ 1065724678,
+ 1008335060,
+ -1104871144,
+ 1048728637,
+ 1036447170,
+ 1000520848,
+ -1163264380,
+ -1119151847,
+ -1124636968,
+ 1058653750,
+ 1029219749,
+ 1037655127,
+ -1106651460,
+ -1162681864,
+ 1007026051,
+ 1060105265,
+ 1043101362,
+ -1119040412,
+ 1060544910,
+ -1126479836,
+ -1088441867,
+ -1088055346,
+ 1032990136,
+ -1065718043,
+ 1043566672,
+ -1110016326,
+ 1052019193,
+ 1066025529,
+ 1068444076,
+ -1108784502,
+ 1028511671,
+ 1041448145,
+ 1054618010,
+ 1069005260,
+ 1003805565,
+ -1111047884,
+ -1109672503,
+ -1096507592,
+ -1112010755,
+ 1042158221,
+ 1031823288,
+ 1042636069,
+ 1017507417,
+ 1044090169,
+ 1036707459,
+ 1060952354,
+ 1066531862,
+ 1040947650,
+ 1032369378,
+ -1088512625,
+ 1062342445,
+ 1072678091,
+ -1077611526,
+ -1098644817,
+ -1103682744,
+ 1069344207,
+ -1134580510,
+ 1044627620,
+ 1065214528,
+ -1071811547,
+ -1100555204,
+ -1071738533,
+ -1073215116,
+ 1059536856,
+ -1106628113,
+ -1145801092,
+ -1097615384,
+ 1039379456,
+ -1112552694,
+ -1103213364,
+ 1065262442,
+ -1101073914,
+ 1042904574,
+ -1124052223,
+ 1078097280,
+ -1094355462,
+ -1116073410,
+ 1039255635,
+ -1086392019,
+ -1104183382,
+ 1035178126,
+ 1074856616,
+ 1049086268,
+ -1088424542,
+ 1046921233,
+ -1060792066,
+ -1088348379,
+ -1098487468,
+ -1080349351,
+ -1080035562,
+ -1095066695,
+ 1012551606,
+ 1057475399,
+ 1005053523,
+ -1123956819,
+ -1089563527,
+ -1096737409,
+ 1064650449,
+ -1107123497,
+ -1122098352,
+ -1113667159,
+ -1090970929,
+ 1021479568,
+ 1029170036,
+ -1083092855,
+ 1037273936,
+ -1124044682,
+ -1080290457,
+ -1109138766,
+ 1020390783,
+ -1095387021,
+ -1113621528,
+ 1051657212,
+ -1075440752,
+ -1098359472,
+ 1059698196,
+ -1080692453,
+ -1111436877,
+ 1062316466,
+ 1048736081,
+ -1090076400,
+ 1051373417,
+ -1093641159,
+ 1033344171,
+ 1060778901,
+ -1103895872,
+ 1053196029,
+ -1080569919,
+ 1057895536,
+ 1030849638,
+ 1057014270,
+ 1091299415,
+ 1051778126,
+ 1055793134,
+ -1107245289,
+ -1112079342,
+ 1057113851,
+ 1020171625,
+ -1069093363,
+ -1072899700,
+ -1113063224,
+ -1078087809,
+ -1068221433,
+ 1050343573,
+ -1074407622,
+ 1042108263,
+ 1065818225,
+ 1057966315,
+ -1076281286,
+ -1069396436,
+ -1089934434,
+ -1099693514,
+ -1080432655,
+ -1081408012,
+ 1103598164,
+ -1087957249,
+ -1120355155,
+ 1072365727,
+ -1081162608,
+ 1050891347,
+ -1069691130,
+ 1049208186,
+ 1066789008,
+ -1074828380,
+ 1066387272,
+ 1057960519,
+ -1080816689,
+ 1067010820,
+ -1061136188,
+ -1087087645,
+ 1081521228,
+ -1070328184,
+ -1063864921,
+ 1070101193,
+ -1059205133,
+ 1079302118,
+ -1077102504,
+ 1093488607,
+ -1087825611,
+ 1052723087,
+ 1054425150,
+ -1094368377,
+ -1087313054,
+ -1081373498,
+ -1104543077,
+ -1141728384,
+ 1057483879,
+ -1095307948,
+ -1078217441,
+ 1032848043,
+ 1065602653,
+ 1040816318,
+ 1048835405,
+ -1093463054,
+ -1080862999,
+ -1106186527,
+ -1093856421,
+ -1087323806,
+ -1080354862,
+ 1062769646,
+ 1059351187,
+ -1086098439,
+ 1042422675,
+ -1086068964,
+ -1071846770,
+ -1069494418,
+ -1099273684,
+ 1074107318,
+ 1071510803,
+ -1093505329,
+ 1069806411,
+ 1046391191,
+ 1044178248,
+ -1077738334,
+ 1059229640,
+ -1109506935,
+ 1050983212,
+ -1090913324,
+ 1037033400,
+ -1080873354,
+ -1086057244,
+ -1098322783,
+ 1057187037,
+ 1052774777,
+ -1086749729,
+ 1049455628,
+ 1063701849,
+ 1081470362,
+ 1072763052,
+ 1042682575,
+ -1068537932,
+ -1073027122,
+ -1072449709,
+ 1032166048,
+ 1069849588,
+ 1040574129,
+ -1077914619,
+ 1068141752,
+ 1065076891,
+ -1094737606,
+ -1078128033,
+ 1062643551,
+ 1085327991,
+ -1094554560,
+ 1061101920,
+ 1034615018,
+ -1067370958,
+ -1080154803,
+ 1049881079,
+ -1069809885,
+ -1088432108,
+ 1069905492,
+ 1043420823,
+ 1072714552,
+ 1072027294,
+ -1089612735,
+ -1104201651,
+ -1074262696,
+ -1080903740,
+ 1073901978,
+ 1082615585,
+ -1070972418,
+ 1084298156,
+ 1085563380,
+ -1061620965,
+ 1078026413,
+ -1070542873,
+ 1086034812,
+ -1084011456,
+ 1079062479,
+ 1082108540,
+ -1073048936,
+ 1076434318,
+ -1090347719,
+ 1071151703,
+ -1096046595,
+ -1087509741,
+ 1040301018,
+ 1024106254,
+ -1092725838,
+ -1114500231,
+ -1105044764,
+ -1131886969,
+ -1103163440,
+ -1106432979,
+ 1051416923,
+ 1054289921,
+ -1081475183,
+ -1104152127,
+ -1080610592,
+ -1095277912,
+ 1065581321,
+ 1067402527,
+ -1091386573,
+ 1051296464,
+ 1051456143,
+ -1111815412,
+ -1074865091,
+ -1096398306,
+ -1082899853,
+ 1071556137,
+ -1088893848,
+ 1067212476,
+ 1053376484,
+ -1088293672,
+ -1081867943,
+ 1061161478,
+ 1085338462,
+ -1079588669,
+ 1069000475,
+ 1075799456,
+ 1055829449,
+ -1119460151,
+ -1121740708,
+ 1018961122,
+ 1075428478,
+ 1054872314,
+ -1083061565,
+ -1069863208,
+ -1098446392,
+ 1078228881,
+ 1072342564,
+ 1077969438,
+ 1067950739,
+ -1086008379,
+ -1072303977,
+ 1077629393,
+ 1052346730,
+ -1080782165,
+ 1060080749,
+ 1056274202,
+ 1045181314,
+ 1071829325,
+ 1061820964,
+ 1082533705,
+ 1072355359,
+ -1058997694,
+ -1097262409,
+ 1044006178,
+ -1089291873,
+ 1068106545,
+ -1083691314,
+ 1050799927,
+ -1073977595,
+ -1081749601,
+ 1057949192,
+ -1093875128,
+ -1083086884,
+ 1032763204,
+ 1057818851,
+ 1042218103,
+ -1092220580,
+ -1075098821,
+ 1081267980,
+ -1084474623,
+ 1067517067,
+ 1074973238,
+ 1069315846,
+ 1053630831,
+ 1091487207,
+ 1070083415,
+ -1097392241,
+ 1049672646,
+ -1065980937,
+ 1059082787,
+ -1079637018,
+ 1071018546,
+ -1084560863,
+ 1052206988,
+ -1096081433,
+ 1028133475,
+ 1061930115,
+ 1058356652,
+ -1100087304,
+ 1060627801,
+ 1058234359,
+ -1105282170,
+ -1121654480,
+ -1089965618,
+ -1086733935,
+ -1096321924,
+ -1114903036,
+ -1095892954,
+ -1098058234,
+ 1068492679,
+ -1100540353,
+ 1031390431,
+ 1058769968,
+ 1055688251,
+ -1076535533,
+ -1080870607,
+ 1070222286,
+ 1069317252,
+ -1083655443,
+ 1064972850,
+ -1094182584,
+ -1098629385,
+ 1053624951,
+ 1058608362,
+ -1058881333,
+ -1094903727,
+ -1082435354,
+ -1061245994,
+ 1059098001,
+ -1073701287,
+ 1059723406,
+ 1061986926,
+ 1059837617,
+ 1074136861,
+ 1061964350,
+ 1051336426,
+ -1076177765,
+ -1074430064,
+ 1062930967,
+ -1142809240,
+ 1067377143,
+ -1084937580,
+ -1066424579,
+ -1069066153,
+ -1095452552,
+ -1076130472,
+ -1078364584,
+ 1056601111,
+ -1089353555,
+ 1061858374,
+ 1065562607,
+ -1092630987,
+ -1086850325,
+ -1067569495,
+ 1049455452,
+ -1075041303,
+ -1081117451,
+ 1065701463,
+ -1066949859,
+ -1098813873,
+ 1068743595,
+ 1077692172,
+ -1070286243,
+ -1071114662,
+ 1072350377,
+ -1074776512,
+ -1072894657,
+ -1063702601,
+ 1067650773,
+ -1064646502,
+ -1087619668,
+ -1104496134,
+ -1061865326,
+ -1062860423,
+ 1075120587,
+ -1092041617,
+ 1077438536,
+ -1083672950,
+ 1069666979,
+ -1075049127,
+ -1068948318,
+ 1081283422,
+ -1072630420,
+ 1062048548,
+ -1079071133,
+ 1057920997,
+ -1087669555,
+ -1157182453,
+ 1066249228,
+ 1064621649,
+ -1121442619,
+ 1060683415,
+ 1059054078,
+ 1074620541,
+ 1053281215,
+ 1060963271,
+ -1111452449,
+ -1074458416,
+ -1080045516,
+ -1077386732,
+ 1021221460,
+ 1064901131,
+ 1042495119,
+ -1115822216,
+ 1062289311,
+ 1061883671,
+ 1084824001,
+ -1079396855,
+ -1074029355,
+ 1081357924,
+ -1084027336,
+ 1063582888,
+ 1071888958,
+ 1049978115,
+ -1088959728,
+ 1056104358,
+ -1095913968,
+ -1087891830,
+ 1077879029,
+ 1076457714,
+ -1077826455,
+ -1081162067,
+ 1055064640,
+ 1045444448,
+ -1071696498,
+ 1047437489,
+ 1063898246,
+ 1076433743,
+ -1086520907,
+ 1073876095,
+ 1031292481,
+ 1066690539,
+ 1043922754,
+ -1060291080,
+ 1057575827,
+ -1068708649,
+ 1023209069,
+ 1076552352,
+ -1088594514,
+ -1096404165,
+ 1063128587,
+ 1042999678,
+ 1062510578,
+ -1066457780,
+ -1086701730,
+ -1081023255,
+ 1043502708,
+ 1071868020,
+ 1061840979,
+ 1013908578,
+ 1051003603,
+ 1063812198,
+ 1049620933,
+ -1071919296,
+ 1069484547,
+ -1070242171,
+ 1037850846,
+ -1074842780,
+ 1076616512,
+ 1053231038,
+ -1084781827,
+ -1083315838,
+ -1072349344,
+ -1072805499,
+ -1084667992,
+ 1084426549,
+ 1059049470,
+ -1081695725,
+ 1076227001,
+ -1078361805,
+ 1052003202,
+ -1087977344,
+ -1079971576,
+ 1081447284,
+ 1065408710,
+ -1106670892,
+ 1035725467,
+ 1054261096,
+ 1032474746,
+ -1081074611,
+ -1109942835,
+ 1037712490,
+ 1010665972,
+ 1033023604,
+ -1095203419,
+ -1091454024,
+ 1042095258,
+ 1055518640,
+ -1087916253,
+ 1052859595,
+ 1054437958,
+ 1037506254,
+ 1048608599,
+ 1049038444,
+ -1092788106,
+ 1025660563,
+ 1067939162,
+ 1054759401,
+ 1079106019,
+ 1057581658,
+ -1078420046,
+ 1075058096,
+ 1058447913,
+ 1080027276,
+ 1048760776,
+ -1098486840,
+ 1045301740,
+ 1069088939,
+ -1067957655,
+ -1078185795,
+ 1073250953,
+ 1057819284,
+ 1056698827,
+ 1064623006,
+ 1049201478,
+ -1089408872,
+ -1063746290,
+ 1069135649,
+ -1103497120,
+ 1046519011,
+ 1059622090,
+ 1006108406,
+ -1099639477,
+ 1066766790,
+ 1061937643,
+ -1061479554,
+ -1103897071,
+ 1066076110,
+ 1064781803,
+ -1084743586,
+ -1074240672,
+ 1062481274,
+ -1086312523,
+ -1081014744,
+ -1087106496,
+ 1044706322,
+ 1084974089,
+ -1109521391,
+ -1082328476,
+ 1085142040,
+ 1076906904,
+ 1070136810,
+ -1112255281,
+ 1044748131,
+ -1080481602,
+ -1083853913,
+ 1084146904,
+ -1090056789,
+ -1069466077,
+ -1116103520,
+ 1078924733,
+ 1074824865,
+ -1082331629,
+ -1076539381,
+ 1064572473,
+ 1067320829,
+ -1091653584,
+ -1070646775,
+ -1065127595,
+ -1079693203,
+ 1065770906,
+ 1057212192,
+ 1057552217,
+ -1071140546,
+ -1078487605,
+ -1065083160,
+ -1061359692,
+ 1064161804,
+ -1090354595,
+ -1079511393,
+ -1096492053,
+ 1066112053,
+ 1048469247,
+ 1055868644,
+ -1092548323,
+ -1077367287,
+ 1058274252,
+ 1069873312,
+ -1085006948,
+ -1079704479,
+ -1074330345,
+ 1039969813,
+ -1121041833,
+ -1088727590,
+ 1075042805,
+ 1061879001,
+ -1092751105,
+ 1059030014,
+ -1108981283,
+ 1003745912,
+ 1076113331,
+ 1066219229,
+ 1083610369,
+ 1077711940,
+ -1111474314,
+ -1094116336,
+ 1059889371,
+ 1052411363,
+ -1089913705,
+ -1078032447,
+ -1075294262,
+ 1068293829,
+ -1067879690,
+ 1069483395,
+ -1105559976,
+ -1079828036,
+ 1064208739,
+ 1080582937,
+ 1057080676,
+ -1093915030,
+ 1059043526,
+ 1051280936,
+ 1065160413,
+ 1049586367,
+ 1054735548,
+ -1118546215,
+ -1091109377,
+ -1074980941,
+ -1089939742,
+ 1059349523,
+ 1057331909,
+ -1120462844,
+ -1084289945,
+ -1089666567,
+ -1088716612,
+ -1092926604,
+ -1085385710,
+ 1038944501,
+ 1071479941,
+ -1078989299,
+ 1052006212,
+ 1077182500,
+ -1116267885,
+ -1086144995,
+ 1073945644,
+ 1060580077,
+ -1084451892,
+ -1087337961,
+ -1066153112,
+ -1089751909,
+ -1070278059,
+ -1070050017,
+ -1076861296,
+ -1065983156,
+ -1081560734,
+ -1085560495,
+ 1074601213,
+ -1096577200,
+ -1093641421,
+ 1060004985,
+ 1073840254,
+ -1095520248,
+ -1123587622,
+ -1094570388,
+ 1069000864,
+ -1086841936,
+ -1076878467,
+ -1062136403,
+ 1065345466,
+ 1041127564,
+ -1104988699,
+ -1081896896,
+ -1096779938,
+ 1052668161,
+ -1088424926,
+ -1098138817,
+ 1014779780,
+ -1085878946,
+ 1049267013,
+ 1058027103,
+ -1088263605,
+ -1089557729,
+ -1092906900,
+ -1126448348,
+ -1083811828,
+ -1097941121,
+ 1062437838,
+ 1058626679,
+ 1034292995,
+ -1118736947,
+ 1050520407,
+ -1096465542,
+ 1076269780,
+ 1059973551,
+ 1065220281,
+ 1078388397,
+ 1024670930,
+ 1064464488,
+ -1088279923,
+ 1051920622,
+ -1071698979,
+ 1068521125,
+ -1072404450,
+ 1069035741,
+ 1077060422,
+ -1063884426,
+ 1042768750,
+ -1073662495,
+ -1085020371,
+ 1074187366,
+ 1078179852,
+ 1068312119,
+ 1050797442,
+ -1071311731,
+ -1105345610,
+ -1139444562,
+ 1048126421,
+ 1090226688,
+ -1068479589,
+ -1076492572,
+ -1065390119,
+ 1037726215,
+ 1075161358,
+ 1071853102,
+ -1065306585,
+ 1076674783,
+ 978097264,
+ -1106038904,
+ 1085348568,
+ 1077443012,
+ 1076035565,
+ 1061419416,
+ -1060407234,
+ 1080664692,
+ -1097979519,
+ 1071616299,
+ 1079746964,
+ 1077895542,
+ 1084524534,
+ 1043845664,
+ 1090846259,
+ -1075401016,
+ -1118805443,
+ -1062727210,
+ 1063432429,
+ -1065170752,
+ 1058133693,
+ 1059180451,
+ -1083056015,
+ -1072913705,
+ -1078841347,
+ 1075192057,
+ 1058296318,
+ 1033067838,
+ -1077827933,
+ 1076835372,
+ 1075946600,
+ -1086998050,
+ 1083434764,
+ 1075331023,
+ -1088069234,
+ 1055213089,
+ -1097863364,
+ -1078881303,
+ -1110579442,
+ 1067402980,
+ 1074869003,
+ 1055617166,
+ 1060045137,
+ 1067635448,
+ 1071482245,
+ -1089541442,
+ 1068357514,
+ 1058111114,
+ -1111877814,
+ -1090712330,
+ -1079436309,
+ -1077738044,
+ -1066492046,
+ 1073581370,
+ -1092473371,
+ -1105883784,
+ -1095382150,
+ 1049599064,
+ 1078742386,
+ -1070503465,
+ -1067739243,
+ -1113017475,
+ -1089731692,
+ 1058166463,
+ -1064287668,
+ 1074097567,
+ -1079388784,
+ 1070691622,
+ -1060659612,
+ -1067922734,
+ 1066059859,
+ -1089101793,
+ 1043028223,
+ 1083730261,
+ -1084712860,
+ -1070311033,
+ -1058104323,
+ -1071849324,
+ 1075111632,
+ 1063896521,
+ -1101971273,
+ -1077885420,
+ 1059454137,
+ -1074399748,
+ -1086326960,
+ -1075716780,
+ 1065953746,
+ -1064691861,
+ -1095569018,
+ -1105522269,
+ 1059889742,
+ -1079549403,
+ 991114650,
+ -1066001789,
+ -1122856094,
+ -1080853132,
+ 1067727690,
+ -1088084269,
+ 1076384349,
+ -1069352146,
+ -1085271802,
+ 1065048378,
+ -1077003641,
+ -1072547159,
+ -1071611498,
+ 1076240320,
+ 1077821855,
+ 1052209359,
+ 1080658211,
+ -1080071469,
+ 1071416318,
+ 1074337825,
+ -1102335750,
+ 1057474243,
+ 1062580288,
+ -1073758083,
+ 1077099182,
+ -1055260154,
+ 1063493337,
+ 1068763083,
+ 1079978319,
+ -1103328281,
+ 1059409749,
+ 1075773357,
+ -1095085263,
+ 1079974028,
+ 1055889011,
+ -1079875333,
+ -1087578065,
+ 1073373375,
+ 1051249932,
+ -1089594021,
+ -1086042095,
+ 1063722069,
+ -1116324514,
+ 1048776570,
+ 1057314558,
+ -1074945384,
+ -1102143686,
+ -1101205397,
+ -1082135976,
+ -1094444320,
+ -1118964251,
+ -1105831036,
+ -1074182680,
+ 1047313494,
+ -1080111912,
+ 1036821086,
+ -1083375121,
+ -1091751065,
+ 1067138871,
+ -1117822111,
+ 1070974258,
+ 1053479059,
+ -1084457676,
+ -1066209647,
+ -1073917542,
+ -1104417347,
+ -1079018030,
+ 1047729835,
+ 1085635834,
+ -1079174252,
+ -1063644292,
+ 1053163423,
+ -1089453013,
+ 1062275354,
+ -1093531755,
+ 1056052194,
+ -1072293249,
+ -1081899521,
+ -1081457073,
+ -1065609062,
+ -1073658647,
+ -1078903095,
+ -1090888134,
+ -1073624144,
+ -1082600194,
+ -1073112504,
+ 1081266190,
+ 1081304356,
+ -1103377688,
+ 1061319428,
+ -1103523680,
+ -1075419257,
+ 1047077505,
+ -1065124730,
+ -1078347707,
+ -1074162269,
+ 1073921009,
+ 1080562504,
+ 1072394434,
+ 1083289410,
+ -1093400788,
+ -1085104902,
+ -1079016254,
+ -1099039448,
+ 1070241425,
+ 1079915165,
+ -1071184329,
+ 1080101628,
+ 1066259303,
+ -1086379839,
+ 1080092201,
+ 1074450203,
+ -1078995939,
+ -1087011675,
+ 1058501099,
+ 1090223052,
+ 1067774963,
+ -1065233734,
+ 998053856,
+ -1078457770,
+ -1092486222,
+ 1063986781,
+ 1051254989,
+ 1047540789,
+ 1050967457,
+ 1074242062,
+ 1049830887,
+ -1108758998,
+ 1025218823,
+ -1086332040,
+ -1102836091,
+ 1031243747,
+ 1074296868,
+ -1074712219,
+ 1023366534,
+ -1097160206,
+ -1086150264,
+ 1049549686,
+ -1093336090,
+ 1035776621,
+ 1044929836,
+ -1084396248,
+ 1056255011,
+ 1039799363,
+ -1099742489,
+ -1081344737,
+ 1076378326,
+ -1105383127,
+ -1068547222,
+ -1087661769,
+ 1040197526,
+ 1058255870,
+ 1068141481,
+ -1074481833,
+ -1085874093,
+ 1075652873,
+ 1066887862,
+ -1080554079,
+ -1122262422,
+ 1048839002,
+ 1081100144,
+ 1056303557,
+ 1024234553,
+ -1071568954,
+ -1099861634,
+ 1052298744,
+ -1080298629,
+ -1070595755,
+ -1068848787,
+ 1075826595,
+ 1057541862,
+ 1033906765,
+ -1094929968,
+ 1066394803,
+ -1100361514,
+ -1086232965,
+ -1080928439,
+ -1126822810,
+ -1069473533,
+ 1083105183,
+ -1095641893,
+ -1082794878,
+ 1068296926,
+ 1067775845,
+ 1064055696,
+ 1067418768,
+ -1076396306,
+ 1078339724,
+ 1078715869,
+ 1071641876,
+ -1105226822,
+ -1073373902,
+ -1092265833,
+ 1058339029,
+ 1074685865,
+ 1076039111,
+ 1068686407,
+ -1107601363,
+ 1086217443,
+ -1073338228,
+ 1044287428,
+ -1064996620,
+ -1086047226,
+ -1063925762,
+ -1075528889,
+ -1080550643,
+ -1076011713,
+ -1072930613,
+ -1067129770,
+ 1056302027,
+ -1087588079,
+ -1057523737,
+ -1068880822,
+ -1068817502,
+ -1066057475,
+ -1077664714,
+ -1082493250,
+ 1072632501,
+ -1071765326,
+ 1056136349,
+ -1088007779,
+ -1087306866,
+ -1096507230,
+ -1095951424,
+ 1066662494,
+ 1069006538,
+ -1113397866,
+ 1054718158,
+ 1057531488,
+ 1059591360,
+ 1049782424,
+ -1092981760,
+ 1052884656,
+ -1105628865,
+ -1084023920,
+ -1089009282,
+ 1054141937,
+ 1035552917,
+ -1079958404,
+ 1041972667,
+ 1071100773,
+ 1050583998,
+ 1089684194,
+ 1073927038,
+ -1092250700,
+ 1081812056,
+ -1074611506,
+ 1032099559,
+ 1061293331,
+ -1090235411,
+ -1085693157,
+ 1070503578,
+ -1071927697,
+ -1082302789,
+ -1097151814,
+ 1060378098,
+ 1059336707,
+ -1120271181,
+ 1052291356,
+ -1082629813,
+ -1059338536,
+ 1067900865,
+ 1066222187,
+ 1080482919,
+ 1040411252,
+ -1071096081,
+ 1055021599,
+ 1073042984,
+ 1071004670,
+ -1072331951,
+ 1081235598,
+ 1087197134,
+ 1064829457,
+ 1053524678,
+ -1120811206,
+ -1072864313,
+ -1087311933,
+ -1076295737,
+ -1064759585,
+ 1077655295,
+ 1067870455,
+ 1080264094,
+ 1066615251,
+ 1070247790,
+ -1091210684,
+ 1030112545,
+ 1065149033,
+ 1065868714,
+ 1048785555,
+ -1075602099,
+ -1062465295,
+ -1080447043,
+ -1100602048,
+ 1051586652,
+ 1081033248,
+ 1068517219,
+ -1086510582,
+ 1073774623,
+ -1089703849,
+ 1080270887,
+ -1086206965,
+ -1078659942,
+ -1063820569,
+ 1065491724,
+ -1080859243,
+ 1045042702,
+ 1061002344,
+ -1075947395,
+ 1076142393,
+ 1070429882,
+ 1070548991,
+ 1067766269,
+ -1105873912,
+ -1085838147,
+ -1098532126,
+ -1115402277,
+ -1088295693,
+ 1027634606,
+ 1024113333,
+ -1069172418,
+ 1066071441,
+ 1051863987,
+ -1082692168,
+ -1097623046,
+ 1058186014,
+ 1059256495,
+ 1046909671,
+ -1094871931,
+ 1071332834,
+ -1086938908,
+ 1061460366,
+ -1103254371,
+ -1104619616,
+ -1130339240,
+ 1066472996,
+ -1080026708,
+ 1079036182,
+ 1053215953,
+ -1078520392,
+ -1069823342,
+ -1081867576,
+ 1058539749,
+ -1075322522,
+ -1078582317,
+ 1089625495,
+ 1055641776,
+ -1093857540,
+ -1070824118,
+ -1082112120,
+ -1077892094,
+ -1097939940,
+ 1080920563,
+ 1086280078,
+ -1062078489,
+ -1097144828,
+ -1071022942,
+ -1073313043,
+ 1069770232,
+ -1096535665,
+ -1073130925,
+ -1092848406,
+ -1088167358,
+ 1077045128,
+ 1049473113,
+ 1038374640,
+ -1072721311,
+ 1063958333,
+ -1081363774,
+ 1068327127,
+ 1053988386,
+ -1072775890,
+ -1103566743,
+ 1058278470,
+ 1079251726,
+ -1095677031,
+ -1069009071,
+ -1083506792,
+ 1060407894,
+ 1072878428,
+ 1057310539,
+ 1051455672,
+ -1070815414,
+ -1070902035,
+ 1068995515,
+ -1093476570,
+ 1068979554,
+ 1070053819,
+ -1085573775,
+ -1081524434,
+ -1069361713,
+ -1098597933,
+ -1105363854,
+ -1083755628,
+ 1061489505,
+ -1068537176,
+ 1065889769,
+ -1085741998,
+ -1072533542,
+ 1035149605,
+ 1058694866,
+ 1070470566,
+ -1073786008,
+ -1077400079,
+ -1107822770,
+ -1081821606,
+ -1083847004,
+ -1089878100,
+ 1064054449,
+ 1058916180,
+ 1063465508,
+ 1052783296,
+ 1066885073,
+ 1040785921,
+ 1061800501,
+ -1086044061,
+ -1107114862,
+ 1051751499,
+ -1085664987,
+ -1089170684,
+ -1089073391,
+ -1090912761,
+ 1051865480,
+ -1089170749,
+ 1043895308,
+ 1062102784,
+ -1085725827,
+ -1102107508,
+ 1050731590,
+ -1084000633,
+ 1068484545,
+ -1072873456,
+ -1073014944,
+ 1069758189,
+ -1090917403,
+ -1078377288,
+ -1125040415,
+ 1074660460,
+ -1071403411,
+ -1071836523,
+ -1089049718,
+ 1049483923,
+ 1078564502,
+ -1087006437,
+ -1074705371,
+ 1050550752,
+ -1085103423,
+ 1054648886,
+ 1045238271,
+ -1075350244,
+ -1091899885,
+ 1050816412,
+ 1074594641,
+ -1095429629,
+ -1071477805,
+ -1079722976,
+ -1076257851,
+ 1051466005,
+ -1079653661,
+ -1100850669,
+ -1095589241,
+ 1038899002,
+ 1068114066,
+ -1103837830,
+ 1069330568,
+ 1070563048,
+ -1077525382,
+ 1043052758,
+ -1085276239,
+ -1074576709,
+ 1055717286,
+ -1083843792,
+ 1062818083,
+ -1088528704,
+ 1067807867,
+ -1056638402,
+ -1075416977,
+ 1064526004,
+ 1064469294,
+ 1058088139,
+ -1079637513,
+ -1100732238,
+ -1082582534,
+ -1086689646,
+ -1081434181,
+ -1090136296,
+ 1063909664,
+ 1063350812,
+ -1087042839,
+ -1082810173,
+ -1100194731,
+ -1061521654,
+ -1080268311,
+ 1040908961,
+ -1081057725,
+ -1072181369,
+ 1059140100,
+ -1094466635,
+ -1093678455,
+ -1099881733,
+ 1055296429,
+ 1051308423,
+ 1050811719,
+ 1032164361,
+ 1045903706,
+ 1049356767,
+ 1053255632,
+ -1144274974,
+ -1119295318,
+ -1081919869,
+ 1052571788,
+ -1090313179,
+ -1098452420,
+ 1035792104,
+ 1058472566,
+ 1025142876,
+ 1049453018,
+ 1067348971,
+ 1038469679,
+ 1083187438,
+ -1082373316,
+ -1087173893,
+ 1070232893,
+ -1085521225,
+ -1086267273,
+ 1063594479,
+ 1057008761,
+ -1084913906,
+ 1057195995,
+ 1063561011,
+ 1060668750,
+ -1085509517,
+ -1078241919,
+ 1055860452,
+ 1000278688,
+ 1050276145,
+ 1058619342,
+ -1082005496,
+ -1087768879,
+ -1100402861,
+ 1082354056,
+ 1057370675,
+ 1064449744,
+ 1078412138,
+ -1074283803,
+ 1057715670,
+ -1077829543,
+ 1054922528,
+ 1081356305,
+ 1062154540,
+ 1073728588,
+ -1086928506,
+ -1065220764,
+ 1068275718,
+ 1075276153,
+ -1072949165,
+ -1071104549,
+ -1089357844,
+ -1073723458,
+ 1069149854,
+ 1075049295,
+ 1069819985,
+ 1071321190,
+ -1071792911,
+ 1071647210,
+ 1075055795,
+ 1061376693,
+ -1074879771,
+ -1086488386,
+ 1074277014,
+ 1083030143,
+ 1067976218,
+ -1064195098,
+ 1059911411,
+ 1072493597,
+ 1087162389,
+ 1087675603,
+ 1061187478,
+ -1080921349,
+ 1078070630,
+ 1074818563,
+ 1085162444,
+ 1060095357,
+ -1076729279,
+ 1066135684,
+ -1079482568,
+ -1073645537,
+ 1074180026,
+ -1062538342,
+ 1074827640,
+ 1080781484,
+ 1054929402,
+ -1097807417,
+ -1079893387,
+ -1170668656,
+ -1093915011,
+ -1080512165,
+ -1085936747,
+ 1074494843,
+ 1050034537,
+ -1092016150,
+ 1069357230,
+ 1033841804,
+ 1065479475,
+ 1069923126,
+ 1039649777,
+ -1094104355,
+ -1106840553,
+ 1041846179,
+ -1088179626,
+ -1084070932,
+ 1074865440,
+ -1085473835,
+ 1089124095,
+ -1083474790,
+ 1073661982,
+ 1061055750,
+ -1069380656,
+ -1080417273,
+ -1100387358,
+ 1072705460,
+ 1077259835,
+ 1054726177,
+ -1080509838,
+ -1073321892,
+ -1069239977,
+ 1059999958,
+ 1074822733,
+ -1072492945,
+ -1072386798,
+ 1083154485,
+ -1096374932,
+ 1071179841,
+ 1082513791,
+ 1022727166,
+ 1061280071,
+ 1072548450,
+ -1090205384,
+ -1062524872,
+ -1063553203,
+ 1065394318,
+ 1045214051,
+ -1080730282,
+ 993878958,
+ -1090969197,
+ -1091006124,
+ -1111457538,
+ 1047313153,
+ -1074388716,
+ -1081557621,
+ 1074903726,
+ -1089351784,
+ -1070868766,
+ -1069428298,
+ 1063401564,
+ 1067117669,
+ -1088656631,
+ 1052025902,
+ 1066001701,
+ -1087300015,
+ 1058053835,
+ 1051978570,
+ 1055873796,
+ -1086522987,
+ -1084947300,
+ -1093346963,
+ -1072457144,
+ -1077441372,
+ -1068837573,
+ -1093002680,
+ 1059683037,
+ -1088309069,
+ 1073906322,
+ -1072400007,
+ -1066101086,
+ 1033667345,
+ 1071762051,
+ -1090242100,
+ 1057150170,
+ -1087809593,
+ 1043044255,
+ -1079116119,
+ -1088733988,
+ -1092529278,
+ 1061179655,
+ 1053741352,
+ 1056595117,
+ -1098223566,
+ -1105510942,
+ 1041308055,
+ 1059500354,
+ -1091479454,
+ -1104075674,
+ -1078407395,
+ -1086310156,
+ -1081865738,
+ -1095464728,
+ -1098464254,
+ 1064046946,
+ -1087396174,
+ 1045424009,
+ 1068378081,
+ -1085880653,
+ -1088407062,
+ -1082000655,
+ -1095463317,
+ 1063739719,
+ -1080642808,
+ -1079794531,
+ 1079427258,
+ 1051074679,
+ -1079334103,
+ -1076635366,
+ 1059470804,
+ -1097375877,
+ 1053503429,
+ 1068398562,
+ 1052645277,
+ -1112857779,
+ -1111353742,
+ -1072232055,
+ 1062969570,
+ -1085390347,
+ 1067382318,
+ 1070310288,
+ -1111362556,
+ -1104799802,
+ -1081391383,
+ -1083565363,
+ -1083057355,
+ 1080307085,
+ 1069593417,
+ -1076897210,
+ -1091678203,
+ 1063866889,
+ -1086330463,
+ -1093920745,
+ 1056735163,
+ -1088878829,
+ -1076234835,
+ -1056915369,
+ 1065528840,
+ 1070691527,
+ -1084223780,
+ 1067002991,
+ 1058095602,
+ 1057063911,
+ 1075690292,
+ -1085378498,
+ 1047405683,
+ -1069452209,
+ -1095204325,
+ -1115083501,
+ 1063286064,
+ -1067439696,
+ -1103381867,
+ -1131783735,
+ -1083087210,
+ -1072203120,
+ 1063950566,
+ 1075310008,
+ -1072461800,
+ -1081514708,
+ -1081755868,
+ -1081875643,
+ 1045795305,
+ -1083987411,
+ -1081820865,
+ -1070674438,
+ 1072275315,
+ 1082580825,
+ 1067943895,
+ 989189276,
+ -1097297549,
+ 1038497768,
+ 1033315890,
+ 1065728176,
+ -1089800268,
+ -1091524600,
+ 1049254494,
+ 1059341403,
+ -1087759907,
+ 1059643952,
+ -1118260217,
+ 1051988919,
+ 1052290155,
+ -1093727692,
+ 1046506453,
+ -1093259102,
+ -1086675929,
+ -1081517994,
+ 1037755038,
+ 1024775072,
+ -1090919736,
+ -1094468204,
+ 1071408205,
+ 1072208075,
+ -1135781952,
+ 1063855049,
+ -1076590454,
+ 1067084782,
+ -1092331400,
+ 1042254400,
+ -1085038145,
+ 1058365118,
+ 1057591300,
+ -1078974951,
+ -1093709736,
+ -1076212592,
+ 1040829242,
+ 1040255569,
+ -1081584765,
+ -1095101868,
+ 1037446974,
+ -1083018097,
+ 1057829770,
+ 1058318612,
+ -1088398303,
+ 1082088259,
+ 1074347393,
+ 1056059812,
+ 1061962678,
+ 1069358262,
+ 1083562241,
+ 1063331888,
+ -1061549630,
+ 1032466943,
+ 1059327663,
+ 1081660551,
+ -1110696914,
+ -1097445422,
+ 1077225465,
+ 1045795584,
+ 1067319415,
+ -1083933631,
+ -1080321550,
+ 1082240510,
+ 1065847662,
+ -1068117398,
+ -1078326695,
+ 1074793291,
+ -1067653259,
+ -1089756163,
+ -1095742473,
+ -1060915086,
+ -1113555075,
+ 1066125943,
+ 1056870325,
+ 1049475653,
+ -1089803126,
+ -1063420192,
+ 1072554150,
+ -1079372341,
+ -1070049111,
+ -1060154890,
+ -1129796861,
+ -1072794582,
+ 1076319755,
+ 1082279901,
+ 1069428725,
+ 1073385946,
+ 1074899027,
+ 1076615586,
+ 1049035166,
+ -1083748837,
+ 1075306744,
+ -1099398367,
+ -1129949287,
+ -1081727124,
+ -1095953738,
+ -1089829283,
+ 1061698401,
+ -1098881004,
+ -1070054653,
+ 1055300882,
+ -1102279462,
+ -1081638218,
+ 1066176539,
+ -1112200331,
+ 1034994601,
+ 1064387113,
+ -1080253469,
+ 1070732471,
+ 1056489142,
+ -1087912346,
+ -1080964807,
+ -1077481049,
+ -1078839279,
+ 1076170627,
+ -1088176133,
+ 1051988800,
+ 1066780375,
+ 1069417983,
+ 1072285962,
+ -1131252872,
+ 1072943668,
+ 1067069715,
+ -1063275160,
+ 1075296885,
+ 1065557928,
+ -1076750872,
+ 1063075911,
+ 1058367586,
+ 1074134136,
+ -1080249094,
+ -1079395887,
+ -1081458491,
+ -1089615477,
+ 1074072933,
+ 1073874728,
+ -1106141737,
+ -1106331762,
+ -1089272408,
+ 1059058700,
+ 1066074021,
+ 1051378334,
+ 1064137989,
+ 1059123309,
+ -1097903050,
+ -1086624314,
+ 1066164451,
+ -1097001737,
+ -1086421760,
+ -1096747181,
+ -1095383913,
+ 1052606814,
+ -1100251607,
+ 1054403196,
+ 1010086639,
+ -1081165600,
+ -1083830492,
+ -1096982837,
+ -1086709327,
+ -1082189156,
+ 1057589290,
+ -1085316980,
+ 1075953776,
+ -1070744584,
+ 1057403902,
+ 1048807784,
+ -1089615741,
+ 1052949112,
+ -1072887273,
+ 1065418877,
+ 1037033917,
+ 1074060336,
+ -1100975674,
+ 1070054631,
+ -1063499511,
+ -1064234549,
+ -1102263553,
+ 1065897821,
+ 1060061081,
+ -1089513068,
+ -1082075745,
+ -1079835338,
+ 1055826315,
+ -1077082422,
+ 1015230996,
+ -1102618490,
+ 1050653681,
+ -1104528663,
+ -1095248642,
+ -1088983828,
+ -1101140029,
+ 1031841541,
+ -1096569467,
+ 1045368232,
+ -1095674537,
+ -1097929857,
+ 1044987789,
+ -1081398055,
+ -1089743965,
+ -1082718815,
+ -1106216100,
+ 1018568174,
+ 1032533064,
+ 1047030259,
+ 1053474064,
+ 1049610784,
+ -1111217164,
+ 1071917028,
+ 1054621682,
+ -1080486458,
+ -1093456954,
+ 1053914687,
+ -1098150523,
+ -1074358300,
+ -1080650700,
+ -1069363581,
+ 1057543099,
+ 1074750051,
+ 1035596862,
+ -1112009779,
+ -1068108041,
+ -1074976964,
+ 1065525997,
+ -1093396330,
+ 1044367899,
+ 1052837725,
+ -1068423432,
+ -1087488799,
+ -1082351233,
+ 1049070926,
+ 1057605971,
+ 1053659890,
+ -1074707364,
+ -1087388062,
+ -1068014618,
+ 1058388602,
+ 1081079877,
+ -1073203117,
+ -1089123775,
+ -1124794486,
+ -1064200616,
+ -1070734102,
+ 1070885752,
+ 1067995850,
+ -1066557720,
+ -1081140961,
+ -1069282785,
+ 1059660883,
+ 1062339603,
+ 1083040460,
+ -1082791321,
+ 1065761784,
+ 1084917805,
+ 1059209352,
+ 1052299314,
+ 1084952638,
+ 1083727058,
+ 1078763549,
+ 1069249344,
+ -1088707476,
+ 1068594726,
+ 1069939833,
+ -1086409900,
+ 1083668175,
+ -1073448804,
+ 1075696199,
+ 1078965640,
+ 1062173766,
+ 1082803907,
+ 1061724466,
+ -1083172242,
+ -1082603936,
+ -1054779878,
+ 1048318180,
+ -1105684136,
+ -1092363827,
+ 1069681851,
+ 1052156668,
+ -1092065332,
+ -1090764505,
+ 1066650086,
+ 1044284979,
+ -1088158456,
+ 1061269921,
+ -1073590453,
+ -1095526150,
+ 1033956425,
+ -1066627898,
+ 1048725647,
+ 1063528705,
+ 1049075300,
+ 1065514019,
+ 1033281335,
+ -1081936635,
+ -1112314130,
+ -1078546221,
+ 1017188917,
+ -1124771562,
+ -1088922486,
+ -1078285777,
+ -1086565098,
+ 1062100356,
+ 1078399172,
+ -1075483588,
+ 1059104091,
+ 1055566490,
+ -1088595464,
+ 1075706661,
+ 1049993066,
+ -1063558069,
+ -1072502093,
+ -1082023132,
+ -1101109062,
+ 1048424897,
+ 1057666054,
+ -1076213197,
+ 1070058111,
+ 1058798611,
+ -1078692479,
+ 1058277474,
+ -1068446722,
+ 1065803164,
+ -1073611262,
+ -1066635266,
+ 1089810215,
+ 1083792591,
+ -1089228967,
+ -1080863518,
+ -1081069307,
+ 1046442563,
+ 1067655058,
+ 1066324452,
+ 1059229432,
+ 1080581783,
+ -1057023586,
+ 1051915121,
+ 1083439939,
+ 1074992287,
+ 1074584231,
+ 1063814866,
+ -1101773258,
+ -1074810438,
+ 1078464460,
+ 1081823360,
+ 1078681668,
+ 1087753182,
+ 1068856610,
+ -1090060331,
+ -1061875731,
+ -1066412403,
+ 1054708923,
+ -1077119313,
+ -1071163115,
+ 1080784726,
+ 1082314332,
+ 1056932121,
+ 1081478608,
+ -1104109143,
+ 1059034643,
+ -1070548382,
+ -1072238869,
+ -1068269717,
+ -1058128973,
+ 1072789329,
+ 1068337351,
+ 1081477237,
+ -1084463572,
+ 1076131295,
+ 1066870170,
+ -1108087519,
+ -1137179995,
+ 1070136128,
+ 1052892083,
+ -1100998351,
+ -1071004109,
+ -1073512909,
+ 1076686610,
+ 1061826290,
+ 1071078017,
+ 1083465602,
+ -1075300331,
+ 1051799339,
+ -1080598073,
+ -1072790398,
+ -1076397806,
+ 1076834981,
+ -1089183270,
+ -1072035690,
+ -1098897013,
+ -1056453742,
+ -1086901791,
+ -1073215421,
+ -1079713303,
+ -1075337537,
+ -1094816787,
+ 1046996205,
+ -1080842951,
+ 1080548919,
+ 1025667110,
+ 1079204826,
+ -1112793427,
+ -1070967002,
+ 1084118587,
+ -1106125534,
+ 1088748632,
+ -1092317501,
+ -1068440416,
+ -1080484450,
+ 1052433575,
+ -1103891258,
+ 1067617693,
+ 1061594554,
+ 1056845516,
+ -1102582873,
+ -1083602663,
+ -1087964720,
+ 1084543262,
+ -1076510881,
+ 1061929624,
+ 1056817428,
+ 1067443582,
+ -1082881120,
+ 1047546839,
+ -1109875683,
+ -1079501993,
+ -1091008731,
+ 1057962271,
+ 1067344279,
+ 1058296432,
+ 1029083250,
+ -1098014777,
+ -1086233502,
+ 1063934951,
+ 1052971900,
+ -1103052850,
+ -1085582711,
+ -1073476394,
+ -1083003831,
+ -1070818016,
+ -1075601617,
+ -1066980479,
+ 1054841441,
+ 1066869278,
+ -1086079479,
+ -1068819329,
+ -1077444711,
+ -1068975668,
+ -1078061318,
+ -1063056311,
+ -1072435864,
+ -1070084637,
+ -1079049694,
+ 1059178170,
+ -1073434804,
+ -1078502073,
+ -1091127870,
+ 1080407732,
+ -1111273103,
+ 1067890739,
+ -1080566634,
+ -1085031134,
+ -1099830358,
+ 1061577480,
+ 1042690771,
+ 1062180518,
+ -1093576256,
+ -1092249443,
+ 1035425711,
+ 1044318386,
+ -1103956172,
+ -1094602779,
+ -1124859494,
+ -1097032344,
+ -1086250489,
+ -1091288320,
+ -1091147097,
+ 1032180194,
+ -1088647791,
+ 1042725179,
+ -1096535439,
+ 1059136654,
+ -1093921602,
+ 1049793104,
+ 1033213170,
+ 1075048650,
+ -1103889832,
+ -1081178084,
+ 1059468656,
+ 1053473204,
+ -1076915111,
+ 1051036950,
+ 1061989459,
+ 1061971852,
+ -1090429111,
+ -1092379984,
+ 1042719802,
+ 1053031050,
+ 1065574490,
+ -1095859977,
+ -1089322682,
+ -1106860033,
+ 1065636512,
+ 1067409312,
+ -1077621035,
+ -1100261388,
+ -1106899214,
+ -1090239919,
+ -1073228216,
+ 1054672433,
+ 1066306007,
+ 1061828666,
+ 1050115107,
+ 1060489966,
+ -1095420532,
+ 1073340396,
+ -1086064468,
+ 1067420498,
+ -1060674048,
+ 1067037472,
+ 1070309058,
+ -1076908494,
+ -1080402486,
+ 1058340329,
+ 1074658445,
+ -1127618244,
+ 1066749748,
+ 1067755519,
+ 1085796422,
+ -1100775352,
+ 1044495437,
+ 1074804225,
+ 1059018973,
+ 1045870811,
+ -1077599314,
+ -1089116025,
+ 1073043230,
+ 1077274672,
+ 1067165815,
+ 1045135743,
+ 1081396235,
+ -1086073459,
+ 1036012062,
+ 1081637935,
+ 1071100959,
+ 1066048504,
+ 1067036146,
+ -1078505413,
+ 1066889484,
+ 1067610275,
+ 1077665300,
+ 1041839278,
+ 1004830330,
+ -1093940783,
+ -1107238856,
+ 1054864217,
+ 1053163268,
+ -1116644549,
+ 1009852662,
+ -1111411717,
+ -1102921210,
+ 1058246075,
+ -1108224913,
+ 1050985119,
+ 1055953407,
+ 1041749651,
+ -1098229438,
+ -1109951639,
+ -1114108507,
+ -1087826343,
+ -1096421497,
+ 1033945805,
+ -1072112382,
+ -1085391347,
+ -1062206119,
+ -1084591932,
+ 1063913405,
+ -1081121919,
+ 1042043293,
+ 1072620404,
+ -1093577766,
+ -1091608752,
+ 1067761395,
+ -1072859916,
+ 1058755137,
+ 1067802772,
+ 1052428272,
+ -1081036407,
+ -1087195449,
+ 1069699067,
+ -1090322053,
+ 1051359711,
+ -1080458464,
+ -1073425946,
+ 1062697919,
+ 1072459691,
+ 1056724330,
+ -1066897733,
+ -1081782855,
+ 1080087939,
+ -1114182903,
+ 1082674247,
+ -1075465016,
+ 1077354752,
+ -1089427855,
+ -1081827396,
+ -1080682816,
+ -1069390202,
+ 1057144529,
+ 1031380090,
+ -1080234080,
+ 1059697069,
+ -1089189976,
+ 1050607492,
+ -1079587699,
+ 1060875282,
+ -1074878570,
+ 1062801997,
+ -1084359469,
+ 1059295453,
+ -1072432788,
+ -1063005751,
+ -1061451051,
+ -1078911240,
+ -1068703212,
+ -1060376152,
+ 1067858492,
+ -1072024741,
+ -1110924126,
+ -1070095664,
+ -1073592863,
+ -1061388671,
+ -1088372564,
+ -1068021535,
+ -1065096758,
+ -1071186190,
+ -1069495840,
+ -1066246552,
+ -1082705540,
+ -1061141228,
+ -1068398823,
+ -1066743868,
+ 999217995,
+ 1050324767,
+ 1047245033,
+ -1068767313,
+ -1101585850,
+ -1083582976,
+ 1042821406,
+ 1058713493,
+ -1079723201,
+ -1081139849,
+ -1094401551,
+ -1107871677,
+ 1047142414,
+ 1041836213,
+ 1012012876,
+ -1096777173,
+ 1051327683,
+ 1055227570,
+ 1056644981,
+ -1081384966,
+ 1054890533,
+ 1062126424,
+ 1066733962,
+ -1081288767,
+ -1081626521,
+ 1063167998,
+ 1082095698,
+ -1093035527,
+ -1079307149,
+ -1095711242,
+ -1105104324,
+ 1057799343,
+ -1074310861,
+ -1118860163,
+ 1039868549,
+ 1049284167,
+ 1062391177,
+ 1057463755,
+ -1080348778,
+ -1122421936,
+ -1081753434,
+ 1038025752,
+ -1061138936,
+ -1110595516,
+ 1036124758,
+ -1080166174,
+ -1069991310,
+ -1077962771,
+ -1078156620,
+ 1069846690,
+ 1047969739,
+ 1075164391,
+ -1078396233,
+ -1076946736,
+ 1074143463,
+ -1078317293,
+ -1079108858,
+ 1073743165,
+ 1067244749,
+ 1048664359,
+ 1048064502,
+ 1049034289,
+ -1093993650,
+ 1020441067,
+ 1068566537,
+ -1091754605,
+ -1098308074,
+ 1015955247,
+ 1068175418,
+ -1090540422,
+ -1090921276,
+ 1063188157,
+ 1064580661,
+ -1112697542,
+ -1085834468,
+ -1103514528,
+ -1099830831,
+ -1089979188,
+ 1074082548,
+ -1076818607,
+ 1065931668,
+ 1066158869,
+ -1070083898,
+ 1051476951,
+ -1079553085,
+ 1067915041,
+ -1079205752,
+ -1091920938,
+ -1094030646,
+ 1041581986,
+ 1057532067,
+ 1052204054,
+ -1078134888,
+ 1057862060,
+ -1088487513,
+ -1105210726,
+ -1112324608,
+ -1109200617,
+ 1070380002,
+ 1051611107,
+ -1079387664,
+ -1114984263,
+ 1057760745,
+ 1071957679,
+ -1086033301,
+ -1085955171,
+ 1054467848,
+ -1085837881,
+ -1082101699,
+ 1057458150,
+ 1042091852,
+ 1069176752,
+ -1131220618,
+ -1073714758,
+ 1065026950,
+ 1054024331,
+ 1053105769,
+ -1099378581,
+ 1051857805,
+ 1065408134,
+ -1092706149,
+ -1088985551,
+ 1067790963,
+ 1077522059,
+ -1075047178,
+ -1077599332,
+ 1079398255,
+ -1096876424,
+ -1083688823,
+ 1057760757,
+ -1097660978,
+ -1087991444,
+ 1057323560,
+ 1059214426,
+ -1078412002,
+ -1072244339,
+ 1068130231,
+ 1071918344,
+ -1070869439,
+ -1076624416,
+ -1066022268,
+ 1071483639,
+ 1073938797,
+ 1070254617,
+ 1069999860,
+ -1079051242,
+ -1084058149,
+ 1060669959,
+ -1112409711,
+ -1111211938,
+ -1098304048,
+ 1034278688,
+ 1065410503,
+ -1095068695,
+ 1044038325,
+ -1078995233,
+ -1079389371,
+ 1068527901,
+ 1070494933,
+ -1106171611,
+ -1078627430,
+ 1043480926,
+ 1051528366,
+ -1108191550,
+ -1086988631,
+ -1104546881,
+ -1106177859,
+ 1061893688,
+ -1084700299,
+ -1084756263,
+ 1074254432,
+ -1078186805,
+ -1080450838,
+ 1069639067,
+ 1060414701,
+ -1079325337,
+ -1079519497,
+ 1065992067,
+ 1068640544,
+ 1034333291,
+ -1080099443,
+ 1049420980,
+ 1061355664,
+ 1049184678,
+ -1123350493,
+ -1099103710,
+ -1099241729,
+ 1068048639,
+ -1087477009,
+ -1088441272,
+ -1086607109,
+ 1063388094,
+ 1028838776,
+ -1093417677,
+ -1093934346,
+ -1069687329,
+ 1055507654,
+ 1057789100,
+ 1057425444,
+ 1070079942,
+ 1058507405,
+ -1083036611,
+ -1102228439,
+ 1073070292,
+ 1071079713,
+ -1077968439,
+ -1081687554,
+ -1076543691,
+ 1066427358,
+ 1065627262,
+ -1070849274,
+ 1075689343,
+ -1088159663,
+ 1044078694,
+ 1039395237,
+ 1073621144,
+ 1075186590,
+ -1073497655,
+ -1074230910,
+ 1049282544,
+ -1089848391,
+ 1037250970,
+ -1096583802,
+ 1062545242,
+ -1087261948,
+ 1050058029,
+ 1053920031,
+ -1076641422,
+ -1077861200,
+ 1061274763,
+ 1077370156,
+ 1063023364,
+ -1112771689,
+ 1050995926,
+ -1089937807,
+ }
+}
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/Thai_graphclust_model4_heavy_Test.txt b/Build/source/libs/icu/icu-src/source/test/testdata/Thai_graphclust_model4_heavy_Test.txt
new file mode 100644
index 00000000000..e8fc2c0423a
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/Thai_graphclust_model4_heavy_Test.txt
@@ -0,0 +1,96 @@
+# Copyright (C) 2018 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+Model: Thai_graphclust_model4_heavy
+Embedding: grapheme_clusters_tf
+Input: ปฏิญญาสากลว่าด้วยสิทธิมนุษยชน
+Output: |ปฏิญญา|สากลว่า|ด้วย|สิทธิ|มนุ|ษย|ชน|
+Input: คำปรารภ
+Output: คำปราร|ภ|
+Input: โดยที่การยอมรับนับถือเกียรติศักดิ์ประจำตัว
+Output: |โดย|ที่|การ|ยอม|รับ|นับถือเกียรติ|ศักดิ์|ประจำ|ตัว|
+Input: และสิทธิเท่าเทียมกันและโอนมิได้ของบรรดา
+Output: |และ|สิทธิ|เท่า|เทีย|มกัน|และ|โอน|มิได้|ของ|บรรดา|
+Input: สมาชิก
+Output: |สมาชิก|
+Input: ทั้ง
+Output: ทั้ง|
+Input: หลายแห่งครอบครัว
+Output: |หลาย|แห่ง|ครอบ|ครัว|
+Input: มนุษย์เป็นหลักมูลเหตุแห่งอิสรภาพ
+Output: ม|นุ|ษย์|เป็น|หลักมูล|เหตุแห่งอิ|สรภาพ|
+Input: ความยุติธรรม
+Output: |ความ|ยุติธรรม|
+Input: และสันติภาพในโลก
+Output: |และ|สันติภาพ|ใน|โลก|
+Input: โดยที่การไม่นำพาและการเหยียดหยามต่อสิทธิมนุษยชน
+Output: |โดย|ที่|การ|ไม่|นำ|พา|และ|การ|เหยียด|หยาม|ต่อ|สิทธิ|มนุ|ษย|ชน|
+Input: ยังผลให้มีการหระทำอันป่าเถื่อน
+Output: |ยังผล|ให้|มี|การ|หระทำ|อัน|ป่า|เถื่อน|
+Input: ซี่งเป็นการละเมิดมโนธรรมของมนุษยชาติอย่างร้ายแรง
+Output: |ซี่ง|เป็น|การ|ละเมิดม|โนธรรม|ของ|มนุษย|ชาติ|อย่าง|ร้าย|แรง|
+Input: และใต้
+Output: |และ|ใต้|
+Input: ได้
+Output: |ได้|
+Input: มีการประกาศว่า
+Output: |มี|การ|ประกาศ|ว่า|
+Input: ปณิธานสูงสุดของสามัญชนได้แก่ความต้องการให้มนุษย์มีชีวิตอยู่ในโลกด้วยอิสรภาพในการพูด
+Output: |ปณิธา|นสูงสุด|ของ|สามัญชน|ได้|แก่|ความ|ต้อง|การ|ให้|ม|นุษย์|มี|ชีวิต|อยู่|ใน|โลก|ด้วยอิ|สรภาพ|ใน|การ|พูด|
+Input: และความเชื่อถือ
+Output: |และ|ความ|เชื่อถือ|
+Input: และอิสรภาพพ้นจากความหวาดกลัวและความต้องการ
+Output: และอิ|สรภาพพ้น|จาก|ความ|หวาดกลัว|และ|ความ|ต้องการ|
+Input: โดยที่เป็นการจำเป็นอย่างยิ่งที่สิทธิมนุษยชนควรได้รับความคุ้มครองโดยหลักบังคับของกฎหมาย
+Output: |โดย|ที่|เป็น|การ|จำเป็น|อย่าง|ยิ่งที่|สิทธิม|นุ|ษย|ชน|ควร|ได้|รับ|ความ|คุ้มครอง|โดย|หลักบัง|คับ|ของ|กฎหมา|ย|
+Input: ถ้าไม่ประสงค์จะให้คนตกอยู่ในบังคับให้หันเข้าหาการขบถขัดขืนต่อทรราชและการกดขี่เป็นวิถีทางสุดท้าย
+Output: |ถ้า|ไม่|ประสงค์|จะ|ให้|คน|ตก|อยู่|ใน|บังคับ|ให้|หั|นเข้า|หา|การ|ขบ|ถขัด|ขืน|ต่อ|ทรราช|และ|การ|กดขี่|เป็น|วิ|ถี|ทาง|สุดท้าย|
+Input: โดยที่ประชากรแห่งสหประชาชาติได้ยืนยันไว้ในกฎบัตรถึงความเชื่อมั่นในสิทธิมนุษยชนอันเป็นหลักมูล
+Output: |โดย|ที่|ประชากร|แห่ง|สหประชาชาติ|ได้|ยืนยัน|ไว้|ใน|กฎบัตร|ถึง|ความ|เชื่อมั่น|ใน|สิทธิ|มนุ|ษย|ชน|อัน|เป็น|หลักมูล|
+Input: ในเกียรติศักดิ์และคุณค่าของมนุษย์และในสิทธิเท่าเทียมกันของบรรดาชายและหญิง
+Output: |ใน|เกียรติ|ศักดิ์|และ|คุณค่า|ของ|มนุษย์|และ|ใน|สิทธิ|เท่า|เทีย|มกัน|ของ|บรรดา|ชาย|และ|หญิง|
+Input: และได้ตกลงใจที่จะส่งเสริมความก้าวหน้าทางสังคม
+Output: |และ|ได้|ตกลงใจ|ที่|จะ|ส่ง|เสริม|ความ|ก้าว|หน้าทาง|สังคม|
+Input: และมาตรฐานแห่งชีวิตที่ดีขึ้นด้วยในอิสรภาพ
+Output: |และ|มาตรฐาน|แห่งชีวิต|ที่|ดี|ขึ้น|ด้วย|ในอิ|สรภาพ|
+Input: อันกว้างขวางยิ่งขึ้น
+Output: |อัน|กว้าง|ขวาง|ยิ่ง|ขึ้น|
+Input: โดยที่รัฐสมาชิกต่างปฎิญาณจะให้บรรลุถึงซึ่งการส่งเสริมการเคารพและการปฎิบัติตามทั่วสากลต่อสิทธิมนุษยชนและอิสรภาพหลักมูล
+Output: |โดย|ที่|รัฐส|มา|ชิก|ต่าง|ปฎิญาณ|จะ|ให้|บรรลุ|ถึง|ซึ่ง|การ|ส่ง|เสริม|การ|เคา|รพ|และ|การ|ปฎิบัติ|ตา|มทั่วสาก|ล|ต่อ|สิทธิม|นุ|ษย|ชนและอิ|สรภาพ|หลักมูล|
+Input: โดยร่วมมือกับสหประชาชาติ
+Output: |โดย|ร่วมมือ|กับ|สหประชาชาติ|
+Input: โดยที่ความเข้าใจร่วมกันในสิทธิ
+Output: |โดย|ที่|ความ|เข้าใจ|ร่วม|กัน|ใน|สิทธิ|
+Input: และอิสรภาพเหล่านี้เป็นสิ่งสำคัญอย่างยิ่ง
+Output: และอิ|สรภาพ|เหล่า|นี้|เป็น|สิ่ง|สำคัญ|อย่าง|ยิ่ง|
+Input: เพื่อให้ปฏิญาณนี้สำเร็จผลเต็มบริบูรณ์
+Output: |เพื่อ|ให้|ปฏิญาณ|นี้|สำเร็จผล|เต็ม|บริบูรณ์|
+Input: ฉะนั้น
+Output: ฉะนั้น|
+Input: บัดนี้สมัชชาจึงประกาศว่า
+Output: |บัด|นี้|สมัชชา|จึง|ประกาศ|ว่า|
+Input: ปฏิญญาสากลว่าด้วยสิทธิมนุษยชนนี้
+Output: |ปฏิญญา|สากลว่า|ด้วย|สิทธิ|มนุ|ษย|ชน|นี้|
+Input: เป็นมาตรฐานร่วมกันแห่งความสำเร็จสำหรับบรรดาประชากรและประชาชาติทั้งหลาย
+Output: |เป็น|มาตรฐาน|ร่วม|กัน|แห่ง|ความ|สำเร็จ|สำหรับ|บรรดา|ประชากร|และ|ประชาชาติ|ทั้งหลา|ย|
+Input: เพื่อจุดหมายปลายทางที่ว่า
+Output: |เพื่อจุดหมาย|ปลาย|ทาง|ที่|ว่า|
+Input: เอกชนทุกคนและองค์การชองสังคมทุกองค์การ
+Output: |เอกชน|ทุก|คน|และ|องค์การ|ชอง|สังคม|ทุกองค์การ|
+Input: โดยการรำลึกถึงปฏิญญานี้เป็นเนืองนิจ
+Output: |โดย|การ|รำลึก|ถึง|ปฏิญญานี้|เป็น|เนือง|นิ|จ|
+Input: จะบากบั่นพยายามด้วยการสอนและศึกษา
+Output: |จะ|บาก|บั่น|พยายาม|ด้วย|การ|สอน|และ|ศึก|ษา|
+Input: ในอันที่จะส่งเสริมการเคารพสิทธิและอิสรภาพเหล่านี้
+Output: |ใน|อัน|ที่|จะ|ส่ง|เสริม|การ|เคารพ|สิทธิ|และอิ|สรภาพ|เหล่า|นี้|
+Input: และด้วยมาตรการอันก้าวหน้าทั้งในประเทศและระหว่างประเทศ
+Output: |และ|ด้วย|มาตรการ|อัน|ก้าว|หน้าทั้ง|ใน|ประเทศ|และ|ระหว่าง|ประเทศ|
+Input: ในอันที่จะให้มีการยอมรับนับถือ
+Output: |ใน|อัน|ที่|จะ|ให้|มี|การ|ยอม|รับ|นับถือ|
+Input: และการปฏิบัติตามโดยสากลและอย่างเป็นผลจริงจัง
+Output: |และ|การ|ปฏิบัติตาม|โดย|สากล|และ|อย่าง|เป็นผล|จริง|จัง|
+Input: ทั้งในบรรดาประชาชนของรัฐสมาชิกด้วยกันเอง
+Output: ทั้ง|ใน|บรรดา|ประชาชน|ของ|รัฐส|มาชิก|ด้วย|กัน|เอง|
+Input: และในบรรดาประชาชนของดินแดนที่อยู่ใตัอำนาจของรัฐนั้น
+Output: |และ|ใน|บรรดา|ประชาชน|ของ|ดินแดน|ที่|อยู่|ใตัอำนาจ|ของ|รัฐนั้น|
+Input: ๆ
+Output: |ๆ|
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
index 3e85759b85a..1d1435bfc76 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
@@ -1,6 +1,6 @@
-# WordBreakTest-13.0.0.txt
-# Date: 2019-11-20, 22:27:23 GMT
-# © 2019 Unicode®, Inc.
+# WordBreakTest-14.0.0.txt
+# Date: 2021-03-08, 06:22:40 GMT
+# © 2021 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/grapheme.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/grapheme.txt
index c57a898fbf6..d5776f33c20 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/grapheme.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/grapheme.txt
@@ -33,7 +33,7 @@ T = [\p{Grapheme_Cluster_Break = T}];
LV = [\p{Grapheme_Cluster_Break = LV}];
LVT = [\p{Grapheme_Cluster_Break = LVT}];
-# Emoji defintions
+# Emoji definitions
Extended_Pict = [:ExtPict:];
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
index 10513005486..409f223ed6f 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
@@ -6,7 +6,7 @@
# file: line.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0,
+# Rules derived from Unicode Standard Annex #14 for Unicode 14.0,
# with the following modification:
#
# Boundaries between hyphens and following letters are suppressed when
@@ -75,6 +75,9 @@ ZWJ = [:LineBreak = ZWJ:];
OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+# The redundant-looking inner brackets are required for the current parser in the test code.
+ExtPictUnassigned = [[\p{Extended_Pictographic}]&[\p{Cn}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -195,9 +198,8 @@ LB26.1: JL CM* (JL | JV | H2 | H3);
LB26.2: (JV | H2) CM* (JV | JT);
LB26.3: (JT | H3) CM* JT;
-LB27.1: (JL | JV | JT | H2 | H3) CM* IN;
-LB27.2: (JL | JV | JT | H2 | H3) CM* PO;
-LB27.3: PR CM* (JL | JV | JT | H2 | H3);
+LB27.1: (JL | JV | JT | H2 | H3) CM* PO;
+LB27.2: PR CM* (JL | JV | JT | H2 | H3);
# LB28 Do not break between Alphabetics.
# Unattached (leading) CM treated as AL.
@@ -214,8 +216,9 @@ LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA
LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
-# LB30b Do not break between Emoji Base and Emoji Modifier
-LB30b: EB CM* EM;
+# LB30b Do not break between Emoji Base (or potential emoji) and Emoji Modifier
+LB30b.1: EB CM* EM;
+LB30b.2: ExtPictUnassigned CM* EM;
# LB31 Break Everywhere Else.
# Include combining marks
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt
index a4a541a7d69..e66b0d134ad 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_cj.txt
@@ -6,7 +6,7 @@
# file: line.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
+# Rules derived from Unicode Standard Annex #14 for Unicode 14.0.
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
@@ -75,6 +75,9 @@ CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+# The redundant-looking inner brackets are required for the current parser in the test code.
+ExtPictUnassigned = [[\p{Extended_Pictographic}]&[\p{Cn}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -195,9 +198,8 @@ LB26.1: JL CM* (JL | JV | H2 | H3);
LB26.2: (JV | H2) CM* (JV | JT);
LB26.3: (JT | H3) CM* JT;
-LB27.1: (JL | JV | JT | H2 | H3) CM* IN;
-LB27.2: (JL | JV | JT | H2 | H3) CM* PO;
-LB27.3: PR CM* (JL | JV | JT | H2 | H3);
+LB27.1: (JL | JV | JT | H2 | H3) CM* PO;
+LB27.2: PR CM* (JL | JV | JT | H2 | H3);
# LB28 Do not break between Alphabetics.
# Unattached (leading) CM treated as AL.
@@ -214,8 +216,9 @@ LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA
LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
-# LB30b Do not break between Emoji Base and Emoji Modifier
-LB30b: EB CM* EM;
+# LB30b Do not break between Emoji Base (or potential emoji) and Emoji Modifier
+LB30b.1: EB CM* EM;
+LB30b.2: ExtPictUnassigned CM* EM;
# LB31 Break Everywhere Else.
# Include combining marks
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
index 904b9d13dfd..54873a48969 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
@@ -6,7 +6,7 @@
# file: line_loose.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
+# Rules derived from Unicode Standard Annex #14 for Unicode 14.0.
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
@@ -76,6 +76,9 @@ ZWJ = [:LineBreak = ZWJ:];
OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+# The redundant-looking inner brackets are required for the current parser in the test code.
+ExtPictUnassigned = [[\p{Extended_Pictographic}]&[\p{Cn}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -197,9 +200,8 @@ LB26.1: JL CM* (JL | JV | H2 | H3);
LB26.2: (JV | H2) CM* (JV | JT);
LB26.3: (JT | H3) CM* JT;
-LB27.1: (JL | JV | JT | H2 | H3) CM* IN;
-LB27.2: (JL | JV | JT | H2 | H3) CM* PO;
-LB27.3: PR CM* (JL | JV | JT | H2 | H3);
+LB27.1: (JL | JV | JT | H2 | H3) CM* PO;
+LB27.2: PR CM* (JL | JV | JT | H2 | H3);
# LB28 Do not break between Alphabetics.
# Unattached (leading) CM treated as AL.
@@ -216,8 +218,9 @@ LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA
LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
-# LB30b Do not break between Emoji Base and Emoji Modifier
-LB30b: EB CM* EM;
+# LB30b Do not break between Emoji Base (or potential emoji) and Emoji Modifier
+LB30b.1: EB CM* EM;
+LB30b.2: ExtPictUnassigned CM* EM;
# LB31 Break Everywhere Else.
# Include combining marks
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
index 8ad6a62d790..d0693d567cd 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
@@ -6,7 +6,7 @@
# file: line_loose_cj.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
+# Rules derived from Unicode Standard Annex #14 for Unicode 14.0.
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
@@ -93,6 +93,9 @@ ZWJ = [:LineBreak = ZWJ:];
OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+# The redundant-looking inner brackets are required for the current parser in the test code.
+ExtPictUnassigned = [[\p{Extended_Pictographic}]&[\p{Cn}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -219,9 +222,8 @@ LB26.1: JL CM* (JL | JV | H2 | H3);
LB26.2: (JV | H2) CM* (JV | JT);
LB26.3: (JT | H3) CM* JT;
-LB27.1: (JL | JV | JT | H2 | H3) CM* IN;
-LB27.2: (JL | JV | JT | H2 | H3) CM* PO;
-LB27.3: PR CM* (JL | JV | JT | H2 | H3);
+LB27.1: (JL | JV | JT | H2 | H3) CM* PO;
+LB27.2: PR CM* (JL | JV | JT | H2 | H3);
# LB28 Do not break between Alphabetics.
# Unattached (leading) CM treated as AL.
@@ -238,8 +240,9 @@ LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA
LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
-# LB30b Do not break between Emoji Base and Emoji Modifier
-LB30b: EB CM* EM;
+# LB30b Do not break between Emoji Base (or potential emoji) and Emoji Modifier
+LB30b.1: EB CM* EM;
+LB30b.2: ExtPictUnassigned CM* EM;
# LB31 Break Everywhere Else.
# Include combining marks
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
index db7ba4209a5..c718cc2f44c 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
@@ -6,7 +6,7 @@
# file: line_normal.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
+# Rules derived from Unicode Standard Annex #14 for Unicode 14.0.
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
@@ -77,6 +77,9 @@ ZWJ = [:LineBreak = ZWJ:];
OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+# The redundant-looking inner brackets are required for the current parser in the test code.
+ExtPictUnassigned = [[\p{Extended_Pictographic}]&[\p{Cn}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -197,9 +200,8 @@ LB26.1: JL CM* (JL | JV | H2 | H3);
LB26.2: (JV | H2) CM* (JV | JT);
LB26.3: (JT | H3) CM* JT;
-LB27.1: (JL | JV | JT | H2 | H3) CM* IN;
-LB27.2: (JL | JV | JT | H2 | H3) CM* PO;
-LB27.3: PR CM* (JL | JV | JT | H2 | H3);
+LB27.1: (JL | JV | JT | H2 | H3) CM* PO;
+LB27.2: PR CM* (JL | JV | JT | H2 | H3);
# LB28 Do not break between Alphabetics.
# Unattached (leading) CM treated as AL.
@@ -216,8 +218,9 @@ LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA
LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
-# LB30b Do not break between Emoji Base and Emoji Modifier
-LB30b: EB CM* EM;
+# LB30b Do not break between Emoji Base (or potential emoji) and Emoji Modifier
+LB30b.1: EB CM* EM;
+LB30b.2: ExtPictUnassigned CM* EM;
# LB31 Break Everywhere Else.
# Include combining marks
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
index 2c47c7fcba8..a2704821441 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
@@ -6,7 +6,7 @@
# file: line_normal_cj.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest.
-# Rules derived from Unicode Standard Annex #14 Revision 44 for Unicode 13.0
+# Rules derived from Unicode Standard Annex #14 for Unicode 14.0.
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
# They are expected to change with review and the addition of support for rule tailoring.
@@ -80,6 +80,9 @@ ZWJ = [:LineBreak = ZWJ:];
OP30 = [OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
CP30 = [CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
+# The redundant-looking inner brackets are required for the current parser in the test code.
+ExtPictUnassigned = [[\p{Extended_Pictographic}]&[\p{Cn}]];
+
# LB1 - Resolve AI, CB, CJ, SA, SG, and XX into other line breaking classes
AL = [AL AI SG XX ];
dictionary = SA;
@@ -205,9 +208,8 @@ LB26.1: JL CM* (JL | JV | H2 | H3);
LB26.2: (JV | H2) CM* (JV | JT);
LB26.3: (JT | H3) CM* JT;
-LB27.1: (JL | JV | JT | H2 | H3) CM* IN;
-LB27.2: (JL | JV | JT | H2 | H3) CM* PO;
-LB27.3: PR CM* (JL | JV | JT | H2 | H3);
+LB27.1: (JL | JV | JT | H2 | H3) CM* PO;
+LB27.2: PR CM* (JL | JV | JT | H2 | H3);
# LB28 Do not break between Alphabetics.
# Unattached (leading) CM treated as AL.
@@ -224,8 +226,9 @@ LB30a.1: RI CM* RI ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA
LB30a.2: RI CM* RI CM* CMS ÷ [^BK CR LF NL SP ZW WJ CL CP EX IS SY GL QU BA HY NS IN CM];
LB30a.3: RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS IN ZWJ]?;
-# LB30b Do not break between Emoji Base and Emoji Modifier
-LB30b: EB CM* EM;
+# LB30b Do not break between Emoji Base (or potential emoji) and Emoji Modifier
+LB30b.1: EB CM* EM;
+LB30b.2: ExtPictUnassigned CM* EM;
# LB31 Break Everywhere Else.
# Include combining marks
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt
index b0dabe0539f..f1e711e4219 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitPreferencesTest.txt
@@ -1,5 +1,5 @@
# Test data for unit preferences
-# Copyright © 1991-2020 Unicode, Inc.
+# Copyright © 1991-2021 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
@@ -15,7 +15,7 @@
# The Output amount and Unit are repeated for mixed units. In such a case, only the smallest unit will have
# both a rational and decimal amount; the others will have a single integer value, such as:
# length; person-height; CA; 3429 / 12500; 0.27432; meter; 2; foot; 54 / 5; 10.8; inch
-# The input and output units are unit identifers; in particular, the output does not have further processing:
+# The input and output units are unit identifiers; in particular, the output does not have further processing:
# • no localization
# • no adjustment for pluralization
# • no formatted with the skeleton
@@ -63,6 +63,10 @@ concentration; blood-glucose; AG; 662435483600000000000000; 6.624354836E23; item
concentration; blood-glucose; AG; 602214076000000000000000; 6.02214076E23; item-per-cubic-meter; 1; 1.0; millimole-per-liter
concentration; blood-glucose; AG; 541992668400000000000000; 5.419926684E23; item-per-cubic-meter; 9 / 10; 0.9; millimole-per-liter
+concentration; blood-glucose; 001; 66243548360000000000000000000 / 1801557; 3.67701651182838E22; item-per-cubic-meter; 11 / 10; 1.1; milligram-ofglucose-per-deciliter
+concentration; blood-glucose; 001; 60221407600000000000000000000 / 1801557; 3.342742283480345E22; item-per-cubic-meter; 1; 1.0; milligram-ofglucose-per-deciliter
+concentration; blood-glucose; 001; 6022140760000000000000000000 / 200173; 3.008468055132311E22; item-per-cubic-meter; 9 / 10; 0.9; milligram-ofglucose-per-deciliter
+
concentration; default; 001; 11 / 10; 1.1; item-per-cubic-meter; 11 / 10; 1.1; item-per-cubic-meter
concentration; default; 001; 1; 1.0; item-per-cubic-meter; 1; 1.0; item-per-cubic-meter
concentration; default; 001; 9 / 10; 0.9; item-per-cubic-meter; 9 / 10; 0.9; item-per-cubic-meter
@@ -79,21 +83,13 @@ consumption; vehicle-fuel; BR; 11 / 10000000; 1.1E-6; cubic-meter-per-meter; 11
consumption; vehicle-fuel; BR; 1 / 1000000; 1.0E-6; cubic-meter-per-meter; 1; 1.0; liter-per-kilometer
consumption; vehicle-fuel; BR; 9 / 10000000; 9.0E-7; cubic-meter-per-meter; 9 / 10; 0.9; liter-per-kilometer
-consumption-inverse; default; 001; 110000000; 1.1E8; meter-per-cubic-meter; 11 / 10; 1.1; kilometer-per-centiliter
-consumption-inverse; default; 001; 100000000; 1.0E8; meter-per-cubic-meter; 1; 1.0; kilometer-per-centiliter
-consumption-inverse; default; 001; 90000000; 9.0E7; meter-per-cubic-meter; 9 / 10; 0.9; kilometer-per-centiliter
-
-consumption-inverse; vehicle-fuel; 001; 110000000; 1.1E8; meter-per-cubic-meter; 11 / 10; 1.1; kilometer-per-centiliter
-consumption-inverse; vehicle-fuel; 001; 100000000; 1.0E8; meter-per-cubic-meter; 1; 1.0; kilometer-per-centiliter
-consumption-inverse; vehicle-fuel; 001; 90000000; 9.0E7; meter-per-cubic-meter; 9 / 10; 0.9; kilometer-per-centiliter
+consumption; vehicle-fuel; US; 112903 / 52800000000; 2.1383143939394E-6; cubic-meter-per-meter; 11 / 10; 1.1; mile-per-gallon
+consumption; vehicle-fuel; US; 112903 / 48000000000; 2.3521458333333E-6; cubic-meter-per-meter; 1; 1.0; mile-per-gallon
+consumption; vehicle-fuel; US; 112903 / 43200000000; 2.6134953703704E-6; cubic-meter-per-meter; 9 / 10; 0.9; mile-per-gallon
-consumption-inverse; vehicle-fuel; US; 52800000000 / 112903; 467658.0781732992; meter-per-cubic-meter; 11 / 10; 1.1; mile-per-gallon
-consumption-inverse; vehicle-fuel; US; 48000000000 / 112903; 425143.707430272; meter-per-cubic-meter; 1; 1.0; mile-per-gallon
-consumption-inverse; vehicle-fuel; US; 43200000000 / 112903; 382629.3366872448; meter-per-cubic-meter; 9 / 10; 0.9; mile-per-gallon
-
-consumption-inverse; vehicle-fuel; CA; 177027840000 / 454609; 389406.8089281118; meter-per-cubic-meter; 11 / 10; 1.1; mile-per-gallon-imperial
-consumption-inverse; vehicle-fuel; CA; 160934400000 / 454609; 354006.1899346471; meter-per-cubic-meter; 1; 1.0; mile-per-gallon-imperial
-consumption-inverse; vehicle-fuel; CA; 144840960000 / 454609; 318605.5709411824; meter-per-cubic-meter; 9 / 10; 0.9; mile-per-gallon-imperial
+consumption; vehicle-fuel; CA; 454609 / 177027840000; 2.5680085121075E-6; cubic-meter-per-meter; 11 / 10; 1.1; mile-per-gallon-imperial
+consumption; vehicle-fuel; CA; 454609 / 160934400000; 2.8248093633182E-6; cubic-meter-per-meter; 1; 1.0; mile-per-gallon-imperial
+consumption; vehicle-fuel; CA; 454609 / 144840960000; 3.1386770703536E-6; cubic-meter-per-meter; 9 / 10; 0.9; mile-per-gallon-imperial
duration; default; 001; 95040; 95040.0; second; 11 / 10; 1.1; day
duration; default; 001; 86400; 86400.0; second; 1; 1.0; day
@@ -188,6 +184,8 @@ length; road; 001; 900; 900.0; meter; 9 / 10; 0.9; kilometer
length; road; 001; 800; 800.0; meter; 800; 800.0; meter
length; road; 001; 300; 300.0; meter; 300; 300.0; meter
length; road; 001; 2999 / 10; 299.9; meter; 2999 / 10; 299.9; meter
+length; road; 001; 10; 10.0; meter; 10; 10.0; meter
+length; road; 001; 99 / 10; 9.9; meter; 99 / 10; 9.9; meter
length; road; 001; 1; 1.0; meter; 1; 1.0; meter
length; road; 001; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
@@ -196,6 +194,8 @@ length; road; US; 100584 / 125; 804.672; meter; 1 / 2; 0.5; mile
length; road; US; 402336 / 625; 643.7376; meter; 2112; 2112.0; foot
length; road; US; 762 / 25; 30.48; meter; 100; 100.0; foot
length; road; US; 380619 / 12500; 30.44952; meter; 999 / 10; 99.9; foot
+length; road; US; 381 / 125; 3.048; meter; 10; 10.0; foot
+length; road; US; 37719 / 12500; 3.01752; meter; 99 / 10; 9.9; foot
length; road; US; 381 / 1250; 0.3048; meter; 1; 1.0; foot
length; road; US; 3429 / 12500; 0.27432; meter; 9 / 10; 0.9; foot
@@ -204,6 +204,8 @@ length; road; GB; 100584 / 125; 804.672; meter; 1 / 2; 0.5; mile
length; road; GB; 402336 / 625; 643.7376; meter; 704; 704.0; yard
length; road; GB; 2286 / 25; 91.44; meter; 100; 100.0; yard
length; road; GB; 1141857 / 12500; 91.34856; meter; 999 / 10; 99.9; yard
+length; road; GB; 1143 / 125; 9.144; meter; 10; 10.0; yard
+length; road; GB; 113157 / 12500; 9.05256; meter; 99 / 10; 9.9; yard
length; road; GB; 1143 / 1250; 0.9144; meter; 1; 1.0; yard
length; road; GB; 10287 / 12500; 0.82296; meter; 9 / 10; 0.9; yard
@@ -214,6 +216,8 @@ length; road; SE; 1000; 1000.0; meter; 1; 1.0; kilometer
length; road; SE; 900; 900.0; meter; 900; 900.0; meter
length; road; SE; 300; 300.0; meter; 300; 300.0; meter
length; road; SE; 2999 / 10; 299.9; meter; 2999 / 10; 299.9; meter
+length; road; SE; 10; 10.0; meter; 10; 10.0; meter
+length; road; SE; 99 / 10; 9.9; meter; 99 / 10; 9.9; meter
length; road; SE; 1; 1.0; meter; 1; 1.0; meter
length; road; SE; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
@@ -233,9 +237,9 @@ length; vehicle; 001; 11 / 10; 1.1; meter; 11 / 10; 1.1; meter
length; vehicle; 001; 1; 1.0; meter; 1; 1.0; meter
length; vehicle; 001; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
-length; vehicle; MX; 11 / 10; 1.1; meter; 1; meter; 10; 10.0; centimeter
-length; vehicle; MX; 1; 1.0; meter; 1; meter; 0; 0.0; centimeter
-length; vehicle; MX; 9 / 10; 0.9; meter; 0; meter; 90; 90.0; centimeter
+length; vehicle; MX; 11 / 10; 1.1; meter; 11 / 10; 1.1; meter
+length; vehicle; MX; 1; 1.0; meter; 1; 1.0; meter
+length; vehicle; MX; 9 / 10; 0.9; meter; 9 / 10; 0.9; meter
length; visiblty; 001; 200; 200.0; meter; 1 / 5; 0.2; kilometer
length; visiblty; 001; 100; 100.0; meter; 1 / 10; 0.1; kilometer
@@ -279,9 +283,9 @@ mass; person; 001; 9 / 10; 0.9; kilogram; 900; 900.0; gram
mass; person; 001; 1 / 1000; 0.001; kilogram; 1; 1.0; gram
mass; person; 001; 9 / 10000; 9.0E-4; kilogram; 9 / 10; 0.9; gram
-mass; person; DZ; 11 / 10; 1.1; kilogram; 1; kilogram; 100; 100.0; gram
-mass; person; DZ; 1; 1.0; kilogram; 1; kilogram; 0; 0.0; gram
-mass; person; DZ; 9 / 10; 0.9; kilogram; 0; kilogram; 900; 900.0; gram
+mass; person; DZ; 11 / 10; 1.1; kilogram; 11 / 10; 1.1; kilogram
+mass; person; DZ; 1; 1.0; kilogram; 1; 1.0; kilogram
+mass; person; DZ; 9 / 10; 0.9; kilogram; 900; 900.0; gram
mass; person; US; 498951607 / 1000000000; 0.498951607; kilogram; 11 / 10; 1.1; pound
mass; person; US; 45359237 / 100000000; 0.45359237; kilogram; 1; 1.0; pound
@@ -297,10 +301,6 @@ mass; person; HK; 498951607 / 1000000000; 0.498951607; kilogram; 1; pound; 8 / 5
mass; person; HK; 45359237 / 100000000; 0.45359237; kilogram; 1; pound; 0; 0.0; ounce
mass; person; HK; 408233133 / 1000000000; 0.408233133; kilogram; 0; pound; 72 / 5; 14.4; ounce
-mass-density; blood-glucose; 001; 11 / 1000; 0.011; kilogram-per-cubic-meter; 11 / 10; 1.1; milligram-per-deciliter
-mass-density; blood-glucose; 001; 1 / 100; 0.01; kilogram-per-cubic-meter; 1; 1.0; milligram-per-deciliter
-mass-density; blood-glucose; 001; 9 / 1000; 0.009; kilogram-per-cubic-meter; 9 / 10; 0.9; milligram-per-deciliter
-
mass-density; default; 001; 11 / 10; 1.1; kilogram-per-cubic-meter; 11 / 10; 1.1; kilogram-per-cubic-meter
mass-density; default; 001; 1; 1.0; kilogram-per-cubic-meter; 1; 1.0; kilogram-per-cubic-meter
mass-density; default; 001; 9 / 10; 0.9; kilogram-per-cubic-meter; 9 / 10; 0.9; kilogram-per-cubic-meter
@@ -451,4 +451,4 @@ year-duration; person-age; 001; 12 / 5; 2.4; year; 2; year-person; 24 / 5; 4.8;
year-duration; person-age; 001; 1; 1.0; year; 1; year-person; 0; 0.0; month-person
year-duration; person-age; 001; 9 / 10; 0.9; year; 54 / 5; 10.8; month-person
year-duration; person-age; 001; 1 / 12; 0.08333333333333333; year; 1; 1.0; month-person
-year-duration; person-age; 001; 3 / 40; 0.075; year; 9 / 10; 0.9; month-person
+year-duration; person-age; 001; 3 / 40; 0.075; year; 9 / 10; 0.9; month-person \ No newline at end of file
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt
index d2facefc6ec..c606911b981 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/cldr/units/unitsTest.txt
@@ -1,5 +1,5 @@
# Test data for unit conversions
-# Copyright © 1991-2020 Unicode, Inc.
+# Copyright © 1991-2021 Unicode, Inc.
# For terms of use, see http://www.unicode.org/copyright.html
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
@@ -31,7 +31,9 @@ area ; acre ; square-meter ; 4,046.8564224 * x ; 4046856.0
area ; hectare ; square-meter ; 10,000 * x ; 1.0E7
area ; square-kilometer ; square-meter ; 1,000,000 * x ; 1.0E9
area ; square-mile ; square-meter ; 2,589,988.110336 * x ; 2.589988E9
+concentration ; milligram-ofglucose-per-deciliter ; kilogram-item-per-kilogram-cubic-meter ; 60,221,407,600,000,000,000,000,000,000/1,801,557 * x ; 3.342742E25
concentration ; millimole-per-liter ; item-per-cubic-meter ; 602,214,076,000,000,000,000,000 * x ; 6.022141E26
+concentration-mass ; ofglucose ; item-per-kilogram ; 6,022,140,760,000,000,000,000,000,000,000/1,801,557 * x ; 3.342742E27
consumption ; liter-per-100-kilometer ; cubic-meter-per-meter ; 0.00000001 * x ; 1.0E-5
consumption ; liter-per-kilometer ; cubic-meter-per-meter ; 0.000001 * x ; 0.001
consumption-inverse ; mile-per-gallon-imperial ; meter-per-cubic-meter ; 160,934,400,000/454,609 * x ; 3.540062E8
@@ -121,7 +123,6 @@ mass ; ton ; kilogram ; 907.18474 * x ; 907184.7
mass ; metric-ton ; kilogram ; 1,000 * x ; 1000000.0
mass ; earth-mass ; kilogram ; 5,972,200,000,000,000,000,000,000 * x ; 5.9722E27
mass ; solar-mass ; kilogram ; 1,988,470,000,000,000,000,000,000,000,000 * x ; 1.98847E33
-mass-density ; milligram-per-deciliter ; kilogram-per-cubic-meter ; 0.01 * x ; 10.0
portion ; permillion ; portion ; 0.000001 * x ; 0.001
portion ; permyriad ; portion ; 0.0001 * x ; 0.1
portion ; permille ; portion ; 0.001 * x ; 1.0
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.16.toml
new file mode 100644
index 00000000000..6c72febefea
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.16.toml
@@ -0,0 +1,109 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: free-blocks.16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "free-blocks.16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0x80,0xc0,0xc0,
+ 0xc0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_16 = [
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 1,0xad
+]
+indexLength = 1024
+dataLength = 258
+highStart = 0xa00
+shifted12HighStart = 0x1
+type = 0
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x1
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,1,0x740,1,0x780,2,0x880,3,0x110000,1
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.32.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.32.toml
new file mode 100644
index 00000000000..89ed72fce66
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.32.toml
@@ -0,0 +1,109 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: free-blocks.32
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "free-blocks.32"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0x80,0xc0,0xc0,
+ 0xc0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_32 = [
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 1,0xad
+]
+indexLength = 1024
+dataLength = 258
+highStart = 0xa00
+shifted12HighStart = 0x1
+type = 0
+valueWidth = 1
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x1
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,1,0x740,1,0x780,2,0x880,3,0x110000,1
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.8.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.8.toml
new file mode 100644
index 00000000000..5c43d62d80d
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.8.toml
@@ -0,0 +1,109 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: free-blocks.8
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "free-blocks.8"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0x80,0xc0,0xc0,
+ 0xc0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_8 = [
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 1,1,1,0xad
+]
+indexLength = 1024
+dataLength = 260
+highStart = 0xa00
+shifted12HighStart = 0x1
+type = 0
+valueWidth = 2
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x1
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,1,0x740,1,0x780,2,0x880,3,0x110000,1
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.small16.toml
new file mode 100644
index 00000000000..cd9c969d389
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/free-blocks.small16.toml
@@ -0,0 +1,49 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: free-blocks.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "free-blocks.small16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0x80,0xc0,0xc0,
+ 0xc0,0xc0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_16 = [
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 1,0xad
+]
+indexLength = 64
+dataLength = 258
+highStart = 0xa00
+shifted12HighStart = 0x1
+type = 1
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x1
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,1,0x740,1,0x780,2,0x880,3,0x110000,1
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.16.toml
new file mode 100644
index 00000000000..da8e9f61c01
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.16.toml
@@ -0,0 +1,113 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: grow-data.16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "grow-data.16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x80,0xa0,0xc0,
+ 0xc0,0xc0,0xe0,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100
+]
+data_16 = [
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,0xad
+]
+indexLength = 1024
+dataLength = 322
+highStart = 0xa00
+shifted12HighStart = 0x1
+type = 0
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x100
+nullValue = 0x5
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,1,0x720,2,0x7a0,3,0x8a0,4,0x110000,5
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.32.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.32.toml
new file mode 100644
index 00000000000..01ea3c3adff
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.32.toml
@@ -0,0 +1,113 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: grow-data.32
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "grow-data.32"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x80,0xa0,0xc0,
+ 0xc0,0xc0,0xe0,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100
+]
+data_32 = [
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 0xad
+]
+indexLength = 1024
+dataLength = 321
+highStart = 0xa00
+shifted12HighStart = 0x1
+type = 0
+valueWidth = 1
+index3NullOffset = 0x7fff
+dataNullOffset = 0x100
+nullValue = 0x5
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,1,0x720,2,0x7a0,3,0x8a0,4,0x110000,5
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.8.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.8.toml
new file mode 100644
index 00000000000..ef2c0956a6e
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.8.toml
@@ -0,0 +1,113 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: grow-data.8
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "grow-data.8"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x80,0xa0,0xc0,
+ 0xc0,0xc0,0xe0,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100
+]
+data_8 = [
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,0xad
+]
+indexLength = 1024
+dataLength = 324
+highStart = 0xa00
+shifted12HighStart = 0x1
+type = 0
+valueWidth = 2
+index3NullOffset = 0x7fff
+dataNullOffset = 0x100
+nullValue = 0x5
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,1,0x720,2,0x7a0,3,0x8a0,4,0x110000,5
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.small16.toml
new file mode 100644
index 00000000000..1e761f166ca
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/grow-data.small16.toml
@@ -0,0 +1,53 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: grow-data.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "grow-data.small16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0x60,0x80,0xa0,0xc0,
+ 0xc0,0xc0,0xe0,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,
+ 0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100,0x100
+]
+data_16 = [
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,0xad
+]
+indexLength = 64
+dataLength = 322
+highStart = 0xa00
+shifted12HighStart = 0x1
+type = 1
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x100
+nullValue = 0x5
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,1,0x720,2,0x7a0,3,0x8a0,4,0x110000,5
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.16.toml
new file mode 100644
index 00000000000..b9ec8ed16ec
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.16.toml
@@ -0,0 +1,101 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set-empty.16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set-empty.16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_16 = [
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,0xad
+]
+indexLength = 1024
+dataLength = 130
+highStart = 0x0
+shifted12HighStart = 0x0
+type = 0
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x3
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,3,0x110000,3
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.32.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.32.toml
new file mode 100644
index 00000000000..cc3e1672643
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.32.toml
@@ -0,0 +1,101 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set-empty.32
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set-empty.32"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_32 = [
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 0xad
+]
+indexLength = 1024
+dataLength = 129
+highStart = 0x0
+shifted12HighStart = 0x0
+type = 0
+valueWidth = 1
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x3
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,3,0x110000,3
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.8.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.8.toml
new file mode 100644
index 00000000000..5ce7bba5b5f
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.8.toml
@@ -0,0 +1,101 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set-empty.8
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set-empty.8"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_8 = [
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,0xad
+]
+indexLength = 1024
+dataLength = 132
+highStart = 0x0
+shifted12HighStart = 0x0
+type = 0
+valueWidth = 2
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x3
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,3,0x110000,3
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.small16.toml
new file mode 100644
index 00000000000..f61d9fe18ad
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-empty.small16.toml
@@ -0,0 +1,41 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set-empty.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set-empty.small16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_16 = [
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,0xad
+]
+indexLength = 64
+dataLength = 130
+highStart = 0x0
+shifted12HighStart = 0x0
+type = 1
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x3
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,3,0x110000,3
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.16.toml
new file mode 100644
index 00000000000..6eac4b7bdc8
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.16.toml
@@ -0,0 +1,101 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set-single-value.16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set-single-value.16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_16 = [
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,0xad
+]
+indexLength = 1024
+dataLength = 130
+highStart = 0x0
+shifted12HighStart = 0x0
+type = 0
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x5
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,3,0x110000,5
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.32.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.32.toml
new file mode 100644
index 00000000000..9db848236d6
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.32.toml
@@ -0,0 +1,101 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set-single-value.32
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set-single-value.32"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_32 = [
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 0xad
+]
+indexLength = 1024
+dataLength = 129
+highStart = 0x0
+shifted12HighStart = 0x0
+type = 0
+valueWidth = 1
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x5
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,3,0x110000,5
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.8.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.8.toml
new file mode 100644
index 00000000000..c92b7a8e1e5
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.8.toml
@@ -0,0 +1,101 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set-single-value.8
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set-single-value.8"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_8 = [
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,0xad
+]
+indexLength = 1024
+dataLength = 132
+highStart = 0x0
+shifted12HighStart = 0x0
+type = 0
+valueWidth = 2
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x5
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,3,0x110000,5
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.small16.toml
new file mode 100644
index 00000000000..568362f5565
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set-single-value.small16.toml
@@ -0,0 +1,41 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set-single-value.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set-single-value.small16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+]
+data_16 = [
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,0xad
+]
+indexLength = 64
+dataLength = 130
+highStart = 0x0
+shifted12HighStart = 0x0
+type = 1
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x0
+nullValue = 0x5
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,3,0x110000,5
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.16.toml
new file mode 100644
index 00000000000..e064217ae6f
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.16.toml
@@ -0,0 +1,138 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set1.16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set1.16"
+index = [
+ 0,0x40,0x40,0x59,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xb3,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xfb,0x121,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x14d,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x495,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x4bc,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4df,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x1ba,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x1c6,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0x1d3,0x1da,0x1da,0x1da,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x439,0xd0,0xd0,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x455,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x475
+]
+data_16 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0xf,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,
+ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0,0xad
+]
+indexLength = 1248
+dataLength = 492
+highStart = 0xf0200
+shifted12HighStart = 0xf1
+type = 0
+valueWidth = 0
+index3NullOffset = 0x4
+dataNullOffset = 0x0
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,0,0x40,0,0xe7,0x34,0x3400,0,0x9fa6,0x61,0xda9e,0x31,0xdada,0,0xeeee,0xff,
+ 0x11111,1,0x44444,0x61,0xf0003,0,0xf0004,0xf,0xf0006,0x10,0xf0007,0x11,0xf0040,0x12,0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.32.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.32.toml
new file mode 100644
index 00000000000..9b7299b37ff
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.32.toml
@@ -0,0 +1,138 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set1.32
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set1.32"
+index = [
+ 0,0x40,0x40,0x59,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xb3,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xfb,0x121,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x14d,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x495,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x4bc,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4df,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x1ba,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x1c6,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0x1d3,0x1da,0x1da,0x1da,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x439,0xd0,0xd0,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x455,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x475
+]
+data_32 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0xf,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,
+ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0,0xad
+]
+indexLength = 1248
+dataLength = 492
+highStart = 0xf0200
+shifted12HighStart = 0xf1
+type = 0
+valueWidth = 1
+index3NullOffset = 0x4
+dataNullOffset = 0x0
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,0,0x40,0,0xe7,0x34,0x3400,0,0x9fa6,0x61,0xda9e,0x31,0xdada,0,0xeeee,0xff,
+ 0x11111,1,0x44444,0x61,0xf0003,0,0xf0004,0xf,0xf0006,0x10,0xf0007,0x11,0xf0040,0x12,0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.8.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.8.toml
new file mode 100644
index 00000000000..4d06bf9d3bb
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.8.toml
@@ -0,0 +1,138 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set1.8
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set1.8"
+index = [
+ 0,0x40,0x40,0x59,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xb3,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xfb,0x121,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,
+ 0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x13b,0x14d,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x495,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x49e,0x4bc,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,
+ 0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4bf,0x4df,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,
+ 0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x17b,0x1ba,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x1c6,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0x1d3,0x1da,0x1da,0x1da,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x3bc,0x439,0xd0,0xd0,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x455,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x475
+]
+data_8 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0xf,0x10,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,
+ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0,0xad
+]
+indexLength = 1248
+dataLength = 492
+highStart = 0xf0200
+shifted12HighStart = 0xf1
+type = 0
+valueWidth = 2
+index3NullOffset = 0x4
+dataNullOffset = 0x0
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,0,0x40,0,0xe7,0x34,0x3400,0,0x9fa6,0x61,0xda9e,0x31,0xdada,0,0xeeee,0xff,
+ 0x11111,1,0x44444,0x61,0xf0003,0,0xf0004,0xf,0xf0006,0x10,0xf0007,0x11,0xf0040,0x12,0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.small16.toml
new file mode 100644
index 00000000000..1a724177591
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set1.small16.toml
@@ -0,0 +1,81 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set1.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set1.small16"
+index = [
+ 0,0x40,0x40,0x59,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0x17f,0x199,0x1aa,0x1bd,0x1d5,0x199,0x199,0x199,0x199,0x199,0x199,0x199,0x199,0x199,0x199,0x199,
+ 0x199,0x1f3,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,
+ 0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,
+ 0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x1f6,0x216,0,0x10,0x20,
+ 0x30,0x40,0x50,0x60,0x70,0x40,0x50,0x60,0x70,0x59,0x69,0x79,0x89,0,0x10,0x20,
+ 0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,
+ 0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xa3,0xa9,0xa9,
+ 0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,
+ 0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xab,0,
+ 0,0,0xb9,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
+ 0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
+ 0xc3,0xc3,0xc3,0xc5,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,
+ 0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,
+ 0xd3,0xd3,0xd3,0xd3,0xe2,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x99,0x99,0x99,0xee,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfb,
+ 0x102,0x102,0x102,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x7d,
+ 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,0xad,0xad,0xad,0xad,0xad,0xad,0xad,
+ 0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,
+ 0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xb3,0xce,0xce,0xce,0xce,0xce,0xce,
+ 0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xe5,0xf3,0xf3,0xf3,0xf3,0xf3,
+ 0xf3,0xf3,0xf3,0xf3,0x105,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x123,0xad,0xad,
+ 0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,
+ 0xad,0xad,0xad,0xad,0xad,0x13f,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,0x15f
+]
+data_16 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0,0,0,0,0,0,0,
+ 0,0,0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x61,0x61,0,0,0,0,0,0,0,0,0,0,0,0,0xf,0x10,
+ 0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+ 0x12,0x12,0xad,0,0xad
+]
+indexLength = 535
+dataLength = 277
+highStart = 0xf0200
+shifted12HighStart = 0xf1
+type = 1
+valueWidth = 0
+index3NullOffset = 0x4
+dataNullOffset = 0x0
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,0,0x40,0,0xe7,0x34,0x3400,0,0x9fa6,0x61,0xda9e,0x31,0xdada,0,0xeeee,0xff,
+ 0x11111,1,0x44444,0x61,0xf0003,0,0xf0004,0xf,0xf0006,0x10,0xf0007,0x11,0xf0040,0x12,0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.16.toml
new file mode 100644
index 00000000000..79bed6eae23
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.16.toml
@@ -0,0 +1,128 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set2-overlap.16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set2-overlap.16"
+index = [
+ 0,0x40,0x72,0x95,0xb3,0xb3,0xb3,0xb3,0xf2,0xf2,0xf2,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0x45e,0x45e,0x45e,0x45e,0x45e,0x45e,0x45e,0x462,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0x132,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
+ 0x13e,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x14d,0x135,0x135,0x135,0x135,0x135,
+ 0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
+ 0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x155,0x161,0x161,0x161,0x161,
+ 0x161,0x161,0x161,0x161,0x161,0x161,0x161,0x161,0x167,0x172,0xb3,0xb3,0xb3,0xb3,0xb,0xb,
+ 0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,
+ 0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0x408,0x421,
+ 0x42b,0x43e
+]
+data_16 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,0,0,0,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,
+ 0x7a,0x7a,0x7a,0x7a,0x7a,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,
+ 0x7a,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,2,0,0,0,0,0,0,0,0,0,0,0,7,7,7,
+ 7,7,0,0xad
+]
+indexLength = 1154
+dataLength = 388
+highStart = 0x30000
+shifted12HighStart = 0x30
+type = 0
+valueWidth = 0
+index3NullOffset = 0xb
+dataNullOffset = 0xb3
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,0,0x21,0,0x72,0x5555,0xdd,3,0xde,4,0x201,0,0x240,6,0x241,0,
+ 0x280,6,0x281,0,0x2c0,6,0x2f883,0,0x2f987,0x7a,0x2fa98,5,0x2fedc,0x7a,0x2ffaa,1,
+ 0x2ffab,2,0x2ffbb,0,0x2ffc0,7,0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.32.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.32.toml
new file mode 100644
index 00000000000..7582d9608ee
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.32.toml
@@ -0,0 +1,128 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set2-overlap.32
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set2-overlap.32"
+index = [
+ 0,0x40,0x72,0x95,0xb3,0xb3,0xb3,0xb3,0xf2,0xf2,0xf2,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0x45e,0x45e,0x45e,0x45e,0x45e,0x45e,0x45e,0x462,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0x132,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
+ 0x13e,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x14d,0x135,0x135,0x135,0x135,0x135,
+ 0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
+ 0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x155,0x161,0x161,0x161,0x161,
+ 0x161,0x161,0x161,0x161,0x161,0x161,0x161,0x161,0x167,0x172,0xb3,0xb3,0xb3,0xb3,0xb,0xb,
+ 0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,
+ 0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0x408,0x421,
+ 0x42b,0x43e
+]
+data_32 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,0,0,0,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,
+ 0x7a,0x7a,0x7a,0x7a,0x7a,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,
+ 0x7a,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,2,0,0,0,0,0,0,0,0,0,0,0,7,7,7,
+ 7,7,0,0xad
+]
+indexLength = 1154
+dataLength = 388
+highStart = 0x30000
+shifted12HighStart = 0x30
+type = 0
+valueWidth = 1
+index3NullOffset = 0xb
+dataNullOffset = 0xb3
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,0,0x21,0,0x72,0x5555,0xdd,3,0xde,4,0x201,0,0x240,6,0x241,0,
+ 0x280,6,0x281,0,0x2c0,6,0x2f883,0,0x2f987,0x7a,0x2fa98,5,0x2fedc,0x7a,0x2ffaa,1,
+ 0x2ffab,2,0x2ffbb,0,0x2ffc0,7,0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.small16.toml
new file mode 100644
index 00000000000..08741aca228
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set2-overlap.small16.toml
@@ -0,0 +1,73 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set2-overlap.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set2-overlap.small16"
+index = [
+ 0,0x40,0x72,0x95,0xb3,0xb3,0xb3,0xb3,0xf2,0xf2,0xf2,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xee,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xfa,0,0x10,0x20,0x30,
+ 0x40,0x50,0x60,0x70,0x72,0x82,0x92,0xa2,0x95,0xa5,0xb5,0xc5,0xb3,0xc3,0xd3,0xe3,
+ 0xb3,0xc3,0xd3,0xe3,0xb3,0xc3,0xd3,0xe3,0xb3,0xc3,0xd3,0xe3,0xf2,0x102,0x112,0x122,
+ 0xf2,0x102,0x112,0x122,0xf2,0x102,0x112,0x122,0xb3,0xc3,0xd3,0xe3,0xb3,0xc3,0xd3,0xe3,
+ 0xb3,0xc3,0xd3,0xe3,0xb3,0xc3,0xd3,0xe3,0xb3,0xc3,0xd3,0xe3,0xb3,0xc3,0xd3,0xe3,
+ 0xb3,0xc3,0xd3,0xe3,0xb3,0xc3,0xd3,0xe3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0x132,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
+ 0x13e,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x145,0x14d,0x135,0x135,0x135,0x135,0x135,
+ 0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,
+ 0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x155,0x161,0x161,0x161,0x161,
+ 0x161,0x161,0x161,0x161,0x161,0x161,0x161,0x161,0x167,0x172,0xb3,0xb3,0xb3,0xb3,0x4c,0x6c,
+ 0x78,0x78,0x78,0x78,0x78,0x78,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,
+ 0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,
+ 0xb,0xb,0xb,0xb,0xb,0xb,0x98,0xb1,0xbb,0xce
+]
+data_16 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,0x5555,
+ 0x5555,0x5555,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,0,0,0,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,
+ 0x7a,0x7a,0x7a,0x7a,0x7a,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,
+ 0x7a,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,2,0,0,0,0,0,0,0,0,0,0,0,7,7,7,
+ 7,7,0,0xad
+]
+indexLength = 282
+dataLength = 388
+highStart = 0x30000
+shifted12HighStart = 0x30
+type = 1
+valueWidth = 0
+index3NullOffset = 0xb
+dataNullOffset = 0xb3
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,0,0x21,0,0x72,0x5555,0xdd,3,0xde,4,0x201,0,0x240,6,0x241,0,
+ 0x280,6,0x281,0,0x2c0,6,0x2f883,0,0x2f987,0x7a,0x2fa98,5,0x2fedc,0x7a,0x2ffaa,1,
+ 0x2ffab,2,0x2ffbb,0,0x2ffc0,7,0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.16.toml
new file mode 100644
index 00000000000..c94365e84cc
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.16.toml
@@ -0,0 +1,128 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set3-initial-9.16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set3-initial-9.16"
+index = [
+ 0,0x40,0x5c,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xf7,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x177,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x1a6,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x1da,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6
+]
+data_16 = [
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,0xad
+]
+indexLength = 1024
+dataLength = 552
+highStart = 0xce00
+shifted12HighStart = 0xd
+type = 0
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0x80
+nullValue = 0x9
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,9,0x31,9,0xa4,1,0x3400,9,0x6789,2,0x9000,9,0xa000,4,0xabcd,9,
+ 0xbcde,3,0xcccc,9,0x110000,6
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.32.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.32.toml
new file mode 100644
index 00000000000..1a0c9732c8d
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.32.toml
@@ -0,0 +1,128 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set3-initial-9.32
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set3-initial-9.32"
+index = [
+ 0,0x40,0x5c,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xf7,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x177,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x1a6,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x1da,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6
+]
+data_32 = [
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,0xad
+]
+indexLength = 1024
+dataLength = 551
+highStart = 0xce00
+shifted12HighStart = 0xd
+type = 0
+valueWidth = 1
+index3NullOffset = 0x7fff
+dataNullOffset = 0x80
+nullValue = 0x9
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,9,0x31,9,0xa4,1,0x3400,9,0x6789,2,0x9000,9,0xa000,4,0xabcd,9,
+ 0xbcde,3,0xcccc,9,0x110000,6
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.8.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.8.toml
new file mode 100644
index 00000000000..5008268b71a
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.8.toml
@@ -0,0 +1,128 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set3-initial-9.8
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set3-initial-9.8"
+index = [
+ 0,0x40,0x5c,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xf7,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,0x137,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x177,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,0x184,
+ 0x184,0x184,0x184,0x1a6,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x1da,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,
+ 0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6
+]
+data_8 = [
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,0xad
+]
+indexLength = 1024
+dataLength = 552
+highStart = 0xce00
+shifted12HighStart = 0xd
+type = 0
+valueWidth = 2
+index3NullOffset = 0x7fff
+dataNullOffset = 0x80
+nullValue = 0x9
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,9,0x31,9,0xa4,1,0x3400,9,0x6789,2,0x9000,9,0xa000,4,0xabcd,9,
+ 0xbcde,3,0xcccc,9,0x110000,6
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.small16.toml
new file mode 100644
index 00000000000..aee1538455d
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/set3-initial-9.small16.toml
@@ -0,0 +1,72 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: set3-initial-9.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "set3-initial-9.small16"
+index = [
+ 0,0x40,0x5c,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x11c,0x136,0x14e,0x16d,0,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x5c,0x6c,0x7c,0x8c,
+ 0x80,0x90,0xa0,0xb0,0x80,0x90,0xa0,0xb0,0x80,0x90,0xa0,0xb0,0x80,0x90,0xa0,0xb0,
+ 0x80,0x90,0xa0,0xb0,0x80,0x90,0xa0,0xb0,0x80,0x90,0xa0,0xb0,0x80,0x90,0xa0,0xb0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc7,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,
+ 0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,
+ 0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0xe7,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,
+ 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,
+ 0xf4,0xf4,0xf4,0xf4,0xf4,0xf6,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x104,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
+ 0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x44,0x50,0x50,0x50,
+ 0x50,0x50,0x50,0x50,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,
+ 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x78,3,3,3,3,3,3,
+ 3,3,3,3,3,3,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,3,3,
+ 3,3,3,0xb8,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xe8,3,3,3,
+ 3,3,3,0xfc
+]
+data_16 = [
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 9,9,9,9,9,9,9,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,9,9,9,9,9,9,9,9,9,9,9,9,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,0xad
+]
+indexLength = 372
+dataLength = 290
+highStart = 0xce00
+shifted12HighStart = 0xd
+type = 1
+valueWidth = 0
+index3NullOffset = 0x3
+dataNullOffset = 0x80
+nullValue = 0x9
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0,9,0x31,9,0xa4,1,0x3400,9,0x6789,2,0x9000,9,0xa000,4,0xabcd,9,
+ 0xbcde,3,0xcccc,9,0x110000,6
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/short-all-same.8.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/short-all-same.8.toml
new file mode 100644
index 00000000000..e1b26488478
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/short-all-same.8.toml
@@ -0,0 +1,385 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: short-all-same.8
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "short-all-same.8"
+index = [
+ 0,0x40,0x80,0xc0,0x100,0x140,0x180,0x1c0,0x200,0x240,0x280,0x2c0,0x300,0x340,0x380,0x3c0,
+ 0x400,0x440,0x480,0x4c0,0x500,0x540,0x580,0x5c0,0x600,0x640,0x680,0x6c0,0x700,0x740,0x780,0x7c0,
+ 0x800,0x840,0x880,0x8c0,0x900,0x940,0x980,0x9c0,0xa00,0xa40,0xa80,0xac0,0xb00,0xb40,0xb80,0xbc0,
+ 0xc00,0xc40,0xc80,0xcc0,0xd00,0xd40,0xd80,0xdc0,0xe00,0xe40,0xe80,0xec0,0xf00,0xf40,0xf80,0xfc0,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,
+ 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000
+]
+data_8 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+ 0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,
+ 0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
+ 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+ 0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,
+ 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
+ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+ 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
+ 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
+ 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
+ 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+ 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
+ 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
+ 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
+ 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
+ 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
+ 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,
+ 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,
+ 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+ 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,
+ 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,
+ 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+ 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,
+ 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,
+ 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
+ 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,
+ 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,
+ 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
+ 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,
+ 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,
+ 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
+ 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+ 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
+ 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
+ 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,
+ 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+ 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,
+ 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
+ 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,
+ 0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,
+ 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,
+ 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,
+ 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,
+ 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+ 0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,
+ 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,
+ 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,
+ 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,
+ 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
+ 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,
+ 0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,
+ 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
+ 0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+ 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,
+ 0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,
+ 0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,
+ 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,
+ 0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,
+ 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,
+ 0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
+ 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,
+ 0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
+ 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,
+ 0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,
+ 0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
+ 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,
+ 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,
+ 0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,
+ 0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,
+ 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,
+ 0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,
+ 0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,
+ 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
+ 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,
+ 0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,
+ 0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,
+ 0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,
+ 0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,
+ 0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,
+ 0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,
+ 0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,
+ 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,
+ 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,
+ 0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,
+ 0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,
+ 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,
+ 0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,
+ 0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,
+ 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+ 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
+ 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,
+ 0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,
+ 0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
+ 0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,
+ 0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,
+ 0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,
+ 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,
+ 0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,
+ 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,
+ 0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,
+ 0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,
+ 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
+ 0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,
+ 0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
+ 0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,
+ 0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,
+ 0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,
+ 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,
+ 0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,
+ 0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,
+ 0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,
+ 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,
+ 0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,
+ 0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,
+ 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,
+ 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,
+ 0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,
+ 0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,
+ 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,
+ 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
+ 0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,
+ 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
+ 0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+ 0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,
+ 0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,
+ 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,
+ 0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,
+ 0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,
+ 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+ 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,
+ 0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,
+ 0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,
+ 0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,
+ 0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,
+ 0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,
+ 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,
+ 0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,
+ 0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,
+ 0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,
+ 0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,
+ 0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,
+ 0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,
+ 0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
+ 0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
+ 0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,
+ 0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
+ 0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,
+ 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,
+ 0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,
+ 0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,
+ 0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,
+ 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
+ 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
+ 0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,
+ 0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,
+ 0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,
+ 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,
+ 0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,
+ 0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,
+ 0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,
+ 0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,
+ 0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,
+ 0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,
+ 0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,
+ 0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,
+ 0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,
+ 0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,
+ 0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,
+ 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,
+ 0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,
+ 0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,
+ 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,
+ 0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,
+ 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,
+ 0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,
+ 0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,
+ 0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,
+ 0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,
+ 0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,
+ 0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,
+ 0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,
+ 0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,
+ 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
+ 0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,
+ 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,
+ 0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,
+ 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,
+ 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,
+ 0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
+ 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,
+ 0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,
+ 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+ 0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+ 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,
+ 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+ 0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,
+ 0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0xad
+]
+indexLength = 1024
+dataLength = 4164
+highStart = 0x1000
+shifted12HighStart = 0x1
+type = 0
+valueWidth = 2
+index3NullOffset = 0x7fff
+dataNullOffset = 0x1000
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0x10,0,0x20,1,0x30,2,0x40,3,0x50,4,0x60,5,0x70,6,0x80,7,
+ 0x90,8,0xa0,9,0xb0,0xa,0xc0,0xb,0xd0,0xc,0xe0,0xd,0xf0,0xe,0x100,0xf,
+ 0x110,0x10,0x120,0x11,0x130,0x12,0x140,0x13,0x150,0x14,0x160,0x15,0x170,0x16,0x180,0x17,
+ 0x190,0x18,0x1a0,0x19,0x1b0,0x1a,0x1c0,0x1b,0x1d0,0x1c,0x1e0,0x1d,0x1f0,0x1e,0x200,0x1f,
+ 0x210,0x20,0x220,0x21,0x230,0x22,0x240,0x23,0x250,0x24,0x260,0x25,0x270,0x26,0x280,0x27,
+ 0x290,0x28,0x2a0,0x29,0x2b0,0x2a,0x2c0,0x2b,0x2d0,0x2c,0x2e0,0x2d,0x2f0,0x2e,0x300,0x2f,
+ 0x310,0x30,0x320,0x31,0x330,0x32,0x340,0x33,0x350,0x34,0x360,0x35,0x370,0x36,0x380,0x37,
+ 0x390,0x38,0x3a0,0x39,0x3b0,0x3a,0x3c0,0x3b,0x3d0,0x3c,0x3e0,0x3d,0x3f0,0x3e,0x400,0x3f,
+ 0x410,0x40,0x420,0x41,0x430,0x42,0x440,0x43,0x450,0x44,0x460,0x45,0x470,0x46,0x480,0x47,
+ 0x490,0x48,0x4a0,0x49,0x4b0,0x4a,0x4c0,0x4b,0x4d0,0x4c,0x4e0,0x4d,0x4f0,0x4e,0x500,0x4f,
+ 0x510,0x50,0x520,0x51,0x530,0x52,0x540,0x53,0x550,0x54,0x560,0x55,0x570,0x56,0x580,0x57,
+ 0x590,0x58,0x5a0,0x59,0x5b0,0x5a,0x5c0,0x5b,0x5d0,0x5c,0x5e0,0x5d,0x5f0,0x5e,0x600,0x5f,
+ 0x610,0x60,0x620,0x61,0x630,0x62,0x640,0x63,0x650,0x64,0x660,0x65,0x670,0x66,0x680,0x67,
+ 0x690,0x68,0x6a0,0x69,0x6b0,0x6a,0x6c0,0x6b,0x6d0,0x6c,0x6e0,0x6d,0x6f0,0x6e,0x700,0x6f,
+ 0x710,0x70,0x720,0x71,0x730,0x72,0x740,0x73,0x750,0x74,0x760,0x75,0x770,0x76,0x780,0x77,
+ 0x790,0x78,0x7a0,0x79,0x7b0,0x7a,0x7c0,0x7b,0x7d0,0x7c,0x7e0,0x7d,0x7f0,0x7e,0x800,0x7f,
+ 0x810,0x80,0x820,0x81,0x830,0x82,0x840,0x83,0x850,0x84,0x860,0x85,0x870,0x86,0x880,0x87,
+ 0x890,0x88,0x8a0,0x89,0x8b0,0x8a,0x8c0,0x8b,0x8d0,0x8c,0x8e0,0x8d,0x8f0,0x8e,0x900,0x8f,
+ 0x910,0x90,0x920,0x91,0x930,0x92,0x940,0x93,0x950,0x94,0x960,0x95,0x970,0x96,0x980,0x97,
+ 0x990,0x98,0x9a0,0x99,0x9b0,0x9a,0x9c0,0x9b,0x9d0,0x9c,0x9e0,0x9d,0x9f0,0x9e,0xa00,0x9f,
+ 0xa10,0xa0,0xa20,0xa1,0xa30,0xa2,0xa40,0xa3,0xa50,0xa4,0xa60,0xa5,0xa70,0xa6,0xa80,0xa7,
+ 0xa90,0xa8,0xaa0,0xa9,0xab0,0xaa,0xac0,0xab,0xad0,0xac,0xae0,0xad,0xaf0,0xae,0xb00,0xaf,
+ 0xb10,0xb0,0xb20,0xb1,0xb30,0xb2,0xb40,0xb3,0xb50,0xb4,0xb60,0xb5,0xb70,0xb6,0xb80,0xb7,
+ 0xb90,0xb8,0xba0,0xb9,0xbb0,0xba,0xbc0,0xbb,0xbd0,0xbc,0xbe0,0xbd,0xbf0,0xbe,0xc00,0xbf,
+ 0xc10,0xc0,0xc20,0xc1,0xc30,0xc2,0xc40,0xc3,0xc50,0xc4,0xc60,0xc5,0xc70,0xc6,0xc80,0xc7,
+ 0xc90,0xc8,0xca0,0xc9,0xcb0,0xca,0xcc0,0xcb,0xcd0,0xcc,0xce0,0xcd,0xcf0,0xce,0xd00,0xcf,
+ 0xd10,0xd0,0xd20,0xd1,0xd30,0xd2,0xd40,0xd3,0xd50,0xd4,0xd60,0xd5,0xd70,0xd6,0xd80,0xd7,
+ 0xd90,0xd8,0xda0,0xd9,0xdb0,0xda,0xdc0,0xdb,0xdd0,0xdc,0xde0,0xdd,0xdf0,0xde,0xe00,0xdf,
+ 0xe10,0xe0,0xe20,0xe1,0xe30,0xe2,0xe40,0xe3,0xe50,0xe4,0xe60,0xe5,0xe70,0xe6,0xe80,0xe7,
+ 0xe90,0xe8,0xea0,0xe9,0xeb0,0xea,0xec0,0xeb,0xed0,0xec,0xee0,0xed,0xef0,0xee,0xf00,0xef,
+ 0xf10,0xf0,0xf20,0xf1,0xf30,0xf2,0xf40,0xf3,0xf50,0xf4,0xf60,0xf5,0xf70,0xf6,0xf80,0xf7,
+ 0xf90,0xf8,0xfa0,0xf9,0xfb0,0xfa,0xfc0,0xfb,0xfd0,0xfc,0xfe0,0xfd,0xff0,0xfe,0x1000,0xff,
+ 0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/short-all-same.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/short-all-same.small16.toml
new file mode 100644
index 00000000000..c8156e69b00
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/short-all-same.small16.toml
@@ -0,0 +1,321 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: short-all-same.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "short-all-same.small16"
+index = [
+ 0,0x40,0x80,0xc0,0x100,0x140,0x180,0x1c0,0x200,0x240,0x280,0x2c0,0x300,0x340,0x380,0x3c0,
+ 0x400,0x440,0x480,0x4c0,0x500,0x540,0x580,0x5c0,0x600,0x640,0x680,0x6c0,0x700,0x740,0x780,0x7c0,
+ 0x800,0x840,0x880,0x8c0,0x900,0x940,0x980,0x9c0,0xa00,0xa40,0xa80,0xac0,0xb00,0xb40,0xb80,0xbc0,
+ 0xc00,0xc40,0xc80,0xcc0,0xd00,0xd40,0xd80,0xdc0,0xe00,0xe40,0xe80,0xec0,0xf00,0xf40,0xf80,0xfc0
+]
+data_16 = [
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,
+ 0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,0xb,
+ 0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
+ 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,
+ 0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,0xe,
+ 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
+ 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
+ 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
+ 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,
+ 0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,
+ 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
+ 0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,
+ 0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
+ 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
+ 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,
+ 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,
+ 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,
+ 0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
+ 0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,
+ 0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
+ 0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
+ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
+ 0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
+ 0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,
+ 0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,
+ 0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x26,
+ 0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,
+ 0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,
+ 0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x29,
+ 0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,
+ 0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,
+ 0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,
+ 0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,
+ 0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,
+ 0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,
+ 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
+ 0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
+ 0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,
+ 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,
+ 0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,
+ 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
+ 0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,
+ 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,
+ 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,
+ 0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,
+ 0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,0x3b,
+ 0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,
+ 0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,0x3d,
+ 0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,
+ 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
+ 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
+ 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
+ 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
+ 0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,
+ 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
+ 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,
+ 0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,
+ 0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,
+ 0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,
+ 0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,
+ 0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,
+ 0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,
+ 0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,
+ 0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,
+ 0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,
+ 0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,
+ 0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,
+ 0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,
+ 0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
+ 0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,
+ 0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,
+ 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,
+ 0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x56,
+ 0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x57,
+ 0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,
+ 0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,
+ 0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,
+ 0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,
+ 0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,
+ 0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,
+ 0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,
+ 0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,
+ 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
+ 0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,
+ 0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,
+ 0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,
+ 0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,
+ 0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,
+ 0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,
+ 0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,
+ 0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,
+ 0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,
+ 0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,
+ 0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,
+ 0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,
+ 0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,
+ 0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+ 0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,
+ 0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,
+ 0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,
+ 0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,
+ 0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,
+ 0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,0x74,
+ 0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,
+ 0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,
+ 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,
+ 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,
+ 0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,
+ 0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,
+ 0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,
+ 0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,
+ 0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,
+ 0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,
+ 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
+ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+ 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
+ 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,
+ 0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,
+ 0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
+ 0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,
+ 0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,
+ 0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,
+ 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,
+ 0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,
+ 0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,
+ 0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,
+ 0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,
+ 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,
+ 0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,
+ 0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,
+ 0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,
+ 0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,
+ 0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x94,
+ 0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,
+ 0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,
+ 0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,
+ 0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0x98,
+ 0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,
+ 0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,
+ 0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,
+ 0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,
+ 0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,0x9d,
+ 0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,0x9e,
+ 0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,
+ 0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,
+ 0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,
+ 0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,
+ 0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,
+ 0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,
+ 0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,
+ 0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,0xa6,
+ 0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,0xa7,
+ 0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,
+ 0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,
+ 0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,
+ 0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,
+ 0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,
+ 0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,
+ 0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,
+ 0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,
+ 0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,0xb0,
+ 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
+ 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,
+ 0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,0xb3,
+ 0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,
+ 0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,0xb5,
+ 0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,0xb6,
+ 0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,
+ 0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,0xb8,
+ 0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,0xb9,
+ 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,
+ 0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,
+ 0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,0xbc,
+ 0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,
+ 0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,0xbe,
+ 0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,
+ 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
+ 0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,0xc1,
+ 0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,0xc2,
+ 0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
+ 0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
+ 0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,0xc5,
+ 0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
+ 0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,0xc7,
+ 0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,0xc8,
+ 0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,
+ 0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,0xca,
+ 0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,0xcb,
+ 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,
+ 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,
+ 0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,0xce,
+ 0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,0xcf,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,
+ 0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,
+ 0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2,
+ 0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,0xd3,
+ 0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,0xd4,
+ 0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,
+ 0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,0xd6,
+ 0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,0xd7,
+ 0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,0xd8,
+ 0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,0xd9,
+ 0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,0xda,
+ 0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,
+ 0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,0xdc,
+ 0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,
+ 0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,
+ 0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,
+ 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,
+ 0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,0xe3,
+ 0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,
+ 0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,
+ 0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,
+ 0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,
+ 0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,
+ 0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,
+ 0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,
+ 0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,0xeb,
+ 0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,
+ 0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,0xed,
+ 0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,
+ 0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,
+ 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
+ 0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,0xf1,
+ 0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,
+ 0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,0xf3,
+ 0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,0xf4,
+ 0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,
+ 0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
+ 0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,
+ 0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,
+ 0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
+ 0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
+ 0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,
+ 0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
+ 0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,
+ 0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0,0xad
+]
+indexLength = 64
+dataLength = 4098
+highStart = 0x1000
+shifted12HighStart = 0x1
+type = 1
+valueWidth = 0
+index3NullOffset = 0x7fff
+dataNullOffset = 0xfffff
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0x10,0,0x20,1,0x30,2,0x40,3,0x50,4,0x60,5,0x70,6,0x80,7,
+ 0x90,8,0xa0,9,0xb0,0xa,0xc0,0xb,0xd0,0xc,0xe0,0xd,0xf0,0xe,0x100,0xf,
+ 0x110,0x10,0x120,0x11,0x130,0x12,0x140,0x13,0x150,0x14,0x160,0x15,0x170,0x16,0x180,0x17,
+ 0x190,0x18,0x1a0,0x19,0x1b0,0x1a,0x1c0,0x1b,0x1d0,0x1c,0x1e0,0x1d,0x1f0,0x1e,0x200,0x1f,
+ 0x210,0x20,0x220,0x21,0x230,0x22,0x240,0x23,0x250,0x24,0x260,0x25,0x270,0x26,0x280,0x27,
+ 0x290,0x28,0x2a0,0x29,0x2b0,0x2a,0x2c0,0x2b,0x2d0,0x2c,0x2e0,0x2d,0x2f0,0x2e,0x300,0x2f,
+ 0x310,0x30,0x320,0x31,0x330,0x32,0x340,0x33,0x350,0x34,0x360,0x35,0x370,0x36,0x380,0x37,
+ 0x390,0x38,0x3a0,0x39,0x3b0,0x3a,0x3c0,0x3b,0x3d0,0x3c,0x3e0,0x3d,0x3f0,0x3e,0x400,0x3f,
+ 0x410,0x40,0x420,0x41,0x430,0x42,0x440,0x43,0x450,0x44,0x460,0x45,0x470,0x46,0x480,0x47,
+ 0x490,0x48,0x4a0,0x49,0x4b0,0x4a,0x4c0,0x4b,0x4d0,0x4c,0x4e0,0x4d,0x4f0,0x4e,0x500,0x4f,
+ 0x510,0x50,0x520,0x51,0x530,0x52,0x540,0x53,0x550,0x54,0x560,0x55,0x570,0x56,0x580,0x57,
+ 0x590,0x58,0x5a0,0x59,0x5b0,0x5a,0x5c0,0x5b,0x5d0,0x5c,0x5e0,0x5d,0x5f0,0x5e,0x600,0x5f,
+ 0x610,0x60,0x620,0x61,0x630,0x62,0x640,0x63,0x650,0x64,0x660,0x65,0x670,0x66,0x680,0x67,
+ 0x690,0x68,0x6a0,0x69,0x6b0,0x6a,0x6c0,0x6b,0x6d0,0x6c,0x6e0,0x6d,0x6f0,0x6e,0x700,0x6f,
+ 0x710,0x70,0x720,0x71,0x730,0x72,0x740,0x73,0x750,0x74,0x760,0x75,0x770,0x76,0x780,0x77,
+ 0x790,0x78,0x7a0,0x79,0x7b0,0x7a,0x7c0,0x7b,0x7d0,0x7c,0x7e0,0x7d,0x7f0,0x7e,0x800,0x7f,
+ 0x810,0x80,0x820,0x81,0x830,0x82,0x840,0x83,0x850,0x84,0x860,0x85,0x870,0x86,0x880,0x87,
+ 0x890,0x88,0x8a0,0x89,0x8b0,0x8a,0x8c0,0x8b,0x8d0,0x8c,0x8e0,0x8d,0x8f0,0x8e,0x900,0x8f,
+ 0x910,0x90,0x920,0x91,0x930,0x92,0x940,0x93,0x950,0x94,0x960,0x95,0x970,0x96,0x980,0x97,
+ 0x990,0x98,0x9a0,0x99,0x9b0,0x9a,0x9c0,0x9b,0x9d0,0x9c,0x9e0,0x9d,0x9f0,0x9e,0xa00,0x9f,
+ 0xa10,0xa0,0xa20,0xa1,0xa30,0xa2,0xa40,0xa3,0xa50,0xa4,0xa60,0xa5,0xa70,0xa6,0xa80,0xa7,
+ 0xa90,0xa8,0xaa0,0xa9,0xab0,0xaa,0xac0,0xab,0xad0,0xac,0xae0,0xad,0xaf0,0xae,0xb00,0xaf,
+ 0xb10,0xb0,0xb20,0xb1,0xb30,0xb2,0xb40,0xb3,0xb50,0xb4,0xb60,0xb5,0xb70,0xb6,0xb80,0xb7,
+ 0xb90,0xb8,0xba0,0xb9,0xbb0,0xba,0xbc0,0xbb,0xbd0,0xbc,0xbe0,0xbd,0xbf0,0xbe,0xc00,0xbf,
+ 0xc10,0xc0,0xc20,0xc1,0xc30,0xc2,0xc40,0xc3,0xc50,0xc4,0xc60,0xc5,0xc70,0xc6,0xc80,0xc7,
+ 0xc90,0xc8,0xca0,0xc9,0xcb0,0xca,0xcc0,0xcb,0xcd0,0xcc,0xce0,0xcd,0xcf0,0xce,0xd00,0xcf,
+ 0xd10,0xd0,0xd20,0xd1,0xd30,0xd2,0xd40,0xd3,0xd50,0xd4,0xd60,0xd5,0xd70,0xd6,0xd80,0xd7,
+ 0xd90,0xd8,0xda0,0xd9,0xdb0,0xda,0xdc0,0xdb,0xdd0,0xdc,0xde0,0xdd,0xdf0,0xde,0xe00,0xdf,
+ 0xe10,0xe0,0xe20,0xe1,0xe30,0xe2,0xe40,0xe3,0xe50,0xe4,0xe60,0xe5,0xe70,0xe6,0xe80,0xe7,
+ 0xe90,0xe8,0xea0,0xe9,0xeb0,0xea,0xec0,0xeb,0xed0,0xec,0xee0,0xed,0xef0,0xee,0xf00,0xef,
+ 0xf10,0xf0,0xf20,0xf1,0xf30,0xf2,0xf40,0xf3,0xf50,0xf4,0xf60,0xf5,0xf70,0xf6,0xf80,0xf7,
+ 0xf90,0xf8,0xfa0,0xf9,0xfb0,0xfa,0xfc0,0xfb,0xfd0,0xfc,0xfe0,0xfd,0xff0,0xfe,0x1000,0xff,
+ 0x110000,0
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.16.toml
new file mode 100644
index 00000000000..56163ddaad9
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.16.toml
@@ -0,0 +1,116 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: small0-in-fast.16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "small0-in-fast.16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0x80,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0xd0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0x424,0x424,0x424,0x424,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,
+ 0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,
+ 0xd1,0xd1,0xd1,0xd1,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,
+ 0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,
+ 0x404,0x404,0x404,0x404
+]
+data_16 = [
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,0xad,9,0xad
+]
+indexLength = 1092
+dataLength = 292
+highStart = 0x20000
+shifted12HighStart = 0x20
+type = 0
+valueWidth = 0
+index3NullOffset = 0x404
+dataNullOffset = 0xd1
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0x880,1,0x890,0,0x1040,2,0x1051,0,0x10000,3,0x20000,0,0x110000,9
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.32.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.32.toml
new file mode 100644
index 00000000000..9d4685ba2f8
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.32.toml
@@ -0,0 +1,116 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: small0-in-fast.32
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "small0-in-fast.32"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0x80,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0xd0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0x424,0x424,0x424,0x424,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,
+ 0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,
+ 0xd1,0xd1,0xd1,0xd1,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,
+ 0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,
+ 0x404,0x404,0x404,0x404
+]
+data_32 = [
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,9,0xad
+]
+indexLength = 1092
+dataLength = 291
+highStart = 0x20000
+shifted12HighStart = 0x20
+type = 0
+valueWidth = 1
+index3NullOffset = 0x404
+dataNullOffset = 0xd1
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0x880,1,0x890,0,0x1040,2,0x1051,0,0x10000,3,0x20000,0,0x110000,9
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.8.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.8.toml
new file mode 100644
index 00000000000..8f42007065c
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.8.toml
@@ -0,0 +1,116 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: small0-in-fast.8
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "small0-in-fast.8"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0x80,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0xd0,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,
+ 0x424,0x424,0x424,0x424,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,
+ 0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,0xd1,
+ 0xd1,0xd1,0xd1,0xd1,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,
+ 0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,
+ 0x404,0x404,0x404,0x404
+]
+data_8 = [
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 3,9,9,0xad
+]
+indexLength = 1092
+dataLength = 292
+highStart = 0x20000
+shifted12HighStart = 0x20
+type = 0
+valueWidth = 2
+index3NullOffset = 0x404
+dataNullOffset = 0xd1
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0x880,1,0x890,0,0x1040,2,0x1051,0,0x10000,3,0x20000,0,0x110000,9
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.small16.toml b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.small16.toml
new file mode 100644
index 00000000000..dd203a39de6
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/codepointtrie/small0-in-fast.small16.toml
@@ -0,0 +1,63 @@
+# Copyright (C) 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+#
+# file name: small0-in-fast.small16
+#
+# machine-generated by: ucptrietest.c
+
+[code_point_trie.struct]
+name = "small0-in-fast.small16"
+index = [
+ 0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0x80,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
+ 0xda,0xe3,0xe3,0xe3,0x103,0x103,0x103,0x103,0,0x10,0x20,0x30,0x40,0x50,0x60,0x70,
+ 0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,
+ 0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,
+ 0x80,0x90,0xa0,0xb0,0x90,0xa0,0xb0,0xc0,0x90,0xa0,0xb0,0xc0,0x90,0xa0,0xb0,0xc0,
+ 0x90,0xa0,0xb0,0xc0,0x90,0xa0,0xb0,0xc0,0x90,0xa0,0xb0,0xc0,0x90,0xa0,0xb0,0xc0,
+ 0x90,0xa0,0xb0,0xc0,0x90,0x90,0x90,0x90,0xd0,0xdf,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
+ 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,
+ 0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,
+ 0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0xd0,0x48,0x50,0x50,0x50,0x68,0x74,
+ 0x74,0x74,0x94,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,
+ 0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,
+ 0x9a,0x9a,0x9a,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,
+ 0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,
+ 0xba,0xba,0xba
+]
+data_16 = [
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ 0xad,9,0xad
+]
+indexLength = 291
+dataLength = 243
+highStart = 0x20000
+shifted12HighStart = 0x20
+type = 1
+valueWidth = 0
+index3NullOffset = 0xba
+dataNullOffset = 0xd0
+nullValue = 0x0
+
+[code_point_trie.testdata]
+# Array of (limit, value) pairs
+checkRanges = [
+ 0x880,1,0x890,0,0x1040,2,0x1051,0,0x10000,3,0x20000,0,0x110000,9
+]
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/idna_conf.txt b/Build/source/libs/icu/icu-src/source/test/testdata/idna_conf.txt
index 8f2650dc94d..46a122331f5 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/idna_conf.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/idna_conf.txt
@@ -1233,7 +1233,7 @@ passfail: pass
type: toascii
=====
-desc: 5-1-2 Unassinged outside BMP; zone editors should reject
+desc: 5-1-2 Unassigned outside BMP; zone editors should reject
namebase: <10205><00ED>dn
nameutf8: ídn
namezone: xn--dn-mja7734x
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt b/Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt
index e41eaac05a7..a7a8d890617 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/localeCanonicalization.txt
@@ -275,11 +275,11 @@ nld ; nl
nno ; nn
nns ; nbr
nnx ; ngv
-no ; nb
+no ; no
no_bokmal ; nb
no_nynorsk ; nn
nob ; nb
-nor ; nb
+nor ; no
npi ; ne
nts ; pij
nya ; ny
@@ -1462,10 +1462,10 @@ nns_Adlm_AC_fonipa ; nbr_Adlm_AC_fonipa
nnx_Adlm_AC_fonipa ; ngv_Adlm_AC_fonipa
no_Adlm_AC_bokmal_fonipa ; nb_Adlm_AC_fonipa
no_Adlm_AC_bokmal_fonipa_nynorsk ; nb_Adlm_AC_fonipa
-no_Adlm_AC_fonipa ; nb_Adlm_AC_fonipa
+no_Adlm_AC_fonipa ; no_Adlm_AC_fonipa
no_Adlm_AC_fonipa_nynorsk ; nn_Adlm_AC_fonipa
nob_Adlm_AC_fonipa ; nb_Adlm_AC_fonipa
-nor_Adlm_AC_fonipa ; nb_Adlm_AC_fonipa
+nor_Adlm_AC_fonipa ; no_Adlm_AC_fonipa
npi_Adlm_AC_fonipa ; ne_Adlm_AC_fonipa
nts_Adlm_AC_fonipa ; pij_Adlm_AC_fonipa
nya_Adlm_AC_fonipa ; ny_Adlm_AC_fonipa
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt
index 6d21303fe2d..9d92efd2328 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/localeMatcherTest.txt
@@ -270,14 +270,14 @@ und-TW >> zh-Hant # und-TW should be closer to zh-Hant than to zh
@supported=en-Hant-TW, und-TW
zh-Hant >> und-TW # zh-Hant should be closer to und-TW than to en-Hant-TW
-zh >> und-TW # zh should be closer to und-TW than to en-Hant-TW
+zh >> en-Hant-TW # no match so get first
@favor=script
@supported=zh, zh-Hant
und-TW >> zh-Hant
@supported=en-Hant-TW, und-TW
zh-Hant >> und-TW
-zh >> und-TW
+zh >> en-Hant-TW # no match so get first
** test: testMatchLegacyCode
@@ -344,8 +344,8 @@ de-CH, fr >> de
# to be an acceptable match. The regional difference is considered almost insignificant.
@supported=fr, zh-Hans-CN, en-US
-zh-TW >> zh-Hans-CN
-zh-Hant >> zh-Hans-CN
+zh-TW >> fr # no match so get first
+zh-Hant >> fr # no match so get first
# For geopolitical reasons, you might want to avoid a zh-Hant -> zh-Hans match.
# In this case, if zh-TW, zh-HK or a tag starting with zh-Hant is requested, you can
@@ -358,8 +358,8 @@ zh-Hant-CN, en >> en-US
zh-Hans, en >> zh-Hans-CN
@favor=script
-zh-TW >> zh-Hans-CN
-zh-Hant >> zh-Hans-CN
+zh-TW >> fr # no match so get first
+zh-Hant >> fr # no match so get first
zh-TW, en >> en-US
zh-Hant-CN, en >> en-US
zh-Hans, en >> zh-Hans-CN
@@ -404,7 +404,7 @@ en >> it
@supported=es-AR, es
es-MX >> es-AR
@supported=fr, en, en-GB
-en-CA >> en-GB
+en-CA >> en
@supported=de-AT, de-DE, de-CH
de >> de-DE
@@ -412,7 +412,7 @@ de >> de-DE
@supported=es-AR, es
es-MX >> es-AR
@supported=fr, en, en-GB
-en-CA >> en-GB
+en-CA >> en
@supported=de-AT, de-DE, de-CH
de >> de-DE
@@ -837,7 +837,7 @@ pt-US, pt-PT >> pt
** test: TestScriptAndRegion
@supported=en-GB, en
-en-CA >> en-GB
+en-CA >> en
# fr-CA is a "close enough" match to "fr" to be returned in favor of "en-GB"
@supported=fr, en-GB, en
fr-CA, en-CA >> fr
@@ -846,7 +846,7 @@ zh-HK >> zh-Hant
@favor=script
@supported=en-GB, en
-en-CA >> en-GB
+en-CA >> en
@supported=fr, en-GB, en
fr-CA, en-CA >> fr
@supported=zh-Hant, zh-TW
@@ -1077,8 +1077,8 @@ ar-PSCRACK >> ar-PSCRACK
# enough to be an acceptable match. The regional difference is considered
# almost insignificant.
@supported=fr, zh-Hans-CN, en-US
-zh-TW >> zh-Hans-CN
-zh-Hant >> zh-Hans-CN
+zh-TW >> fr # no match so get first
+zh-Hant >> fr # no match so get first
# For geopolitical reasons, you might want to avoid a zh-Hant -> zh-Hans
# match. In this case, if zh-TW, zh-HK or a tag starting with zh-Hant is
@@ -1129,7 +1129,7 @@ fr >> fr
@default=und
es-001 >> es
und >> und
-ca >> und
+ca >> es
gl-ES >> es
es >> es
es-MX >> es-MX
@@ -1215,7 +1215,7 @@ es-VE >> es-MX
@default=und
es-001 >> es
und >> und
-ca >> und
+ca >> es
gl-ES >> es
es >> es
es-419 >> es-419
@@ -1306,7 +1306,6 @@ fr-CA >> und
# Great Britain fallback
en-AU >> en-GB
en-BZ >> en-GB
-en-CA >> en-GB
en-IN >> en-GB
en-IE >> en-GB
en-JM >> en-GB
@@ -1316,6 +1315,7 @@ en-TT >> en-GB
en-ZA >> en-GB
# United States fallback
+en-CA >> en-US
en-US >> en-US
en >> en-US
@@ -1325,7 +1325,7 @@ ja >> und
fr-CA >> en-US
en-AU >> en-GB
en-BZ >> en-GB
-en-CA >> en-GB
+en-CA >> en-US
en-IN >> en-GB
en-IE >> en-GB
en-JM >> en-GB
@@ -1538,8 +1538,8 @@ de, zh >> fr
** test: best match for traditional Chinese
@supported=fr, zh-Hans-CN, en-US
-zh-TW >> zh-Hans-CN
-zh-Hant >> zh-Hans-CN
+zh-TW >> fr # no match so get first
+zh-Hant >> fr # no match so get first
zh-TW, en >> en-US
zh-Hant-CN, en >> en-US
zh-Hans, en >> zh-Hans-CN
@@ -1646,14 +1646,14 @@ en >> it
und-FR >> fr
und-CN >> zh
und-Hans >> zh
-und-Hant >> zh
+und-Hant >> it # no match so get first
und-Latn >> it
@favor=script
und-FR >> fr
und-CN >> zh
und-Hans >> zh
-und-Hant >> zh
+und-Hant >> it # no match so get first
und-Latn >> it
** test: match on maximized tag
@@ -1877,10 +1877,10 @@ es-MX >> es-419
** test: testLooseMatchForEnglish_getBestMatches
@supported=en, en-GB
-en-CA >> en-GB
+en-CA >> en
@favor=script
-en-CA >> en-GB
+en-CA >> en
** test: testLooseMatchForChinese_getBestMatches
@supported=zh
@@ -1918,7 +1918,7 @@ en >> und
@supported=en, uk
ru >> und
@supported=zh-TW, en
-zh-CN >> zh-TW
+zh-CN >> und # no match
@supported=ja
ru >> und
@@ -1948,7 +1948,7 @@ en >> iw-Latn
@supported=en, uk
ru >> uk
@supported=zh-TW, en
-zh-CN >> zh-TW
+zh-CN >> und # no match
@supported=ja
ru >> und
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt b/Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt
index 9767baa8f8f..78647fa4f54 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/numberpermutationtest.txt
@@ -59,9 +59,9 @@ compact-short currency/EUR unit-width-full-name
compact-short measure-unit/length-furlong unit-width-narrow
es-MX
- 0 fur
- 92 k fur
- -0.22 fur
+ 0fur
+ 92 kfur
+ -0.22fur
zh-TW
0化朗
9.2萬化朗
@@ -143,9 +143,9 @@ scientific/+ee/sign-always currency/EUR unit-width-full-name
scientific/+ee/sign-always measure-unit/length-furlong unit-width-narrow
es-MX
- 0E+00 fur
- 9.182736E+04 fur
- -2.2222E-01 fur
+ 0E+00fur
+ 9.182736E+04fur
+ -2.2222E-01fur
zh-TW
0E+00化朗
9.182736E+04化朗
@@ -3307,9 +3307,9 @@ currency/EUR unit-width-full-name @@
measure-unit/length-furlong unit-width-narrow precision-integer
es-MX
- 0 fur
- 91,827 fur
- -0 fur
+ 0fur
+ 91,827fur
+ -0fur
zh-TW
0化朗
91,827化朗
@@ -3321,9 +3321,9 @@ measure-unit/length-furlong unit-width-narrow precision-integer
measure-unit/length-furlong unit-width-narrow .000
es-MX
- 0.000 fur
- 91,827.364 fur
- -0.222 fur
+ 0.000fur
+ 91,827.364fur
+ -0.222fur
zh-TW
0.000化朗
91,827.364化朗
@@ -3335,9 +3335,9 @@ measure-unit/length-furlong unit-width-narrow .000
measure-unit/length-furlong unit-width-narrow .##/@@@+
es-MX
- 0 fur
- 91,827.36 fur
- -0.222 fur
+ 0fur
+ 91,827.36fur
+ -0.222fur
zh-TW
0化朗
91,827.36化朗
@@ -3349,9 +3349,9 @@ measure-unit/length-furlong unit-width-narrow .##/@@@+
measure-unit/length-furlong unit-width-narrow @@
es-MX
- 0.0 fur
- 92,000 fur
- -0.22 fur
+ 0.0fur
+ 92,000fur
+ -0.22fur
zh-TW
0.0化朗
92,000化朗
@@ -3475,9 +3475,9 @@ currency/EUR unit-width-full-name rounding-mode-floor
measure-unit/length-furlong unit-width-narrow rounding-mode-floor
es-MX
- 0 fur
- 91,827.3645 fur
- -0.22222 fur
+ 0fur
+ 91,827.3645fur
+ -0.22222fur
zh-TW
0化朗
91,827.3645化朗
@@ -3504,7 +3504,7 @@ measure-unit/length-furlong unit-width-full-name rounding-mode-floor
percent unit-width-narrow integer-width/##00
es-MX
00 %
- 1827.3645 %
+ 1,827.3645 %
-00.22222 %
zh-TW
00%
@@ -3518,7 +3518,7 @@ percent unit-width-narrow integer-width/##00
percent unit-width-full-name integer-width/##00
es-MX
00 por ciento
- 1827.3645 por ciento
+ 1,827.3645 por ciento
-00.22222 por ciento
zh-TW
00%
@@ -3532,7 +3532,7 @@ percent unit-width-full-name integer-width/##00
currency/EUR unit-width-narrow integer-width/##00
es-MX
€00.00
- €1827.36
+ €1,827.36
-€00.22
zh-TW
€00.00
@@ -3546,7 +3546,7 @@ currency/EUR unit-width-narrow integer-width/##00
currency/EUR unit-width-full-name integer-width/##00
es-MX
00.00 euros
- 1827.36 euros
+ 1,827.36 euros
-00.22 euros
zh-TW
00.00 歐元
@@ -3559,9 +3559,9 @@ currency/EUR unit-width-full-name integer-width/##00
measure-unit/length-furlong unit-width-narrow integer-width/##00
es-MX
- 00 fur
- 1827.3645 fur
- -00.22222 fur
+ 00fur
+ 1,827.3645fur
+ -00.22222fur
zh-TW
00化朗
1,827.3645化朗
@@ -3574,7 +3574,7 @@ measure-unit/length-furlong unit-width-narrow integer-width/##00
measure-unit/length-furlong unit-width-full-name integer-width/##00
es-MX
00 furlongs
- 1827.3645 furlongs
+ 1,827.3645 furlongs
-00.22222 furlongs
zh-TW
00 化朗
@@ -3643,9 +3643,9 @@ currency/EUR unit-width-full-name scale/0.5
measure-unit/length-furlong unit-width-narrow scale/0.5
es-MX
- 0 fur
- 45,913.68225 fur
- -0.11111 fur
+ 0fur
+ 45,913.68225fur
+ -0.11111fur
zh-TW
0化朗
45,913.68225化朗
@@ -3727,9 +3727,9 @@ currency/EUR unit-width-full-name group-on-aligned
measure-unit/length-furlong unit-width-narrow group-on-aligned
es-MX
- 0 fur
- 91,827.3645 fur
- -0.22222 fur
+ 0fur
+ 91,827.3645fur
+ -0.22222fur
zh-TW
0化朗
91,827.3645化朗
@@ -3811,9 +3811,9 @@ currency/EUR unit-width-full-name latin
measure-unit/length-furlong unit-width-narrow latin
es-MX
- 0 fur
- 91,827.3645 fur
- -0.22222 fur
+ 0fur
+ 91,827.3645fur
+ -0.22222fur
zh-TW
0化朗
91,827.3645化朗
@@ -3895,9 +3895,9 @@ currency/EUR unit-width-full-name sign-accounting-except-zero
measure-unit/length-furlong unit-width-narrow sign-accounting-except-zero
es-MX
- 0 fur
- +91,827.3645 fur
- -0.22222 fur
+ 0fur
+ +91,827.3645fur
+ -0.22222fur
zh-TW
0化朗
+91,827.3645化朗
@@ -3979,9 +3979,9 @@ currency/EUR unit-width-full-name decimal-always
measure-unit/length-furlong unit-width-narrow decimal-always
es-MX
- 0. fur
- 91,827.3645 fur
- -0.22222 fur
+ 0.fur
+ 91,827.3645fur
+ -0.22222fur
zh-TW
0.化朗
91,827.3645化朗
@@ -4176,7 +4176,7 @@ measure-unit/length-furlong @@ rounding-mode-floor
percent precision-integer integer-width/##00
es-MX
00 %
- 1827 %
+ 1,827 %
-00 %
zh-TW
00%
@@ -4190,7 +4190,7 @@ percent precision-integer integer-width/##00
percent .000 integer-width/##00
es-MX
00.000 %
- 1827.364 %
+ 1,827.364 %
-00.222 %
zh-TW
00.000%
@@ -4204,7 +4204,7 @@ percent .000 integer-width/##00
percent .##/@@@+ integer-width/##00
es-MX
00 %
- 1827.36 %
+ 1,827.36 %
-00.222 %
zh-TW
00%
@@ -4218,7 +4218,7 @@ percent .##/@@@+ integer-width/##00
percent @@ integer-width/##00
es-MX
00.0 %
- 2000 %
+ 2,000 %
-00.22 %
zh-TW
00.0%
@@ -4232,7 +4232,7 @@ percent @@ integer-width/##00
currency/EUR precision-integer integer-width/##00
es-MX
EUR 00
- EUR 1827
+ EUR 1,827
-EUR 00
zh-TW
€00
@@ -4246,7 +4246,7 @@ currency/EUR precision-integer integer-width/##00
currency/EUR .000 integer-width/##00
es-MX
EUR 00.000
- EUR 1827.364
+ EUR 1,827.364
-EUR 00.222
zh-TW
€00.000
@@ -4260,7 +4260,7 @@ currency/EUR .000 integer-width/##00
currency/EUR .##/@@@+ integer-width/##00
es-MX
EUR 00
- EUR 1827.36
+ EUR 1,827.36
-EUR 00.222
zh-TW
€00
@@ -4274,7 +4274,7 @@ currency/EUR .##/@@@+ integer-width/##00
currency/EUR @@ integer-width/##00
es-MX
EUR 00.0
- EUR 2000
+ EUR 2,000
-EUR 00.22
zh-TW
€00.0
@@ -4288,7 +4288,7 @@ currency/EUR @@ integer-width/##00
measure-unit/length-furlong precision-integer integer-width/##00
es-MX
00 fur
- 1827 fur
+ 1,827 fur
-00 fur
zh-TW
00 化朗
@@ -4302,7 +4302,7 @@ measure-unit/length-furlong precision-integer integer-width/##00
measure-unit/length-furlong .000 integer-width/##00
es-MX
00.000 fur
- 1827.364 fur
+ 1,827.364 fur
-00.222 fur
zh-TW
00.000 化朗
@@ -4316,7 +4316,7 @@ measure-unit/length-furlong .000 integer-width/##00
measure-unit/length-furlong .##/@@@+ integer-width/##00
es-MX
00 fur
- 1827.36 fur
+ 1,827.36 fur
-00.222 fur
zh-TW
00 化朗
@@ -4330,7 +4330,7 @@ measure-unit/length-furlong .##/@@@+ integer-width/##00
measure-unit/length-furlong @@ integer-width/##00
es-MX
00.0 fur
- 2000 fur
+ 2,000 fur
-00.22 fur
zh-TW
00.0 化朗
@@ -5184,7 +5184,7 @@ measure-unit/length-furlong @@ decimal-always
percent rounding-mode-floor integer-width/##00
es-MX
00 %
- 1827.3645 %
+ 1,827.3645 %
-00.22222 %
zh-TW
00%
@@ -5198,7 +5198,7 @@ percent rounding-mode-floor integer-width/##00
currency/EUR rounding-mode-floor integer-width/##00
es-MX
EUR 00.00
- EUR 1827.36
+ EUR 1,827.36
-EUR 00.23
zh-TW
€00.00
@@ -5212,7 +5212,7 @@ currency/EUR rounding-mode-floor integer-width/##00
measure-unit/length-furlong rounding-mode-floor integer-width/##00
es-MX
00 fur
- 1827.3645 fur
+ 1,827.3645 fur
-00.22222 fur
zh-TW
00 化朗
@@ -5436,7 +5436,7 @@ measure-unit/length-furlong rounding-mode-floor decimal-always
percent integer-width/##00 scale/0.5
es-MX
00 %
- 5913.68225 %
+ 5,913.68225 %
-00.11111 %
zh-TW
00%
@@ -5450,7 +5450,7 @@ percent integer-width/##00 scale/0.5
currency/EUR integer-width/##00 scale/0.5
es-MX
EUR 00.00
- EUR 5913.68
+ EUR 5,913.68
-EUR 00.11
zh-TW
€00.00
@@ -5464,7 +5464,7 @@ currency/EUR integer-width/##00 scale/0.5
measure-unit/length-furlong integer-width/##00 scale/0.5
es-MX
00 fur
- 5913.68225 fur
+ 5,913.68225 fur
-00.11111 fur
zh-TW
00 化朗
@@ -5520,7 +5520,7 @@ measure-unit/length-furlong integer-width/##00 group-on-aligned
percent integer-width/##00 latin
es-MX
00 %
- 1827.3645 %
+ 1,827.3645 %
-00.22222 %
zh-TW
00%
@@ -5534,7 +5534,7 @@ percent integer-width/##00 latin
currency/EUR integer-width/##00 latin
es-MX
EUR 00.00
- EUR 1827.36
+ EUR 1,827.36
-EUR 00.22
zh-TW
€00.00
@@ -5548,7 +5548,7 @@ currency/EUR integer-width/##00 latin
measure-unit/length-furlong integer-width/##00 latin
es-MX
00 fur
- 1827.3645 fur
+ 1,827.3645 fur
-00.22222 fur
zh-TW
00 化朗
@@ -5562,7 +5562,7 @@ measure-unit/length-furlong integer-width/##00 latin
percent integer-width/##00 sign-accounting-except-zero
es-MX
00 %
- +1827.3645 %
+ +1,827.3645 %
-00.22222 %
zh-TW
00%
@@ -5576,7 +5576,7 @@ percent integer-width/##00 sign-accounting-except-zero
currency/EUR integer-width/##00 sign-accounting-except-zero
es-MX
EUR 00.00
- +EUR 1827.36
+ +EUR 1,827.36
-EUR 00.22
zh-TW
€00.00
@@ -5590,7 +5590,7 @@ currency/EUR integer-width/##00 sign-accounting-except-zero
measure-unit/length-furlong integer-width/##00 sign-accounting-except-zero
es-MX
00 fur
- +1827.3645 fur
+ +1,827.3645 fur
-00.22222 fur
zh-TW
00 化朗
@@ -5604,7 +5604,7 @@ measure-unit/length-furlong integer-width/##00 sign-accounting-except-zero
percent integer-width/##00 decimal-always
es-MX
00. %
- 1827.3645 %
+ 1,827.3645 %
-00.22222 %
zh-TW
00.%
@@ -5618,7 +5618,7 @@ percent integer-width/##00 decimal-always
currency/EUR integer-width/##00 decimal-always
es-MX
EUR 00.00
- EUR 1827.36
+ EUR 1,827.36
-EUR 00.22
zh-TW
€00.00
@@ -5632,7 +5632,7 @@ currency/EUR integer-width/##00 decimal-always
measure-unit/length-furlong integer-width/##00 decimal-always
es-MX
00. fur
- 1827.3645 fur
+ 1,827.3645 fur
-00.22222 fur
zh-TW
00. 化朗
@@ -6178,7 +6178,7 @@ unit-width-full-name @@ rounding-mode-floor
unit-width-narrow precision-integer integer-width/##00
es-MX
00
- 1827
+ 1,827
-00
zh-TW
00
@@ -6192,7 +6192,7 @@ unit-width-narrow precision-integer integer-width/##00
unit-width-narrow .000 integer-width/##00
es-MX
00.000
- 1827.364
+ 1,827.364
-00.222
zh-TW
00.000
@@ -6206,7 +6206,7 @@ unit-width-narrow .000 integer-width/##00
unit-width-narrow .##/@@@+ integer-width/##00
es-MX
00
- 1827.36
+ 1,827.36
-00.222
zh-TW
00
@@ -6220,7 +6220,7 @@ unit-width-narrow .##/@@@+ integer-width/##00
unit-width-narrow @@ integer-width/##00
es-MX
00.0
- 2000
+ 2,000
-00.22
zh-TW
00.0
@@ -6234,7 +6234,7 @@ unit-width-narrow @@ integer-width/##00
unit-width-full-name precision-integer integer-width/##00
es-MX
00
- 1827
+ 1,827
-00
zh-TW
00
@@ -6248,7 +6248,7 @@ unit-width-full-name precision-integer integer-width/##00
unit-width-full-name .000 integer-width/##00
es-MX
00.000
- 1827.364
+ 1,827.364
-00.222
zh-TW
00.000
@@ -6262,7 +6262,7 @@ unit-width-full-name .000 integer-width/##00
unit-width-full-name .##/@@@+ integer-width/##00
es-MX
00
- 1827.36
+ 1,827.36
-00.222
zh-TW
00
@@ -6276,7 +6276,7 @@ unit-width-full-name .##/@@@+ integer-width/##00
unit-width-full-name @@ integer-width/##00
es-MX
00.0
- 2000
+ 2,000
-00.22
zh-TW
00.0
@@ -6850,7 +6850,7 @@ unit-width-full-name @@ decimal-always
unit-width-narrow rounding-mode-floor integer-width/##00
es-MX
00
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00
@@ -6864,7 +6864,7 @@ unit-width-narrow rounding-mode-floor integer-width/##00
unit-width-full-name rounding-mode-floor integer-width/##00
es-MX
00
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00
@@ -7018,7 +7018,7 @@ unit-width-full-name rounding-mode-floor decimal-always
unit-width-narrow integer-width/##00 scale/0.5
es-MX
00
- 5913.68225
+ 5,913.68225
-00.11111
zh-TW
00
@@ -7032,7 +7032,7 @@ unit-width-narrow integer-width/##00 scale/0.5
unit-width-full-name integer-width/##00 scale/0.5
es-MX
00
- 5913.68225
+ 5,913.68225
-00.11111
zh-TW
00
@@ -7074,7 +7074,7 @@ unit-width-full-name integer-width/##00 group-on-aligned
unit-width-narrow integer-width/##00 latin
es-MX
00
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00
@@ -7088,7 +7088,7 @@ unit-width-narrow integer-width/##00 latin
unit-width-full-name integer-width/##00 latin
es-MX
00
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00
@@ -7102,7 +7102,7 @@ unit-width-full-name integer-width/##00 latin
unit-width-narrow integer-width/##00 sign-accounting-except-zero
es-MX
00
- +1827.3645
+ +1,827.3645
-00.22222
zh-TW
00
@@ -7116,7 +7116,7 @@ unit-width-narrow integer-width/##00 sign-accounting-except-zero
unit-width-full-name integer-width/##00 sign-accounting-except-zero
es-MX
00
- +1827.3645
+ +1,827.3645
-00.22222
zh-TW
00
@@ -7130,7 +7130,7 @@ unit-width-full-name integer-width/##00 sign-accounting-except-zero
unit-width-narrow integer-width/##00 decimal-always
es-MX
00.
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00.
@@ -7144,7 +7144,7 @@ unit-width-narrow integer-width/##00 decimal-always
unit-width-full-name integer-width/##00 decimal-always
es-MX
00.
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00.
@@ -7438,7 +7438,7 @@ unit-width-full-name sign-accounting-except-zero decimal-always
precision-integer rounding-mode-floor integer-width/##00
es-MX
00
- 1827
+ 1,827
-01
zh-TW
00
@@ -7452,7 +7452,7 @@ precision-integer rounding-mode-floor integer-width/##00
.000 rounding-mode-floor integer-width/##00
es-MX
00.000
- 1827.364
+ 1,827.364
-00.223
zh-TW
00.000
@@ -7466,7 +7466,7 @@ precision-integer rounding-mode-floor integer-width/##00
.##/@@@+ rounding-mode-floor integer-width/##00
es-MX
00
- 1827.36
+ 1,827.36
-00.223
zh-TW
00
@@ -7480,7 +7480,7 @@ precision-integer rounding-mode-floor integer-width/##00
@@ rounding-mode-floor integer-width/##00
es-MX
00.0
- 1000
+ 1,000
-00.23
zh-TW
00.0
@@ -7774,7 +7774,7 @@ precision-integer rounding-mode-floor decimal-always
precision-integer integer-width/##00 scale/0.5
es-MX
00
- 5914
+ 5,914
-00
zh-TW
00
@@ -7788,7 +7788,7 @@ precision-integer integer-width/##00 scale/0.5
.000 integer-width/##00 scale/0.5
es-MX
00.000
- 5913.682
+ 5,913.682
-00.111
zh-TW
00.000
@@ -7802,7 +7802,7 @@ precision-integer integer-width/##00 scale/0.5
.##/@@@+ integer-width/##00 scale/0.5
es-MX
00
- 5913.68
+ 5,913.68
-00.111
zh-TW
00
@@ -7816,7 +7816,7 @@ precision-integer integer-width/##00 scale/0.5
@@ integer-width/##00 scale/0.5
es-MX
00.0
- 6000
+ 6,000
-00.11
zh-TW
00.0
@@ -7886,7 +7886,7 @@ precision-integer integer-width/##00 group-on-aligned
precision-integer integer-width/##00 latin
es-MX
00
- 1827
+ 1,827
-00
zh-TW
00
@@ -7900,7 +7900,7 @@ precision-integer integer-width/##00 latin
.000 integer-width/##00 latin
es-MX
00.000
- 1827.364
+ 1,827.364
-00.222
zh-TW
00.000
@@ -7914,7 +7914,7 @@ precision-integer integer-width/##00 latin
.##/@@@+ integer-width/##00 latin
es-MX
00
- 1827.36
+ 1,827.36
-00.222
zh-TW
00
@@ -7928,7 +7928,7 @@ precision-integer integer-width/##00 latin
@@ integer-width/##00 latin
es-MX
00.0
- 2000
+ 2,000
-00.22
zh-TW
00.0
@@ -7942,7 +7942,7 @@ precision-integer integer-width/##00 latin
precision-integer integer-width/##00 sign-accounting-except-zero
es-MX
00
- +1827
+ +1,827
00
zh-TW
00
@@ -7956,7 +7956,7 @@ precision-integer integer-width/##00 sign-accounting-except-zero
.000 integer-width/##00 sign-accounting-except-zero
es-MX
00.000
- +1827.364
+ +1,827.364
-00.222
zh-TW
00.000
@@ -7970,7 +7970,7 @@ precision-integer integer-width/##00 sign-accounting-except-zero
.##/@@@+ integer-width/##00 sign-accounting-except-zero
es-MX
00
- +1827.36
+ +1,827.36
-00.222
zh-TW
00
@@ -7984,7 +7984,7 @@ precision-integer integer-width/##00 sign-accounting-except-zero
@@ integer-width/##00 sign-accounting-except-zero
es-MX
00.0
- +2000
+ +2,000
-00.22
zh-TW
00.0
@@ -7998,7 +7998,7 @@ precision-integer integer-width/##00 sign-accounting-except-zero
precision-integer integer-width/##00 decimal-always
es-MX
00.
- 1827.
+ 1,827.
-00.
zh-TW
00.
@@ -8012,7 +8012,7 @@ precision-integer integer-width/##00 decimal-always
.000 integer-width/##00 decimal-always
es-MX
00.000
- 1827.364
+ 1,827.364
-00.222
zh-TW
00.000
@@ -8026,7 +8026,7 @@ precision-integer integer-width/##00 decimal-always
.##/@@@+ integer-width/##00 decimal-always
es-MX
00.
- 1827.36
+ 1,827.36
-00.222
zh-TW
00.
@@ -8040,7 +8040,7 @@ precision-integer integer-width/##00 decimal-always
@@ integer-width/##00 decimal-always
es-MX
00.0
- 2000.
+ 2,000.
-00.22
zh-TW
00.0
@@ -8614,7 +8614,7 @@ precision-integer sign-accounting-except-zero decimal-always
rounding-mode-floor integer-width/##00 scale/0.5
es-MX
00
- 5913.68225
+ 5,913.68225
-00.11111
zh-TW
00
@@ -8642,7 +8642,7 @@ rounding-mode-floor integer-width/##00 group-on-aligned
rounding-mode-floor integer-width/##00 latin
es-MX
00
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00
@@ -8656,7 +8656,7 @@ rounding-mode-floor integer-width/##00 latin
rounding-mode-floor integer-width/##00 sign-accounting-except-zero
es-MX
00
- +1827.3645
+ +1,827.3645
-00.22222
zh-TW
00
@@ -8670,7 +8670,7 @@ rounding-mode-floor integer-width/##00 sign-accounting-except-zero
rounding-mode-floor integer-width/##00 decimal-always
es-MX
00.
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00.
@@ -8838,7 +8838,7 @@ integer-width/##00 scale/0.5 group-on-aligned
integer-width/##00 scale/0.5 latin
es-MX
00
- 5913.68225
+ 5,913.68225
-00.11111
zh-TW
00
@@ -8852,7 +8852,7 @@ integer-width/##00 scale/0.5 latin
integer-width/##00 scale/0.5 sign-accounting-except-zero
es-MX
00
- +5913.68225
+ +5,913.68225
-00.11111
zh-TW
00
@@ -8866,7 +8866,7 @@ integer-width/##00 scale/0.5 sign-accounting-except-zero
integer-width/##00 scale/0.5 decimal-always
es-MX
00.
- 5913.68225
+ 5,913.68225
-00.11111
zh-TW
00.
@@ -8922,7 +8922,7 @@ integer-width/##00 group-on-aligned decimal-always
integer-width/##00 latin sign-accounting-except-zero
es-MX
00
- +1827.3645
+ +1,827.3645
-00.22222
zh-TW
00
@@ -8936,7 +8936,7 @@ integer-width/##00 latin sign-accounting-except-zero
integer-width/##00 latin decimal-always
es-MX
00.
- 1827.3645
+ 1,827.3645
-00.22222
zh-TW
00.
@@ -8950,7 +8950,7 @@ integer-width/##00 latin decimal-always
integer-width/##00 sign-accounting-except-zero decimal-always
es-MX
00.
- +1827.3645
+ +1,827.3645
-00.22222
zh-TW
00.
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt b/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
index 3fae72cba95..7fb30c9e8e3 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
@@ -16,8 +16,8 @@
# <char> any following data is for char break testing
# <title> any following data is for title break testing
# <rules> rules ... </rules> following data is tested against these rules.
-# Applies until a following occurence of <word>, <sent>, etc. or another <rules>
-# <locale locale_name> Switch to the named locale at the next occurence of <word>, <sent>, etc.
+# Applies until a following occurrence of <word>, <sent>, etc. or another <rules>
+# <locale locale_name> Switch to the named locale at the next occurrence of <word>, <sent>, etc.
# <data> ... </data> test data. May span multiple lines.
# <> Break position, status == 0
# • Break position, status == 0 (Bullet, \u2022)
@@ -62,6 +62,11 @@
<data>\
•Doctor with a D. •As in, Ph.D., you know.•</data>
+# ICU-21459 logic error.
+<locale en@ss=standard>
+<sent>
+<data>•on. •But after a day in the arena sun, the metal feels hot enough to blister my hands.•</data>
+
# same as root (unless some exceptions are added!)
<locale tfg@ss=standard>
<sent>
@@ -1158,7 +1163,7 @@ Calls to xxx will return an implementor of this interface. \u2029•</data>
<data>•Parlez-•vous •français ?•</data>
#
-# Old Line Break Test data. Orginally located in RBBITest::TestDefaultRuleBasedLineIteration()
+# Old Line Break Test data. Originally located in RBBITest::TestDefaultRuleBasedLineIteration()
#
<line>
@@ -1321,7 +1326,8 @@ part •of •the •Luang •Prabang •Range •(ทิว•เขา•ห
\u0E14\u0E49\u0E27\u0E22<200>\u0e2b\u0e25\u0e32\u0e22<200>\
\u0e1e\u0e22\u0e32\u0e07\u0e04\u0e4c<200></data>
-# Test data originally from http://bugs.icu-project.org/trac/search?q=r30327
+# Test data originally from
+# ICU-8576 svn r30327 = git commit 62d26cc5fe8cc66696143c44a43d664c2d7be100
<data>•กู<200> •กิน<200>กุ้ง<200> •ปิ้่<200>งอ<200>ยู่<200>ใน<200>ถ้ำ<200></data>
<data>•\u0E01\u0E39<200>\u0020•\u0E01\u0E34\u0E19<200>\u0E01\u0E38\u0E49\u0E07<200>\
@@ -1340,7 +1346,7 @@ part •of •the •Luang •Prabang •Range •(ทิว•เขา•ห
# the end of the word and not treated as an independent punctuation mark.
#
# the one time where the paiyannoi occurs somewhere other than at the end
-# of a word is in the Thai abbrevation for "etc.", which both begins and
+# of a word is in the Thai abbreviation for "etc.", which both begins and
# ends with a paiyannoi
#
<line>
@@ -1433,6 +1439,12 @@ Bangkok)•</data>
<data>•ດີ•ຂອບໃຈ•</data>
<data>•ເຈົ້າ•ເວົ້າ•ພາສາ•ອັງກິດ•ໄດ້•ບໍ່•</data>
<data>•ກະລຸນາ•ເວົ້າ•ຊ້າ•ໆ•</data>
+# More checks for ICU-21413 (check both moved and added entries)
+<line>
+<data>•ກໍ•ກໍ່•ກໍ້•</data>
+<data>•ກວາກຊວາກ•ກະເຈາະກະຈອກ•</data>
+<data>•ກະຊວງປ້ອງກັນຄວາມສະຫງົບ•</data>
+<data>•ໄຮ•ໄຮ່•ໄຮ້•</data>
##########################################################################################
#
@@ -1453,7 +1465,8 @@ Bangkok)•</data>
#
##########################################################################################
-# Test data originally from http://bugs.icu-project.org/trac/search?q=r30327
+# Test data originally from
+# ICU-8576 svn r30327 = git commit 62d26cc5fe8cc66696143c44a43d664c2d7be100
# from the file testdata/wordsegments.txt
<locale en>
<word>
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt b/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt
index 4609ee98f9a..0909dc77e28 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt
@@ -100,7 +100,7 @@
"(?<!a(?!...z))qq" "aqqz"
# More nested lookaround: match any two chars preceded and followed by an upper case letter.
-# With gratuitious nesting of look-arounds and capture from the look-arounds.
+# With gratuitous nesting of look-arounds and capture from the look-arounds.
"(?=(?<=(\p{Lu})(?=..(\p{Lu})))).." "<1>A</1><0>jk</0><2>B</2>"
"(?=(?<=(\p{Lu})(?=..(\p{Lu})))).." "ajkB"
@@ -389,7 +389,7 @@
"(a?)*" "<0><1></1></0>xyz"
"(a?)+" "<0><1></1></0>xyz"
"^(?:a?b?)*$" "a--"
-"(x?)*xyz" "<0>xx<1></1>xyz</0>" # Sligthly wierd, but correct. The "last" time through (x?),
+"(x?)*xyz" "<0>xx<1></1>xyz</0>" # Sligthtly weird, but correct. The "last" time through (x?),
# it matches the empty string.
# Set expressions, basic operators and escapes work
@@ -518,7 +518,7 @@
"(abcd) \1" Z "<0><1>abcd</1> abcd</0>"
"(abcd) \1" Z "<0><1>abcd</1> abcd</0> "
-# Case Insensitve back references that hit/don't hit end.
+# Case Insensitive back references that hit/don't hit end.
"(abcd) \1" zi "abcd abc"
"(abcd) \1" Zi "<0><1>abcd</1> ABCD</0>"
"(abcd) \1" Zi "<0><1>abcd</1> ABCD</0> "
@@ -1031,7 +1031,7 @@
#
# These tests are only to verify that the names are recognized and the
# implementation isn't dead. They are not intended to verify that the
-# function defintions are 100% correct.
+# function definitions are 100% correct.
#
"[:InBasic Latin:]+" "ΓΔΕΖΗΘ<0>hello, world.</0>ニヌネノハバパ"
"[:^InBasic Latin:]+" "<0>ΓΔΕΖΗΘ</0>hello, world.ニヌネノハバパ"
@@ -1143,7 +1143,7 @@
"((a|b){2})|c" s "C"
#
-# bug 5617 ZWJ \u200d shoudn't cause word boundaries
+# bug 5617 ZWJ \u200d shouldn't cause word boundaries
#
".+?\b" "<0> </0>\u0935\u0915\u094D\u200D\u0924\u0947 "
".+?\b" 2 " <0>\u0935\u0915\u094D\u200D\u0924\u0947</0> "
@@ -1497,6 +1497,11 @@
#
"(?w)\b" v2 "äää<0></0> äää"
+# Bug ICU-21492 Assertion failure with nested look-around expressions.
+#
+"(?<=(?:(?<=(?:(?<=(?:(?<=)){2})){3})){4}" E "<0></0>" # orig failure from bug report, w mismatched parens.
+"(?:(?<=(?:(?<=)){2}))" "<0></0>" # Simplified case, with a valid pattern.
+
# Random debugging, Temporary
#
@@ -1921,13 +1926,13 @@
"/\*[\d\D]*?\*/" G "<0>/* my multiline comment */</0>"
"/\*[\d\D]*?\*/" G "<0>/* my nested comment */</0>"
"/\*[\d\D]*?\*/" "*/ anything here /*"
-"/\*[\d\D]*?\*/" "anything between 2 seperate comments"
+"/\*[\d\D]*?\*/" "anything between 2 separate comments"
"/\*[\d\D]*?\*/" "\* *\"
"/\*[\p{N}\P{N}]*?\*/" G "<0>/* my comment */</0>"
"/\*[\p{N}\P{N}]*?\*/" G "<0>/* my multiline comment */</0>"
"/\*[\p{N}\P{N}]*?\*/" G "<0>/* my nested comment */</0>"
"/\*[\p{N}\P{N}]*?\*/" "*/ anything here /*"
-"/\*[\p{N}\P{N}]*?\*/" "anything between 2 seperate comments"
+"/\*[\p{N}\P{N}]*?\*/" "anything between 2 separate comments"
"/\*[\p{N}\P{N}]*?\*/" "\* *\"
"((0?[13578]|10|12)(-|\/)((0[0-9])|([12])([0-9]?)|(3[01]?))(-|\/)((\d{4})|(\d{2}))|(0?[2469]|11)(-|\/)((0[0-9])|([12])([0-9]?)|(3[0]?))(-|\/)((\d{4}|\d{2})))" G "<0>1/31/2002</0>"
"((0?[13578]|10|12)(-|\/)((0[0-9])|([12])([0-9]?)|(3[01]?))(-|\/)((\d{4})|(\d{2}))|(0?[2469]|11)(-|\/)((0[0-9])|([12])([0-9]?)|(3[0]?))(-|\/)((\d{4}|\d{2})))" G "<0>04-30-02</0>"
@@ -2053,7 +2058,7 @@
"^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2})) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$" "29/02/2003 20:15:15"
"^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2})) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$" "2/29/04 20:15:15"
"^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2})) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$" "31/3/4 9:20:17"
-"^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$" G "<0>somthing@someserver.com</0>"
+"^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$" G "<0>something@someserver.com</0>"
"^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$" G "<0>firstname.lastname@mailserver.domain.com</0>"
"^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$" G "<0>username-something@some-server.nl</0>"
"^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$" "username@someserver.domain.c"
@@ -2222,7 +2227,7 @@
#'<[^>]*name[\s]*=[\s]*"?[^\w_]*"?[^>]*>' G '<0><form></0>' #TODO: Debug
'<[^>]*name[\s]*=[\s]*"?[^\w_]*"?[^>]*>' "<input type = submit>" # TODO: \w in pattern
'<[^>]*name[\s]*=[\s]*"?[^\w_]*"?[^>]*>' '<font face = "arial">' # TODO: \w in pattern
-'<[^>]*name[\s]*=[\s]*"?[^\w_]*"?[^>]*>' "The drity brown fox stank like"
+'<[^>]*name[\s]*=[\s]*"?[^\w_]*"?[^>]*>' "The dirty brown fox stank like"
"^(1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12{1,2}):(([0-5]{1}[0-9]{1}\s{0,1})([AM|PM|am|pm]{2,2}))\W{0}$" G "<0>1:00 AM</0>"
"^(1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12{1,2}):(([0-5]{1}[0-9]{1}\s{0,1})([AM|PM|am|pm]{2,2}))\W{0}$" G "<0>12:00 PM</0>"
"^(1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12{1,2}):(([0-5]{1}[0-9]{1}\s{0,1})([AM|PM|am|pm]{2,2}))\W{0}$" G "<0>1:00am</0>"
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/root.txt b/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
index ff0f517046b..2d6fcb7f8f3 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
@@ -13,8 +13,8 @@
root
{
Version { 44.0 }
- ExpectCLDRVersionAtLeast { 38.1 } // 'base' cldr version. Allow up to version =.=.* of this
- CurrentCLDRVersion { 38.1 } // Current CLDR version as of the test update. Warn if not an exact match.
+ ExpectCLDRVersionAtLeast { 40.0 } // 'base' cldr version. Allow up to version =.=.* of this
+ CurrentCLDRVersion { 40.0 } // Current CLDR version as of the test update. Warn if not an exact match.
ShortLanguage { xxx }
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/ssearch.xml b/Build/source/libs/icu/icu-src/source/test/testdata/ssearch.xml
index b781bac2aeb..c9fc6d37960 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/ssearch.xml
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/ssearch.xml
@@ -174,12 +174,12 @@
-->
<test-case id="test24a" strength="IDENTICAL" locale="en">
<pattern>A\u0300</pattern>
- <pre>At IDENTICAL, shoud this match? </pre><m>\u00c0</m><post></post>
+ <pre>At IDENTICAL, should this match? </pre><m>\u00c0</m><post></post>
</test-case>
<test-case id="test24b" strength="IDENTICAL" alternate_handling="SHIFTED" locale="en">
<pattern>A\u0300</pattern>
- <pre>At IDENTICAL, shoud this match? </pre>
+ <pre>At IDENTICAL, should this match? </pre>
<m>\u00c0</m>
<post></post>
</test-case>
@@ -207,7 +207,7 @@
</test-case>
<!-- TODO: this gives an U_ILLEGAL_ARGUMENT error when opening
- the UStringSearch. How did the orignal test run? -->
+ the UStringSearch. How did the original test run? -->
<!--
<test-case id="test29" strength="PRIMARY" locale="en">
<pattern> </pattern>
@@ -240,7 +240,7 @@
<!-- COMPOSITEBOUNDARIES from usrchdat.c
- Boundaries are not identical to orignal test data because
+ Boundaries are not identical to original test data because
of matching only full combining sequences
-->
<test-case id="test40" strength="TERTIARY">
diff --git a/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt b/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
index 3cae998ed87..74ff98ce044 100644
--- a/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
@@ -6,11 +6,10 @@
// * Corporation and others. All Rights Reserved.
// *
// ***************************************************************************
-// This is a pristine locale structure.
+// This is a pristine locale structure. It is manually maintained.
// This is used to validate all keys and general structure is correct.
// Since ICU doesn't follow the traditional fallback model where all keys fallback to root,
// root can't be used to validate the structure.
-// This file was generated from en.txt, and all ".*" were replaced with "".
structLocale:table(nofallback){
%%Parent{""}
BreakDictionaryData:bin {00}
@@ -107,11 +106,13 @@ structLocale:table(nofallback){
CY{""}
CZ{""}
DE{""}
+ DG{""}
DJ{""}
DK{""}
DM{""}
DO{""}
DZ{""}
+ EA{""}
EC{""}
EE{""}
EG{""}
@@ -150,6 +151,7 @@ structLocale:table(nofallback){
HR{""}
HT{""}
HU{""}
+ IC{""}
ID{""}
IE{""}
IL{""}
@@ -296,6 +298,7 @@ structLocale:table(nofallback){
VU{""}
WF{""}
WS{""}
+ XK{""}
YE{""}
YT{""}
ZA{""}
@@ -672,10 +675,6 @@ structLocale:table(nofallback){
"",
"",
}
- EQE{
- "",
- "",
- }
ERN{
"",
"",
@@ -1360,6 +1359,10 @@ structLocale:table(nofallback){
"",
"",
}
+ UYW{
+ "",
+ "",
+ }
UZS{
"",
"",
@@ -1372,6 +1375,10 @@ structLocale:table(nofallback){
"",
"",
}
+ VES{
+ "",
+ "",
+ }
VND{
"",
"",
@@ -1627,7 +1634,9 @@ structLocale:table(nofallback){
UAH{""}
USD{""}
UYU{""}
+ UYW{""}
VEF{""}
+ VES{""}
VND{""}
XCD{""}
ZAR{""}
@@ -2328,14 +2337,6 @@ structLocale:table(nofallback){
many{""}
other{""}
}
- EQE{
- zero{""}
- one{""}
- two{""}
- few{""}
- many{""}
- other{""}
- }
ERN{
zero{""}
one{""}
@@ -3680,6 +3681,14 @@ structLocale:table(nofallback){
many{""}
other{""}
}
+ UYW{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
UZS{
zero{""}
one{""}
@@ -3704,6 +3713,14 @@ structLocale:table(nofallback){
many{""}
other{""}
}
+ VES{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
VND{
zero{""}
one{""}
@@ -5806,7 +5823,6 @@ structLocale:table(nofallback){
mn{""}
mnc{""}
mni{""}
- mo{""}
moh{""}
mos{""}
mr{""}
@@ -5964,7 +5980,6 @@ structLocale:table(nofallback){
sv{""}
sw{""}
swb{""}
- swc{""}
syc{""}
syr{""}
szl{""}
@@ -5983,7 +5998,6 @@ structLocale:table(nofallback){
tk{""}
tkl{""}
tkr{""}
- tl{""}
tlh{""}
tli{""}
tly{""}
@@ -11056,6 +11070,337 @@ structLocale:table(nofallback){
timeSeparator{""}
}
}
+ hmnp{
+ miscPatterns{
+ approximately{""}
+ atLeast{""}
+ atMost{""}
+ range{""}
+ }
+ patterns{
+ accountingFormat{""}
+ currencyFormat{""}
+ decimalFormat{""}
+ percentFormat{""}
+ scientificFormat{""}
+ }
+ patternsLong{
+ decimalFormat{
+ 1000{
+ 1{""}
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ }
+ }
+ patternsShort{
+ currencyFormat{
+ 1000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ }
+ decimalFormat{
+ 1000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 1000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 10000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ 100000000000000{
+ zero{""}
+ one{""}
+ two{""}
+ few{""}
+ many{""}
+ other{""}
+ }
+ }
+ }
+ symbols{
+ approximatelySign{""}
+ decimal{""}
+ exponential{""}
+ group{""}
+ infinity{""}
+ list{""}
+ minusSign{""}
+ nan{""}
+ perMille{""}
+ percentSign{""}
+ plusSign{""}
+ currencyDecimal{""}
+ currencyGroup{""}
+ superscriptingExponent{""}
+ timeSeparator{""}
+ }
+ }
java{
miscPatterns{
approximately{""}
@@ -14367,6 +14712,32 @@ structLocale:table(nofallback){
}
}
minimalPairs{
+ case{
+ ablative{""}
+ accusative{""}
+ dative{""}
+ elative{""}
+ ergative{""}
+ genitive{""}
+ illative{""}
+ instrumental{""}
+ locative{""}
+ nominative{""}
+ oblique{""}
+ partitive{""}
+ prepositional{""}
+ sociative{""}
+ terminative{""}
+ translative{""}
+ vocative{""}
+ }
+ gender {
+ common{""}
+ feminine{""}
+ inanimate{""}
+ masculine{""}
+ neuter{""}
+ }
ordinal{
zero{""}
one{""}
@@ -21516,10 +21887,16 @@ structLocale:table(nofallback){
}
collation{
big5han{""}
+ dictionary{""}
direct{""}
+ ducet{""}
+ emoji{""}
+ eor{""}
gb2312han{""}
phonebook{""}
+ phonetic{""}
pinyin{""}
+ reformed{""}
search{""}
searchjl{""}
standard{""}
@@ -21529,19 +21906,26 @@ structLocale:table(nofallback){
zhuyin{""}
}
numbers{
+ adlm{""}
+ ahom{""}
arab{""}
+ arabext{""}
armn{""}
armnlow{""}
bali{""}
beng{""}
+ bhks{""}
brah{""}
cakm{""}
cham{""}
deva{""}
+ diak{""}
ethi{""}
finance{""}
fullwide{""}
geor{""}
+ gong{""}
+ gonm{""}
grek{""}
greklow{""}
gujr{""}
@@ -21553,9 +21937,12 @@ structLocale:table(nofallback){
hant{""}
hantfin{""}
hebr{""}
+ hmng{""}
+ hmnp{""}
java{""}
jpan{""}
jpanfin{""}
+ jpanyear{""}
kali{""}
khmr{""}
knda{""}
@@ -21566,19 +21953,26 @@ structLocale:table(nofallback){
lepc{""}
limb{""}
mlym{""}
+ modi{""}
mong{""}
+ mroo{""}
mtei{""}
mymr{""}
mymrshan{""}
+ mymrtlng{""}
native{""}
+ newa{""}
nkoo{""}
olck{""}
orya{""}
osma{""}
+ rohg{""}
roman{""}
romanlow{""}
saur{""}
shrd{""}
+ sind{""}
+ sinh{""}
sora{""}
sund{""}
takr{""}
@@ -21588,8 +21982,12 @@ structLocale:table(nofallback){
telu{""}
thai{""}
tibt{""}
+ tirh{""}
+ tnsa{""}
traditional{""}
vaii{""}
+ wara{""}
+ wcho{""}
}
}
Types%short{
@@ -21681,6 +22079,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
eras{
abbreviated{
"",
@@ -21796,20 +22204,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -21909,6 +22321,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "A2",
+ "A2",
+ "A2",
+ "A2",
+ }
cyclicNameSets{
dayParts{
format{
@@ -22759,20 +23181,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -22979,6 +23405,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "A2",
+ "A2",
+ "A2",
+ "A2",
+ }
availableFormats{
HHmm{""}
HHmmss{""}
@@ -23112,20 +23548,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -23323,6 +23763,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "A2",
+ "A2",
+ "A2",
+ "A2",
+ }
cyclicNameSets{
dayParts{
format{
@@ -24173,20 +24623,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -24398,6 +24852,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "A2",
+ "A2",
+ "A2",
+ "A2",
+ }
availableFormats{
HHmm{""}
HHmmss{""}
@@ -24531,20 +24995,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -24846,20 +25314,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -25046,6 +25518,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "A2",
+ "A2",
+ "A2",
+ "A2",
+ }
appendItems{
Day{"{0} ({2}: {1})"}
Day-Of-Week{"{0} {1}"}
@@ -25212,20 +25694,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -25326,6 +25812,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "A2",
+ "A2",
+ "A2",
+ "A2",
+ }
NoonMarker{""}
NoonMarkerAbbr{""}
NoonMarkerNarrow{""}
@@ -25678,20 +26174,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -25917,6 +26417,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "A2",
+ "A2",
+ "A2",
+ "A2",
+ }
availableFormats{
HHmm{""}
HHmmss{""}
@@ -26047,20 +26557,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -26265,6 +26779,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
eras{
abbreviated{
"",
@@ -26380,20 +26904,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -26556,21 +27084,6 @@ structLocale:table(nofallback){
"",
"",
}
- availableFormats{
- HHmm{""}
- HHmmss{""}
- KKmm{""}
- KKmmss{""}
- MMMM{""}
- MMMdd{""}
- mmssSS{""}
- ww{""}
- yyMM{""}
- yyMMMEEEd{""}
- yyMMMd{""}
- yyMd{""}
- yyQQQQ{""}
- }
DateTimeElements:intvector{
1,
1,
@@ -26590,6 +27103,82 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
+ availableFormats{
+ HHmm{""}
+ HHmmss{""}
+ KKmm{""}
+ KKmmss{""}
+ MMMM{""}
+ MMMdd{""}
+ mmssSS{""}
+ ww{""}
+ yyMM{""}
+ yyMMMEEEd{""}
+ yyMMMd{""}
+ yyMd{""}
+ yyQQQQ{""}
+ }
+ dayNames{
+ format{
+ abbreviated{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
+ wide{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
+ }
+ stand-alone{
+ abbreviated{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
+ narrow{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
+ wide{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
+ }
+ }
eras{
abbreviated{
"",
@@ -26705,20 +27294,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -26915,6 +27508,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
eras{
abbreviated{
"",
@@ -27030,20 +27633,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -27237,6 +27844,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "A2",
+ "A2",
+ "A2",
+ "A2",
+ }
eras{
abbreviated{
"",
@@ -28060,20 +28677,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
@@ -28177,6 +28798,16 @@ structLocale:table(nofallback){
"A4",
"A4",
}
+ DateTimeSkeletons{
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ }
eras{
abbreviated{
"",
@@ -28295,20 +28926,24 @@ structLocale:table(nofallback){
}
fallback{""}
h{
+ B{""}
a{""}
h{""}
}
hm{
+ B{""}
a{""}
h{""}
m{""}
}
hmv{
+ B{""}
a{""}
h{""}
m{""}
}
hv{
+ B{""}
a{""}
h{""}
}
diff --git a/Build/source/libs/icu/icu-src/source/test/testmap/readme.txt b/Build/source/libs/icu/icu-src/source/test/testmap/readme.txt
index b1ade382a24..12df94d71e0 100644
--- a/Build/source/libs/icu/icu-src/source/test/testmap/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/test/testmap/readme.txt
@@ -8,5 +8,5 @@ This test may be tested on a linux machine like so:
Where /path/to/icu-build is the path to an ICU build dir
-And where icurun is from : http://source.icu-project.org/repos/icu/tools/trunk/scripts/icurun
+And where icurun is from : https://github.com/unicode-org/icu/blob/main/tools/scripts/icurun
diff --git a/Build/source/libs/icu/icu-src/source/test/thaitest/thaitest.cpp b/Build/source/libs/icu/icu-src/source/test/thaitest/thaitest.cpp
index d05ef97ca7d..9ac91a4af0c 100644
--- a/Build/source/libs/icu/icu-src/source/test/thaitest/thaitest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/thaitest/thaitest.cpp
@@ -28,7 +28,7 @@
* breaks.
*
* NOTE: by it's very nature, Thai word breaking is not exact, so it is
- * exptected that this program will always report some differences.
+ * expected that this program will always report some differences.
*/
/*
@@ -208,7 +208,7 @@ inline int32_t ThaiWordbreakTest::getWordCount()
}
/*
- * This method does the acutal break comparison and reports the results.
+ * This method does the actual break comparison and reports the results.
* It uses a SpaceBreakIterator to iterate over the text with spaces,
* and a word instance of a Thai BreakIterator to iterate over the text
* without spaces.
diff --git a/Build/source/libs/icu/icu-src/source/tools/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/Makefile.in
index c3f81d6a2c1..e0896f12061 100644
--- a/Build/source/libs/icu/icu-src/source/tools/Makefile.in
+++ b/Build/source/libs/icu/icu-src/source/tools/Makefile.in
@@ -17,7 +17,7 @@ subdir = tools
SUBDIRS = toolutil ctestfw makeconv genrb genbrk \
gencnval gensprep icuinfo genccode gencmn icupkg pkgdata \
-gentest gennorm2 gencfu gendict
+gentest gennorm2 gencfu gendict icuexportdata
ifneq (@platform_make_fragment_name@,mh-cygwin-msvc)
SUBDIRS += escapesrc
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c b/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
index dc9a4b0f569..4562959ec69 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
@@ -126,6 +126,7 @@ int ERR_MSG =1; /* error messages will be displayed by default*/
int QUICK = 1; /* Skip some of the slower tests? */
int WARN_ON_MISSING_DATA = 0; /* Reduce data errs to warnings? */
UTraceLevel ICU_TRACE = UTRACE_OFF; /* ICU tracing level */
+int WRITE_GOLDEN_DATA = 0; /* Overwrite golden data files? */
size_t MINIMUM_MEMORY_SIZE_FAILURE = (size_t)-1; /* Minimum library memory allocation window that will fail. */
size_t MAXIMUM_MEMORY_SIZE_FAILURE = (size_t)-1; /* Maximum library memory allocation window that will fail. */
static const char *ARGV_0 = "[ALL]";
@@ -435,7 +436,7 @@ static void iterateTestsWithLevel ( const TestNode* root,
INDENT_LEVEL = depth-1; /* root */
- /* we want these messages to be at 0 indent. so just push the indent level breifly. */
+ /* we want these messages to be at 0 indent. so just push the indent level briefly. */
if(mode==SHOWTESTS) {
log_testinfo("---%s%c\n",pathToFunction, nodeList[i]->test?' ':TEST_SEPARATOR );
}
@@ -1069,6 +1070,9 @@ initArgs( int argc, const char* const argv[], ArgHandlerPtr argHandler, void *co
else if (strcmp( argv[i], "-t_oc") == 0) {
ICU_TRACE = UTRACE_OPEN_CLOSE;
}
+ else if (strcmp( argv[i], "-G") == 0) {
+ WRITE_GOLDEN_DATA = 1;
+ }
else if (strcmp( argv[i], "-h" )==0 || strcmp( argv[i], "--help" )==0)
{
help( argv[0] );
@@ -1202,6 +1206,7 @@ static void help ( const char *argv0 )
printf(" -m n[-q] Min-Max memory size that will cause an allocation failure.\n");
printf(" The default is the maximum value of size_t. Max is optional.\n");
printf(" -r Repeat tests after calling u_cleanup \n");
+ printf(" -G Write golden data files \n");
printf(" [/subtest] To run a subtest \n");
printf(" eg: to run just the utility tests type: cintltest /tsutil) \n");
}
@@ -1221,6 +1226,8 @@ getTestOption ( int32_t testOption ) {
return ERR_MSG;
case ICU_TRACE_OPTION:
return ICU_TRACE;
+ case WRITE_GOLDEN_DATA_OPTION:
+ return WRITE_GOLDEN_DATA;
default :
return 0;
}
@@ -1248,6 +1255,8 @@ setTestOption ( int32_t testOption, int32_t value) {
case ICU_TRACE_OPTION:
ICU_TRACE = (UTraceLevel)value;
break;
+ case WRITE_GOLDEN_DATA_OPTION:
+ WRITE_GOLDEN_DATA = value;
default :
break;
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj b/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj
index 744d7739a51..1dd8e2602c5 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj
@@ -53,7 +53,7 @@
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
<Link>
- <OutputFile>..\..\..\$(IcuBinOutputDir)\icutest68d.exe</OutputFile>
+ <OutputFile>..\..\..\$(IcuBinOutputDir)\icutest70d.exe</OutputFile>
<ProgramDatabaseFile>.\..\..\..\$(IcuLibOutputDir)\icutestd.pdb</ProgramDatabaseFile>
<ImportLibrary>.\..\..\..\$(IcuLibOutputDir)\icutestd.lib</ImportLibrary>
<AdditionalDependencies>icuucd.lib;icutud.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -66,7 +66,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
</ClCompile>
<Link>
- <OutputFile>..\..\..\$(IcuBinOutputDir)\icutest68.exe</OutputFile>
+ <OutputFile>..\..\..\$(IcuBinOutputDir)\icutest70.exe</OutputFile>
<ProgramDatabaseFile>.\..\..\..\$(IcuLibOutputDir)\icutest.pdb</ProgramDatabaseFile>
<ImportLibrary>.\..\..\..\$(IcuLibOutputDir)\icutest.lib</ImportLibrary>
<AdditionalDependencies>icuuc.lib;icutu.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/tstdtmod.cpp b/Build/source/libs/icu/icu-src/source/tools/ctestfw/tstdtmod.cpp
index f4580b165da..94df68fe29f 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/tstdtmod.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/tstdtmod.cpp
@@ -196,7 +196,7 @@ RBTestDataModule::RBTestDataModule(const char* name, TestLog& log, UErrorCode& s
fNumberOfTests = ures_getSize(fTestData);
fInfoRB = ures_getByKey(fModuleBundle, "Info", NULL, &status);
if(status != U_ZERO_ERROR) {
- log.errln(UNICODE_STRING_SIMPLE("Unable to initalize test data - missing mandatory description resources!"));
+ log.errln(UNICODE_STRING_SIMPLE("Unable to initialize test data - missing mandatory description resources!"));
fDataTestValid = FALSE;
} else {
fInfo = new RBDataMap(fInfoRB, status);
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h
index 6a29621127f..3debcf68054 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h
@@ -82,6 +82,13 @@ U_CDECL_END
#define ICU_TRACE_OPTION 6
/**
+ * This is used to set or get the option value for WRITE_GOLDEN_DATA.
+ * Set to 1 to overwrite golden data files, such as those in testdata/ucptrie.
+ * Use with set/getTestOption().
+ */
+#define WRITE_GOLDEN_DATA_OPTION 7
+
+/**
* Maximum amount of memory uprv_malloc should allocate before returning NULL.
*
* @internal
@@ -167,7 +174,7 @@ T_CTEST_API void T_CTEST_EXPORT2
cleanUpTestTree(TestNode *tn);
/**
- * Retreive a specific subtest. (subtree).
+ * Retrieve a specific subtest. (subtree).
*
* @param root Pointer to the root.
* @param path Path relative to the root, Ex. '/a/b'
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/datamap.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/datamap.h
index 56e90763e61..b4f7f82fd64 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/datamap.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/datamap.h
@@ -121,16 +121,16 @@ public:
virtual const ResourceBundle *getItem(const char* key, UErrorCode &status) const;
- virtual const UnicodeString getString(const char* key, UErrorCode &status) const;
- virtual int32_t getInt28(const char* key, UErrorCode &status) const;
- virtual uint32_t getUInt28(const char* key, UErrorCode &status) const;
- virtual const int32_t *getIntVector(int32_t &length, const char *key, UErrorCode &status) const;
- virtual const uint8_t *getBinary(int32_t &length, const char *key, UErrorCode &status) const;
+ virtual const UnicodeString getString(const char* key, UErrorCode &status) const override;
+ virtual int32_t getInt28(const char* key, UErrorCode &status) const override;
+ virtual uint32_t getUInt28(const char* key, UErrorCode &status) const override;
+ virtual const int32_t *getIntVector(int32_t &length, const char *key, UErrorCode &status) const override;
+ virtual const uint8_t *getBinary(int32_t &length, const char *key, UErrorCode &status) const override;
- virtual int32_t getInt(const char* key, UErrorCode &status) const;
+ virtual int32_t getInt(const char* key, UErrorCode &status) const override;
- virtual const UnicodeString* getStringArray(int32_t& count, const char* key, UErrorCode &status) const;
- virtual const int32_t* getIntArray(int32_t& count, const char* key, UErrorCode &status) const;
+ virtual const UnicodeString* getStringArray(int32_t& count, const char* key, UErrorCode &status) const override;
+ virtual const int32_t* getIntArray(int32_t& count, const char* key, UErrorCode &status) const override;
// ... etc ...
};
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testdata.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testdata.h
index cbee692bcaf..614e36a14d6 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testdata.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testdata.h
@@ -24,7 +24,7 @@
* each setting. Each call to nextSettings resets the cases iterator.
* Individual test cases have to have the same number of fields as the
* number of entries in headers. Default headers can be specified in
- * the TestDataModule info section. The default headers will be overriden
+ * the TestDataModule info section. The default headers will be overridden
* by per-test headers.
* Example:
* DataMap *settings = NULL;
@@ -103,10 +103,10 @@ private:
public:
virtual ~RBTestData();
- virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const;
+ virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const override;
- virtual UBool nextSettings(const DataMap *& settings, UErrorCode &status);
- virtual UBool nextCase(const DataMap *& nextCase, UErrorCode &status);
+ virtual UBool nextSettings(const DataMap *& settings, UErrorCode &status) override;
+ virtual UBool nextCase(const DataMap *& nextCase, UErrorCode &status) override;
};
#endif
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testlog.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testlog.h
index 9db35b9ca85..1392335270b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testlog.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testlog.h
@@ -49,7 +49,7 @@ public:
void setScope(const UnicodeString& message);
protected:
- virtual void handleFailure() const;
+ virtual void handleFailure() const override;
private:
TestLog &testClass;
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/tstdtmod.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/tstdtmod.h
index 6cdce88ed6d..683a26c3398 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/tstdtmod.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/tstdtmod.h
@@ -92,10 +92,10 @@ public:
RBTestDataModule(const char* name, TestLog& log, UErrorCode& status);
public:
- virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const;
+ virtual UBool getInfo(const DataMap *& info, UErrorCode &status) const override;
- virtual TestData* createTestData(int32_t index, UErrorCode &status) const;
- virtual TestData* createTestData(const char* name, UErrorCode &status) const;
+ virtual TestData* createTestData(int32_t index, UErrorCode &status) const override;
+ virtual TestData* createTestData(const char* name, UErrorCode &status) const override;
private:
UResourceBundle *getTestBundle(const char* bundleName, UErrorCode &status);
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/uperf.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/uperf.h
index d1e0d6e7ccf..ea9ec1f255b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/uperf.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/uperf.h
@@ -133,7 +133,7 @@ public:
class T_CTEST_EXPORT_API UPerfTest {
public:
UBool run();
- UBool runTest( char* name = NULL, char* par = NULL ); // not to be overidden
+ UBool runTest( char* name = NULL, char* par = NULL ); // not to be overridden
virtual void usage( void ) ;
@@ -158,7 +158,7 @@ protected:
void init(UOption addOptions[], int32_t addOptionsCount,
UErrorCode& status);
- virtual UPerfFunction* runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); // overide !
+ virtual UPerfFunction* runIndexedTest( int32_t index, UBool exec, const char* &name, char* par = NULL ); // override !
virtual UBool runTestLoop( char* testname, char* par );
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
index 7b0d7538d74..e12485d9d37 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
@@ -82,7 +82,7 @@
* // Initialize cache and ensure the data is loaded.
* // This loop checks for errors in Normalization. Once we pass the initialization
* // without errors we can safelly assume that there are no errors while timing the
- * // funtion
+ * // function
* for (loops=0; loops<10; loops++) {
* for (line=0; line < gNumFileLines; line++) {
* if (opt_uselen) {
@@ -159,7 +159,7 @@
typedef struct UTimer UTimer;
-typedef void FuntionToBeTimed(void* param);
+typedef void FunctionToBeTimed(void* param);
#if U_PLATFORM_USES_ONLY_WIN32_API
@@ -212,9 +212,9 @@ static UBool uprv_compareFrequency(UTimer* /*timer1*/, UTimer* /*timer2*/){
#endif
/**
- * Intializes the timer with the current time
+ * Initializes the timer with the current time
*
- * @param timer A pointer to UTimer struct to recieve the current time
+ * @param timer A pointer to UTimer struct to receive the current time
*/
static inline void U_EXPORT2
utimer_getTime(UTimer* timer){
@@ -256,15 +256,15 @@ utimer_getElapsedSeconds(UTimer* timer){
* Executes the function pointed to for a given time and returns exact time
* taken and number of iterations of the loop
* @param thresholTimeVal
- * @param loopCount output param to recieve the number of iterations
- * @param fn The funtion to be executed
+ * @param loopCount output param to receive the number of iterations
+ * @param fn The function to be executed
* @param param Parameters to be passed to the fn
* @return the time elapsed in seconds
*/
static inline double U_EXPORT2
utimer_loopUntilDone(double thresholdTimeVal,
int32_t* loopCount,
- FuntionToBeTimed fn,
+ FunctionToBeTimed fn,
void* param){
UTimer timer;
double currentVal=0;
diff --git a/Build/source/libs/icu/icu-src/source/tools/ctestfw/uperf.cpp b/Build/source/libs/icu/icu-src/source/tools/ctestfw/uperf.cpp
index b807974f58a..5605f0d2e3d 100644
--- a/Build/source/libs/icu/icu-src/source/tools/ctestfw/uperf.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/ctestfw/uperf.cpp
@@ -265,7 +265,7 @@ UBool UPerfTest::run(){
return runTest();
}
UBool res=FALSE;
- // Test only the specified fucntion
+ // Test only the specified function
for (int i = 1; i < _remainingArgc; ++i) {
if (_argv[i][0] != '-') {
char* name = (char*) _argv[i];
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp b/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
index 541b78e708b..073ddef6226 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
@@ -21,10 +21,10 @@
// options: -v verbose
// -? or -h help
//
-// The input rule filew is are plain text files containing confusable character
+// The input rule file are plain text files containing confusable character
// definitions in the input format defined by Unicode UAX39 for the files
// confusables.txt. This source (.txt) format
-// is also accepted direaccepted by ICU spoof detedtors. The
+// is also accepted by ICU spoof detectors. The
// files must be encoded in utf-8 format, with or without a BOM.
//
// The script used to compile confusablesWholeScript.txt into the CFU file
diff --git a/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c b/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c
index 83b5863cba5..0a0890e9e5c 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c
+++ b/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c
@@ -45,7 +45,7 @@
/* STRING_STORE_SIZE + TAG_STORE_SIZE <= ((2^16 - 1) * 2)
That is the maximum size for the string stores combined
- because the strings are index at 16-bit boundries by a
+ because the strings are indexed at 16-bit boundaries by a
16-bit index, and there is only one section for the
strings.
*/
diff --git a/Build/source/libs/icu/icu-src/source/tools/gennorm2/BUILD b/Build/source/libs/icu/icu-src/source/tools/gennorm2/BUILD
new file mode 100644
index 00000000000..c602897bafc
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/gennorm2/BUILD
@@ -0,0 +1,39 @@
+# © 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# This Bazel build file defines a target for the gennorm2 binary that generates
+# headers needed for bootstrapping the ICU4C build process in a way that
+# integrates the normalization data.
+
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+cc_binary(
+ name = "gennorm2",
+ srcs = glob([
+ "*.c",
+ "*.cpp",
+ "*.h", # cannot have hdrs section in cc_binary
+ ]),
+ deps = [
+ "//icu4c/source/common:uhash",
+ "//icu4c/source/common:umutablecptrie",
+ "//icu4c/source/common:ucptrie",
+ "//icu4c/source/common:errorcode",
+ "//icu4c/source/common:uniset",
+ "//icu4c/source/common:uvector32",
+
+ "//icu4c/source/common:platform",
+ "//icu4c/source/common:headers",
+
+ "//icu4c/source/tools/toolutil:toolutil",
+ "//icu4c/source/tools/toolutil:unewdata",
+ "//icu4c/source/tools/toolutil:writesrc",
+ "//icu4c/source/tools/toolutil:uoptions",
+ "//icu4c/source/tools/toolutil:uparse",
+ ],
+ linkopts = ["-pthread"],
+)
diff --git a/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.cpp b/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.cpp
index b6c15adc7ab..bb5512a8b16 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.cpp
@@ -92,17 +92,18 @@ int32_t ExtraData::writeNoNoMapping(UChar32 c, const Norm &norm,
Hashtable &previousMappings) {
UnicodeString newMapping;
int32_t offset=writeMapping(c, norm, newMapping);
- int32_t previousOffset=previousMappings.geti(newMapping);
- if(previousOffset!=0) {
+ UBool found=false;
+ int32_t previousOffset=previousMappings.getiAndFound(newMapping, found);
+ if(found) {
// Duplicate, point to the identical mapping that has already been stored.
- offset=previousOffset-1;
+ offset=previousOffset;
} else {
// Append this new mapping and
// enter it into the hashtable, avoiding value 0 which is "not found".
offset=dataString.length()+offset;
dataString.append(newMapping);
- IcuToolErrorCode errorCode("gennorm2/writeExtraData()/Hashtable.puti()");
- previousMappings.puti(newMapping, offset+1, errorCode);
+ IcuToolErrorCode errorCode("gennorm2/writeExtraData()/Hashtable.putiAllowZero()");
+ previousMappings.putiAllowZero(newMapping, offset, errorCode);
}
return offset;
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.cpp b/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.cpp
index 1d388852312..194cffa4328 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.cpp
@@ -829,18 +829,18 @@ Normalizer2DataBuilder::writeCSourceFile(const char *filename) {
char line[100];
sprintf(line, "static const UVersionInfo %s_formatVersion={", name);
- usrc_writeArray(f, line, dataInfo.formatVersion, 8, 4, "};\n");
+ usrc_writeArray(f, line, dataInfo.formatVersion, 8, 4, "", "};\n");
sprintf(line, "static const UVersionInfo %s_dataVersion={", name);
- usrc_writeArray(f, line, dataInfo.dataVersion, 8, 4, "};\n\n");
+ usrc_writeArray(f, line, dataInfo.dataVersion, 8, 4, "", "};\n\n");
sprintf(line, "static const int32_t %s_indexes[Normalizer2Impl::IX_COUNT]={\n", name);
- usrc_writeArray(f, line, indexes, 32, Normalizer2Impl::IX_COUNT, "\n};\n\n");
+ usrc_writeArray(f, line, indexes, 32, Normalizer2Impl::IX_COUNT, "", "\n};\n\n");
- usrc_writeUCPTrie(f, name, norm16Trie.getAlias());
+ usrc_writeUCPTrie(f, name, norm16Trie.getAlias(), UPRV_TARGET_SYNTAX_CCODE);
sprintf(line, "static const uint16_t %s_extraData[%%ld]={\n", name);
- usrc_writeArray(f, line, extraData.getBuffer(), 16, extraData.length(), "\n};\n\n");
+ usrc_writeArray(f, line, extraData.getBuffer(), 16, extraData.length(), "", "\n};\n\n");
sprintf(line, "static const uint8_t %s_smallFCD[%%ld]={\n", name);
- usrc_writeArray(f, line, smallFCD, 8, sizeof(smallFCD), "\n};\n\n");
+ usrc_writeArray(f, line, smallFCD, 8, sizeof(smallFCD), "", "\n};\n\n");
fputs("#endif // INCLUDED_FROM_NORMALIZER2_CPP\n", f);
fclose(f);
diff --git a/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.h b/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.h
index 5684e65e672..34efd4ba013 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.h
+++ b/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.h
@@ -97,7 +97,7 @@ struct Norm {
* Set after most processing is done.
*
* Corresponds to the rows in the chart on
- * http://site.icu-project.org/design/normalization/custom
+ * https://icu.unicode.org/design/normalization/custom
* in numerical (but reverse visual) order.
*
* YES_NO means composition quick check=yes, decomposition QC=no -- etc.
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/derb.cpp b/Build/source/libs/icu/icu-src/source/tools/genrb/derb.cpp
index 997b4001295..70546e1915b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/derb.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/derb.cpp
@@ -386,7 +386,7 @@ static void printHex(UFILE *out, uint8_t what) {
static void printOutAlias(UFILE *out, UResourceBundle *parent, Resource r, const char *key, int32_t indent, const char *pname, UErrorCode *status) {
static const UChar cr[] = { 0xA }; // LF
int32_t len = 0;
- const UChar* thestr = res_getAlias(&(parent->fResData), r, &len);
+ const UChar* thestr = res_getAlias(&(parent->getResData()), r, &len);
UChar *string = quotedString(thestr);
if(opt_truncate && len > truncsize) {
char msg[128];
@@ -594,9 +594,9 @@ static void printOutBundle(UFILE *out, UResourceBundle *resource, int32_t indent
for(i = 0; i < resSize; i++) {
/* need to know if it's an alias */
if(isTable) {
- r = res_getTableItemByIndex(&resource->fResData, resource->fRes, i, &key);
+ r = res_getTableItemByIndex(&resource->getResData(), resource->fRes, i, &key);
} else {
- r = res_getArrayItem(&resource->fResData, resource->fRes, i);
+ r = res_getArrayItem(&resource->getResData(), resource->fRes, i);
}
if(U_SUCCESS(*status)) {
if(res_getPublicType(r) == URES_ALIAS) {
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.cpp b/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.cpp
index 6f3a13a0a61..a739b91143c 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.cpp
@@ -564,7 +564,7 @@ main(int argc,
u_cleanup();
- /* Dont return warnings as a failure */
+ /* Don't return warnings as a failure */
if (U_SUCCESS(status)) {
return 0;
}
@@ -616,7 +616,7 @@ processFile(const char *filename, const char *cp,
if(inputDir[dirlen-1] != U_FILE_SEP_CHAR) {
/*
* append the input dir to openFileName if the first char in
- * filename is not file seperation char and the last char input directory is not '.'.
+ * filename is not file separation char and the last char input directory is not '.'.
* This is to support :
* genrb -s. /home/icu/data
* genrb -s. icu/data
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/parse.cpp b/Build/source/libs/icu/icu-src/source/tools/genrb/parse.cpp
index 18a8c76dbc5..7d5ffe1fc78 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/parse.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/parse.cpp
@@ -683,7 +683,7 @@ public:
virtual void getRules(
const char *localeID, const char *collationType,
UnicodeString &rules,
- const char *&errorReason, UErrorCode &errorCode);
+ const char *&errorReason, UErrorCode &errorCode) override;
private:
const char *inputDir;
@@ -1191,7 +1191,7 @@ realParseTable(ParseState* state, TableResource *table, char *tag, uint32_t star
if (token == TOK_CLOSE_BRACE)
{
- if (!readToken) {
+ if (!readToken && isVerbose()) {
warning(startline, "Encountered empty table");
}
return table;
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/parse.h b/Build/source/libs/icu/icu-src/source/tools/genrb/parse.h
index dfe3b8dda06..bcd8e798f9a 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/parse.h
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/parse.h
@@ -25,7 +25,7 @@
#include "ucbuf.h"
U_CDECL_BEGIN
-/* One time parser initalisation */
+/* One time parser initialization */
void initParser();
/* Parse a ResourceBundle text file */
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.cpp b/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.cpp
index 5e44547ea1e..cb835cb8c33 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.cpp
@@ -71,14 +71,14 @@ U_CFUNC int32_t
trim(UChar *src, int32_t srcLen, UErrorCode *status){
srcLen = removeText(src, srcLen, UnicodeString("^[ \\r\\n]+ "), 0, UnicodeString(), status); // remove leading new lines
srcLen = removeText(src, srcLen, UnicodeString("^\\s+"), 0, UnicodeString(), status); // remove leading spaces
- srcLen = removeText(src, srcLen, UnicodeString("\\s+$"), 0, UnicodeString(), status); // remvoe trailing spcaes
+ srcLen = removeText(src, srcLen, UnicodeString("\\s+$"), 0, UnicodeString(), status); // remove trailing spcaes
return srcLen;
}
U_CFUNC int32_t
removeCmtText(UChar* source, int32_t srcLen, UErrorCode* status){
srcLen = trim(source, srcLen, status);
- UnicodeString patString("^\\s*?\\*\\s*?"); // remove pattern like " * " at the begining of the line
+ UnicodeString patString("^\\s*?\\*\\s*?"); // remove pattern like " * " at the beginning of the line
srcLen = removeText(source, srcLen, patString, UREGEX_MULTILINE, UnicodeString(), status);
return removeText(source, srcLen, UnicodeString("[ \\r\\n]+"), 0, UnicodeString(" "), status);// remove new lines;
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
index 4bc6adc128e..b9e0d7d8c43 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
@@ -340,7 +340,8 @@ IntResource::~IntResource() {}
IntVectorResource::IntVectorResource(SRBRoot *bundle, const char *tag,
const UString* comment, UErrorCode &errorCode)
: SResource(bundle, tag, URES_INT_VECTOR, comment, errorCode),
- fCount(0), fArray(new uint32_t[RESLIST_MAX_INT_VECTOR]) {
+ fCount(0), fSize(RESLIST_INT_VECTOR_INIT_SIZE),
+ fArray(new uint32_t[fSize]) {
if (fArray == NULL) {
errorCode = U_MEMORY_ALLOCATION_ERROR;
return;
@@ -352,6 +353,17 @@ IntVectorResource::~IntVectorResource() {
}
void IntVectorResource::add(int32_t value, UErrorCode &errorCode) {
+ if (fCount == fSize) {
+ uint32_t* tmp = new uint32_t[2 * fSize];
+ if (tmp == nullptr) {
+ errorCode = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
+ uprv_memcpy(tmp, fArray, fSize * sizeof(uint32_t));
+ delete[] fArray;
+ fArray = tmp;
+ fSize *= 2;
+ }
if (U_SUCCESS(errorCode)) {
fArray[fCount++] = value;
}
@@ -942,11 +954,7 @@ void SRBRoot::write(const char *outputDir, const char *outputPkg,
if (writtenFilename) {
int32_t off = 0, len = 0;
if (outputDir) {
- len = (int32_t)uprv_strlen(outputDir);
- if (len > writtenFilenameLen) {
- len = writtenFilenameLen;
- }
- uprv_strncpy(writtenFilename, outputDir, len);
+ uprv_strncpy(writtenFilename, outputDir, writtenFilenameLen);
}
if (writtenFilenameLen -= len) {
off += len;
@@ -965,14 +973,10 @@ void SRBRoot::write(const char *outputDir, const char *outputPkg,
if (len > writtenFilenameLen) {
len = writtenFilenameLen;
}
- uprv_strncpy(writtenFilename + off, fLocale, len);
+ uprv_strncpy(writtenFilename + off, fLocale, writtenFilenameLen - off);
if (writtenFilenameLen -= len) {
off += len;
- len = 5;
- if (len > writtenFilenameLen) {
- len = writtenFilenameLen;
- }
- uprv_strncpy(writtenFilename + off, ".res", len);
+ uprv_strncpy(writtenFilename + off, ".res", writtenFilenameLen - off);
}
}
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
index 77140b2140f..c9731880ea6 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
@@ -21,7 +21,7 @@
#define RESLIST_H
#define KEY_SPACE_SIZE 65536
-#define RESLIST_MAX_INT_VECTOR 2048
+#define RESLIST_INT_VECTOR_INIT_SIZE 2048
#include <functional>
@@ -294,9 +294,9 @@ public:
void add(SResource *res);
- virtual void handleWrite16(SRBRoot *bundle);
- virtual void handlePreWrite(uint32_t *byteOffset);
- virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset);
+ virtual void handleWrite16(SRBRoot *bundle) override;
+ virtual void handlePreWrite(uint32_t *byteOffset) override;
+ virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset) override;
SResource *fLast;
};
@@ -313,7 +313,7 @@ public:
void add(SResource *res);
- virtual void handleWrite16(SRBRoot *bundle);
+ virtual void handleWrite16(SRBRoot *bundle) override;
};
class StringBaseResource : public SResource {
@@ -329,8 +329,8 @@ public:
const UChar *getBuffer() const { return icu::toUCharPtr(fString.getBuffer()); }
int32_t length() const { return fString.length(); }
- virtual void handlePreWrite(uint32_t *byteOffset);
- virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset);
+ virtual void handlePreWrite(uint32_t *byteOffset) override;
+ virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset) override;
// TODO: private with getter?
icu::UnicodeString fString;
@@ -363,8 +363,8 @@ public:
return fNumCharsForLength + length() + 1; // +1 for the NUL
}
- virtual void handlePreflightStrings(SRBRoot *bundle, UHashtable *stringSet, UErrorCode &errorCode);
- virtual void handleWrite16(SRBRoot *bundle);
+ virtual void handlePreflightStrings(SRBRoot *bundle, UHashtable *stringSet, UErrorCode &errorCode) override;
+ virtual void handleWrite16(SRBRoot *bundle) override;
void writeUTF16v2(int32_t base, icu::UnicodeString &dest);
@@ -401,11 +401,12 @@ public:
void add(int32_t value, UErrorCode &errorCode);
- virtual void handlePreWrite(uint32_t *byteOffset);
- virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset);
+ virtual void handlePreWrite(uint32_t *byteOffset) override;
+ virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset) override;
// TODO: UVector32
- uint32_t fCount;
+ size_t fCount;
+ size_t fSize;
uint32_t *fArray;
};
@@ -416,8 +417,8 @@ public:
const UString* comment, UErrorCode &errorCode);
virtual ~BinaryResource();
- virtual void handlePreWrite(uint32_t *byteOffset);
- virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset);
+ virtual void handlePreWrite(uint32_t *byteOffset) override;
+ virtual void handleWrite(UNewDataMemory *mem, uint32_t *byteOffset) override;
// TODO: CharString?
uint32_t fLength;
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/wrtjava.cpp b/Build/source/libs/icu/icu-src/source/tools/genrb/wrtjava.cpp
index f1eb229760f..3ad0a94cf3d 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/wrtjava.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/wrtjava.cpp
@@ -15,7 +15,7 @@
* Date Name Description
* 01/11/02 Ram Creation.
* 02/12/08 Spieth Fix errant 'new Object[][]{' insertion
-* 02/19/08 Spieth Removed ICUListResourceBundle dependancy
+* 02/19/08 Spieth Removed ICUListResourceBundle dependency
*******************************************************************************
*/
@@ -627,7 +627,7 @@ bundle_write_java(struct SRBRoot *bundle, const char *outputDir,const char* outp
/*UBool j1 =FALSE;*/
/*outDir = outputDir;*/
- start = TRUE; /* Reset the start indictor*/
+ start = TRUE; /* Reset the start indicator*/
bName = (bundleName==NULL) ? "LocaleElements" : bundleName;
pName = (packageName==NULL)? "com.ibm.icu.impl.data" : packageName;
diff --git a/Build/source/libs/icu/icu-src/source/tools/genrb/wrtxml.cpp b/Build/source/libs/icu/icu-src/source/tools/genrb/wrtxml.cpp
index 58e055d5718..fa2105d908e 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genrb/wrtxml.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/genrb/wrtxml.cpp
@@ -135,7 +135,7 @@ static char* getID(const char* id, const char* curKey, char* result) {
/* ICU is not endian portable, because ICU data generated on big endian machines can be
* ported to big endian machines but not to little endian machines and vice versa. The
- * conversion is not portable across platforms with different endianess.
+ * conversion is not portable across platforms with different endianness.
*/
uint32_t computeCRC(const char *ptr, uint32_t len, uint32_t lastcrc){
@@ -522,7 +522,7 @@ printComments(struct UString *src, const char *resName, UBool printTranslate, UE
write_utf8_file(out,UnicodeString(">\n"));
}
}else if(getShowWarning()){
- fprintf(stderr, "Warning: Tranlate attribute for resource %s cannot be set. XLIFF prohibits it.\n", resName);
+ fprintf(stderr, "Warning: Translate attribute for resource %s cannot be set. XLIFF prohibits it.\n", resName);
/* no translate attribute .. just close the tag */
write_utf8_file(out,UnicodeString(">\n"));
}
@@ -924,8 +924,6 @@ bin_write_xml(BinaryResource *res, const char* id, const char* /*language*/, UEr
static void
table_write_xml(TableResource *res, const char* id, const char* language, UBool isTopLevel, UErrorCode *status) {
- uint32_t i = 0;
-
struct SResource *current = NULL;
char* sid = NULL;
@@ -940,7 +938,6 @@ table_write_xml(TableResource *res, const char* id, const char* language, UBool
}
current = res->fFirst;
- i = 0;
while (current != NULL) {
res_write_xml(current, sid, language, FALSE, status);
@@ -949,7 +946,6 @@ table_write_xml(TableResource *res, const char* id, const char* language, UBool
return;
}
- i += 1;
current = current->fNext;
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/genren/README b/Build/source/libs/icu/icu-src/source/tools/genren/README
index e2e13bc3ed1..a18c294136d 100644
--- a/Build/source/libs/icu/icu-src/source/tools/genren/README
+++ b/Build/source/libs/icu/icu-src/source/tools/genren/README
@@ -20,6 +20,14 @@ This is prerequisite for the icu layoutex (Paragraph Layout) project, which is s
cd icu4c/source
svn export https://github.com/behdad/icu-le-hb/trunk/src layout
+(As an alternative to the above handling of layout engine header files, you can do the following:
+1. In the Makefile in this directory, temporarily delete $(LEX) from the list of objects for LIBS
+ before running make install-header
+2. After running make install-header, restore the deleted $(LEX) in the Makefile
+3. Then when comparing the old urename.h to the newly generated one, copy all of the lines beginning
+ "#define pl_" from the old version to the new one.
+ - Peter E)
+
- Regenerate urename.h
cd icu4c/source/tools/genren
diff --git a/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c b/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c
index b526e59454d..dadd4a87650 100644
--- a/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c
+++ b/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c
@@ -64,7 +64,7 @@
*
* UTrie stringPrepTrie; -- size in bytes=indexes[_SPREP_INDEX_TRIE_SIZE]
*
- * uint16_t mappingTable[]; -- Contains the sequecence of code units that the code point maps to
+ * uint16_t mappingTable[]; -- Contains the sequence of code units that the code point maps to
* size in bytes = indexes[_SPREP_INDEX_MAPPING_DATA_SIZE]
*
* The indexes array contains the following values:
@@ -459,7 +459,7 @@ storeMapping(uint32_t codepoint, uint32_t* mapping,int32_t length,
mappingDataCapacity += adjustedLen;
if(U_FAILURE(*status)){
- fprintf(stderr, "Failed to put entries into the hastable. Error: %s\n", u_errorName(*status));
+ fprintf(stderr, "Failed to put entries into the hash table. Error: %s\n", u_errorName(*status));
exit(*status);
}
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuexportdata/Makefile.in b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/Makefile.in
new file mode 100644
index 00000000000..6899d74d1b0
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/Makefile.in
@@ -0,0 +1,94 @@
+## Makefile.in for ICU - tools/icuexportdata
+## Copyright (C) 2021 and later: Unicode, Inc. and others.
+## License & terms of use: http://www.unicode.org/copyright.html
+
+## Source directory information
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+
+top_builddir = ../..
+
+include $(top_builddir)/icudefs.mk
+
+## Build directory information
+subdir = tools/icuexportdata
+
+TARGET_STUB_NAME = icuexportdata
+
+SECTION = 1
+
+MAN_FILES = $(TARGET_STUB_NAME).$(SECTION)
+
+## Extra files to remove for 'make clean'
+CLEANFILES = *~ $(DEPS) $(MAN_FILES)
+
+## Target information
+TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
+
+CPPFLAGS += -I$(srcdir) -I$(top_srcdir)/common -I$(srcdir)/../toolutil
+LIBS = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)
+
+SOURCES = $(shell cat $(srcdir)/sources.txt)
+OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o, $(SOURCES)))
+
+DEPS = $(OBJECTS:.o=.d)
+
+## List of phony targets
+.PHONY : all all-local install install-local clean clean-local \
+distclean distclean-local dist dist-local check check-local install-man
+
+## Clear suffix list
+.SUFFIXES :
+
+## List of standard targets
+all: all-local
+install: install-local
+clean: clean-local
+distclean : distclean-local
+dist: dist-local
+check: all check-local
+
+all-local: $(TARGET) $(MAN_FILES)
+
+install-local: all-local install-man
+ $(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ $(INSTALL) $(TARGET) $(DESTDIR)$(bindir)
+
+install-man: $(MAN_FILES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION)
+ $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION)
+
+
+dist-local:
+
+clean-local:
+ test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
+ $(RMV) $(TARGET) $(OBJECTS)
+
+distclean-local: clean-local
+ $(RMV) Makefile
+
+check-local: all-local
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(TARGET) : $(OBJECTS)
+ $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS)
+ $(POST_BUILD_STEP)
+
+
+%.$(SECTION): $(srcdir)/%.$(SECTION).in
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+ifeq (,$(MAKECMDGOALS))
+-include $(DEPS)
+else
+ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
+-include $(DEPS)
+endif
+endif
+
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.1.in b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.1.in
new file mode 100644
index 00000000000..71243ef0535
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.1.in
@@ -0,0 +1,13 @@
+.\" Hey, Emacs! This is -*-nroff-*- you know...
+.\"
+.\" icuexportdata.1: manual page for the icuexportdata utility
+.\"
+.\" Copyright (C) 2016 and later: Unicode, Inc. and others.
+.\" License & terms of use: http://www.unicode.org/copyright.html
+.\"
+.\" Manual page by Shane Carr <shane@unicode.org>.
+.\"
+.TH MAKECONV 1 "12 June 2021" "ICU MANPAGE" "ICU @VERSION@ Manual"
+.SH NAME
+.B icuexportdata
+\- Writes text files with Unicode properties data from ICU.
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.cpp b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.cpp
new file mode 100644
index 00000000000..ef933676115
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.cpp
@@ -0,0 +1,295 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+#include <iostream>
+#include <vector>
+#include "toolutil.h"
+#include "uoptions.h"
+#include "cmemory.h"
+#include "charstr.h"
+#include "cstring.h"
+#include "unicode/uchar.h"
+#include "unicode/errorcode.h"
+#include "unicode/uniset.h"
+#include "unicode/putil.h"
+#include "unicode/umutablecptrie.h"
+#include "writesrc.h"
+
+U_NAMESPACE_USE
+
+/*
+ * Global - verbosity
+ */
+UBool VERBOSE = FALSE;
+UBool QUIET = FALSE;
+
+UBool haveCopyright = TRUE;
+UCPTrieType trieType = UCPTRIE_TYPE_SMALL;
+const char* destdir = "";
+
+void handleError(ErrorCode& status, const char* context) {
+ if (status.isFailure()) {
+ std::cerr << "Error: " << context << ": " << status.errorName() << std::endl;
+ exit(status.reset());
+ }
+}
+
+class PropertyValueNameGetter : public ValueNameGetter {
+public:
+ PropertyValueNameGetter(UProperty prop) : property(prop) {}
+ ~PropertyValueNameGetter() override;
+ const char *getName(uint32_t value) override {
+ return u_getPropertyValueName(property, value, U_SHORT_PROPERTY_NAME);
+ }
+
+private:
+ UProperty property;
+};
+
+PropertyValueNameGetter::~PropertyValueNameGetter() {}
+
+void dumpBinaryProperty(UProperty uproperty, FILE* f) {
+ IcuToolErrorCode status("icuexportdata: dumpBinaryProperty");
+ const char* fullPropName = u_getPropertyName(uproperty, U_LONG_PROPERTY_NAME);
+ const char* shortPropName = u_getPropertyName(uproperty, U_SHORT_PROPERTY_NAME);
+ const USet* uset = u_getBinaryPropertySet(uproperty, status);
+ handleError(status, fullPropName);
+
+ fputs("[[binary_property]]\n", f);
+ fprintf(f, "long_name = \"%s\"\n", fullPropName);
+ if (shortPropName) fprintf(f, "short_name = \"%s\"\n", shortPropName);
+ usrc_writeUnicodeSet(f, uset, UPRV_TARGET_SYNTAX_TOML);
+}
+
+void dumpEnumeratedProperty(UProperty uproperty, FILE* f) {
+ IcuToolErrorCode status("icuexportdata: dumpEnumeratedProperty");
+ const char* fullPropName = u_getPropertyName(uproperty, U_LONG_PROPERTY_NAME);
+ const char* shortPropName = u_getPropertyName(uproperty, U_SHORT_PROPERTY_NAME);
+ const UCPMap* umap = u_getIntPropertyMap(uproperty, status);
+ handleError(status, fullPropName);
+
+ fputs("[[enum_property]]\n", f);
+ fprintf(f, "long_name = \"%s\"\n", fullPropName);
+ if (shortPropName) fprintf(f, "short_name = \"%s\"\n", shortPropName);
+ PropertyValueNameGetter valueNameGetter(uproperty);
+ usrc_writeUCPMap(f, umap, &valueNameGetter, UPRV_TARGET_SYNTAX_TOML);
+ fputs("\n", f);
+
+ U_ASSERT(u_getIntPropertyMinValue(uproperty) >= 0);
+ int32_t maxValue = u_getIntPropertyMaxValue(uproperty);
+ U_ASSERT(maxValue >= 0);
+ UCPTrieValueWidth width = UCPTRIE_VALUE_BITS_32;
+ if (maxValue <= 0xff) {
+ width = UCPTRIE_VALUE_BITS_8;
+ } else if (maxValue <= 0xffff) {
+ width = UCPTRIE_VALUE_BITS_16;
+ }
+ LocalUMutableCPTriePointer builder(umutablecptrie_fromUCPMap(umap, status));
+ LocalUCPTriePointer utrie(umutablecptrie_buildImmutable(
+ builder.getAlias(),
+ trieType,
+ width,
+ status));
+ handleError(status, fullPropName);
+
+ fputs("[enum_property.code_point_trie]\n", f);
+ usrc_writeUCPTrie(f, shortPropName, utrie.getAlias(), UPRV_TARGET_SYNTAX_TOML);
+}
+
+FILE* prepareOutputFile(const char* basename) {
+ IcuToolErrorCode status("icuexportdata");
+ CharString outFileName;
+ if (destdir != nullptr && *destdir != 0) {
+ outFileName.append(destdir, status).ensureEndsWithFileSeparator(status);
+ }
+ outFileName.append(basename, status);
+ outFileName.append(".toml", status);
+ handleError(status, basename);
+
+ FILE* f = fopen(outFileName.data(), "w");
+ if (f == nullptr) {
+ std::cerr << "Unable to open file: " << outFileName.data() << std::endl;
+ exit(U_FILE_ACCESS_ERROR);
+ }
+ if (!QUIET) {
+ std::cout << "Writing to: " << outFileName.data() << std::endl;
+ }
+
+ if (haveCopyright) {
+ usrc_writeCopyrightHeader(f, "#", 2021);
+ }
+ usrc_writeFileNameGeneratedBy(f, "#", basename, "icuexportdata.cpp");
+
+ return f;
+}
+
+enum {
+ OPT_HELP_H,
+ OPT_HELP_QUESTION_MARK,
+ OPT_MODE,
+ OPT_TRIE_TYPE,
+ OPT_VERSION,
+ OPT_DESTDIR,
+ OPT_ALL,
+ OPT_INDEX,
+ OPT_COPYRIGHT,
+ OPT_VERBOSE,
+ OPT_QUIET,
+
+ OPT_COUNT
+};
+
+#define UOPTION_MODE UOPTION_DEF("mode", 'm', UOPT_REQUIRES_ARG)
+#define UOPTION_TRIE_TYPE UOPTION_DEF("trie-type", '\1', UOPT_REQUIRES_ARG)
+#define UOPTION_ALL UOPTION_DEF("all", '\1', UOPT_NO_ARG)
+#define UOPTION_INDEX UOPTION_DEF("index", '\1', UOPT_NO_ARG)
+
+static UOption options[]={
+ UOPTION_HELP_H,
+ UOPTION_HELP_QUESTION_MARK,
+ UOPTION_MODE,
+ UOPTION_TRIE_TYPE,
+ UOPTION_VERSION,
+ UOPTION_DESTDIR,
+ UOPTION_ALL,
+ UOPTION_INDEX,
+ UOPTION_COPYRIGHT,
+ UOPTION_VERBOSE,
+ UOPTION_QUIET,
+};
+
+int main(int argc, char* argv[]) {
+ U_MAIN_INIT_ARGS(argc, argv);
+
+ /* preset then read command line options */
+ options[OPT_DESTDIR].value=u_getDataDirectory();
+ argc=u_parseArgs(argc, argv, UPRV_LENGTHOF(options), options);
+
+ if(options[OPT_VERSION].doesOccur) {
+ printf("icuexportdata version %s, ICU tool to dump data files for external consumers\n",
+ U_ICU_DATA_VERSION);
+ printf("%s\n", U_COPYRIGHT_STRING);
+ exit(0);
+ }
+
+ /* error handling, printing usage message */
+ if(argc<0) {
+ fprintf(stderr,
+ "error in command line argument \"%s\"\n",
+ argv[-argc]);
+ } else if(argc<2) {
+ argc=-1;
+ }
+
+ /* get the options values */
+ haveCopyright = options[OPT_COPYRIGHT].doesOccur;
+ destdir = options[OPT_DESTDIR].value;
+ VERBOSE = options[OPT_VERBOSE].doesOccur;
+ QUIET = options[OPT_QUIET].doesOccur;
+
+ // Load list of Unicode properties
+ std::vector<const char*> propNames;
+ for (int i=1; i<argc; i++) {
+ propNames.push_back(argv[i]);
+ }
+ if (options[OPT_ALL].doesOccur) {
+ for (int i=UCHAR_BINARY_START; i<UCHAR_INT_LIMIT; i++) {
+ if (i == UCHAR_BINARY_LIMIT) {
+ i = UCHAR_INT_START;
+ }
+ UProperty uprop = static_cast<UProperty>(i);
+ const char* propName = u_getPropertyName(uprop, U_SHORT_PROPERTY_NAME);
+ if (propName == NULL) {
+ propName = u_getPropertyName(uprop, U_LONG_PROPERTY_NAME);
+ if (propName != NULL && VERBOSE) {
+ std::cerr << "Note: falling back to long name for: " << propName << std::endl;
+ }
+ }
+ if (propName != NULL) {
+ propNames.push_back(propName);
+ }
+ }
+ }
+
+ if (propNames.empty()
+ || options[OPT_HELP_H].doesOccur
+ || options[OPT_HELP_QUESTION_MARK].doesOccur
+ || !options[OPT_MODE].doesOccur) {
+ FILE *stdfile=argc<0 ? stderr : stdout;
+ fprintf(stdfile,
+ "usage: %s -m uprops [-options] [--all | properties...]\n"
+ "\tdump Unicode property data to .toml files\n"
+ "options:\n"
+ "\t-h or -? or --help this usage text\n"
+ "\t-V or --version show a version message\n"
+ "\t-m or --mode mode: currently only 'uprops', but more may be added\n"
+ "\t --trie-type set the trie type (small or fast, default small)\n"
+ "\t-d or --destdir destination directory, followed by the path\n"
+ "\t --all write out all properties known to icuexportdata\n"
+ "\t --index write an _index.toml summarizing all data exported\n"
+ "\t-c or --copyright include a copyright notice\n"
+ "\t-v or --verbose Turn on verbose output\n"
+ "\t-q or --quiet do not display warnings and progress\n",
+ argv[0]);
+ return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR;
+ }
+
+ const char* mode = options[OPT_MODE].value;
+ if (uprv_strcmp(mode, "uprops") != 0) {
+ fprintf(stderr, "Invalid option for --mode (must be uprops)\n");
+ return U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ if (options[OPT_TRIE_TYPE].doesOccur) {
+ if (uprv_strcmp(options[OPT_TRIE_TYPE].value, "fast") == 0) {
+ trieType = UCPTRIE_TYPE_FAST;
+ } else if (uprv_strcmp(options[OPT_TRIE_TYPE].value, "small") == 0) {
+ trieType = UCPTRIE_TYPE_SMALL;
+ } else {
+ fprintf(stderr, "Invalid option for --trie-type (must be small or fast)\n");
+ return U_ILLEGAL_ARGUMENT_ERROR;
+ }
+ }
+
+ for (const char* propName : propNames) {
+ UProperty propEnum = u_getPropertyEnum(propName);
+ if (propEnum == UCHAR_INVALID_CODE) {
+ std::cerr << "Error: Invalid property alias: " << propName << std::endl;
+ return U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ FILE* f = prepareOutputFile(propName);
+
+ UVersionInfo versionInfo;
+ u_getUnicodeVersion(versionInfo);
+ char uvbuf[U_MAX_VERSION_STRING_LENGTH];
+ u_versionToString(versionInfo, uvbuf);
+ fprintf(f, "icu_version = \"%s\"\nunicode_version = \"%s\"\n\n",
+ U_ICU_VERSION,
+ uvbuf);
+
+ if (propEnum < UCHAR_BINARY_LIMIT) {
+ dumpBinaryProperty(propEnum, f);
+ } else if (UCHAR_INT_START <= propEnum && propEnum <= UCHAR_INT_LIMIT) {
+ dumpEnumeratedProperty(propEnum, f);
+ } else {
+ std::cerr << "Don't know how to write property: " << propEnum << std::endl;
+ return U_INTERNAL_PROGRAM_ERROR;
+ }
+
+ fclose(f);
+ }
+
+ if (options[OPT_INDEX].doesOccur) {
+ FILE* f = prepareOutputFile("_index");
+ fprintf(f, "index = [\n");
+ for (const char* propName : propNames) {
+ // At this point, propName is a valid property name, so it should be alphanum ASCII
+ fprintf(f, " { filename=\"%s.toml\" },\n", propName);
+ }
+ fprintf(f, "]\n");
+ fclose(f);
+ }
+
+ return 0;
+}
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.vcxproj b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.vcxproj
new file mode 100644
index 00000000000..48b4c23cf8b
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.vcxproj
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C5185F6D-BC0A-4DF7-A63C-B107D1C9C82F}</ProjectGuid>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <!-- The following import will include the 'default' configuration options for VS projects. -->
+ <Import Project="..\..\allinone\Build.Windows.ProjectConfiguration.props" />
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir>.\$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>.\$(Platform)\$(Configuration)\</IntDir>
+ <!-- The ICU projects use "Win32" to mean "x86", so we need to special case it. -->
+ <OutDir Condition="'$(Platform)'=='Win32'">.\x86\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Platform)'=='Win32'">.\x86\$(Configuration)\</IntDir>
+ <!-- Disable Incremental Linking for Release builds as it prevents Link-time Code Generation -->
+ <LinkIncremental Condition="'$(Configuration)'=='Debug'">true</LinkIncremental>
+ <LinkIncremental Condition="'$(Configuration)'=='Release'">false</LinkIncremental>
+ </PropertyGroup>
+ <!-- Options that are common to *all* configurations -->
+ <ItemDefinitionGroup>
+ <Midl>
+ <TypeLibraryName>$(OutDir)/icuexportdata.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <CompileAs>Default</CompileAs>
+ <DisableLanguageExtensions>false</DisableLanguageExtensions>
+ <AdditionalIncludeDirectories>..\..\..\include;..\..\common;..\toolutil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PrecompiledHeaderOutputFile>$(OutDir)/icuexportdata.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(OutDir)/</AssemblerListingLocation>
+ <ObjectFileName>$(OutDir)/</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)/icuexportdata.pdb</ProgramDataBaseFileName>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <OutputFile>$(OutDir)/icuexportdata.exe</OutputFile>
+ <AdditionalLibraryDirectories>..\..\..\$(IcuLibOutputDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ </Link>
+ <CustomBuildStep>
+ <Command>copy "$(TargetPath)" ..\..\..\$(IcuBinOutputDir)</Command>
+ <Outputs>..\..\..\$(IcuBinOutputDir)\$(TargetFileName);%(Outputs)</Outputs>
+ </CustomBuildStep>
+ </ItemDefinitionGroup>
+ <!-- Options that are common to all 'Debug' project configurations -->
+ <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+ <ClCompile>
+ <BrowseInformation>true</BrowseInformation>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>icuucd.lib;icutud.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <!-- Options that are common to all 'Release' project configurations -->
+ <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
+ <ClCompile>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>icuuc.lib;icutu.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="icuexportdata.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.vcxproj.filters b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.vcxproj.filters
new file mode 100644
index 00000000000..02b3257ba32
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/icuexportdata.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{7641b9da-f313-4ee0-8c60-2c8050c87e45}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{0333a61f-f79b-490c-9761-a4e5966f3ff0}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{05869d75-29f4-43d9-bebc-9973e550d958}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="icuexportdata.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuexportdata/sources.txt b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/sources.txt
new file mode 100644
index 00000000000..13520ecb2f4
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/icuexportdata/sources.txt
@@ -0,0 +1 @@
+icuexportdata.cpp
diff --git a/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp b/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
index 934825924f5..517c977e1e4 100644
--- a/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
@@ -253,7 +253,7 @@ main(int argc, char* argv[]) {
#if UCONFIG_ENABLE_PLUGINS
" -L or --list-plugins - List and diagnose issues with ICU Plugins\n"
#endif
- " -K or --cleanup - Call u_cleanup() before exitting (will attempt to unload plugins)\n"
+ " -K or --cleanup - Call u_cleanup() before exiting (will attempt to unload plugins)\n"
"\n"
"If no arguments are given, the tool will print ICU version and configuration information.\n"
);
diff --git a/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.cpp b/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.cpp
index 37dc46203f1..1e9209d2bca 100644
--- a/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.cpp
@@ -213,6 +213,13 @@ int main(int argc, char* argv[])
options[OPT_DESTDIR].value=u_getDataDirectory();
argc=u_parseArgs(argc, argv, UPRV_LENGTHOF(options), options);
+ if(options[OPT_VERSION].doesOccur) {
+ printf("makeconv version %u.%u, ICU tool to read .ucm codepage mapping files and write .cnv files\n",
+ dataInfo.formatVersion[0], dataInfo.formatVersion[1]);
+ printf("%s\n", U_COPYRIGHT_STRING);
+ exit(0);
+ }
+
/* error handling, printing usage message */
if(argc<0) {
fprintf(stderr,
@@ -244,13 +251,6 @@ int main(int argc, char* argv[])
return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR;
}
- if(options[OPT_VERSION].doesOccur) {
- printf("makeconv version %u.%u, ICU tool to read .ucm codepage mapping files and write .cnv files\n",
- dataInfo.formatVersion[0], dataInfo.formatVersion[1]);
- printf("%s\n", U_COPYRIGHT_STRING);
- exit(0);
- }
-
/* get the options values */
haveCopyright = options[OPT_COPYRIGHT].doesOccur;
const char *destdir = options[OPT_DESTDIR].value;
diff --git a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
index 5ab682e4df8..8de99cb9cea 100644
--- a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
@@ -916,7 +916,7 @@ static int32_t initializePkgDataFlags(UPKGOptions *o) {
/*
- * Given the base libName and version numbers, generate the libary file names and store it in libFileNames.
+ * Given the base libName and version numbers, generate the library file names and store it in libFileNames.
* Depending on the configuration, the library name may either end with version number or shared object suffix.
*/
static void createFileNames(UPKGOptions *o, const char mode, const char *version_major, const char *version, const char *libName, UBool reverseExt, UBool noVersion) {
@@ -1651,7 +1651,7 @@ static int32_t pkg_createWithoutAssemblyCode(UPKGOptions *o, const char *targetD
const char *name;
if (i == 0) {
- /* The first iteration calls the gencmn function and initailizes the buffer. */
+ /* The first iteration calls the gencmn function and initializes the buffer. */
createCommonDataFile(o->tmpDir, o->shortName, o->entryName, NULL, o->srcDir, o->comment, o->fileListFiles->str, 0, TRUE, o->verbose, gencmnFile);
buffer[0] = 0;
#ifdef USE_SINGLE_CCODE_FILE
diff --git a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.h b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.h
index 3297d0a2daf..8ae1ec45a2b 100644
--- a/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.h
+++ b/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.h
@@ -36,7 +36,7 @@ typedef struct _CharList
/*
- * write CharList 'l' into stream 's' using deliminter 'delim' (delim can be NULL). quoted: -1 remove, 0 as is, 1 add quotes
+ * write CharList 'l' into stream 's' using delimiter 'delim' (delim can be NULL). quoted: -1 remove, 0 as is, 1 add quotes
*/
const char *pkg_writeCharList(FileStream *s, CharList *l, const char *delim, int32_t quoted);
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/BUILD b/Build/source/libs/icu/icu-src/source/tools/toolutil/BUILD
new file mode 100644
index 00000000000..276c857f124
--- /dev/null
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/BUILD
@@ -0,0 +1,126 @@
+# © 2021 and later: Unicode, Inc. and others.
+# License & terms of use: http://www.unicode.org/copyright.html
+
+# This Bazel build file defines targets that are dependencies for building
+# the gennorm2 and genprops binaries.
+
+load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
+
+package(
+ default_visibility = ["//visibility:public"],
+)
+
+cc_library(
+ name = "toolutil",
+ includes = ["."],
+ hdrs = ["toolutil.h"],
+ srcs = ["toolutil.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = ["//icu4c/source/common:platform"],
+)
+
+cc_library(
+ name = "unewdata",
+ includes = ["."],
+ hdrs = ["unewdata.h"],
+ srcs = ["unewdata.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = [
+ ":filestrm",
+ "//icu4c/source/common:platform",
+ ],
+)
+
+cc_library(
+ name = "uoptions",
+ includes = ["."],
+ hdrs = ["uoptions.h"],
+ srcs = ["uoptions.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = ["//icu4c/source/common:platform"],
+)
+
+cc_library(
+ name = "writesrc",
+ includes = ["."],
+ hdrs = ["writesrc.h"],
+ srcs = ["writesrc.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = [
+ "//icu4c/source/common:bytestream",
+ "//icu4c/source/common:platform",
+ "//icu4c/source/common:uniset_core",
+ ],
+)
+
+cc_library(
+ name = "uparse",
+ includes = ["."],
+ hdrs = ["uparse.h"],
+ srcs = ["uparse.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = [
+ ":filestrm",
+ "//icu4c/source/common:platform",
+ ],
+)
+
+cc_library(
+ name = "filestrm",
+ includes = ["."],
+ hdrs = ["filestrm.h"],
+ srcs = ["filestrm.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = ["//icu4c/source/common:platform"],
+)
+
+cc_library(
+ name = "ppucd",
+ includes = ["."],
+ hdrs = ["ppucd.h"],
+ srcs = ["ppucd.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = [
+ ":uparse",
+ "//icu4c/source/common:platform",
+ ],
+)
+
+cc_library(
+ name = "denseranges",
+ includes = ["."],
+ hdrs = ["denseranges.h"],
+ srcs = ["denseranges.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = ["//icu4c/source/common:platform"],
+)
+
+cc_library(
+ name = "collationinfo",
+ includes = ["."],
+ hdrs = ["collationinfo.h"],
+ srcs = ["collationinfo.cpp"],
+ local_defines = [
+ "U_TOOLUTIL_IMPLEMENTATION",
+ ],
+ deps = [
+ "//icu4c/source/common:platform",
+ "//icu4c/source/i18n:headers",
+ ],
+)
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.cpp
index 464d6be9f52..65513f3611f 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.cpp
@@ -64,7 +64,7 @@ parseFlagsFile(const char *fileName, char **flagBuffer, int32_t flagBufferSize,
}
if ((int32_t)uprv_strlen(buffer) == (currentBufferSize - 1) && buffer[currentBufferSize-2] != '\n') {
- /* Allocate more space for buffer if it didnot read the entrire line */
+ /* Allocate more space for buffer if it did not read the entire line */
allocateMoreSpace = TRUE;
T_FileStream_rewind(f);
break;
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
index 1d4542f2e30..af458677976 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
@@ -260,7 +260,7 @@ checkAlias(const char *itemName,
}
// convert the Unicode string to char *
- char localeID[32];
+ char localeID[48];
if(length>=(int32_t)sizeof(localeID)) {
fprintf(stderr, "icupkg/ures_enumDependencies(%s res=%08x) alias locale ID length %ld too long\n",
itemName, res, (long)length);
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.cpp
index b11efa7f7c4..bf905884074 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.cpp
@@ -29,6 +29,13 @@ U_NAMESPACE_BEGIN
PropertyNames::~PropertyNames() {}
+// TODO: Create a concrete subclass for the default PropertyNames implementation
+// using the ICU library built-in property names API & data.
+// Currently only the genprops tool uses PreparsedUCD, and provides its own
+// PropertyNames implementation using its just-build property names data and its own code.
+// At some point, we should use PreparsedUCD in tests, and then we will need the
+// default implementation somewhere.
+#if 0
int32_t
PropertyNames::getPropertyEnum(const char *name) const {
return u_getPropertyEnum(name);
@@ -38,6 +45,7 @@ int32_t
PropertyNames::getPropertyValueEnum(int32_t property, const char *name) const {
return u_getPropertyValueEnum((UProperty)property, name);
}
+#endif
UniProps::UniProps()
: start(U_SENTINEL), end(U_SENTINEL),
@@ -55,7 +63,7 @@ UniProps::~UniProps() {}
const int32_t PreparsedUCD::kNumLineBuffers;
PreparsedUCD::PreparsedUCD(const char *filename, UErrorCode &errorCode)
- : icuPnames(new PropertyNames()), pnames(icuPnames),
+ : pnames(nullptr),
file(NULL),
defaultLineIndex(-1), blockLineIndex(-1), lineIndex(0),
lineNumber(0),
@@ -84,7 +92,6 @@ PreparsedUCD::~PreparsedUCD() {
if(file!=stdin) {
fclose(file);
}
- delete icuPnames;
}
// Same order as the LineType values.
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.h
index 1f9fb295c10..7c9c34af6fb 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.h
@@ -36,8 +36,8 @@ U_NAMESPACE_BEGIN
class U_TOOLUTIL_API PropertyNames {
public:
virtual ~PropertyNames();
- virtual int32_t getPropertyEnum(const char *name) const;
- virtual int32_t getPropertyValueEnum(int32_t property, const char *name) const;
+ virtual int32_t getPropertyEnum(const char *name) const = 0;
+ virtual int32_t getPropertyValueEnum(int32_t property, const char *name) const = 0;
};
struct U_TOOLUTIL_API UniProps {
@@ -102,7 +102,7 @@ public:
/** Destructor. */
~PreparsedUCD();
- /** Sets (aliases) a non-standard PropertyNames implementation. Caller retains ownership. */
+ /** Sets (aliases) a PropertyNames implementation. Caller retains ownership. */
void setPropertyNames(const PropertyNames *pn) { pnames=pn; }
/**
@@ -159,7 +159,6 @@ private:
static const int32_t kNumLineBuffers=3;
- PropertyNames *icuPnames; // owned
const PropertyNames *pnames; // aliased
FILE *file;
int32_t defaultLineIndex, blockLineIndex, lineIndex;
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.cpp
index 926755a2aa8..8d669a93187 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.cpp
@@ -45,6 +45,7 @@
/* swapping implementations in common */
+#include "emojiprops.h"
#include "uresdata.h"
#include "ucnv_io.h"
#include "uprops.h"
@@ -741,6 +742,115 @@ ulayout_swap(const UDataSwapper *ds,
return headerSize + size;
}
+// Unicode emoji properties data swapping --------------------------------------
+
+static int32_t U_CALLCONV
+uemoji_swap(const UDataSwapper *ds,
+ const void *inData, int32_t length, void *outData,
+ UErrorCode *pErrorCode) {
+ // udata_swapDataHeader checks the arguments.
+ int32_t headerSize = udata_swapDataHeader(ds, inData, length, outData, pErrorCode);
+ if (pErrorCode == nullptr || U_FAILURE(*pErrorCode)) {
+ return 0;
+ }
+
+ // Check data format and format version.
+ const UDataInfo *pInfo = (const UDataInfo *)((const char *)inData + 4);
+ if (!(
+ pInfo->dataFormat[0] == u'E' &&
+ pInfo->dataFormat[1] == u'm' &&
+ pInfo->dataFormat[2] == u'o' &&
+ pInfo->dataFormat[3] == u'j' &&
+ pInfo->formatVersion[0] == 1)) {
+ udata_printError(ds,
+ "uemoji_swap(): data format %02x.%02x.%02x.%02x (format version %02x) "
+ "is not recognized as emoji properties data\n",
+ pInfo->dataFormat[0], pInfo->dataFormat[1],
+ pInfo->dataFormat[2], pInfo->dataFormat[3],
+ pInfo->formatVersion[0]);
+ *pErrorCode = U_UNSUPPORTED_ERROR;
+ return 0;
+ }
+
+ const uint8_t *inBytes = (const uint8_t *)inData + headerSize;
+ uint8_t *outBytes = (uint8_t *)outData + headerSize;
+
+ const int32_t *inIndexes = (const int32_t *)inBytes;
+
+ if (length >= 0) {
+ length -= headerSize;
+ // We expect to read at least EmojiProps::IX_TOTAL_SIZE.
+ if (length < 14 * 4) {
+ udata_printError(ds,
+ "uemoji_swap(): too few bytes (%d after header) for emoji properties data\n",
+ length);
+ *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+ return 0;
+ }
+ }
+
+ // First offset after indexes[].
+ int32_t cpTrieOffset = udata_readInt32(ds, inIndexes[EmojiProps::IX_CPTRIE_OFFSET]);
+ int32_t indexesLength = cpTrieOffset / 4;
+ if (indexesLength < 14) {
+ udata_printError(ds,
+ "uemoji_swap(): too few indexes (%d) for emoji properties data\n",
+ indexesLength);
+ *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+ return 0;
+ }
+
+ // Read the data offsets before swapping anything.
+ int32_t indexes[EmojiProps::IX_TOTAL_SIZE + 1];
+ indexes[0] = cpTrieOffset;
+ for (int32_t i = 1; i <= EmojiProps::IX_TOTAL_SIZE; ++i) {
+ indexes[i] = udata_readInt32(ds, inIndexes[i]);
+ }
+ int32_t size = indexes[EmojiProps::IX_TOTAL_SIZE];
+
+ if (length >= 0) {
+ if (length < size) {
+ udata_printError(ds,
+ "uemoji_swap(): too few bytes (%d after header) "
+ "for all of emoji properties data\n",
+ length);
+ *pErrorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+ return 0;
+ }
+
+ // Copy the data for inaccessible bytes.
+ if (inBytes != outBytes) {
+ uprv_memcpy(outBytes, inBytes, size);
+ }
+
+ // Swap the int32_t indexes[].
+ int32_t offset = 0;
+ int32_t top = cpTrieOffset;
+ ds->swapArray32(ds, inBytes, top - offset, outBytes, pErrorCode);
+ offset = top;
+
+ // Swap the code point trie.
+ top = indexes[EmojiProps::IX_CPTRIE_OFFSET + 1];
+ int32_t count = top - offset;
+ U_ASSERT(count >= 0);
+ if (count >= 16) {
+ utrie_swapAnyVersion(ds, inBytes + offset, count, outBytes + offset, pErrorCode);
+ }
+ offset = top;
+
+ // Swap all of the string tries.
+ // They are all serialized as arrays of 16-bit units.
+ offset = indexes[EmojiProps::IX_BASIC_EMOJI_TRIE_OFFSET];
+ top = indexes[EmojiProps::IX_RGI_EMOJI_ZWJ_SEQUENCE_TRIE_OFFSET + 1];
+ ds->swapArray16(ds, inBytes + offset, top - offset, outBytes + offset, pErrorCode);
+ offset = top;
+
+ U_ASSERT(offset == size);
+ }
+
+ return headerSize + size;
+}
+
/* Swap 'Test' data from gentest */
static int32_t U_CALLCONV
test_swap(const UDataSwapper *ds,
@@ -836,6 +946,8 @@ static const struct {
{ { ULAYOUT_FMT_0, ULAYOUT_FMT_1, ULAYOUT_FMT_2, ULAYOUT_FMT_3 },
ulayout_swap }, // dataFormat="Layo"
+ { { u'E', u'm', u'o', u'j' }, uemoji_swap },
+
#if !UCONFIG_NO_COLLATION
{ { 0x55, 0x43, 0x6f, 0x6c }, ucol_swap }, /* dataFormat="UCol" */
{ { 0x49, 0x6e, 0x76, 0x43 }, ucol_swapInverseUCA },/* dataFormat="InvC" */
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
index 444f8497a74..1fc68aa69c8 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
@@ -30,6 +30,8 @@
#include <stdio.h>
#include <sys/stat.h>
+#include <fstream>
+#include <time.h>
#include "unicode/utypes.h"
#ifndef U_TOOLUTIL_IMPLEMENTATION
@@ -67,7 +69,6 @@
#include "cmemory.h"
#include "cstring.h"
#include "toolutil.h"
-#include "unicode/ucal.h"
U_NAMESPACE_BEGIN
@@ -86,19 +87,11 @@ U_NAMESPACE_END
static int32_t currentYear = -1;
U_CAPI int32_t U_EXPORT2 getCurrentYear() {
-#if !UCONFIG_NO_FORMATTING
- UErrorCode status=U_ZERO_ERROR;
- UCalendar *cal = NULL;
-
if(currentYear == -1) {
- cal = ucal_open(NULL, -1, NULL, UCAL_TRADITIONAL, &status);
- ucal_setMillis(cal, ucal_getNow(), &status);
- currentYear = ucal_get(cal, UCAL_YEAR, &status);
- ucal_close(cal);
+ time_t now = time(nullptr);
+ tm *fields = gmtime(&now);
+ currentYear = 1900 + fields->tm_year;
}
-#else
- /* No formatting- no way to set the current year. */
-#endif
return currentYear;
}
@@ -218,6 +211,37 @@ uprv_fileExists(const char *file) {
}
#endif
+U_CAPI int32_t U_EXPORT2
+uprv_compareGoldenFiles(
+ const char* buffer, int32_t bufferLen,
+ const char* goldenFilePath,
+ bool overwrite) {
+
+ if (overwrite) {
+ std::ofstream ofs;
+ ofs.open(goldenFilePath);
+ ofs.write(buffer, bufferLen);
+ ofs.close();
+ return -1;
+ }
+
+ std::ifstream ifs(goldenFilePath, std::ifstream::in);
+ int32_t pos = 0;
+ char c;
+ while ((c = ifs.get()) != std::char_traits<char>::eof() && pos < bufferLen) {
+ if (c != buffer[pos]) {
+ // Files differ at this position
+ return pos;
+ }
+ pos++;
+ }
+ if (pos < bufferLen || c != std::char_traits<char>::eof()) {
+ // Files are different lengths
+ return pos;
+ }
+ return -1;
+}
+
/*U_CAPI UDate U_EXPORT2
uprv_getModificationDate(const char *pathname, UErrorCode *status)
{
@@ -242,7 +266,7 @@ struct UToolMemory {
char name[64];
int32_t capacity, maxCapacity, size, idx;
void *array;
- alignas(max_align_t) char staticArray[1];
+ alignas(std::max_align_t) char staticArray[1];
};
U_CAPI UToolMemory * U_EXPORT2
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
index e6be0a2adfe..1c9f06758ff 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
@@ -48,7 +48,7 @@ public:
IcuToolErrorCode(const char *loc) : location(loc) {}
virtual ~IcuToolErrorCode();
protected:
- virtual void handleFailure() const;
+ virtual void handleFailure() const override;
private:
const char *location;
};
@@ -127,6 +127,21 @@ uprv_fileExists(const char *file);
#endif
/**
+ * Performs a golden data test. Asserts that the contents of the buffer is equal
+ * to the data in goldenFilePath.
+ *
+ * Pass the value of the -G flag to "overwrite"; if true, new goldens will be
+ * written to the filesystem.
+ *
+ * @return The first index at which the files differ, or -1 if they are the same.
+ */
+U_CAPI int32_t U_EXPORT2
+uprv_compareGoldenFiles(
+ const char* buffer, int32_t bufferLen,
+ const char* goldenFilePath,
+ bool overwrite);
+
+/**
* Return the modification date for the specified file or directory.
* Return value is undefined if there was an error.
*/
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj
index 5fe0035a124..b74ac41cb0e 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj
@@ -74,7 +74,7 @@
<TypeLibraryName>.\..\..\..\lib\icutu.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\bin\icutu68.dll</OutputFile>
+ <OutputFile>..\..\..\bin\icutu70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\lib\icutu.pdb</ProgramDatabaseFile>
<DataExecutionPrevention>
</DataExecutionPrevention>
@@ -86,7 +86,7 @@
<TypeLibraryName>.\..\..\..\lib\icutud.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\bin\icutu68d.dll</OutputFile>
+ <OutputFile>..\..\..\bin\icutu70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\lib\icutud.pdb</ProgramDatabaseFile>
<DataExecutionPrevention>
</DataExecutionPrevention>
@@ -113,7 +113,7 @@
<WholeProgramOptimization>true</WholeProgramOptimization>
</ClCompile>
<Link>
- <OutputFile>..\..\..\bin64\icutu68.dll</OutputFile>
+ <OutputFile>..\..\..\bin64\icutu70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\lib64\icutu.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\lib64\icutu.lib</ImportLibrary>
</Link>
@@ -123,7 +123,7 @@
<TypeLibraryName>.\..\..\..\lib64\icutud.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\bin64\icutu68d.dll</OutputFile>
+ <OutputFile>..\..\..\bin64\icutu70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\lib64\icutud.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\lib64\icutud.lib</ImportLibrary>
</Link>
@@ -144,7 +144,7 @@
<TypeLibraryName>..\..\..\libARM\icutu.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\binARM\icutu68.dll</OutputFile>
+ <OutputFile>..\..\..\binARM\icutu70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\libARM\icutu.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\libARM\icutu.lib</ImportLibrary>
</Link>
@@ -157,7 +157,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
- <OutputFile>..\..\..\binARM\icutu68d.dll</OutputFile>
+ <OutputFile>..\..\..\binARM\icutu70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\libARM\icutud.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\libARM\icutud.lib</ImportLibrary>
</Link>
@@ -178,7 +178,7 @@
<TypeLibraryName>.\..\..\..\libARM64\icutu.tlb</TypeLibraryName>
</Midl>
<Link>
- <OutputFile>..\..\..\binARM64\icutu68.dll</OutputFile>
+ <OutputFile>..\..\..\binARM64\icutu70.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\libARM64\icutu.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\libARM64\icutu.lib</ImportLibrary>
</Link>
@@ -191,7 +191,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
- <OutputFile>..\..\..\binARM64\icutu68d.dll</OutputFile>
+ <OutputFile>..\..\..\binARM64\icutu70d.dll</OutputFile>
<ProgramDatabaseFile>.\..\..\..\libARM64\icutud.pdb</ProgramDatabaseFile>
<ImportLibrary>..\..\..\libARM64\icutud.lib</ImportLibrary>
</Link>
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.cpp
index d1d4043dd4a..c8e906f2d55 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.cpp
@@ -437,7 +437,7 @@ ucbuf_getcx32(UCHARBUF* buf,UErrorCode* error) {
/* unescaping failed so we just return
* c1 and not consume the buffer
* this is useful for rules with escapes
- * in resouce bundles
+ * in resource bundles
* eg: \' \\ \"
*/
return c1;
@@ -531,14 +531,14 @@ ucbuf_open(const char* fileName,const char** cp,UBool showWarning, UBool buffere
/* TODO: this method will fail if at the
- * begining of buffer and the uchar to unget
+ * beginning of buffer and the uchar to unget
* is from the previous buffer. Need to implement
* system to take care of that situation.
*/
U_CAPI void U_EXPORT2
ucbuf_ungetc(int32_t c,UCHARBUF* buf){
/* decrement currentPos pointer
- * if not at the begining of buffer
+ * if not at the beginning of buffer
*/
if(buf->currentPos!=buf->buffer){
if(*(buf->currentPos-1)==c){
@@ -664,7 +664,7 @@ ucbuf_resolveFileName(const char* inputDir, const char* fileName, char* target,
target[0] = '\0';
/*
* append the input dir to openFileName if the first char in
- * filename is not file seperation char and the last char input directory is not '.'.
+ * filename is not file separation char and the last char input directory is not '.'.
* This is to support :
* genrb -s. /home/icu/data
* genrb -s. icu/data
@@ -696,7 +696,7 @@ ucbuf_resolveFileName(const char* inputDir, const char* fileName, char* target,
* Unicode TR 13 says any of the below chars is
* a new line char in a readline function in addition
* to CR+LF combination which needs to be
- * handled seperately
+ * handled separately
*/
static UBool ucbuf_isCharNewLine(UChar c){
switch(c){
@@ -736,7 +736,7 @@ ucbuf_readline(UCHARBUF* buf,int32_t* len,UErrorCode* err){
}
}
/*
- * Accoding to TR 13 readLine functions must interpret
+ * According to TR 13 readLine functions must interpret
* CR, CR+LF, LF, NEL, PS, LS or FF as line seperators
*/
/* Windows CR LF */
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.h
index 116da37e9bc..9214d419711 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.h
@@ -49,7 +49,7 @@ struct ULine {
* Opens the UCHARBUF with the given file stream and code page for conversion
* @param fileName Name of the file to open.
* @param codepage The encoding of the file stream to convert to Unicode.
- * If *codepoge is NULL on input the API will try to autodetect
+ * If *codepage is NULL on input the API will try to autodetect
* popular Unicode encodings
* @param showWarning Flag to print out warnings to STDOUT
* @param buffered If TRUE performs a buffered read of the input file. If FALSE reads
@@ -124,7 +124,7 @@ ucbuf_rewind(UCHARBUF* buf,UErrorCode* err);
/**
* Returns a pointer to the internal converted buffer
* @param buf Pointer to UCHARBUF structure
- * @param len Pointer to int32_t to receive the lenth of buffer
+ * @param len Pointer to int32_t to receive the length of buffer
* @param err is a pointer to a valid <code>UErrorCode</code> value. If this value
* indicates a failure on entry, the function will immediately return.
* On exit the value will indicate the success of the operation.
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.cpp
index ed1afb918eb..1ff2d7d1932 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.cpp
@@ -101,7 +101,7 @@ parseState(const char *s, int32_t state[256], uint32_t *pFlags) {
end=start;
}
- /* determine the state entrys for this range */
+ /* determine the state entry for this range */
if(*s!=':' && *s!='.') {
/* the default is: final state with valid entries */
entry=MBCS_ENTRY_FINAL(0, MBCS_STATE_VALID_16, 0);
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.h
index e6d5cbf9d45..d00e3da924a 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.h
@@ -57,7 +57,7 @@ struct UOption {
void *context; /* parameter for the function */
char shortName; /* 'f' for -f */
char hasArg; /* enum value: option takes no/requires/may have argument */
- char doesOccur; /* boolean for "this one occured" */
+ char doesOccur; /* boolean for "this one occurred" */
};
/* macro for an entry in a declaration of UOption[] */
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.cpp
index 10b4ad246f6..143254a7f34 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.cpp
@@ -23,13 +23,25 @@
#include "unicode/utypes.h"
#include "unicode/putil.h"
#include "unicode/ucptrie.h"
+#include "unicode/errorcode.h"
+#include "unicode/uniset.h"
+#include "unicode/usetiter.h"
+#include "unicode/utf16.h"
#include "utrie2.h"
#include "cstring.h"
#include "writesrc.h"
+#include "util.h"
+
+U_NAMESPACE_BEGIN
+
+ValueNameGetter::~ValueNameGetter() {}
+
+U_NAMESPACE_END
+
+U_NAMESPACE_USE
static FILE *
-usrc_createWithHeader(const char *path, const char *filename,
- const char *header, const char *generator) {
+usrc_createWithoutHeader(const char *path, const char *filename) {
char buffer[1024];
const char *p;
char *q;
@@ -50,19 +62,7 @@ usrc_createWithHeader(const char *path, const char *filename,
}
f=fopen(p, "w");
- if(f!=NULL) {
- const struct tm *lt;
- time_t t;
-
- time(&t);
- lt=localtime(&t);
- if(generator==NULL) {
- strftime(buffer, sizeof(buffer), "%Y-%m-%d", lt);
- fprintf(f, header, filename, buffer);
- } else {
- fprintf(f, header, filename, generator);
- }
- } else {
+ if (f==NULL) {
fprintf(
stderr,
"usrc_create(%s, %s): unable to create file\n",
@@ -73,55 +73,72 @@ usrc_createWithHeader(const char *path, const char *filename,
U_CAPI FILE * U_EXPORT2
usrc_create(const char *path, const char *filename, int32_t copyrightYear, const char *generator) {
- const char *header;
- char buffer[200];
- if(copyrightYear<=2016) {
- header=
- "// © 2016 and later: Unicode, Inc. and others.\n"
- "// License & terms of use: http://www.unicode.org/copyright.html\n"
- "//\n"
- "// Copyright (C) 1999-2016, International Business Machines\n"
- "// Corporation and others. All Rights Reserved.\n"
- "//\n"
- "// file name: %s\n"
- "//\n"
- "// machine-generated by: %s\n"
- "\n\n";
- } else {
- sprintf(buffer,
- "// © %d and later: Unicode, Inc. and others.\n"
- "// License & terms of use: http://www.unicode.org/copyright.html\n"
- "//\n"
- "// file name: %%s\n"
- "//\n"
- "// machine-generated by: %%s\n"
- "\n\n",
- (int)copyrightYear);
- header=buffer;
+ FILE *f = usrc_createWithoutHeader(path, filename);
+ if (f == NULL) {
+ return f;
}
- return usrc_createWithHeader(path, filename, header, generator);
+ usrc_writeCopyrightHeader(f, "//", copyrightYear);
+ usrc_writeFileNameGeneratedBy(f, "//", filename, generator);
+ return f;
}
U_CAPI FILE * U_EXPORT2
-usrc_createTextData(const char *path, const char *filename, const char *generator) {
- // TODO: Add parameter for the first year this file was generated, not before 2016.
- static const char *header=
- "# Copyright (C) 2016 and later: Unicode, Inc. and others.\n"
- "# License & terms of use: http://www.unicode.org/copyright.html\n"
- "# Copyright (C) 1999-2016, International Business Machines\n"
- "# Corporation and others. All Rights Reserved.\n"
- "#\n"
- "# file name: %s\n"
- "#\n"
- "# machine-generated by: %s\n"
- "\n\n";
- return usrc_createWithHeader(path, filename, header, generator);
+usrc_createTextData(const char *path, const char *filename, int32_t copyrightYear, const char *generator) {
+ FILE *f = usrc_createWithoutHeader(path, filename);
+ if (f == NULL) {
+ return f;
+ }
+ usrc_writeCopyrightHeader(f, "#", copyrightYear);
+ usrc_writeFileNameGeneratedBy(f, "#", filename, generator);
+ return f;
+}
+
+U_CAPI void U_EXPORT2
+usrc_writeCopyrightHeader(FILE *f, const char *prefix, int32_t copyrightYear) {
+ fprintf(f,
+ "%s Copyright (C) %d and later: Unicode, Inc. and others.\n"
+ "%s License & terms of use: http://www.unicode.org/copyright.html\n",
+ prefix, copyrightYear, prefix);
+ if (copyrightYear <= 2016) {
+ fprintf(f,
+ "%s Copyright (C) 1999-2016, International Business Machines\n"
+ "%s Corporation and others. All Rights Reserved.\n",
+ prefix, prefix);
+ }
+}
+
+U_CAPI void U_EXPORT2
+usrc_writeFileNameGeneratedBy(
+ FILE *f,
+ const char *prefix,
+ const char *filename,
+ const char *generator) {
+ char buffer[1024];
+ const struct tm *lt;
+ time_t t;
+
+ const char *pattern =
+ "%s\n"
+ "%s file name: %s\n"
+ "%s\n"
+ "%s machine-generated by: %s\n"
+ "\n";
+
+ time(&t);
+ lt=localtime(&t);
+ if(generator==NULL) {
+ strftime(buffer, sizeof(buffer), "%Y-%m-%d", lt);
+ fprintf(f, pattern, prefix, prefix, filename, prefix, prefix, buffer);
+ } else {
+ fprintf(f, pattern, prefix, prefix, filename, prefix, prefix, generator);
+ }
}
U_CAPI void U_EXPORT2
usrc_writeArray(FILE *f,
const char *prefix,
const void *p, int32_t width, int32_t length,
+ const char *indent,
const char *postfix) {
const uint8_t *p8;
const uint16_t *p16;
@@ -155,6 +172,7 @@ usrc_writeArray(FILE *f,
fputc(',', f);
} else {
fputs(",\n", f);
+ fputs(indent, f);
col=0;
}
}
@@ -186,11 +204,11 @@ usrc_writeUTrie2Arrays(FILE *f,
const char *postfix) {
if(pTrie->data32==NULL) {
/* 16-bit trie */
- usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength+pTrie->dataLength, postfix);
+ usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength+pTrie->dataLength, "", postfix);
} else {
/* 32-bit trie */
- usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength, postfix);
- usrc_writeArray(f, data32Prefix, pTrie->data32, 32, pTrie->dataLength, postfix);
+ usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength, "", postfix);
+ usrc_writeArray(f, data32Prefix, pTrie->data32, 32, pTrie->dataLength, "", postfix);
}
}
@@ -247,13 +265,15 @@ U_CAPI void U_EXPORT2
usrc_writeUCPTrieArrays(FILE *f,
const char *indexPrefix, const char *dataPrefix,
const UCPTrie *pTrie,
- const char *postfix) {
- usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength, postfix);
+ const char *postfix,
+ UTargetSyntax syntax) {
+ const char* indent = (syntax == UPRV_TARGET_SYNTAX_TOML) ? " " : "";
+ usrc_writeArray(f, indexPrefix, pTrie->index, 16, pTrie->indexLength, indent, postfix);
int32_t width=
pTrie->valueWidth==UCPTRIE_VALUE_BITS_16 ? 16 :
pTrie->valueWidth==UCPTRIE_VALUE_BITS_32 ? 32 :
pTrie->valueWidth==UCPTRIE_VALUE_BITS_8 ? 8 : 0;
- usrc_writeArray(f, dataPrefix, pTrie->data.ptr0, width, pTrie->dataLength, postfix);
+ usrc_writeArray(f, dataPrefix, pTrie->data.ptr0, width, pTrie->dataLength, indent, postfix);
}
U_CAPI void U_EXPORT2
@@ -261,24 +281,41 @@ usrc_writeUCPTrieStruct(FILE *f,
const char *prefix,
const UCPTrie *pTrie,
const char *indexName, const char *dataName,
- const char *postfix) {
+ const char *postfix,
+ UTargetSyntax syntax) {
if(prefix!=NULL) {
fputs(prefix, f);
}
- fprintf(
- f,
- " %s,\n" // index
- " { %s },\n", // data (union)
- indexName,
- dataName);
- fprintf(
- f,
+ if (syntax == UPRV_TARGET_SYNTAX_CCODE) {
+ fprintf(
+ f,
+ " %s,\n" // index
+ " { %s },\n", // data (union)
+ indexName,
+ dataName);
+ }
+ const char* pattern =
+ (syntax == UPRV_TARGET_SYNTAX_CCODE) ?
" %ld, %ld,\n" // indexLength, dataLength
" 0x%lx, 0x%x,\n" // highStart, shifted12HighStart
" %d, %d,\n" // type, valueWidth
" 0, 0,\n" // reserved32, reserved16
" 0x%x, 0x%lx,\n" // index3NullOffset, dataNullOffset
- " 0x%lx,\n", // nullValue
+ " 0x%lx,\n" // nullValue
+ :
+ "indexLength = %ld\n"
+ "dataLength = %ld\n"
+ "highStart = 0x%lx\n"
+ "shifted12HighStart = 0x%x\n"
+ "type = %d\n"
+ "valueWidth = %d\n"
+ "index3NullOffset = 0x%x\n"
+ "dataNullOffset = 0x%lx\n"
+ "nullValue = 0x%lx\n"
+ ;
+ fprintf(
+ f,
+ pattern,
(long)pTrie->indexLength, (long)pTrie->dataLength,
(long)pTrie->highStart, pTrie->shifted12HighStart,
pTrie->type, pTrie->valueWidth,
@@ -290,19 +327,107 @@ usrc_writeUCPTrieStruct(FILE *f,
}
U_CAPI void U_EXPORT2
-usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie) {
+usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie, UTargetSyntax syntax) {
int32_t width=
pTrie->valueWidth==UCPTRIE_VALUE_BITS_16 ? 16 :
pTrie->valueWidth==UCPTRIE_VALUE_BITS_32 ? 32 :
pTrie->valueWidth==UCPTRIE_VALUE_BITS_8 ? 8 : 0;
- char line[100], line2[100], line3[100];
- sprintf(line, "static const uint16_t %s_trieIndex[%%ld]={\n", name);
- sprintf(line2, "static const uint%d_t %s_trieData[%%ld]={\n", (int)width, name);
- usrc_writeUCPTrieArrays(f, line, line2, pTrie, "\n};\n\n");
- sprintf(line, "static const UCPTrie %s_trie={\n", name);
- sprintf(line2, "%s_trieIndex", name);
- sprintf(line3, "%s_trieData", name);
- usrc_writeUCPTrieStruct(f, line, pTrie, line2, line3, "};\n\n");
+ char line[100], line2[100], line3[100], line4[100];
+
+ switch (syntax) {
+ case UPRV_TARGET_SYNTAX_CCODE:
+ sprintf(line, "static const uint16_t %s_trieIndex[%%ld]={\n", name);
+ sprintf(line2, "static const uint%d_t %s_trieData[%%ld]={\n", (int)width, name);
+ sprintf(line3, "\n};\n\n");
+ break;
+ case UPRV_TARGET_SYNTAX_TOML:
+ sprintf(line, "index = [\n ");
+ sprintf(line2, "data_%d = [\n ", (int)width);
+ sprintf(line3, "\n]\n");
+ break;
+ default:
+ UPRV_UNREACHABLE_EXIT;
+ }
+ usrc_writeUCPTrieArrays(f, line, line2, pTrie, line3, syntax);
+
+ switch (syntax) {
+ case UPRV_TARGET_SYNTAX_CCODE:
+ sprintf(line, "static const UCPTrie %s_trie={\n", name);
+ sprintf(line2, "%s_trieIndex", name);
+ sprintf(line3, "%s_trieData", name);
+ sprintf(line4, "};\n\n");
+ break;
+ case UPRV_TARGET_SYNTAX_TOML:
+ line[0] = 0;
+ line2[0] = 0;
+ line3[0] = 0;
+ line4[0] = 0;
+ break;
+ default:
+ UPRV_UNREACHABLE_EXIT;
+ }
+ usrc_writeUCPTrieStruct(f, line, pTrie, line2, line3, line4, syntax);
+}
+
+U_CAPI void U_EXPORT2
+usrc_writeUnicodeSet(
+ FILE *f,
+ const USet *pSet,
+ UTargetSyntax syntax) {
+ // ccode is not yet supported
+ U_ASSERT(syntax == UPRV_TARGET_SYNTAX_TOML);
+
+ // Write out a list of ranges
+ const UnicodeSet* set = UnicodeSet::fromUSet(pSet);
+ UnicodeSetIterator it(*set);
+ fprintf(f, "# Inclusive ranges of the code points in the set.\n");
+ fprintf(f, "ranges = [\n");
+ bool seenFirstString = false;
+ while (it.nextRange()) {
+ if (it.isString()) {
+ if (!seenFirstString) {
+ seenFirstString = true;
+ fprintf(f, "]\nstrings = [\n");
+ }
+ const UnicodeString& str = it.getString();
+ fprintf(f, " ");
+ usrc_writeStringAsASCII(f, str.getBuffer(), str.length(), syntax);
+ fprintf(f, ",\n");
+ } else {
+ U_ASSERT(!seenFirstString);
+ UChar32 start = it.getCodepoint();
+ UChar32 end = it.getCodepointEnd();
+ fprintf(f, " [0x%x, 0x%x],\n", start, end);
+ }
+ }
+ fprintf(f, "]\n");
+}
+
+U_CAPI void U_EXPORT2
+usrc_writeUCPMap(
+ FILE *f,
+ const UCPMap *pMap,
+ icu::ValueNameGetter *valueNameGetter,
+ UTargetSyntax syntax) {
+ // ccode is not yet supported
+ U_ASSERT(syntax == UPRV_TARGET_SYNTAX_TOML);
+ (void) syntax; // silence unused variable errors
+
+ // Print out list of ranges
+ UChar32 start = 0, end;
+ uint32_t value;
+ fprintf(f, "# Code points `a` through `b` have value `v`, corresponding to `name`.\n");
+ fprintf(f, "ranges = [\n");
+ while ((end = ucpmap_getRange(pMap, start, UCPMAP_RANGE_NORMAL, 0, nullptr, nullptr, &value)) >= 0) {
+ if (valueNameGetter != nullptr) {
+ const char *name = valueNameGetter->getName(value);
+ fprintf(f, " {a=0x%x, b=0x%x, v=%u, name=\"%s\"},\n", start, end, value, name);
+ } else {
+ fprintf(f, " {a=0x%x, b=0x%x, v=%u},\n", start, end, value);
+ }
+ start = end + 1;
+ }
+ fprintf(f, "]\n");
}
U_CAPI void U_EXPORT2
@@ -343,3 +468,30 @@ usrc_writeArrayOfMostlyInvChars(FILE *f,
fputs(postfix, f);
}
}
+
+U_CAPI void U_EXPORT2
+usrc_writeStringAsASCII(FILE *f,
+ const UChar* ptr, int32_t length,
+ UTargetSyntax) {
+ // For now, assume all UTargetSyntax values are valid here.
+ fprintf(f, "\"");
+ int32_t i = 0;
+ UChar32 cp;
+ while (i < length) {
+ U16_NEXT(ptr, i, length, cp);
+ if (cp == u'"') {
+ fprintf(f, "\\\"");
+ } else if (ICU_Utility::isUnprintable(cp)) {
+ UnicodeString u16result;
+ ICU_Utility::escapeUnprintable(u16result, cp);
+ std::string u8result;
+ u16result.toUTF8String(u8result);
+ fprintf(f, "%s", u8result.data());
+ } else {
+ U_ASSERT(cp < 0x80);
+ char s[2] = {static_cast<char>(cp), 0};
+ fprintf(f, "%s", s);
+ }
+ }
+ fprintf(f, "\"");
+}
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.h
index 35ba256793c..784a9b9c7a7 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.h
@@ -23,10 +23,22 @@
#include <stdio.h>
#include "unicode/utypes.h"
+#include "unicode/ucpmap.h"
#include "unicode/ucptrie.h"
+#include "unicode/umutablecptrie.h"
+#include "unicode/uset.h"
#include "utrie2.h"
/**
+ * An input to some of the functions in this file specifying whether to write data
+ * as C/C++ code initializers or as TOML.
+ */
+typedef enum UTargetSyntax {
+ UPRV_TARGET_SYNTAX_CCODE = 0,
+ UPRV_TARGET_SYNTAX_TOML = 1,
+} UTargetSyntax;
+
+/**
* Creates a source text file and writes a header comment with the ICU copyright.
* Writes a C/Java-style comment with the generator name.
*/
@@ -38,7 +50,23 @@ usrc_create(const char *path, const char *filename, int32_t copyrightYear, const
* Writes the comment with # lines, as used in scripts and text data.
*/
U_CAPI FILE * U_EXPORT2
-usrc_createTextData(const char *path, const char *filename, const char *generator);
+usrc_createTextData(const char *path, const char *filename, int32_t copyrightYear, const char *generator);
+
+/**
+ * Writes the ICU copyright to a file stream, with configurable year and comment style.
+ */
+U_CAPI void U_EXPORT2
+usrc_writeCopyrightHeader(FILE *f, const char *prefix, int32_t copyrightYear);
+
+/**
+ * Writes information about the file being machine-generated.
+ */
+U_CAPI void U_EXPORT2
+usrc_writeFileNameGeneratedBy(
+ FILE *f,
+ const char *prefix,
+ const char *filename,
+ const char *generator);
/**
* Writes the contents of an array of 8/16/32-bit words.
@@ -51,6 +79,7 @@ U_CAPI void U_EXPORT2
usrc_writeArray(FILE *f,
const char *prefix,
const void *p, int32_t width, int32_t length,
+ const char *indent,
const char *postfix);
/**
@@ -83,7 +112,8 @@ U_CAPI void U_EXPORT2
usrc_writeUCPTrieArrays(FILE *f,
const char *indexPrefix, const char *dataPrefix,
const UCPTrie *pTrie,
- const char *postfix);
+ const char *postfix,
+ UTargetSyntax syntax);
/**
* Writes the UCPTrie struct values.
@@ -95,13 +125,50 @@ usrc_writeUCPTrieStruct(FILE *f,
const char *prefix,
const UCPTrie *pTrie,
const char *indexName, const char *dataName,
- const char *postfix);
+ const char *postfix,
+ UTargetSyntax syntax);
/**
* Writes the UCPTrie arrays and struct values.
*/
U_CAPI void U_EXPORT2
-usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie);
+usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie, UTargetSyntax syntax);
+
+/**
+ * Writes the UnicodeSet range and string lists.
+ */
+U_CAPI void U_EXPORT2
+usrc_writeUnicodeSet(
+ FILE *f,
+ const USet *pSet,
+ UTargetSyntax syntax);
+
+#ifdef __cplusplus
+
+U_NAMESPACE_BEGIN
+
+class U_TOOLUTIL_API ValueNameGetter {
+public:
+ virtual ~ValueNameGetter();
+ virtual const char *getName(uint32_t value) = 0;
+};
+
+U_NAMESPACE_END
+
+/**
+ * Writes the UCPMap ranges list.
+ *
+ * The "valueNameGetter" argument is optional; ignored if nullptr.
+ * If present, it will be used to look up value name strings.
+ */
+U_CAPI void U_EXPORT2
+usrc_writeUCPMap(
+ FILE *f,
+ const UCPMap *pMap,
+ icu::ValueNameGetter *valueNameGetter,
+ UTargetSyntax syntax);
+
+#endif // __cplusplus
/**
* Writes the contents of an array of mostly invariant characters.
@@ -119,4 +186,13 @@ usrc_writeArrayOfMostlyInvChars(FILE *f,
const char *p, int32_t length,
const char *postfix);
+/**
+ * Writes a syntactically valid Unicode string in all ASCII, escaping quotes
+ * and non-ASCII characters.
+ */
+U_CAPI void U_EXPORT2
+usrc_writeStringAsASCII(FILE *f,
+ const UChar* ptr, int32_t length,
+ UTargetSyntax syntax);
+
#endif
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.cpp b/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.cpp
index a9650cc5999..a6569903bcd 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.cpp
@@ -79,8 +79,8 @@ UXMLParser::UXMLParser(UErrorCode &status) :
// or "<!DOCTYPE foo [internal dtd]>
// TODO: we don't actually parse the DOCTYPE or internal subsets.
// Some internal dtd subsets could confuse this simple-minded
- // attempt at skipping over them, specifically, occcurences
- // of closeing square brackets. These could appear in comments,
+ // attempt at skipping over them, specifically, occurrences
+ // of closing square brackets. These could appear in comments,
// or in parameter entity declarations, for example.
mXMLDoctype(UnicodeString(
"(?s)<!DOCTYPE.*?(>|\\[.*?\\].*?>)", -1, US_INV
@@ -124,7 +124,7 @@ UXMLParser::UXMLParser(UErrorCode &status) :
//
// Note that attributes are scanned twice. The first time is with
// the regex for an entire element start. There, the attributes
- // are checked syntactically, but not separted out one by one.
+ // are checked syntactically, but not separated out one by one.
// Here, we match a single attribute, and make its name and
// attribute value available to the parser code.
mAttrValue(UnicodeString(XML_SPACES "+(" XML_NAME ")" XML_SPACES "*=" XML_SPACES "*"
@@ -243,7 +243,7 @@ UXMLParser::parseFile(const char *filename, UErrorCode &errorCode) {
UnicodeString attValue = mAttrValue.group(2, errorCode);
// Trim the quotes from the att value. These are left over from the original regex
- // that parsed the attribue, which couldn't conveniently strip them.
+ // that parsed the attribute, which couldn't conveniently strip them.
attValue.remove(0,1); // one char from the beginning
attValue.truncate(attValue.length()-1); // and one from the end.
@@ -498,11 +498,11 @@ UXMLParser::createElement(RegexMatcher &mEl, UErrorCode &status) {
UnicodeString attValue = mAttrValue.group(2, status);
// Trim the quotes from the att value. These are left over from the original regex
- // that parsed the attribue, which couldn't conveniently strip them.
+ // that parsed the attribute, which couldn't conveniently strip them.
attValue.remove(0,1); // one char from the beginning
attValue.truncate(attValue.length()-1); // and one from the end.
- // XML Attribue value normalization.
+ // XML Attribute value normalization.
// This is one of the really screwy parts of the XML spec.
// See http://www.w3.org/TR/2004/REC-xml11-20040204/#AVNormalize
// Note that non-validating parsers must treat all entities as type CDATA
@@ -592,7 +592,7 @@ UXMLParser::replaceCharRefs(UnicodeString &s, UErrorCode &status) {
mAmps.reset(s);
// See the initialization for the regex matcher mAmps.
// Which entity we've matched is determined by which capture group has content,
- // which is flaged by start() of that group not being -1.
+ // which is flagged by start() of that group not being -1.
while (mAmps.find()) {
if (mAmps.start(1, status) != -1) {
replacement.setTo((UChar)x_AMP);
@@ -658,7 +658,7 @@ UXMLParser::intern(const UnicodeString &s, UErrorCode &errorCode) {
return (const UnicodeString *)he->key.pointer;
} else {
// add this new name and return its hashed key pointer
- fNames.puti(s, 0, errorCode);
+ fNames.puti(s, 1, errorCode);
he=fNames.find(s);
return (const UnicodeString *)he->key.pointer;
}
diff --git a/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.h b/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.h
index 75c8ed7e53d..5a3a24c5ed9 100644
--- a/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.h
+++ b/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.h
@@ -116,7 +116,7 @@ public:
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
@@ -188,7 +188,7 @@ public:
/**
* ICU "poor man's RTTI", returns a UClassID for the actual class.
*/
- virtual UClassID getDynamicClassID() const;
+ virtual UClassID getDynamicClassID() const override;
/**
* ICU "poor man's RTTI", returns a UClassID for this class.
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/icuregions b/Build/source/libs/icu/icu-src/source/tools/tzcode/icuregions
index 91d5b3734d1..851f3242d19 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/icuregions
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/icuregions
@@ -10,6 +10,7 @@
# <zone_id> <region_code>
#
Africa/Asmera ER
+America/Coral_Harbour CA
America/Montreal CA
Europe/Simferopol UA
Pacific/Johnston UM
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp b/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
index 783f63d22b3..78d84ff445a 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
@@ -213,7 +213,9 @@ class ZoneIterator {
public:
ZoneIterator(UBool bAll = false) {
if (bAll) {
- zenum = TimeZone::createEnumeration();
+ UErrorCode status = U_ZERO_ERROR;
+ zenum = TimeZone::createEnumeration(status);
+ // TODO: Add error case handling later.
}
else {
zenum = NULL;
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/localtime.c b/Build/source/libs/icu/icu-src/source/tools/tzcode/localtime.c
index ff07c70925d..0d33856647e 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/localtime.c
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/localtime.c
@@ -564,7 +564,7 @@ tzload(register const char *name, register struct state *const sp,
}
}
/*
- ** If type 0 is is unused in transitions,
+ ** If type 0 is unused in transitions,
** it's the type to use for early times.
*/
for (i = 0; i < sp->typecnt; ++i)
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/readme.txt b/Build/source/libs/icu/icu-src/source/tools/tzcode/readme.txt
index 5ec8bb3d170..9a3cf97703e 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/readme.txt
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/readme.txt
@@ -25,7 +25,7 @@ behavior, as well as the full set of Olson compatibility IDs.
References:
-ICU4C: http://www.icu-project.org/
+ICU4C: https://icu.unicode.org/
Olson: ftp://ftp.iana.org/tz/releases/
----------------------------------------------------------------------
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp b/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp
index dcdbf65ceab..b3c9f99c30e 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp
@@ -373,7 +373,7 @@ void readzoneinfo(ifstream& file, ZoneInfo& info, bool is64bitData) {
}
} else if (transitionTimes[i] > HIGHEST_TIME32) {
// Skipping the rest of the transition data. We cannot put such
- // transitions into zoneinfo.res, because data is limited to singed
+ // transitions into zoneinfo.res, because data is limited to signed
// 32bit int by the ICU resource bundle.
break;
} else {
@@ -1047,7 +1047,7 @@ void ZoneInfo::print(ostream& os, const string& id) const {
os << " }" << endl;
}
- // 32bit transtions
+ // 32bit transitions
if (trn != transitions.end() && trn->time < HIGHEST_TIME32) {
os << " trans:intvector { ";
for (first = true; trn != transitions.end() && trn->time < HIGHEST_TIME32; ++trn) {
@@ -1060,7 +1060,7 @@ void ZoneInfo::print(ostream& os, const string& id) const {
os << " }" << endl;
}
- // post 32bit transitons
+ // post 32bit transitions
if (trn != transitions.end()) {
os << " transPost32:intvector { ";
for (first = true; trn != transitions.end(); ++trn) {
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.h b/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.h
index b88442f89ed..c077c216977 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.h
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.h
@@ -40,7 +40,7 @@ typedef unsigned char ICUZoneinfoVersion;
#define ICU_TZ_RESOURCE_OLD "zoneinfo"
#define ICU_TZ_RESOURCE "zoneinfo64"
-/* File containinng custom zone-region mapping. */
+/* File containing custom zone-region mapping. */
#define ICU_REGIONS "icuregions"
#endif
diff --git a/Build/source/libs/icu/icu-src/source/tools/tzcode/zic.c b/Build/source/libs/icu/icu-src/source/tools/tzcode/zic.c
index f38498c6ee2..e1b9b54c284 100644
--- a/Build/source/libs/icu/icu-src/source/tools/tzcode/zic.c
+++ b/Build/source/libs/icu/icu-src/source/tools/tzcode/zic.c
@@ -2564,7 +2564,7 @@ outzone(const struct zone * const zpfirst, const int zonecount)
* because the previous type is valid until the first
* transition defined by the final rule. Otherwise
* we may see unexpected offset shift at the
- * begining of the year when the final rule takes
+ * beginning of the year when the final rule takes
* effect.
*
* Note: This may results some 64bit second transitions
diff --git a/Build/source/libs/icu/version.ac b/Build/source/libs/icu/version.ac
index a102de17fdc..e6318f9a850 100644
--- a/Build/source/libs/icu/version.ac
+++ b/Build/source/libs/icu/version.ac
@@ -1,5 +1,5 @@
dnl $Id$
-dnl Copyright 2016-2021 Karl Berry <tex-live@tug.org>
+dnl Copyright 2016-2022 Karl Berry <tex-live@tug.org>
dnl Copyright 2011-2015 Peter Breitenlohner <tex-live@tug.org>
dnl
dnl This file is free software; the copyright holder
@@ -7,4 +7,4 @@ dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl
dnl m4-include this file to define the current ICU version as icu_version.
-m4_define([icu_version], [68.2])
+m4_define([icu_version], [70.1])